手动解析 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

以下数字可以用相同的方式解析。