转自:https://blog.csdn.net/u012839187/article/details/77335941

版权声明:本文为博主原创文章,欢迎转载,转载请注明转载地址 https://blog.csdn.net/u012839187/article/details/77335941

input子系统最终做了几件事情[内核input子系统]                        
Evdev.c文件
event代表数据包数据
上报事件最终调用函数input_event();最终通过handler->event()调用
在input_handler结构体中.event=evdev_event:最后通过处理函数__pass_event做1,2两件事
1:事件最终被放入到了客户端的input_event[]数组中;[/*将event装入client的buffer中,buffer是一个环形缓存区*/ client->buffer[client->head++] = *event;]
这里的操作很简单.就是将event(上传数据)保存到client->buffer中.而client->head就是当前的数据位置.注意这里是一个环形缓存区.写数据是从client->head写.而读数据则是从client->tail中读.
2:并且通过异步通知机制kill_fasync向应用层发送消息,应用层会执行对应的消息处理函数[kill_fasync(&client->fasync, SIGIO, POLL_IN);]
  fasync这个东西就是为了使驱动的读写和application的读写分开,使得application可以在驱动读写时去做别的事[并且用来唤醒用户进程空间那个睡着的读进程(他是因为读的时候没有数据而睡着的。阻塞)]
&client->fasync可用来区分向谁发;哪个进程调用这个fasync_helper就向谁发[谁调用flie_operations里面的fasync];fasync机制本身来说还是ipc中的信号机制
3:应用层调用open/read等函数,input子系统的file_operations会被调用;操作写在Evdev.c文件里面 
节点操作:open,read函数等等。节点是:/dev/input/eventX

[应用层同样会调用poll机制。poll机制和fasync作用类似,通知的主从双方正好相反。poll机制是应用发出,向内核确认节点是否能够读写;fasync是内核发出,向应用告知节点数据已经就绪]

内核层Event流向

input子系统是驱动上报数据,暂存在内存中,应用程序需要时去读这片内存就可以取到数据,至于为什么采用这个模式,因为知道应用程序需要数据的时机和硬件采集到的数据是很难同步的,采用异步的方式更为合适。

用户层Event流向
一个事件的流程是从 Eventhub  ---> InputReader  ---> InputDispatcher  ---> InputPublisher  ---> InputChannel  ---> InputConsumer  --->  WindowManager or Application.这就是整个事件分发的大致流程

如果是第一次调用getEvents方法,则会调用scanDevicesLocked方法来扫描设备:
EventHub::getEvents--->EventHub::scanDevicesLocked--->EventHub::scanDirLocked---->EventHub::openDeviceLocked -> EventHub:: addDeviceLocked

参考资料

http://blog.csdn.net/wangkaiblog/article/details/12085183android input

http://blog.csdn.net/droidphone/article/details/8434768多点触控的input TP

http://blog.csdn.net/yaozhenguo2006/article/details/6775751input_event 函数

http://blog.csdn.net/loongembedded/article/details/51166888

http://blog.csdn.net/loongembedded/article/details/51167111  input事件类型

http://blog.csdn.net/tianruxishui/article/details/7173045写得不错,

https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt源码的文档

http://www.arm9home.net/read.php?tid=24754对源码文档的翻译

http://blog.chinaunix.net/uid-20776117-id-3212095.html内部函数剖析

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29151914&id=3921536

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29151914&id=3887032

ps:其实源码的说明文档介绍的很清楚,但是不细节,所以需要在了解一定的基础上去看看说明文档

http://wenku.baidu.com/link?url=FYMYA6KI4vCRGpDohcMIO6C5XgaxQ7uXwXlqah7JdQUJV3RdLJR2ZeAodChULrlHQnfUJNkavBoQ7LBp_e9wZIdcS_yeI4OLfHLojuwuInO讲述的比较详细。上层到下层

http://wenku.baidu.com/view/ef3ccbe4ed630b1c58eeb5a4.html?re=view图解详细且清晰

http://blog.csdn.net/zjngogo/article/details/46363571和上面的一起看,Android层

http://blog.chinaunix.net/uid-20672257-id-3149668.html内核层的讲解,比较到位

http://blog.csdn.net/coldsnow33/article/details/15809965上层好文

http://www.cnblogs.com/lcw/p/3294356.html全解析

http://www.cnblogs.com/jason-lu/articles/3156411.html

http://blog.csdn.net/tankai19880619/article/details/17019085

