[問題] 有人試過在android 開發板讀/dev/hidraw

作者: blueblueChen (藍藍欠)   2016-07-16 23:29:51
如題..
我這邊使用了 kernel/samples/hidraw/hid-sample.c 範例
完全沒有改,把它整進去 BSP 內(android 6.0.x, kernel )
然後拿公司同事的 MCU 接 USB到我們的開發板,在 /dev/下有
生成 hidraw0 node,MCU那邊team說data插上電後會一直送data,而我
執行 hid-sample 程式出現以下
Report Descriptor Size: 161
Report Descriptor:
5 1 9 6 a1 1 85 1 5 7 19 e0 29 e7 15 0 25 1 75 1 95 8 81 2 95 1 75 8 81 1 95
5 75 1 5 8 19 1 29 5 91 2 95 1 75 3 91 1 95 6 75 8 15 0 25 ff 5 7 19 0 29 ff
81 0 5 c 9 0 15 80 25 7f 75 8 95 8 b1 2 c0 5 1 9 2 a1 1 85 2 9 1 a1 0 5 9 19
1 29 3 15 0 25 1 95 3 75 1 81 2 95 1 75 5 81 3 5 1 9 30 9 31 9 38 15 81 25 7f
75 8 95 3 81 6 c0 c0 6 ff 0 9 1 a1 1 85 3 9 0 15 0 25 1 75 8 95 40 81 2 85 3
9 0 91 82 c0
Raw Name: STMicroelectronics Joystick in FS Mode
Raw Phys: usb-f72c0000.usb-1.1/input0
Raw Info:
bustype: 3 (USB)
vendor: 0x0483
product: 0x5710
HIDIOCSFEATURE: Broken pipe
HIDIOCGFEATURE: Broken pipe
write() wrote 2 bytes
read: Try again
它可以 open file ,卻不能 read, 如果我接上 HID 滑鼠,他也生成 hidraw1
可以cat /dev/hidraw1 ,滑鼠移動就有資料產生。但 hidraw0 不能,一開始以為
是 read () 的問題,查看了linux hidraw 的 Document.txt,說 read API
是去讀 INTERRUPT IN endpoint ,我們知道MCU那端要傳USB
data 過來也是將資料送達到 IN 的 endpoint,傳輸是INTERRUPT ,所以
API 我認為沒問題...
這邊我又看了開發板端的 Android 系統,插上MCU那端的USB後,dmesg
出現一堆錯誤的訊息
date_urb_state(): trimming xfer length
[ 987.697153] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.729154] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.761154] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.793160] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.825159] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.857346] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.889163] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.921161] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.953161] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 987.985163] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.017188] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.049164] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.081163] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.113190] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.145167] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.177164] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.209165] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.241167] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.273167] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.305167] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.337167] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.369168] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.401169] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.433169] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.465169] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.497170] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.529171] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.561171] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.593172] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.625172] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.657174] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.689173] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.721174] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.753175] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.785201] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.817176] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
[ 988.849203] dwc2 f72c0000.usb: dwc2_update_urb_state(): trimming xfer
length
不知道有沒有先進遇過 hidraw 無法 read ,然後dmesg 又出現這種錯誤
呢?  感謝!
作者: withoutshine (何必幫別人想那麼多)   2016-07-17 06:33:00
看一下你device傳出來的 endpoint descriptor跟實際送出來的資料長度有沒有問題
作者: cutem (大少爺)   2016-07-18 00:11:00
http://b8807053.pixnet.net/blog/post/267518989-usb-device-資料讀取方式的研究看一下對應的kernel選項有没有打開

Links booklink

Contact Us: admin [ a t ] ucptt.com