输入系统_Reader线程_核心类及配置文件分析

status_t EventHub::openDeviceLocked(const char *devicePath)

这个函数打开设备,

// Get device name.
if(ioctl(fd, EVIOCGNAME(sizeof(buffer) - 1), &buffer) < 1)
调用ioctl从驱动程序中获取设备名字和一些信息

identifier.bus = inputId.bustype;
identifier.product = inputId.product;
identifier.vendor = inputId.vendor;
identifier.version = inputId.version;
new一个Device结构体出来

Device* device = new Device(fd, deviceId, String8(devicePath), identifier);

然后读取加载一个默认配置文件(IDC配置文件)不太重要

loadConfigurationLocked(device);
输入系统_Reader线程_核心类及配置文件分析

KeyedVector<int32_t, Device*> mDevices;
在EventHub类中有这个对象int表示设备编号,Device结构体是设备。向量

configuraFile是IDC文件的文件名    configation是IDC属性(格式如 property = vaule)(device.intern = 1)

表示这个设备是内嵌在里面还是外接在设备外

输入系统_Reader线程_核心类及配置文件分析

加载完IDC后加载KL、KCL文件

keyMapStatus = loadKeyMapLocked(device);
keyMap对象就是管理这两个文件的

输入系统_Reader线程_核心类及配置文件分析

输入系统_Reader线程_核心类及配置文件分析


int32☞Linux内核的扫描码,Key指的是AKeycode_xx的码

当加载那个kl文件就会构造这么一项,key_1  (ESCAPE 0(flag))


输入系统_Reader线程_核心类及配置文件分析

对kcm文件类似

输入系统_Reader线程_核心类及配置文件分析

关心他的mKeys对象一个int (也就是AKeycode_xx)对应一个Key对象,这个对象将这个键对应的所有行为连起来。

输入系统_Reader线程_核心类及配置文件分析

输入系统_Reader线程_核心类及配置文件分析


输入系统_Reader线程_核心类及配置文件分析

输入系统_Reader线程_核心类及配置文件分析


这个表示如果我安卓系统上报alt 和 空格键同时按下,应用程序如果可以处理就处理,处理不了输入系统就会返回新的值这个值就来自fallback_SEARCH(被存在fallbackkeycode对象里作为AKeycode_SEARCH)。