一、HID接口:
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | 09h | |
1 | bDescriptorType | 1 | 04h | Interface |
2 | bInterfaceNumber | 1 | 03h | |
3 | bAlternateSetting | 1 | 00h | |
4 | bNumEndpoints | 1 | 02h | |
5 | bInterfaceClass | 1 | 03h | HID |
6 | bInterfaceSubClass | 1 | 00h | |
7 | bInterfaceProtocol | 1 | 00h | |
8 | iInterface | 1 | 00h |
其中:
bLength:为接口描述符的长度。
bDescriptorType:表明其是接口。
bInterfaceNumber:表示第几个接口,此处为3,表明前面定义了3个接口。
bAlternateSetting:指明可选设置的索引值。意思是如果此设备只有一种接口,但是有两个可选设置,那么这两个设置的bInterfaceNumber值必须相同,且bAlternateSetting值必须不同。
bNumEndpoints:指明接口使用的端点数目,不包括端点0
bInterfaceClass:指类类型,可以为以下类。1:音频类,2:CDC控制类,3:人机接口类(HID),5:物理类,6:图像类,7:打印机类,8:大数据存储类,9:集线器类,10:CDC数据类,11:智能卡类,13:安全类,220:诊断设备类,224:无线控制类,254:特定应用类,255厂商定义的设备。
bInterfaceSubClass:子类。HID中含义:
bInterfaceSubClass(含义)
0 No Subclass
1 Boot Interface Subclass
2 - 255 Reserved
bInterfaceProtocol:协议。HID中含义:
bInterfaceProtocol(含义)
0 None
1 Keyboard
2 Mouse
3 - 255 Reserved
因此,此表明其是HID类,没有子类和不使用协议。
二、HID 端点
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | 07h | |
1 | bDescriptorType | 1 | 05h | Endpoint |
2 | bEndpointAddress | 1 | 83h | 3 In |
3 | bmAttributes | 1 | 03h | Interrupt |
1..0: Transfer Type | ......11 | Interrupt | ||
7..2: Reserved | 000000.. | |||
4 | wMaxPacketSize | 2 | 0008h | 8 bytes |
6 | bInterval | 1 | 08h | 8 ms |
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | 07h | |
1 | bDescriptorType | 1 | 05h | Endpoint |
2 | bEndpointAddress | 1 | 04h | 4 Out |
3 | bmAttributes | 1 | 03h | Interrupt |
1..0: Transfer Type | ......11 | Interrupt | ||
7..2: Reserved | 000000.. | |||
4 | wMaxPacketSize | 2 | 0040h | 64 bytes |
6 | bInterval | 1 | 08h | 8 ms |
HID设备与HID驱动通讯
HID设备与HID驱动通讯要么使用控制端点,要么使用中断端点。
控制端点作用:
a 发送命令给HID设备,
b 发送数据给HID设备。
中断端点作用:
a 用来接收来自设备的数据
b 用来给设备发送数据
输出中断端点是可选的,没有的话,用控制端点传送。
三、HID描述符
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | 09h | |
1 | bDescriptorType | 1 | 21h | HID |
2 | bcdHID | 2 | 0111h | 1.11 |
4 | bCountryCode | 1 | 00h | |
5 | bNumDescriptors | 1 | 01h | |
6 | bDescriptorType | 1 | 22h | Report |
7 | wDescriptorLength | 2 | 0211h | 529 bytes |
bLength:报告描述符长度(字节)
bDescriptorType:描述符类型:0x21(设备描述符 1 ; 配置描述符 2; 字符串描述符 3; 接
口描述符 4; 端点描述符 5; 设备限定描述符 6 ; 其他速率配置描述符 7 ;)
bcdHID:HID 版本号(BCD 码)
bCountryCode:国家/地区代码
bNumDescriptor:支持的其他类型描述符数量
bDescriptorType:类别描述符的类型
wDescriptorLength:报告描述符的总长度
四、报告描述符
Item Tag (Value) | Raw Data |
---|---|
Usage Page (Telephony Devices) | 05 0B |
Usage (Phone) | 09 01 |
Collection (Application) | A1 01 |
Usage Page (Button) | 05 09 |
Usage Minimum (Button 1) | 19 01 |
Usage Maximum (Button 63) | 29 3F |
Logical Minimum (0) | 15 00 |
Logical Maximum (1) | 25 01 |
Report Size (8) | 75 08 |
Report Count (8) | 95 08 |
Input (Cnst,Ary,Abs) | 81 01 |
Usage Page (LEDs) | 05 08 |
Usage Minimum (Num Lock) | 19 01 |
Usage Maximum (Repeat) | 29 10 |
Logical Minimum (0) | 15 00 |
Logical Maximum (1) | 25 01 |
Report Size (8) | 75 08 |
Report Count (32) | 95 20 |
Output (Cnst,Ary,Abs,NWrp,Lin,Pref,NNul,NVol,Bit) | 91 01 |
End Collection | C0 |
报告描述符由items组成。Item由item type, item tag, and item size组成。