我正在尝试制作一个键盘非常小的USB键盘,我将使用一些修改键,如SHIFT和ALT键。
现在我的问题
这是我正在使用的报告描述符的截断部分
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
本节介绍USB消息的修饰符字节(字节0)。
据我所知,按下以下键时会设置该字节的位
bit 0 - Left Ctrl
bit 1 - Left Shift
bit 2 - Left Alt
bit 3 - Left GUI or Windows Key
bit 4 - Right Ctrl
bit 5 - Right Shift
bit 6 - Right Alt
bit 7 - Right GUI or Windows Key
现在我无法理解为什么USAGE_MINIMUM(Keyboard LeftControl)和USAGE_MAXIMUM(键盘右GUI)受限于这些值?
USB HID规范说
由于每个数组字段中只能报告一个数组元素, 修饰键应报告为位图数据(一组1位 变量字段)。例如,CTRL,SHIFT,ALT和GUI等键 键组成标准键盘报告中的8位修饰符字节。 尽管这些使用代码在使用表中定义为E0-E7, 用法不作为数组数据发送。
答案 0 :(得分:0)
USAGE_MINIMUM和USAGE_MAXIMUM不限于任何特定值。您可以在描述符中更改它们。在这种情况下,您找到的描述符中的值很有用,因为它们允许您将所有修饰键状态放在一个字节中,从而使您不必向计算机发送更大的报告。