http://lxr.free-electrons.com/source/drivers/media/rc/gpio-ir-recv.c

简单分析了一下

1. 通过设备树来选择接上rc的gpio

2. 设置上升与下降沿中断,前提是这个接上RC的GPIO必须支持中断功能

3. 中断来了以后判断高低电平,标识是IR_SPACE还是IR_PULSE通过以下函数传递

rc = ir_raw_event_store_edge(gpio_dev->rcdev, type);

其实就是记录当前时间存到一个kfifo里面

4. 通过译码算法去识别当前的键值


优点:中断来处理,将原始值为时间存入FIFO再处理,不会浪费太多在中断里的时间



http://www.irdroid.com/downloads/ 一个android下的irda 提供源代码

未仔细看代码,粗略看了一下应该是上面的linux驱动然后调用识别代码后映射处理,然后交给uinput传递模拟成具体的键值