手动解析 HID 报告描述符¶
再次考虑在HID 报告描述符简介中介绍的鼠标 HID 报告描述符
$ hexdump -C /sys/bus/hid/devices/0003\:093A\:2510.0002/report_descriptor
00000000 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 |..............).|
00000010 15 00 25 01 75 01 95 03 81 02 75 05 95 01 81 01 |..%.u.....u.....|
00000020 05 01 09 30 09 31 09 38 15 81 25 7f 75 08 95 03 |...0.1.8..%.u...|
00000030 81 06 c0 c0 |....|
00000034
并尝试手动解析它。
从第一个数字 0x05 开始:它携带 2 位表示项目的长度,2 位表示项目的类型,以及 4 位表示功能
+----------+
| 00000101 |
+----------+
^^
---- Length of data (see HID spec 6.2.2.2)
^^
------ Type of the item (see HID spec 6.2.2.2, then jump to 6.2.2.7)
^^^^
--------- Function of the item (see HID spec 6.2.2.7, then HUT Sec 3)
在我们的例子中,长度是 1 字节,类型是 Global
,功能是 Usage Page
,因此为了解析第二个字节中的值 0x01,我们需要参考 HUT Sec 3。
第二个数字是实际数据,其含义可以在 HUT 中找到。 我们有一个 Usage Page
,因此我们需要参考 HUT Sec. 3,“Usage Pages”;从那里,可以看到 0x01
代表 Generic Desktop Page
。
现在移动到第二个两个字节,并遵循相同的方案,0x09
(即 00001001
) 之后将跟随一个字节 (01
),并且是一个 Local
项目 (10
)。因此,剩余四位 (0000
) 的含义在 HID 规范 Sec. 6.2.2.8 “Local Items” 中给出,所以我们有一个 Usage
。从 HUT Sec. 4,“Generic Desktop Page”,我们看到 0x02 代表 Mouse
。
以下数字可以用相同的方式解析。