Linux/Android——input_handler之evdev (四) 【转】
转自:http://blog.csdn.net/u013491946/article/details/72638919
版权声明:免责声明: 本人在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系 .挖井挑水无水表,不会网购无快递
在前文Linux/Android——input子系统核心 (三) 中概括了总体的结构,以及介绍了input核心的职责,其中有说道注册input设备时会去匹配已有的事件处理器handler,
而这个handler也是存放在一个链表里面的,这里介绍下input子系统中的事件处理input_handler机制.
撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/42238377#t6
evdev:
/kernel/drivers/input下众多事件处理器handler其中的一个,可以看下源码/kernel/drivers/input/evdev.c中的模块init:
这个初始化就是往input核心中注册一个input_handler类型的evdev_handler,调用的是input.c提供的接口,input_handler结构前文有介绍,看下evdev_handler的赋值:
赋值各个函数指针!
input_register_handler:
可以看到上面的evdev handler 就是调用这个接口注册到input核心中的,同样evdev.c同目录下也还有其它的handler,有兴趣可以看看它们的init函数,都是会调用到这个接口去注册的.
input核心中保存的handler数组:
这是保存注册到input核心中的handler数组,因为在之前input注册的时候注册的字符设备主设备号为13.字符设备的次设备号为0~255,可以有256个设备,
这里后面会看到一个handler可以connect处理32个input设备,所以input体系中,最多拥有8个handler
这个匹配过程和上一篇中的过程是一样的,最后匹配上的话会调用匹配上的handler 中connect指针指向的函数.
另外可以注意的是evdev是匹配所有设备的,因为:
如果没有特定的handler添加进handler链表,那么在匹配的时候,只要有这个evdev的handler,最后都会匹配到evdev,这个具体可以去看看上篇的匹配过程.
我这边调试的是usb触摸屏,所以用的是evdev的handler,下面看下evdev的connect.
evdev_connect:
注册的evdev_handler中connect指向的函数为evdev_connect:
evdev:
这里的evdev变量的结构如下:
关于这个结构变量我的理解是抽象出来一个设备,代表一个input_dev与其匹配好的handler的组合(handle),可以看作提供给事件处理层的一个封装.
input_handle:
这个代表一个匹配成功的input dev和 handler组合,定义在input.h中,每个evdev中包含一个input_handle,并且注册到input核心中:
input_register_handle:
看看这个handle的注册,不要和handler搞混淆了,这不是一个概念~
这个注册是把handle 本身的链表加入到它自己的input_dev 以及 input_handler的h_list链表中,这样以后就可以通过h_list遍历到这个handle,
这样就实现了三者的绑定联系.
另外在evdev中还有个结构:
这个结构会在evdev被打开的时候 创建,这里关于evdev的初始以及在input系统中承接作用暂时介绍到这里,
前文 Linux/Android——输入子系统input_event传递 (二) 中有记录从设备驱动传递上来的event是怎么到input核心,然后接着往上传递的,接下来就是用到evdev传递了.下篇介绍.
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
面向大众的移动技术:签名,封装和发布Android app
面向大从的移动打桩其它四篇文章地址(校对添加): (一)、android简介; (二)、轻轻一划,在android中为手势编码; (三)、Android 应用程序生命周期中的活动与图标; (四)、Overheard Word 的单词和手势。 添加一个多选择quiz到你的Android手机app,然后用一个安全数字证书签名 用网络逻辑,内容为王。但是对与手机用户来说,交互规则才是王道。对移动app静态信息设计在减少,并且游戏化正在增多。这个月AndrewGlover决定通过将一个多选择的quiz特性加入到一个示例app(OverheardWord,前一篇介绍的。)中来介绍Android移动开发。之后他将展示给你如何生成一个数字证书和如何发布和如何提升你的在GooglePlay或者AmazonAppstore上已经签名的app。 目前为止在这个Mobilforthemasses系列中,我们已经使用Android作为学习怎样做移动开发的一个实例,其中包括《Android应用程序生命周期》教程,在你的Androidapps中实现《手势滑动功能》。并且《与第三方库工作》来简化开发并且增强app功...
- 下一篇
在Ubuntu下爽快开发Android必要的5款装备
每一个程序员都有一颗极客的心,一些小装备肯定就比不可少啦。我刚刚从windows中转到Ubuntu,除了要适应ubuntu外,也想将windows中用惯了的小软件一起搬过去。在这里简单地罗列一下自己在ubuntu中的小软件。 1、浏览器:Chrome IT男应该都知道Chrome,没什么好介绍的。值得一说的是装上SwitchySharp配合goAgent就可以在长城内外自由穿梭了。不清楚怎么配置的同学,请跳到Ubuntu下配置Goagent。 2、鼠标手势:EasyStroke 这款软件对于比较极客的同学是必不可少的,小手轻轻在屏幕上一划,大大小小的窗口就神一般地切来切去。要是不偷懒地自己配置一些命令,仅用鼠标基本上就可以完成所有的快捷键的功能。 3、开发工具:Eclipse、ADT、SDK 这个也没有什么好介绍的,Android开发必备。安装配置的教程网上一抓一大把。 4、快速到极致的Android模拟器Genymotion 如果你像我一样懒到连真机调试的线都不愿意插,又不愿意忍受ADT中龟速的模拟器,那么Genymotion就绝对必备。 5、搜狗输入法 比Ubuntu下自带的ibu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音