输入事件主要业务逻辑在native层,这一层主要是NativeInputManager进行管理,这也是入口。
NativeInputManager
- mInputManager:sp<InputManager>
主要管理的是InputManager对象,它的职能是创建一些核心对象。
InputDispatcher
InputDispatcherThread
InputReader
InputReaderThread
其中InputDispatcherThread与InputReaderThread只是两个循环,主要的逻辑靠InputDispatcher与InputReader实现。
其中InputReader主要是进行读取事件
mEventHub:EventHub
mDevices:InputDecvice
在InputReader中EventHub用于管理设备,mDevices对应的是EventHub的设备,这样做的目的是分层,在InputReader这一层主要是进行对设备添加删除和上报过来的事件对应进行处理,所以核心并不是关心这个设备和驱动进行打交道的过程,比如对应那些kcl等。
EventHub主要和Devices打交道,它里面保存着真正的Devices节点。
Devices
fd
KeyMap
其中fd主要是读取设备节点的文件句柄,KeyMap对应的是kcl与kcm的映射关系,这些主要是对底层上报上来的事件进行映射转化成Android的code。
对于kcl与kml对应的是两张表,Android从驱动传递的code值是需要转化成Android系统识别的,为什么要这样做呢?假如我们需要更新设备,我们按键部署不一致,我们只需要更新这个表即可,这样就做到了解耦目的。
网友评论