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