最近写完了程序后发现自己的触摸屏的在使用的过程中效果不是很好,抖动很严重。在网上搜索了一下相关的资料可以用tslib来去除抖动,在网上看到几篇相关的文章,根据我的实际情况把他整理了一下,希望对新手有所帮助。
我的触摸屏是四线电阻式的,抖动本身就很历害,可能是硬件上面设计的缺陷,我在驱动里加了去抖动的代码,效果还是让人不理想,一开始本身就没有用tslib来结合qte。单独是qte,没有打tslib的补丁。
先使用tslib-1.3 对触摸屏校正,tslib-1.3在网上很简单就可以下到:http://blogimg.chinaunix.net/blog/upfile/070622110703.bz2
下面是移植过程:
解压文件,生成tslib-1.3的目录
#cd tslib-1.3
#mkdir image //安装目录
#./autogen.sh //生成config文件
#echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
#./configure --host=arm-linux --cache-file=arm-linux.cache --prefix=$PWD/image --enable-inputapi=no
红色的部分是触摸屏驱动不支持ioctl操作
#make
为了防止出现“libtool:link: only absolute run-paths are allowed“的错误,在/tslib/plugins/Makefile里面找rpath,找到将其注释并加上绝对路径。
#LDFLAGS :=$(LDFLAGS) -rpath $(PLUGIN_DIR)
LDFLAGS :=$(LDFLAGS) -rpath `cd $(PLUGIN_DIR) && pwd`
#make install
编译完成后在image目录里就是需要移植到板内的文件。
我这边是采用nfs和主机连结的。
设置板内的环境变量
export LD_LIBRARY_PATH=/mnt/nfs/tslib/lib:$LD_LIBRARY_PATH
export QWS_MOUSE_PROTO=TPanel:/dev/h3600_tsraw //设备文件根据你的更改
export TSLIB_CALIBFILE=/mnt/nfs/tslib/pointercal
export TSLIB_CONFFILE=/mnt/nfs/tslib/etc/ts.conf
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/mnt/nfs/tslib/plugins
export TSLIB_TSDEVICE=/dev/h3600_tsraw //设备文件根据你的更改
export TSLIB_TSEVENTTYPE="H3600"
设置好环境变量就可以对触摸屏校准了,到目录=/mnt/nfs/tslib/bin下执行
#./ts_calibrate
屏摸上会出现5点校准,校准完成后看一下目录/mnt/nfs/tslib/下有没有生成pointercal文件
#ls /mnt/nfs/tslib/
需要生成pointercal文件才可以 如果没有生成,请确认你的这个目录下是否可写操作
然后运行test文件
#./ts_test
要求运行后触摸笔指哪,光标就跟到哪。就这算成功了。
比较遗憾的是我的这步却是失败的,触摸笔一按,光标就飞掉了,没能达到预期的效果,后来查了很多资料都没有完成。直到我把tslib-1.3换成tslib-0.1.1(http://blogimg.chinaunix.net/blog/upfile/070622110728.bz2)后却成功了。tslib-0.1.1编译过程与tslib-1.3类似,但是TSLIB_PLUGINDIR=/mnt/nfs/tslib/plugins目录需要换成TSLIB_PLUGINDIR=/mnt/nfs/tslib/lib/ts了。
不过运行了
#./ts_test
后抖动还是非常的历害,调整了参数还是不理想,后来在网上查到有人说可以把屏的金属外壳接地校果会好,但我把屏的金属外壳接地后校果没有什么改善,不过你们也可以试验一下。
后来就放弃了tslib与qte相结合的方式来支持触摸屏。不过把tslib与qte相结合的步骤列在下面,以便给用tslib校验效果不错的人参考:
先下载tslib-path 支持qte-3.3.4版本,如果在网上找不到tslib-path的朋友可以留言,留下你的email 我给你发过去。
给qte-3.3.4打补丁使其支持tslib
网上下的补丁文件有点问题用patch命令打补丁不完全,于是手工打补丁
按照patch的方法,增加两个文件到src/embedded/下,修改相应文件src/embedded/qmousedriverfactory_qws.cpp, src/embedded/qt_embedded.pri,configure
交叉编译
设置QTDIR
./configure –embedded arm –thread –qvfb –qconfig-large –qt-mouse-tslib –I$QTDIR/include –L$QTDIR/lib –lts
make
这里需要强制指定tslib库位置,否则,会报错找不到libts。
结果make仍然报错,说libts不兼容。
/usr/bin/ld: skipping incompatible /home/hjcai/qt-arm/qte-arm-tslib/lib/libts.so when searching for -lts
/usr/bin/ld: cannot find –lts
读错误信息发现是编译到src/moc出现上述问题,
于是先:
echo yes |./configure -embedded arm -thread
cd src/moc
make
然后再:
echo yes |./configure -embedded arm –thread –qt-mouse-tslib –I$QTDIR/include –L$QTDIR/lib
make
编译成功,将生成的QT库和编译t slib生成的目录全部 下到开发板。
设置QTE环境变量
export QTDIR=/qte-3.3.4
export LD_LIBRARY_PATH=$QTDIR/lib
tslib环境变量之前的一样。
如果你在编译过程程有什么问题都可以留言。大家一起交流一起进步。