zoukankan      html  css  js  c++  java
  • Input子系统与多点触摸技术-3【转】

    转自: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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    设置debian的静态IP
    《深入理解Java虚拟机》学习笔记之最后总结
    《深入理解Java虚拟机》学习笔记之字节码执行引擎
    《深入理解Java虚拟机》学习笔记之类加载
    《深入理解Java虚拟机》学习笔记之工具
    《深入理解Java虚拟机》学习笔记之内存回收
    Proxy源码解析
    Mysql索引
    搞定Hotspot-api
    JNI链接
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/10783760.html
Copyright © 2011-2022 走看看