修改中兴860A电视盒子遥控器代码

修改中兴860A电视盒子遥控器代码

中兴860A电视盒子经过修改相应文件后,几乎可以使用任意支持nec协议的红外遥控器。

一、修改遥控代码需要需要用到的两个文件:

  1. remote.conf,所在路径:\system\etc\remote.conf (该文件定义遥控代码的值,主要修改这个文件)
  2. Vendor_0001_Product_0001.kl,所在路径:\system\usr\keylayout\Vendor_0001_Product_0001.kl(此文件用于定义遥控代码值的使用功能,一般不要动这个文件 )。

二、遥控代码修改:

  1. 取得遥控器按键代码:
    (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位用于标识你按下了哪一个键。
  2. 修改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

三、传入遥控文件到盒子内:

  1. 在windows命令行,输入:
    adb shell mount -o remount,rw /system
    将/system目录挂载为可读写状态。
  2. 再输入:
    adb push remote.conf /system/etc/
    传入修改好的遥控代码文件。
  3. 接着输入:
    adb shell remotecfg /system/etc/remote.conf
    使遥控文件立即生效。
  4. 这时即可按下遥控器各键查看各键功能是否正常。

四、使遥控文件在重启后自动生效:
一般的中兴盒子执行上边操作后应该已经完工了。但我的中兴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
这样就能让遥控代码在启动时自动生效了。

下边是具体操作过程:

  1. 输入命令:
    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.
  1. 将修改好的文件用命令:
	adb push set_display_mode.sh /system/bin/set_display_mode.sh

传入盒子原目录,再输入:

	chmod 777 /system/bin/set_display_mode.sh

设置文件可执行权限,这一步非常重要,否则开机进不了桌面。
由此整个遥控器的适配过程操作完成。

猜你喜欢

转载自blog.csdn.net/yao108yao/article/details/109010811