前段時間讓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中下載下傳,當然,使用編輯器轉換結束字元也無所謂。
指令如下:
編譯過程如下:
$ ./autogen.sh $ ./configure –host=arm-linux –prefix=/home/latelee/lib/tslib $ make $ make install
網上流行的編譯方法如下:
$ 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
有兩點不同:
一,沒有“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)。
配置檔案如下:
(該檔案的日期為上個月最後一天,離今已十餘天,為了這個花費的時日可不少。)
使用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 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)上的。
最後附圖一張,也算有圖有真相了:
【新浪微網誌】 張昺華--sky
【twitter】 @sky2030_
【facebook】 張昺華 zhangbinghua
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.