android 7.1 rk3399 适配 IR 遥控器

先看效果:

 

DIY 外壳:

 

开发板买来,一直是用来学习安卓的,以前有一块 4412 android 4.4 ,实测性能的确太差,看电影都卡。先是花200买了个 rk3288 效果也不错,但是 IR 电路少元件,又花了300买了一个二手的 rk3399 ,只有裸板,这次正好 用 一个装手机贴膜的盒子 DIY 一个,直接拿裸板的确是太扎手了,手上还有静电也对板不好。

以前,一直是插鼠标,当 TV 盒子用的,也不是太方便,直到前年的时候,有个同事离职的时候,丢了几个板子和一些小配件给我,里面就有一个 红外遥控器,的确是安卓用的,按键也挺全。

 

最近也在搞安卓相关的开发,正好把这个也搞搞。

其实,这个难度不大,仅需要修改 设备树 就可以了。

虽然板子不是 这家的,但是也能做为参考

https://wiki.t-firefly.com/zh_CN/Firefly-RK3399/driver_ir.html

打开遥控器键码打印
echo 1 > /sys/module/rockchip_pwm_remotectl/parameters/code_print

全部的键,分别按一次

dmesg 查看内核打印

[  414.035531] init: Untracked pid 2503 exited with status 0
[  541.694656] USERCODE=0xff00
[  541.721567] RMC_GETDATA=eb 电源
[  561.002406] USERCODE=0xff00
[  561.029277] RMC_GETDATA=fd 上
[  562.223270] USERCODE=0xff00
[  562.250182] RMC_GETDATA=fc 下
[  562.972342] USERCODE=0xff00
[  562.999333] RMC_GETDATA=fb 左
[  563.659345] USERCODE=0xff00
[  563.686279] RMC_GETDATA=fa 右
[  579.286773] USERCODE=0xff00
[  579.313627] RMC_GETDATA=fe 确定
[  587.453435] USERCODE=0xff00
[  587.480369] RMC_GETDATA=ff 主页
[  593.331801] USERCODE=0xff00
[  593.358781] RMC_GETDATA=e9 返回
[  599.380030] USERCODE=0xff00
[  599.406982] RMC_GETDATA=e8 菜单
[  605.250435] USERCODE=0xff00
[  605.277300] RMC_GETDATA=ef 音量+
[  615.850009] USERCODE=0xff00
[  615.876964] RMC_GETDATA=f6 音量-

将按键值和用户码,写到设备树里面,重新生成 resource.img 烧到板子上就行了,这个不同的平台不一样,有的android 是要刷 dtb.img 有的是 boot.img 不一样,要看平台,如果想省事,就刷一个整体大包。

编译安卓7.1.2 遇到2个错误:

[ 59% 30431/51334] Building with Jack: out/ta...ramework_intermediates/with-local/classes.de
FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/with-local/classes.dex.rsp
Out of memory error (version 1.2-rc4 'Carnac' (298900 f95d7bdecfceb327f9d201a1348397ed8a843843 by android-jack-team@google.com)).
GC overhead limit exceeded.
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
[ 59% 30431/51334] target  C++: libart <= art...untime/interpreter/interpreter_switch_impl.c
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1

内存给的太少了,直接给 虚拟机 15G 内存,宿主机仅有 16G 内存,主机卡的不行。

SSL error when connecting to the Jack server Try jack-diagnose 
 
检查权限也是正常的 $ ls -la ./prebuilts/sdk/tools/jack-diagnose -rw-rw-r-- 1 dev dev 4159 9月 11 09:28 ./prebuilts/sdk/tools/jack-diagnose
 
在编译停止的时候,检查一下 jack 进程还是在的
ps aux|grep jack
        4885  162 24.4 11048556 3666956 ?    Sl   12:43  84:25 java -XX:MaxJa    vaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredComp    ilation -cp  /.jack-server/launcher.jar com.android.jack.launcher.Server    Launcher
       114597  0.0  0.0  21312   964 pts/20   S+   13:35   0:00 grep --color=a    uto jack

解决 手动停止下 jack 然后在正常编译安卓就正常了:

prebuilts/sdk/tools$ ./jack-admin kill-server
Killing background server

安卓 system 挂载为 可读写的方法:(低版本 adb  没有 disable-verity 命令,请使用最新版本 adb)

adb disable-verity 
adb root
adb remount

安卓中使用 红外 遥控器的事件处理比 linux 多了 kl 如 :/system/usr/keylayout/ff420030_pwm.kl

一个键值,可以设置映射到另一个键值上。

红外信号,通过38M 一体化接收头接收到,然后使用 PWM进行捕获,在通过比较设备树中配置的用户码和键码,上报 input event  到内核 , 在交给安卓 输入子系统进行处理。

 

posted @ 2021-09-11 21:29  宁次  阅读(737)  评论(2编辑  收藏  举报