不同厂商制作者,制作的遥控器配置文件、文件名、文件位置会不一样,但都是安卓,修改思路就大同小异.
像海思芯片的遥控码文件是 key.xml 晶晨的是remont.conf
也有些系统则是写在remote.cfg里
还有的写在/system/vendor/bin下的remotecfg这个文件里
情况很多种,最好找到原机的刷机包,直接替换进去
下面作为样例的,是 /vendor/etc/文件夹下有remote.tab1 ~ remote.tab5这些文件的情况(应该是晶辰的情况之一)
一,修改遥控器识别码
解决红外遥控器不被机器识别、与按键不对应的最简便办法(前提是你的机器里有remote.tab1 - remote.tab5这些文件)
刚知道有的固件包里,在系统里放上了五个文件:
remote.tab1 - remote.tab5
(都在vendor/etc/ 文件夹下)
用文本编辑软件可以看见,这五个文件的开头是5个不同的遥控器类型数字代码
好比custom_code = 0xc43b
custom_code = 0xff00
x后面的这四位代码(遥控器识别码)是否对应你的红外遥控器硬件,决定遥控器发射的信号能不能被接收信号的机器识别.
代码不对应你的遥控器,就会导致,遥控器按下时机器能正常闪灯,但却没有任何动作
找到你的遥控器识别码,替换这四位代码,保存进去,机器就能对遥控器按键有反应.
怎么用adb找你的遥控器识别码,怎么保存?或者看一楼感谢的原帖网址,或者看二搂,会简化总结一下
二,修改遥控器按键码,让某些不管用的按钮变管用
修改遥控器识别码,让按键能起作用后,大概率会发现,遥控器按键的作用是乱的,跟原来不一样,甚至只有某几个按键有作用
所以三个办法,
办法一是找你的同型号盒子(很可能是相同遥控器)的用户,传你一个能用的remote.tab1,替换掉现在刷机之后的遥控器文件
(tab1到tab5里,说不定就能碰上是完全符合你遥控器的文件,只改开头的遥控器识别码,改好就能正常对应按键.需要注意tab1到tab5的机器识别码不能重复,否则重复的话遥控只会按照序号在前的文件.)
办法二是用之前备份的文件,试试直接替换刷机后的遥控器文件
办法三是参照备份的文件,手动修改刷机后的遥控器文件
办法三具体怎么修改,
举例现在的remote.tab1(或2345)中显示
0x9c 113 ;MUTE
0x82 176 ;SE**NGS
0x98 102 ;HOME
这种remote.tab1里每行的三部分是:
遥控器按键码 + 安卓功能数字代码(推荐修改这个)+数字代码对应的说明(这部分应该是修改或删掉也不产生影响效果)
就是说现在用113在对应静音功能,176在对应系统设置功能,
对照你的[遥控器原装系统]备份的文件,把数字修改变成相符的对应关系之后,遥控器按键就都能正常用了
[遥控器按键码]对应什么[安卓功能数字],在每个原系统对应的都不一样,没有统一的可改,
所以若没有原装系统的遥控器文件备份,就需要自己对照,按下了什么遥控器按纽、产生什么遥控器按键码(查看方法见二搂),然后填写你想设定的安卓功能数字
想知道数字码是什么安卓功能效果,在remote.tab1里已经列出了一些,或者可以查网上更全的说明,或者更复杂的是参考kl文件(在二楼说),网上说明的不一定符合你的系统,kl文件也不一定准确(除了不带型号的通用模板generic.kl,还有针对遥控器型号调整后的类似Vendor_0001_Product_0001.kl这种文件)
刷的新系统中,若是不带remote.tab1 ~ remote.tab5,也没有remote.conf,也没有key.xml,就需要去搜索一下自己盒子品牌的遥控器文件是哪个,还可以改成去找kl文件(好比名为Vendor_0001_Product_0001.kl)
kl文件一般放在/system/usr/keylayout/文件夹下,进去之后会看见已装上的不同遥控识别码,里面有可能没有一个符合手中遥控器,但都是从generic.kl作的模板上修改调整出来的,所以也可以直接复制出来一份generic.kl自己修改
通过adb获得遥控器识别码、遥控器按键码,具体操作
首先需要你的电视盒能从另一台设备上(手机或pc)用adb连接上,可以是wifi连接,也可以是usb线连接(一般是用双公头线)
1,
wifi连接电视盒,需要知道电视盒的ip地址,并且电视盒在系统中打开了"允许adb调试"的选项
好比我的路由器管理ip是192.168.31.1,电视盒是192.168.31.44
连接电视盒的adb命令就是
adb connect 192.168.31.44
(只有返回英文的成功连接提示,才算有效连接,不然需要检查adb工具与防火墙等等是否有问题,电视盒是否不许adb连接,以及路由是否不允许局域网内互通,等等各种问题.)
2,
adb成功连接后,
输入adb remount
(这一步会临时把电视盒内所有文件从只读变成可修改,有些机器需要root权限才可以办到,没有root权限,输入后则会提示remount的各种错误.开root权限的办法放在后面的楼层里交流.
adb remount 是把机器上所有部分都临时变成可修改,也可以换成adb shell mount -o remount,rw /system 是只改system文件夹下的全部.两种输入方式,一种提示错误,另一种一般也会提示错误,而不是换一种写法就成功)
输入adb shell
(adb成功连接的电视盒,在这一步输入后,会从用其他机器操控电视盒命令,转入以电视盒本机的身份来操控命令;若adb没连接上电视盒就会提示错误.
转入电视盒本机身份后,若新一行结尾显示的是#,说明具有某程度的root权限(即管理员superuser权限),不一定是完整的root权限;若新一行结尾显示的是$,说明完全没获得root权限(只是普通用户身份)
输入su
(这一行的意思是,使用本机已有的superuser权限.若你电视盒本来已有root权限,但是前面提示的是$,在输入这一行后,提示就会变成#.若是电视盒还没开权限,$的提示就不会变.)
3,
输入dmesg -c
(dmesg命令,是获得电视盒这次开机后的所有操作日志,-c是最后再显示一次的同时把之前的所有日志清除,开始新起头日志,以免大量无关的日志不方便翻找需要看的部分.再次输入dmesg -c就会发现,返回的提示没那么多行了.)
把遥控器上的按键挨个按几个,然后
输入dmesg | grep framecode=
//这一行等效于输入dmesg | grep "code is",两种命令之中一个管用就用不着另一个
(输入这行,会把之前按下遥控器按钮发送的信号都显示出来,样图见1楼感谢的原帖网址
0x的后八位之中,5-8位是固定的,不换其他遥控器就不会变,是遥控器识别码;3-4位是遥控器按键码,对应你刚才按下的不同按键)
最简单的情况,光是知道5-8位的遥控器识别码,照着修改系统里的remote.tab1里的开头部分就够了,不用手动调整按键码.需要调整按键码的话,办法在后文讲.
3附.
网上有很多绕远的命令行其实没必要,又需要把dmesg输出的日志转换成文本文件,又需要输入更复杂的dmesg命令.好比dmesg | grep "code is 0x" | rev |cut -c 5-6 -c 9-10| rev |uniq >> /sdcard/IRdump.log
不过复杂命令的好处是,可以把按下遥控器时发送的按键码(前面说的5-6位的数字)单独列出来,在按键全按了一遍后,看起来不那么乱;而且转换成文本,就可以按照生成的内容顺序粘贴到遥控器文件内,让遥控器文件内每行的顺序符合自己的遥控器.
4,
怎么修改系统文件的remote.tab1
--------------
办法一,有root权限的话,用文本工具直接打开/vendor/etc/remote.tab1来在原地修改
办法二,用pull / push传出传入命令
输入exit
(作用是,从在电视盒中以电视盒身份操作命令,推回在电视盒中以连接设备的身份操作命令)
输入adb pull /vendor/etc/remote.tab1 1.tab1
(作用是,把电视盒中放在/vendor/etc文件夹的remote.tab1传输到连接设备,重命名为1.tab1并保存在adb工具的文件夹下.也可以传输到其他文件夹,好比改成adb pull /vendor/etc/remote.tab1 d:/1.tab1 就会保存到D盘下)
然后在其他设备上用文本编辑工具修改1.tab1
修改好后的1.tab1传回电视盒:
输入adb push 1.tab1 /vendor/etc/remote.tab1
办法三,用cp复制粘贴命令
之前不输入exit,改为
输入cp /vendor/etc/remote.tab1 /sdcard/1.tab1
存在sd卡中,把sd卡拿出来,放到pc上用文本编辑工具修改1.tab1
修改好后的1.tab1传回电视盒:
输入cp /sdcard/1.tab1 /vendor/etc/remote.tab1
办法四,用安卓带的vi命令行修改
输入vi /vendor/etc/remote.tab1
--------------
5,重新启动电视盒,在有些电视盒直接就好了
6,
电视盒上没有remote.tab1 ~ remote.tab5 就需要去搜索一下自己盒子品牌的遥控器文件是哪个
具体操作与第4步相近,具体差异,参考二楼感谢的原帖网址
像海思芯片的遥控码文件是 key.xml 晶晨的是remont.conf
也有些系统则是写在remote.cfg里
还有的写在/system/vendor/bin下的remotecfg这个文件里
情况很多种,最好找到原机的刷机包,直接替换进去
没地方去找,还可以改成去找kl文件(好比名为Vendor_0001_Product_0001.kl)
kl文件一般放在/system/usr/keylayout/文件夹下,进去之后会看见已装上的不同遥控识别码,里面有可能没有一个符合手中遥控器,但都是从generic.kl作的模板上修改调整出来的,所以也可以直接复制出来一份generic.kl自己修改
目前收集到的,不同文件各自所放的位置,在这里列出
/vendor/etc/remote.tab1
/system/etc/remote.conf
/device/hisilicon/bigfish/system/ir_user/key_pars/key.xml
/system/vendor/bin/remotecfg
/system/usr/keylayout/Vendor_0001_Product_0001.kl
似乎有人在海思中修改了key.xml但没起作用,不知是不是还需要修改其他文件.
开root权限的办法放在后面的楼层里交流.
一,
有些电视盒,想让按下遥控器按钮在dmesg中有反应,似乎需要先打开/vendor/etc/remote.cfg 文件中的debug功能,把debug_enable 从0改成1
若有改动,保存后别忘了还原权限变回改动前的644:
输入chmod 644 /vendor/etc/remote.cfg
二,
有些电视盒,修改remote.cfg之后需要手动重新加载:
输入remotecfg -c /vendor/etc/remote.cfg -d
(我没查-c -d都是干什么用的)
以及在修改remote.conf之后需要手动重新加载
remotecfg /system/etc/remote.conf
三,
有时不能确定电视盒是不是能对遥控器有反应
就需要先用getevent -l 或者getevent -v 确定是否能收到遥控器信号,若是在getevent中,鼠标键盘等等其他信号都能收到,唯独遥控器不能,但是在dmesg又能看见检测到遥控器信号,这就是目前找不到办法解决的.很可能是系统制作修改者乱删改东西把基本功能破坏了,需要修复的地方太多.
若是能收到信号,但是因为遥控器识别码或遥控器按键码错误,而导致的按键不管用,简单修改后就能正常用,这种情况下,按遥控器后,会看见dmesg中显示的遥控器代码结尾显示wrong code,是表示能接收但不能正确识别信号,只是时别的问题所以容易修改.
举例一个tab1
custom_name = amlogic-remote-1
custom_code = 0xc43b
release_delay = 80
key_begin
0xdc 116 ;116 POWER WAKE
0xcb 605 ;TV_SOUND_CHANNEL
0x9c 113 ;MUTE
0x82 176 ;SE**NGS
0x98 102 ;HOME
0xce 97 ; DPAD_CENTER
0xca 103 ; DPAD_UP
0xd2 108 ; DPAD_DOWN
0x99 105 ; DPAD_LEFT
0xc1 106 ; DPAD_RIGHT
0x8d 119 ;MEDIA_PLAY_PAUSE
0xc5 158 ;BACK
0x85 115 ;VOLUME_UP
0xdd 607 ;PAGE_UP
0x80 402 ;CHANNEL_UP
0x86 114 ;VOLUME_DOWN
0x8c 608 ;PAGE_DOWN
0x81 403 ;CHANNEL_DOWN
0x87 11 ; num 0
0x92 2 ; num 1
0x93 3 ; num 2
0xcc 4 ; num 3
0x8e 5 ; num 4
0x8f 6 ; num 5
0xc8 7 ; num 6
0x8a 8 ; num 7
0x8b 9 ; num 8
0xc4 10 ; num 9
0x9a 609 ; num *
0x9b 610 ; num #
0x95 125 ;MENU
0x9d 121 ;MEDIA_REWIND
0x9e 120 ;MEDIA_FAST_FORWARD
0x84 128 ;MEDIA_STOP
0xc9 135 ;TV_SUBTITLE
0xc7 603 ;PROG_BLUE
0xd8 603 ;PROG_BLUE
0xda 600 ;PROG_RED
0x83 602 ;PROG_YELLOW
0xc6 601 ;PROG_GREEN
key_end
甚至有些时候需要修改的是 /system/bin/set_display_mode.s(H),因为有些设计者把开机后是否自动加载remote.conf写在s(H)文件里
居然网站在这种地方设置成"不良信息"过滤...真是猜不不到
附,
查看所有输入设备的命令:cat /proc/bus/input/devices
或者getevent 与 getevent -v
dumpsys input | more查询目前输入设备对应的kl文件:keylayoutflie行,若是使用generic.kl说明是没有专门kl文件而调用的默认kl文件
感谢原帖
https://www.znds.com/tv-505563-1-1.html
https://www.cnblogs.com/milton/p/12355976.html
https://www.codenong.com/cs107103047/
https://blog.csdn.net/yao108yao/article/details/109010811
https://blog.csdn.net/yun382657988/article/details/51517741
原帖中所说的"盒子终端"指找个"终端软件程序app"安装在盒子上,想用终端修改的办法的话,可以下载"终端模拟器",可以相当于直接在pc上用adb连接操控的同样作用,
在电视盒上安装好终端软件,打开就相当于在pc上连接好电视盒后,用命令行进入了adb shell中的效果
remotecfg.s(H)的内容是:几个remote*.tab文件合并成remote.cfg
有人推荐程序Button Mapper Pro,连唤醒、休眠、关机都能弄弄出来
感谢https://www.right.com.cn/forum/thread-2724956-1-1.html
remote.conf与remote.tab1 对应安卓功能数字的列表(不一定符合你的系统)
参考原帖https://www.cnblogs.com/milton/p/12355976.html
遥控器代码调试,有些机器上可以使用adb的ir_user命令,或者getevent命令,捕捉电视盒接收到的信号
参考原帖https://www.znds.com/forum.php?mod=viewthread&tid=1179117
------------------
总结
从以上成功修改可以看出,有时候红外遥控器不通用,并不是红外线遥控器的发射接收频率不一致,电视盒能好好收到不同遥控器的红外信号时,还会因为厂商与系统制作者的改动,使系统中接收遥控器信号后的反应代码不一样,代码不一样而导致对反应无法翻译成有效的遥控信号.