首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序在使用默认HID驱动程序时忽略USB设备的传入数据包

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

Stack Overflow用户
提问于 2014-07-10 07:40:30
回答 1查看 1.2K关注 0票数 3

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

  • 该软件必须在Windows上工作

  • 该软件必须使用默认的HID驱动程序Windows供应

但是,我的问题是,在使用HidUSB驱动程序(根据Zadig的说法)时,我尝试访问设备,中断传输读取尝试总是会导致超时,而设备实际上确实发送数据。对设备的写入一直在工作,无论我是否使用HIDAPI,是否使用libusb,只有读取失败。(这是一个原始设备atm,甚至最后的数据包数据规范也没有完成,目前它只是向主机发送一个ON或OFF字符串,并将LED的状态更改为7种颜色和关闭状态,这样就可以肯定地工作了)

我不认为设备有问题,因为如果我用Zadig替换Windows上的驱动程序到WinUSB驱动程序,它就可以使用libusb (而且hidapi以后不能打开设备),而在Linux上,只要读取/dev/hidraw也可以很好地返回数据。我还阅读了HID和USB规范,我知道设备描述符声明USB数据包大小为8,而HID输入报告的大小上限为20,因此我不知道设备使用什么报告ID。

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

为了记录在案,我已经尝试过libusb、hidapi、HidLibrary和团队中没有人知道现在该做什么。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 14:10:09

一段时间前我就解决了,但我想如果将来有人有类似的问题,我会在这里写下来。

如果报表的数据大小与报表描述符中的数据长度不匹配,则Windows驱动程序将使任何传入数据包无效。 Linux和设备本身并不关心这一点,这就是为什么我在这里提出问题时也排除了作为源的原因。在上面的示例中,打开/关闭消息为4-5字节,而报告的20字节长度是问题所在,现在设备发送了20B消息,所有可以通过HidUSB写入的解决方案也可以读取。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24670970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档