android实现触摸屏校准通用方法介绍(sys)

触摸校

准算法

触摸屏校准通用方法。XL,YL是显示屏坐标,XT,YT是触摸屏坐标,)

XL=XT*A+YT*B+C YL=YT*D+YT*E+F

由于具体计算是希望是整数运算,所以实际中保存的ABCDEF为整数,而增加一个参数DivXL=(XT*A+YT*B+C)/Div YL=(YT*D+YT*E+F)/Div TSLIB把以上的7个参数ABCDEF Div保存在pointercal文件中。不校准的数据:A=1,B=0,C=0,D=0,E=1,F=0,Div=1 ABCDEFDiv

-41137818-3636780-51325394706558465536 Android事件处理机制

android事件的传入是从EventHub开始的,EventHub是事件的抽象结构,维护着系统设备的运行情况(设备文件放在/dev/input里),设备类型包括Keyboard、TouchScreen、TraceBall。它在系统启动的时候会通过open_device方法将系统提供的输入设备都增加到这个抽象结构中,并维护一个所有输入设备的文件描述符,如果输入设备是键盘的话还会读取/system/usr/keylayout/目录下对应键盘设备的映射文件(修改./development/emulator/keymaps/qwerty.kl来改变键值的映射关系),另外getEvent方法是对EventHub中的设备文件描述符使用poll操作等侍驱动层事件的发生,如果发生的事件是键盘事件,则调用Map函数按照映射文件转换成相应的键值并将扫描码和键码返回给KeyInputQueue.frameworks/base/services/jni/com_android_server_KeyInputQueue.cpp根据事件的类型以及事件值进行判断处理,从而确定这个事件对应的设备状态是否发生了改变并相应的改变对这个设备的描述结构InputDevice。

Windowmanager会创建一个线程(InputDispatcherThread),在这个线程里从事件队列中读取发生的事件(QueuedEvent ev=mQueue.getEvent()),并根据读取到事件类型的不同分成三类(KEYBOARD、TOUCHSCREEN、TRACKBALL),分别进行处理,例如键盘事件会调用dispatchKey((KeyEvent)ev.event,0,0)以将事件通过Binder发送给具有焦点的窗口应用程序,然后调用mQueue.recycleEvent(ev)继续等侍键盘事件的发生;如果是触摸屏事件则调用dispatchPointer(ev,(MotionEvent)ev.event,0,0),这里会根据事件的种类(UP、DOWN、MOVE、OUT_SIDE等)进行判断并处理,比如Cancel或将事件发送到具有权限的指定的窗口中去;

移植方案

Android本身并不带触摸屏校准。Android获取到的数据就是驱动上报的原始数据。方案一移植TSLIB,通过TSLIB产生pointercal校准参数文件。方案二从Android框架层获取OnTouch事件产生pointercal校准参数文件方案一数据的校准在驱动中完成。即把pointercal的参数数据通过某种方式(sysfs)传递给驱动程序进行校准。方案二驱动上报原始点,原始点在框架层拦截后进行校验处理。TSLIB移植过程

修改源码以适应android的文件结构。设定Android.mk编译选项,生成库即应用。

etc/ts.conf module_raw inputsrc/ts_config.c#define TS_CONF"/system/etc/ts.conf"src/ts_load_module.c char*plugin_directory="/system/lib/ts/plugins/";tests/fbutils.c char*defaultfbdevice="/dev/graphics/fb0";COPY ts.conf到/system/etc/ts.confinit.rc.mkdir/data/etc/pointercal通过ts_calibrate产生pointercal数据文件。框架内获取参数文件

制作APK应用,仿效ts_calibrate采点并计算出各参数,产生pointercal框架内实现触摸屏校准

在InputDevive.java中拦截触摸屏原始数据进行pointercal参数校验后再分发驱动内实现触摸屏校准


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值