Android电视配置遥控器或者修改遥控器按键

一、Android按键流程

1.首先我们需要搞清的是当我们按下按键时发生了什么(如下图):


根据如上流程图,从下往上看,当我们按键时,

1)linux内核通过扫码,将硬件上按键按下电压变换为数字电压并映射到数组下标

2)通过数组关系转化将按键映射到内核中预定义的键值

3)linux内核上报给上层的就是这个整型值(内核扫描标准值体现在kernel/uapi/linux/input.h)

如下input.h代码部分截图:


linux内核上报按键值后又会发生什么呢,这里就要讲到Android kl文件了。Android kl文件是标准linux与android的键值映射文件,kl文件可以有很多个,我们怎么知道当前设备用的是哪个kl文件呢?

可以通过如下两个命令查看:

1.dumpsys input

2.cat /proc/bus/input/devices  (输入命令后如下截图)

可以查看设备当前所使用的kl文件,kl文件代码部分如下:

key后面的数字就是kernel上报的按键码,后面的字符标签就是该按键码对应的android中的按键标签,当用户按下按键后,kernel会上报对应按键的按键码,然后上层根据正确的kl文件中的对应关系,将按键对应到上层的按键标签上来。

按键标签其实对应的也是一个按键码。与kernel上报的按键码不同,按键标签所对应的按键码就是我们在上层代码逻辑中使用的按键码。我们可以在如下文件中看到:

/frameworks/native/include/input/InputEventLabels.h

/frameworks/native/include/android/Keycodes.h

其中,在InputEventLabels.h中,这里通过宏定义将标签字符与上层按键码对应起来,上层按键码又是在Keycodes.h中枚举的,如下代码截图片段。

这样的话就将物理按键、kernel、上层之间的映射关系确定了,点击某个物理按键,上层就知道哪个按键被点击了。

上面是Android实体按键的流程

下面介绍的是Amlogic平台配置遥控器的流程

二、遥控器配置及其解析流程

代码位置:/device/customer/xxxx/init.amlogic.rc

               /device/customer/xxxx/device.mk 

编译时,将ir_active.sh拷贝到system/bin下,在init.rc中,通过service ir_active /system/bin/ir_active.sh在开机阶段将ir_active.sh中的配置通过ioctl赋值到ir驱动的变量中(用户控件->内核空间)

代码位置: /device/customer/xxxx/files/ir_active.sh

ir_active.sh中具体通过remotecfg将遥控器的配置赋值到ir驱动变量中,

三、红外驱动

remotecfg程序代码目录:

/vendor/amlogic/frameworks/services/remoteconf/

Linux irremote driver将依照红外驱动配置文件,将红外键值ircode映射为 Linux标准键盘扫描码scancode。这个过程即将红外遥控器的按键事件转换为Linux的标准input event。

红外驱动配置文件/factory/customer/rc_user_cnc.ini,/factory/customer/rc_user_cnc.cfg

标准键盘扫描码/kernel/uapi/linux/input.h中

其中custom_code为遥控器头码,用以区分各种遥控器的

key_begin:按键映射开始

key_end:按键映射结束

0x1b 113  //#MUTE   //0x1b为红外键值 113标准扫描码

(PS:多个键值可以对应一个扫描码)

Android层:

Windows manager从irremote driver中读出key event,再通过/system/usr/keylayout/xxx.kl文件,将标准input设备的scan code映射为Andriod API按键KEYCODE字符串。最终scancode和keycode被window manager发送到应用程序,被相关View消化处理

以Aml 920平台一个设备为例:使用的是system/usr/keylayout/Vendor_0001_Product_0001.kl(dumpsys input),该kl文件将scancode映射为Android API识别的KEYCODE字串.

/device/custom/xxxx/files/Vendor_0001_Product_0001.kl

 其中113为scancode VOLUME_MUTE为Android API按键keycode字符串

四、Android层新增按键

代码位置:

1:/frameworks/native/include/input/InputEventLabels.h

2:/frameworks/native/include/android/keycodes.h

3:/frameworks/base/core/java/android/view/KeyEvent.java

若是要新增按键,还要修改如上文件

a).在InputEventLabels.h中KEYCODES[]数组后面顺序添加。

例如:  ...       

    { "RED", 141},  

    { NULL, 0 }  

注意:1.追加的按键须在末行的{ NULL, 0 }前面,该文件会将这些字符串转换成数值、键值,传送到KeyEvent.java中

    2. RED后面的数值,需要与客户协商,客户APK应该专门处理这个新建的141值。  

    3.141的值不应与其他keycode重复,建议新增键的取值依照上文的值,依次累加。

    4.在frameworks/native/include/android/keycodes.h中追加:AKEYCODE_RED = 141 

    5.在frameworks/base/core/java/android/view/KeyEvent.java中添加:public static final int KEYCODE_RED = 141;   

其中KeyEvent.java中添加的数值要与上面keycodes.h中的数值保持一致,如果是在最后面追加的话,需要注意修改LAST_KEYCODE的值为最后一个。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,165评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,720评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,849评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,245评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,596评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,747评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,977评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,708评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,448评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,657评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,141评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,493评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,153评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,890评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,799评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,685评论 2 272

推荐阅读更多精彩内容