Windows应用层接口HIDAPI与固件指定的输入输出通讯的注意事项
2023-06-20
588
0
- HID设备分为专用设备和自定义设备。专用设备为系统独占设备,由系统打开,并进行数据的处理,如键盘鼠标,触摸屏。自定义设备为自定义通讯的设备,比如我们可用于固件升级。专用设备用CreateFile打开时返回GetLastError()==5。
- HID设备无论应用层是否打开,其实驱动已经开始进行数据的读功能了。如果固件发数据,HIDClass驱动其实已经收到了,当应用层把打开HID端点时,使用ReadFile会把收到的数据返回给应用层。当然HIDCLass不是无限缓存数据的,缓存的默认值可通过HidD_SetNumInputBuffers来获取,也可使用HidD_GetNumInputBuffers来设置,最大为512包。
- 通过HidD_GetInputReport不再从HIDCLASS中取数据,而是直接从固件中读数据。所以HID的读写数据就可分为带缓存和不带缓存的。
- HIDCLASS会自动对应用层打开的所有句柄进行数据拷贝,所以一个无论你用多少个句柄,只要打开的是同一个HID设备,每个打开的句柄都会收到同一份数据。
- 为了进行数据的区别,HID在应用层通讯必须带的ReportId,并且必须在数据头部,ReportId一般为1字节。当然固件中又是根据自己实际析配置来搞的。只是HIDCLASS这个驱动进行了偷梁换柱。
参考文章:
- Windows系统HID设备获取输入报告ReadFile和HidD_GetInputReport区别 https://www.usbzh.com/article/detail-934.html
- Windows服务HidServ及Hid.dll工作原理 https://www.usbzh.com/article/detail-923.html
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936