参考转载:https://blog.csdn.net/jiuxiaoyunwu/article/details/51861233;https://www.2cto.com/kf/201405/298944.html
https://www.cnblogs.com/dyufei/p/6612790.html
红外遥控按下时的IR key变化流程:
1. IR红外遥控按下时,安卓板子上接收器接收信号,*.dtsi文件(定义客户码,支持的IR厂商等) input.h文件(定义IR的scancode对应值);android会据此解析IR的scancode
位置:kernel/arch/arm64/boot/dts/realtek(我的是裁剪过得最小系统,位置不确定,但都在kernel下);
/android/frameworks/native/include/android/input.h
2.scancode经过*.kl(android/device/realtek/kylin)文件解析,会得到KeyCodeLable;
路径:android/device/realtek/kylin
查看.kl文件名称方法:串口工具中输入命令getevent -i,如下图会得到name;kl文件和name同名;kl文件也就是键盘布局文件。
root@kylin32:/ # getevent -i
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 1: /dev/input/event0
bus: 0000
vendor 0000
product 0000
version 0000
name: "venus_IR_input"
location: "venus/input0"
id: ""
version: 1.0.1
events:
KEY (0001): 0066 0067 0069 006a 006c 0071 0072 0073
0074 0080 009a 009e 00a8 00cf 00d0 00e8
0110 0160 0161 0165 0166 0174 0179 0197
019c 0213 0214
REL (0002): 0000 0001
3.keycodelable依靠InputEventLabels.h文件解析出keycode
android/frameworks/native/include/input
4.keycode经过KeycodeLabels.h文件中解析,执行keyevent动作。(如图所示)
路径
android/frameworks/native/include/input
tips:
如果不知道事件值,可以串口输入getevent,然后按下按键,如图
130|root@kylin32:/ # getevent
could not get driver version for /dev/input/mouse0, Not a typewriter
add device 1: /dev/input/event0
name: "venus_IR_input"
could not get driver version for /dev/input/mice, Not a typewriter
/dev/input/event0: 0001 0067 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0067 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 006a 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 006a 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0074 00000000
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0160 00000001
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0001 0160 00000000
/dev/input/event0: 0000 0000 00000000
enter rtk_standby_main, watchdog sec 0
得到一个67,6a,74,这是三个keyevent的16进制,转化为10进制分别为103,106,116