遥控按键互换

源码修改之系统按键

查看对应平台按键映射文件

  • 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进制,需要转换

增加遥控器按键(待验证)

  1. 首先在内核中定义响应的遥控器寄存器值,映射为内核数值
  2. 在kl中增加相应的字符匹配
  3. 在c层定义内核数值到java值的映射
  4. 按照源码说明,在KeyCode.java以及其他文件中增加响应的按键值声明
坚持原创技术分享,您的支持将鼓励我继续创作!