和菜鸟一起学android4.0.3源码之红外遥控器适配

        其实,这个是来到公司,做linux驱动的第一个任务,照理来说应该是要放在linux那块的,只是,linux下的红外遥控器很多,而网上关于android下的红外遥控一直都没有什么资料可以学习,仅记下来,为了温故知新。
         在此,已经调试好linux下的IR的驱动,一开始是以char设备来注册的,不过想着android下,基本都是input设备的,因为EventHub下打开的是/dev/input/目录下的设备节点。所以如果把遥控器作为input设备,不是更好,其实input设备也是属于char设备的,只是她实现好了很多机制,只需要上报数据就可以搞定了,简单又方便啊。在此有一个假设,是想把IR的各个按键码映射到android中的键盘中得话,是不是可以直接搞定?带着这个问题,于是试验了了下已经编写好的IR的红外驱动。随便添加了电源,音量,数字,以及home,返回,menu等。
        没想到,驱动层适配好后,android上层都可以实现了。于是也就没有深入下去,功能也实现了,下面简单介绍下实现过程吧。
        首先是注册为input设备,这个网上多的是,然后是遥控器的解码,这个看具体的解码过程,已经很好实现的。中断来了之后,由于在解码过程中有点耗时,所以就放在中断下半部分去工作,也就是工作队列中去了。接着按照实现的编码来上报按键值。比如说按下的是电源键,那么就

input_report_key(ir_dev, KEY_POWER, 1);
input_report_key(ir_dev, KEY_POWER, 0);
input_sync(ir_dev);


     那样的话android上层就会知道这个是电源键,如果是音量加键,那么就上报

input_report_key(ir_dev, KEY_VOLUMEUP, 1);
input_report_key(ir_dev, KEY_VOLUMEUP, 0);
input_sync(ir_dev);


    播放音乐的时候也是可以控制音量了。
      具体的KEY_POWER啊,KEY_VOLUMEUP等都可以在linux下的linux/linux.h中找到,基本上所有的操作都有定义。所有的功能都是可以映射到android键盘中的,至此,可以拿着遥控器来控制我们的android的各个功能了。

你可能感兴趣的:(Android源码学习之路,Android源码学习之路)