前一阵做了个安卓6的固件, 在R3300L和Q7上跑的, 其他问题没有, 但是有用户反映原来的遥控器用不了了, 于是检查了一下遥控器配置,

顺便学习一下此类设备的红外遥控机制. 为了方便测试还上淘宝买了六个遥控器.

Amlogic电视盒子的红外遥控配置

相关的配置文件有

  • /system/usr/keylayout/Generic.kl
  • /system/usr/keylayout/Vendor_0001_Product_0001.kl
  • /system/etc/remote.conf 或 /system/etc/remote1.conf

Generic.kl文件

Generic key layout file for full alphabetic US English PC style external keyboards.

This file is intentionally very generic and is intended to support a broad rang of keyboards.

Do not edit the generic key layout to support a specific keyboard; instead, create a new key layout file with the required keyboard configuration.

这个文件的格式很简单, 每一行都是 key [Number] [Function], 按Number排序, 依次定义了每个Key Number对应的功能, 其内容为

key 1     ESCAPE
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 12 MINUS
key 13 EQUALS
key 14 DEL
key 15 TAB
...

Vendor_0001_Product_0001.kl

Vendor_xxx.kl 这个文件是基于Generic.kl 的厂商自定义键布局, 在其基础上修改了一些key的定义, 其内容为

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
...

remote.conf 和 remote1.conf

系统默认用的是remote.conf, 但是有些固件使用的是remote1.conf. 如何判断呢? 我没找到合适的方法, 只能将其中一个文件更名后重启, 如果遥控器无法使用了, 就说明使用的是那个文件. 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 leader
# 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
work_mode = 0
repeat_enable = 1
repeat_delay = 130
repeat_peroid = 120
release_delay = 20
debug_enable = 1 fn_key_scancode = 0x15
left_key_scancode = 0x1c
right_key_scancode = 0x48
up_key_scancode = 0x44
down_key_scancode = 0x1d
ok_key_scancode = 0x1e
pageup_key_scancode = 0x04
pagedown_key_scancode = 0x1b custom_begin
factory_infcode = 0
factory_code = 0xdd220001
fn_key_scancode = 0x15
left_key_scancode = 0x99
right_key_scancode = 0xc1
up_key_scancode = 0xca
down_key_scancode = 0xd2
ok_key_scancode = 0xce
pageup_key_scancode = 0xdd
pagedown_key_scancode = 0x8c key_begin
0xdc 116 ;STB_POWER
0x9c 113 ;VOLUME_MUTE
0x8d 150 ;SETTINGS
#0xcd 141 ;RED F6
#0x91 142 ;GREEN F7
#0x83 143 ;YELLOW F8
#0xc3 144 ;BLUE F9
0x88 102 ;HOME
0x95 15 ;BACK
0xc5 145 ;HELP F1
0x82 125 ;MENU
0x99 105 ;DPAD_LEFT
0xca 103 ;DPAD_UP
0xc1 106 ;DPAD_RIGHT
0xd2 108 ;DPAD_DOWN
0xce 97 ;DPAD_CENTER
0x80 104 ;VOLUME_UP
0x81 109 ;VOLUME_DOWN
0xdd 92 ;PAGE_UP
0x8c 93 ;PAGE_DOWN
0x85 166 ;CHANNEL_UP
0x86 167 ;CHANNEL_DOWN
0x89 121 ;MEDIA_REWIND
0x84 120 ;MEDIA_FAST_FORWARD
0xd9 119 ;MEDIA_PLAY_PAUSE
0x96 128 ;MEDIA_STOP
0x87 11 ;0
0x92 2 ;1
0x93 3 ;2
0xcc 4 ;3
0x8e 5 ;4
0x8f 6 ;5
0xc8 7 ;6
0x8a 8 ;7
0x8b 9 ;8
0xc4 10 ;9
0xda 228 ;POUND#
key_end
repeat_key_begin
0xdc 116 ;STB_POWER
0x9c 113 ;VOLUME_MUTE
0x8d 150 ;SETTINGS
#0xcd 141 ;RED F6
#0x91 142 ;GREEN F7
#0x83 143 ;YELLOW F8
#0xc3 144 ;BLUE F9
0x88 102 ;HOME
0x95 15 ;BACK
0xc5 145 ;HELP F1
0x82 125 ;MENU
0x99 105 ;DPAD_LEFT
0xca 103 ;DPAD_UP
0xc1 106 ;DPAD_RIGHT
0xd2 108 ;DPAD_DOWN
0xce 97 ;DPAD_CENTER
0x80 104 ;VOLUME_UP
0x81 109 ;VOLUME_DOWN
0xdd 92 ;PAGE_UP
0x8c 93 ;PAGE_DOWN
0x85 166 ;CHANNEL_UP
0x86 167 ;CHANNEL_DOWN
0x89 121 ;MEDIA_REWIND
0x84 120 ;MEDIA_FAST_FORWARD
0xd9 119 ;MEDIA_PLAY_PAUSE
0x96 128 ;MEDIA_STOP
0x87 11 ;0
0x92 2 ;1
0x93 3 ;2
0xcc 4 ;3
0x8e 5 ;4
0x8f 6 ;5
0xc8 7 ;6
0x8a 8 ;7
0x8b 9 ;8
0xc4 10 ;9
0xda 228 ;POUND#
repeat_key_end
custom_end

