转自: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. MySQL存储过程--(1)

    /*参数模式:IN:该参数作为输入,该参数调用传入值out:该参数作为输出,该参数作为返回值INOUT:该参数即可作为输入,也可作为输出,该参数即可调用传入值,也可作为返回值delimiter:设置结 ...

  2. (一)jdk8学习心得之遍历

    一.遍历 -- 最好和stream流连用 使用jdk8提供的forEach进行遍历时,采用的是多线程的操作,理论上讲是会比原来的方法更快.但是注意,系统启动时需要加载lambda框架的内容.因此如果通 ...

  3. java基础问题巩固(1)

    你对java垃圾回收了解吗?什么时候需要使用? 答: 垃圾回收器的作用是查找和回收(清理)无用的对象,从而让jvm更 有效的使用内存.但是运行因为垃圾回收本身会有开销,过于频繁的使用会导致性能下降.比 ...

  4. LeetCode136.只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...

  5. C/C++音视频库ffmpeg的数据包AVPacket分析

    ffmpeg下载地址 http://www.ffmpeg.club/ AVPacket是ffmpeg用来存放编码后的视频帧数据,我们来分析一下这个结构体,先贴出ffmpeg3.2中AVPacket声明 ...

  6. 修改注册表信息来兼容当前WebBrower程序

    public class WebBrower { /// <summary> /// 修改注册表信息来兼容当前程序 /// /// </summary> public stat ...

  7. Leetcode 4.28 Tree Easy

    1. 101. Symmetric Tree 用递归. class Solution { public boolean isSymmetric(TreeNode root) { if( root == ...

  8. 【简】题解 AWSL090429 【数塔问题】

    因为每次只ban一个点 而且不是永久性的 预处理出每个点从上往下和从下往上的最大值 每次询问直接暴力 被ban掉点那行去掉那点的最大值 也可以直接预处理出每行的最大值和次大值 还有种做法貌似可以过 预 ...

  9. 【Linux】Jenkins安装

    安装环境准备 操作系统:Linux(CentOS7) 软件:jdk,安装及配置步骤见Linux安装jdk 软件:tomcat,安装及配置见Linux安装tomcat Jenkins安装 由于Jenki ...

  10. PHP RSA加解密详解(附代码)

    前言:RSA加密一般用在涉及到重要数据时所使用的加密算法,比如用户的账户密码传输,订单的相关数据传输等. 加密方式说明:公钥加密,私钥解密.也可以  私钥加密,公钥解密 一.RSA简介 RSA公钥加密 ...