[问题] 有人试过在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