{ sizeof(HIDDescriptor1), HIDGenericDescriptor_HID, HIDDescriptor_HID1_11, 0, /* Device is not localized, no country code */ 1, /* One HID-specific descriptor (apart from this one) */ HIDGenericDescriptor_REPORT, HIDDTransferDriver_REPORTDESCRIPTORSIZE }, /* Interrupt IN endpoint descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_IN, HIDDTransferDriverDescriptors_INTERRUPTIN), USBEndpointDescriptor_INTERRUPT, MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE( HIDDTransferDriverDescriptors_INTERRUPTIN), MIN(USBEndpointDescriptor_MAXINTERRUPTSIZE_FS, HIDDTransferDriver_REPORTSIZE)), HIDDTransferDriverDescriptors_INTERRUPTIN_POLLING }, /* Interrupt OUT endpoint descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_OUT,
CDCGenericDescriptor_ABSTRACTCONTROLMANAGEMENT, CDCAbstractControlManagementDescriptor_LINE }, /* Class-specific union functional descriptor with one slave interface */ { sizeof(CDCUnionDescriptor), CDCGenericDescriptor_INTERFACE, CDCGenericDescriptor_UNION, CDCHIDDDriverDescriptors_CDC_INTERFACE, /* Number of master interface is #0 */ CDCHIDDDriverDescriptors_CDC_INTERFACE + 1 /* First slave interface is #1 */ }, /* Notification endpoint standard descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, CDCD_Descriptors_NOTIFICATION0), USBEndpointDescriptor_INTERRUPT, MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(CDCD_Descriptors_NOTIFICATION0), USBEndpointDescriptor_MAXINTERRUPTSIZE_FS), CDCDSerialPort_INTERRUPT_INTERVAL_FS }, /* Data class interface standard descriptor */ { sizeof(USBInterfaceDescriptor), USBGenericDescriptor_INTERFACE, CDCHIDDDriverDescriptors_CDC_INTERFACE + 1, /* This is interface #1 */ 0, /* This is alternate setting #0 for this interface */ 2, /* This interface uses 2 endpoints */ CDCDataInterfaceDescriptor_CLASS, CDCDataInterfaceDescriptor_SUBCLASS, CDCDataInterfaceDescriptor_NOPROTOCOL,
{ sizeof(USBInterfaceDescriptor), USBGenericDescriptor_INTERFACE, 0, // This is interface #0 0, // This is alternate setting #0 for this interface 3, // This interface uses 4 endpoints 0x00, 0xE0, 0x00, 0 // No string descriptor for this interface }, // Bulk-IN endpoint descriptor { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, ADM8511_DATAIN), USBEndpointDescriptor_BULK, 64, 0 // Must be 0 for full-speed bulk endpoints }, // Bulk-OUT endpoint standard descriptor { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_OUT, ADM8511_DATAOUT), USBEndpointDescriptor_BULK, 64, 0 // Must be 0 for full-speed bulk endpoints }, // Interrupt-IN endpoint descriptor {
CDCGenericDescriptor_ABSTRACTCONTROLMANAGEMENT, CDCAbstractControlManagementDescriptor_LINE }, // Class-specific union functional descriptor with one slave interface { sizeof(CDCUnionDescriptor), CDCGenericDescriptor_INTERFACE, CDCGenericDescriptor_UNION, DUALCDCDDriverDescriptors_INTERFACENUM0, // Number of master interface is #0 DUALCDCDDriverDescriptors_INTERFACENUM0 + 1 // First slave interface is #1 }, // Notification endpoint standard descriptor { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, CDCD_Descriptors_NOTIFICATION0), USBEndpointDescriptor_INTERRUPT, MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(CDCD_Descriptors_NOTIFICATION0), USBEndpointDescriptor_MAXINTERRUPTSIZE_FS), CDCDSerialPort_INTERRUPT_INTERVAL_FS }, // Data class interface standard descriptor { sizeof(USBInterfaceDescriptor), USBGenericDescriptor_INTERFACE, DUALCDCDDriverDescriptors_INTERFACENUM0 + 1, // This is interface #1 0, // This is alternate setting #0 for this interface 2, // This interface uses 2 endpoints CDCDataInterfaceDescriptor_CLASS, CDCDataInterfaceDescriptor_SUBCLASS, CDCDataInterfaceDescriptor_NOPROTOCOL,
CDCGenericDescriptor_ABSTRACTCONTROLMANAGEMENT, CDCAbstractControlManagementDescriptor_LINE }, /* Class-specific union functional descriptor with one slave interface */ { sizeof(CDCUnionDescriptor), CDCGenericDescriptor_INTERFACE, CDCGenericDescriptor_UNION, 0, /* Number of master interface is #0 */ 1 /* First slave interface is #1 */ }, /* Notification endpoint standard descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, CDCDSerialDriverDescriptors_NOTIFICATION), USBEndpointDescriptor_INTERRUPT, MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(CDCDSerialDriverDescriptors_NOTIFICATION), USBEndpointDescriptor_MAXINTERRUPTSIZE_FS), 10 /* Endpoint is polled every 10ms */ }, /* Data class interface standard descriptor */ { sizeof(USBInterfaceDescriptor), USBGenericDescriptor_INTERFACE, 1, /* This is interface #1 */ 0, /* This is alternate setting #0 for this interface */ 2, /* This interface uses 2 endpoints */ CDCDataInterfaceDescriptor_CLASS, CDCDataInterfaceDescriptor_SUBCLASS, CDCDataInterfaceDescriptor_NOPROTOCOL,
/* HID descriptor */ { sizeof(HIDDescriptor1), HIDGenericDescriptor_HID, HIDDescriptor_HID1_11, 0, /* Device is not localized, no country code */ 1, /* One HID-specific descriptor (apart from this one) */ HIDGenericDescriptor_REPORT, {HIDDKeyboard_REPORTDESCRIPTORSIZE} }, /* Interrupt IN endpoint descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_IN, HIDDKeyboardDriverDescriptors_INTERRUPTIN), USBEndpointDescriptor_INTERRUPT, sizeof(HIDDKeyboardInputReport), HIDDKeyboardDriverDescriptors_INTERRUPTIN_POLLING }, /* Interrupt OUT endpoint descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS( USBEndpointDescriptor_OUT, HIDDKeyboardDriverDescriptors_INTERRUPTOUT), USBEndpointDescriptor_INTERRUPT, sizeof(HIDDKeyboardOutputReport), HIDDKeyboardDriverDescriptors_INTERRUPTIN_POLLING
CDCGenericDescriptor_ABSTRACTCONTROLMANAGEMENT, CDCAbstractControlManagementDescriptor_LINE }, /* Class-specific union functional descriptor with one slave interface */ { sizeof(CDCUnionDescriptor), CDCGenericDescriptor_INTERFACE, CDCGenericDescriptor_UNION, CDCMSDDriverDescriptors_CDC_INTERFACE, /* Number of master interface is #0 */ CDCMSDDriverDescriptors_CDC_INTERFACE + 1 /* First slave interface is #1 */ }, /* Notification endpoint standard descriptor */ { sizeof(USBEndpointDescriptor), USBGenericDescriptor_ENDPOINT, USBEndpointDescriptor_ADDRESS(USBEndpointDescriptor_IN, CDCD_Descriptors_NOTIFICATION0), USBEndpointDescriptor_INTERRUPT, MIN(CHIP_USB_ENDPOINTS_MAXPACKETSIZE(CDCD_Descriptors_NOTIFICATION0), CDCDSerialPort_INTERRUPT_MAXPACKETSIZE), CDCDSerialPort_INTERRUPT_INTERVAL_FS }, /* Data class interface standard descriptor */ { sizeof(USBInterfaceDescriptor), USBGenericDescriptor_INTERFACE, CDCMSDDriverDescriptors_CDC_INTERFACE + 1, /* This is interface #1 */ 0, /* This is alternate setting #0 for this interface */ 2, /* This interface uses 2 endpoints */ CDCDataInterfaceDescriptor_CLASS, CDCDataInterfaceDescriptor_SUBCLASS, CDCDataInterfaceDescriptor_NOPROTOCOL,