TsLib簡介:
在采用觸摸屏的移動終端中,觸摸屏性能的調試是個重要問題之一,因為電磁噪聲的緣故,觸摸屏容易存在點擊不准確、有抖動等問題。tslib是一個開源的程序,能夠為觸摸屏驅動獲得的采樣提供諸如濾波、去抖、校准等功能,通常作為觸摸屏驅動的適配層,為上層的應用提供了一個統一的接口。
Tslib較准原理:
在Qtopia 中,就觸摸屏的調試問題主要涉及到以下三個部分:觸摸屏驅動、Tslib、
QTslibTPanelHandlerPrivate 封裝。
觸摸屏驅動為與硬件直接接觸部分,為上層的Tslib 提供最原始的設備坐標數據,並可以配置采樣間隔、屏幕靈敏度等。采樣間隔決定了單位時間內的采樣數量,在其他參數不變的情況下,采樣間隔越小意味著單位時間內的采樣數量越多,也就意味著采樣越逼真、越不容易出現采樣信息丟失如輸入法書寫時丟筆劃的情況,但因為噪聲的影響,采樣間隔越小同時也意味著顯示出來的圖形的效果越差。
Tslib 為觸摸屏驅動和應用層之間的適配層,其從驅動處獲得原始的設備坐標數據,通過一系列的去噪、去抖、坐標變換等操作,來去除噪聲並將原始的設備坐標轉換為相應的屏幕坐標。
在tslib 中為應用層提供了2 個主要的接口ts_read()和ts_read_raw(),其中ts_read()為正常情況下的借口,ts_read_raw()為校准情況下的接口。【Linux公社 http://www.linuxidc.com 】
正常情況下,tslib 對驅動采樣到的設備坐標進行處理的一般過程如下:
raw device --> variance --> dejitter --> linear --> application
module module module
校准情況下,tslib 對驅動采樣到的數據進行處理的一般過程如下:
raw device--> Calibrate
QTslibTPanelHandlerPrivate 為tslib 提供了應用層封裝,為tslib 與應用層的接口部分。
在觸摸屏調試過程中,涉及到的參數主要有采樣間隔(驅動)、靈敏度(驅動)、去噪算法及約束(tslib)、去抖算法及約束(tslib)、ts 門檻值(tslib)。
由於各種相關期間的影響,在不同的硬件平台上,相關參數可能需要調整。以上參數的相互關系為:采樣間隔越大,采樣點越少,采樣越失真,但因為信息量少,容易出現丟筆劃等丟失信息情況,但表現出來的圖形效果將會越好;去噪算法跟采樣間隔應密切互動,采樣間隔越大,去噪約束應越小,反之采樣間隔越小,去噪約束應越大。去抖算法為相對獨立的
部分,去抖算法越復雜,帶來的計算量將會變大,系統負載將會變重,但良好的去抖算法可以更好的去除抖動,在進行圖形繪制時將會得到更好的效果;靈敏度和ts 門檻值為觸摸屏的靈敏指標,一般不需要進行變動,參考參考值即可
tslib 中定義了兩個結構體:
struct tsdev {
int fd;
struct tslib_module_info *list;
};
struct ts_sample {
int x;
int y;
unsigned int pressure;
struct timeval tv;
};
struct tsdev 表示的是觸摸屏設備,其中,fd 是打開的觸摸屏設備的文件描述符,list 是一個鏈表,在這個鏈表中依次存放著指向 tslib 的插件的指針。struct ts_sample 用於存放按鍵消息,x 和 y 表示按鍵的坐標位置,注意這兩個坐標都是以液晶屏幕的坐標系為基准的,pressure 表示的是按鍵的輕重程度,tv 是一個 struct timeval類型的變量,表示按鍵發生的時間。在基於 tslib 的程序中,所要用到的數據結構就只有上面這樣兩個。
Tslib的移植:
下載源碼,我在這裡用的是tslib-1.4.tar.gz
1.#cd tslib-1.4
2,對其配置,生成Makefile文件
#./configure --host=arm-linux-gcc --prefix=(自己的安裝目錄) --enable-debug=no
3.編譯並安裝 #make & make install
4.如果要運行測試程序還需配置如下參數:
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1//這個很重要
mkdir /data
touch /data/pointercal
5.如把配置命令寫入ts.config,要放在module pthres pmin=1之前
否則運行測試程序時會出現Segmentation fault錯誤,各個設置選項前也不能有空格
6.運行ts_calibrate進行校准
7.運行ts_test測試程序。
就這樣一切都OK了,接下來的就進入我們的觸摸屏之旅喽。
相關閱讀:Ubuntu 10.04下QT 4.3.5和tslib-1.4的安裝移植 http://www.linuxidc.com/Linux/2010-08/27572.htm