上面博客中講解了電阻屏觸摸屏的驅動程序,它是一個單點觸摸的設備。現在大多數設備都支持了多點觸摸,多點觸摸的好處:
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屬於同一條划痕).
舉個例子: