前言:TV 上遥控器键值怎么样对应到android的系统中,最近一个客户需要在我们的平台上修改,所以,我顺便做了一下总结,方便以后参考。

请转载的朋友一定加上出处,十分感谢~~

第一步:

init.rc:通过service remotecfg /system/bin/remotecfg /system/etc/remote.conf在开机init阶段,将remote.conf中的配置通过ioctl赋值到ir驱动的变量中(用户空间—>内核空间),这样遥控定制化配置才会生效。remotecfg程序代码位于external/remoteconf/irremote.c,可以在设备的/system/bin/下找到它并手动运行#./system/bin/remotecfg /system/etc/remote.conf

第二步:

红外驱动(Linux内核层):Linux irremote driver将依照红外驱动配置文件,将红外键值ircode映射为Linux标准键盘扫描码scancode。这个过程即将红外遥控器的按键事件转换为Linux的标准input event。a) 红外驱动配置文件/system/etc/remote.confb)标准键盘扫描码kernel/include/linux/input.h(在几次遥控器定制化中,尚未修改过该文件)

第三步:

Andriod层:windows manager从irremote driver中读出key event,再通过/system/usr/keylayout/aml_keypad.kl文件,将标准input设备的scan code映射为Andriod API按键KEYCODE字符串。最终scancode和keycode被window manager发送到应用程序,被其focus view消化处理。例如:key 113 SEARCH官方称.kl为key layout map file。

映射/配置文件说明

ircode映射为scan code: device/a***c/xxx/remote.conf

#a***c NECremote

factory_code = 0xfb040001 //每个设备都有独特的factory code. 格式custom_code(16bit)+index_code(16bit) //例子: 0xfb040001= 0xfb04(客户码) + 0001 (低16位可填写任意值)

key_begin //按键映射表 0x47 11 //0x47是红外键值,11是对应的标准按键scancode,可以多个键值对应一个scancode

0x5C 97

……

key_end //按键映射表结束

mouse_begin //鼠标方向映射表,每行

0 0x10 //0是方向数字表示符(Left),对应红外按键键值0x10

1 0x11 //方向键右

2 0x0b //方向键上

3 0x0e //方向键下

mouse_end //鼠标方向映射表结束

scancode与KEYCODE字符串映射:

在2.3系统中,位于源码目录的device/a***c/xxx/ aml_keypad.kl

在4.0系统中,位于源码目录的device/a***c/xxx/Vendor_0001_Product_0001.kl

.....................

key 9     8

key 10    9

key 11    0

key 228   POUND

key 227   STAR

key 231   CALL

key 61    CALL

key 97    DPAD_CENTER

key 108   DPAD_DOWN

key 103   DPAD_UP

key 102   HOME

key 114   VOLUME_DOWN

KEYCODE字符串转换为Andriod UI键值:frameworks/base/include/ui/KeycodeLabels.h

static const KeycodeLabel KEYCODES[] = {

{ "SOFT_LEFT", 1 },

{ "HOME", 3 },

{ "BACK", 4 },

{ "CALL", 5 },

{ "ENDCALL", 6 },

{ "0", 7 },

{ "1", 8 },

{ "2", 9 },

{ "3", 10 },

{ "4", 11 },

{ "5", 12 },

{ "STAR", 17 },

{ "POUND", 18 },

{ "DPAD_UP", 19 },

{ "VOLUME_UP", 24 },

.........................................

键盘scancode定义:kernel/include/linux/input.h

......

#define KEY_SPACE    57

#define KEY_CAPSLOCK     58

#define KEY_F1   59

#define KEY_F2   60

#define KEY_F3   61

#define KEY_F4   62

#define KEY_F5   63

#define KEY_F6   64

#define KEY_F7   65

#define KEY_F8   66

#define KEY_F9   67

#define KEY_F10  68

........

案例一:新平台增加/移植遥控器代码

mid产品往往没有遥控器,如果要增加遥控器的支持,需要从mbox代码中拷贝以下文件和目录:

1)遥控器驱动:kernel\drivers\a***c\input\irremote

