发表于我的博客网站(prajna.top): http://prajna.top/doc/4/124 欢迎大家前去交流。
Android TV开发过程中,主要的输入设备是摇控器(IR),键盘(keypad),以及一些USB的HID输入设备,本文主要讲讲这块的工作流程,使用的是AN5版本。
流程
首先,Linux kernel 驱动层得到硬件设备按键的原始扫描码,触摸,移动等各种事件信息,按键码会被转化为Linux 标准的KEY (uapi/linux/input.h)。最终,kernel会把设备的事件转换成一个标准的Linux Input Event (linux/input.h
) ,抛给上面的系统。
接下来, Andorid Framework 层的 EventHub (native/services/inputflinger) 通过读取 /dev/input/ 目录下的设备文件,得到kernel层抛出来的 Linux Input Event,把它转化成 Android Input Event。这个转换过程,系统需要查找一些配置文件,大概有这么几类:
-
.kl 文件: Key Layout ,TV方案最常见就是这类文件,主要是KEY的映射。
-
.kcm文件: Key Character ,用于 Virtual Keyboard,把几个Android的组合键,变成一个输出键,比如,输入 shift + a,则输出大写的 A
-
.
idc
:
Input Device Configuration
,基本上不需要,标准的输入设备,像HID键盘,鼠标等,系统会自动识别。
搜索路径一般是 /data/usr 和 /system/usr,其中 /data 和 /system 是读取的系统属性,
/sytem = getenv("ANDROID_ROOT")
/data = getenv("ANDROID_DATA")