- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
移植tslib-1.4所遇到的问题分析与总结(elephant半原创)
一:移植环境
:主机环境:Ret Hat Enterprise 5
: 交叉工具链:arm-linux-gcc-4.3.2
: 开发平台:友善之臂mini2440+统宝3.5寸屏
:所需的软件资源:
tslib-1.4.tar.gz qt-x11-opensource-src-4.5.3.tar.gz qt-embedded-opensource-src-4.5.3.tar.gz (QT的移植是参考网上找到一篇较好的移植手册,但是此手册的作者不知道是无心之失还 是咋的,给的资料有所保留。不过思路比较清晰以及解析的比较详细,还是非常值得参考 的)
参照的文章链接地址为: /view/242c91f24693daef5ef73d82.html 二:交叉编译tslib-1.4
在移植好触摸屏的驱动后(在移植内核的时候完成),一般都要移植一个tslib来配合, 在用户层对触摸屏的数据进行滤波和矫正,同时也可以给应用程序一个统一的接口,很多
GUI都支持tslib的接口。我移植到开发板的QT版本是QT4,所以用tslib-
1.4进行触摸屏校正,因为QT4只是支持tslib-1.4(目前最新版),QT2支持的是tslib- 1.3版本,所以在移植过程中先要看清楚自己移植的是什么版本。
简单描述tslib校正触摸屏原理:
Tslib是触摸屏驱动和应用层之间的适配层,它从触摸屏驱动处获得原始的设备坐标数据,通过 一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的屏幕坐
标。通过tslib/src/tslib.h文件可以看出,在tslib中为应用层提供了2个主要的接口ts_open() ,ts_close();ts_read()和ts_read_raw(),其中ts_read()为正常情况下的接口,ts_read_r aw()为校准情况下使用的接口。从tslib默认的ts.conf文件中可以看出包括如下基本插件:( 强烈建议通读这个配置文件并理解这个文件所写的内容)
pthres 为Tslib 提供的触摸屏灵敏度门槛插件;
variance 为Tslib提供的触摸屏滤波算法插件;
dejitter 为Tslib 提供的触摸屏去噪算法插件;
linear为Tslib 提供的触摸屏坐标变换插件。
tslib 从触摸屏驱动采样到的设备坐标进行处理再提供给应用端的过程大体如下:
raw device -- variance -- dejitter -- linear -- application
module module module 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插件使用。而我们每次的触摸的操作都进行多次触 摸坐标变换。
至此已经找到解决问题的大体的方法了。在校准触摸屏后只需及时的让linear插件再次读取新 的/etc/pointeracal文件,这样新校准的坐标信息就及时的更新到上层应用。下面就要考虑具 体实现的问题了。
。从linear.c文件可以看出在该模块初始化时读取了/etc/pointercal文件。只要在linear_re ad()中读取新的/etc/pointercal文件即可。
。校准后保存了一个新的pointercal文件,但ts_lib怎么知道当前的pointercal文件是应该读 取的新文件。刚开始的时候我们在linear.c的linear_read()函数中采取计数轮询的方式查看/e tc/poinercal文件的最后更新时间,如果当前的更新时间大于上次更新时间,就去读取下point ercal文件。我们暂且不说在一台刚下流水线的机器,它的rtc时间是不确定,再进行时间比较 时会出现错误。另外始终的轮询的方式和ts_lib的采样间隔时间值很小。这样用户在进行触摸 屏常按操作时,会非常明显的消耗系统资源。
。此时想到的办法就是进程通信,ts_lib是个动态库运行于系统中,他存在系统中不是以进程 方式,但可以采取折衷方法,将调用ts_lib的进程号(实际上就是X的进程号)保存到一个配置 文件中。这样在使用ts_calibrate校准触摸屏后,利用信号的方式给
文档评论(0)