USB Compound Device,USB复合设备
USB Composite Device,USB组合设备
USB Composite Device,不内嵌Hub,几个设备的PID和VID都是相同。
此文均在STM32F767IGTx已实现普通custom HID工程上做解释。
//usb配置描述符
/* USB CUSTOM_HID device Configuration Descriptor */
__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgDesc[USB_CUSTOM_HID_CONFIG_DESC_SIZ] __ALIGN_END =
{
0x09, /* bLength: 长度,设备字符串的长度为9字节 */
USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: 类型,配置描述符的类型 */
USB_CUSTOM_HID_CONFIG_DESC_SIZ, /* wTotalLength: 配置描述符的总长度 */
0x00,
0x01, /*bNumInterfaces: 配置所支持的接口数量1个*/
0x01, /*bConfigurationValue: 该配置的值*/
0x00, /*iConfiguration: 该配置的字符串的索引值,该值为0表示没有字符串*/
0xC0, /*bmAttributes: bus powered */
0x32, /*MaxPower 100 mA: 从总线上获得的最大电流为100mA*/
/************** 接口描述符 ****************/
/* 09 */
0x09, /*bLength: 长度,接口描述符的长度为9字节 */
USB_DESC_TYPE_INTERFACE,/*bDescriptorType: 接口描述符的类型*/
0x00, /*bInterfaceNumber: 该接口的编号*/
0x00, /*bAlternateSetting: 该接口的备用编号*/
0x02, /*bNumEndpoints: 该接口所使用的端点数*/
0x03, /*bInterfaceClass: 该接口所使用的类为HID*/
0x00, /*bInterfaceSubClass : 该接口所用的子类 1=BOOT, 0=no boot*/
0x00, /*nInterfaceProtocol : 该接口使用的协议 0=none, 1=keyboard, 2=mouse*/
0, /*iInterface: 该接口字符串的索引*/
/******************** HID描述符 *************************/
/* 18 */
0x09, /*bLength: HID描述符的长度为9字节*/
CUSTOM_HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID的描述符类型*/
0x11, /*bCUSTOM_HIDUSTOM_HID: HID协议的版本*/
0x01,
0x00, /*bCountryCode: 国家代号*/
0x01, /*bNumDescriptors: 下级描述符的数量*/
0x22, /*bDescriptorType: 下级描述符的类型*/
USBD_CUSTOM_HID_REPORT_DESC_SIZE,/*wItemLength: 下一集描述符的长度*/
0x00,
/******************** 输入端点描述符 ********************/
/* 27 */
0x07, /*bLength: 端点描述符的长度为7字节*/
USB_DESC_TYPE_ENDPOINT, /*bDescriptorType: 端点描述符的类型*/
CUSTOM_HID_EPIN_ADDR, /*bEndpointAddress: 该端点(输入)的地址,D7:0(OUT),1(IN),D6~D4:保留,D3~D0:端点号*/
0x03, /*bmAttributes: 端点的属性为为中断端点. D0~D1表示传输类型:0(控制传输),
1(等时传输),2(批量传输),3(中断传输) 非等时传输端点:D2~D7:保留为0 等时传输端点:
D2~D3表示同步的类型:0(无同步),1(异步),2(适配),3(同步) D4~D5表示用途:0(数据端点),
1(反馈端点),2(暗含反馈的数据端点),3(保留),D6~D7:保留,*/
CUSTOM_HID_EPIN_SIZE, /*wMaxPacketSize: 该端点支持的最大包长度 */
0x00,
0x01,//0x20, /*bInterval: 轮询间隔*/
/* 34 */
/******************** 输出端点描述符 ********************/
0x07, /* bLength: 端点描述符的长度为7字节 */
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: 端点描述符的类型 */
CUSTOM_HID_EPOUT_ADDR, /*bEndpointAddress: 该端点(输入)的地址,D7:0(OUT),1(IN),D6~D4:保留,D3~D0:端点号*/
0x03, /* bmAttributes: 端点的属性为为中断端点. D0~D1表示传输类型:0(控制传输),1(等时传输),
2(批量传输),3(中断传输) 非等时传输端点:D2~D7:保留为0 等时传输端点:
D2~D3表示同步的类型:0(无同步),1(异步),2(适配),3(同步) D4~D5表示用途:0(数据端点),
1(反馈端点),2(暗含反馈的数据端点),3(保留),D6~D7:保留 */
CUSTOM_HID_EPOUT_SIZE, /* wMaxPacketSize: 该端点支持的最大包长度 */
0x00,
0x01,