Android系统--输入系统(六)模拟输入驱动程序 1. 回顾输入子系统 简单字符设备驱动:应用程序通过调用驱动所实现的函数使能硬件. 输入子系统:由于有多个应用程序使用输入子系统,故肯定使用的是早已规定好驱动接口,我们所需要实现的这是实现硬件相关的操作. 2. 输入子系统特性 有多套open/read/write接口 当应用程序调用这些接口,驱动程序将提供多套实现方法 evdev.c(evdev_open/evdev_read/evdev_write),通过这些接口提供原始数据 keyboa…
Android系统--输入系统(十六)APP跟输入系统建立联系_InputChannel和Connection 0. 核心:socketpair机制 1. 回顾Dispatch处理过程: 1.1 放入队列前稍加处理 分类:Global Key/System Key/User Key 处理紧急事件(比如来电的时候按下音量键静音) 1.2 InputReader线程将读到的输入事件稍加处理后放入mInboundQueue队列中,接着唤醒Dispatch线程 1.3 Dispatch从mInbound…
Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); 简单处理 processEventsLocked(mEventBuffer, count); 将事件分发给Dispatch线程处理 mQueuedListener->flush(); 2. Reader…
Android系统--输入系统(九)Reader线程_核心类及配置文件 1. Reader线程核心类--EventHub 1.1 Reader线程核心结构体 实例化对象:mEventHub--表示多个输入设备,里面有数组mPendingEventItems存储多个设备 struct epoll_event mPendingEventItems[EPOLL_MAX_EVENTS]; mDevice--vector,用来表示记录多个输入设备 KeyedVector<int32_t, Device*>…
Android系统--输入系统(十一)Reader线程_简单处理 1. 引入 Reader线程主要负责三件事情 获得输入事件 简单处理 上传给Dispatch线程 InputReader.cpp void InputReader::loopOnce() { ...... size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE); //获得事件 { // acquire lock Auto…
Android系统--输入系统(十三)Dispatcher线程情景分析_Reader线程传递事件 1. 输入按键 我们知道Android系统的按键分为三类:(1)Global Key;(2)System Key;(3)User Key Global Key:按下一个按键,启动某个APP. 具体使用哪个按键启动哪个APP可以自己指定,修改\frameworks\base\core\res\res\xml\Global_keys.xml,接下来有一篇博文具实现,假设它是AKEYCODE_TV Sys…
Android系统--输入系统(十四)Dispatcher线程情景分析_dispatch前处理 1. 回顾 我们知道Android输入系统是Reader线程通过驱动程序得到上报的输入事件,还要经过处理,才可以将输入事件发送给应用程序,现在回顾一下是具体做哪些处理. 首先Reader线程会将输入事件放入mInboundQueue队列当中,但是放入队列之前需要进行稍加处理. 1.1 处理类型 - 紧急事件,马上处理(来电振铃时,按下音量键,会马上静音) - 对输入事件添加Flag,决定输入事件是否传…
Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 <key keyCode="KEYCODE_TV" component="com.thisway.app_0001_leddemo/.MyBroadcastReceiver" /> 1.2 APP应该注册广播消息的接收者 1.2.1 编写BroadcastRe…
Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘/鼠标). 2. 引入输入系统: (1)触摸屏控制APP (2)外接设备控制系统功能 3. 输入系统三部分 读取事件 分发事件 处理事件 4. 读取事件分析 4.1 读取支持功能 支持多设备 GPIO键盘 遥控器 外接USB键盘鼠标 触摸屏 即插即用:可以随时接入或者拨出 支持多语言(映射):同一个…
Android系统--输入系统(七)Reader_Dispatcher线程启动分析 1. Reader/Dispatcher的引入 对于输入系统来说,将会创建两个线程: Reader线程(读取事件) Dispatcher线程(分发事件) 2. Reader/Dispatcher的创建 我们知道在Android系统中,都普遍按照面向对象的思想来编写程序,对于问题,Android一般都是创建一个类去解决,在输入系统中,有两个线程,对于这两个线程,Android系统为这两个线程创建两个类,分别为Inp…