Simplify USB_DeviceCallback() and its surroundings.
This commit is contained in:
+47
-77
@@ -19,28 +19,16 @@
|
|||||||
#include "usb_keyboard_descriptors.h"
|
#include "usb_keyboard_descriptors.h"
|
||||||
#include "usb_mouse_descriptors.h"
|
#include "usb_mouse_descriptors.h"
|
||||||
|
|
||||||
void BOARD_InitHardware(void);
|
|
||||||
|
|
||||||
static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, void *param);
|
static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event, void *param);
|
||||||
static void USB_DeviceApplicationInit(void);
|
static usb_device_composite_struct_t UsbDeviceComposite;
|
||||||
|
|
||||||
static usb_device_composite_struct_t g_UsbDeviceComposite;
|
usb_device_class_config_struct_t UsbDeviceCompositeClassConfig[USB_COMPOSITE_INTERFACE_COUNT] = {
|
||||||
|
{USB_DeviceHidKeyboardCallback, (class_handle_t)NULL, &UsbKeyboardClass},
|
||||||
usb_device_class_config_struct_t g_CompositeClassConfig[USB_COMPOSITE_INTERFACE_COUNT] = {
|
{USB_DeviceHidMouseCallback, (class_handle_t)NULL, &UsbDeviceMouseClass}
|
||||||
{
|
|
||||||
USB_DeviceHidKeyboardCallback,
|
|
||||||
(class_handle_t)NULL,
|
|
||||||
&UsbKeyboardClass,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
USB_DeviceHidMouseCallback,
|
|
||||||
(class_handle_t)NULL,
|
|
||||||
&UsbDeviceMouseClass,
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
usb_device_class_config_list_struct_t g_UsbDeviceCompositeConfigList = {
|
usb_device_class_config_list_struct_t g_UsbDeviceCompositeConfigList = {
|
||||||
g_CompositeClassConfig,
|
UsbDeviceCompositeClassConfig,
|
||||||
USB_DeviceCallback,
|
USB_DeviceCallback,
|
||||||
USB_COMPOSITE_INTERFACE_COUNT,
|
USB_COMPOSITE_INTERFACE_COUNT,
|
||||||
};
|
};
|
||||||
@@ -51,83 +39,65 @@ static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event,
|
|||||||
uint16_t *temp16 = (uint16_t *)param;
|
uint16_t *temp16 = (uint16_t *)param;
|
||||||
uint8_t *temp8 = (uint8_t *)param;
|
uint8_t *temp8 = (uint8_t *)param;
|
||||||
|
|
||||||
|
if (!param && event != kUSB_DeviceEventBusReset && event != kUSB_DeviceEventSetInterface) {
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case kUSB_DeviceEventBusReset:
|
case kUSB_DeviceEventBusReset:
|
||||||
g_UsbDeviceComposite.attach = 0U;
|
UsbDeviceComposite.attach = 0U;
|
||||||
error = kStatus_USB_Success;
|
error = kStatus_USB_Success;
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventSetConfiguration:
|
case kUSB_DeviceEventSetConfiguration:
|
||||||
if (param) {
|
UsbDeviceComposite.attach = 1U;
|
||||||
g_UsbDeviceComposite.attach = 1U;
|
UsbDeviceComposite.currentConfiguration = *temp8;
|
||||||
g_UsbDeviceComposite.currentConfiguration = *temp8;
|
USB_DeviceHidMouseSetConfigure(UsbDeviceComposite.hidMouseHandle, *temp8);
|
||||||
USB_DeviceHidMouseSetConfigure(g_UsbDeviceComposite.hidMouseHandle, *temp8);
|
USB_DeviceHidKeyboardSetConfigure(UsbDeviceComposite.hidKeyboardHandle, *temp8);
|
||||||
USB_DeviceHidKeyboardSetConfigure(g_UsbDeviceComposite.hidKeyboardHandle, *temp8);
|
error = kStatus_USB_Success;
|
||||||
error = kStatus_USB_Success;
|
break;
|
||||||
}
|
case kUSB_DeviceEventGetConfiguration:
|
||||||
|
*temp8 = UsbDeviceComposite.currentConfiguration;
|
||||||
|
error = kStatus_USB_Success;
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventSetInterface:
|
case kUSB_DeviceEventSetInterface:
|
||||||
if (g_UsbDeviceComposite.attach) {
|
if (UsbDeviceComposite.attach) {
|
||||||
uint8_t interface = (uint8_t)((*temp16 & 0xFF00U) >> 0x08U);
|
uint8_t interface = (uint8_t)((*temp16 & 0xFF00U) >> 0x08U);
|
||||||
uint8_t alternateSetting = (uint8_t)(*temp16 & 0x00FFU);
|
uint8_t alternateSetting = (uint8_t)(*temp16 & 0x00FFU);
|
||||||
if (interface < USB_COMPOSITE_INTERFACE_COUNT) {
|
if (interface < USB_COMPOSITE_INTERFACE_COUNT) {
|
||||||
g_UsbDeviceComposite.currentInterfaceAlternateSetting[interface] = alternateSetting;
|
UsbDeviceComposite.currentInterfaceAlternateSetting[interface] = alternateSetting;
|
||||||
USB_DeviceHidMouseSetInterface(g_UsbDeviceComposite.hidMouseHandle, interface, alternateSetting);
|
USB_DeviceHidMouseSetInterface(UsbDeviceComposite.hidMouseHandle, interface, alternateSetting);
|
||||||
USB_DeviceHidKeyboardSetInterface(g_UsbDeviceComposite.hidKeyboardHandle, interface,
|
USB_DeviceHidKeyboardSetInterface(UsbDeviceComposite.hidKeyboardHandle, interface,
|
||||||
alternateSetting);
|
alternateSetting);
|
||||||
error = kStatus_USB_Success;
|
error = kStatus_USB_Success;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetConfiguration:
|
case kUSB_DeviceEventGetInterface: ;
|
||||||
if (param) {
|
uint8_t interface = (uint8_t)((*temp16 & 0xFF00U) >> 0x08U);
|
||||||
*temp8 = g_UsbDeviceComposite.currentConfiguration;
|
if (interface < USB_COMPOSITE_INTERFACE_COUNT) {
|
||||||
|
*temp16 = (*temp16 & 0xFF00U) | UsbDeviceComposite.currentInterfaceAlternateSetting[interface];
|
||||||
error = kStatus_USB_Success;
|
error = kStatus_USB_Success;
|
||||||
}
|
} else {
|
||||||
break;
|
error = kStatus_USB_InvalidRequest;
|
||||||
case kUSB_DeviceEventGetInterface:
|
|
||||||
if (param) {
|
|
||||||
uint8_t interface = (uint8_t)((*temp16 & 0xFF00U) >> 0x08U);
|
|
||||||
if (interface < USB_COMPOSITE_INTERFACE_COUNT) {
|
|
||||||
*temp16 = (*temp16 & 0xFF00U) | g_UsbDeviceComposite.currentInterfaceAlternateSetting[interface];
|
|
||||||
error = kStatus_USB_Success;
|
|
||||||
} else {
|
|
||||||
error = kStatus_USB_InvalidRequest;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetDeviceDescriptor:
|
case kUSB_DeviceEventGetDeviceDescriptor:
|
||||||
if (param) {
|
error = USB_DeviceGetDeviceDescriptor(handle, (usb_device_get_device_descriptor_struct_t *)param);
|
||||||
error = USB_DeviceGetDeviceDescriptor(handle, (usb_device_get_device_descriptor_struct_t *)param);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetConfigurationDescriptor:
|
case kUSB_DeviceEventGetConfigurationDescriptor:
|
||||||
if (param) {
|
error = USB_DeviceGetConfigurationDescriptor(handle, (usb_device_get_configuration_descriptor_struct_t *)param);
|
||||||
error = USB_DeviceGetConfigurationDescriptor(handle,
|
|
||||||
(usb_device_get_configuration_descriptor_struct_t *)param);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetStringDescriptor:
|
case kUSB_DeviceEventGetStringDescriptor:
|
||||||
if (param) {
|
error = USB_DeviceGetStringDescriptor(handle, (usb_device_get_string_descriptor_struct_t *)param);
|
||||||
error = USB_DeviceGetStringDescriptor(handle, (usb_device_get_string_descriptor_struct_t *)param);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetHidDescriptor:
|
case kUSB_DeviceEventGetHidDescriptor:
|
||||||
if (param) {
|
error = USB_DeviceGetHidDescriptor(handle, (usb_device_get_hid_descriptor_struct_t *)param);
|
||||||
error = USB_DeviceGetHidDescriptor(handle, (usb_device_get_hid_descriptor_struct_t *)param);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetHidReportDescriptor:
|
case kUSB_DeviceEventGetHidReportDescriptor:
|
||||||
if (param) {
|
error = USB_DeviceGetHidReportDescriptor(handle, (usb_device_get_hid_report_descriptor_struct_t *)param);
|
||||||
error =
|
|
||||||
USB_DeviceGetHidReportDescriptor(handle, (usb_device_get_hid_report_descriptor_struct_t *)param);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case kUSB_DeviceEventGetHidPhysicalDescriptor:
|
case kUSB_DeviceEventGetHidPhysicalDescriptor:
|
||||||
if (param) {
|
error = USB_DeviceGetHidPhysicalDescriptor(handle, (usb_device_get_hid_physical_descriptor_struct_t *)param);
|
||||||
error = USB_DeviceGetHidPhysicalDescriptor(handle, (usb_device_get_hid_physical_descriptor_struct_t *)param);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,7 +106,7 @@ static usb_status_t USB_DeviceCallback(usb_device_handle handle, uint32_t event,
|
|||||||
|
|
||||||
void USB0_IRQHandler(void)
|
void USB0_IRQHandler(void)
|
||||||
{
|
{
|
||||||
USB_DeviceKhciIsrFunction(g_UsbDeviceComposite.deviceHandle);
|
USB_DeviceKhciIsrFunction(UsbDeviceComposite.deviceHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void USB_DeviceApplicationInit(void)
|
static void USB_DeviceApplicationInit(void)
|
||||||
@@ -149,24 +119,24 @@ static void USB_DeviceApplicationInit(void)
|
|||||||
CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcIrc48M, 48000000U);
|
CLOCK_EnableUsbfs0Clock(kCLOCK_UsbSrcIrc48M, 48000000U);
|
||||||
|
|
||||||
// Set composite device to default state.
|
// Set composite device to default state.
|
||||||
g_UsbDeviceComposite.speed = USB_SPEED_FULL;
|
UsbDeviceComposite.speed = USB_SPEED_FULL;
|
||||||
g_UsbDeviceComposite.attach = 0U;
|
UsbDeviceComposite.attach = 0U;
|
||||||
g_UsbDeviceComposite.hidMouseHandle = (class_handle_t)NULL;
|
UsbDeviceComposite.hidMouseHandle = (class_handle_t)NULL;
|
||||||
g_UsbDeviceComposite.hidKeyboardHandle = (class_handle_t)NULL;
|
UsbDeviceComposite.hidKeyboardHandle = (class_handle_t)NULL;
|
||||||
g_UsbDeviceComposite.deviceHandle = NULL;
|
UsbDeviceComposite.deviceHandle = NULL;
|
||||||
|
|
||||||
usb_status_t deviceStatus = USB_DeviceClassInit(
|
usb_status_t deviceStatus = USB_DeviceClassInit(
|
||||||
CONTROLLER_ID, &g_UsbDeviceCompositeConfigList, &g_UsbDeviceComposite.deviceHandle);
|
CONTROLLER_ID, &g_UsbDeviceCompositeConfigList, &UsbDeviceComposite.deviceHandle);
|
||||||
|
|
||||||
if (kStatus_USB_Success != deviceStatus) {
|
if (kStatus_USB_Success != deviceStatus) {
|
||||||
usb_echo("USB device composite demo init failed\r\n");
|
usb_echo("USB device composite demo init failed\r\n");
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
usb_echo("USB device composite demo\r\n");
|
usb_echo("USB device composite demo\r\n");
|
||||||
g_UsbDeviceComposite.hidKeyboardHandle = g_UsbDeviceCompositeConfigList.config[0].classHandle;
|
UsbDeviceComposite.hidKeyboardHandle = g_UsbDeviceCompositeConfigList.config[0].classHandle;
|
||||||
g_UsbDeviceComposite.hidMouseHandle = g_UsbDeviceCompositeConfigList.config[1].classHandle;
|
UsbDeviceComposite.hidMouseHandle = g_UsbDeviceCompositeConfigList.config[1].classHandle;
|
||||||
USB_DeviceHidKeyboardInit(&g_UsbDeviceComposite);
|
USB_DeviceHidKeyboardInit(&UsbDeviceComposite);
|
||||||
USB_DeviceHidMouseInit(&g_UsbDeviceComposite);
|
USB_DeviceHidMouseInit(&UsbDeviceComposite);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install ISR, set priority, and enable IRQ.
|
// Install ISR, set priority, and enable IRQ.
|
||||||
@@ -174,7 +144,7 @@ static void USB_DeviceApplicationInit(void)
|
|||||||
NVIC_EnableIRQ((IRQn_Type)irqNumber);
|
NVIC_EnableIRQ((IRQn_Type)irqNumber);
|
||||||
|
|
||||||
// Start the device function.
|
// Start the device function.
|
||||||
USB_DeviceRun(g_UsbDeviceComposite.deviceHandle);
|
USB_DeviceRun(UsbDeviceComposite.deviceHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ uint8_t UsbManufacturerString[USB_MANUFACTURER_STRING_DESCRIPTOR_LENGTH] = {
|
|||||||
'.', 0x00U,
|
'.', 0x00U,
|
||||||
};
|
};
|
||||||
|
|
||||||
uint8_t UsbProductString[USB_DESCRIPTOR_LENGTH_STRING2] = {
|
uint8_t UsbProductString[USB_PRODUCT_STRING_DESCRIPTOR_LENGTH] = {
|
||||||
sizeof(UsbProductString),
|
sizeof(UsbProductString),
|
||||||
USB_DESCRIPTOR_TYPE_STRING,
|
USB_DESCRIPTOR_TYPE_STRING,
|
||||||
'C', 0x00U,
|
'C', 0x00U,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
#define USB_DESCRIPTOR_LENGTH_HID (9U)
|
#define USB_DESCRIPTOR_LENGTH_HID (9U)
|
||||||
#define USB_DESCRIPTOR_LENGTH_STRING0 (4U)
|
#define USB_DESCRIPTOR_LENGTH_STRING0 (4U)
|
||||||
#define USB_MANUFACTURER_STRING_DESCRIPTOR_LENGTH (58U)
|
#define USB_MANUFACTURER_STRING_DESCRIPTOR_LENGTH (58U)
|
||||||
#define USB_DESCRIPTOR_LENGTH_STRING2 (34U)
|
#define USB_PRODUCT_STRING_DESCRIPTOR_LENGTH (34U)
|
||||||
|
|
||||||
#define USB_DEVICE_CONFIGURATION_COUNT (1U)
|
#define USB_DEVICE_CONFIGURATION_COUNT (1U)
|
||||||
#define USB_STRING_DESCRIPTOR_COUNT (5U)
|
#define USB_STRING_DESCRIPTOR_COUNT (5U)
|
||||||
|
|||||||
Reference in New Issue
Block a user