Windows 异常USB HID报告

Windows 异常USB HID报告,windows,keyboard,usb,Windows,Keyboard,Usb,最近检查了一些Zalman键盘,嗅探USB报告我收到: 按键盘上的“3”键: 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 按下“3”+“2”键: 00 00 00 80 0

最近检查了一些Zalman键盘,嗅探USB报告我收到:

按键盘上的“3”键:

00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

按下“3”+“2”键:

00 00 00 80 01 00 00 00 00

按下“3”+“2”+“1”键:

00 00 C0 01 00 00 00 00 00 00

我的问题是那是什么?这绝对不是usb hid使用代码。我在哪里可以找到这个的翻译表?诸如此类:

您按下的三个键似乎都对应于报告中的一位。位为1表示按键已按下,位为0表示未按下


HID允许键盘定义自己的报告格式。您可以查看通过键盘向计算机报告的HID描述符,以了解报告格式应该是什么。

我在研究HID解析器的一个错误时偶然发现了这个问题

根据我对这里发生的事情的解释,我将对公认的答案补充几点

,它为键盘/小键盘使用页面指定以下内容:

所有按键代码的使用类型都是选择器Sel,除了键盘左控件0x224到键盘右GUI 0x231的修改键是动态标志DV

因此,键代码被解释为选择器

查看定义选择器类型3.4.2.1的部分,它指出具有Sel类型的输入标记将设置数组标志

到目前为止,我一直在根据数组标志的存在来解释关键代码字段,但是一个随机键盘不起作用,这让我进一步研究了这个问题

我在重读时发现,这个规范有点让人捉摸不透。。。上述数组规则的异常

在下面的同一节中,它描述了选择器是如何以三种形式出现的。最后一种形式适用于我的问题:

集合的任何选择。控件实现为一组位字段,其中每个位表示单个选择。此控件由设置了变量标志且报表大小等于1的主项定义。报告计数将等于集合中的选择数

事实证明,这是用于在有问题的报告描述符中指定关键代码的方法

。。。键盘页面上的每个可用使用id对应一位,外加备用。报告中240个字段表示每个可能的键代码。考虑到键盘的滚动键为6,这是描述报告的一种相当疯狂的方式,我相信在它们的基本原理中一定有我遗漏的东西

不管怎样,规范说它很好,所以我更新了我的HID解析器来处理这种情况


因此,我基本上重申了David已经说过的内容,但我相信这就是为什么会这样的基本原理。

谢谢你的回答David,事实证明,hid报告包含4个64位整数,256位,普通USB hid使用id是这个整数数组中的n个位。我有一个问题,如何知道使用Hid描述符的设备将选择哪种类型的报告格式?你能解释一下吗?谢谢你不能事先告诉我;这个决定是由设备的固件做出的,而您通常无法对其进行检查。认为一台设备不会随机更改其报告格式可能是一个安全的选择,并且只有当您有一台新设备或升级了现有设备上的固件时,报告格式才会更改。