Android系统--输入系统(三)必备Linux知识_双向通信(scoketpair) 引入 1. 进程和APP通信 创建进程 读取.分发 - 进程发送输入事件给APP 进程读取APP回应的事件 输入系统涉及双向的进程间通信 2. 回顾Binder系统 Server-- 单向发出请求 Client -- 单向回复请求 每次请求只可以单方发出 3. 引入Socketpair 原因:如果创建两组进程(Client,Server)进行双向通信,实现十分复杂 引入Socketpair: Socketp…
Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c 课后作业 1. 编写 inotify_epoll.c, 用它来监测tmp/目录: 有文件被创建/删除, 有文件可读出数据 a. 当在tmp/下创建文件时, 会立刻监测到,并且使用epoll监测该文件 b. 当文件有数据时,读出数据 c. 当tmp/下文件被删除时,会立刻监测到,并且把它从epoll中移除不再监测 2. 程序基本框架 (1)初始化--初始化epoll和inotify,获取其fd (2)添加事…
2. 双向通信(socketpair) 输入系统肯定涉及进程通讯:进程A读取/分发输入事件,APP处理输入事件,进程A给APP发送输入事件,APP处理完事件回复信息给进程A,APP关闭的时候也要发信息给进程A binder用在进程间双向通信的时候的确定:每次请求只能由client单方发起 因此如果使用binder来实现双向通信,client也要提供server功能,server也要提供client功能 这里引入socketpair,其实现原理如下: APP调用socketpair对得到两个文件句…
Android系统--输入系统(一)必备的Linux知识_inotify和epoll 引入 1. 笔记本电脑插入外接键盘,两个键盘都可以使用 a. 键盘即插即用--如何检测键盘的接入和拔出 hotplug机制:内核发现键盘接入或拨出之后启动hotplug进程,进程发出信号告诉输入系统,输入系统处理 inotify机制:输入系统使用inotify检测/dev/input的节点变化 b. 可用使用多键盘--如何知道哪个键盘被按下 epoll机制:可以检测多个事件 c. 如何使用inotify和epo…
Android系统--输入系统(五)输入系统框架 1. Android设备使用场景: 假设一个Android平板,APP功能.系统功能(开机关机.调节音量).外接设备功能(键盘.触摸屏.USB外接键盘/鼠标). 2. 引入输入系统: (1)触摸屏控制APP (2)外接设备控制系统功能 3. 输入系统三部分 读取事件 分发事件 处理事件 4. 读取事件分析 4.1 读取支持功能 支持多设备 GPIO键盘 遥控器 外接USB键盘鼠标 触摸屏 即插即用:可以随时接入或者拨出 支持多语言(映射):同一个…
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线程_核心类及配置文件深入分析 0. 前言 个人认为该知识点阅读Android源代码会不仅容易走进死胡同,并且效果并不好,前脚看完后脚忘记,故进行总结,希望可以更好帮助大家了解,了解之后在进行阅读源代码会有事半功倍的效果. 1. 引入 由输入系统(九)实验得出 keylayout文件:只是用来表示驱动上报的scancode对应哪一个android按键(AKEYCODE_x)只是表示按键被按下. kcm文件: 用来表示android按键(AKEYCO…
Android系统--输入系统(六)模拟输入驱动程序 1. 回顾输入子系统 简单字符设备驱动:应用程序通过调用驱动所实现的函数使能硬件. 输入子系统:由于有多个应用程序使用输入子系统,故肯定使用的是早已规定好驱动接口,我们所需要实现的这是实现硬件相关的操作. 2. 输入子系统特性 有多套open/read/write接口 当应用程序调用这些接口,驱动程序将提供多套实现方法 evdev.c(evdev_open/evdev_read/evdev_write),通过这些接口提供原始数据 keyboa…
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…