当前位置:首页 >> 信息与通信 >>

tslib 1.4 在ARM板Micro2440上移植


tslib 1.4 在 ARM 板 Micro2440 上移植

作者: 作者:罗毅 邮箱: 邮箱:luoyi07040125@126.com 日期: 日期:2010-12-24 参考: 参考:http://apps.hi.baidu.com/share/detail/16569621
http://www.cnblogs.com/wangtianxj/archive/2009/05/12/1454729.html

tslib 背景: 背景:
在采用触摸屏的移动终端中,触摸屏性能的调试是个重要问题之一,因为电磁噪 声的缘故,触摸屏容易存在点击不准确、有抖动等问题。 Tslib 是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校 准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。

Tslib 较准原理: 较准原理:
在 Qtopia 中,就触摸屏的调试问题主要涉及到以下三个部分:触摸屏驱动、Tslib、 QTslibTPanelHandlerPrivate 封装。 触摸屏驱动为与硬件直接接触部分,为上层的 Tslib 提供最原始的设备坐标数据,并可以 配置采样间隔、屏幕灵敏度等。采样间隔决定了单位时间内的采样数量,在其他参数不变的 情况下,采样间隔越小意味着单位时间内的采样数量越多,也就意味着采样越逼真、越不容 易出现采样信息丢失如输入法书写时丢笔划的情况, 但因为噪声的影响, 采样间隔越小同时 也意味着显示出来的图形的效果越差。 Tslib 为触摸屏驱动和应用层之间的适配层,其从驱动处获得原始的设备坐标数据, 通过一系列的去噪、去抖、坐标变换等操作,来去除噪声并将原始的设备坐标转换为相应的 屏幕坐标。 在 tslib 中为应用层提供了 2 个主要的接口 ts_read()和 ts_read_raw(),其中 ts_read()为正常情况下的借口,ts_read_raw()为校准情况下的接口。 正常情况下,tslib 对驱动采样到的设备坐标进行处理的一般过程如下: raw device --> variance --> dejitter --> linear --> application module module module 校准情况下,tslib 对驱动采样到的数据进行处理的一般过程如下: raw device--> Calibrate QTslibTPanelHandlerPrivate 为 tslib 提供了应用层封装,为 tslib 与应用层的接口部 分。 在触摸屏调试过程中,涉及到的参数主要有采样间隔(驱动)、灵敏度(驱动)、去噪 算法及约束(tslib)、去抖算法及约束(tslib)、ts 门槛值(tslib)。 由于各种相关期间的影响,在不同的硬件平台上,相关参数可能需要调整。以上参数的 相互关系为:采样间隔越大,采样点越少,采样越失真,但因为信息量少,容易出现丢笔划 等丢失信息情况,但表现出来的图形效果将会越好;去噪算法跟采样间隔应密切互动,采样 间隔越大,去噪约束应越小,反之采样间隔越小,去噪约束应越大。去抖算法为相对独立的 部分,去抖算法越复杂,带来的计算量将会变大,系统负载将会变重,但良好的去抖算法可 以更好的去除抖动,在进行图形绘制时将会得到更好的效果;灵敏度和 ts 门槛值为触摸屏 的灵敏指标,一般不需要进行变动,参考参考值即可。

