[转]A20红外遥控器与Android功能的适配

作者: Sam (甄峰)   sam_code@hotmail.com
转载自http://blog.sina.com.cn/s/blog_602f87700101he9v.html
 
最近需要在全志A20上添加红外遥控器。并使其中一些红外按键和例如"Home","Menu",音量增加降低等功能联系起来。
 
Sam之前只知道Android在 /system/usr/keylayout/ 下会有.kl文件。
其中注明了底层键值和Android上层的功能联系起来。
 
例如:
key 64   BACK               WAKE_DROPPED
key 4   MENU               WAKE_DROPPED
key 85    DPAD_CENTER        WAKE_DROPPED
key 22   DPAD_DOWN          WAKE_DROPPED
key 70   DPAD_UP            WAKE_DROPPED
key 71    DPAD_LEFT          WAKE_DROPPED
key 21   DPAD_RIGHT         WAKE_DROPPED
key 20  VOLUME_UP          WAKE
key 16   VOLUME_DOWN        WAKE
key 92   MUTE               WAKE
#key 24   POWER              WAKE
key 13   MOUSE   WAKE
#key 66   PROG_RED           WAKE
key 66   BUTTON_16           WAKE
#key 69   PROG_GREEN         WAKE
key 155   PROG_GREEN         WAKE
key 104   PROG_YELLOW        WAKE
key 98   PROG_BLUE          WAKE
key 9    SETTINGS           WAKE
key 152   HOME               WAKE
key 90   0                  WAKE
key 26   1                  WAKE
key 1    2                  WAKE
key 69   3                  WAKE
key 89   4                  WAKE
key 77   5                  WAKE
key 197   6                  WAKE
key 82   7                  WAKE
key 83   8                  WAKE
key 65   9                  WAKE
 
 
这其中,WAKE 表示唤醒(激活屏幕)并发送请求

WAKE_DROPPED 表示唤醒(激活屏幕)而不发送请求 

 

底层Driver应该有个列表来对应红外按键和KeyCode。

 

当前我们就从底层开始,一步步把红外遥控器的Firmware Key Code与 Android 底层 Input Device中读取的Code 以及 Android 上层功能联系起来。

 

 

0. 让红外遥控器被A20所识别:

红外遥控器有很多,他们针对不同的设备,设备如何知道哪个红外遥控器发送的红外码是传给它的呢?

我们知道,NEC码有客户码。 当红外信号中的客户码和设备所需的客户码相同时,则设备认为此码是发给它的。

这个地址码在:

A20-Homlet-V1.0_ss/lichee/linux-3.3/drivers/input/keyboard/ir-keymap.h

因为Sam所用遥控器用户(系统)码为:0x7F80. 

所以:

#define IR_ADDR_CODE                (0x7f80)

 

 

 

 

1. 红外遥控器 Firmware Key Code 与 Android Linux Input Device Key Code 的联系:

 1.1: 寻找红外Driver:

#lsmod

可以看到sun7i-ir. 通过它,Sam找到 Linux Kernel 中 driver/input/keyboard/sun7i-ir.c

1.2: Firmware中的红外码:

例如:某键发送码:AC 53

 

 

1.3: Driver 中的处理:

在中端处理程序中,Driver得到码值: ir_code. 并利用ir_keycodes列表中的对应项作为发给Input 子系统的KeyCode。

 

input_report_key(ir_dev, ir_keycodes[(ir_code>>16)&0xff], 0);

input_sync(ir_dev);

 

所以:按键 AC 53. 则发送: ir_keycodes[0x53] . 这个值为83. 也就是说:它向Input 子系统中发送的KeyCode= 83。

 

 

2. Input 子系统的KeyCode与Android功能的对应:

代码稍后分析:

只需要看kl文件中:

83对应的是 8。 则说明按下这个键后。 Android认为有人按下了8 这个Key。

 

如需要修改,可以修改:

A20-Homlet-V1.0_ss/android/device/softwinner/sugar-xbh_bst/sun7i-ir.kl

最终,这个文件会被copy到Image中,烧入系统; 

/system/usr/keylayout/sun7i-ir.kl


---------------------
作者:zgy0808
来源:CSDN
原文:https://blog.csdn.net/zgy0808/article/details/25481853
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值