USB Libraries Help > USB Device Libraries > USB Device Layer Library > Library Interface > a) System Interaction Functions > USB_DEVICE_Initialize Function
MPLAB Harmony USB Stack
USB_DEVICE_Initialize Function

This function initializes an instance of USB device layer, making it ready for clients to open and use it. The number of instances is limited by the value of macro USB_DEVICE_MAX_INSTANCES defined in system_config.h file.

C
SYS_MODULE_OBJ USB_DEVICE_Initialize(
    const SYS_MODULE_INDEX instanceIndex, 
    const SYS_MODULE_INIT * const init
);
Preconditions

None.

Parameters
Parameters 
Description 
instanceIndex 
In case of microcontrollers with multiple USB peripherals, user can create multiple instances of USB device layer. Parameter instanceIndex identifies this instance.
 
init 
Pointer to a data structure containing any data necessary to initialize the USB device layer 
Returns

If successful, returns a valid handle to a device layer object. Otherwise, it returns SYS_MODULE_OBJ_INVALID.

Remarks

This routine must be called before any other USB Device Layer routine is called and after the initialization of USB Device Driver. This routine should only be called once during system initialization.

Example
// This code example shows the initialization of the 
// the USB Device Layer. Note how an endpoint table is
// created and assigned. 

USB_DEVICE_INIT deviceLayerInit;
SYS_MODULE_OBJ usbDeviceObj;
uint8_t __attribute__((aligned(512))) endpointTable[USB_DEVICE_ENDPOINT_TABLE_SIZE]; 

// System module initialization
deviceLayerInit.moduleInit.value = SYS_MODULE_POWER_RUN_FULL;

// Identifies peripheral (PLIB-level) ID
deviceLayerInit.usbID = USB_ID_1;

// Boolean flag: true -> Stop USB module in Idle Mode
deviceLayerInit.stopInIdle = false;

// Boolean flag: true -> Suspend USB in Sleep Mode
deviceLayerInit.suspendInSleep = false;

// Interrupt Source for USB module
deviceLayerInit.interruptSource = INT_SOURCE_USB_1;

// Number of function drivers registered to this instance of the
// USB device layer 
deviceLayerInit.registeredFuncCount = 1;

// Function driver table registered to this instance of the USB device layer
deviceLayerInit.registeredFunctions = funcRegistrationTable;

// Pointer to USB Descriptor structure 
deviceLayerInit.usbMasterDescriptor   = &usbMasterDescriptor;

// Pointer to an endpoint table.
deviceLayerInit.endpointTable = endpointTable;

// USB device initialization
usbDeviceObj = USB_DEVICE_Initialize(USB_DEVICE_INDEX_0, &deviceLayerInit);
  
if (SYS_MODULE_OBJ_INVALID == usbDeviceObj)
{
    // Handle error
}