- /******************************************************************************
- * @file descriptors.c
- * @brief NUC029xGE series USBD descriptor
- *
- * @note
- * Copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
- ******************************************************************************/
- #ifndef __DESCRIPTORS_C__
- #define __DESCRIPTORS_C__
- /*!<Includes */
- #include "NUC029xGE.h"
- #include "usbd.h"
- #include "hid_kb.h"
- /*!<USB HID Report Descriptor */
- const uint8_t HID_KeyboardReportDescriptor[] =
- {
- 0x05, 0x01, /* Usage Page(Generic Desktop Controls) */
- 0x09, 0x06, /* Usage(Keyboard) */
- 0xA1, 0x01, /* Collection(Application) */
- 0x05, 0x07, /* Usage Page(Keyboard/Keypad) */
- 0x19, 0xE0, /* Usage Minimum(0xE0) */
- 0x29, 0xE7, /* Usage Maximum(0xE7) */
- 0x15, 0x00, /* Logical Minimum(0x0) */
- 0x25, 0x01, /* Logical Maximum(0x1) */
- 0x75, 0x01, /* Report Size(0x1) */
- 0x95, 0x08, /* Report Count(0x8) */
- 0x81, 0x02, /* Input (Data) => Modifier byte */
- 0x95, 0x01, /* Report Count(0x1) */
- 0x75, 0x08, /* Report Size(0x8) */
- 0x81, 0x01, /* Input (Constant) => Reserved byte */
- 0x95, 0x05, /* Report Count(0x5) */
- 0x75, 0x01, /* Report Size(0x1) */
- 0x05, 0x08, /* Usage Page(LEDs) */
- 0x19, 0x01, /* Usage Minimum(0x1) */
- 0x29, 0x05, /* Usage Maximum(0x5) */
- 0x91, 0x02, /* Output (Data) => LED report */
- 0x95, 0x01, /* Report Count(0x1) */
- 0x75, 0x03, /* Report Size(0x3) */
- 0x91, 0x01, /* Output (Constant) => LED report padding */
- 0x95, 0x06, /* Report Count(0x6) */
- 0x75, 0x08, /* Report Size(0x8) */
- 0x15, 0x00, /* Logical Minimum(0x0) */
- 0x25, 0x65, /* Logical Maximum(0x65) */
- 0x05, 0x07, /* Usage Page(Keyboard/Keypad) */
- 0x19, 0x00, /* Usage Minimum(0x0) */
- 0x29, 0x65, /* Usage Maximum(0x65) */
- 0x81, 0x00, /* Input (Data) */
- 0xC0, /* End Collection */
- };
- /*----------------------------------------------------------------------------*/
- /*!<USB Device Descriptor */
- const uint8_t gu8DeviceDescriptor[] =
- {
- LEN_DEVICE, /* bLength */
- DESC_DEVICE, /* bDescriptorType */
- #ifdef SUPPORT_LPM
- 0x01, 0x02, /* bcdUSB >= 0x0201 to support LPM */
- #else
- 0x10, 0x01, /* bcdUSB */
- #endif
- 0x00, /* bDeviceClass */
- 0x00, /* bDeviceSubClass */
- 0x00, /* bDeviceProtocol */
- EP0_MAX_PKT_SIZE, /* bMaxPacketSize0 */
- /* idVendor */
- USBD_VID & 0x00FF,
- (USBD_VID & 0xFF00) >> 8,
- /* idProduct */
- USBD_PID & 0x00FF,
- (USBD_PID & 0xFF00) >> 8,
- 0x00, 0x00, /* bcdDevice */
- 0x01, /* iManufacture */
- 0x02, /* iProduct */
- 0x03, /* iSerialNumber - no serial */
- 0x01 /* bNumConfigurations */
- };
- /*!<USB Configure Descriptor */
- const uint8_t gu8ConfigDescriptor[] =
- {
- LEN_CONFIG, /* bLength */
- DESC_CONFIG, /* bDescriptorType */
- /* wTotalLength */
- LEN_CONFIG_AND_SUBORDINATE & 0x00FF,
- (LEN_CONFIG_AND_SUBORDINATE & 0xFF00) >> 8,
- 0x01, /* bNumInterfaces */
- 0x01, /* bConfigurationValue */
- 0x00, /* iConfiguration */
- 0x80 | (USBD_SELF_POWERED << 6) | (USBD_REMOTE_WAKEUP << 5),/* bmAttributes */
- USBD_MAX_POWER, /* MaxPower */
- /* I/F descr: HID */
- LEN_INTERFACE, /* bLength */
- DESC_INTERFACE, /* bDescriptorType */
- 0x00, /* bInterfaceNumber */
- 0x00, /* bAlternateSetting */
- 0x01, /* bNumEndpoints */
- 0x03, /* bInterfaceClass */
- 0x01, /* bInterfaceSubClass */
- HID_KEYBOARD, /* bInterfaceProtocol */
- 0x00, /* iInterface */
- /* HID Descriptor */
- LEN_HID, /* Size of this descriptor in UINT8s. */
- DESC_HID, /* HID descriptor type. */
- 0x10, 0x01, /* HID Class Spec. release number. */
- 0x00, /* H/W target country. */
- 0x01, /* Number of HID class descriptors to follow. */
- DESC_HID_RPT, /* Descriptor type. */
- /* Total length of report descriptor. */
- sizeof(HID_KeyboardReportDescriptor) & 0x00FF,
- (sizeof(HID_KeyboardReportDescriptor) & 0xFF00) >> 8,
- /* EP Descriptor: interrupt in. */
- LEN_ENDPOINT, /* bLength */
- DESC_ENDPOINT, /* bDescriptorType */
- (INT_IN_EP_NUM | EP_INPUT), /* bEndpointAddress */
- EP_INT, /* bmAttributes */
- /* wMaxPacketSize */
- EP2_MAX_PKT_SIZE & 0x00FF,
- (EP2_MAX_PKT_SIZE & 0xFF00) >> 8,
- HID_DEFAULT_INT_IN_INTERVAL /* bInterval */
- };
- /*!<USB Language String Descriptor */
- const uint8_t gu8StringLang[4] =
- {
- 4, /* bLength */
- DESC_STRING, /* bDescriptorType */
- 0x09, 0x04
- };
- /*!<USB Vendor String Descriptor */
- const uint8_t gu8VendorStringDesc[] =
- {
- 16,
- DESC_STRING,
- 'N', 0, 'u', 0, 'v', 0, 'o', 0, 't', 0, 'o', 0, 'n', 0
- };
- /*!<USB Product String Descriptor */
- const uint8_t gu8ProductStringDesc[] =
- {
- 26,
- DESC_STRING,
- 'H', 0, 'I', 0, 'D', 0, ' ', 0, 'K', 0, 'e', 0, 'y', 0, 'b', 0, 'o', 0, 'a', 0, 'r', 0, 'd', 0
- };
- const uint8_t gu8StringSerial[26] =
- {
- 26, // bLength
- DESC_STRING, // bDescriptorType
- 'A', 0, '0', 0, '2', 0, '0', 0, '1', 0, '4', 0, '0', 0, '9', 0, '0', 0, '3', 0, '0', 0, '2', 0
- };
- const uint8_t *gpu8UsbString[4] =
- {
- gu8StringLang,
- gu8VendorStringDesc,
- gu8ProductStringDesc,
- gu8StringSerial
- };
- const uint8_t *gpu8UsbHidReport[3] =
- {
- HID_KeyboardReportDescriptor,
- NULL,
- NULL
- };
- const uint32_t gu32UsbHidReportLen[3] =
- {
- sizeof(HID_KeyboardReportDescriptor),
- 0,
- 0
- };
- const uint32_t gu32ConfigHidDescIdx[3] =
- {
- (LEN_CONFIG + LEN_INTERFACE),
- 0,
- 0
- };
- #ifdef SUPPORT_LPM
- const uint8_t gu8BosDescriptor[] =
- {
- LEN_BOS, /* bLength */
- DESC_BOS, /* bDescriptorType */
- /* wTotalLength */
- 0x0C & 0x00FF,
- (0x0C & 0xFF00) >> 8,
- 0x01, /* bNumDeviceCaps */
- /* Device Capability */
- LEN_DEVCAP, /* bLength */
- DESC_DEVCAP,/* bDescriptorType */
- 0x02, /* bDevCapabilityType, 0x02 is USB 2.0 Extension */
- 0x06, 0x04, 0x00, 0x00 /* bmAttributes, 32 bits */
- /* bit 0 : Reserved. Must 0. */
- /* bit 1 : 1 to support LPM. */
- /* bit 2 : 1 to support BSL & Alternat HIRD. */
- /* bit 3 : 1 to recommend Baseline BESL. */
- /* bit 4 : 1 to recommand Deep BESL. */
- /* bit 11:8 : Recommend Baseline BESL value. Ignore by bit3 is zero. */
- /* bit 15:12 : Recommend Deep BESL value. Ignore by bit4 is zero. */
- /* bit 31:16 : Reserved. Must 0. */
- };
- #endif
- const S_USBD_INFO_T gsInfo =
- {
- gu8DeviceDescriptor,
- gu8ConfigDescriptor,
- gpu8UsbString,
- gpu8UsbHidReport,
- gu32UsbHidReportLen,
- gu32ConfigHidDescIdx,
- #ifdef SUPPORT_LPM
- gu8BosDescriptor
- #else
- NULL
- #endif
- };
- #endif /* __DESCRIPTORS_C__ */
- /*** (C) COPYRIGHT 2016 Nuvoton Technology Corp. ***/