前一阵做了个安卓6的固件, 在R3300L和Q7上跑的, 其他问题没有, 但是有用户反映原来的遥控器用不了了, 于是检查了一下遥控器配置, 顺便学习一下此类设备的红外遥控机制. 为了方便测试还上淘宝买了六个遥控器.

Amlogic电视盒子的红外遥控配置

相关的配置文件有

/system/usr/keylayout/Generic.kl

/system/usr/keylayout/Vendor_0001_Product_0001.kl

/system/etc/remote.conf 或 /system/etc/remote1.conf

Generic.kl文件

Generic key layout file for full alphabetic US English PC style external keyboards.
This file is intentionally very generic and is intended to support a broad rang of keyboards.
Do not edit the generic key layout to support a specific keyboard; instead, create a new key layout file with the required keyboard configuration.

这个文件的格式很简单, 每一行都是 key [Number] [Function], 按Number排序, 依次定义了每个Key Number对应的功能, 其内容为

key 1     ESCAPE
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 12    MINUS
key 13    EQUALS
key 14    DEL
key 15    TAB
...

Vendor_0001_Product_0001.kl

Vendor_xxx.kl 这个文件是基于Generic.kl 的厂商自定义键布局, 在其基础上修改了一些key的定义, 其内容为

key 399   GRAVE
key 1     BACK
key 2     1
key 3     2
key 4     3
key 5     4
key 6     5
key 7     6
key 8     7
key 9     8
key 10    9
key 11    0
key 15    BACK
key 158   BACK
key 58    SOFT_RIGHT
key 107   ENDCALL
...

remote.conf 和 remote1.conf

系统默认用的是remote.conf, 但是有些固件使用的是remote1.conf. 如何判断呢? 我没找到合适的方法, 只能将其中一个文件更名后重启, 如果遥控器无法使用了, 就说明使用的是那个文件. remote.conf的格式会稍微复杂, 下面是一个完整的例子

#*********************************************************************************************************
# this file is configuration for each factory remote device
#   work_mode     0 :software mode  1 :hardware mode
#   repeat_enable     0 :disable repeat 1 :enable repeat
#
#   factory_code      each device has it's unique factory code.
#             pattern:custom_code(16bit)+index_code(16bit)
#             examble: 0xff000001 = 0xff00(custom cod)  0001 (index)
#
#   release_delay     unit:ms.release will report from kernel to user layer after this period of time
#             from press or repeat triggered.
#
#   debug_enable      0 :debug disable  1 :debug disable
#
# SW MODE:
#   bit_count     how many bits in each frame
#   tw_leader_act     time window for leader active
#   tw_bit0       time window for bit0 time.
#   tw_bit1       time window for bit1 time
#   tw_repeat_leader  time window for repeat leader
# REG
#   reg_base_gen      set value for PREG_IR_DEC_BASE_GEN
#   reg_control   set value for PREG_IR_DEC_CONTROL
#   reg_leader_act    set value for PREG_IR_DEC_LEADER_ACTIVE
#   reg_leader_idle   set value for PREG_IR_DEC_LEADER_IDLE
#   reg_repeat_leader set value for PREG_IR_DEC_REPEAT_IDLE
#   reg_bit0_time     set value for PREG_IR_DEC_BIT0_TIME
#*************************************************************************************************************
#amlogic NEC remote
work_mode       = 0
repeat_enable = 1
repeat_delay = 130
repeat_peroid = 120
release_delay   =       20
debug_enable    = 1fn_key_scancode    = 0x15
left_key_scancode  = 0x1c
right_key_scancode = 0x48
up_key_scancode    = 0x44
down_key_scancode  = 0x1d
ok_key_scancode    = 0x1e
pageup_key_scancode = 0x04
pagedown_key_scancode = 0x1bcustom_beginfactory_infcode = 0factory_code   = 0xdd220001
fn_key_scancode    = 0x15
left_key_scancode  = 0x99
right_key_scancode = 0xc1
up_key_scancode    = 0xca
down_key_scancode  = 0xd2
ok_key_scancode    = 0xce
pageup_key_scancode = 0xdd
pagedown_key_scancode = 0x8ckey_begin0xdc 116      ;STB_POWER0x9c 113      ;VOLUME_MUTE0x8d 150      ;SETTINGS#0xcd 141      ;RED     F6#0x91 142      ;GREEN   F7#0x83 143      ;YELLOW  F8#0xc3 144      ;BLUE    F90x88 102      ;HOME0x95 15       ;BACK0xc5 145      ;HELP F10x82 125      ;MENU0x99 105      ;DPAD_LEFT0xca 103      ;DPAD_UP0xc1 106      ;DPAD_RIGHT0xd2 108      ;DPAD_DOWN0xce 97       ;DPAD_CENTER0x80 104      ;VOLUME_UP0x81 109      ;VOLUME_DOWN0xdd  92      ;PAGE_UP0x8c  93      ;PAGE_DOWN0x85 166      ;CHANNEL_UP0x86 167      ;CHANNEL_DOWN0x89 121      ;MEDIA_REWIND0x84 120      ;MEDIA_FAST_FORWARD0xd9 119      ;MEDIA_PLAY_PAUSE0x96 128      ;MEDIA_STOP0x87 11       ;00x92 2        ;10x93 3        ;20xcc 4        ;30x8e 5        ;40x8f 6        ;50xc8 7        ;60x8a 8        ;70x8b 9        ;80xc4 10       ;90xda 228      ;POUND#key_endrepeat_key_begin0xdc 116      ;STB_POWER0x9c 113      ;VOLUME_MUTE0x8d 150      ;SETTINGS#0xcd 141      ;RED     F6#0x91 142      ;GREEN   F7#0x83 143      ;YELLOW  F8#0xc3 144      ;BLUE    F90x88 102      ;HOME0x95 15       ;BACK0xc5 145      ;HELP F10x82 125      ;MENU0x99 105      ;DPAD_LEFT0xca 103      ;DPAD_UP0xc1 106      ;DPAD_RIGHT0xd2 108      ;DPAD_DOWN0xce 97       ;DPAD_CENTER0x80 104      ;VOLUME_UP0x81 109      ;VOLUME_DOWN0xdd  92      ;PAGE_UP0x8c  93      ;PAGE_DOWN0x85 166      ;CHANNEL_UP0x86 167      ;CHANNEL_DOWN0x89 121      ;MEDIA_REWIND0x84 120      ;MEDIA_FAST_FORWARD0xd9 119      ;MEDIA_PLAY_PAUSE0x96 128      ;MEDIA_STOP0x87 11       ;00x92 2        ;10x93 3        ;20xcc 4        ;30x8e 5        ;40x8f 6        ;50xc8 7        ;60x8a 8        ;70x8b 9        ;80xc4 10       ;90xda 228      ;POUND#repeat_key_end
custom_end

