源码修改之系统按键
查看对应平台按键映射文件
- cat /proc/bus/input/devices
得到数据如下:
I: Bus=0018 Vendor=3697 Product=0001 Version=0001
N: Name="MStar Smart TV IR Receiver"
...
I: Bus=0006 Vendor=3697 Product=0002 Version=0000
N: Name="MStar Smart TV Keypad"
...
上面可以看出有两个devices,详细信息如下:
1. 设备名称:MStar Smart TV IR Receiver
按键映射文件名称:Vendor_3697_Product=0001.kl
2. 设备名称:MStar Smart TV Keypad
按键映射文件名称:Vendor_3697_Product=0001.kl
查看对应设备按键映射数据
- cat system/user/keylaout/Vendor_3697_Product=0001.kl
得到数据如下:
...
#
# MStar Smart TV IR Receiver.
#
key 116 POWER
key 11 0
key 2 1
key 3 2
key 4 3
key 5 4
key 6 5
key 7 6
key 8 7
key 9 8
key 10 9
...
其中:
1. key: 是关键字。固定值,不需要改变
2. 116: 该按键在linux驱动中对应的键值
具体查看位置:android/external/kernel-headers/original/uapi/linux/input.h.
这里是十进制数据,串口看到的是十六进制,需要转换数据
3. POWER: 按键映射到Android中的按键,对应“keycodes.h”文件中AKEYCODE_POWER,其对应安卓中的26
具体查看路径在:frameworks/native/include/android/keycodes.h
修改按键映射(不增加按键)
比如我们需要将音量加减互换,就可以修改对应的kl文件
key 402 CHANNEL_UP
key 403 CHANNEL_DOWN
修改为:
key 403 CHANNEL_UP
key 402 CHANNEL_DOWN
替换源文件到源目录下,重启即可发现按键修改成功
遥控按键键值码和按键板键值码向上抛出的字符可以共用,但是对应的数值不相同,需要在串口中查看一一对应
串口打印的数据为16进制,字符映射文件默认为10进制,需要转换
增加遥控器按键(待验证)
- 首先在内核中定义响应的遥控器寄存器值,映射为内核数值
- 在kl中增加相应的字符匹配
- 在c层定义内核数值到java值的映射
- 按照源码说明,在KeyCode.java以及其他文件中增加响应的按键值声明