前一陣做了個(gè)安卓6的固件, 在R3300L和Q7上跑的, 其他問題沒有, 但是有用戶反映原來的遙控器用不了了, 于是檢查了一下遙控器配置, 順便學(xué)習(xí)一下此類設(shè)備的紅外遙控機(jī)制. 為了方便測試還上淘寶買了六個(gè)遙控器.
Amlogic電視盒子的紅外遙控配置
相關(guān)的配置文件有
/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.
這個(gè)文件的格式很簡單, 每一行都是 key [Number] [Function], 按Number排序, 依次定義了每個(gè)Key Number對應(yīng)的功能, 其內(nèi)容為
- 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
- ...
復(fù)制代碼
Vendor_0001_Product_0001.kl
Vendor_xxx.kl 這個(gè)文件是基于Generic.kl 的廠商自定義鍵布局, 在其基礎(chǔ)上修改了一些key的定義, 其內(nèi)容為
- 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
- ...
復(fù)制代碼
remote.conf 和 remote1.conf
系統(tǒng)默認(rèn)用的是remote.conf, 但是有些固件使用的是remote1.conf. 如何判斷呢? 我沒找到合適的方法, 只能將其中一個(gè)文件更名后重啟, 如果遙控器無法使用了, 就說明使用的是那個(gè)文件. remote.conf的格式會稍微復(fù)雜, 下面是一個(gè)完整的例子
在頭部注釋部分, 已經(jīng)對文件的內(nèi)容作了說明, 在注釋部分之外
首先是 #amlogic NEC remote , 這行固定保留
然后是全局參數(shù)配置,
然后是每個(gè)遙控器的配置, 以 custom_begin 開始, 以 custom_end 結(jié)束, 可以有多個(gè)遙控器配置共存,
每個(gè)遙控器配置以
factory_infcode = 0
factory_code = 0xdd220001
這兩行作區(qū)分, 這兩個(gè)值都要和其他遙控器配置不同, 其中 factory_infcode 似乎是序號, 而factory_code是要跟遙控器按鍵產(chǎn)生的十六進(jìn)制碼后4位一致的.
鍵位定義包含 key_begin, key_end 和 repeat_key_begin , repeat_key_end 兩部分, 這兩部分分別代表了"單擊"和"按住"對應(yīng)的鍵功能, 如非特殊都可以設(shè)成一樣的.
簡單的說, 就是遙控器按鍵產(chǎn)生的十六進(jìn)制碼被盒子接收器接收后, 通過remote.conf找到了對應(yīng)的key number, 再通過kl文件, 找到了對應(yīng)的function, 然后就產(chǎn)生了操作.
紅外遙控器鍵碼識別
如果一個(gè)遙控器按鍵無法識別, 或者已有的遙控器想修改鍵功能, 但是不知道鍵碼怎么辦?
首先你要有盒子的TTL環(huán)境, 這樣才能通過命令行與盒子交互, 理論上在安卓的Terminal APP中應(yīng)該也可以的, 我還沒試過.
網(wǎng)上有些文章說的systemctl stop eventlircd, ir-keytable -t 這些命令并非每個(gè)盒子都有, 但是dmesg命令基本上都是會有的, 可以通過dmesg. 因?yàn)槠涔ぷ鳈C(jī)制, 在鍵碼能識別的時(shí)候, 是不會記錄日志的, 所以要先將remote.conf或remote1.conf更名重啟, 然后試試按遙控器, 再執(zhí)行 dmesg -s 5000, 看看是不是會出現(xiàn)這樣的日志記錄
[ 5095.872000] Wrong custom code is 0xef109c21
[ 5097.694000] Wrong custom code is 0xee119c21
這就是記錄下來的鍵碼. 鍵碼一共8位, 前2位是校驗(yàn)用的, 第3 - 4位是需要寫在remote.conf里的鍵碼, 第5 - 8位是設(shè)備碼, 要跟factory_code的前4位一致.
記錄鍵碼的一些操作技巧: 首先四周不能有其他遙控器的干擾, 例如旁邊有人在看電視按遙控器, 這樣不行. 其次, 因?yàn)閐mesg會不斷產(chǎn)生新的系統(tǒng)消息, 對記錄也產(chǎn)生干擾, 所以在操作的時(shí)候, 可以一次性按順序按下七八個(gè)按鍵, 例如 開機(jī), 后退, 上下左右中, 再立即命令行執(zhí)行 dmesg -s 5000, 這時(shí)候最新的記錄里面, 這7個(gè)鍵碼就基本上是在一塊的, 方便提取.
這樣把遙控器的鍵碼都記下來, 然后編輯remote.conf, 讓盒子能識別.
在編輯remote.conf時(shí), 可以先將kl里的 key number - > function 先列出來, 前面打上#, 這樣方便對應(yīng), 例如
相關(guān)閱讀:
朝歌機(jī)頂盒怎么刷機(jī)?朝歌機(jī)頂盒管理工具swstbmgr
華數(shù)2100KA android 假關(guān)機(jī) 原生點(diǎn)心云固件(帶恢復(fù)出廠功....
魔百和M301H_CW2詳細(xì)分區(qū)表及救磚恢復(fù)指南
|