Amlogic新增遥控器

我们在学习完kl文件的适配后,是设定是遥控器已经被识别的情况下进行。列如我在某宝花八块九包邮的遥控器,对着红外接收头按下按键getevent是没有效果的。amlogic使用的是38khz的红外接收器,遥控器只要支持NEC远程协议即可被支持。

先来解释一下大致流程:内核启动->加载/etc/remote.conf配置文件->红外接收扫描->匹配设备码factory_code->键码值+设备码生成校验码与校验码匹配->上报framework层。

之前提到的kl文件适配就在framework层发生。内核扫码匹配时如果键值不支持会记录在内核报告信息中。我们执行dmesg -s 5000即可获取5000毫秒内的内核报告。

我们先将/etc/remote.conf文件adb pull /etc/remote.conf D:/key本地计算机。并删除设备中/etc/remote.conf文件。shell命令模式下rm /etc/remote.conf如果未获得root权限请先获取root权限。这样我们就可以获取到每次遥控器按下的内核报告。按下遥控器后shell命令模式下执行dmesg -s 5000。我们可以得到类似以下打印:

..
...
[ 5097.694000] Wrong custom code is 0xee119c21

如果我们没有获取到上述打印,说明遥控器不支持NEC远程协议,需要更换一个遥控器进行适配。
我们将后面的十六进制数据如:0xee119c21与按键名称记录下来。重复上诉动作按下所有的按键,并且记录下来。我们可以得到以下结果:

主页
0xee119c21

退出
0xee139c21

音量加
0xee819c21
....

例如主页键home的键值0xee119c21释义如下:

0x ee 11 9c21
十六进制标志 校验码 键值keycode 设备码factory_code
每个按键均以改标志开头 用于校验数据是否正确 按键键值 遥控器的设备码,每个按键均一样,用于标记是哪个遥控发生过来的

打开我们本地的remote.conf文件,先将我们获取到的factory_code填到对应的位置例如:

#原有值
factory_code    = 0x77dd0001
#修改为,后面的0001不要动,原来是什么就是什么
factory_code    = 0x9c210001

我们定位到第一个key_begin会发现有以下结构

0xc1 106 #HOME 
0xca 103 #BACK
0xd2 108 #V +

例如0xc1 106 #HOME其中释义如下:

0xc1 106 #HOME
遥控器对接按键键值 上报framework值 注释
0x保持不变,后面的填上我们之前获取到的键值keycode 上报值,保持不变 注释,保持不变

到了这里就可以做很多操作了,列如配置文件没有注释时上报framework值我们就可以1-999随意填写,然后再去kl文件中纠正。如果我们的遥控键比配置文件多则则新增一行再去kl文件新增即可。修改完之后再将remote.conf文件上传到/etc目录,列如:adb push D:/key/remote.conf /etc。然后重启设备即可进行按键测试。

注意某些设备remote.conf文件可能在/system/etc目录,需要根据实际需求进行修改。

推荐阅读:

安装adb以及通过网络进行adb连接

adb命令使用

kl文件适配

发表评论

CAPTCHAis initialing...