在头部注释部分, 已经对文件的内容作了说明, 在注释部分之外

首先是 #amlogic NEC remote, 这行固定保留

然后是全局参数配置,

然后是每个遥控器的配置, 以 custom_begin 开始, 以 custom_end 结束, 可以有多个遥控器配置共存,

每个遥控器配置以

factory_infcode = 0
factory_code = 0xdd220001

这两行作区分, 这两个值都要和其他遥控器配置不同, 其中 factory_infcode 似乎是序号, 而factory_code是要跟遥控器按键产生的十六进制码后4位一致的.

键位定义包含 key_begin, key_end 和 repeat_key_begin , repeat_key_end 两部分, 这两部分分别代表了"单击"和"按住"对应的键功能, 如非特殊都可以设成一样的.

简单的说, 就是遥控器按键产生的十六进制码被盒子接收器接收后, 通过remote.conf找到了对应的key number, 再通过kl文件, 找到了对应的function, 然后就产生了操作.

红外遥控器键码识别

如果一个遥控器按键无法识别, 或者已有的遥控器想修改键功能, 但是不知道键码怎么办?

首先你要有盒子的TTL环境, 这样才能通过命令行与盒子交互, 理论上在安卓的Terminal APP中应该也可以的, 我还没试过.

网上有些文章说的systemctl stop eventlircd, ir-keytable -t 这些命令并非每个盒子都有, 但是dmesg命令基本上都是会有的, 可以通过dmesg. 因为其工作机制, 在键码能识别的时候, 是不会记录日志的, 所以要先将remote.conf或remote1.conf更名重启, 然后试试按遥控器, 再执行 dmesg -s 5000, 看看是不是会出现这样的日志记录

[ 5095.872000] Wrong custom code is 0xef109c21
[ 5097.694000] Wrong custom code is 0xee119c21

这就是记录下来的键码. 键码一共8位, 前2位是校验用的, 第3 - 4位是需要写在remote.conf里的键码, 第5 - 8位是设备码, 要跟factory_code的前4位一致.

记录键码的一些操作技巧: 首先四周不能有其他遥控器的干扰, 例如旁边有人在看电视按遥控器, 这样不行. 其次, 因为dmesg会不断产生新的系统消息, 对记录也产生干扰, 所以在操作的时候, 可以一次性按顺序按下七八个按键, 例如 开机, 后退, 上下左右中, 再立即命令行执行 dmesg -s 5000, 这时候最新的记录里面, 这7个键码就基本上是在一块的, 方便提取.

这样把遥控器的键码都记下来, 然后编辑remote.conf, 让盒子能识别.

在编辑remote.conf时, 可以先将kl里的 key number - > function 先列出来, 前面打上#, 这样方便对应, 例如

