调用 usb_control_msg 返回错误值 -32, Broken pipe, 对 hidraw write时 返回错误值 -32, Broken pipe
-------------------Step 1---------------------
如題,使用 libusb 對 hid 類設備進行控制傳輸的時候,有時會遇到此錯誤,但是實際上傳輸是成功的,用usb分析儀等工具和程序中驗證,比如發送數據成功后,讓設備返回給主機,主機讀取數據后驗證數據正確性。由此看來,該錯誤是內核返回出現了錯誤,并不是指實際的通訊異常。
現在在使用其他HID類設備在進行測試,發現有些HID類設備不會出現類似的報錯,因此寫程序模擬該設備通訊過程,嘗試與主機通訊,依然返回錯誤值 -32, Broken pipe。該原因還在跟蹤,待續~
-------------------Step 2---------------------
經過驗證與跟蹤,發現是由于主機設備回復的數據包出錯導致的,回復的數據包PID沒有與前面的輸出過程交替造成的。也即正常數據傳輸過程中數據包是 DATA0 和 DATA1 不停交替的,如果回復的數據包PID未交替,那么主機認為沒有正確響應,因此返回了之前的錯誤碼?-32, Broken pipe。更改設備程序,回復交替 PID,問題解決。
如果遇到了不是該情況,可以給我郵件或者評論。遍歷了國內外大小論壇,真正解決問題的辦法很少,遇到此問題,一起進行探討研究。有問題給我留言吧~:-D
總結
以上是生活随笔為你收集整理的调用 usb_control_msg 返回错误值 -32, Broken pipe, 对 hidraw write时 返回错误值 -32, Broken pipe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴Java开发手册终极版
- 下一篇: 子网寻址