USB HID设备读取数据问题

本文探讨了在将非HID USB设备模拟为HID设备时遇到的数据读取问题。由于HID读取机制,ReadFile操作与设备中断端点的轮询时间有关,可能导致数据丢失。为解决这个问题,提出了延长轮询时间和增加缓冲区大小两种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  现有一个普通usb 设备(一个控制端口,两个bulk(批量)端口,分别为in,out),想将其模拟成标准的HID设备,并用标准的HID 接口来读、写数据。

  HID读数据机制:ReadFile的调用不会引起设备的任何反应,即内核层收不到IOCTL_HID_READ_REPORT命令。应用层发的ReadFile命令不和HID设备与主机之间的中断IN端点直接联系。而主机会在设定的轮询时间内轮询设备,由HIDCLASS模块发出IOCTL_HID_READ_REPORT命令来读取中断IN端点的数据,将读到的数据放到buffer中。ReadFile即意味着从这个buffer中取回数据。轮询时间可以再接口描述符中设定,buffer大小可以通过HidD_SetNumInputBuffers来改变,XP默认大小为32个报告。

  因此就会出现如下问题:

    如果轮询时间太短,在ReadFile两次读取buffer之间&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值