• HiSilicon352 android9.0 适配红外遥控器


    海思Android解决方案在原生Android基础上,基于传统电视用户使用习惯,增加了对红外遥控器和按键板的支持,使传统电视用户能更好适应智能电视方案。


    一.功能描述:

    在这里插入图片描述
    在系统启动时,会先启动android_ir_user;vinput设备节点将按键事件转换为Android的标准输入发送到input。


    二.文件路径

    按键适配源码路径如下:

    • framework层配置文件:
      frameworks/base/core/java/android/view/KeyEvent.java
      frameworks/base/core/res/res/values/attrs.xml
    • native层配置文件:
      frameworks/native/include/android/keycodes.h
      frameworks/native/include/input/InputEventLabels.h
    • 海思定制文件:
      device/hisilicon/bigfish/prebuilts/Vendor_0001_Product_0001.kl
    • 海思红外遥控器配处理程序代码:
      device/hisilicon/bigfish/system/ir_user/

    三.遥控器按键适配

    1> IR适配

    需要先打开打印,从而获取去红外码,再依次进行 linux keycode 和 Android frameworks映射。

    diff --git a/device/hisilicon/bigfish/system/ir_user/ir_user.cpp b/device/hisilicon/bigfish/system/ir_user/ir_user.cpp
    index 335d698e80..db082c3c3f 100644
    --- a/device/hisilicon/bigfish/system/ir_user/ir_user.cpp
    +++ b/device/hisilicon/bigfish/system/ir_user/ir_user.cpp
    @@ -550,7 +550,7 @@ void IrSampleThread()
             int ret = IR_GetValueWithProtocol(status, key, name, sizeof(name), readTimeout);
             if (ret) {
                 if (!g_debugIrEnable) {
    -                printf("IR_GetValueWithProtocol ret = %d ", ret);
    +                printf("IR_GetValueWithProtocol ret = %d\n", ret);
                     continue;
                 }
                 IrAutomatedTest(num, key, status);
    @@ -558,13 +558,14 @@ void IrSampleThread()
             isMouseEventKey = false;
             bool isBrowserMouseMode = false;
             SetBrowserMouseMode(isBrowserMouseMode);
    +    printf("IR_GetValueWithProtocol linuxKeycode = %x---------- key=%llx\n",linuxKeycode ,key);
             if (!SetLinuxKeycode(linuxKeycode, key)) {
                 continue;
             }
             // shield PIP(WINDOW) key
             if (linuxKeycode == WINDOW) {
                 isMouseEventKey = true;
    -            XLOGD("you have pressed PIP key\n ,yCoordinate is %d ", yCoordinate);
    +            XLOGD("you have pressed PIP key\n ,yCoordinate is %d\n", yCoordinate);
                 if (status == HI_UNF_KEY_STATUS_UP) {
                     u32MouseMode = !u32MouseMode;
                 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    2> 查看红外遥控器发射的按键值

    串口输入以下命令:

    android_ir_user -d //模拟自动红外测试

    通过该命令,可以查看平台是否正常接收红外信号,按遥控器按键可以从串口看到第一步添加的打印。

    IR_GetValueWithProtocol linuxKeycode = 0xa45bff00---------- key=139

    3> 填入 key.xml 文件

    源码文件:device/hisilicon/Hi3751V350/etc/input/key.xml

    将按键打印的键值一一对应添加到对应的功能键中。

    
    <key_xml>
        <hisi-key>
            <key value="0x639cff00" name="KEY_POWER"      />      
            <key value="0x2ed1ff00" name="KEY_MUTE"       />      
            <key value="0xef10ff00" name="KEY_SOURCE"     />      
            <key value="0x7986ff00" name="KEY_GUIDE"      />      
            <key value="0x7a85ff00" name="KEY_ZOOM"       />      
            <key value="0x7e81ff00" name="KEY_3D"         />      
            <key value="0x7f80ff00" name="KEY_INFO"       />      
            <key value="0x6d92ff00" name="KEY_1"          />      
            <key value="0x6c93ff00" name="KEY_2"          />      
            <key value="0x33ccff00" name="KEY_3"          />      
            <key value="0x609fff00" name="KEY_4"          />      
            <key value="0x718eff00" name="KEY_5"          />      
            <key value="0x708fff00" name="KEY_6"          />      
            <key value="0x37c8ff00" name="KEY_7"          />      
            <key value="0x6b94ff00" name="KEY_8"          />      
            <key value="0x758aff00" name="KEY_9"          />      
            <key value="0x748bff00" name="KEY_0"          />      
            <key value="0x3bc4ff00" name="KEY_SOUNDMODE"  />      
            <key value="0x39c6ff00" name="KEY_PICTUREMODE"/>      
            <key value="0x34cbff00" name="KEY_BACK"       />      
            <key value="0x7887ff00" name="KEY_HOME"       />      
            <key value="0x7788ff00" name="KEY_TVSETUP"    />      
            <key value="0x6897ff00" name="KEY_MENU"       />      
            <key value="0x35caff00" name="KEY_UP"         />      
            <key value="0x2dd2ff00" name="KEY_DOWN"       />      
            <key value="0x3ec1ff00" name="KEY_RIGHT"      />      
            <key value="0x6699ff00" name="KEY_LEFT"       />      
            <key value="0x31ceff00" name="KEY_ENTER"      />      
            <key value="0x30cfff00" name="KEY_CHANNELUP"  />      
            <key value="0x629dff00" name="KEY_CHANNELDOWN"/>      
            <key value="0x6f90ff00" name="KEY_VOLUMEUP"   />      
            <key value="0x6798ff00" name="KEY_VOLUMEDOWN" />      
            <key value="0x649bff00" name="KEY_RED"        />      
            <key value="0x659aff00" name="KEY_GREEN"      />      
            <key value="0x3fc0ff00" name="KEY_YELLOW"     />      
            <key value="0x3dc2ff00" name="KEY_BLUE"       />      
            <key value="0x3cc3ff00" name="KEY_REWIND"     />      
            <key value="0x25daff00" name="KEY_PLAYPAUSE"  />      
            <key value="0x29d6ff00" name="KEY_STOP"       />      
            <key value="0x2fd0ff00" name="KEY_FASTFORWARD"    />      
            <key value="0x7b84ff00" name="KEY_PAGEUP"     />      
            <key value="0x7689ff00" name="KEY_PAGEDOWN"   />      
            <key value="0x26d9ff00" name="KEY_SUBTITLE"   />      
            <key value="0x6996ff00" name="KEY_NICAM"      />      
            <key value="0x6a95ff00" name="KEY_TELETXT"    />      
            <key value="0x738cff00" name="KEY_CC"         />      
            <key value="0x7d82ff00" name="KEY_HDMI"       />      
            <key value="0x38c7ff00" name="WINDOW"       />      
            <key value="0x9a65ff00" name="KEY_RECALL"     />      
        hisi-key>
    key_xml>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    三,调试指引

    1> 在串口输入以下命令,查看输入设备在运行环境下加载的配置文件。

    dumpsys input

    通过该命令可以查看输入设备加载的配置文件是否正确,海思平台遥控器配置文件加
    载情况如下,如果加载不正确,系统会加载默认的配置文件Generic.kl:
    在这里插入图片描述

    2> 在串口输入以下命令,查看Android输入事件。

    getevent

    通过该命令可以查看输入事件是否传到EventHub,按遥控器可以从串口看到如下打印:
    在这里插入图片描述

  • 相关阅读:
    【NLP】文本处理的基本方法【jieba分词、命名实体、词性标注】
    【Java基础】方法
    面试反问环节应该问什么?
    C#的窗体假关闭操作例子 - 开源研究系列文章
    Nginx单独开启SSL模块和HTTP2模块,无需重新覆盖安装
    数据在内存中的存储
    数据库(18)——DCL权限控制
    CSDN21天学习挑战赛之插入排序
    Redis 内存管理
    *Django中的Ajax jq的书写样式1
  • 原文地址:https://blog.csdn.net/weixin_45639314/article/details/134294368