程序员人生 网站导航

RK3128平台android系统修改添加遥控器键值码值

栏目:综合技术时间:2015-02-13 08:16:27

             最近帮客户定制RK3128平台的固件,触及到定制新的遥控器,需要添加或修改遥控码值。RK3128平台android系统修改遥控器码值比全志A20A31s略微麻烦1些,其实本质是1样的。具体的修改方法以下:

             1,先弄清楚遥控器的状态,包括遥控器用户码、键值对应的码值。方法:adb shell,输入echo1 >/sys/module/rockchip_pwm_remotectl/parameters/code_print

再输入,cat /proc/ksmg,也能够通过串口弄。

遥控器对着灯板按,会发现终端界面有反应,会出现类似下面的信息


其中USERCODE=0xff00是遥控器用户码,fa是按键对应的码值。

            2,就这样把遥控器按顺序按1遍,记录所有的键和对应的码值。

            3,进入kernel/arch/arm/boot/dts目录,找到rk3128-box-rk88.dts文件,键值就定义在这个里面,复制出来编辑。

            4,打开dts文件,找到下面这个方法

   

其中usercode是遥控器用户码,在这个地方改成你的遥控器用户码如(0xff00)就行,或在ir_key1{}代码块后面再加1个代码块ir_key2{},格式1样。

Key_table=下面就是码值和对应的键。其中,以上图为例第6个键,0xec是我们前面按遥控器键获得的遥控码值,KEY_MENU是我们为遥控器上面删除键定义的键值名称,KEY_MENU这个键必须在device/rockchip/rksdk目录下的映照的键值文件 20050030_pwm.kl中有定义过才行,而且这个键1定要在KeyEvent.java中有定义才行。我们找到20050030_pwm.kl文件,打开,会发现里面定义的格式以下:


我们会发现,左侧是数字,右侧是定义的名称,dts中直接填KEY_MENU139都行。

注意这里面删除键定义的是key 111  DEL,而dts里面是DELETE,不知为什么,定义成1样不行。如果出现不管怎样改都不行,直接在dts文件中写111就行,这个是扫描码。

这些经常使用的键都是系统帮忙定义好的,如果遥控器上有要新增1个按键肿么办?

这时候就要自定义键了。简单的办法是找几个系统里面已定义过的键,而且系统又没有用到,而且这个键1定要在KeyEvent.java中有定义才行,在20050030_pwm.kl文件(不同平台这个kl文件可能不1样)中按格式定义,如#key99   SYSRQ,这个系统里面有定义,KeyEvent.java中有定义,但不知道是用来弄啥子的,而且又没用到,可以把它拿来功能定义成直播键,。

弄之前先看下系统和frameworks/base/core/java/android/view/KeyEvent.java里面有木有定义,查找Linux标准键值命令:在kernel目录下,输入,find . -name"*.h" |xargs grep -r "SYSRQ",以下图,说明系统有定义


其中99是扫描码。关于3128遥控器系统定义的键可参考文档:3128红外遥控器键值参考文档

更简单的办法是只改个PhoneWindowManager.java文件,如Setting键在新遥控器上没有用到,可以把这个里面的功能直代替换成要添加的功能(如直播)。

复杂点的办法就是在系统中添加额外的键了,这个等有时间了专门写个文章叙述1下。

            5,对有需求的按键,如遥控器上面1个直播键,在前面几步定义好后,需要在frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java这个类中interceptKeyBeforeDispatching(WindowState win, KeyEvent event, intpolicyFlags)这个方法中拦截,并履行相应功能(如进入直播)。

 

上面的方法都是RK3128系统最快速的修改或添加遥控器码值的方法了。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