前一阵做了个安卓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的格式会稍微复杂, 下面是一个完整的例子
在头部注释部分, 已经对文件的内容作了说明, 在注释部分之外
首先是 #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 先列出来, 前面打上#, 这样方便对应, 例如
相关阅读:
朝歌机顶盒怎么刷机?朝歌机顶盒管理工具swstbmgr
华数2100KA android 假关机 原生点心云固件(带恢复出厂功....
魔百和M301H_CW2详细分区表及救砖恢复指南
|