custom_begin
factory_infcode = 7
factory_code = 0xff000001 key_begin
#1 ;BACK
0x0f 2 ;1
0x11 3 ;2
0x12 4 ;3
0x4c 5 ;4
0x58 6 ;5
0x1b 7 ;6
0x17 8 ;7
0x4d 9 ;8
0x0a 10 ;9
0x1d 11 ;0
#12 ;MINUS
#13 ;EQUALS
#14 ;DEL
#15 ;BACK
#16 ;Q
#17 ;W
#18 ;E
#19 ;R
#20 ;T
#21 ;Y
#22 ;U
#23 ;I
#24 ;O
#25 ;P
#26 ;LEFT_BRACKET
#27 ;RIGHT_BRACKET
#28 ;ENTER
#30 ;A
#31 ;S
#32 ;D
#33 ;F
#34 ;G
#35 ;H
#36 ;J
#37 ;K
#38 ;L
#39 ;SEMICOLON
#40 ;APOSTROPHE
#42 ;SHIFT_LEFT
#43 ;BACKSLASH
#44 ;Z
#45 ;X
#46 ;C
#47 ;V
#48 ;B
#49 ;N
#50 ;M
#51 ;COMMA
#52 ;PERIOD.
#53 ;SLASH
0x55 97 ;DPAD_CENTER
0x4e 102 ;HOME
0x46 103 ;DPAD_UP
0x47 105 ;DPAD_LEFT
0x15 106 ;DPAD_RIGHT
0x16 108 ;DPAD_DOWN
0x10 114 ;VOLUME_DOWN
0x14 115 ;VOLUME_UP
0x18 116 ;POWER WAKE
0x4f 141 ;SETTINGS
#113 ;MUTE
#119 ;MEDIA_PLAY_PAUSE
#120 ;MEDIA_FAST_FORWARD
#121 ;MEDIA_REWIND
#122 ;MEDIA_PREVIOUS
#123 ;MEDIA_NEXT
#125 ;MENU
0x04 139 ;MENU
0x40 158 ;BACK
0x1c 227 ;STAR*
0x1e 228 ;POUND#
key_end repeat_key_begin
#1 ;BACK
0x0f 2 ;1
0x11 3 ;2
0x12 4 ;3
0x4c 5 ;4
0x58 6 ;5
0x1b 7 ;6
0x17 8 ;7
0x4d 9 ;8
0x0a 10 ;9
0x1d 11 ;0
#12 ;MINUS
#13 ;EQUALS
#14 ;DEL
#15 ;BACK
#16 ;Q
#17 ;W
#18 ;E
#19 ;R
#20 ;T
#21 ;Y
#22 ;U
#23 ;I
#24 ;O
#25 ;P
#26 ;LEFT_BRACKET
#27 ;RIGHT_BRACKET
#28 ;ENTER
#30 ;A
#31 ;S
#32 ;D
#33 ;F
#34 ;G
#35 ;H
#36 ;J
#37 ;K
#38 ;L
#39 ;SEMICOLON
#40 ;APOSTROPHE
#42 ;SHIFT_LEFT
#43 ;BACKSLASH
#44 ;Z
#45 ;X
#46 ;C
#47 ;V
#48 ;B
#49 ;N
#50 ;M
#51 ;COMMA
#52 ;PERIOD.
#53 ;SLASH
0x55 97 ;DPAD_CENTER
0x4e 102 ;HOME
0x46 103 ;DPAD_UP
0x47 105 ;DPAD_LEFT
0x15 106 ;DPAD_RIGHT
0x16 108 ;DPAD_DOWN
0x10 114 ;VOLUME_DOWN
0x14 115 ;VOLUME_UP
0x18 116 ;POWER WAKE
0x4f 141 ;SETTINGS
#113 ;MUTE
#119 ;MEDIA_PLAY_PAUSE
#120 ;MEDIA_FAST_FORWARD
#121 ;MEDIA_REWIND
#122 ;MEDIA_PREVIOUS
#123 ;MEDIA_NEXT
#125 ;MENU
0x04 139 ;MENU
0x40 158 ;BACK
0x1c 227 ;STAR*
0x1e 228 ;POUND#
repeat_key_end
custom_end

remote.conf编辑完后, 可以通过安卓的Root Explorer应用将原来的remote.conf备份, 再将新的remote.conf放进去, 重启后就能测试效果了.

