我有一个带有嵌入式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程序的输入。
答案 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_TSDEVICE
,TSLIB_CALIBFILE
和TSLIB_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。