修改中兴860A电视盒子遥控器代码
中兴860A电视盒子经过修改相应文件后,几乎可以使用任意支持nec协议的红外遥控器。
一、修改遥控代码需要需要用到的两个文件:
- remote.conf,所在路径:\system\etc\remote.conf (该文件定义遥控代码的值,主要修改这个文件)
- Vendor_0001_Product_0001.kl,所在路径:\system\usr\keylayout\Vendor_0001_Product_0001.kl(此文件用于定义遥控代码值的使用功能,一般不要动这个文件 )。
二、遥控代码修改:
- 取得遥控器按键代码:
(1)输入:
adb connect x.x.x.x
连接到盒子,然后输入:
adb shell
进入机顶盒命令模式。
(2)输入命令
dmesg -c >/tmp/c.txt
清除记录。
(3)将需要配置的遥控机对准机顶盒按压各按键。
(4)输入命令:
dmesg | grep “code is”
调取记录查看刚才按键的遥控代码,代码为8位16进制数,形如 0xee119c21。
此代码各位含义为:前两位 ee为校验码,第3-4位11为按键码,末四位9c21为工厂代码。同一遥控器每个按键的末四位都相同,可以标识遥控器类型,第3-4位用于标识你按下了哪一个键。 - 修改remote.conf文件,以适配遥控器按键。
(1)退出盒子命令行,从windows命令提示符输入命令:
adb pull \system\etc\remote.conf
从盒子里导出remote.con f文件到电脑当前目录。
接着输入:
adb pull \system\usr\keylayout\Vendor_0001_Product_0001.kl
导出按键功能定义文件。
(2)用任一文本编辑器打开remote.conf文件,将里边的 factory_code= 0xFF000001 修改为 0x9c210001,这里的9c21为上边获取的遥控代码后四位,应该按照你自己获得的代码更改,这里后边的0001是序号,通常不需要更改。
(3)在key_begin到key_end之间将上边获取到的各键第3-4位写到每行的前边,然后输入一个空格,接着输入该按键需要实现的功能代码,该代码可以到Vendor_0001_Product_0001.kl文件中查找。
(4) key_begin到key_end之间的代码编写完后,再将它们复制到repeat_key_begin与repeat_key_end之间,以实现连续按键功能。
(5) 如下的这段代码定义的是常用按键的代码,可以把上面步骤获得的按键码输在等号后边,也可以删掉,直接在key_begin下边按照普通按键代码格式编写。
fn_key_scancode = 0x15
left_key_scancode = 0x1c
right_key_scancode = 0x48
up_key_scancode = 0x44
down_key_scancode = 0x1d
ok_key_scancode = 0x5c
pageup_key_scancode = 0x04
pagedown_key_scancode = 0x1b
三、传入遥控文件到盒子内:
- 在windows命令行,输入:
adb shell mount -o remount,rw /system
将/system目录挂载为可读写状态。 - 再输入:
adb push remote.conf /system/etc/
传入修改好的遥控代码文件。 - 接着输入:
adb shell remotecfg /system/etc/remote.conf
使遥控文件立即生效。 - 这时即可按下遥控器各键查看各键功能是否正常。
四、使遥控文件在重启后自动生效:
一般的中兴盒子执行上边操作后应该已经完工了。但我的中兴860A盒子是四川电信高安版,在重启后并不能自动调用remote.conf遥控代码文件,我尝试将调用命令以service的方式写在/init.rc初始化文件中会被自动屏蔽或删除,经过多次尝试,我采用写入“寄生”命令脚本的方式终于操作成功。思路如下:
打开init.amlogic.rc文件,查看带有.sh脚本文件的service,我找到了:
service display /system/bin/set_display_mode.sh
class core
oneshot
可以知道这个服务会在系统启动时自动执行/system/bin/set_display_mode.sh脚本中的命令。
所以只需要在该脚本中加入:
/system/bin/remotecfg /system/etc/remote.conf > /dev/null
这样就能让遥控代码在启动时自动生效了。
下边是具体操作过程:
- 输入命令:
adb pull /system/bin/set_display_mode.sh
将文件pull回本机,在该文件中加入如下脚本:
/system/bin/remotecfg /system/etc/remote.conf > /dev/null
我加入的位置为:
#!/system/bin/sh
case `getprop sys.fb.bits` in
32) osd_bits=32
;;
*) osd_bits=16
;;
esac
#if [ -e /dev/dvb0.frontend0 ]; then
# DVB_EXIST=yes
#else
DVB_EXIST=no
#fi
/system/bin/remotecfg /system/etc/remote.conf > /dev/null
############ if outputmode is cvbs ,and HDMI is plugged,we need clear the logo.
- 将修改好的文件用命令:
adb push set_display_mode.sh /system/bin/set_display_mode.sh
传入盒子原目录,再输入:
chmod 777 /system/bin/set_display_mode.sh
设置文件可执行权限,这一步非常重要,否则开机进不了桌面。
由此整个遥控器的适配过程操作完成。