http://blog.csdn.net/kc58236582/article/details/50610311
---------------------
作者:maze_linux
来源:CSDN
原文:https://blog.csdn.net/u012839187/article/details/77335941
版权声明:本文为博主原创文章,转载请附上博文链接!

Input子系统与多点触摸技术-3【转】的更多相关文章

  1. Linux Android 多点触摸协议 原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/71/12306571.shtml

    为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据.这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息. 使用说明 单点触摸信息是以ABS承载 ...

  2. Linux与Android 多点触摸协议【转】

    本文转载自:http://blog.csdn.net/xubin341719/article/details/7833277 一.Linux与Android 多点触摸协议 为了使用功能强大的多点触控设 ...

  3. input子系统 KeyPad-Touch上报数据格式与机制

    -----------------------------------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://b ...

  4. Android驱动之 Linux Input子系统之TP——A/B(Slot)协议

    将A/B协议这部分单独拿出来说一方面是因为这部分内容是比较容易忽视的,周围大多数用到input子系统的开发人员也不甚理解:另一方面是由于这部分知识一旦扩展到TP(触摸屏Touch Panel)的多点触 ...

  5. Linux input子系统分析

    输入输出是用户和产品交互的手段,因此输入驱动开发在Linux驱动开发中很常见.同时,input子系统的分层架构思想在Linux驱动设计中极具代表性和先进性,因此对Linux input子系统进行深入分 ...

  6. Input子系统(二)【转】

    转自:http://blog.chinaunix.net/uid-25047042-id-4192368.html 上一篇中粗略的分析了下input_dev,input_handle,input_ha ...

  7. input子系统 KeyPad-Touch上报数据格式与机制【转】

    转自:https://www.cnblogs.com/0822vaj/p/4185634.html -------------------------------------------------- ...

  8. Linux 内核驱动--多点触摸接口【转】

    转自:http://blog.csdn.net/joard_yang/article/details/6225937 译自:linux-2.6.31.14/Documentation/input/mu ...

  9. CTP多点触摸协议【转】

    转自:http://blog.chinaunix.net/uid-26403844-id-5063920.html linux kernel 2.6.30开始对多点触摸支持,最近高通要求所有CTP器件 ...

随机推荐

  1. 禁止Cnario Player启动后自动开始播放

    Cnario Player安装激活后, 默认开机后自动启动, 启动加载内容完成后进入10秒倒计时, 10秒后即开始播放关机前播放的内容. 如果不想让其自动开始播放, 可按照如下办法设置其不自动播放. ...

  2. promise源码解析

    前言 大部分同学对promise,可能还停留在会使用es6的promise,还没有深入学习.我们都知道promise内部通过reslove.reject来判断执行哪个函数,原型上面的then同样的,也 ...

  3. Java数据库学习之分页查询

    分页查询  limit [start],[rows] 思路: pram start 从哪一行开始 关键是从哪一行开始,需要根据查询的页数来进行换算出查询具体页数是从哪一行开始 start = (pag ...

  4. Pod install Error List

    1. Error installing Crashlytics while executing pod install [!] Error installing Crashlytics [!] /us ...

  5. MyBatis 3源码解析(二)

    二.获取SqlSession对象 1.首先调用DefaultSqlSessionFactory 的 openSession 方法,代码如下: @Override public SqlSession o ...

  6. 【MySQL 读书笔记】SQL 刷脏页可能造成数据库抖动

    开始今天读书笔记之前我觉得需要回顾一下当我们在更新一条数据的时候做了什么. 因为 WAL 技术的存在,所以当我们执行一条更新语句的时候是先写日志,后写磁盘的.当我们在内存中写入了 redolog 之后 ...

  7. js 实现数据结构 -- 集合

    原文: 在Javascript 中学习数据结构与算法. 概念: 即数学中的集合,在计算机科学中被应用成数据结构. 当然,集合中的数据具有不重复的特性.js 集合的原理大致上是 Object 的键值对 ...

  8. Vs2015 当前不会命中断点,没有与此关联的可执行代码

    在学习Civil 3D本地化包程序的过程中, 使用.Net Reflector调试本地化包的主程序CountryKits.dll, .Net Reflector创建了相应的pdb文件等, 在我反编译并 ...

  9. Forethought Future Cup - Elimination Round

    A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long char getc(){char c=get ...

  10. ZYNQ原理图中添加RTL设计模块

    前言 已有的RTL模块怎么添加到原理图中? 流程 (1)添加文件到设计中. (2)右键文件添加到block design中. (3)连线即可. 以上.