在头部注释部分, 已经对文件的内容作了说明, 在注释部分之外

首先是 #amlogic NEC remote , 这行固定保留

然后是全局参数配置,

然后是每个遥控器的配置, 以 custom_begin 开始, 以 custom_end 结束, 可以有多个遥控器配置共存,

每个遥控器配置以

factory_infcode = 0
factory_code = 0xdd220001

这两行作区分, 这两个值都要和其他遥控器配置不同, 其中 factory_infcode 似乎是序号, 而factory_code是要跟遥控器按键产生的十六进制码后4位一致的.

键位定义包含 key_begin, key_end 和 repeat_key_begin , repeat_key_end 两部分, 这两部分分别代表了"单击"和"按住"对应的键功能, 如非特殊都可以设成一样的.

简单的说, 就是遥控器按键产生的十六进制码被盒子接收器接收后, 通过remote.conf找到了对应的key number, 再通过kl文件, 找到了对应的function, 然后就产生了操作.

红外遥控器键码识别

如果一个遥控器按键无法识别, 或者已有的遥控器想修改键功能, 但是不知道键码怎么办?

首先你要有盒子的TTL环境, 这样才能通过命令行与盒子交互, 理论上在安卓的Terminal APP中应该也可以的, 我还没试过.

网上有些文章说的systemctl stop eventlircd, ir-keytable -t 这些命令并非每个盒子都有, 但是dmesg命令基本上都是会有的, 可以通过dmesg. 因为其工作机制, 在键码能识别的时候, 是不会记录日志的, 所以要先将remote.conf或remote1.conf更名重启, 然后试试按遥控器, 再执行 dmesg -s 5000, 看看是不是会出现这样的日志记录

[ 5095.872000] Wrong custom code is 0xef109c21
[ 5097.694000] Wrong custom code is 0xee119c21

这就是记录下来的键码. 键码一共8位, 前2位是校验用的, 第3 - 4位是需要写在remote.conf里的键码, 第5 - 8位是设备码, 要跟factory_code的前4位一致.

