应用背景
随着红外线设备的应用日益广泛,例如遥控器和红外传感器等。而RK3399作为一款高性能处理器,广泛应用于电视盒子等智能终端。通过将红外遥控功能与 RK3399 电视盒子结合,用户能够高效地控制电视设备。极大的提升了用户体验。
iTOP-RK3399平台介绍
红外遥控方案示例
iTOP-RK3399 开发板搭载了HS0038B 红外接收模块。接下来我们在RK3399开发板 Android8系统上适配红外遥控。
01-获取USERCODE和KEY值
开发板里面烧写Android8系统,然后在串口终端输入以下命令使能DBG_CODE 打印
echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print
在遥控器上按下任意按键,可以看到类似如下信息:
从上图发现这个遥控的 usercode是0xdd22,用以标识遥控种类。RMC_GETDATA 表示键值。
我们选取遥控器上的几个按钮作为示例,分别测出如下图所示的按键的键值。
02-修改设备树打开PWM
首先查看开发板底板的原理图如下图所示:
然后在核心板原理图搜索“IR_RX”,如下图所示,对应的引脚是GPIO0_A6/PWM3A_IR_d
然后查找设备树itop-3399.dtsi文件,路径为:itop-3399_8.1/kernel/arch/arm64/boot/dts/rockchip/itop-3399.dtsi
在此文件中的pwm3节点添加键值,如下图所示:
我们来分析一下这个节点,如下表所示:
itop-3399_8.1/kernel/include/dt-bindings/input/rk-input.h文件如下图所示:
03-Android键值映射
在修改了步骤二的设备树后,重新编译Android源码,编译完成会在out目录下生成编译好的文件。itop-3399_8.1/out/target/product/rk3399_mid/system/usr/keylayout/ff420030_pwm.kl文件用于将 Linux 层获取的键值映射到 Android 上对应的键值。我们可以添加或者修改该文件的内容以实现不同的键值映射。没有的按键值,在按键时,上层app收到的值是未知按键。我们添加示例的几个按键的键值映射,如下图所示:
中间的数字是功能码对应的数字,在itop-3399_8.1/kernel/include/dt-bindings/input/rk-input.h中查看。右侧的是与上层对应的关系,在frameworks/base/core/java/android/view/KeyEvent.java路径可以查找到(例如:KEYCODE_DPAD_DOWN 只需要取后半部分就可以),如下图所示:
修改完毕ff420030_pwm.kl文件,然后修改编译脚本,将“make installclean”注释掉,然后重新编译Android8的镜像,编译完后,烧写镜像。
04-测试红外遥控
烧写镜像以后,系统启动进入Android系统,我们打开系统自带的“设置”APP,按遥控器上的上下键,可以移动到对应的选项,按遥控器上的enter按钮,可以选中选项,按返回按钮可以退回上一级目录,按音量+ - 可以控制音量。
然后我们打开系统自带的“通讯录”APP,新建联系人,在手机号的输入框里面,用遥控器按下0-9 的数字,可以输入,如下图所示,以上测试说明3399支持红外线接收。
全部0条评论
快来发表一下你的评论吧 !