/*! * @brief USB device callback function. * * This function handles the usb device specific requests. * * @param handle The USB device handle. * @param event The USB device event type. * @param param The parameter of the device specific request. * * @return A USB error code or kStatus_USB_Success. */ usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, void *param) { usb_status_t error = kStatus_USB_Error; uint8_t *temp8 = (uint8_t *)param; switch (event) { case kUSB_DeviceEventBusReset: { USB_DeviceControlPipeInit(handle); g_composite.attach = 0; #if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0) if (kStatus_USB_Success == USB_DeviceGetStatus(handle, kUSB_DeviceStatusSpeed, &g_composite.speed)) { USB_DeviceSetSpeed(handle, g_composite.speed); } #endif } break; case kUSB_DeviceEventSetConfiguration: if (param) { g_composite.attach = 1; g_composite.currentConfiguration = *temp8; USB_DeviceCdcVcomSetConfigure(handle, *temp8); USB_DeviceMscDiskSetConfigure(handle, *temp8); error = kStatus_USB_Success; } break; default: break; } return error; }
/*! * @brief Handle the common class callback. * * This function handles the common class callback. * * @param handle The device handle, got from the USB_DeviceInit. * @param event The event codes. Please refer to the enumeration usb_device_event_t. * @param param The param type is determined by the event code. * * @return A USB error code or kStatus_USB_Success. */ usb_status_t USB_DeviceClassCallback(usb_device_handle handle, uint32_t event, void *param) { usb_device_common_class_struct_t *classHandle; usb_status_t error = kStatus_USB_Error; /* Get the common class handle according to the device handle. */ error = USB_DeviceClassGetHandleByDeviceHandle(handle, &classHandle); if (kStatus_USB_Success != error) { return error; } if (kUSB_DeviceEventBusReset == event) { /* Initialize the control pipes */ USB_DeviceControlPipeInit(handle, classHandle); /* Notify the classes the USB bus reset signal detected. */ USB_DeviceClassEvent(handle, kUSB_DeviceClassEventDeviceReset, classHandle); } /* Call the application device callback function. */ error = classHandle->configList->deviceCallback(handle, event, param); return error; }
/*! * @brief USB device callback function. * * This function handles the usb device specific requests. * * @param handle The USB device handle. * @param event The USB device event type. * @param param The parameter of the device specific request. * * @return A USB error code or kStatus_USB_Success. */ usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, void *param) { usb_status_t error = kStatus_USB_Error; uint8_t *temp8 = (uint8_t *)param; switch (event) { case kUSB_DeviceEventBusReset: { /* USB bus reset signal detected */ /* Initialize the control IN and OUT pipes */ USB_DeviceControlPipeInit(handle); g_composite.attach = 0U; g_InterfaceIsSet = 0U; #if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0U) if (kStatus_USB_Success == USB_DeviceGetStatus(handle, kUSB_DeviceStatusSpeed, &g_composite.speed)) { USB_DeviceSetSpeed(g_composite.speed); } #endif } break; case kUSB_DeviceEventSetConfiguration: if (USB_COMPOSITE_CONFIGURE_INDEX == (*temp8)) { g_composite.attach = 1U; g_composite.currentConfiguration = *temp8; USB_DeviceAudioGeneratorSetConfigure(handle, *temp8); USB_DeviceHidMouseSetConfigure(handle, *temp8); error = kStatus_USB_Success; } break; case kUSB_DeviceEventSetInterface: if (g_composite.attach) { uint8_t interface = (uint8_t)(*temp8); uint8_t alternateSetting = (uint8_t)g_UsbDeviceInterface[interface]; if (interface < USB_DEVICE_INTERFACE_COUNT) { if (USB_AUDIO_GENERATOR_STREAM_INTERFACE_INDEX == interface) { USB_DeviceAudioGeneratorSetInterface(handle, interface, alternateSetting); } error = kStatus_USB_Success; } } break; default: break; } return error; }
/* Device callback */ usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, void *param) { usb_status_t error = kStatus_USB_Success; uint8_t *temp8 = (uint8_t *)param; switch (event) { case kUSB_DeviceEventBusReset: { /* USB bus reset signal detected */ /* Initialize the control IN and OUT pipes */ USB_DeviceControlPipeInit(handle); g_UsbDeviceComposite.attach = 0U; #if defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0U) /* Get USB speed to configure the device, including max packet size and interval of the endpoints. */ if (kStatus_USB_Success == USB_DeviceGetStatus(handle, kUSB_DeviceStatusSpeed, &g_UsbDeviceComposite.speed)) { USB_DeviceSetSpeed(g_UsbDeviceComposite.speed); } #endif } break; case kUSB_DeviceEventSetConfiguration: if (USB_COMPOSITE_CONFIGURE_INDEX == (*temp8)) { /* If the confguration is valid, set HID keyboard */ USB_DeviceHidKeyboardSetConfigure(handle, (*temp8)); /* If the confguration is valid, set HID mouse */ USB_DeviceHidMouseSetConfigure(handle, (*temp8)); } else { } g_UsbDeviceComposite.attach = 1U; break; default: break; } return error; }
/*! * @brief USB device callback function. * * This function handles the usb device specific requests. * * @param handle The USB device handle. * @param event The USB device event type. * @param param The parameter of the device specific request. * * @return A USB error code or kStatus_USB_Success. */ usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, void *param) { usb_status_t error = kStatus_USB_Error; uint8_t *temp8 = (uint8_t *)param; switch (event) { case kUSB_DeviceEventBusReset: { USB_DeviceControlPipeInit(s_cdcVcom.deviceHandle); s_cdcVcom.attach = 0; #if (defined(USB_DEVICE_CONFIG_EHCI) && (USB_DEVICE_CONFIG_EHCI > 0)) || \ (defined(USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS > 0U)) if (kStatus_USB_Success == USB_DeviceGetStatus(s_cdcVcom.deviceHandle, kUSB_DeviceStatusSpeed, &s_cdcVcom.speed)) { USB_DeviceSetSpeed(handle, s_cdcVcom.speed); } #endif } break; case kUSB_DeviceEventSetConfiguration: if (param) { s_cdcVcom.attach = 1; s_cdcVcom.currentConfiguration = *temp8; if (USB_CDC_VCOM_CONFIGURE_INDEX == (*temp8)) { usb_device_endpoint_init_struct_t epInitStruct; usb_device_endpoint_callback_struct_t endpointCallback; /* Initiailize endpoint for interrupt pipe */ endpointCallback.callbackFn = USB_DeviceCdcAcmInterruptIn; endpointCallback.callbackParam = handle; epInitStruct.zlt = 0; epInitStruct.transferType = USB_ENDPOINT_INTERRUPT; epInitStruct.endpointAddress = USB_CDC_VCOM_INTERRUPT_IN_ENDPOINT | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT); if (USB_SPEED_HIGH == s_cdcVcom.speed) { epInitStruct.maxPacketSize = HS_CDC_VCOM_INTERRUPT_IN_PACKET_SIZE; } else { epInitStruct.maxPacketSize = FS_CDC_VCOM_INTERRUPT_IN_PACKET_SIZE; } USB_DeviceInitEndpoint(s_cdcVcom.deviceHandle, &epInitStruct, &endpointCallback); /* Initiailize endpoints for bulk pipe */ endpointCallback.callbackFn = USB_DeviceCdcAcmBulkIn; endpointCallback.callbackParam = handle; epInitStruct.zlt = 0; epInitStruct.transferType = USB_ENDPOINT_BULK; epInitStruct.endpointAddress = USB_CDC_VCOM_BULK_IN_ENDPOINT | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT); if (USB_SPEED_HIGH == s_cdcVcom.speed) { epInitStruct.maxPacketSize = HS_CDC_VCOM_BULK_IN_PACKET_SIZE; } else { epInitStruct.maxPacketSize = FS_CDC_VCOM_BULK_IN_PACKET_SIZE; } USB_DeviceInitEndpoint(s_cdcVcom.deviceHandle, &epInitStruct, &endpointCallback); endpointCallback.callbackFn = USB_DeviceCdcAcmBulkOut; endpointCallback.callbackParam = handle; epInitStruct.zlt = 0; epInitStruct.transferType = USB_ENDPOINT_BULK; epInitStruct.endpointAddress = USB_CDC_VCOM_BULK_OUT_ENDPOINT | (USB_OUT << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT); if (USB_SPEED_HIGH == s_cdcVcom.speed) { epInitStruct.maxPacketSize = HS_CDC_VCOM_BULK_OUT_PACKET_SIZE; } else { epInitStruct.maxPacketSize = FS_CDC_VCOM_BULK_OUT_PACKET_SIZE; } USB_DeviceInitEndpoint(s_cdcVcom.deviceHandle, &epInitStruct, &endpointCallback); if (USB_SPEED_HIGH == s_cdcVcom.speed) { s_usbBulkMaxPacketSize = HS_CDC_VCOM_BULK_OUT_PACKET_SIZE; } else { s_usbBulkMaxPacketSize = FS_CDC_VCOM_BULK_OUT_PACKET_SIZE; } } } break; default: break; } return error; }