MTK TP 電阻屏校準程式ts lib移植

2022-08-21 08:24:12 字數 2750 閱讀 5950

現今的專案中已經很少有使用電阻tp,但總有些奇怪的需求。如果專案中遇到需要校準電阻屏如何保證較快且較穩的除錯tp呢。這裡介紹使用ts_lib庫來進行除錯。

當然也可以使用一些常見的校準演算法,採集5點,但最終的公式應該是不變的:

x上報= kx*xraw+kyx*yraw+xoff                           (1)

y上報= ky*yraw+kxy*xraw+yoff                           (2)

利用這兩個公式可以校準大部分的螢幕,這裡kx,ky指的是ad採集的數值上與邏輯螢幕上的比例關係,而kyx指的是在按壓物理面同一高度,因為不同y值所帶來x採集值的變化。實際的效果就是,當你按壓同一高度時,發現上報的極左與極右兩個點高度數值不一樣。同理kxy一樣。外框為邊界,內框為內部的實際報點座標,通過該圖就能明白kxy與kyx的作用了。、

而xoff與yoff則很好理解了,就是一些非比例關係的偏差。

我們不需要知道ts_lib是怎樣來進行校準的,但是我們得知道如何去使用這個工具,首先我們得明白,使用這個工具時,參與k這些計算的x,y座標是哪種座標,在進行計算時,我們的底層需要上報的是ad數值的座標,範圍可能是0~4096或者0~65536,所以在公式裡面是xraw

,直接使用的原始資料,而不是根據螢幕轉換後的資料,好處當然是因為精度不會丟失,進行轉換,難免小數無效位會去掉。驅動**應在校準時直接上報ad數值,觸控時上報經過公式轉換的數值。

同時還要新增一些比如上報壓力的引數,不然可能校準**不通過,在彈起時還要上報壓力為0,這些是**邏輯。

如果說在移植後大家能夠直接使用adb shell來執行ts_calibretion這個程式,並且完全成功,恭喜你完成移植了。可以小試一把,然後將所得的引數填入你的驅動**驗證,會發現其效果還是槓槓的。校準圖如下:

當然其中會有些問題,較多的是open失敗,可以嘗試使用su許可權,並且chmod 777 /dev/graphics/fb0 ;chmod 777 /dev/input/event?(你的tp event),不知如何確定?很簡單,輸入getevent,按壓觸屏就知道了。

在./ts_calibretion之前,有必要將一些變數定義下,直接複製在adb shell執行:

export t_root=/system

export tslib_plugindir=$t_root/lib/ts

export tslib_tsdevice=/dev/input/event2

export tslib_fbdevice=/dev/graphics/fb0

export tslib_consoledevice=none

這是我的硬體引數,也可以直接寫入**中,免去這一步。

圖中左下角為顯示(200,1855),螢幕為1080*1920,那麼在tests/ ts_calibrate.c中修改:

get_sample (ts, &cal, 3, 200, yres - 55, "bot left");同理其他座標一樣,如圖:

該小段則為執行命令列。

在程式中我還做了一部分獲取ts_calibration列印出的最後引數,引數有a[0]~a[6]7個引數,a[6]為擴大倍數,因為很多時候核心不做浮點運算,所以將浮點計算轉換為整形計算更好,各引數對應如下:

kx  -> a[1]               ky   ->    a[5]

kyx ->    a[2]               kxy->     a[4]

xoff->     a[0]               yoff->      a[3]

當然可能會與網上說的對應有差異,請按照實際情況來匹配。最後乙個a[6]一般為65536。

獲得了校準引數後當然是儲存在檔案中,使得驅動以後開機能夠使用最新校準引數,其次是更新ram中正執行的引數。

移植步驟問題:

wince更改觸控螢幕校準程式介面提示

bsp中提供的觸控螢幕校準程式在個別裝置上用起來可能不太適合,比如說我們的裝置螢幕寬度只有240pixels,會有部分字元超出螢幕外側,原以為這是bsp的提供的程式,無原始碼沒辦法修改,這兩天才知道原來是可以修改的。之前在使用中發現觸控螢幕校準程式會識別系統的local,當系統是中文的時候它的介面是...

電阻屏較準

硬體 imx6 ads7846電阻屏 系統 android7.1 lcd顯示屏的座標原點為左上角 800,600 觸控螢幕的座標原點為右下角 xmin,ymin static void ads7846 report state struct ads7846 ts 獲取座標原點和最大值分別為 xmin...

使用ts calibrate校準觸控螢幕

使用ts lib包自帶的ts calibrate校準觸控螢幕非常簡單實用,但在基於xsever的gui應用環境下,有兩個問題存在 1.校準後必須重新啟動x,應用端才能生效。這樣處理使用者肯定不能接受,因為啟動一次機器畢竟耗時。2.在使用ts calibrate校準觸控螢幕時,要觸控5個點,這時如果g...