TSlib校準原理!
來源:互聯網
上載者:User
在採用觸控螢幕的移動終端中,觸控螢幕效能的調試是個重要問題之一,因為電磁雜訊的緣
故,觸控螢幕容易存在點擊不準確、有抖動等問題。
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 提供最原始的裝置座標資料,並可以
配置採樣間隔、螢幕靈敏度等。採樣間隔決定了單位時間內的採樣數量,在其他參數不變的
情況下,採樣間隔越小意味著單位時間內的採樣數量越多,也就意味著採樣越逼真、越不容
易出現採樣資訊丟失如IME書寫時丟筆劃的情況,但因為雜訊的影響,採樣間隔越小同時
也意味著顯示出來的圖形的效果越差。
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 門檻值為觸控螢幕的
靈敏指標,一般不需要進行變動,參考參考值即可。