使用 HID API 打开和读取设备

Open and read from device using HID API

提问人:Zachary Peterson 提问时间:3/20/2023 最后编辑:Zachary Peterson 更新时间:3/31/2023 访问量:466

问:

我正在使用 HID API 编写一个低级输入系统。

我已经到了可以枚举系统上所有设备并使用 打开它们的地步。CreateFile

我现在遇到的问题是如何管理从它们中读取,似乎找不到任何文档来正确执行此操作。当我调用它时,它会停止执行,直到我从该设备接收到输入,我宁愿不要为我想要输入的每个设备创建一个线程。我尝试过使用异步读取,但它似乎不起作用,这仍然会导致使用不必要的线程。我希望能够在任意时间从设备获取“更新”,我不担心在发生时获得输入,至少现在不担心。ReadFile

如果有人能指出文件或举例说明这样的系统是否可行,将不胜感激。

C++ HID setupAPI

评论


答:

1赞 DJm00n 3/31/2023 #1

您可以在零超时的情况下进行异步读取 - 如果设备尚未发送任何内容,它不会阻止执行并返回错误。您可以查看 hidapi 实现,例如: https://github.com/libusb/hidapi/blob/master/windows/hid.c#L1065

另请注意,hid 驱动程序为每个设备都有一个环形缓冲区,如果由于环形缓冲区溢出而读取速度不够快,可能会错过一些报告。

https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/obtaining-hid-reports

https://learn.microsoft.com/en-us/windows-hardware/drivers/hid/troubleshooting-hid-reports