ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 34739|回复: 15
上一主题 下一主题
[心得]

红外遥控器手动修改让电视盒识别,改按键功能,交流汇总

  [复制链接]
跳转到指定楼层
楼主
发表于 2023-11-1 10:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 quakeskyq 于 2023-11-3 10:01 编辑

网上已经有不少操作说明文章,这次整理个更容易让大多人看懂的,并且分楼层来从简单到难,把涉及的不同修改难度都探一下,一楼就是最容易修改的情况

欢迎各位在此楼交流.对应更难的修改部分怎么把说明内容简化
这几天楼里有什么问题的话,也会回答



绪论:

机器刚买来时,遥控器能正常使用,既然机器没换,刷机后遥控器就肯定能正常使用
所有准备刷机前的机器,都提前备份好你的遥控器正常能用时的遥控器文件,以便刷机后再改回去,具体请看后文详解

不同厂商制作者,制作的遥控器配置文件、文件名、文件位置会不一样,但都是安卓,修改思路就大同小异.
像海思芯片的遥控码文件是 key.xml     晶晨的是remont.conf
也有些系统则是写在remote.cfg里
还有的写在/system/vendor/bin下的remotecfg这个文件里
情况很多种,最好找到原机的刷机包,直接替换进去

下面作为样例的,是 /vendor/etc/文件夹下有remote.tab1 ~ remote.tab5这些文件的情况(应该是晶辰的情况之一)


--------------

一楼

感谢原帖https://www.znds.com/tv-1236582-1-3.html

一,修改遥控器识别码

解决红外遥控器不被机器识别、与按键不对应的最简便办法(前提是你的机器里有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自己修改



上一篇:哪位大神解决一下海信IP202H救砖的问题黑砖。
下一篇:广东电信天邑ty1613线刷问题求助
沙发
 楼主| 发表于 2023-11-1 11:51 | 只看该作者
本帖最后由 quakeskyq 于 2023-11-2 15:53 编辑

二楼,通过adb获得遥控器识别码、遥控器按键码,具体操作

参考原帖
https://blog.csdn.net/yao108yao/article/details/109010811
https://www.jianshu.com/p/5ecf24a08340
(不过都只谈了remote.conf与kl文件,没包括remote.cfg.像1楼原帖所写的remote.cfg就是设计者没把遥控器识别码与按键码写在remote.cfg里)



首先需要你的电视盒能从另一台设备上(手机或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权限的办法放在后面的楼层里交流.

回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2023-11-1 12:37 | 只看该作者
本帖最后由 quakeskyq 于 2023-11-1 13:08 编辑

三楼内容目前发不出来,不知为什么提示有"不良信息",正在找站长解决

三楼,更复杂的情况

一,
有些电视盒,想让按下遥控器按钮在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,是表示能接收但不能正确识别信号,只是时别的问题所以容易修改.


回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2023-11-1 12:56 | 只看该作者
本帖最后由 quakeskyq 于 2023-11-1 13:00 编辑

举例一个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
回复 支持 反对

使用道具 举报

5#
发表于 2023-11-1 13:54 | 只看该作者
回复 支持 反对

使用道具 举报

6#
发表于 2023-11-1 14:22 | 只看该作者
谢谢,好文章 很难见到了。。。。。。
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2023-11-1 14:39 | 只看该作者
本帖最后由 quakeskyq 于 2023-11-1 14:41 编辑

四,
甚至有些时候需要修改的是 /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

回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2023-11-1 14:41 | 只看该作者
本帖最后由 quakeskyq 于 2023-11-3 14:23 编辑

四楼

有人推荐程序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


------------------

总结

从以上成功修改可以看出,有时候红外遥控器不通用,并不是红外线遥控器的发射接收频率不一致,电视盒能好好收到不同遥控器的红外信号时,还会因为厂商与系统制作者的改动,使系统中接收遥控器信号后的反应代码不一样,代码不一样而导致对反应无法翻译成有效的遥控信号.
回复 支持 反对

使用道具 举报

9#
发表于 2023-11-1 17:01 | 只看该作者
来看看这个
回复 支持 反对

使用道具 举报

10#
发表于 2023-11-1 17:01 | 只看该作者
很需要这个内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2024-4-29 14:34 , Processed in 0.067778 second(s), 13 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2024 ZNDS.Com

快速回复 返回顶部 返回列表