10.14 android输入系统_多点触摸驱动测试及Reader线程、InputStage分析
21. 多点触摸_电容屏驱动程序_实践_tiny4412
tiny4412触摸屏: 分辨率为800 x 480
http://wiki.friendlyarm.com/wiki/index.php/LCD-S702/zh
测试:
a. 先把原有的ft5x06_ts.c 驱动程序去掉
I2C驱动有i2c_driver, i2c_device,ft5x06_ts.c只是i2c_driver,
修改同目录下的Makefile:
obj-$(CONFIG_TOUCHSCREEN_FT5X0X) += ft5x06_ts.o
改为:
obj-$(CONFIG_TOUCHSCREEN_FT5X0X) += mtp_input.o
b. 修改 arch/arm/mach-exynos/mach-tiny4412.c
去掉:
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
不去掉也可以,需要修改mtp_input.c:
static const struct i2c_device_id mtp_id_table[] = {
{ "100ask_mtp", 0 },
{ "ft5x0x_ts", 0}, // 添加这句
{}
};
c. make zImage
注册i2c driver时,
a. 它会首先判断能否支持系统中现有的I2C DEVICE,
假设该I2C DEVICE位于第n条I2C总线,地址为A
b. 再去各个I2C BUS(总线)上,使用address_list中的addr去探测是否存在能支持的设备
但是, 会忽略第n条I2C总线,地址为A的设备,因为在i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1))中注册的设备名字是使用的ft5x0x_ts,与我们的驱动不符合,所以注册i2c driver的时候,在判断能否支持系统中现有的I2C DEVICE时,不会匹配设备,后续对驱动中的i2c_driver结构体中的address_list里的地址A忽略,这样触摸屏设备在这个过程也不会通过add_new_device新增IIC设备,进而调用probe函数,因此如果不去掉i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1)),必须在驱动中的i2c_device_id中添加{ "ft5x0x_ts", 0},这样注册i2c driver时就能匹配现有的设备,当然也可以修改内核中i2c_register_board_info
第一次:
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 v3 // FT5x06 driver for tiny4412
22. Andriod系统使用多点触摸屏流程_idc配置文件
驱动中input_device的name必须设置,android系统会根据名字找到idc的配置文件,android应用程序通过ioctl读到,流程见uml图的input_reader,配置文件的作用是为了给android提供更多的信息,因为我们的驱动程序仅提供触点信息,如果我们的驱动能提供更多的信息,idc文件是可以省去的
在InputReader.cpp中的2837行会获得touch.deviceType的值,根据这个值来进行不同的事情,设置不同值;在InputReader.cpp搜索这个赋值过程,发现如果驱动提供了Input的属性等于INPUT_PROT_DIRECT,也会进行同样的赋值操作:
在驱动中添加:set_bit(INPUT_PROP_DIRECT,input_dev->propbit),这样就可以不提供idc文件了
/system/usr/idc/ft5x0x_ts.idc
/data/system/devices/idc/ft5x0x_ts.idc
https://source.android.com/devices/input/touch-devices
最重要一项:
touch.deviceType = touchScreen | touchPad | pointer | default //idc文件只要这一项就可以了
触摸设备的类型:
touchScreen : 触摸屏, 覆盖在显示器上, 可以直接操作各种图标
touchPad : 触摸板, 不是覆盖在显示器上, 需要在LCD上显示一个光标以便定位
pointer : 跟touchPad类似, 多一些手势功能("Indirect Multi-touch Pointer Gestures")
default : 由系统自己确定
Indirect Multi-touch Pointer Gestures
A. Single finger tap: click. (单手指点击: 点击)
B. Single finger motion: move the pointer. (单手指移动: 移动)
c. Single finger motion plus button presses: drag the pointer. (按键+单指移动: 拖拽pointer)
D. Two finger motion both fingers moving in the same direction: drag the area under the pointer in that direction. The pointer itself does not move.
(两手指同方向移动: 拖拽pointer所在区域,但是pointer不动)
E. Two finger motion both fingers moving towards each other or apart in different directions: pan/scale/rotate the area surrounding the pointer. The pointer itself does not move.
(两手指往对方移动, 或往不同方向移动: pan/scale/rotate, 移动、放大缩小、旋转, pointer不动)
F. Multiple finger motion: freeform gesture.
第一次:
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 v4 // don't need .idc file again
23. Andriod系统使用多点触摸屏流程_Reader线程
24. Andriod系统使用多点触摸屏流程_InputStage
在APP_0009_InputStage v1基础上修改, 如下获取v1代码:
git clone https://github.com/weidongshan/APP_0009_InputStage.git
或
git clone https://git.coding.net/weidongshan/APP_0009_InputStage.git
更新:
git pull origin
取出指定版本:
git checkout v1 // override onKeyPreIme/onKeyDown/onKeyUp, and setOnKeyListener
本节源码:
git checkout v2 // print StackTraceString for touch event
本节测例在按键监听执行函数中把栈空间打印出来分析方法间的调用关系
android中通过Log.d(TAG,Log.getStackTraceString(new Throwable()))就可以打印堆栈,找到函数调用的地方,从此处往上就是该函数被调用的关系,打印出来的信息最下面是顶层函数,即下面调用上面
触摸事件处理过程:
Activity.dispatchTouchEvent--->Windows--->Decor--->...--->某个控件.dispatchTouchEvent
Android对触摸事件的处理过程总入口是Activity.dispatchTouchEcent,最终会通过window发给decorview,在有decorview分发给某个控件
控件对触摸操作的处理过程如下(入口是View.dispatchTouchEvent):
a. 如果事先使用 setOnTouchListener设置了监听器,
调用监听器的 onTouch 函数: li.mOnTouchListener.onTouch(this, event)
b. 接着调用View.onTouchEvent(event)
c. 最后, 对于松开的事件, 如果事件使用setOnClickListener设置了监听器,
调用监听器的 onClick 函数: li.mOnClickListener.onClick(this)
注意到用户可以设置2个监听器: setOnTouchListener, setOnClickListener
前者可以处理所有触摸事件(按下/松开/滑动等), 后者只能处理松开事件
怎么编程?
a. 如果想在所有控件之前处理触摸事件, 可以重写Activity的dispatchTouchEvent函数,
它最先被调用
b. 对于某个控件, 使用setOnTouchListener设置监听器处理所有类型的触摸事件
使用setOnClickListener设置监听器处理松开的触摸事件
c. 也可以重写控件的onTouchEvent函数(不推荐)
10.14 android输入系统_多点触摸驱动测试及Reader线程、InputStage分析的更多相关文章
- 10.13 android输入系统_多点触摸驱动理论与框架
1.多点触摸驱动理论 驱动程序仅上报多个触点的位置就可以,是放大还是缩小由应用程序控制 对于多点触摸驱动在linux系统中有个输入子系统,其已经实现了open/read/write等接口 我们只需要实 ...
- 10.11 android输入系统_补充知识_activity_window_decor_view关系
android里:1个application, 有1个或多个activity(比如支付宝有:首页.财富.口碑.朋友.我的,这些就是activity)1个activity, 有1个window(每个ac ...
- 10.4 android输入系统_框架、编写一个万能模拟输入驱动程序、reader/dispatcher线程启动过程源码分析
1. 输入系统框架 android输入系统官方文档 // 需FQhttp://source.android.com/devices/input/index.html <深入理解Android 卷 ...
- 10.8 android输入系统_实战_使用GlobalKey一键启动程序
11. 实战_使用GlobalKey一键启动程序参考文章:Android 两种注册(动态注册和静态注册).发送广播的区别http://www.jianshu.com/p/ea5e233d9f43 [A ...
- 10.5 android输入系统_Reader线程_使用EventHub读取事件和核心类及配置文件_实验_分析
4. Reader线程_使用EventHub读取事件 使用inotify监测/dev/input下文件的创建和删除 使用epoll监测有无数据上报 细节: a.fd1 = inotify_init(& ...
- 10.9 android输入系统_APP跟输入系统建立联系和Dispatcher线程_分发dispatch
12. 输入系统_APP跟输入系统建立联系_InputChannel和Connection核心: socketpair // 第9课第3节_输入系统_必备Linux编程知识_任意进程双向通信(scok ...
- 10.1、android输入系统_必备Linux编程知识_inotify和epoll
1. inotify和epoll 怎么监测键盘接入与拔出? (1)hotplug机制:内核发现键盘接入/拔出==>启动hotplug进程==>发消息给输入系统 (2)inotify机制:输 ...
- 10.7 android输入系统_Dispatcher线程情景分析_Reader线程传递事件和dispatch前处理
android输入系统C++最上层文件是com_android_serve_input_InputManagerService.cpp global key:按下按键,启动某个APP可以自己指定,修改 ...
- 10.6 android输入系统_Dispatcher线程_总体框架
图解Android - Android GUI 系统 (5) - Android的Event Input System - 漫天尘沙 - 博客园.htm // 关注里面的Dispatcher处理流程h ...
随机推荐
- vim-插入格式化时间
最近一直在搞vimrc的配置.其中有一点就是,我想要实现代码快速注释的功能.而这个功能中的一个关键点就是,我要获得系统当前的时间,然后插入到我的注释里面.我知道vimrc支持shell命令,既使用:r ...
- ubuntu adb 安装
ubuntu 下adb 安装,其实就是下载一个adb,然后给它赋予可执行权限,最后在环境变量里添加一下罢了.具体如下 1.下载adb 这个工具其实是在sdk工具包里面的platform-tools文件 ...
- 67.nodejs取参四种方法req.body,req.params,req.param,req.body
转自:http://www.cnblogs.com/jkingdom/p/8065202.html 摘要: nodejs取参四种方法req.body,req.params,req.param,req. ...
- 56.lambda表达式与绑定以及伪函数和绑定
#include <iostream> #include <functional> using namespace std; using namespace std::plac ...
- spark源码编译,本地调试
1.下载源码 2.进入源码根据README.md编译源码,注意使用的是源码目录下的maven编译 3.用idea导入顶层pom文件 4.修改顶层pom文件和example下的pom文件,将scope的 ...
- Ubuntu 美团sql优化工具SQLAdvisor的安装(转)
by2009 by2009 发表于 3 个月前 SQLAdvisor简介 SQLAdvisor是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具.它基于MySQ ...
- python生成md5, shell生成md5
echo -n 'aaa'|md5sum|cut -d ' ' -f1 python用hashlib md5=hashlib.md5(mid.upper()).hexdigest().upper()
- [翻译]魅族的M1 Note是十分廉价(dirt-cheap)的iphone5C增强版
Meizu's M1 Note is a dirt-cheap iPhone 5c on steroids 魅族的M1 Note是十分廉价(dirt-cheap)的ihone5C增强版 While m ...
- opencv中的Java库
opencv中有一个用Java编写的库,opencv2.4.4以上,在opencv解压包里路径:opencv/build/java/opencv.jar,再依据用户计算机位数选择,假设是32位计算机, ...
- 《iOS Human Interface Guidelines》——Container View Controller
容器视图控制器 容器视图控制器管理和展示它的子视图集合--或者子控制器集合--以一种自己定义的方式. 系统定义的容器视图控制器的样例有标签栏视图控制器.导航栏视图控制器和分栏视图控制器(查看Tab B ...