【摘要】:应用层对输入设备的基本使用主要是集中在读取相应的事件方面,具体事件传给哪个应用则是属于应用框架的范畴,与具体的UI控制紧密关联。对于Android框架来说,输入设备的相关操作是在EventHub中实现的,首先需要检查所有的输入文件,其是通过inotify来实现的。
应用层对输入设备的基本使用主要是集中在读取相应的事件方面,具体事件传给哪个应用则是属于应用框架的范畴,与具体的UI控制紧密关联。
先来看看简单的测试程序,对设备的输入进行检查并在控制台上进行显示。
从简单的测试代码可见,输入设备的操作逻辑基本上是打开设备,检查设备能力,应用需要根据能力进行相关的配置。最后就是读取输入事件转发给系统的框架。
接下来看看Android是如何进行相关适配的。对于Android框架来说,输入设备的相关操作是在EventHub中实现的,首先需要检查所有的输入文件,其是通过inotify来实现的。
在EventHub的构造函数中会对整个/dev/input进行监视。(www.chuimin.cn)
从中可见,对设备创建和删除都进行监控,这样系统会对输入设备有全局的把控,每当有相应的事件发生时都会调用EventHub::readNotifyLocked,其中会有如下代码
一旦发现是create文件的时候会进行打开设备的操作,其中open Device Locked会根据类似之前测试代码的ioctl方式获得输入设备的信息,并进行相关的属性配置,然后通过如下代码以poll的方式来监测设备的输入:
设备的输入则是在EventHub::getEvents中等待事件的上报,代码如下
事件上报后,getEvents会读取并检查确认具体的有效事件数目后返回,后续操作就是上报给应用框架层进行处理。这样就实现了输入设备的整体适配。
相关推荐