本文章只说明蓝牙键值的添加,红外的键值可以参考rk的sdk的文档common\PWM\Rockchip_Developer_Guide_PWM_IR_CN.pdf。
遥控器连上蓝牙后,通过getevent 获取蓝牙打印的键值,例如:
0x0c是遥控器的协议,0xde是遥控器发送的码值。0xf0是驱动定义好的值,一般返回0xf0说明该键值还没有定义。
所以需要我们对这个按键进行一个适配,步骤如下:
1.打开kernel-4.19/drivers/hid/hid-input.c
找到case HID_UP_CONSUMER:
在里面添加蓝牙码值
2.打开kernel-4.19/include/linux/input-event-codes.h
添加刚才需要定义的常量
到这一步,我们就可以通过getevent获取到刚添加的值。
3.我们修改键值映射文件,这里以默认的Generic.kl文件说明,具体使用哪个kl文件,可以通过dumpsys input查看。
kl文件路径为 framework/base/data/keyboards/Generic.kl
4.添加完kl文件后需要添加kl文件需要的常量
打开frameworks/native/include/android/keycodes.h
需要按照AKEYCODE_XXX的格式定义,定义值是给上层使用的。
然后打开frameworks/native/libs/input/InputEventLabels.cpp文件,
添加常量值
添加后打开frameworks/base/core/java/android/view/KeyEvent.java
新增常量定义
,修改完KevEvent.java后编译可能会报api update的错,报错如下:
You have tried to change the API from what has been previously approved.
To make these errors go away, you have two choices:
-
You can add ‘@hide’ javadoc comments to the methods, etc. listed in the
errors above. -
You can update current.txt by executing the following command:
make api-stubs-docs-update-current-api
To submit the revised current.txt to the main Android repository,
you will need approval.
按照指令提示我们更新下api,执行make api-stubs-docs-update-current-api后,再编译顺利通过,可以正常使用识别蓝牙的键值。一般键值的逻辑处理在frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java。