找回密码
 注册

微信扫码登录

使用验证码登录

只需一步,快速开始

胜天工科技销售各种数字电视信号调制卡胜天工科技销售各种数字电视信号码流卡

【游客、新手、注册会员的区别】 【积分策略和会员晋级说明】 【发帖和附件上传规则】 【如何下载感兴趣的资料】 【如何获取梦游币】 【侵权资料处理及免责说明】
查看: 4675|回复: 6

A20红外遥控器与Android功能的适配(转)

 火... [复制链接]
  • TA的每日心情
    开心
    2026-4-27 11:48
  • 签到天数: 4186 天

    [LV.Master]伴坛终老

    发表于 2013-12-27 14:25:42 | 显示全部楼层 |阅读模式
    分享到:
    消息来自- 北京
    最近需要在全志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
    踩过的脚印
  • TA的每日心情
    开心
    2013-12-28 11:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2013-12-28 20:27:18 | 显示全部楼层
    消息来自- 中国
    学习了。谢谢楼主分享
    回复

    使用道具 举报

    该用户从未签到

    发表于 2014-2-27 16:38:29 | 显示全部楼层
    消息来自- 北京
    好东西,要学习下!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-1-10 23:02
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2014-12-21 23:38:59 | 显示全部楼层
    消息来自- 山东
    谢谢 !长见识!!!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-8-16 14:53
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2015-8-16 15:00:43 | 显示全部楼层
    消息来自- 重庆
    谢谢楼主分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-19 19:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-19 20:00:35 | 显示全部楼层
    消息来自- 上海
    这个厉害,这下开发这个全志A20的朋友们 有了一些帮助
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-2-29 11:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-2-29 13:27:43 | 显示全部楼层
    消息来自- 广东深圳
    学习了,精采
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|数字电视开发网 ( 京ICP备16008897号-5 )

    GMT+8, 2026-5-14 08:45 , Processed in 0.149993 second(s), 28 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2026 Discuz! Team.

    快速回复 返回顶部 返回列表