Android Framework层添加和修改按键键值

framework按键修改以及上层处理

前言

前段时间有做一个客户修改了遥控器的按键排布,需要修改键值按键的功能,主要是修改framework层的按键上层处理,此篇做一个记录。

文件修改

总共需要修改下列文件

  1. device/mstar/S2/preinstall/keylayout/Vendor_0000_Product_0000.kl
  2. include/linux/input.h
  3. kitkat-mstar-master/device/mstar/S2/preinstall/modules/rc-mstar-tv.ko
  4. kitkat-mstar-master/frameworks/base/api/current.txt
  5. kitkat-mstar-master/frameworks/base/core/java/android/view/KeyEvent.java
  6. kitkat-mstar-master/frameworks/base/core/res/res/values/attrs.xml
  7. kitkat-mstar-master/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
  8. kitkat-mstar-master/frameworks/native/include/android/keycodes.h
  9. 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 },
+
+       {
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mrsongs的心情杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值