先看效果:
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
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 到內核 , 在交給安卓 輸入子系統進行處理。