阿里YunOS电视盒子中多遥控器兼容实现

Allwinner h3处理器,作为入门级4k解决方案,经过了四五年时间的打磨,使用定制化的系统,目前还是可以运行一些简单的直播类点播类应用,这两天闲着把家里两款H3的积灰了的盒子刷下固件,一个是迪优美特X16,一个是忆典S1,两者均使用的512MB内存,8GB存储的公版设计,使用了阿里的YunOS系统的机器,刷机时只能刷YunOS系统,否则刷机工具会提示 “烧写BOOT1分区失败” ,具体实现机制应该是有芯片设计配合实现。网上有大虾破解这限制,并制作了可以刷入的安卓固件。

h3的机器固件大多可以通刷,只是小部分gpio,包括遥控器等无法正常使用,这里分析其支持多遥控器的实现机制。

涉及到一个内核模块和一个交互程序以及一个按键映射表文件夹。分别是sunxi-ir-rx.ko和/system/bin/multi_ir以及/system/usr/keylayout/custom_ir_xxxx.kl,其源代码分别可在github上找到。

sunxi-ir-rx.ko负责接收红外数据并进行解析。具体外红数据格式为NEC协议,参考:https://www.cnblogs.com/zhugeanran/p/9334289.html

根据遥控器发出的设备地址码和命令码,结合/dev/下注册设备用于与multi_ir交互提供的按键映射,向系统input发送按键消息。通常,设备地址码与遥控器厂商相关,而命令码对应具体物理按键。

而multi_ir用于解析/system/usr/keylayout/中的custom_ir_xxxx.kl。并向sunxi-ir-rx.ko提供不同设备地址的命令码对应的系统按键。其中xxxx为设备地址码。

通过cat /proc/kmsg 可以实时查看sunxi-ir-rx.ko接收到的数据。

sunxi-ir-rx.ko中默认编译可以最大存储16个不同设备地址的映射,因此,文件夹中最多可能存在16个不同的设备地址映射文件。

Comments