我正在为一个团队中的通用 USB HID 设备编写一个控制软件,在 Windows 7 上工作。由于我作为实习生的身份,我的可能性是有限的:
- 该软件必须在 Windows 上运行
- 该软件必须使用 Windows 提供的默认 HID 驱动程序
我的问题是,但是我尝试在使用 HidUSB 驱动程序时访问设备(根据 Zadig),当设备实际发送数据时,我的中断传输读取尝试总是导致超时。写入设备一直有效,无论我使用 HIDAPI,是否使用 libusb,只有读取失败。(这是一个原始设备 atm,甚至最终的数据包数据规范都没有完成,目前它只是向主机发送一个 ON 或 OFF 字符串,写入设备会在 7 种颜色和关闭状态之间更改 LED 的状态,所以一个人肯定在工作)
我想不出设备有问题,因为如果我用 Zadig 将 Windows 上的驱动程序替换为 WinUSB 驱动程序,它可以与 libusb 一起工作(此后 hidapi 无法打开设备)和 Linux 上,只需读取 /dev /hidraw 也可以很好地返回数据。我还阅读了 HID 和 USB 规范,并且我知道设备描述符声明 USB 数据包大小为 8,而 HID 输入报告的大小上限为 20,但我不知道设备使用什么报告 ID。
检查 Windows 与 USBPcap 和 Wireshark 的通信,我注意到设备处理的唯一区别是,与 WinUSB 驱动程序一起使用时的 CC 相比,HidUSB 驱动程序请求数据的主机数据包用 00 填充。
作为记录,我已经尝试过 libusb、hidapi、HidLibrary 并且团队中没有人知道现在该做什么。
我还读到 Windows 禁用了对 HID 键盘和鼠标的访问,但我没有发现设备配置最终成为 USB 鼠标的实际示例。设备管理器在 HID 下列出了我的设备两次,一次作为 HID 兼容设备或其调用方式(此处为本地化 Win7),一次作为 USB 输入设备,但未在鼠标或键盘选项中列出。