转自: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. 我的工具:Ping工具

    C# Ping工具 通过该工具可以多个地点Ping服务器以检测服务器响应速度,同时也可以测试网站的响应速度,解析时间,服务器连接时间,下载速度 工具下载地址:https://download.csdn ...

  2. nodejs部署方式-pm2

    目前Nodejs开发中有很多痛点,其中有一个是修改完代码以后需要我们重启服务才能看到效果.这样一次次的杀进程.重启,杀进程.重启很让人头大.程序员是最痛恨重复工作的物种,之前有了解过的同学可能知道 f ...

  3. Docker 核心技术之容器与镜像

    Docker容器与镜像的关系 容器提交 – docker commit docker commit -h 作用: 根据容器生成一个新的镜像 命令格式: docker commit [OPTIONS] ...

  4. jQuery的deferred对象实战应用(附:Exchar动态多条数据展示并在topic展示详细数据)

    解决三个后台请求都成功后先比较数据再处理数据的需求 今天碰到了一个问题,我需要创建一个图表,但是需要请求三个接口才能比较出指标数据,于是就看到了deferred对象 理论的补充在这里:http://w ...

  5. this.setData , that.setData , this.data.val三者之间的区别和作用

    1.this.setData({ }) <view bindtouchmove="tap_drag" bindtouchend="tap_end" bin ...

  6. bugku web 变量1

    flag In the variable ! <?php error_reporting(0);include "flag1.php";highlight_file(__fi ...

  7. nsx-edge虚拟机抓包实践

    Edge抓包 今天在客户端进行故障排除时,我需要在环境中的一个边缘服务网关上执行包捕获.在诊断一系列不同的问题时,执行包捕获通常非常有用. 要启动包捕获,您可以跳到ESG的控制台,或者像我在本例中所做 ...

  8. 【CH2401】送礼物

    题目大意:NPC 子集和问题. 题解:先搜索一半的物品重量和,记录在一个数组中,并将该数组排序并去重.再搜索另一半物品,到达目标状态后,在前一半物品记录的重量中查找小于当前剩余重量的最大值,更新答案即 ...

  9. [SDOI2013]森林 主席树+启发式合并

    这题的想法真的很妙啊. 看到题的第一眼,我先想到树链剖分,并把\(DFS\)序当成一段区间上主席树.但是会发现在询问的时候,可能会非常复杂,因为你需要把路径拆成很多条轻链和重链,它们还不一定连续,很难 ...

  10. PMP是什么,PMP最难的是哪些内容?

    目前在国内很多人还不了解PMP是什么,甚至不知道PMP认证的内容是哪些,考来有什么用,今天我这边就普及一下. PMP认证是美国项目管理协会发起的一项针对项目管理专业人士资格认证.取得认证需要学习项目管 ...