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发送的数据并上报

最新文章

  1. .NET使用NPOI2.0导入导出Excel
  2. Spark在Ubuntu中搭建开发环境
  3. 建设商城网站ecshop如何开启伪静态
  4. C学习笔记
  5. 对char类型的理解以及对补码的理解分析
  6. iOS全景
  7. HTML,CSS,JS,JQ
  8. [html5] 学习笔记-Canvas应用
  9. VPS修改SSH端口不小心把自己给墙掉的一般解决办法
  10. [转载] 网络IO模型
  11. iOS-UINavigationBar【颜色设置】
  12. BZOJ_2661_[BeiJing wc2012]连连看_费用流
  13. python中如何对待易过期的cookies
  14. Linux下彻底卸载mysql详解
  15. SQLServer 2008(R2)如何开启数据库的远程连接
  16. 对象字典0x1005和0x1006的理解
  17. 在Java程序中做字符串拼接时一定要记得的MessageFormat.format
  18. linux 处理键盘 鼠标事件
  19. ArchLinux 下安装 SecureCRT
  20. Cubieboard搭建Hadoop指南

热门文章

  1. 简单说一下 JSON和JSONP
  2. $.each(data, function (index, value) { })的用法;json和list<>的互相转换
  3. Gym 100952 B. New Job
  4. node内容
  5. Python实现简单的HTTP服务器(支持文件下载)
  6. Dubbo学习总结(3)——Dubbo-Admin管理平台和Zookeeper注册中心的搭建
  7. onvif开发实战2--总结框架搭建
  8. 16.REPL 命令
  9. 1.java soap api操作和发送soap消息
  10. Winform 获取相对路径 C#