转自: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. scala的多种集合的使用(4)之列表List(ListBuffer)的操作

    1.List列表的创建和添加元素 1)最常见的创建list的方式之一. scala> val list = 1 :: 2 :: 3 :: Nil list: List[Int] = List(1 ...

  2. 【keras】用tensorboard监视CNN每一层的输出

    from keras.models import Sequential from keras.layers import Dense, Dropout from keras.layers import ...

  3. centos6.5之phpmyadmin安装

    PhpMyAdmin 首先我们看一下百度百科,看一下phpmyadmin是做什么的. phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让 ...

  4. Windows 10 & React Native & Android

    Windows 10 & React Native & Android https://facebook.github.io/react-native/docs/getting-sta ...

  5. codeforces581D

    Three Logos CodeForces - 581D Three companies decided to order a billboard with pictures of their lo ...

  6. 正则 re模块

    Python 正则表达式 re 模块 简介 正则表达式(regular expression)是可以匹配文本片段的模式.最简单的正则表达式就是普通字符串,可以匹配其自身.比如,正则表达式 ‘hello ...

  7. hdu-4635(tarjan缩点)

    题意:先给你一个n个点,m条边的有向图,问你最多能够增加多少条边,使得这个图不是一个强连通图 解题思路:考虑最多要添加的边数,所以如果能把初始图划分成两个部分,每个部分都是完全图,这两个部分分别用单向 ...

  8. hdu-4612(无向图缩点+树的直径)

    题意:给你n个点和m条边的无向图,问你如果多加一条边的话,那么这个图最少的桥是什么 解题思路:无向图缩点和树的直径,用并查集缩点: #include<iostream> #include& ...

  9. Spring MVC 使用介绍(十六)数据验证 (三)分组、自定义、跨参数、其他

    一.概述 除了依赖注入.方法参数,Bean Validation 1.1定义的功能还包括: 1.分组验证 2.自定义验证规则 3.类级别验证 4.跨参数验证 5.组合多个验证注解 6.其他 二.分组验 ...

  10. mpvue——仿QQ【一】

    前言 原生仿QQ https://github.com/wangyang0210/Imitate-QQ-For-Mini-Program 这个是当时学习小程序时,模仿的一个demo,只不过是纯页面没啥 ...