HID报告描述符协议
HID报告描述符通过报告描述符的条目定义了HID报告数据的格式。
对于大部分的HID设备来说,数据的传输方向都是输入的,即使用输入端点数据从设备端到主机端,并且使用的是中断的方式。
当然HID设备不仅仅为数据的输入,有时也需要数据的输出。这时就需要一个输出中断端点来实现。
报告描述符包含了属于特定ReportId所有条目(input,output ,feature)的相关配置状态信息。驱动程序或应用程序通过分析报告描述符的全部内容来解析这些信息。
报告描述符描述的报告数据格式是以BIT为单位进行描述的,不存在按半字节或字节对齐。需要字节补充或对齐时需要手动定义const数据。
条目的数据BIT长度是通过Report Size * Report Count计算的。item的数据顺序与在报告描述符中的顺序一致。如果报表描述符中使用了ReportId,则所有报表都包含一个单字节ID前缀。如果未使用ReportId,则在单个报告中返回所有值,并且该报告中不包含前缀ID。
标准条目的报告
Report Id:ReportId占一个字节,即8位。如果报告中未使用报告ID标记报表描述符,只有一个报表,并且省略了报表ID字段.
Report Data:报告数据是变长的,数据长度是通过报告描述符定义的。
数组条目的报告
数组中的每个按钮都报告一个分配了的编号,称为数组索引。通过查找数组元素Usage Page和Usage,可以将其转换为键码。当任何按钮在打开和关闭之间转换时,阵列中当前关闭的按钮的整个索引列表将传输到主机。
由于每个数组字段中只能报告一个数组元素,因此修改器键应报告为bitmap data(一组1bit变量字段)。例如,CTRL、SHIFT、ALT和GUI键等键构成标准键盘报告中的8位修饰符字节。尽管这些用法代码在用法表中定义为E0–E7,但用法不会作为数组数据发送。修饰符字节的定义如下。
Bit | Key |
---|---|
0 | LEFT CTRL |
1 | LEFT SHIFT |
2 | LEFT ALT |
3 | LEFT GUI |
4 | RIGHT CTRL |
5 | RIGHT SHIFT |
6 | RIGHT ALT |
7 | RIGHT GUI |
报告常量
用于进行数据字节对齐。默认全为0。
输入示例
Usage Page (Generic Desktop),
Usage (Mouse),
Collection (Application),
Usage (Pointer),
Collection (Physical),
Report ID (0A), ;Make changes to report 0A
Usage (X), Usage (Y),
Logical Minimum (-127), ;Report data values range from -127
Logical Maximum (127), ;to 127
Report Size (8), Report Count (2),
Input (Data, Variable, Relative), ;Add 2 bytes of position data (X & Y) to report 0A
Logical Minimum (0), ;Report data values range from -127
Logical Maximum (1), ;to 127
Report Count (3), Report Size (1),
Usage Page (Button Page),
Usage Minimum (1),
Usage Maximum (3),
Input (Data, Variable, Absolute), ;Add 2 bits (Button 1, 2 & 3) to report 0A
Report Size (5),
Input (Constant), ;Add 5 bits padding to byte align the report 0A
End Collection,
End Collection
同一个接口中带有指针功能的键盘
只有输入、输出和功能项(非集合项)在报表中显示数据。此示例演示了多个报告,但是此接口对于引导设备是不可接受的(使用单独的接口键盘和鼠标设备)。