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-[email protected])).
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 root
adb remount

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

一個鍵值,可以設置映射到另一個鍵值上。

紅外信號,通過38M 一體化接收頭接收到,然後使用 PWM進行捕獲,在通過比較設備樹中配置的用戶碼和鍵碼,上報 input event  到內核 , 在交給安卓 輸入子系統進行處理。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章