1.2 转换流程详细说明:
1.2.1/device/hisilicon/bigfish/system/ir_user/key_pars/key.xml:
该文件编译后输出到 /etc 目录下。
定义原始硬件码值和对应 linux 层通用键名:
< key value="0x639c4db2" name="KEY_MUTE"/>
1.2.2/device/hisilicon/bigfish/system/ir_user/key_pars/linux_key.h:
定义 linux 层通用键名和 linux 层键值的对应关系:
{"KEY_MUTE", 113 },
结构 linux_keycode_ary 类型的数组 Linux_KeyCode_Ary[512].
1.2.3/device/hisilicon/bigfish/system/ir_user/key_pars/ key_pars.c:
提供接口 get_keycode 解析 xml 建立原始码值和 linux 层键值的映射数组
get_keycode(_key_arry *keyarry, int keyarry_num) 解析:
a:调用 readXml 读取 /etc/ key.xml ,返回 xml 根节点:
key.xml 中<hisi-key> 和<other-key> 分别各一个节点,我们的遥控器原始键值配
置在 <other-key> 中。
b: 调用 Pars_Key 解析每个节点下的所有按键:
解析节点下的所有 children 节点,通过 value 属性获取 xml 定义的原始键值,通
过 name 属性获取 xml 定义的键名字符串,再调用 find_linux_key_code 查询这个字符串
对应的 linux 层键值。
把这个映射关系存储到:
keyarry->hi_keycode[keynum].ir_keycode = ir_keycode;
keyarry->hi_keycode[keynum].linux_keycode = linux_keycode;
c: find_linux_key_code 函数遍历在 linux_key.h 定义的 Linux_KeyCode_Ary 数组 ,找
到参数 str (即键名字符串)对应的 linux 层键值。
1.2.4/device/hisilicon/bigfish/system/ir_user/ir_user.cpp:
1)编译为后台进程 android_ir_user 独立运行;
2)进程启动, 执行 main 入口函数, 调用 get_keycode 完成 key.xml 存储原始码值和 linux
层键值的映射关系到数组 keyarry ;
3)建立 ir_sample_thread 线程读取原始码值,根据 keyarry 转换为 linux 层键值,通过
ReportKeyEvent 写入 dev/vinput 设备 ,其他进程可以读取键值
1.3 总结
出差拷机, 如果不想其他厂家操作我们的盒子, 只需要离开的时候删除 /system/bin 下
面的 android_ir_user 这个 bin 文件即可。
评论0
最新资源