海思Android解决方案在原生Android基础上,基于传统电视用户使用习惯,增加了对红外遥控器和按键板的支持,使传统电视用户能更好适应智能电视方案。
在系统启动时,会先启动android_ir_user;vinput设备节点将按键事件转换为Android的标准输入发送到input。
按键适配源码路径如下:
需要先打开打印,从而获取去红外码,再依次进行 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;
}
串口输入以下命令:
android_ir_user -d //模拟自动红外测试
通过该命令,可以查看平台是否正常接收红外信号,按遥控器按键可以从串口看到第一步添加的打印。
IR_GetValueWithProtocol linuxKeycode = 0xa45bff00---------- key=139
源码文件: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> 在串口输入以下命令,查看输入设备在运行环境下加载的配置文件。
dumpsys input
通过该命令可以查看输入设备加载的配置文件是否正确,海思平台遥控器配置文件加
载情况如下,如果加载不正确,系统会加载默认的配置文件Generic.kl:
2> 在串口输入以下命令,查看Android输入事件。
getevent