海思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;
}
2> 查看红外遥控器发射的按键值
串口输入以下命令:
android_ir_us