2)Andriod 遥控器service:external\remoteconf目录

3)init.rc中启动service remotecfg

# remote

service remotecfg /system/bin/remotecfg /system/etc/remote.conf

class main

oneshot

4)拷贝定制化remote.conf与kl两个文件

案例二:遥控器静音键改为设置键(不新增按键)

1) 按下遥控静音键,观察串口打印出的ircode

2) 在板子的/system/etc/remote.conf文件中找到静音键的ircode与scancode对应行,如下: 0x0c  113

3) 在板子的/system/usr/keylayout/aml_keypad.kl或Vendor_0001_Product_0001.kl中找到scancode 113所在行:

key  113   SEARCH

4) 将keycode ‘SEARCH’ 修改为需要的KEYCODE字符串。

5) 重新编译

案例三:遥控器增加新按键功能

新增按键的遥控器往往不是我们公版遥控器,不能利用现有按键实现特定功能,需要在系统中新增以支持特定APK应用场景。

1) 通过打印找出新增按键的ircode

2) 在device\a***c\xxx\remote.conf找到ircode对应行,或新建一行。这个文件中需要注意factory_code=0xfd020001是遥控器的客户码,必须与实体遥控器对应。

3) 修改device\a***c\xxx\aml_keypad.kl或Vendor_0001_Product_0001.kl

添加时依照上下文的格式:例如 key 1     BACK这行中,"1"对应remote.conf 中的scancode,"BACK" 就是需要在后面keycodeLabels.h中定义的字串,新增按键可以自定义这个字串,比如RED。

4) frameworks/base/include/ui/KeycodeLabels.h,在KEYCODES[]数组后面顺序添加:

...

{ "RED", 141},

{ NULL, 0 }

注意:

a) 追加的按键须在末行的{ NULL, 0 }前面。 在这个地方,会将RED等这些字符串转换成数值、键值,传送到KeyEvent.java中。

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

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

5)在frameworks/base/core/res/res/values/attrs.xml中追加:

6)在frameworks/base/core/java/android/view/KeyEvent.java中添加:

public static final int KEYCODE_RED=141;

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

7)修改完后,需要在根目录下先执行make update-api更新current.xml(frameworks\base\api目录下)文件,再进行编译,否则会报错。

