背景
Platform: RK3399
OS: Android7.1.2
Kernel: v4.4.103
调试
通过命令cat /proc/bus/input/devices 确认按键使用的键值对的文件名 通过“name”字段判断。
getevent可以查看上报的键值和状态
添加android已有的功能按键
当新增的按键功能是android系统默认自带的,
需要在frameworks/base/data/keyboards/Generic.kl 中找到你需要的按键键值
然后在对应的dts中添加对应的按键映射就可以了。
需确保使用的键值对的文件device/rockchip/common/rk29-keypad.kl里也有该键值对
添加自定义按键
具体可以参考某个已有的按键,在同一位置添加自定义按键
在device/rockchip/common/rk29-keypad.kl 中添加按键的键值对。驱动上报的键值。
frameworks/native/include/android/keycodes.h 和frameworks/native/include/input/InputEventLabels.h 中添加android层键值定义。
frameworks/base/core/java/android/view/KeyEvent.java 和frameworks/base/core/res/res/values/attrs.xml定义APP层按键常量。
frameworks/base/data/keyboards/Generic.kl 中添加键值对。
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java 中的interceptKeyBeforeQueueing()函数中添加系统层按键处理
参考
https://blog.csdn.net/u010783226/article/details/940514620
Howard调试:事实上,通过
130|nct_zz:/proc/bus/input #
130|nct_zz:/proc/bus/input #
130|nct_zz:/proc/bus/input # getevent
add device 1: /dev/input/event1
name: "rk29-keypad"
add device 2: /dev/input/event0
name: "goodix-ts"
/dev/input/event1: 0001 003f 00000001 警急报警按下63
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0001 003f 00000000 警急报警松开
/dev/input/event1: 0000 0000 00000000
然后在device/rockchip/common/rk29-keypad.kl中添加了相应键值 F5-->对应63
key 113 F12 //静音
key 59 F1 //线路输入
key 60 F2
key 61 F3 //听筒摘起
key 62 F4 //
key 63 F5 //紧急报警
然后在app中调用紧急报警键值(这里在上层会转换成KEYCODE_F5)
case KEYCODE_F5: // 紧急广播
if(BroadcastFragment.mbStartLocal == true){
break;
}
其他方法
另外 adb pull /system/usr/keylayout/rk29-keypad.kl
修改后直接 push 进去也可以完成任务
附件目录
https://download.csdn.net/download/yanhongfei268/85506599