Amlogic电视盒子红外遥控适配笔记的更多相关文章

  1. 基于Arduino、STM32进行红外遥控信号接收

    catalogue . 遥控器原理简介 . 红外遥控原理 . 常见红外遥控器红外线信号传输协议 . 遙控器的发展 . 实验过程 . 攻击面 . 基于STM32实现红外信号解码 1. 遥控器原理简介 0 ...

  2. Arduino红外遥控系列教程2013——红外转码

    教程三:红外转码教程——用电视遥控器取代机顶盒遥控器 前言前段时间看到了使用红外遥控的X-Bot机器人[链接],感觉很有意思.最近开始玩Arduino与红外,一方面打算将来用于BOXZ的之间的通讯控制 ...

  3. 电视盒子好用又强大的跨屏远程输入法 TVRemoteIME

    应用包下载地址: https://github.com/kingthy/TVRemoteIME/raw/master/released/IMEService-release.apk TVRemoteI ...

  4. 【开源项目】电视盒子好用又强大的APP: TVRemoteIME

    TVRemoteIME 电视盒子的远程输入法应用,可跨屏远程输入.跨屏远程控制盒子.远程文件管理.HTTP/RTMP/MMS网络视频直播.ED2K/种子文件的视频文件边下边播 应用的诞生 自从家里有电 ...

  5. Android手机、电视(盒子) 打开ADB调试 一览表

    手机.电视(盒子) 打开ADB调试 一览表 一.手机打开ADB调试方法 序号 名称 描述 方式 1 华为手机 EMUI 1.设置 ->关于手机-> 版本号 点击(4~5次)2.返回设置 - ...

  6. arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法

    最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)——红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境 ...

  7. 51单片机tea5767收音机 红外遥控 自动搜台 存台 DIY

    先看效果图: 显示 频道CH , 频率 100.0Mhz 欢迎信息,1602 内置日文平假名, 正好用来显示博主名称. 焊接前,已经万能面包板上试验成功. 焊接完成以后,1602 的D0 - D7 接 ...

  8. 红外遥控NEC协议使用总结

    最近做了一个调试红外遥控三色灯的实习,花了一个多月的时间研究基于NEC协议的红外遥控,下面是这次实习技术方面的总结. 一.NEC协议特征: 8位地址和8位命令长度 每次传输两遍地址(用户码)和命令(按 ...

  9. NAS服务器局域网内IPad、手机、电视盒子等联网播放

    为把各个移动硬盘和不同电脑的数据进行统一管理,入手了一台希捷 Seagate Business 无内置硬盘 商业级 2盘位 云存储网路存储,经过卖家指点和不断摸索,终于能用了,主要步骤如下: 1. 系 ...

  10. 基于FPGA的红外遥控解码与PC串口通信

    基于FPGA的红外遥控解码与PC串口通信 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<电子设计EDA>的课程设计作业(呵呵,这个月都拿 ...

随机推荐

  1. 【LINT】cpplint 分析笔记

    cpplint 分析笔记 · [前提得看下google规范] @2022-1-13 20:44:48 error message formate: [filename] [linenum] [mess ...

  2. Go-测试-testing

  3. 银河麒麟在线升级新版本docker

    银河麒麟在线升级新版本docker 卸载 学习来自: https://cloud.tencent.com/developer/article/1491742 yum remove docker \ d ...

  4. [转帖]arm linux下编译xtrabackup-2.4.5

    环境:aarch64/centos7.6  glibc-2.17 编译器:gcc version 5.5.0 (GCC) 官方参考文档:https://www.percona.com/doc/perc ...

  5. [转帖]Split Region 使用文档

    https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region 在 TiDB 中新建一个表后,默认会单独切分出 1 个 Regio ...

  6. [转帖]Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)

    https://www.cnblogs.com/monjeo/p/12191673.html 权限简介Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方 ...

  7. 国产CPU制造工艺与部分性能总结

    国产CPU制造工艺与部分性能总结 背景 最近一段时间验证了很多国产CPU的性能. 感觉很多地方与之前的理解有一些偏差. 前几天总结了部分架构和指令集相关的差异 今天想着总结一下制造相关的部分. 希望能 ...

  8. frp 的简单使用

    在出差现场. 开着VPN 就没法用出差现场的网络, 想了想 好像 只能用 frp 来搞一下比较好 借了下同事的vps 进行相应的处理 进行简单的内容穿透工作. 1. 下载相关的文件. wget htt ...

  9. Fabric区块链浏览器(3)

    本文是区块链浏览器系列的第五篇,项目完整代码在这里. 在上一篇文章中给浏览器增加了简单的用户认证,至此浏览器的基本功能就已经大致完成了. 在这片文章中,我将使用kratos对区块链浏览器器进行重构,使 ...

  10. net core控制台程序使用依赖注入读取appsettings.json配置文件

    .net 2.1有用,转自https://www.jianshu.com/p/726d1aa2795c 1.项目下添加appsettings.json文件,并将属性-复制到输出目录,设置为如果较新则复 ...