-------------------Step 1---------------------
如题,使用 libusb 对 hid 类设备进行控制传输的时候,有时会遇到此错误,但是实际上传输是成功的,用usb分析仪等工具和程序中验证,比如发送数据成功后,让设备返回给主机,主机读取数据后验证数据正确性。由此看来,该错误是内核返回出现了错误,并不是指实际的通讯异常。
现在在使用其他HID类设备在进行测试,发现有些HID类设备不会出现类似的报错,因此写程序模拟该设备通讯过程,尝试与主机通讯,依然返回错误值 -32, Broken pipe。该原因还在跟踪,待续~
-------------------Step 2---------------------
经过验证与跟踪,发现是由于主机设备回复的数据包出错导致的,回复的数据包PID没有与前面的输出过程交替造成的。也即正常数据传输过程中数据包是 DATA0 和 DATA1 不停交替的,如果回复的数据包PID未交替,那么主机认为没有正确响应,因此返回了之前的错误码 -32, Broken pipe。更改设备程序,回复交替 PID,问题解决。
如果遇到了不是该情况,可以给我邮件或者评论。遍历了国内外大小论坛,真正解决问题的办法很少,遇到此问题,一起进行探讨研究。有问题给我留言吧~:-D