我在嵌入式解决方案中进行永久校准时遇到问题。我正在为带触摸屏的嵌入式Linux环境开发基于Qt的应用程序。对于最后一部分,我使用tslib
(由以前的开发人员配置)。
在简单地校准触摸屏方面,一切都很好:ts_calibrate运行并正确创建了pointercal
文件。如果在调用ts_calibrate之后运行我的Qt应用程序(或ts_test),我可以注意到校准成功。
问题在于,校准结果仅适用于1次打开我的应用程序:我使用ts_calibrate进行校准,运行我的应用程序,将其关闭,如果再次运行我的应用程序,则屏幕将再次未校准。
现在显然我不需要每次关闭并重新打开应用程序时都需要调用校准。问题是:如何使校准结果永久化? (也就是说,直到再次进行校准为止)
额外信息:
我在网上做了一些研究,发现this SO thread讲述了一种使用QWSServer
处理此问题的方法。起初,我不喜欢这种解决方案,因为它依靠Qt框架来完成工作(我期望有一个更通用的“ C ++解决方案”(或调用脚本,无论如何))。但是我实现了它并使其起作用-但仅在特定情况下,即,如果我进行校准,打开软件,关闭它并重新打开它,则可以保持校准。但是,如果我完全关闭硬件,打开硬件并运行我的应用程序而没有调用ts_calibrate(在过程中重新加载Linux内核),问题仍然存在。因此,这仅是部分解决方案,因此是不可接受的。
为了找到问题的根源,我在校准后立即创建了pointercal
文件的副本,并在关闭并打开了硬件(并确认校准已结束)之后创建了该文件的另一个副本,然后我注意到该文件尽管没有调用ts_calibrate或类似应用,但在中间更改了:
校准后:
55438 118 -1920736 -543 -36058 34531168 65536 800480
硬件关闭后:
-55040 1280 2526720 -288 35040 -34398240 -62768
linux引导的终端日志(tftp; bootm
命令)没有提及pointercal
或相关的校准过程。
编辑
我最近了解到,位于pointercal
内的/etc/
文件在各节之间进行了更改,因为重新启动硬件后整个文件夹都变为新文件夹。因此,实际上发生的是,Tslib会跟踪每次重新启动硬件后都会不断重置为默认值的文件,而我需要做的是将Tslib配置为不在该目录中,而是配置为一个更安全的文件夹(在我的情况下,SD卡)。现在的新问题是:该怎么做?我知道我必须配置tslib.sh
文件,使TSLIB_CALIBFILE
变量指向pointerscal
的新位置,但是tslib.sh
本身位于/etc/
内,本身是临时的。
最佳答案
您必须更改通过tftp加载的映像中的TSLIB_CALIBFILE
。
应该这样做,因为您只需更改一次即可。
关于c++ - 如何使基于tslib的校准永久保留?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25209416/