tslib移植

轉載地址:http://blog.csdn.net/hnust_cool/article/details/7482427

前段時間讓Tslib搞暈頭了,原來一切都是版本惹的禍。本文只是一個隨筆,隨筆者,隨意用筆寫下心得而已,因此不必較真。正如我所欣賞的“乘興而來,興盡而返”一樣。——估計當年王子猷是賞完了夜景,興致也完了,就回家了。

閒話少提。

搞tslib時,出現了許多錯誤,像

No raw modules loaded.
ts_config: Success

selected device is not a touchscreen I understand

ts_read: Invalid argument

等等錯誤,在網上找了很多資料,可惜都沒有適合我的。

現在用的tslib是使用git下載的。注意,最好使用Linux平臺下載,因爲tslib中包括了腳本文件(如autogen.sh),而Windows與Linux處理一行的結束字符是不相同的,因此請在Linux中下載,當然,使用編輯器轉換結束字符也無所謂。
命令如下:

$ git clone https://github.com/kergoth/tslib

在Linux下安裝git可參考:Linux移植隨筆:git的使用。

編譯過程如下:

$ ./autogen.sh
$ ./configure --host=arm-linux --prefix=/home/latelee/lib/tslib
$ make
$ make install

網上流行的編譯方法如下:

$ ./autogen.sh
$ echo "ac_cv_func_malloc_0_nonnull=yes"> tmp.cache
$ ./configure --host=arm-linux --cache-file=tmp.cache --enable-inputapi=no --prefix=/home/latelee/lib/tslib
$ make
$ make install

有兩點不同:

一,沒有“ac_cv_func_malloc_0_nonnull=yes”,編譯過程沒有報錯;

二,去掉“–enable-inputapi=no”,網上說法不在此處提及,單看README文件的描述:

TSLIB_TSDEVICE   TS device file name.
                              Default (non inputapi): /dev/touchscreen/ucb1x00
                              Default (inputapi): /dev/input/event0

板子的觸摸屏設備文件正是/dev/input/event0(默認值,可以在配置文件ts.conf中設置這個環境變量)。
make install後,會在/home/latelee/lib/tslib目錄生成4個子目錄:

include lib etc bin

生成的庫位於lib中,該目錄下還有一個子目錄ts,它包含了許多校準用到的庫(如input.so等)。etc下的ts.conf爲配置文件,bin目錄下爲校準、測試工具(如校準的ts_calibrate,測試用的ts_test)。
配置文件如下:

# Late Lee 2011-03-31 for touchscreen test
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

(該文件的日期爲上個月最後一天,離今已十餘天,爲了這個花費的時日可不少。)

使用TSLIB_ROOT這個變量比較好,因爲只要將編譯生成後的tslib文件夾複製到某個位置,再修改這個變量即可,其它的不用修改。
配置文件ts.conf內容如下:

module_raw input

module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

module_raw有許多種,這裏只使用input(即Linux的input子系統,設備文件名稱爲/dev/input/event0),其它的刪除掉。後面的幾個module還沒有深入瞭解,它們使用的庫就在tslib/lib/ts中,最後三個模塊的字面意思是“方差(濾波)”、“去抖動(去噪)”、“線性(座標變換)”,對這些東西不瞭解,不發表意見。

運行校準程序,觸摸屏依次出現5個點,依次點擊之:

# ./ts_calibrate
xres = 240, yres = 320
Took 14 samples...
Top left : X =  276 Y =  795
Took 12 samples...
Top right : X =  736 Y =  796
Took 11 samples...
Bot right : X =  735 Y =  248
Took 7 samples...
Bot left : X =  274 Y =  247
Took 7 samples...
Center : X =  505 Y =  524
-33.156189 0.304019 -0.000832
369.119629 0.000871 -0.401456
Calibration constants: -2172924 19924 -54 24190624 57 -26309 65536

生成的校準文件名爲pointercal,位於/etc目錄下。

如果想運行ts的測試程序,在tslib/bin目錄下輸入

./ts_test

即可。

屏幕最上方會出現三個按鈕,分別爲“Drag”、“Draw”和“Quit”,默認是第一個,因此,用觸摸筆點擊任何一處,十字光標便會到那裏。
下面是點擊“Draw”按鈕並用觸摸筆寫字的提示信息的一小部分:

1302603922.770286:     98    302      1
1302603922.800295:    107    300      1
1302603922.815277:    118    297      1
1302603922.830291:    130    294      1
1302603922.845288:    143    290      1
1302603922.845288:    151    288      1
1302603922.875166:    168    284      0

第一列爲timeval結構體的兩個成員:tv_sec和tv_usec,中間兩列分別是X和Y的座標,最後爲pressure,這裏可以理解成“觸摸事件”,爲1表示觸摸筆點擊了(接觸)屏幕,爲0表示觸摸筆離開了屏幕(這裏出現很多的1是正常的,因爲寫字過程中筆沒有離開觸摸屏——這是廢話,請無視之)。
點擊屏幕上“Quit”或按Ctrl+C可退出該程序。
文中前面安裝Tslib的路徑是主機(又稱開發主機、服務器、host)上的,後面與Tslib環境變量有關的是開發板(又稱目標板、板子、target)上的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章