我在嵌入式解决方案中制作永久校准时遇到问题。我正在开发一个基于qt的应用程序与触摸屏嵌入式Linux环境。对于最后一部分,我使用tslib
(由以前的开发人员配置)。
在什么来简单校准触摸屏,一切都很好:ts_calibrate运行并正确创建pointercal
文件。如果在调用ts_calibrate之后,我运行我的Qt应用程序(或ts_test),我可以注意到校准是成功的。
问题是校准结果只适用于我的应用程序的1次打开:我用ts_calibrate校准,运行我的应用程序,关闭它,如果我再次运行我的应用程序,屏幕再次未校准。
现在很明显,我不想每次我的应用程序关闭和重新打开时都调用校准。问题是:如何使校准结果成为永久性的?(即,直到另一次校准)
额外信息:
我在网上做了一些研究,我发现这个线程讲述了一种使用QWSServer
处理这个问题的方法。起初我不喜欢这个解决方案,因为它依赖于Qt框架来完成这项工作(我期望一个更通用的"c++解决方案"(或调用脚本,无论什么))。但我实现了它,它起作用了——但只是在一个特定的情况下,也就是说,如果我校准,打开我的软件,关闭它,然后重新打开它,那么校准是保持的。但是,如果我完全关闭硬件,打开它并运行我的应用程序而不调用ts_calibrate(在此过程中重新加载Linux内核),问题仍然存在;因此,这只是部分解决方案,因此是不可接受的。
试图找到问题的根源,我在校准后创建了pointercal
文件的副本,并在关闭和打开硬件后创建了另一个副本(并确认校准已经结束),我注意到该文件在中间更改,尽管没有调用ts_calibrate或类似的应用程序:
:55438 118 -1920736 -543 -36058 34531168 65536 800 480
硬件关机后:-55040 - 1280 - 2526720 -288 - 35040 -34398240 -62768
linux启动的终端日志(tftp; bootm
命令)没有提到pointercal
或相关的校准过程。
编辑
我最近了解到位于/etc/
内部的pointercal
文件在各部分之间发生变化,因为当硬件重新启动时,整个文件夹都是新的。因此,本质上发生的事情是,Tslib正在跟踪一个文件,该文件每次重新启动硬件时都会不断地重置为默认值,我需要做的是配置Tslib不查找那里,而是查找一个更安全的文件夹(在我的情况下,是SD卡)。现在的新问题是:如何做到这一点?我知道我必须配置tslib.sh
文件,使TSLIB_CALIBFILE
变量指向pointerscal
的新位置,但tslib.sh
本身在/etc/
内,本身是临时的。
您必须更改通过tftp加载的图像中的TSLIB_CALIBFILE
。
应该可以了,因为你只需要修改一次。