USB HID设备读取数据问题

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

  现有一个普通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之间&

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
USB HID设备是一种使用USB接口进行通信的设备,它可以通过发送和接收数据来实现和计算机的交互。为了读写USB HID设备数据,我们需要编写一个程序来实现这个功能。 首先,我们需要使用合适的编程语言和相关的库来开发这样一个程序。对于Windows系统,我们可以使用C#、C++或者Python等语言来编写程序;对于Linux系统,则可以选择C语言、Python等来实现。然后,我们需要选择一个合适的USB库,比如libusb,它提供了一些用于控制USB设备的函数和结构体。 接着,我们需要编写程序来进行USB设备的初始化和连接。一般来说,我们需要找到目标设备的vendor ID和product ID,然后使用相关函数来打开设备并进行数据的读写。 在程序运行的过程中,我们可以使用相关函数来读取设备发送的数据,也可以发送命令或者数据设备。在读取数据时,我们需要根据设备的协议和数据格式进行解析和处理,以确保能正确地获取设备发送的信息。 最后,我们需要进行错误处理和资源释放。当程序出现错误时,我们需要进行相应的处理,比如关闭设备,释放相关资源等,以确保程序的稳定性和可靠性。 总的来说,编写USB HID设备数据读写程序是一个需要考虑设备协议、数据格式等因素的复杂任务,但通过合适的编程语言和库的选择,以及认真的编程实现,我们可以成功地实现这一功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值