为什么在键盘的USB报告描述符中使用最小值为224?

时间:2014-01-30 15:55:54

标签: usb hid

我正在尝试制作一个键盘非常小的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,   用法不作为数组数据发送。

1 个答案:

答案 0 :(得分:0)

USAGE_MINIMUM和USAGE_MAXIMUM不限于任何特定值。您可以在描述符中更改它们。在这种情况下,您找到的描述符中的值很有用,因为它们允许您将所有修饰键状态放在一个字节中,从而使您不必向计算机发送更大的报告。