android 遥控器home键键值,android 中遥控器键值的添加和修改相关推荐

  1. 如何为neo4j中的【关系】添加or修改【属性】?

    如何为neo4j中的[关系]添加or修改[属性]? 为neo4j中的[关系]添加or修改[属性] 在neo4j中创建包含"一对多"[属性]的[关系] 为neo4j中的[关系]添加o ...

  2. 【笔记】python的遍历字典:遍历所有键值对(方法items())、遍历字典中的所有键(方法keys())、按特定顺序遍历字典中的所有键、遍历字典中的所有值(方法values())、函数set()

    文章目录 一.python的遍历字典 二.遍历所有键值对(方法items()) 三.遍历字典中的所有键(方法keys()) 四.按特定顺序遍历字典中的所有键 五.遍历字典中的所有值(方法values( ...

  3. mysql主键和外键示例_SQL数据库中主键和外键的应用实例

    数据库 什么是数据库主键(Primary Key)? 数据库主键(Primary Key):指的是一个列或多列的属性组合,其属性值能唯一标识一条记录,通过它可强制表的实体完整性. 例如: (tb_Bo ...

  4. 计算机键盘space键在哪,电脑中space键如何使用|电脑中space键有什么作用

    很多朋友在日常工作中都经常会使用到电脑,不过他们对电脑的一些常识仍非常生疏!比如说Space,不少用户竟然不知道该单词是什么按键,竟然说在键盘上找不到.接下来,小编就为大家详细介绍下这个space键. ...

  5. c 表达式必须是可修改的左值_C++中的左值,右值,左值引用,右值引用

    童帅 2020-2-22 文中的"表达式"都是指赋值表达式 左值,右值,左值引用,右值引用 到底是什么 左值和右值 int a = 10; int b = 5; int c = a ...

  6. java布尔值_Java中的布尔值与布尔值

    HUX布斯 我有点扩展了提供的答案(因为到目前为止,他们专注于他们自己的"自己的" /人工术语,侧重于对特定语言进行编程,而不是照顾一般情况下(即当事情发生时)创建编程语言的幕后情 ...

  7. php数组指定键名,查找数组中指定键名的值_PHP教程

    HTML Ajax传值 输入要查找的值: 查找的结果为: //示例数组 搜索 depth $src_array = array( 'test' => '123', array( 'has' =& ...

  8. mysql 主键注解_oracle数据库中主键注解

    hibernate5(5)实体映射注解配置[2]主键生成策略 @GeneratedValue基本注解类型 在上一篇文章中,我们讲到了JPA使用@GeneratedValue注解来定义生成策略,而关于注 ...

  9. python键_在Python中创建键命令

    我正在根据我在网上找到的一个脚本编写我自己的简单键记录器.但是,我正在尝试编写一个键命令,以便在键入此命令时记录器程序将关闭.我该怎么做?(我也知道它一点也不安全,但这与这个程序无关) 例如,Ctrl ...

  10. sqlite数据库主键自增_sqlite 中主键id自增的方法(转)

    困扰了一段时间,先前的解决方法是定义静态变量rid=0,然后把++rid插入数据库的id列中,但是每次重启的时候,rid就自动从0开始,就会导致有相同的id,插入数据库发生错误.今天在网上又查了一下, ...

最新文章

  1. 【双边滤波】基于小波变换的多尺度自适应THZ增强双边滤波器的MATLAB仿真
  2. C# winform中一个类中如何调用另一个窗体的控件或方法
  3. wxWidgets:wxCommandLinkButton类用法
  4. Springboot-RabbitMq 参数配置详解
  5. 缓存服务器协议有哪些,HTTP 协议的缓存机制概述
  6. C# WINFORM的自动更新程序
  7. 使用Idea部署SSM项目后,访问路径为url:8080/项目名_war_exploded的解决方案
  8. 重磅!阿里自研RISC-V处理器玄铁910成功运行安卓10,相关代码开源
  9. 正规手游代理该怎么选?
  10. python自动化弹框_如何使用python自动化处理弹出窗口
  11. javascript学习之路1
  12. 防疫新装备友倍康血氧仪
  13. cordova在使用jqmobile中出现的问题(使用$(window).on与window.addEventListener)
  14. SAP ECC连接SAP PI系统配置
  15. 树莓派使用Openvino库进行车牌检测
  16. 全球与中国氢化苯乙烯-异戊二烯嵌段共聚物市场现状及未来发展趋势
  17. 乙腈和水共沸_水在不同压力下的沸点及常见的共沸物
  18. 用Chrome插件实现网页数据统计功能
  19. 985高校大数据专业教学究竟怎么样?在校生有话说
  20. 电子数据证据的证据能力及证明力研究

热门文章

  1. 【MM模块】Credit Memos and Reversals 红字发票和冲销
  2. 老飞飞秒进卡尔贝西龙洞不用走路的方法
  3. 阿里云服务器从购买到配置全攻略
  4. Unity制作UI翻页动画
  5. Spring3开发实战 之 第二章:IoC/DI开发(2)
  6. 显示农历天气时钟小部件下载_玛雅日历安卓版下载|玛雅日历app下载_v5.3.2
  7. 中科院读芯术python答案_Python调用中科院NLPIR(ICTCLAS2015)详解 刘超(lch614730@163.com)...
  8. 「硬核JS」一次搞懂JS运行机制
  9. win10下安装php7.2的memcache扩展
  10. Python日报0507 - PyQt5实现打卡登记系统