2.2.4.8 USB_DEVICE_EventHandlerSet Function
C
void USB_DEVICE_EventHandlerSet(
USB_DEVICE_HANDLE usbDeviceHandle,
const USB_DEVICE_EVENT_HANDLER callBackFunc,
uintptr_t context
);
Summary
This is the USB Device Layer Event Handler Callback Set function. A client can receive USB Device Layer event by using this function to register and event handler callback function. The client can additionally specify a specific context which will returned with the event handler callback function.
Precondition
The device layer must have been initialized by calling USB_DEVICE_Initialize and a valid handle to the instance must have been obtained by calling USB_DEVICE_Open.
Parameters
| Parameters | Description |
| usbDeviceHandle | Pointer to the device layer handle that is returned from USB_DEVICE_Open. |
| callBackFunc | Pointer to the call back function. The device layer calls notifies the client about bus event by calling this function. |
| context | Client specific context. |
Returns
None.
Example
// This code example shows how the application can set
// a Device Layer Event Handler.
// Application states
typedef enum
{
//Application's state machine's initial state.
APP_STATE_INIT=0,
APP_STATE_SERVICE_TASKS,
APP_STATE_WAIT_FOR_CONFIGURATION,
} APP_STATES;
USB_DEVICE_HANDLE usbDeviceHandle;
APP_STATES appState;
// This is the application device layer event handler function.
USB_DEVICE_EVENT_RESPONSE APP_USBDeviceEventHandler
(
USB_DEVICE_EVENT event,
void * pData,
uintptr_t context
)
{
USB_SETUP_PACKET * setupPacket;
switch(event)
{
case USB_DEVICE_EVENT_POWER_DETECTED:
// This event in generated when VBUS is detected. Attach the device
USB_DEVICE_Attach(usbDeviceHandle);
break;
case USB_DEVICE_EVENT_POWER_REMOVED:
// This event is generated when VBUS is removed. Detach the device
USB_DEVICE_Detach (usbDeviceHandle);
break;
case USB_DEVICE_EVENT_CONFIGURED:
// This event indicates that Host has set Configuration in the Device.
break;
case USB_DEVICE_EVENT_CONTROL_TRANSFER_SETUP_REQUEST:
// This event indicates a Control transfer setup stage has been completed.
setupPacket = (USB_SETUP_PACKET *)pData;
// Parse the setup packet and respond with a USB_DEVICE_ControlSend(),
// USB_DEVICE_ControlReceive or USB_DEVICE_ControlStatus().
break;
case USB_DEVICE_EVENT_CONTROL_TRANSFER_DATA_SENT:
// This event indicates that a Control transfer Data has been sent to Host.
break;
case USB_DEVICE_EVENT_CONTROL_TRANSFER_DATA_RECEIVED:
// This event indicates that a Control transfer Data has been received from Host.
break;
case USB_DEVICE_EVENT_CONTROL_TRANSFER_ABORTED:
// This event indicates a control transfer was aborted.
break;
case USB_DEVICE_EVENT_SUSPENDED:
break;
case USB_DEVICE_EVENT_RESUMED:
break;
case USB_DEVICE_EVENT_ERROR:
break;
case USB_DEVICE_EVENT_RESET:
break;
case USB_DEVICE_EVENT_SOF:
// This event indicates an SOF is detected on the bus. The USB_DEVICE_SOF_EVENT_ENABLE
// macro should be defined to get this event.
break;
default:
break;
}
}
void APP_Tasks ( void )
{
// Check the application's current state.
switch ( appState )
{
// Application's initial state.
case APP_STATE_INIT:
// Open the device layer
usbDeviceHandle = USB_DEVICE_Open( USB_DEVICE_INDEX_0,
DRV_IO_INTENT_READWRITE );
if(usbDeviceHandle != USB_DEVICE_HANDLE_INVALID)
{
// Register a callback with device layer to get event notification
USB_DEVICE_EventHandlerSet(usbDeviceHandle,
APP_USBDeviceEventHandler, 0);
appState = APP_STATE_WAIT_FOR_CONFIGURATION;
}
else
{
// The Device Layer is not ready to be opened. We should try
// gain later.
}
break;
case APP_STATE_SERVICE_TASKS:
break;
// The default state should never be executed.
default:
break;
}
}
Remarks
None.
