2014-01-30 35 views
0

我想制作一个USB键盘,它具有非常小的键,我将使用一些修饰键如SHIFT和ALT键。现在为什么在USB的USB报告描述符中使用最小值是224?

我的问题

这是报告描述的删节部分我使用

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(键盘LeftControl)和USAGE_MAXIMUM(键盘右键GUI)有限在这些值?

的USB HID规范说

由于只有一个阵列元件可以在每个阵列字段被报告, 修饰键应被报导为位图数据(一组1比特 可变域的)。例如,按键(如CTRL,SHIFT,ALT和GUI)组成了标准键盘报告中的8位修改器字节。 虽然这些使用代码在使用情况表中定义为E0-E7, ,但不会将使用情况作为阵列数据发送。

回答

0

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

相关问题