记录键码的一些操作技巧: 首先四周不能有其他遥控器的干扰, 例如旁边有人在看电视按遥控器, 这样不行. 其次, 因为dmesg会不断产生新的系统消息, 对记录也产生干扰, 所以在操作的时候, 可以一次性按顺序按下七八个按键, 例如 开机, 后退, 上下左右中, 再立即命令行执行 dmesg -s 5000, 这时候最新的记录里面, 这7个键码就基本上是在一块的, 方便提取.

这样把遥控器的键码都记下来, 然后编辑remote.conf, 让盒子能识别.

在编辑remote.conf时, 可以先将kl里的 key number - > function 先列出来, 前面打上#, 这样方便对应, 例如

custom_beginfactory_infcode = 7factory_code    = 0xff000001 key_begin#1        ;BACK0x0f 2        ;10x11 3        ;20x12 4        ;30x4c 5        ;40x58 6        ;50x1b 7        ;60x17 8        ;70x4d 9        ;80x0a 10       ;90x1d 11       ;0#12       ;MINUS#13       ;EQUALS#14       ;DEL#15       ;BACK#16       ;Q#17       ;W#18       ;E#19       ;R#20       ;T#21       ;Y#22       ;U                 #23       ;I#24       ;O#25       ;P#26       ;LEFT_BRACKET#27       ;RIGHT_BRACKET#28       ;ENTER      #30       ;A#31       ;S#32       ;D#33       ;F#34       ;G#35       ;H#36       ;J#37       ;K#38       ;L#39       ;SEMICOLON#40       ;APOSTROPHE#42       ;SHIFT_LEFT#43       ;BACKSLASH#44       ;Z#45       ;X#46       ;C#47       ;V#48       ;B#49       ;N#50       ;M#51       ;COMMA#52       ;PERIOD.#53       ;SLASH0x55 97       ;DPAD_CENTER0x4e 102      ;HOME    0x46 103      ;DPAD_UP0x47 105      ;DPAD_LEFT0x15 106      ;DPAD_RIGHT0x16 108      ;DPAD_DOWN0x10 114      ;VOLUME_DOWN0x14 115      ;VOLUME_UP0x18 116      ;POWER    WAKE0x4f 141      ;SETTINGS#113      ;MUTE#119      ;MEDIA_PLAY_PAUSE#120      ;MEDIA_FAST_FORWARD#121      ;MEDIA_REWIND#122      ;MEDIA_PREVIOUS#123      ;MEDIA_NEXT#125      ;MENU0x04 139      ;MENU0x40 158      ;BACK0x1c 227      ;STAR*0x1e 228      ;POUND#key_endrepeat_key_begin#1        ;BACK0x0f 2        ;10x11 3        ;20x12 4        ;30x4c 5        ;40x58 6        ;50x1b 7        ;60x17 8        ;70x4d 9        ;80x0a 10       ;90x1d 11       ;0#12       ;MINUS#13       ;EQUALS#14       ;DEL#15       ;BACK#16       ;Q#17       ;W#18       ;E#19       ;R#20       ;T#21       ;Y#22       ;U                 #23       ;I#24       ;O#25       ;P#26       ;LEFT_BRACKET#27       ;RIGHT_BRACKET#28       ;ENTER      #30       ;A#31       ;S#32       ;D#33       ;F#34       ;G#35       ;H#36       ;J#37       ;K#38       ;L#39       ;SEMICOLON#40       ;APOSTROPHE#42       ;SHIFT_LEFT#43       ;BACKSLASH#44       ;Z#45       ;X#46       ;C#47       ;V#48       ;B#49       ;N#50       ;M#51       ;COMMA#52       ;PERIOD.#53       ;SLASH0x55 97       ;DPAD_CENTER0x4e 102      ;HOME    0x46 103      ;DPAD_UP0x47 105      ;DPAD_LEFT0x15 106      ;DPAD_RIGHT0x16 108      ;DPAD_DOWN0x10 114      ;VOLUME_DOWN0x14 115      ;VOLUME_UP0x18 116      ;POWER   WAKE0x4f 141      ;SETTINGS#113      ;MUTE#119      ;MEDIA_PLAY_PAUSE#120      ;MEDIA_FAST_FORWARD#121      ;MEDIA_REWIND#122      ;MEDIA_PREVIOUS#123      ;MEDIA_NEXT#125      ;MENU0x04 139      ;MENU0x40 158      ;BACK0x1c 227      ;STAR*0x1e 228      ;POUND#repeat_key_end
custom_end

