聪聪搞机 发表于 2024-8-16 15:25

如何修改遥控器键码值?Android系统中自定义与修改遥控键值

在Android系统中,修改遥控器键码值是一项实用的功能,它允许开发者或用户根据实际需求自定义遥控器的行为。通过编程接口或系统设置,可以轻松实现对键码值的添加、删除及修改,从而优化用户体验或满足特定应用场景的需求。
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 NECremotefactory_code = 0xfb040001 //每个设备都有独特的factory code. 格式custom_code(16bit)+index_code(16bit) //例子: 0xfb040001= 0xfb04(客户码) + 0001 (低16位可填写任意值)key_begin //按键映射表 0x47 11 //0x47是红外键值,11是对应的标准按键scancode,可以多个键值对应一个scancode0x5C 97……key_end //按键映射表结束
mouse_begin //鼠标方向映射表,每行0 0x10 //0是方向数字表示符(Left),对应红外按键键值0x101 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 8key 10 9key 11 0key 228 POUNDkey 227 STARkey 231 CALLkey 61 CALLkey 97 DPAD_CENTERkey 108 DPAD_DOWNkey 103 DPAD_UPkey 102 HOMEkey 114 VOLUME_DOWNKEYCODE字符串转换为Andriod UI键值:frameworks/base/include/ui/KeycodeLabels.hstatic 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\irremote2)Andriod 遥控器service:external\remoteconf目录3)init.rc中启动service remotecfg# remoteservice remotecfg /system/bin/remotecfg /system/etc/remote.confclass mainoneshot4)拷贝定制化remote.conf与kl两个文件
案例二:遥控器静音键改为设置键(不新增按键)
1) 按下遥控静音键,观察串口打印出的ircode2) 在板子的/system/etc/remote.conf文件中找到静音键的ircode与scancode对应行,如下: 0x0c 1133) 在板子的/system/usr/keylayout/aml_keypad.kl或Vendor_0001_Product_0001.kl中找到scancode 113所在行:key 113 SEARCH4) 将keycode ‘SEARCH’ 修改为需要的KEYCODE字符串。5) 重新编译
案例三:遥控器增加新按键功能
新增按键的遥控器往往不是我们公版遥控器,不能利用现有按键实现特定功能,需要在系统中新增以支持特定APK应用场景。1) 通过打印找出新增按键的ircode2) 在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版本,可能添加的方式不一样,最近在看5.1的时候,发现机制又变了。留意keyevent.java中的注释部分即可。
相关资源参考:**** Hidden Message *****
https://www.znds.com/static/image/hrline/2.gif
相关阅读:晶晨s905l(-b)p211 android 9.0(atv 9)固件
电视盒子红外遥控器怎么适配 ?Amlogic盒子红外遥控适配心得

月下桥 发表于 2024-8-16 15:26

围观学习一下

浙江一条虫 发表于 2024-8-16 16:44

谢谢楼主分享

wyh21cn 发表于 2024-8-16 17:48

学习了!谢谢。

105度的你 发表于 2024-8-21 12:24

感谢分享

时尚小伙 发表于 2024-8-21 16:26

谢谢分享太深奥了

luojia2114 发表于 2024-10-5 23:10

感谢分享,支持

十亿度 发表于 2024-10-11 21:02

谢谢分享

woshiyao198 发表于 2024-10-15 09:30


谢谢分享

qsllj 发表于 2024-10-19 06:45

感谢楼主分享指导。

欧皇i个怪快 发表于 2024-10-19 21:20

这是我需要的

vguowang 发表于 2024-10-20 18:17


1111111111

csc1314 发表于 2024-11-27 11:05

xiexiefenxiang~~~

旅途人生1688 发表于 2024-11-30 08:32

谢谢分享

reg 发表于 2024-11-30 15:27

学习了
页: [1] 2 3 4 5
查看完整版本: 如何修改遥控器键码值?Android系统中自定义与修改遥控键值