无法使用tslib与FT5x06配合使用

时间:2014-10-13 17:57:06

标签: linux qt embedded arm

我有一个带有嵌入式Linux的基于arm的主板,我相信它有一个FT5x06触摸屏控制器,但似乎tslib在多点触控电容式触摸屏控制器方面存在一些问题。 我用arm-linux-gcc4.5.1交叉编译tslib,当我运行ts_calibrate时,在目标上复制必要的文件并为tslib设置必要的环境变量时,会出现一个窗口并显示:

tslib: Selected device is not a touchscreen (must support ABS_X and ABS_Y events)

它并不接受我的接触。 现在我想我不知道应该让tslib与控制器一起使用作为单个触摸设备,但我不知道该怎么做或者要改变哪个文件。我是否必须在内核中编辑驱动程序文件并重建它?

你有什么想法吗?

我想使用tslib作为我的Qt4程序的输入。

2 个答案:

答案 0 :(得分:2)

Tslib 需要设置多个文件和/或环境变量才能开箱即用。以下是一些环境变量的示例

 TSLIB_CONSOLEDEVICE=none
 TSLIB_FBDEVICE=/dev/fb0
 TSLIB_TSDEVICE=/dev/input/touch
 TSLIB_CALIBFILE=/etc/pointercal
 TSLIB_CONFFILE=/etc/ts.conf

使用 tslib 运行Qt不需要很多变量。但是,您需要使用TSLIB_TSDEVICETSLIB_CALIBFILETSLIB_CONFFILE来与Qt一起使用。二进制文件 ts_calibrate 将使用TSLIB_FBDEVICE设备显示一些文本。然后,这会将配置写入TSLIB_CALIBFILE

要确定要使用的正确TSLIB_TSDEVICE,可以检查文件 / sys / class / input / input * / name 名称应该类似于 FT5202触摸屏。我在启动时将此信息用于上面示例中的软链接 / dev / input / inputX / dev / input / touch inputX 文件可能会随着其他输入驱动程序插入系统而发生变化,例如USB鼠标等。这些文件位置可能取决于 udev mdev 用于用户空间中的 / dev 目录填充。

ts.conf 文件是要加载的模块列表。以下是“Focal Tech”设备的示例,

module_raw input
module linear

Tslib 由几个模块(共享库)构成,这些模块在运行时动态加载。通常,需要将这些模块加载到 / usr / lib / ts ,并且您的内核和文件系统(libc)需要支持共享库。具体来说,线性模块将使用 ts_calibrate 程序的输出将触摸坐标映射到屏幕坐标。这对于电阻式触摸技术更有用,其中 x y parameters may inter-mix,包括剪切等。

注意:可以避免这种校准步骤,如果您大量生产,这是非常理想的。

/ etc / pointercal 中的数字被读入数组a [0] - >一个[7]。公式是这样的,

x' = (a2 + a0 *x + a1 * y) / a6;
y' = (a5 + a3 *x + a4 * y) / a6;

对于电容式外壳,没有任何透明度。此外,FocalTech设备的值似乎受到限制,因此屏幕位置(0,0)是触摸位置(0,0),并且所有设备都给出相同的最大(x,y)值。所以方程式减少到,

x' = (a1 * x) / a6;
y' = (a4 * y) / a6;

因此, pointercal 文件的唯一目的是将触摸映射到每个设备的屏幕坐标 AND 相同。因此,当您反向求解最大屏幕位置的方程式时,您可以手动十六进制编辑 pointercal 文件。您可以通过 ts_print_raw 二进制文件获取此信息。

最后,Qt Mouse Calibration class可用于完全避免 tslib 。您只需要具有固定三个常量的代码,这些常量将转换坐标。您完全避免使用 tslib 包。

答案 1 :(得分:0)

您的芯片驱动程序仅使用ABS_MT_POSITION_X / Y事件代码。从tslib 1.3开始,这是受支持的,tslib应该没有问题。截至目前,有tslib-1.3-rc3应该是安全的使用。在tslib-1.3发布之前不会有太多变化,请参阅tslib的project page