其它的描述符都是告诉PC 自己是什么装置,是做什么用的。而报告描述符则是告诉PC 设备与PC之间数据传输的格式。即设备要传输给PC(或是PC传输给设备)的是多少字节的数据,都是什么形式的,是常量还是变量。
0x05, 0x01,
0x29, 0xe7,
0x15, 0x00,
0x25, 0x01,
0x75, 0x01,
0x95, 0x08,
0x81, 0x02,
上面这这几项描述了一个输入用的字段,总共为8个bits,每个bit表示一个按键分别从左ctrl键到右GUI键。这8个bits刚好构成一个字节,它位于报告的第一个字节。它的最低位,即bit-0对应着左ctrl键,如果返回的数据该位为1,则表示左ctrl键被按下,否则,左ctrl键没有按下。最高位,即bit-7表示右GUI键的按下情况。中间的几个位,/需要根据HID协议中规定的用途页表(HID Usage Tables)来确定。这里通常用来表示特殊键,例如ctrl,shift,del键等
0x95, 0x01,
0x75, 0x08,
0x81, 0x03,
0x75, 0x01,;REPORT_SIZE
0x05, 0x08,
0x19, 0x01,
0x29, 0x05,
0x91, 0x02,
0x95, 0x01,
0x75, 0x03,
0x91, 0x03,
由于要按字节对齐,而前面控制LED的只用了5个bit,所以后面需要附加3个不用bit,设置为常量。
0x95, 0x06,
0x75, 0x08,
0x15, 0x00,
0x25, 0xFF,
0x05, 0x07,
0x19, 0x00,
0x29, 0x65,
0x81, 0x00,
0xc0
下面是USB鼠标报告描述符,比起键盘的来说要简单些。它描述了4个字节,第一个字节表示按键,第二个字节表示x轴(即鼠标左右移动,0表示不动,正值表示往右移,负值表示往左移),第三个字节表示y轴(即鼠标上下移动,0表示不动,正值表示往下移动,负值表示往上移动),第四个字节表示鼠标滚轮(正值为往上滚动,负值为往下滚动)。
0x09, 0x02,
0xa1, 0x01,
0x09, 0x01,
0xa1, 0x00,
0x05, 0x09,
0x19, 0x01,
0x29, 0x03,
0x15, 0x00,
0x25, 0x01,
0x95, 0x03,
0x75, 0x01,
以上3个bit分别表示鼠标的三个按键情况,最低位(bit-0)为左键bit-1为右键,bit-2为中键,按下时对应的位值为1,释放时对应的值为0
0x81, 0x02,
0x95, 0x01,
0x75, 0x05,
0x81, 0x03,
0x05, 0x01,
0x09, 0x30,
0x09, 0x31,
0x09, 0x38,
0x15, 0x81,
0x25, 0x7f,
0x75, 0x08,
0x95, 0x03,
0x81, 0x06,
0xc0,
Usage page
Page ID | Page 名称 |
00 | 未定义 |
01 | Generic Destop controls |
02 | Simulation controls |
03 | VR controls |
04 | Sport controls |
05 | Game controls |
06 | 保留 |
07 | Keyboard/keypad |
08 | LEDs |
09 | Button |
0a | Ordinal |
0b | Telephony |
0c | Consumer |
0d | Digitizer |
0e | 保留 |
0f | PID Page |
10 | Unicode |
11-13 | 保留 |
14 | Alphanumeric Display |
15-7f | 保留 |
80-83 | Monitor pages |
84-87 | Power pages |
88-8b | 保留 |
8c | Bar code scanner page |
8d | Scale page |
8e-8f | Reserved point of sale pages |
90 | Camera control page |
91 | Arcade page |
92-feff | 保留 |
Ff00-ffff | 厂商定义 |
Generic Destop page
Usage ID | Usage |
00 | Undefined |
01 | Pointer |
02 | Mouse |
03 | Reserved |
04 | Joystick |
05 | Game pad |
06 | Keyboard |
07 | Keypad |
08 | Multi_axis controller |
09-2f | Reserved |
30 | X |
31 | Y |
32 | Z |
33 | Rx |
34 | Ry |
35 | Rz |
36 | Slider |
37 | Dial |
38 | Wheel |
39 | Hat switch |
3a | Counted buffer |
3b | Byte count |
3c | Motion wakeup |
3d | Start |
3e | Select |
3f | Reserved |
40 | Vx |
41 | Vy |
42 | Vz |
43 | Vbrx |
44 | Vbry |
45 | Vbrz |
46 | Vno |
47-7f | Reserved |
80 | System control |
81 | System power down |
82 | System sleep |
83 | System wake up |
84 | System context menu |
85 | System main menu |
86 | System App menu |
87 | System Menu help |
88 | System Menu exit |
89 | System Menu select |
8a | System Menu right |
8b | System Menu left |
8c | System Menu up |
8d | System Menu down |
8e-8f | Reserved |
90 | D-pad up |
91 | D-pad down |
92 | D-pad right |
93 | D-pad left |
94-ffff | Reserved |