多點觸摸屏——電容屏驅動程序


上面博客中講解了電阻屏觸摸屏的驅動程序,它是一個單點觸摸的設備。現在大多數設備都支持了多點觸摸,多點觸摸的好處:

1)利用兩個手指可以放大或縮小圖片;

2)在一個觸摸屏上,可以同時供多人使用;

在上述這兩個簡單的例子中,單點觸摸就無法實現。必須使用多點觸摸,顧名思義多點觸摸就是在同一時間內,屏幕上可能有多個觸點,驅動程序只需要把這多個觸點的位置上報給應用程序就可以了。至於應用程序怎么處理,那是應用程序的事情。

驅動:上報多個觸點的位置

 現在來看一下,單點觸摸屏驅動程序與多點觸摸屏驅動程序有哪些差異?

 

驅動程序應該上報什么樣的數據?

單點:

按下:   BTN_TOUCH  ,1(表示按下)

在滑動的過程中需要上報觸點的位置:

for (; ;)

{

  ABS_X , x

  ABS_Y, y

  ABS_PRESSURE , 1(表示按下)

  BTN_TOUCH  ,1(在滑動過程中此值一直為1)

}

松開:   BTN_TOUCH  ,0(表示松開)

    ABS_PRESSURE , 0(表示松開)uod

多點:

多點觸摸屏驅動程序上報的數據也是比較簡單的,在同一時刻,有多少個點就上報多少個點的數據就可以了。

for(;;)

{

  t1時刻:上報p1位置

      上報p2位置

  t2 時刻:上報p3位置

      上報p4位置

  。。。。。。。。。。

  tn時刻:上報pn位置

}

問題來了,如何上報這些觸點的位置?觀察一下這幾個觸點,它們之間有什么聯系?

p1和p3屬於同一個手指上的划痕

p2和p4屬於同一個手指上的划痕

在上報位置的時候,是否需要將觸點之間的關系上報。由此上報數據就分為了兩種。type A 和type B

type A :只上報觸點位置,不關心觸點之間的關系

從上面可以看出,只是將觸點的位置上報上去了,至於觸點的關系不去處理。那誰去處理呢?

是由應用程序進行處理的。比如說p1和p3的位置比p1和p4的位置近,就認為p1和p3是一個手指滑動產生的,這僅僅是說明可能存在這種處理方式,在此不進行深究。

 在應用程序中需要計算,這種方式比較耗時。

typeB:上報觸點位置,也上報觸點之間的關系

 現在的多點觸摸屏一般來說都有一個控制IC,直接訪問控制IC就可以得到觸點的位置,並且得到觸點的關系。

比如說在t1時刻,去讀控制IC,可以得到p1的位置,p2的位置。p1的ID,假設此ID為0。p2的ID,假設此ID為1

在t2時刻,去讀控制IC,可以得到p3的位置,p4的位置。p3的ID,假設為此ID為0.(表示p1,p3屬於同一條划痕)。p4的ID,假設此ID為1(表示p2,p4屬於同一條划痕).

舉個例子:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM