隐藏报告描述符的双字节报告计数



我正在尝试为 USB 3.0 创建一个报告计数为 1024 字节的 HID 报告描述符。

usb.org HID 的文档似乎没有提到两个字节的报告计数。尽管如此,我还是看到有些人使用 0x96(而不是 0x95)来输入两个字节计数,例如:

0x96, 0x00, 0x02,//REPORT_COUNT (512)

这是从这里取的:自定义 HID 设备 HID 报告描述符

同样,在同一示例中,0x26用于两个字节的逻辑最大值。

这个0x96和0x26领域从何而来?我没有看到任何文档。

REPORT_COUNT在

HID 1.11 的设备类定义文档中的第 6.2.2.7 节全局项中定义为:

Report Count 1001 01 nn Unsigned integer specifying the number of data
                        fields for the item; determines how many fields are included in the
                        report for this particular item (and consequently how many bits are
                        added to the report).

上述代码中的 nn 是项目长度指示符 (bSize),在前面的 6.2.2.2 节短项目中定义为:

bSize Numeric expression specifying size of data: 
      0 = 0 bytes 
      1 = 1 byte 
      2 = 2 bytes 
      3 = 4 bytes

相当令人困惑的是,bSize 的有效值以十进制列出。因此,在二进制中,nn 的位将是:

00 = 0 bytes (i.e. there is no data associated with this item)
01 = 1 byte
10 = 2 bytes
11 = 4 bytes
将它们

全部放在一起,用于REPORT_COUNT(无符号整数),可以指定以下替代方法:

1001 01 00 = 0x94 = REPORT_COUNT with no length (can only have value 0?)
1001 01 01 = 0x95 = 1-byte REPORT_COUNT (can have a value from 0 to 255)
1001 01 10 = 0x96 = 2-byte REPORT_COUNT (can have a value from 0 to 65535)
1001 01 11 = 0x97 = 4-byte REPORT_COUNT (can have a value from 0 to 4294967295)

同样,对于 LOGICAL_MAXIMUM,它是一个有符号整数(通常有一个例外):

0010 01 00 = 0x24 = LOGICAL_MAXIMUM with no length (can only have value 0?)
0010 01 01 = 0x25 = 1-byte LOGICAL_MAXIMUM (can have a values from -128 to 127)
0010 01 10 = 0x26 = 2-byte LOGICAL_MAXIMUM (can have a value from -32768 to 32767)
0010 01 11 = 0x27 = 4-byte LOGICAL_MAXIMUM (can have a value from -2147483648 to 2147483647)

该规范不清楚零长度项通常默认为什么值。它仅在第 6.2.2.4 节"主要项目"的末尾提到主要项目类型以及该类型中的 INPUT 项目标签的默认值为 0:

Remarks - The default data value for all Main items is zero (0).
        - An Input item could have a data size of zero (0) bytes. In this case the value of
          each data bit for the item can be assumed to be zero. This is functionally
          identical to using a item tag that specifies a 4-byte data item followed by four
          zero bytes.

假设 0 作为其他项目类型的默认值也是合理的,但对于REPORT_COUNT(全局项目),值 0 并不是一个明智的默认值(恕我直言)。规范并没有真正说。

最新更新