c – libusb中断传输
我需要对定制的HID USB设备(控制面板上的一些按钮和LED)进行反向工程.该驱动程序仅在
Windows上可用,我们需要* nix实现.
该设备显然是HID设备,但不属于特定类别.它提供两个接口,每个接口都有一个中断端点. 我的设置目前涉及在Ubuntu主机上运行Windows的VirtualBox,以通过Wireshark捕获USB流量.协议相当简单,我已经获得了相当好的理解. 我在一个简单的C控制台程序中使用libusb-1.0进行原型设计.我已经设法通过发出SET_REPORT控制传输来切换LED,但是在通过传输中断接收按钮时很难. 实际上以下呼叫永远阻止: unsigned char bytes[8] = { 0 }; int len = 0; int ret = libusb_interrupt_transfer(handle,0x81,bytes,8,&len,0); 在Wireshark中检查生成的URB时,它看起来与在Windows会话中捕获的等效项完全相同.我仍然没有收到设备的回复. 我失败了我错过了一些设置.请注意,设备已正确打开,并且设备提供的两个接口均已成功声明.即使在我的linux应用程序中,通过控制传输的输入报告即将到来. 谢谢你的指针! 附录一: 附录二: 在Wireshark中检查Windows驱动程序通信时,除了各种GET_DESCRIPTOR(…)之外,我没有看到任何控制传输.最重要的是:没有SET_INTERFACE或SET_CONFIGURATION因此我怀疑问题与库或我如何使用它有关并且与设备无关. 解决方法
您发布的代码存在问题.您为定义字节而编写的语法不会产生8字节数组,但是您要求libusb将8个字节写入该地址,这样您可能会收到错误或内存损坏.试试这个:
unsigned char buffer[8]; int len = 0; int ret = libusb_interrupt_transfer(handle,buffer,sizeof(buffer),0); 每个HID报告都有自己的端点,因此您可以通过指定正确的端点来指定要接收的报告.您指定了端点1 IN(0x81).您确定在设备的描述符中定义了端点吗?也许你应该得到描述符(在Ubuntu中使用lsusb -v)并在这里发布它们以便我们检查它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |