在采用觸摸屏的移動終端中,觸摸屏性能的調試是個重要問題之一,因為電磁噪聲的緣故,觸摸屏容易存在點選不準确、有抖動等問題。
Tslib是一個開源的程式,能夠為觸摸屏驅動獲得的采樣提供諸如濾波、去抖、校準等 功能,通常作為觸摸屏驅動的适配層,為上層的應用提供了一個統一的 接口。在Qtopia 4.*版本中,預設的Tslib版本為Tslib 1.4。在Qtopia 2.*版本中,預設的Tslib版本為Tslib 1.3。
Tslib的官方下載下傳位址為一個CVS伺服器,下載下傳方法為:
#export CVSROOT=:pserver:[email protected]:/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
# 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門檻值為觸摸屏的靈敏名額,一般不需要進行變動,參考參考值即可。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0jclJnclZWZyZSOyUSO4UCM4USOlViM4USY4UCOlVCOyUiY4UCOhVyNlVyN4UiZiVCOlViN4UyN4USNlVSMhVCMhViNlViYpx2cUtSYzUyUTJVPldWYwZCM5YjMyMDO5czNwgjM3EjM2gTL9QWaj9jZpdmLj9CXlNWa2JXZTJWZX52bpR3YlxGbvN0Lc12bj5SZ2lGbuMXZjFGcz5yclNWa2JXZz5yYvw1LcpDc0RHaiojIsJye.gif)