1、多点触摸驱动理论

驱动程序仅上报多个触点的位置就可以,是放大还是缩小由应用程序控制

对于多点触摸驱动在linux系统中有个输入子系统,其已经实现了open/read/write等接口

我们只需要实现硬件相关的升级,有数据时上报硬件相关数据给输入子系统

input.c//输入子系统核心文件

  .open找到input_handler得到对应的fops,在调用真正的open

在android系统中用到evdev.c其来提供input_handler

设备相关:

(1)构造input_device

(2设置

(3)注册

(4)有数据时,通过input_event上报写入buffer中,并唤醒read,在evdev.c中的read会去读buffer中的数据

单点触摸:

上报什么数据?

按下:BTN_TOUCH,1

滑动:for(){ABS_X,x;ABS_Y,y;ABS_PRESSURE,1;BTN_TOUCH,1}

松开:BTN_TOUCH,0;ABS_PRESSURE,0

多点触摸:(参考文档multi-touch-protocol.txt多点触摸协议)

同一时刻,上报所有触点的位置

for(){t1时刻:上报p1、p2位置;t2时刻:上报p3、p4位置.......}

上报的数据分为AB两类:

A类简单,只上报触点位置,不关心触点关系

B类复杂,上报触点的位置和触点的关系,数据由多点触摸控制IC提供(比如通过计算得到两个点是一个滑动产生的(距离短))

触摸控制IC提供的数据包括:触点位置,触点关系

具有同一个ID值的触点是在同一个手指的线上滑动出现的,如果触摸IC触点数据没有ID值,android程序中会给触摸数据添加ID值

2、多点触摸驱动框架

参考:
drivers\input\touchscreen\ft5x06_ts.c

第一次:
git clone https://github.com/weidongshan/DRV_0005_MultiTouchPanel.git

git clone https://git.coding.net/weidongshan/DRV_0005_MultiTouchPanel.git

更新:
git pull origin

取出指定版本:
git checkout v1 // Demo driver for multi touch panel, it is only a Framework
git checkout v2 // There are some errors in v1

视频堪误:
a. 要设置input_dev的name, android根据这个name找到配置文件(比如:ft5x0x_ts.idc)
b. 完全松开触摸屏后要上报: input_mt_sync, input_sync
c. input_set_abs_params(ts_dev, ABS_MT_TRACKING_ID, 0, 最大ID值, 0, 0);
其中的最大ID值没有限制,是设备自身定义的值,最大值一般由触摸屏控制IC决定。
一般电容屏最多支持10点触摸,但是ID值跟"N点触摸"无关

控制IC通过中断管脚通知CPU有触摸屏数据了,然后CPU通过IIC或者SPI读取数据

i2c_driver {

.probe

.id_table

.detect

.address_list

}

注册i2c_driver 的时候,使用adapter遍历address_list,如果发现设备存在,调用detect函数做进一步判断(因此在不同的iic总线上,可能有相同地址的IIC设备),会在detect函数中设置info结构体的type值并且返回0,返回0之后,会创建一个新的I2C设备(i2c_new_device(adapter,&info)),这个设备会使用info->type与id_table里面的name相同的化就调用probe函数,我们在probe函数中读取控制IC发送的数据并上报

10.13 android输入系统_多点触摸驱动理论与框架的更多相关文章

  1. 10.14 android输入系统_多点触摸驱动测试及Reader线程、InputStage分析

    21. 多点触摸_电容屏驱动程序_实践_tiny4412 tiny4412触摸屏: 分辨率为800 x 480http://wiki.friendlyarm.com/wiki/index.php/LC ...

  2. 10.11 android输入系统_补充知识_activity_window_decor_view关系

    android里:1个application, 有1个或多个activity(比如支付宝有:首页.财富.口碑.朋友.我的,这些就是activity)1个activity, 有1个window(每个ac ...

  3. 10.4 android输入系统_框架、编写一个万能模拟输入驱动程序、reader/dispatcher线程启动过程源码分析

    1. 输入系统框架 android输入系统官方文档 // 需FQhttp://source.android.com/devices/input/index.html <深入理解Android 卷 ...

  4. 10.8 android输入系统_实战_使用GlobalKey一键启动程序

    11. 实战_使用GlobalKey一键启动程序参考文章:Android 两种注册(动态注册和静态注册).发送广播的区别http://www.jianshu.com/p/ea5e233d9f43 [A ...

  5. 10.9 android输入系统_APP跟输入系统建立联系和Dispatcher线程_分发dispatch

    12. 输入系统_APP跟输入系统建立联系_InputChannel和Connection核心: socketpair // 第9课第3节_输入系统_必备Linux编程知识_任意进程双向通信(scok ...

  6. 10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析

    4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init(& ...

  7. 10.1、android输入系统_必备Linux编程知识_inotify和epoll

    1. inotify和epoll 怎么监测键盘接入与拔出? (1)hotplug机制:内核发现键盘接入/拔出==>启动hotplug进程==>发消息给输入系统 (2)inotify机制:输 ...

  8. 10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理

    android输入系统C++最上层文件是com_android_serve_input_InputManagerService.cpp global key:按下按键,启动某个APP可以自己指定,修改 ...

  9. 10.6 android输入系统_Dispatcher线程_总体框架

    图解Android - Android GUI 系统 (5) - Android的Event Input System - 漫天尘沙 - 博客园.htm // 关注里面的Dispatcher处理流程h ...

随机推荐

  1. HDU1796 How many integers can you find【容斥定理】

    题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1796 题目大意: 给你一个整数N.和M个整数的集合{A1.A2.-.Am}.集合内元素为非负数(包 ...

  2. js --- 事件流

    1.事件流 事件发生时会在元素节点与根节点之间按照特定的顺序传播,路径所经过的所有节点都会收到该事件,这个传播过程即DOM事件流. 2.两种事件流模型 1.冒泡型事件流:事件的传播是从最特定的事件目标 ...

  3. | 插件下载陈磊SQL MD5 加密

    简介:SQL MD5 加密 下述是 SQL Server 中 MD5加密 16位和32位的 ,)) ,ModifiedOn=null ; ,)) ,ModifiedOn=null ;

  4. 项目: python爬虫 福利 煎蛋网妹子图

    嘿嘿嘿! 嘿嘿嘿! 福利一波, 之前看小甲鱼的python教学视频的时候, 看到上面教的爬虫, 爬美女图片的, 心很痒痒, 但是不知道为啥, 按照视频一个字一个字敲的代码,总是报错, 有一天花了 一下 ...

  5. springboot扫描通用的依赖模块

    将实际使用类的启动类改为如下形式启动: public class OrderApplication { public static void main(String[] args) { Object[ ...

  6. Extjs, 使用GridPanel出现 Layout run failed

    当GridPanel被加入到容器,且容器的layout为vbox时候, 会出现 Layout run failed 后者GridPanel的尺寸没有撑满父容器 网上找到的解决的方法是.要给父容器设置一 ...

  7. Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery

    Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery 一.背景 为什么要做这个三合一数据集组件呢?曾经我们公司用delphi开发的系统大多以ADO,BDE方式来连接数据库,这 ...

  8. Qt使用第三方库

    简述 在 Qt 中经常会用到第三方库,例如:FFmpeg.OpenCV 等.第三方库的使用比较简单,只需要一些基本的配置就可以搞定,一起来看看吧! 简述 第三方库 源代码 库文件 目标目录 第三方库 ...

  9. 28.semaphore跨进程通信

    根据id创建Semaphore,并初始化有一个信号量可用 name类型是char *...; HANDLE hsem = CreateSemaphoreA(NULL, 1, , name); 关闭句柄 ...

  10. 可重入锁ReentrantLock--转载

    突然被问到什么是可重入锁?脑袋里闪过了n中概念,最终没有找到,从网上学习一下. 原文地址:https://www.ibm.com/developerworks/cn/java/j-jtp10264/ ...