北京時(shí)間11月05日消息,中國(guó)觸摸屏網(wǎng)訊, 為了使用功能強(qiáng)大的多點(diǎn)觸控設(shè)備,一種方案是上報(bào)用戶(hù)層所需的詳細(xì)的手指觸摸數(shù)據(jù)。這個(gè)文檔所描述的多點(diǎn)觸控協(xié)議可以讓內(nèi)核驅(qū)動(dòng)程序向用戶(hù)層上報(bào)任意多指的數(shù)據(jù)信息。
本文來(lái)自:http://www.zc28898.cn/touchscreen/news/front/201011/05-8161.html
使用說(shuō)明
任何一個(gè)手指的觸控?cái)?shù)據(jù)都是打包成 ABS event 包按順序發(fā)送,只有 ABS_MT event包能作為多點(diǎn)觸控?cái)?shù)據(jù)被識(shí)別,調(diào)用 input_mt_sync()函數(shù)可以產(chǎn)生一個(gè) SYN_MT_REPORT event ,這個(gè)函數(shù)接收并處理當(dāng)前手指的信息并準(zhǔn)備接收其它手指的觸控信息。最后調(diào)用 input_sync()函數(shù)上報(bào) EV_SYN/SYN_REPORT
event 完成一個(gè)包的開(kāi)始處理并準(zhǔn)備處理下一個(gè)包。
協(xié)議定義了 ABS_MT事件的屬性,這些事件被分為幾大類(lèi),充許只應(yīng)用其中的一部份,多點(diǎn)觸摸最小的事件集中應(yīng)包括 ABS_MT_POSITION_X和 ABS_MT_POSITION_X,這兩個(gè)事件用來(lái)描述多點(diǎn)觸摸中手指的觸摸軌跡。如果設(shè)備支持這兩個(gè)事件,那么 ABS_MT_TOUCH_MAJOR和 ABS_MT_WIDTH_MAJOR 分別被用來(lái)提供手指的大小和觸摸面積大小。
TOUCH 和 WIDTH參數(shù)給出了個(gè),想想如果一個(gè)手指按在玻璃上,透過(guò)玻璃你將看到兩個(gè)區(qū)域,一個(gè)是手指與玻璃接觸的區(qū)域,用 ABS_MT_TOUCH_MAJOR描述,一個(gè)是手指本身大小的區(qū)域, ABS_MT_WIDTH_MAJOR描述, 手指與玻璃接觸的面積要小于手指本身的大小,通過(guò)這兩個(gè)參數(shù),可以換算出手指的壓力。也可通過(guò) ABS_MT_PRESSURE參數(shù)直接提供手指的壓力。
除了 MAJOR這個(gè)參數(shù),還可以提供一個(gè) MINOR參數(shù),手指可以被認(rèn)為是一個(gè)橢圓, MAJOR和 MINOR可以認(rèn)為是這個(gè)橢圓的長(zhǎng)軸和短軸,橢圓的中心可以被 ORIENTATION這個(gè)參數(shù)描述。
ABS_MT_TOOL_TYPE參數(shù)用來(lái)描述觸摸工具的類(lèi)型(手指,觸控筆等)。不同的設(shè)備可能有一些其它的信息需要傳遞到用戶(hù)層。比如 ABS_MT_BLOB_ID用來(lái)描述長(zhǎng)方形的邊的集合,目前僅有少數(shù)設(shè)備可以被支持, ABS_MT_TRACKING_ID事件用來(lái)向上層報(bào)告硬件所采集的手指的觸摸軌跡。
下面是兩指觸摸的最小事件集 :
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_MT_REPORT //上報(bào)第一指坐標(biāo)數(shù)據(jù)
ABS_MT_POSITION_X
ABS_MT_POSITION_Y
SYN_MT_REPORT//上報(bào)第二指坐標(biāo)數(shù)據(jù)
SYN_REPORT
完成一次上報(bào)
協(xié)議解析
“觸摸”這個(gè)詞用來(lái)描述工具(手指,筆,等)直接接觸觸摸屏表面。
ABS_MT_TOUCH_MAJOR
接觸面的長(zhǎng)軸。
ABS_MT_TOUCH_MINOR
接觸面的短軸,如果是圓形接觸面,這個(gè)參數(shù)可以省略。
ABS_MT_WIDTH_MAJOR
接觸工具的長(zhǎng)軸。
ABS_MT_WIDTH_MINOR
接觸工具的切面的短軸,如果是圓形,此參數(shù)可以省略。
上面的四個(gè)參數(shù)用來(lái)描術(shù)接觸面的一些附加信息, ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR的比值可以用來(lái)反應(yīng)接觸時(shí)的壓力值。
ABS_MT_PRESSURE
接觸工具對(duì)接觸面的壓力大小,可以用來(lái)代替上面的四個(gè)參數(shù)。
ABS_MT_ORIENTATION
描述隨圓的轉(zhuǎn)動(dòng)趨勢(shì),這是一個(gè)抽相值,O值表示接觸面在平行與觸摸屏的Y軸,向左是負(fù)值,向右是正值,如果完全平行于X軸,則上向返回最大值。如果接觸面是圓形,則可以忽略這個(gè)參數(shù)。如果內(nèi)核不能獲得這個(gè)參數(shù)有有效值,但可以區(qū)分接觸面的長(zhǎng)短軸,這個(gè)功能還是可以被部份支持,在一些設(shè)備中, ABS_MT_ORIENTATION 的值只能是 0和1。
ABS_MT_POSITION_X
接觸面的形心的X坐標(biāo)值。
ABS_MT_POSITION_Y
接觸面的形心的Y坐標(biāo)值。
ABS_MT_TOOL_TYPE
觸摸工具的類(lèi)型
ABS_MT_BLOB_ID
用來(lái)標(biāo)識(shí)多邊形的邊的集合,大多數(shù)內(nèi)核不支持這個(gè)參數(shù)。
ABS_MT_TRACKING_ID
僅有少數(shù)設(shè)備支持,用來(lái)區(qū)別一個(gè)觸摸動(dòng)作的周期。
計(jì)算方法
一些設(shè)備將觸摸面作為一個(gè)矩形上報(bào),可以通過(guò)下面這些公式來(lái)計(jì)算出協(xié)議中所需要的信息。
ABS_MT_TOUCH_MAJOR := max(X, Y)
ABS_MT_TOUCH_MINOR := min(X, Y)
ABS_MT_ORIENTATION := bool(X 》 Y)
ABS_MT_ORIENTATION的取值范圍為0至1,用來(lái)標(biāo)識(shí)矩形接觸面偏向X軸或Y軸的程度。
觸摸軌跡
僅有少數(shù)設(shè)備可以明觸的標(biāo)識(shí)真實(shí)的 trackingID,多數(shù)情況下 trackingID只能來(lái)標(biāo)識(shí)一次觸摸動(dòng)作的過(guò)程。
手勢(shì)
多點(diǎn)觸摸指定的應(yīng)用是創(chuàng)建手勢(shì)動(dòng)作, TOUCH和 WIDTH參數(shù)經(jīng)常用來(lái)區(qū)別手指的壓力和手指間的距離,另外 MINOR類(lèi)的參數(shù)可以用來(lái)區(qū)別設(shè)備的接觸面的大小(點(diǎn)接觸還是面接觸) ,ORIENTATION可以產(chǎn)生旋轉(zhuǎn)事件。
說(shuō)明:
為了完作支持己有的應(yīng)用,多點(diǎn)觸控驅(qū)動(dòng)應(yīng)上報(bào)單點(diǎn)觸控相應(yīng)的 event,另外,所有的觸控事件需要通過(guò) input子系統(tǒng)向上傳遞。
目前內(nèi)核只有 bcm5974這么一個(gè)驅(qū)動(dòng)支持多點(diǎn)觸控,可以以此為例設(shè)計(jì)你的驅(qū)動(dòng)。
1) ABS_MT_APPROACH_X和 ABS_MT_APPROACH_Y在不同的觸摸設(shè)備中可以有不同的意義。
2)這個(gè)協(xié)議需要補(bǔ)充。
3)多點(diǎn)觸控的驅(qū)動(dòng)尚沒(méi)不成熟,到目前為此( 2009年4月) ,多點(diǎn)觸控協(xié)議還沒(méi)有 merged到內(nèi)核主開(kāi)發(fā)分支。