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 ...
随机推荐
- mvn本地执行java程序
mvn -f pom.xml compile exec:java -Dexec.classpathScope=compile -Dexec.mainClass=storm.starter.WordCo ...
- 小米开源便签Notes-源码研究(0)-整体功能介绍(图文并茂)
本周对小米开源文件管理器,做了整体的研究,大致弄清了源码的来龙去脉,剩下的就是重点研究几个活动的流程了. 讲解Android应用这种可视化的程序,感觉还是有图比较好,不然功能界面都不清楚,自己不好介绍 ...
- 【Codeforces Round #427 (Div. 2) B】The number on the board
[Link]:http://codeforces.com/contest/835 [Description] 原本有一个数字x,它的各个数码的和原本是>=k的; 现在这个数字x,在不改变位数的情 ...
- PatentTips - Transparent unification of virtual machines
BACKGROUND Virtualization technology enables a single host computer running a virtual machine monito ...
- D. Dreamoon and Sets(Codeforces Round #272)
D. Dreamoon and Sets time limit per test 1 second memory limit per test 256 megabytes input standard ...
- js13--对象、原型
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- js10---call方法总结
<html> <body> <script type="text/javascript"> function Obj(x, y){ this.x ...
- 8.NPM 使用介绍
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使 ...
- InstallShield详细制作说明(三)
八.许可协议 打开[Installation Designer]->[Behavior and Logic]->[Support Files/Billboards]面板 这里[Langua ...
- SGU 253 Theodore Roosevelt 快速判断点是否在凸包内
http://acm.sgu.ru/problem.php?contest=0&problem=253 题意简单易懂...给你n个点的凸包(经测试已经是极角序)...判断m个点是否在凸包内.. ...