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映射。

c 复制代码
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;
             }

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

串口输入以下命令:

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

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

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

3> 填入 key.xml 文件

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

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

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<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"      />      <!--EPG -->
        <key value="0x7a85ff00" name="KEY_ZOOM"       />      <!--ASPECT -->
        <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 up-->
        <key value="0x2dd2ff00" name="KEY_DOWN"       />      <!--key down-->
        <key value="0x3ec1ff00" name="KEY_RIGHT"      />      <!--key right-->
        <key value="0x6699ff00" name="KEY_LEFT"       />      <!--key left -->
        <key value="0x31ceff00" name="KEY_ENTER"      />      <!--key ok -->
        <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"     />      <!--PAGEUP -->
        <key value="0x7689ff00" name="KEY_PAGEDOWN"   />      <!--PAGEDOWN -->
        <key value="0x26d9ff00" name="KEY_SUBTITLE"   />      <!--SUBTITLE -->
        <key value="0x6996ff00" name="KEY_NICAM"      />      <!--NICAM MTS/HOLD -->
        <key value="0x6a95ff00" name="KEY_TELETXT"    />      <!--TELETXT CC -->
        <key value="0x738cff00" name="KEY_CC"         />      <!--Internet/REVEAL -->
        <key value="0x7d82ff00" name="KEY_HDMI"       />      <!--Swap -->
        <key value="0x38c7ff00" name="WINDOW"       />      <!--PIP/Cancel AV quicksetting-->
        <key value="0x9a65ff00" name="KEY_RECALL"     />      <!--NULL -->
    </hisi-key>
</key_xml>

三,调试指引

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

dumpsys input

通过该命令可以查看输入设备加载的配置文件是否正确,海思平台遥控器配置文件加

载情况如下,如果加载不正确,系统会加载默认的配置文件Generic.kl:

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

getevent

通过该命令可以查看输入事件是否传到EventHub,按遥控器可以从串口看到如下打印:

相关推荐
sweetying31 分钟前
30了,人生按部就班
android·程序员
用户2018792831671 小时前
Binder驱动缓冲区的工作机制答疑
android
真夜1 小时前
关于rngh手势与Slider组件手势与事件冲突解决问题记录
android·javascript·app
用户2018792831671 小时前
浅析Binder通信的三种调用方式
android
用户092 小时前
深入了解 Android 16KB内存页面
android·kotlin
火车叼位2 小时前
Android Studio与命令行Gradle表现不一致问题分析
android
前行的小黑炭4 小时前
【Android】 Context使用不当,存在内存泄漏,语言不生效等等
android·kotlin·app
前行的小黑炭5 小时前
【Android】CoordinatorLayout详解;实现一个交互动画的效果(上滑隐藏,下滑出现);附例子
android·kotlin·app
用户20187928316717 小时前
Android黑夜白天模式切换原理分析
android
芦半山18 小时前
「幽灵调用」背后的真相:一个隐藏多年的Android原生Bug
android