Linux與Android 多點觸摸協議_觸控螢幕論文_技術學院_中國觸控螢幕網

2021-01-11 中國觸控螢幕網

【導讀】:單點觸摸信息是以ABS承載並按一定順序發送,多點觸摸信息則是以ABS_MT承載並按一定順序發送,然後通過調用input_mt_sync()產生一個 SYN_MT_REPORT event來標記一個點的結束,告訴接收方接收當前手指的信息並準備接收其它手指的觸控信息。

    為了使用功能強大的多點觸控設備,就需要一種方案去上報用戶層所需的詳細的手指觸摸數據。這個文檔所描述的多點觸控協議可以讓內核驅動程序向用戶層上報任意多指的數據信息。

    使用說明

    單點觸摸信息是以ABS承載並按一定順序發送,如BTN_TOUCH、ABS_X、ABS_Y、SYNC。而多點觸摸信息則是以ABS_MT承載並按一定順序發送,如ABS_MT_POSITION_X、ABS_MT_POSITION_Y,然後通過調用input_mt_sync()產生一個 SYN_MT_REPORT event來標記一個點的結束,告訴接收方接收當前手指的信息並準備接收其它手指的觸控信息。最後調用 input_sync()函數上報觸摸信息開始動作並告訴接收方開始接收下一系列多點觸摸信息。

    協議定義了一系列ABS_MT事件,這些事件被分為幾大類,充許只應用其中的一部份,多點觸摸最小的事件集中應包括ABS_MT_TOUCH_MAJOR、ABS_MT_POSITION_X和 ABS_MT_POSITION_Y,以此來實現多點觸摸。如果設備支持ABS_MT_WIDTH_MAJOR這個事件,那麼此事件可以提供手指觸摸接觸面積大小。觸摸方向等信息可以由ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MINOR and ABS_MT_ORIENTATION提供。ABS_MT_TOOL_TYPE提供觸摸設備的類別,如手或是筆或是其它。最後有些設備可能會支持ABS_MT_TRACKING_ID,用來支持硬體跟蹤多點信息,即該點屬於哪一條線等。

    下面是兩點觸摸支持的最小事件集序列:

    ABS_MT_TOUCH_MAJOR

    ABS_MT_POSITION_X

    ABS_MT_POSITION_Y

    SYN_MT_REPORT      //上報第一個點

    ABS_MT_TOUCH_MAJOR

    ABS_MT_POSITION_X

    ABS_MT_POSITION_Y

    SYN_MT_REPORT      //上報第二個點

    SYN_REPORT         //開始動作

    Event 原語

    「接觸」一詞用來描述一個物體直接碰到另一個物體的表面。

    ABS_MT_TOUCH_MAJOR描述了主接觸面的長軸,它和X,Y同一個單位,如果一個面的解析度為X*Y,則ABS_MT_TOUCH_MAJOR的最大值為sqrt(X^2+Y^2)

    ABS_MT_TOUCH_MINOR描述了接觸面的短軸,如果接觸面是圓形,它可以不用。

    ABS_MT_WIDTH_MAJOR描述了接觸工具的長軸

    ABS_MT_WIDTH_MINOR描述了接觸工具的短軸

    ABS_MT_TOUCH_MAJOR := max(X, Y)

    ABS_MT_TOUCH_MINOR := min(X, Y)

    ABS_MT_ORIENTATION := bool(X > Y)

    以上四個參數可以用來生成額外的觸摸信息,如ABS_MT_TOUCH_MAJOR/ABS_MT_WIDTH_MAJOR的比率可以用來描述壓力。

    ABS_MT_ORIENTATION

    ABS_MT_POSITION_X接觸面的中心點X坐標

    ABS_MT_POSITION_Y接觸面的中心點Y坐標

    ABS_MT_TOOL_TYPE描述接觸工具類型,很多內核驅動無法區分此參數如手指及筆,如果是這樣,該參數可以不用,協議目前支持MT_TOOL_FINGER和MT_TOOL_PEN兩種類型。

    ABS_MT_BLOB_ID形狀集ID,集合幾個點以描述一個形狀,很多驅動沒有形狀屬性,此參數可以不用。

    ABS_MT_TRACKING_ID描述了從接觸開始到釋放的整個過程的集合,如果設備不支持,此參數可是不用。

    觸摸軌跡

    僅有少數設備可以明觸的標識真實的 trackingID,多數情況下 trackingID只能來標識一次觸摸動作的過程。

    手勢

    多點觸摸指定的應用是創建手勢動作, TOUCH和 WIDTH參數經常用來區別手指的壓力和手指間的距離,另外 MINOR類的參數可以用來區別設備的接觸面的大小(點接觸還是面接觸),ORIENTATION可以產生旋轉事件。

    在Linux內核支持的基礎上,Android在其2.0源碼中加入多點觸摸功能。由此觸控螢幕在Android的frameworks被完全分為2種實現途徑:單點觸控螢幕的單點方式,多點觸控螢幕的單點和多點方式。

    在Linux的input.h中,多點觸摸功能依賴於以下幾個主要的軟體位:

    ……

    #define SYN_REPORT0

    #define SYN_CONFIG1

    #define SYN_MT_REPORT2

    ……

    #define ABS_MT_TOUCH_MAJOR0x30

    #define ABS_MT_TOUCH_MINOR0x31

    #define ABS_MT_WIDTH_MAJOR0x32

    #define ABS_MT_WIDTH_MINOR0x33

    #define ABS_MT_ORIENTATION0x34

    #define ABS_MT_POSITION_X0x35

    #define ABS_MT_POSITION_Y0x36

    #define ABS_MT_TOOL_TYPE0x37

    #define ABS_MT_BLOB_ID0x38

    ……

    在Android中對應的軟體位定義在RawInputEvent.java中:

    ……

    public class RawInputEvent {

    ……

 public static final int CLASS_TOUCHSCREEN_MT = 0x00000010;

    ……

    public static final int ABS_MT_TOUCH_MAJOR = 0x30;

    public static final int ABS_MT_TOUCH_MINOR = 0x31;

    public static final int ABS_MT_WIDTH_MAJOR = 0x32;

    public static final int ABS_MT_WIDTH_MINOR = 0x33;

    public static final int ABS_MT_ORIENTATION = 0x34;

    public static final int ABS_MT_POSITION_X = 0x35;

    public static final int ABS_MT_POSITION_Y = 0x36;

    public static final int ABS_MT_TOOL_TYPE = 0x37;

    public static final int ABS_MT_BLOB_ID = 0x38;

    ……

    public static final int SYN_REPORT = 0;

    public static final int SYN_CONFIG = 1;

    public static final int SYN_MT_REPORT = 2;

    ……

    在Android中,多點觸摸的實現方法在具體的代碼實現中和單點是完全區分開的。在Android代碼的EventHub.cpp中,單點屏和多點屏由如下代碼段來判定:

    int EventHub::open_device(const char *deviceName)

    {

    ……

    if (test_bit(ABS_MT_TOUCH_MAJOR, abs_bitmask)

    && test_bit(ABS_MT_POSITION_X, abs_bitmask)

    && test_bit(ABS_MT_POSITION_Y, abs_bitmask)) {

    device->classes |= CLASS_TOUCHSCREEN | CLASS_TOUCHSCREEN_MT;

    //LOGI("It is a multi-touch screen!");

    }

    //single-touch?

    else if (test_bit(BTN_TOUCH, key_bitmask)

    && test_bit(ABS_X, abs_bitmask)

    && test_bit(ABS_Y, abs_bitmask)) {

    device->classes |= CLASS_TOUCHSCREEN;

    //LOGI("It is a single-touch screen!");

    }

    ……

    }

    我們知道,在觸控螢幕驅動中,通常在probe函數中會調用input_set_abs_params給設備的input_dev結構體初始化,這些input_dev的參數會在Android的EventHub.cpp中被讀取。如上可知,如果我們的觸控螢幕想被當成多點屏被處理,只需要在驅動中給input_dev額外增加以下幾個參數即可:

    input_set_abs_params(mcs_data.input, ABS_MT_POSITION_X, pdata->abs_x_min,  pdata->abs_x_max, 0, 0);

    input_set_abs_params(mcs_data.input, ABS_MT_POSITION_Y, pdata->abs_y_min,  pdata->abs_y_max, 0, 0);

    input_set_abs_params(mcs_data.input, ABS_MT_TOUCH_MAJOR, 0, 15, 0, 0);

    //相當於單點屏的ABX_PRESSURE

    input_set_abs_params(mcs_data.input, ABS_MT_WIDTH_MAJOR, 0, 15, 0, 0);

    //相當於單點屏的ABS_TOOL_WIDTH

    由於多點觸摸技術需要採集到多個點,然後再一起處理這些點,所以在軟體實現中需要保證每一波點的準確性和完整性。因此,Linux內核提供了input_mt_sync(struct input_dev * input)函數。在每波的每個點上報後需要緊跟一句input_mt_sync(), 當這波所有點上報後再使用input_sync()進行同步。

    例如一波要上報3個點:

    ……

    input_mt_sync(input);

    ……

    input_mt_sync(input);

    ……

    input_mt_sync(input);

    input_sync(input);

    註:即使是僅上報一個點的單點事件,也需要一次input_my_sync。

相關焦點

  • 四大觸控螢幕技術工作原理及特點分析_觸控螢幕原理_技術學院_中國觸摸...
    用戶在觸控螢幕幕時,手指就會擋住經過該位置的橫豎兩條紅外線,因而可以判斷出觸摸點在屏幕的位置。任何觸摸物體都可改變觸點上的紅外線而實現觸控螢幕操作。 早期觀念上,紅外觸控螢幕存在解析度低、觸摸方式受限制和易受環境幹擾而誤動作等技術上的局限,因而一度淡出過市場。此後第二代紅外屏部分解決了抗光幹擾的問題,第三代和第四代在提升解析度和穩定性能上亦有所改進,但都沒有在關鍵指標或綜合性能上有質的飛躍。
  • 觸控螢幕技術是誰發明的_觸控螢幕技術的發展歷程
    什麼是觸控螢幕技術   為了操作上的方便,人們用觸控螢幕來代替滑鼠或鍵盤。觸控螢幕由觸摸檢測部件和觸控螢幕控制器組成,觸摸檢測部件安裝在顯示器屏幕前面,用於檢測用戶觸摸位置,然後將相關信息傳送至觸控螢幕控制器;而觸控螢幕控制器的主要作用是從觸摸點檢測裝置上接收觸摸信息,並將它轉換成觸點坐標,再傳送給CPU。它同時能接收CPU發來的命令並加以執行。   觸控螢幕由安裝在顯示器屏幕前面的檢測部件和觸控螢幕控制器組成。
  • 用腳操作的多點觸控螢幕
    一般的觸控螢幕往往都會支持手指觸摸和觸控筆操作,不知大家有沒有想過用腳控制的觸控螢幕,或許應該叫觸控地板。據報導,德國Hasso-Plattner學院近日就研發出了一種多點觸控地板Multitoe,該地板採用了與傳統觸控螢幕一樣的受抑內全反射FTIR技術。通常狀況下,光束在照向觸控螢幕後將產生反射。
  • 分析電容式觸控螢幕與電阻式觸控螢幕的區別
    ,中國觸控螢幕網訊, 電阻式觸控屏幕在工作時每次只能判斷一個觸控點,如果觸控點在兩個以上,就不能做出正確的判斷了,所以電阻式觸控螢幕僅適用於點擊、拖拽等一些簡單動作的判斷。而電容式觸控螢幕的多點觸控,則可以將用戶的觸摸分解為採集多點信號及判斷信號意義兩個工作,完成對複雜動作的判斷。    本文來自:http://www.51touch.com/hmi/news/dynamic/201308/12-24232.html  使用兩根手指的拉伸、換位即可在屏幕上完成諸如放大、旋轉這樣趣味十足的操作,這在電容式觸控螢幕出現之前,幾乎是不可想像的。
  • 表面聲波觸控螢幕工作原理_表面聲波觸控螢幕特點
    不難看出,接收信號集合了所有在軸方向歷經長短不同路徑回歸的聲波能量,它們在y軸走過的路程是相同的,但在x軸上,最遠的比最近的多走了兩倍x軸最大距離。因此這個波形信號的時間軸反映各原始波形疊加前的位置,也就是X軸坐標。   在沒有觸摸的時候,接收信號的波形與參照波形完全一樣。
  • 表面聲波觸控螢幕優缺點_表面聲波觸控螢幕應用
    打開APP 表面聲波觸控螢幕優缺點_表面聲波觸控螢幕應用 網絡整理 發表於 2020-04-29 16:28:55   表面聲波觸控螢幕優點   1、光學性能最好。
  • 劍橋大學研究人員創造了一個不用觸摸的觸控螢幕
    目前人們普遍使用的觸控螢幕,其表面可能充滿了病毒和細菌,有可能讓人生病。在當前世界大環境下,這是一個特別重要的問題,因為冠狀病毒大流行導致很多人死亡。劍橋大學的研究人員一直在研究一種新型的觸控螢幕,這種不需要觸摸的產品被稱為 "無觸摸觸控螢幕",是專門為汽車使用而開發的產品。
  • 液晶觸控螢幕原理是什麼?
    當手指觸控螢幕幕時,兩層導電層在觸摸點位置就有了接觸,電阻發生變化,在X和Y兩個方向上產生信號,然後送觸控螢幕控制器。控制器偵測到這一接觸並計算出(X,Y)的位置,再根據模擬滑鼠的方式運作。這就是電阻技術觸控螢幕的最基本的原理。
  • 觸控螢幕的三個特性,視覺效果有影響關鍵點!
    觸控螢幕的三個特性,視覺效果有影響關鍵點。觸控螢幕的透明程序和坐標系統都有著相關連結,下面小編為你介紹觸控螢幕的三個特性,視覺效果有影響關鍵點。觸控螢幕的第一個特性:透明,它直接影響到觸控螢幕的視覺效果。透明有透明的程度問題,紅外線技術觸控螢幕和表面聲波觸控螢幕只隔了一層純玻璃,透明可算佼佼者,其它觸控螢幕這點就要好好推敲一番,「透明」,在觸控螢幕行業裡,只是個非常泛泛的概念,很多觸控螢幕是多層的複合薄膜,僅用透明一點來概括它的視覺效果是不夠的,它應該至少包括四個特性:透明度、色彩失真度、反光性和清晰度,還能再分,比如反光程度包括鏡面反光程度和衍射反光程度,只不過觸控螢幕表面衍射反光還沒到達CD 盤的程度,對用戶而言
  • 2020-2026年中國觸控螢幕市場深度調查研究與發展趨勢分析報告
    中國產業調研網發布的2020-2026年中國觸控螢幕市場深度調查研究與發展趨勢分析報告認為,近年來,隨著智慧型手機、平板電腦等智能終端產品的普及推廣,全球觸控顯示產品和技術發展進步較快,產業規模不斷提升。
  • 如何測量電容式觸控螢幕的實際信噪比
    【導讀】:不好的信噪比會影響系統的魯棒性,造成假觸摸和位置跳動。手指靠近觸控螢幕時會干擾相交的兩個透明電極的邊緣電場。這種電容稱為互電容。這就改變了傳感器的電容。交叉點發生在發射和接收電極直角交叉處。在手機觸控螢幕上有好幾百個這樣的交叉點。
  • 偉大的觸控螢幕:領先科幻世界二十年!
    1965年,這位普通的計算機研究員在《電子通報(Electronics— Letters)》雜誌上發表了一篇簡短的論文《觸摸面板:一種新的電腦輸入設備》,並在裡面描述了自己對電容式觸控螢幕的設想:屏幕的主體是一塊複合的玻璃屏,內表面塗有一層名為ITO的金屬氧化物,四角有四個電極。
  • 四線電阻觸控螢幕校準算法的實現
    一、四線電阻觸控螢幕簡介   四線電阻觸控螢幕,是要求輸入靈活性和個人化應用的理想觸摸解決方案:採用一體成型出線技術,和觸控螢幕專用基材,保證觸控螢幕精確、穩定、可靠和反應靈敏。四線電阻觸控螢幕,完全密封處理,徹底防水、防塵、防汙染,符合IP65密封標準。具有低成本、低功耗和可以提供最小尺寸的技術特性。
  • 卡爾曼濾波在電容觸控螢幕坐標定位中的應用
    摘要:電容觸控螢幕在數據採集過程中不可避免地會產生系統噪聲,為了提高觸控螢幕坐標定位的精確度,在對原始數據進行定位分析前,首先採用卡爾曼濾波方法對數據進行處理,再將數據在MATLAB中用定位算法計算出觸控螢幕的坐標值,並繪製坐標點圖。
  • 小Nan碎碎念:Touch的秘密 淺談觸控螢幕原理(組圖)
    2007年,蘋果iPhone及iPodTouch的問世讓多點觸摸技術迅速捕獲了全球大眾的心,給用戶帶來獨特而又神奇的應用體驗,使得觸控螢幕讓整個市場大放異彩。不僅行動裝置廠商趨之若鶩,幾乎所有的PC製造廠商也都在拼命追趕觸控螢幕的潮流。目前在顯示器市場中,三星、戴爾、優派、長城、AOC都已推出了支持多點觸控操作的觸控螢幕液晶顯示器,這也讓整個市場都見識到了觸控螢幕的前途無量。而對於觸控螢幕的技術來說,相信大多數人還都不了解。對此感興趣的朋友可要注意了,今天小Nan就為大家淺談觸控螢幕的原理、類型以及特點。
  • 全貼合技術OGS觸控螢幕在智能機市場擴大,電阻式觸控螢幕空間壓縮
    一塊玻璃同時起到保護玻璃和觸摸傳感器的雙重作用    前景:從技術層面來看,OGS技術較之目前主流的G/G觸控技術具備以下優勢:結構簡單,輕、薄、透光性好;由於省掉一片玻璃基板以及貼合工序,利於降低生產成本、提高產品良率。
  • 觸控螢幕工作原理之入門解析
    在我開始真正研究觸控螢幕工作原理之前,我認為在「swipable」 現象(指滑屏)背後都存在著一個通用技術。但事實卻剛好相反,就我所知將近有6種,而其中的大部分尚在不斷的研究中。最常用的兩個系統是電阻式和電容式觸控螢幕。為簡單起見,我在這裡將重點闡述這兩種系統,便於大家的理解。
  • 可識別物體的觸控螢幕:TP行業下個變革點
    前幾天有個項目「可識別物體的觸控螢幕技術」來參加微路演。這項技術類似於微軟的PixelSense,但相比微軟技術具有重量更小、更優的結構設計、更低的零件成本和易於組裝維修等優勢。這個技術具體是什麼?簡單來講,就是使觸控螢幕能夠識別出放在屏幕上的手指、手及物品,同時支持50多點的觸摸。還是不懂?
  • 電阻式觸控螢幕的結構和實現原理介紹
    通常有4線、5線、7線和8線觸控螢幕來實現,本文詳細介紹了SAR結構、四種觸控螢幕的組成結構和實現原理,以及檢測觸摸的方法。 電阻式觸控螢幕是一種傳感器,它將矩形區域中觸摸點(X,Y)的物理位置轉換為代表X坐標和Y坐標的電壓。很多LCD模塊都採用了電阻式觸控螢幕,這種屏幕可以用四線、五線、七線或八線來產生屏幕偏置電壓,同時讀回觸摸點的電壓。
  • 電容式觸控螢幕原理揭秘(三)
    電容式觸控螢幕支持多點觸控,操作更加直觀、更具趣味性。   2.不易誤觸。由於電容式觸控螢幕需要感應到人體的電流,只有人體才能對其進行操作,用其他物體觸碰時並不會有所相應,所以基 相比傳統的電阻式觸控螢幕,電容式觸控螢幕的優勢主要有以下幾個方面:   1.操作新奇。電容式觸控螢幕支持多點觸控,操作更加直觀、更具趣味性。