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,按遥控器可以从串口看到如下打印:

相关推荐
Yeats_Liao几秒前
Spring 定时任务:@Scheduled 注解四大参数解析
android·java·spring
雾里看山2 小时前
【MySQL】 库的操作
android·数据库·笔记·mysql
水瓶丫头站住10 小时前
安卓APP如何适配不同的手机分辨率
android·智能手机
xvch11 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
xvch15 小时前
Kotlin 2.1.0 入门教程(七)
android·kotlin
望风的懒蜗牛15 小时前
编译Android平台使用的FFmpeg库
android
浩宇软件开发15 小时前
Android开发,待办事项提醒App的设计与实现(个人中心页)
android·android studio·android开发
ac-er888816 小时前
Yii框架中的多语言支持:如何实现国际化
android·开发语言·php
苏金标17 小时前
The maximum compatible Gradle JVM version is 17.
android
zhangphil17 小时前
Android BitmapShader简洁实现马赛克,Kotlin(一)
android·kotlin