ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:40.95KB ,
资源ID:4167362      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4167362.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(触摸屏校正总结.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

触摸屏校正总结.docx

1、触摸屏校正总结移植所遇到的问题分析与总结(elephant半原创)一:移植环境1:主机环境:Ret Hat Enterprise 52: 交叉工具链: 开发平台:友善之臂mini2440+统宝寸屏4:所需的软件资源: (QT的移植是参考网上找到一篇较好的移植手册,但是此手册的作者不知道是无心之失还是咋的,给的资料有所保留。不过思路比较清晰以及解析的比较详细,还是非常值得参考的)参照的文章链接地址为:二:交叉编译在移植好触摸屏的驱动后(在移植内核的时候完成),一般都要移植一个tslib来配合,在用户层对触摸屏的数据进行滤波和矫正,同时也可以给应用程序一个统一的接口,很多GUI都支持tslib的接

2、口。我移植到开发板的QT版本是QT4,所以用进行触摸屏校正,因为QT4只是支持(目前最新版),QT2支持的是版本,所以在移植过程中先要看清楚自己移植的是什么版本。简单描述tslib校正触摸屏原理: Tslib是触摸屏驱动和应用层之间的适配层,它从触摸屏驱动处获得原始的设备坐标数据,通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐标。通过tslib/src/文件可以看出,在tslib中为应用层提供了2个主要的接口ts_open(),ts_close();ts_read()和ts_read_raw(),其中ts_read()为正常情况下的接口,ts_read_

3、raw()为校准情况下使用的接口。从tslib默认的文件中可以看出包括如下基本插件:(强烈建议通读这个配置文件并理解这个文件所写的内容) pthres 为Tslib 提供的触摸屏灵敏度门槛插件; variance 为Tslib提供的触摸屏滤波算法插件; dejitter 为Tslib 提供的触摸屏去噪算法插件; linear为Tslib 提供的触摸屏坐标变换插件。tslib 从触摸屏驱动采样到的设备坐标进行处理再提供给应用端的过程大体如下: raw device - variance - dejitter - linear - application module module module

4、module再来看看ts_calibrate主要做了哪些事情,校准情况下,tslib对驱动采样到的数据进行处理的一般过程如下: 1。读取屏上5个点的坐标(Top Left,Top Right,Bottom Left,Bottom Right,Center),在进行一系列的变换,取样的5个点,实际上是包含3个不同的X值,3个不同的Y值。和scaling 值一共7个值,一起保存到/etc/pointercal中.(触摸屏校准文件) 2.这个/etc/pointercal文件主要是供linear插件使用。而我们每次的触摸的操作都进行多次触摸坐标变换。至此已经找到解决问题的大体的方法了。在校准触摸屏后

5、只需及时的让linear插件再次读取新的/etc/pointeracal文件,这样新校准的坐标信息就及时的更新到上层应用。下面就要考虑具体实现的问题了。1。从文件可以看出在该模块初始化时读取了/etc/pointercal文件。只要在linear_read()中读取新的/etc/pointercal文件即可。2。校准后保存了一个新的pointercal文件,但ts_lib怎么知道当前的pointercal文件是应该读取的新文件。刚开始的时候我们在的linear_read()函数中采取计数轮询的方式查看/etc/poinercal文件的最后更新时间,如果当前的更新时间大于上次更新时间,就去读取下

6、pointercal文件。我们暂且不说在一台刚下流水线的机器,它的rtc时间是不确定,再进行时间比较时会出现错误。另外始终的轮询的方式和ts_lib的采样间隔时间值很小。这样用户在进行触摸屏常按操作时,会非常明显的消耗系统资源。3。此时想到的办法就是进程通信,ts_lib是个动态库运行于系统中,他存在系统中不是以进程方式,但可以采取折衷方法,将调用ts_lib的进程号(实际上就是X的进程号)保存到一个配置文件中。这样在使用ts_calibrate校准触摸屏后,利用信号的方式给ts_lib发送用户自定义信号,ts_lib的中加一个简单的信号处理函数。在接受到信号后就去读取下新的pointerca

7、l文件。正常情况下不做任何的轮询和读取操作。从上说的3个步骤中完全解决了校准后应用端触摸及时生效的问题。还有个次要问题就是如何锁屏这需要从内核入手了,查看内核/drivers/input/从该驱动提供的ioctl中看到对基于evdev的输入设备都提供EVIOCGRAB实现。顾名思义,grab就是将当前的输入操作抓取到当前的操作中,让当前操作之外的所有应用端读不到触摸屏的触摸操作。由驱动源码就很容易知道该如何实现锁屏解锁操作了。源码如下:truct tsdev *ts;char *tsdevice = /dev/input/event0;ts = ts_open(tsdevice, 0);int

8、 ts_tmpfd = ts_fd(ts);if (ts_tmpfd= -1) perror(ts_open); exit(1);unsigned long val =1;int ioctl_ret=ioctl(ts_tmpfd,EVIOCGRAB,&val);printf(now lock the ts ioctl ret is:%dn,ioctl_ret);if (ioctl_ret!=0) printf(Error: %sn, strerror(errno); exit(1);printf(lock the ts success n);现在开始交叉编译tslib,在开始编译前需要确定自己

9、的开发环境是否安装了autoconf、automake和 libtool等软件包。之前我的虚拟机并不是完全安装,在编译过程中出现很多问题,在这里我建议大家虚拟机完全安装。不过如果确实不想重装系统的话,也可以手动安装,之前我自己就是手动安装的,虽然成功安装了tslib软件,但是在后续的QT移植过程中出现很多不可预知的错误,因此还是建议大家的虚拟机是完全安装的。可以利用命令查看自己虚拟机上的autoconf版本:autoconf V在开始编译tslib前还有一个问题需要特别注意:就是要确定在编译时所用的工具是交叉工具链而不是PC平台下的GCC工具,因为我要运行的平台是嵌入式ARM架构而不是PC的X

10、86架构。关于这一点,在网上找到很多资料都没有说明,几经寻找之下,终于在CSDN博客上看到网友yihui8的文章,对这一点作了说明。(还是网友yihui8厚道)。网友yihui8博客地址(详细解析交叉编译):第一步:解压源码包:tar xvzf tslib第二步:进入tslib之后关键是要设置交叉编译环境(下面是根据我自己的实际情况所添加的)如果不设置交叉编译环境,在移植到开发板时,执行./ts_calibrate程序时会出现以下错误:./ts_calibrate: line 1: syntax error :”(” unexpected.$export PATH=$PATH:/usr/loc

11、al/arm/ CC=arm-linux-gcc$export CXX=arm-linux-g+设置好交叉编译环境后就可以开始安装了:执行./执行./之后可能会有上述信息出现,但是我的机器上灰常不给力,只是显示出其中几行信息,一开始以为是出错,但是最后还是移植成功,证明这步就算只出现几行信息并无多大关系。接着执行以下命令:./configure -prefix=/usr/local/tslib/ -host=arm-linux ac_cv_func_malloc_0_nonnull=yes (1)有些开发板在执行此命令时需要添加enable inputapi=no或者enable input=

12、no,至于是哪一个就需要根据tslib目录下的configure文件才可以知道。(建议这个文件还是看一下)。由于友善之臂mini2440的触摸屏驱动是支持ioctl操作的(在内核移植时做触摸屏驱动时可以看到源码中是支持ioctl的),因此我在这里并没有加上enable inputapi=no.(2)如果没有加上ac_cv_func_malloc_0_nonnull=yes会出现交叉编译错误:undefined reference to rpl_malloc. 这是由ac_cv_func_malloc_0_nonnull检查引起的,为了不让它检查,产生一个cache文件,欺骗configure再

13、执行:因此为了编译的顺利进行,在配置的时候需要加上这一句:ac_cv_func_malloc_0_nonnull=yes最后执行make & make install就可以在指定的路径上成功安装tslib。我的指定路径是/usr/local/tslib/,在这个文件下安装成功的话会有四个目录:lib/ etc/ include/ bin/.安装好tslib之后将动态链接库文件拷贝到根文件系统中,(注意tslib依赖的是动态链接库文件),如果忘记拷贝动态链接库的话会出现以下错误:拷贝进去之后需要在自己的根文件系统的/etc/profile(在文件的一开始添加下面的内容)设置tslib的环境变量(

14、要根据自己的实际情况来设置),下面是我的开发板所设置的有关tslib的环境变量:#Ash profile#vim syntax=sh#No core files by defaultecho Set ENV for tslib.export QTDIR=/usr/local/Trolltech/文件系统中QT的安装目录)export TSLIB_ROOT=/usr/local/tslib (tslib的目录)exportTSLIB_CONSOLEDEVICE=none exportTSLIB_FBDEVICE=/dev/fb0exportTSLIB_TSDEVICE=/dev/input/ev

15、ent0exportTSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts exportTSLIB_CONFFILE=$TSLIB_ROOT/etc/ exportTSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercalexport POINTERCAL_FILE=$TSLIB_ROOT/etc/pointercalexport QWS_DISPLAY=LinuxFb:dev/fb0export set QWS_SIZE=320x240exportQWS_MOUSE_PROTO=Tslib:/dev/input/event0exportLD_LIBRA

16、RY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATHecho “the env is successful”当配置好这些环境变量后下载到开发板,执行./ts_calibrate时如果出现:ts_open: No such file or directory说明环境变量设置有问题,可以用env命令查看一下有没有你刚才设置的环境变量。在设置环境变量这一个环节上是比较重要的,要保证在每一个目录下都存在你需要用到的文件。补充:tslib环境变量配置说明:在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪

17、声的缘故,触摸屏容易存在点击不准确、有抖动等问题。Tslib 是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。在 Qtopia 4.*版本中,默认的Tslib版本为Tslib 。在Qtopia 2.*版本中,默认的Tslib版本为Tslib 。在嵌入式中,由于触摸屏的种类多样、质量不一,采用Tslib 的参考配置往往无法获得较好的触摸屏触摸效果,同样需要经过大量的测试才能得到满意的配置参数,恶劣情况下,甚至需要对Tslib 的算法进行进一步的优化。下面就Tslib 的环境变量、配置文件等进行简要的介绍。1

18、) 环境变量2) 为了实现Tslib 的正确运行,需要对如下的Tslib 的环境变量进行配置:TSLIB_TSDEVICE ts_calibrate或./ts_test)可能出现的错误:1:运行./ts_testNo raw modules loaded. ts_config: No such file or directory出现这样的错误提示,可以很明确的告诉你,你的库缺少了一些*.so文件()文件中应该有一行(在配置文件上有很多的raw,但是全部是被注释掉的,但是至少需要打开一个。因为触摸屏是使用input子系统的,所以将module_raw input前面的#号去掉,并且前面不留空格,

19、千万别留空格啊,有一个网友就是因为这个小小的空格搞到他郁闷了很久,幸好我比他醒目,绝不留空格,哈哈。)module_raw input/nand1/lib/ts目录下应该有个文件叫(这个文件比较重要,我第二次移植过程中不小心把input裁剪掉了,当插件库$TSLIB_ROOT/lib/ts目录下没有这个文件时会提示如下错误)No raw modules loaded. ts_config: No such file or directory2:在做测试的时候,运行./ts_calibrate出现了经典的错误:(出现这个错误你不要沮丧,反而应该高兴,说明你之前的步骤已经全部没错了,只要把这个经典

20、的错误解决就万事大吉了。很庆幸,这个错误有很多网友都已经有办法解决了)经典错误:Couldnt load module inputNo raw modules loadedtsconfig: Success错误分析:那么错误就定位在 ts_config 里。并且可以进一步确定是在加载插件模块时出的错。阅读了tslib 的源代码,知道了cstdlib 库里的一个函数: getenv是用来得到指定系统环境变量的值。是为了测试 tslib 是否得到正确的环境变量。其环境变量默认的值在readme中有注明。加载插件模块时出出错分析:ts_calibrate会打开ts_configts_config函数

