前言
前段时间有做一个客户修改了遥控器的按键排布,需要修改键值按键的功能,主要是修改framework层的按键上层处理,此篇做一个记录。
文件修改
总共需要修改下列文件
- device/mstar/S2/preinstall/keylayout/Vendor_0000_Product_0000.kl
- include/linux/input.h
- kitkat-mstar-master/device/mstar/S2/preinstall/modules/rc-mstar-tv.ko
- kitkat-mstar-master/frameworks/base/api/current.txt
- kitkat-mstar-master/frameworks/base/core/java/android/view/KeyEvent.java
- kitkat-mstar-master/frameworks/base/core/res/res/values/attrs.xml
- kitkat-mstar-master/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
- kitkat-mstar-master/frameworks/native/include/android/keycodes.h
- kitkat-mstar-master/frameworks/native/include/input/KeycodeLabels.h
修改步骤
一、确定按键键值是否有上报:
使用串口输入getevent 命令:
/dev/input/event1: 0004 0000 0000029f
/dev/input/event1: 0004 0001 0000007a
/dev/input/event1: 0004 0002 fff0fc86
/dev/input/event1: 0004 0004 000001ac
/dev/input/event1: 0004 0007 f71c02a7
/dev/input/event1: 0000 0000 00000000
/dev/input/event1: 0004 0000 00002307
/dev/input/event1: 0004 0001 fffffc6d
/dev/input/event1: 0004 0002 fff12e53
/dev/input/event1: 0004 0004 000001ac
/dev/input/event1: 0004 0007 fc7a5385
/dev/input/event1: 0000 0000 00000000
/dev/input/event7: 0004 0004 00000035
/dev/input/event7: 0000 0000 00000000
/dev/input/event1: 0004 0000 00002a2d
当我们按下按键的时候会上报event7事件,接着输入:getevent dev/input/event7
测试我们需要修改的遥控器按键,按下按键,出现如下类似的内容说明有按键上报,说明底层驱动是已经适配好了,只需要修改上层就好了。
0004 0004 00000035
0000 0000 00000000
0004 0004 000000fc
0000 0000 00000000
0004 0004 00000018
二、确定KL键值映射文件
android kl(key layout)文件是一个映射文件,是标准linux与anroid的键值映射文件,kl文件可以有很多个,但是它有一个使用优先级,一般代码中的kl文件都是在device下面,我们需要找到代码中使用的kl文件是哪个
输入:cat /proc/bus/input/devices
130|root@H90:/ # cat /proc/bus/input/devices
I: Bus=0018 Vendor=3697 Product=0001 Version=0001
N: Name="MStar Smart TV IR Receiver"
P: Phys=/dev/ir
S: Sysfs=/devices/virtual/rc/rc0/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=13
B: KEY=7e00000000000000 40000800 1e16c000008000 10000000
B: MSC=10
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="MCE IR Keyboard/Mouse (ir)"
P: Phys=/input0
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=kbd mouse0 event1
B: PROP=0
B: EV=100017
B: KEY=30000 7 ff87207ac14057ff febeffdfffefffff fffffffffffffffe
B: REL=3
B: MSC=10
I: Bus=0003 Vendor=058f Product=3841 Version=0001
N: Name="USB 2.0 PC Camera"
P: Phys=usb-mstar-1.2/button
S: Sysfs=/devices/Mstar-ehci-3.12/usb3/3-1/3-1.2/3-1.2:1.0/input/input2
U: Uniq=
H: Handlers=kbd event2
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="Accelerometer Sensor"
P: Phys=
S: Sysfs=/devices/lsm6ds3.29/input/input3
U: Uniq=
H: Handlers=event3
B: PROP=0
B: EV=11
B: MSC=97
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ST LSM6DS3 Gyroscope Sensor"
P: Phys=
S: Sysfs=/devices/lsm6ds3.29/input/input4
U: Uniq=
H: Handlers=event4
B: PROP=0
B: EV=11
B: MSC=97
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ST LSM6DS3 Significant Motion Sensor"
P: Phys=
S: Sysfs=/devices/lsm6ds3.29/input/input5
U: Uniq=
H: Handlers=event5
B: PROP=0
B: EV=11
B: MSC=91
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ST LSM6DS3 Step Counter Sensor"
P: Phys=
S: Sysfs=/devices/lsm6ds3.29/input/input6
U: Uniq=
H: Handlers=event6
B: PROP=0
B: EV=11
B: MSC=91
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ST LSM6DS3 Step Detector Sensor"
P: Phys=
S: Sysfs=/devices/lsm6ds3.29/input/input7
U: Uniq=
H: Handlers=event7
B: PROP=0
B: EV=11
B: MSC=91
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ST LSM6DS3 Tilt Sensor"
P: Phys=
S: Sysfs=/devices/lsm6ds3.29/input/input8
U: Uniq=
H: Handlers=event8
B: PROP=0
B: EV=11
B: MSC=91
I: Bus=0006 Vendor=3697 Product=0002 Version=0000
N: Name="MStar Smart TV Keypad"
P: Phys=
S: Sysfs=/devices/virtual/input/input9
U: Uniq=
H: Handlers=kbd event9
B: PROP=0
B: EV=3
B: KEY=7fffffffffffffff ffffffffffffffff ffffffffffffffff fffffffffffffffe
根据前面得到的input时间,比如前面得到的是input7事件,那么我们要找的kl文件就是Vendor_0000_Product_0000.kl
@@ -27,6 +27,9 @@ key 7 6
key 8 7
key 9 8
key 10 9
+key 237 BLUETOOTH
+key 193 SETTINGS_KEY
+key 187 AUTO_FOUCS
key 398 PROG_RED
key 399 PROG_GREEN
key 400 PROG_YELLOW
三、如果遥控器按键没有按键事件上报,说明驱动层没有适配,这里需要做适配
修改文件如下
--- a/3.1.10_Madison_TVOS/3.1.10/drivers/media/rc/keymaps/rc-mstar-tv.c
+++ b/3.1.10_Madison_TVOS/3.1.10/drivers/media/rc/keymaps/rc-mstar-tv.c
@@ -38,7 +38,15 @@ static struct rc_map_table mstar_tv[] = {
{
0x001d, KEY_FAST_MENU },
{
0x005A, KEY_FAST_3D },
{
0x0015, KEY_FAST_SETTINGS },
- {
0x0049, KEY_CUSTOM_KEY },
+ {
0x0049, KEY_CUSTOM_KEY },
+
+ {