如何使基于tslib的校准保持永久性?

时间:2014-08-08 17:54:06

标签: c++ qt touchscreen calibration

我在嵌入式解决方案中进行永久性校准时遇到问题。我正在为带触摸屏的嵌入式Linux环境开发一个基于Qt的应用程序。对于最后一部分,我使用tslib(由之前的开发人员配置)。

简单地校准触摸屏,一切都很好:ts_calibrate运行并正确创建pointercal文件。如果在调用ts_calibrate后运行我的Qt应用程序(或ts_test),我会发现校准成功。

问题是校准结果仅适用于我的应用程序的一次打开:我使用ts_calibrate进行校准,运行我的应用程序,关闭它,如果我再次运行我的应用程序,屏幕又一次未校准。

现在显然我不希望每次我的应用关闭并重新打开时都要调用校准。问题是:如何使校准结果成为永久性的?(即,直到进行另一次校准)


额外信息:

我在网上做了一些研究,我发现this SO thread讲述了使用QWSServer处理此问题的方法。起初我不喜欢这个解决方案,因为它依赖于Qt框架来完成这项工作(我期待更通用的“C ++解决方案”(或者调用脚本,无论如何))。但我实现它并且它有效 - 但仅在特定情况下,即,如果我校准,打开我的软件,关闭它并重新打开它,然后保持校准。但是,如果我完全关闭硬件,打开它并运行我的应用程序而不调用ts_calibrate(在此过程中重新加载Linux内核),问题仍然存在;所以这表明只是部分解决方案,因此是不可接受的。

试图找到问题的根源,我在校准后创建了pointercal文件的副本,并在关闭并打开我的硬件(并确认校准结束)之后创建了另一份副本我注意到尽管没有调用ts_calibrate或类似的app,但文件在中间被更改了:

校准后: 55438 118 -1920736 -543 -36058 34531168 65536 800 480

硬件关闭后: -55040 1280 2526720 -288 35040 -34398240 -62768

linux boot(tftp; bootm命令)的终端日志未提及pointercal或相关的校准过程。

修改

我最近了解到位于pointercal内的/etc/文件正在各个部分之间进行更改,因为重新启动硬件时整个文件夹都是新的。所以本质上发生的事情是Tslib正在追踪一个文件,每次重启硬件时都会不断重置为默认值,我需要做的是配置Tslib不要看那里,而是更安全的文件夹(在我的文件夹中)案例,SD卡)。现在的新问题是:如何做到这一点?我知道我必须配置tslib.sh文件,使TSLIB_CALIBFILE变量指向pointerscal的新位置,但tslib.sh本身位于/etc/内,本身就是{{1}}暂时的。

1 个答案:

答案 0 :(得分:0)

您必须更改通过tftp加载的图片中的TSLIB_CALIBFILE

应该这样做,因为你只需改变一次。