21、里首先会读取 tslib 配置文件(,由 TSLIB_CONFFILE环境变量指定,在tslib/etc下面),然后根据这个文件逐个加载插件库,版本的内容为:Module_raw input (读readme文件可以找到这个字符串)module pthres pmin=1module variance delta=30module dejtter delta=100module linearts_config又会调用ts_load_module加载库。从这个函数里,程序先是得到配置文件中指定加载的模块名,然后根据模块名构造了一个 so 文件文件名,然后调用了系统函数 dlopen 加载库!Li

22、nux 下的加载dlopen 类似于 Windows 下动态链接库的函数:dlopen错误就应该出在构造的库文件名是错误的-其指定的文件不存在-从而导致 dlopen无法加载。所以才提示找不到文件或目录!那么这样就是应该把需要的 应该复制到/tslib/plugins中(上面修正后作了这一步,就可以拉,就不会出现错误拉)3: #./此时会加载tslib中的插件模块,且会抛出Segement fault的错误。仔细分析tslib的源码之后,得知在加载时,中_ts_attach_raw()函数中使用NULL指针,导致Segement fault产生。经过修改过,重新编译tslib,再运行,一切正常

23、。中_ts_attach_raw()中的修改如下:#if 0for(next = ts-list, prev=next; next != NULL & next != prev_list; next = prev-next, prev =next)DEBUG(LIUHAO: %s %s:count=%d prev_list=%x prev=%x next=%x prev-next=%xn,_FILE_, _FUNCTION_, count+, prev_list, prev, next, prev-next);#elsefor(next = ts-list, prev=next; next !

24、= NULL & next != prev_list;)DEBUG(LIUHAO: %s %s:count=%d prev_list=%x prev=%x next=%x prev-next=%xn,_FILE_, _FUNCTION_, count+, prev_list, prev, next, prev-next);next = prev-next;if(next = NULL)break;elseprev = next;#endif至此,tslib所有工作已经完成,ts_calibrate会在/ts-release/etc/目录下生成pointercal文件。pointercal为触摸屏校准后生成的文件,确保QT运行时,触摸屏工作正常。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1