我需要对定制的HID USB设备(控制面板上的一些按钮和LED)进行反向工程 . 该驱动程序仅在Windows上可用,我们需要* nix实现 .
该设备显然是HID设备,但不是特定类 . 它提供两个接口,每个接口都有一个中断 endpoints .
我的设置目前涉及在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应用程序中,通过控制传输的输入报告即将到来 .
谢谢你的指针!阿恩
附录I:我想知道如何在使用 libusb_interrupt_transfer() 时指定我想要接收哪个报告ID?
附录II:当比较Windows驱动程序对Wireshark中上述代码生成的请求时,我没有看到任何差异(URB中的值相同) . 但是,只有当Windows驱动程序发出时才会返回中断传输 .
在Wireshark中检查Windows驱动程序通信时,除了各种 GET_DESCRIPTOR(...) 之外,我没有看到任何控制传输 . 最重要的是:没有 SET_INTERFACE 或 SET_CONFIGURATION 因此我怀疑问题与库或我如何使用它有关并且与设备无关 .