需求
设备连接pc后,枚举为一个HID设备,当打开adb后,枚举为adb设备。
思路
- 通过int.*.rc 文件控制设备枚举类型,默认状态设置persist.sys.usb.config 属性为hid,当打开adb后设置为hid,adb。
- 平台对应的*.usb.rc中根据属性修改usb 设备的PID 和 VID,根据启动或停止adbd服务。
- 在kernel usb 驱动中实现hid通信的驱动。
代码实现
init.rockchip.rc
rk3288 Android7.1代码默认为adb,此处修改为hid。
1 | - setprop sys.usb.config adb |
device/rockchip/common/init.rk30board.usb.rc
此处判断属性值并做对应操作。
- /sys/class/android_usb/android0/ 在android7.1上已经不存在该节点
1 |
|
device/rockchip/rk3288/init.rk30board.usb.rc
当属性修改后修改为不同的PID VID
1 | +on property:sys.usb.config=hid && property:sys.usb.configfs=1 |
kernel usb 驱动实现
usb驱动中根据hid协议阻止数据
1 | +static struct hidg_func_descriptor fdesc_hid= { |
1 | + case ((USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE) << 8 |
patch
以下是整个修改的patch
1 | build/tools/post_process_props.py | 11 ++-- |