remote.conf编辑完后, 可以通过安卓的Root Explorer应用将原来的remote.conf备份, 再将新的remote.conf放进去, 重启后就能测试效果了.

Amlogic电视盒子红外遥控适配笔记相关推荐

  1. 移动咪咕盒子红外遥控驱动

    最近入手了一块显示屏,又惊喜的发现移动咪咕盒子一直落灰,(反正盒子没破解也不能看电视),那给我的讯为4412开发板刷个安卓系统,写个红外遥控驱动烧进去,这样就能用咪咕盒子的遥控器看电视了.说干就干,开 ...

  2. Linux网络机顶盒rom,Amlogic 电视盒子修改Rom包,升级

    第一次接触电视盒子的开发,遇到一些坑,这里记录下Rom包修改和升级的方法. 这边使用的硬件是: Amlogic S905x 2GBx16GB 准备工作: 1.ROM包(aml_upgrade_pack ...

  3. amlogic红外遥控器适配

    amlogic红外遥控器适配 红外遥控根据遥控器的不同有多个config文件,文件位于\device\amlogic\p201_iptv中,如下图: 根据kernel日志的报错,找对应factory_ ...

  4. AutoLeaders控制组——51单片机学习笔记(AD/DA、红外遥控)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

  5. 智能硬件安全笔记(6.智能电视盒子安全分析方法)

    智能硬件安全笔记--6.智能电视盒子安全分析方法 6.1 智能电视盒子安全威胁分析 6.1.1 系统被植入木马.恶意应用的风险 6.1.2 电视内容被篡改的风险 6.1.3 隐私泄露风险 6.1.4 ...

  6. 51单片机学习笔记-15 红外遥控

    15 红外遥控 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓 ...

  7. arduino笔记20:红外遥控

    红外LED    红外接收器 红外遥控的通讯协议     用到一个库: arduino红外接收器:   IRrecvDemo . decode()库函数用于判断红外接收器所接收到的红外信号是否可以被解 ...

  8. arduino学习笔记十八--红外遥控检测

    介绍 远程遥控技术又称为遥控技术,是指实现对被控目标的遥远控制,在工业控制.航空航天.家电领域应用广泛.红外遥控是一种无线.非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著 ...

  9. android远程控制电视盒子,电视机顶盒远程遥控其实很简单 小白也能不在家帮爸妈遥控...

    2019-9-23 17:03 [天极网家电频道]智能手机的发展不断带动智能化家居的推进,现在家里不管是电视空调冰箱都要冠以"智能"之名.对于年轻人来说,学习一些智能设备新的用法一 ...

最新文章

  1. linux之文件基本操作学习笔记
  2. 【TUP第11期】腾讯黄朝兴:浅谈客户端架构
  3. SQL like 模糊查询
  4. zookeeper 入门讲解实例 转
  5. 转3d视图快捷键_最全Solidworks快捷键,值得收藏!
  6. php中如何配置环境变量,如何配置phpstorm环境变量如何配置phpstorm环境变量
  7. 头条搜索回应百度:不交钱也会保护品牌词搜索
  8. 我想在杭州买一套房一百平米左右的房子大概多少钱?
  9. linux 优盘分区,怎么在Linux系统下使用NTFS的U盘或者是分区以及移动硬盘-使用工具NTFS-3G...
  10. 关于阿里云快照收费机机制和说明
  11. 用例设计思路 C/S测试—安装与卸载
  12. 计算机多媒体化简笔画,计算器简笔画教程
  13. C++ OpenCV制作九宫格拼图游戏
  14. 飞机大战源码php,飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...
  15. 微信红包随机算法转载
  16. 国外有哪些知名的游戏资讯网站或博客?
  17. 计算机操作系统——(第四章) 存储器管理/内存管理
  18. 【linux】之系统安全
  19. STM32开发 -- W25Q32JV SPI FlASH详解
  20. ZO-signSGD

热门文章

  1. 性能之Hibernate大批量保存数据优化
  2. html语言的td合并,table标签合并单元格(包括行和列的合并)的方法
  3. You may need to add 'xxxx.cn' to ALLOWED_HOSTS.
  4. python 10个100以内随机整数编辑_Python语法整理
  5. 初探基于OSG+OCC的CAD之Netgen体网格划分与显示
  6. Python下载网页图片
  7. 声卡设备alsa音频架构1
  8. 格物致知——一个寻求信仰的思考
  9. 深度学习图像超分辨率开山之作SRCNN——原理分析及代码(效果基本可以达到论文中的效果)
  10. 各排序算法最好最坏平均情况下的时间复杂度