应用程序在使用默认HID驱动程序时忽略USB设备的传入数据包

时间:2014-07-10 07:40:31

标签: windows hid libusb hidapi

我正在为一个团队中的通用USB HID设备编写一个控制软件,在Windows 7上工作。由于我作为实习生的身份,我的可能性有限:

  • 软件必须在Windows上工作
  • 软件必须使用Windows耗材的默认HID驱动程序

我的问题是,当我尝试使用HidUSB驱动程序(根据Zadig)访问设备时,我的中断传输读取尝试总是在设备实际发送数据时导致超时。写入设备始终有效,无论是否使用HIDAPI,是否使用libusb,只读取失败。 (这是一个原始的设备atm,甚至最终的数据包数据规范都没有完成,目前它只是向主机发送ON或OFF字符串,并且写入设备会改变7种颜色和关闭状态之间的LED状态,所以一个人肯定在工作)

我无法想象设备是否有故障,因为如果我将Windows上的驱动程序替换为使用Zadig的WinUSB驱动程序,则可以使用libusb(此后hidapi无法打开设备)和Linux上的驱动程序读/ dev / hidraw也可以返回数据。我还阅读了HID和USB规范,我知道设备描述符表明USB数据包大小为8,而HID输入报告的大小上限为20,因此我不知道设备使用的是什么报告ID。 BR />

检查与USBPcap和Wireshark的Windows通信,我在设备处理中可以注意到的唯一区别是,与WinUSB驱动程序一起使用的CC相比,要求数据的主机数据包与HidUSB驱动程序相比为00。

为了记录,我已经尝试了libusb,hidapi,HidLibrary,团队中的任何人都不知道该怎么做。

我还读到Windows禁用了对HID键盘和鼠标的访问,但我发现没有设备配置最终作为USB鼠标的实际示例。设备管理器在HID tho下列出我的设备两次,一次作为HID兼容设备或它如何调用(此处为本地化Win7),一次作为USB输入设备,但未在鼠标或键盘选项中列出。

1 个答案:

答案 0 :(得分:2)

前一段时间对它进行了排序,但我想如果有人将来会遇到类似的问题,我会把它写下来。

如果报告的数据大小与报告描述符中的大小不一致,则Windows HID驱动程序会使任何传入数据包无效。 Linux和设备本身没有&在我提出这个问题的时候,我很关心为什么我还要把它作为来源。在上面的示例中,开启/关闭消息是4-5字节与报告的20字节长度是问题,现在设备发送20B消息,所有可以通过HidUSB写入的解决方案也可以读取。