轉載:
https://www.cnblogs.com/huanjun/p/9605872.html
/* USB設備描述符*/
const uint8_t CustomHID_DeviceDescriptor[CUSTOMHID_SIZ_DEVICE_DESC] =
{
0x12, /*bLength 描述符的長度*/
USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType 描述符的類型(設備描述符爲0x01)*/
0x00, /*bcdUSB USB協議的版本*/
0x02,
0x00, /*bDeviceClass 類代碼*/
0x00, /*bDeviceSubClass 子類代碼*/
0x00, /*bDeviceProtocol 設備所使用的協議*/
0x40, /*bMaxPacketSize 端點0的最大包長*/
/*idVendor 廠商ID*/
LOBYTE(USB_VID),
HIBYTE(USB_VID),
/*idProduct 設備ID*/
LOBYTE(USB_PID),
HIBYTE(USB_PID),
0x00, /*bcdDevice rel 設備版本號*/
0x02,
1, /*描述生產廠家的字符串描述符的索引*/
2, /*描述產品的字符串描述符的索引*/
3, /*產品序列號的字符串描述符的索引*/
0x01 /*bNumConfigurations 可能的配置數*/
}
; /* CustomHID_DeviceDescriptor */
/* USB配置描述符 */
/* All Descriptor s (Configuration, Interface, Endpoint, Class, Vendor */
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
{
//以下爲配置描述符
0x09, /* bLength: 端點描述符長度*/
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符類型 (配置描述符爲0x02) */
LOBYTE(CUSTOMHID_SIZ_CONFIG_DESC),/* wTotalLength: 配置描述符集合總長度 */
HIBYTE(CUSTOMHID_SIZ_CONFIG_DESC),
0x01, /* bNumInterfaces: 該配置所支持的接口數*/
0x01, /* bConfigurationValue: 該配置的值*/
0x00, /* iConfiguration: 描述配置的字符串描述符的索引*/
0xA0, /* bmAttributes:該設備的屬性(總線供電,支持遠程喚醒)
bit 4 ... 0: 保留(必須爲0)
bit 5: 1表示支持遠程喚醒
bit 6: 1表示設備是自供電 0表示是總線供電
bit 7: 保留(必須爲1) */
0xC8, /* MaxPower 設備所需要的電流(單位爲2mA)400 mA*/
//以下爲接口描述符
0x09, /* bLength: 接口描述符長度*/
USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: 描述符類型 (接口描述符爲0x04)*/
0x00, /* bInterfaceNumber: 該接口編號(從0開始) */
0x00, /* bAlternateSetting: 該接口的備用編號 */
0x02, /* bNumEndpoints 該接口所使用的端點數*/
0x03, /* bInterfaceClass: 該接口所使用的類*/
0x00, /* bInterfaceSubClass : 該接口所使用的子類 */
0x00, /* nInterfaceProtocol : 該接口所使用的協議 0 =無,1 =鍵盤,2 =鼠標*/
0, /* iInterface: 描述該接口的字符串描述符的索引 */
//以下爲HID描述符
0x09, /* bLength: HID描述符長度 */
HID_DESCRIPTOR_TYPE, /* bDescriptorType: 描述符類型 (接口描述符爲0x21) */
0x10, /* bcdHID: HID 協議版本號 */
0x01,
0x00, /* bCountryCode: 國家代碼 (美式鍵盤代碼爲0x21)*/
0x01, /* bNumDescriptors:下級描述符的數量*/
0x22, /* bDescriptorType 下級描述符的類型*/
LOBYTE(CUSTOMHID_SIZ_REPORT_DESC),/* wItemLength: 下級描述符的長度*/
HIBYTE(CUSTOMHID_SIZ_REPORT_DESC),
//以下爲端點描述符
/******************** Descriptor of Custom HID endpoints ******************/
0x07, /* bLength:端點描述符長度 */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* 描述符類型 (端點描述符爲0x05)*/
0x81, /* bEndpointAddress:端點地址
bit 3 ... 0:端點號
bit 6 ... 4:保留(設置爲0)
bit 7:0(OUT),1(IN)*/
0x03, /* bmAttributes: 端點屬性
bit 1 ... 0:表示該端點的傳輸類型
控制傳輸
等時傳輸
批量傳輸
中斷傳輸
bit 7 ... 2:如果該端點是非等時傳輸 則bit 7 ~ 2 保留(設置爲0)
如果該端點是等時傳輸
bit 3 ... 2: 表示同步類型
無同步
異步
適配
同步
bit 5 ... 4: 表示用途
數據端點
反饋端點
暗含反饋的數據端點
保留
bit 7 ... 6: 保留*/
0x40, /* wMaxPacketSize: 該端點支持的最大包長度 */
0x00,
0x0A, /* bInterval:端口的查詢時間*/
//以下爲輸出端點1描述符
0x07, /*bLength:端點描述符大小 */
USB_ENDPOINT_DESCRIPTOR_TYPE, /* 端點描述符類型*/
0x01, /* bEndpointAddress:端點地址
bit 3 ... 0:端點號
bit 6 ... 4:保留
bit 7:0(OUT),1(IN)*/
0x03, /* bmAttributes: 中斷端點 */
0x40, /* wMaxPacketSize: 最多64個字節 */
0x00,
0x0A, /* bInterval: 輪詢間隔(20毫秒)*/
};