1.按香橙派用户手册刷入安卓TV12。正常启动
2.由于自己有中国移动魔百和某款遥控器,没买官方遥控器(贵,据说tb有替代品inphnic?),但是买了红外扩展板。经测试,自有遥控器,最大的问题是返回桌面无反应,菜单是返回桌面,数字、方向、ok均正常。
3.有给树莓派安卓TV改映射的文章,所以尝试了一下,给香橙派改映射。
4.随便打开了以前刷盒子用的adb软件。(黑框下)
5.连接,换成香橙派ip
adb connect [香橙派ip]
6.root一下。
adb root (会断连)
7.重连
adb connect [香橙派ip]
8.进入系统
adb shell
9.获取event,可以看到,按下遥控器后出现了很多event0,event0对应的就是“sunxi-ir”
getevent
add device 6: /dev/input/event0
name: "sunxi-ir"
/dev/input/event0: 0014 0000 00000000
/dev/input/event1: 0014 0000 00000000
/dev/input/event0: 0014 0001 00000000
/dev/input/event1: 0014 0001 00000000
/dev/input/event0: 0004 0004 01dd2295
/dev/input/event1: 0001 0004 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event1: 0000 0000 00000000
/dev/input/event0: 0004 0004 00dd2295
/dev/input/event1: 0001 0004 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event1: 0000 0000 00000000
10.找到sunxi-ir相关文件。dumpsys input 可以看见很多设备信息。使用grep筛选sunxi相关的,方便查看。
dumpsys input | grep sunxi
dumpsys input | grep sunxi
Location: usb-sunxi-ohci-1/input0
Location: usb-sunxi-ohci-1/input0
Location: usb-sunxi-ohci-1/input0
Location: usb-sunxi-ohci-1/input1
1: sunxi-ir-uinput
KeyLayoutFile: /system/usr/keylayout/sunxi-ir-uinput.kl
2: sunxi-ir
Location: sunxi-ir/input0
KeyLayoutFile: /system/usr/keylayout/sunxi-ir.kl
Device 3: sunxi-ir-uinput
Device 2: sunxi-ir
sunxi-ir 对应的就是2:sunxi-ir,可以看见,KeyLayoutFile: /system/usr/keylayout/sunxi-ir.kl。找到了kl文件,本文目标就是修改它。
11.解锁readonly.不然没法修改,使用push也会失败。重新挂载,以rw模式
mount -o remount,rw /
12.解锁了push也会因为“空间不足”失败,AI说是node空间不足,所以选择了直接修改,vi打开。
busybox vi /system/usr/keylayout/sunxi-ir.kl
13.修改映射。很迷糊的改法。先看14
key 1 SOFT_LEFT
key 2 SOFT_RIGHT
key 82 HOME 我遥控器上的【菜单】对应的是HOME,而真实的菜单是82。
它们的对应关系是这样的,遥控器十六进制数,解码KEYCODE,功能数
0x00123456 HOME 82
key 4 BACK
key 5 CALL
key 6 ENDCALL
key 7 0
key 8 1
key 9 2
key 10 3
key 11 4
key 12 5
getevent 时按下遥控器,可以看见一些数,那就是遥控器发过来的码,然后系统把它对应到KEYCODE,然后,你拿到了遥控器按键【菜单】对应的KEYCODE【HOME】,然后修改时把KEYCODE对应的“key 3”改成想要的“key 82”.
14.获取按下遥控器时,KEYCODE是什么。
首先,迷惑行为
logcat -v time
然后,ctrl c终止,再次
logcat -v time | grep KEYCODE
别问为什么,如果你直接grep的话,它没有输出信息????
05-13 08:52:54.187 D/TvWindowManager( 495): key event key = KEYCODE_BACK
05-13 08:52:54.344 D/TvWindowManager( 495): key event key = KEYCODE_BACK
05-13 09:16:58.278 D/TvWindowManager( 495): key event key = KEYCODE_HOME
05-13 09:16:58.492 D/TvWindowManager( 495): key event key = KEYCODE_HOME
此时我按下了我遥控器的【菜单】,然后获取到的是【KEYCODE_HOME】,HOME对应的功能是key 3,返回主页。
然后我vi编辑上面kl文件发现MENU对应的是key 82,所以把key 82 和HOME组合在一起
key 82 HOME。这样 遥控器按下【菜单】,系统收到【HOME】,然后执行 【key 82】功能。
同样的,我的【HOME】键,对应的是【AVR_POWER】,然后执行的【key 181】,所以改成
key 3 AVR_POWER
15.很难理解。key [数字]才是功能。KEYCODE只是遥控器对应的码。可以用命令模拟一下按下按键:input keyevent [数字]
input keyevent 20是↓,input keyevent 3是HOME,input keyevent 82是MENU……
16.重启生效?adb reboot
找到对应的keylayout文件(.kl),
找到要改的KEYCODE,
找到功能key [数字] ,
mount 重新挂载,
busybox vi修改。