Tslib校準原理linux
在採用觸摸屏的移動終端中,觸摸屏性能的調試是個重要問題之一,由於電磁噪聲的緣
故,觸摸屏容易存在點擊不許確、有抖動等問題。
Tslib是一個開源的程序,可以爲觸摸屏驅動得到的採樣提供諸如濾波、去抖、校準等功
能,一般做爲觸摸屏驅動的適配層,爲上層的應用提供了一個統一的接口。在Qtopia 4.*版本
中,默認的Tslib版本爲Tslib 1.4。在Qtopia 2.*版本中,默認的Tslib版本爲Tslib 1.3。
Tslib 的官方下載地址爲一個CVS 服務器,下載方法爲:
#export CVSROOT=:pserver:cvs@pubcvs.arm.Linux.org.uk:/mnt/src/cvsroot
#cvs login
#cvs co tslib
得到Tslib 的源代碼後,須要首先進行編譯,下面以Tslib 1.4 爲例介紹Tslib 的編譯過程:
#cd ../tslib1.4
//指定交叉編譯工具
# export CC=/usr/local/ arm-Linux-4.1.1 /bin/arm-Linux-gcc
//生成config 文件
//autogen.sh
#export PATH=/usr/local/ arm-Linux-4.1.1/bin:$PATH
//避免檢查ac_cv_func_malloc_0_nonnull
#echo "ac_cv_func_malloc_0_nonnull=yes" >arm-Linux.cache
//配置目標機、緩衝、安裝路徑
#./configure --host=arm-Linux --cache-file=arm-Linux.cache --prefix=/opt/tslib1.4
# make
# make install
這樣就能夠在/opt/tslib1.4 目錄下看到相關的應用程序、共享庫、配置文件等了,須要說
明的是在嵌入式中,因爲觸摸屏的種類多樣、質量不一,採用Tslib 的參考配置每每沒法得到
較好的觸摸屏觸摸效果,一樣須要通過大量的測試才能獲得滿意的配置參數,惡劣狀況下,
甚至須要對Tslib 的算法進行進一步的優化。
下面就Tslib 的環境變量、配置文件等進行簡要的介紹。
1. 環境變量
爲了實現Tslib 的正確運行,須要對以下的Tslib 的環境變量進行配置:
TSLIB_TSDEVICE //觸摸屏設備文件名。
Default (no inputapi): /dev/touchscreen/ucb1x00
Default (inputapi): /dev/input/event0
TSLIB_CALIBFILE //校準的數據文件,由ts_calibrate 校準程序生成。
Default: ${sysconfdir}/pointercal
TSLIB_CONFFILE //配置文件名。
Default: ${sysconfdir}/ts.conf
TSLIB_PLUGINDIR //插件目錄
Default: ${datadir}/plugins
TSLIB_CONSOLEDEVICE //控制檯設備文件名
Default: /dev/tty
TSLIB_FBDEVICE //設備名
Default: /dev/fb0
以上環境變量在實際開發中的實際配置能夠根據實際狀況決定。
2. 配置文件
除了環境變量之外,Tslib 的配置文件ts.conf 一樣是個十分重要的部分,在ts.conf 中配置
了須要加載的插件、插件加載順序以及插件的一些約束參數,這些配置參數對觸摸屏的觸摸
效果具備十分重要的影響。
下面是Tslib 1.4 中的ts.conf 的參考配置:
# Uncomment if you wish to use the Linux input layer event interface
# module_raw input
236
# Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d
# module_raw collie
# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860
# module_raw corgi
# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface
# module_raw ucb1x00
# Uncomment if you're using an HP iPaq h3600 or similar
# module_raw h3600
# Uncomment if you're using a Hitachi Webpad
# module_raw mk712
# Uncomment if you're using an IBM Arctic II
# module_raw arctic2
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear
其中pthres 爲Tslib 提供的觸摸屏靈敏度門檻插件;variance 爲Tslib 提供的觸摸屏濾波算
法插件;dejitter 爲Tslib 提供的觸摸屏去噪算法插件;linear 爲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 門檻值爲觸摸屏的
靈敏指標,通常不須要進行變更,參考參考值便可。算法
/configure CC=arm-linux-gcc CXX=arm-linux-g++ --host=arm-linux --target=arm --enable-static --disable-input --disable-arctic2 --disable-mk712 --disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-h2200 --with-gnu-ld --prefix=/opt --cache-file=arm-linux.autogen --enable-inputapi=no ac_cv_func_malloc_0_nonnull=yesapi