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

相关推荐
赏金术士27 分钟前
第六章:UI组件与Material3主题
android·ui·kotlin·compose
TechMerger2 小时前
Android 17 重磅重构!服役 20 年的 MessageQueue 迎来无锁改造,卡顿大幅优化!
android·性能优化
yuhuofei20214 小时前
【Python入门】Python中字符串相关拓展
android·java·python
dalancon4 小时前
Android Input Spy Window
android
dalancon6 小时前
InputDispatcher派发事件,查找目标窗口
android
我命由我123456 小时前
Android Framework P3 - MediaServer 进程、认识 ServiceManager 进程
android·c语言·开发语言·c++·visualstudio·visual studio·android runtime
天才少年曾牛7 小时前
Android14 新增系统服务后,应用调用出现 “hidden api” 警告的原因与解决方案
android·frameworks
赏金术士7 小时前
Jetpack Compose 底部导航实战教程(完整版)
android·kotlin·compose
随遇丿而安8 小时前
第5周:XML 资源、样式和主题,真正解决的是“页面以后还改不改得动”
android
zh_xuan8 小时前
Android 获取系统内存页大小:sysconf(_SC_PAGESIZE) 与 JNI 实现
android·jni·ndk·内存页大小