USB 本应终结 PC 的线缆动物园,但人机接口设备还有另一个问题:每个鼠标、键盘、数位板或游戏控制器都可能暴露一组不同的按键、轴、滚轮和 LED。笨办法是为每个外设系列都写一个驱动。

HID 的巧妙之处在于报告描述符。设备自身会发送一段紧凑的字节码,说明它能交换哪些报告,以及每个字段的含义。该类别定义明确以紧凑、可扩展和自描述为目标。

这让新奇设计变得廉价。主机可以用同一个 HID 类驱动支持许多设备,而制造商可以增加控件,无需先说服每个操作系统厂商随系统发布新的型号专用驱动。

让设备描述自己的控件

描述符把设备特定的知识从主机软件转移到了外设中。

未知字段可以被跳过,因此该格式能容忍未来的设备。

用途表为控件赋予通用含义,同时不冻结物理设计。

当硬件种类无穷无尽时,应当标准化描述语言,而不是标准化每一种产品形态。通用解析器能够吸收驱动目录无法容纳的差异。

HID 甚至走出了 USB 本身:Linux 文档指出,HID 现在可运行于 USB、I2C 和蓝牙传输之上。同样的思路仍然解释了为什么不寻常的键盘、指点设备和控制器往往一完成枚举就能使用。

从这里,追溯依据

参考来源

  1. Device Class Definition for HID 1.11 USB Implementers Forum · usb.org
  2. Introduction to HID report descriptors The Linux Kernel documentation · kernel.org