- 论坛徽章:
- 0
|
手上有一个Mifare的usb设备(门禁usb模块,非接触M1卡读卡器),设备商什么都不懂,只能帮忙定位芯片类型。
1、分析M1卡设备USB接口
原厂对usb设备描述含糊,没有usb设备通信的描述文档。只能自主分析设备。
M1卡设备属于usb hid设备类,经过分析M1卡设备不像平常的键盘等输入设备。
属于②类设备(内核要开启hiddev支持,才能在用户层进行访问),需要自己编写usb通信驱动(一般编写用户层驱动较为简单)。经过抓包与读取端点信息,发现了2个usb中断端点,一个用来输入一个用来输出,大小都是64个字节的包。查看了Android对usb host api的支持,太简陋了,只支持bulk传输。
01-04 22:50:53.411: D/m1(8461): endpoint[0].address: 02
01-04 22:50:53.411: D/m1(8461): max packet size: 0040
01-04 22:50:53.411: D/m1(8461): polling interval: 0A
01-04 22:50:53.411: D/m1(8461): endpoint[1].address: 82
01-04 22:50:53.411: D/m1(8461): max packet size: 0040
01-04 22:50:53.411: D/m1(8461): polling interval: 0A
usb.c ---> hid-core.c ----> hid-input.c ----> ①[keyboard/mouse/joystick/event]
|
|
②--> hiddev.c ----> POWER / MONITOR CONTROL
2、libusb1.0移植调试
自定义的usb hiddev设备操作是比较麻烦,尤其是操作中断断点,为了降低开发难度,选用开源libusb库的接口来操作设备。
http://www.libusb.org/
通过eclipse开发ndk程序, 目标是要和一个插在android上的HID设备通信,程序已经能编译通过,但是运行到android设备上后就报错,分析error 是我的程序没有打开/dev/bus/usb/下的设备文件的权限,改了uevend.rc,但是这个001 002 003会随着设备的异常插拔改变序号,Android又没有udev,实在繁琐。
root@android:/dev/bus/usb/001 # ll
ll
crw-rw---- root usb 189, 0 2010-01-01 08:00 001
请问如何能让自己的普通程序获得读写/dev/bus/usb/下文件的权限?
或者是否有类似像打开蓝牙权限那样在manifest.xml的设置?
也想通过获取manifest.xml 把apk添加到USB设备的组,通过查看权限指令pm list permissions | busybox grep USB* 没看到类似的描述啊。
#define AID_USB 1018 /* USB devices */
有没有manifest.xml配置能使得apk加入到AID_USB组中,这样就不用改系统权限了。
如果实在没有办法,只能实现一个root的服务监听uevent事件,修改权限了。。 |
|