小米盒子是小米公司出的 android 多媒體機上盒, 大概想要走 AppleTV 的路線,
所以外觀小巧, 前陣子入手了首發的二代小米盒子, 官方稱為 新小米盒子,
整體來說, 摒除中華電信非固定型光世代連大陸頻寬十分糟糕的問題之外,
使用上感覺還不錯.
不過, 使用這一陣子以來, 讓我覺得最不方便的地方是它的遙控器,
倒不是這支遙控器不好用(其實我也不喜歡它的按鍵聲)
而是因為家裡多媒體設備眾多, 為了方便, 早就用一支8合一的學習型遙控器來整合,
新小米盒子入手的第一天, 就想把它的遙控器也整進原本那支萬用遙控器裡,
但試了下, 卻發現總是學習失敗, 猜想應該是像DM500S 一樣, 使用了非一般常用的NEC
遙控碼協定, 因為新小米盒子剛上市, 網路上也少有它的資訊, 這件事就暫時打住了...
最近在逛樂視論壇時, 發現了有人在談論一代小米盒子的遙控器, 他們是想拿小米盒子的
遙控器去樂視盒子上使用, 雖然跟我的需求沒有直接關係, 但揭露的一些資訊卻讓我有了
個方向, 經過一番努力(反覆開機數十次以上)加上一些好運氣, 總算成功解決這個問題.
在往下看之前, 有幾個先決條件, 一定都要OK才行.
1. 新小米盒子要已經 ROOT, 因為遙控器設定檔放在 /system/etc 下, 沒有 root 權限是無法替換修改的 (可以使用 root 大師 來幫忙)
2. 欲替換遙控器的鍵碼, 需事先取得欲替換遙控器按鍵的鍵碼, 這樣才有辨法製作新設定檔以取代原設定檔( 這個就需要一些外部工具了, 如果欲替換的遙控器蠻普遍的, 也許可以google 看看, 若沒有的話, 就只好自已實作一些電路來取得遙控器的鍵碼了, 這點有需要的話, 可以回覆留言再討論, 也許再另文分享)
3. 已經有安裝且會使用 Android adb 工具.
首先是官方原始遙控器設定檔: /system/etc/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 leader1
# 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
factory_code = 0x00860001
work_mode = 2
repeat_enable = 0
release_delay = 90
debug_enable = 1
bit_count = 20
key_begin
0x05 103 #up
0x06 108 #down
0x0b 105 #left
0x0c 106 #right
0x0d 28 #ok
0x08 102 #home
0x07 158 #back
0x04 139 #menu
0x0a 116 #power
0x11 236 #low battery (按下後顯示低電量符號, 無任何作用)
0x03 235 #switch resolution (切換解析度, 每按一次切換一次)
0x0e 115 #volume up
0x0f 114 #volume down
key_end
按鍵定義: 遙控碼 鍵盤值 #說明
以up 鍵(103)為例 -> 0x4e 103 #up
實際取得使用NEC協定的遙控器其中一鍵遙控碼鍵為
FF00728D 共32 bit, 4byte ( 工廠碼 + 反相工廠碼 + 命令碼 + 反相命令碼)
命令碼= 0x72 -> 0111 0010
反轉(reverse)命令碼 -> 0100 1110 => 0x4e
工廠碼(factory_code)
實際取得使用NEC協定的遙控器其中一鍵遙控碼鍵為CE94D02F
工廠碼+反相工廠碼 = 0xCE94 -> 1100 1110 1001 0100
反轉(reverse) 工廠碼 -> 0010 1001 0111 0011 => 0x2973
factory_code = 0x29730001
實際以網樂通機上盒遙控器替換原新小米盒子遙控器之設定檔
factory_code = 0x29730001
work_mode = 1
repeat_enable = 0
release_delay = 150 #90無法連發, 150可以連發,
debug_enable = 1
#reg_control = 0xfbe40 #此行似乎不用加, 加不加都可以正常使用.
key_begin
0x61 103 #up
0x62 108 #down
0x63 105 #left
0x64 106 #right
0x0b 28 #ok
0x1e 102 #home
0x03 158 #back
0x00 139 #menu
0x1d 116 #power
0x58 236 #low power
0x40 235 #swite resolution
0x09 115 #volume up
0x01 114 #volume down
0x02 113 #mute
0x08 120 #media_forward
0xa0 121 #media_rewind
0x0e 2 #key 1
0x0f 3 #key 2
0x0c 4 #key 3
0x1a 5 #key 4
0x13 6 #key 5
0x10 7 #key 6
0x16 8 #key 7
0x71 9 #key 8
0x14 10 #key 9
0x1b 11 #key 0
0x15 15 #backspace
key_end
當產生新的設定檔後, 以新的設定檔覆蓋或修改舊的設定檔 (建議將原始的檔案先改名處理)
- adb shell
- su
- mount -o remount,rw /dev/block/system /system
- vi /system/etc/remote.conf
- 修改完後, reboot 重新開機
如果設定值正確的話, 重新開機後就可以生效, 每按一個有效鍵, 則盒子的指示燈會閃爍一次.
如果不是有效值的話, 指示燈完全不會變化( 就是這樣, 所以 debug 才很困難, 要不是一些好運氣, 否則這次恐怕要花上更多的時間了)
有任何問題, 歡迎提出.
最後是從盒子裡截取出來的按鍵碼 Vendor_0001_Product_0001.kl
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
key 62 ENDCALL
key 139 MENU
key 125 MENU
key 60 NOTIFICATION
key 127 SEARCH
key 217 SEARCH
key 228 POUND
key 227 STAR
key 231 CALL
key 61 CALL
key 97 DPAD_CENTER
key 232 DPAD_CENTER
key 108 DPAD_DOWN
key 103 DPAD_UP
key 102 HOME
key 105 DPAD_LEFT
key 106 DPAD_RIGHT
key 115 VOLUME_UP
key 114 VOLUME_DOWN
key 104 VOLUME_UP
key 109 VOLUME_DOWN
key 212 CAMERA
key 236 POWERLOW
key 235 SWITCHRESOLUTION
key 16 Q
key 17 W
key 18 E
key 19 R
key 20 T
key 21 Y
key 22 U
key 23 I
key 24 O
key 25 P
key 26 LEFT_BRACKET
key 27 RIGHT_BRACKET
key 43 BACKSLASH
key 30 A
key 31 S
key 32 D
key 33 F
key 34 G
key 35 H
key 36 J
key 37 K
key 38 L
key 39 SEMICOLON
key 40 APOSTROPHE
key 14 DEL
key 44 Z
key 45 X
key 46 C
key 47 V
key 48 B
key 49 N
key 50 M
key 51 COMMA
key 52 PERIOD
key 53 SLASH
key 28 ENTER
key 56 ALT_LEFT
key 100 ALT_RIGHT
key 42 SHIFT_LEFT
key 54 SHIFT_RIGHT
#key 15 TAB
key 57 SPACE
key 70 EXPLORER
key 155 ENVELOPE
key 12 MINUS
key 13 EQUALS
key 215 AT
key 119 MEDIA_PLAY_PAUSE
key 122 MEDIA_PREVIOUS
key 123 MEDIA_NEXT
key 120 MEDIA_FAST_FORWARD
key 121 MEDIA_REWIND
key 116 POWER WAKE
key 113 MUTE
key 128 MEDIA_STOP
key 130 ZOOM_IN
key 131 ZOOM_OUT
key 133 TAB
key 132 TV_REPEAT
key 134 TV_SHORTCUTKEY_DISPAYMODE
key 135 TV_SUBTITLE
key 136 TV_SHORTCUTKEY_VOICEMODE
key 137 TV_SWITCH
沒有留言:
張貼留言