编译 tslib 库
1.首先从网上下载的 tslib-1.4.tar.gz 2.解压 tar xvzf tslib-1.4.tar.gz ; cd tslib 3.生成 configure,这里比一般的开源项目少做一步,要先运行解压目录下的脚本 ./autogen.sh 4.用 configure 生成 Makefile. 生成脚本: ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux ac_cv_func_malloc_0_nonnull=yes --enable-inputapi=no 其中 ac_cv_func_malloc_0_nonnull=yes 是为解决如下编译错误设置的
ts_test.o: In function `main': ts_test.c:(.text+0x1d8): undefined reference to `rpl_malloc' fbutils.o: In function `open_framebuffer': fbutils.c:(.text+0xa20): undefined reference to `rpl_malloc' collect2: ld returned 1 exit status

--enable-inputapi=no. 是为了解决运行中提示 ts_open:Inappropriate ioctol for device,它表示 即不使用 ioctl 来控制触摸屏。但是我在几个板没有碰到这样提示--enable-inputapi=no 5.编译安装 make make install-strip #安装 strip 后的库 #make install #安装没有 strip 库版本. tslib 发布要将 libts.so,以及它的针对各个触摸屏设备的插件,ts.conf ts_calibrate 一同 发布在开发板上,并用前述的环境变量设置相应的值。 tslib1.4 目录下看到相关的应用程序、共享库、配置文件等了,需要说明的是在嵌入 式中,由于触摸屏的种类多样、质量不一,采用 Tslib 的参考配置往往无法获得较好的触 摸屏触摸效果,同样需要经过大量的测试才能得到满意的配置参数,恶劣情况下,甚至需要 对 Tslib 的算法进行进一步的优化。

配置与测试 tslib
tslib 只是应用级的一个程序库, 只是用来封装底层的触摸屏驱动的操作, 以一个统一接 口来给其它应用程序使用.因此 tslib 正常工作的 前提是开发板上的触摸屏驱动能正常工作. 另外触摸屏的效果往往需要在 LCD 上显示,因此 tslib 也需要开发板上的 FrameBuffer 驱动 正常工作.。 ARM 开发板常见的触摸屏驱动分为两大类,一类是模拟 HP 3600 的调用接口.这类驱动 一般使用/dev/h3600_tsraw 的设备结点文件.早期开发板一般都是这一类,

另外一类是采用 Linux 2.6 输入设备接口的驱动。这类驱动会将触摸屏驱动设计成一 个标准输入事件设备(linux input layer event interface),所有事件输入设备结点命名为 /dev/input/eventN (N>=0)。 一般都是/dev/input/event0.而且驱动向应用程序发送标准的 struct event 结构。 ARM 板使用哪种驱动接口.要参考产商的文档或直接查看已经成功的程序使用哪一个。

tslib 运行时需要一个关键的 ts.conf 来设置采用哪一种驱动。另外还需要设定一些环 境变量。 当编译完 tslib 安装后, 在安装目录的 etc 下有一个 ts.conf 的模板。 如果使用 h3600 设备,则使用 module_raw h3600,如果是使用输入设备,则使用 module_raw input.
#ts.conf template module_raw input #module_raw h3600 module pthres pmin=1 module variance delta=30 module dejitter delta=100 module linear

其中 pthres 为 Tslib 提供的触摸屏灵敏度门槛插件; variance 为 Tslib 提供的触摸 屏滤波算法插件;dejitter 为 Tslib 提供的触摸屏去噪算法插件;linear 为 Tslib 提供的 触摸屏坐标变换插件。 注意配置项要顶格写,如果有空格,tslib 将会 u 有段错误。这是它的 bug. 正常运行 tslib 也需要配置一系列环境变量:
#export TSLIB_ROOT=/usr/local/tslib export TSLIB_ROOT=/mnt/hxy/output/arm_linux #取决具体的设备驱动了,事件驱动用 export TSLIB_TSDEVICE=/dev/input/event0 #h3600 用如下配置

# export TSLIB_TSDEVICE=/dev/h3600_tsraw #触摸屏定位文件保存位置 export TSLIB_CALIBFILE=/etc/pointercal #tslib 配置文件内容 export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf #tslib 插件目录 export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export TSLIB_CONSOLEDEVICE=none #LCD 设备结点 export TSLIB_FBDEVICE=/dev/fb0 #把 libts.so 加入动态搜索路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

将其放入 ARM 开发的 Flash 或 NFS 路径下。 可以测试运行安几装目录下的 bin 的几个 测试程序运行 ts_test.将会在屏幕出现如下界面。点击控制台将会有输出。

关于触摸屏定位
软件最常采用是鼠标的坐标体系, 它是采用相对位移来判断位置.但触摸屏采用绝对定 位坐标。为了让程序响应触摸屏的点击,要把触摸屏的坐标换算成软件识别的 相对坐标。 因此要有一组参数来做换算。换算的参数来自于触摸屏定位程序,如果参数不对,最明显的 结果就是定位不准。 每一个使用触摸屏的嵌入式设备通常都带 有这样工具,比如我们使用手 机。(但大规模量产的定位参数都是统一设好). 开发板一般需要自己手动设置,tslib 自带一个 ts_calibrate 有这样功能。Qtopia 也自带 一个。两者界面类似,写的结果通常都是/etc/pointercal 这个文本文件里面。 操作方法也类似,当界面出一个小十字时,点击交叉点即可,设置分别会在左上,左 下,右上,右下和中心依次出现五个小十字。 Qtopia 定位程序界面。

tslib 的定位程序界面



相关文章:
...Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440
Fedora12下搭建Qt Creator的ARM开发环境 并 移植Qt4.6.2到Micro2440_IT/计算机...$PATH 编译 tslib 对触摸屏支持: 下载,tslib1.4.tar.gz,解压后: # ./...
qt-creator在嵌入式的移植方法
之后把程序考入开发板的目录 为开发板增加环境变量 ...ARM 开发环境 并 移植 Qt4.6.2 到 Micro2440 一...下载 tslib1.4,这个忘了在哪下载的了,网上有很多,...
SDL系列游戏在ARM上移植的实现_图文
的镜像文件开发板中,方便之后软件更容易移植;我了解 FriendlyARM 屏幕分辨率...input-tslib -disable-video-qtopia --disable-alsa # make # make install 5...
QT5的ARM移植及其中文显示
QT5的ARM移植及其中文显示_计算机软件及应用_IT/...避免和 gcc 版本的混淆 当然需要安装开发板上面,...③配置选项 这里 ../qt55-notslib 换成绝对路径,...
Ubuntu 10.04下Qt4.7.4移植详解
文件。 qt-everywhere-opensource-src-4.7.4 解压成三份, 将 分别命名为 qt-x86-build、 qt-x11-build、 qt-arm-build。 tslib 1.4 触摸屏库的移植 1....
qt移植
qt移植_计算机软件及应用_IT/计算机_专业资料。1 下载 tslib 和 Qt Tslib 是...然后直接解压到开发板的做法: $ cd /usr/local/qt4.8.5-arm $ tar -zcf ...
基于QT移植的ARM触摸屏校准
基于QT移植ARM触摸屏校准_信息与通信_工程科技_...内核已加载触摸屏驱动 QT 移植成功 Tslib 安装成功 ...Linux-2.6.30.4在2440上... 20页 5下载券 ...
Fedora 14 安装QT和QT-Embedded和QT-Creator
( 编译 后 qvfb 存在 /opt/FriendlyARM/mini2440/...2.交叉编译 tslib-1.4 安装移植tslib-1.4) (...则 cd 到开发板的根 目录里,然后执行: mknod /dev...
ubuntu下linux 开发环境的搭建以及arm平台的移植
ubuntu下linux 开发环境的搭建以及arm平台的移植_电子...安装触摸屏驱动库 tslib-1.4 新建文件夹 my_qt,在...PROTO=Tslib:/dev/input/touchscreen0 在开发板/...
Redhat-Enterprise5下配置QT-ARM-Linux交叉编译环境(Ti...
八、 移植到 Tiny6410 开发板上使用 telnet 访问.../etc/friendlyarm-ts-input.conf fi true ${TSLIB...#tar -zxvf tslib-1.4.tar.gz # ./autogen.sh ...
更多相关标签: