新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux中基于Qt/Embeded觸摸屏驅動的設計

        嵌入式Linux中基于Qt/Embeded觸摸屏驅動的設計

        作者: 時間:2012-05-08 來源:網絡 收藏


        本文引用地址:http://www.104case.com/article/171493.htm

        由前面鼠標設備類的派生結構可知,添加驅 動接口先要通過調用QmouseDriverFactory或QmouseDriverPlugin 類根據相應的設備名生成相對應的 QWSCustomMouseHandler 對象,這些具體的設備 接口類都是由 QWSMouseHandler 類派生出來的,都 繼承了 QWSMouseHandler 類。然后再由系統調用QWSCustomMouseHandler:: readMouseData (),獲取到的定位和狀態信息都直接送到鼠標設備類的抽象層 QWSMouseHandler 類,Qt/Embedded 通過 QWSMouseHandler 類來實現對鼠標設備的操作。

        可以通過兩種方式添加設備驅動接口類,一種是 通過調用 QmouseDriverFactory 生成相應的 QWSCustomMouseHandler,一種是由 QmouseDriverPlugin 添 加生成相應的 QWSCustomMouseHandler。我們采用第 一種方案,在原有的接口 qwsmouselinuxtp_qws.cpp 上 進行修改,以適合新的設備驅動接口。

        首先,我們在 qwsmouselinuxtp_qws.cpp 修改,先 把 TS_EVENT 的結構改為相應設備的數據結構,再把 QWSTPMouseHandlerPrivate 函數中打開的設備 文件節點由/dev/ts 改為自己的設備文件/dev/ttyS1。然 后修改 readMouseData()函數,按自己的數據結構 讀取設備文件,傳遞給 QPoint 類對鼠標進行定位或轉 換為鼠標按鍵狀態。這個函數的操作可以參照windows 下的鼠標驅動源代碼。

        其實這樣修改以后,已經能正常使用設備 了,但是為了在該系統平臺上同時使用鼠標和觸摸屏 操作還必須完成兩個步驟:一個是要正確的設置QWS_ MOUSE_PROTO 環境變量,閱讀 qwindowsystem_ qws.cpp 中 QWSServer:: openMouse () 函數可知,該環 境變量可同時設置多個設備Driver> [: Device>],多個設備之間以空格隔開,由此可設置 QWS_MOUSE_PROTO=Auto TP, Qt/Embedded 通過該環境變量生成相應的鼠標和觸摸屏驅動接口,對設備進行操作。然后再對Qt/Embedded的鼠標驅動接口類的源代碼進行修改。由于觸摸屏是采用了系統的串口,而Qt/Embedded 自動搜索鼠標接口時發現串口正在工作中,就會把它當作一個鼠標設備進行操作,這就發生了設備沖突。因此,我們要在 qmousepc_qws.cpp 文件中將串口鼠標的子驅動去掉,找到函數 QWSPcMouseHandlerPrivate:: openDevices () 中的代碼如下,把它注釋掉就行了。

        else if (driver==Microsoft) {

        QString dev=device.isEmpty()? QString(/dev/ttyS0) : device;

        fd = open ( dev.latin1 (), O_RDWR | O_NDELAY );

        if ( fd >= 0 )

        sub[nsub++] = newQWSPcMouseSubHandler_ms(fd);

        } else if (driver==MouseSystems){

        QStringdev=device.isEmpty()?QString(/dev/ttyS0). : device;

        fd = open ( dev.latin1 (), O_RDWR | O_NDELAY );

        if ( fd >= 0 ) sub[nsub++] = new QWSPcMouseSubHandler_mous esystems (fd);

        }

        關于觸摸屏的校準,閱讀 qwsmouselinuxtp_qws.h 文件(代碼如下),可知在QWSMouseTPHandler 中已經實現了坐標的校準,一般直接讀取坐標的位置 和狀態即可。

        class QWSLinuxTPMouseHandler:

        public QWSCalibratedMouseHandler

        {

        };

        最后只需要在配置 Qt/Embedded 的安裝configure 加入選項-qt-mouse-linuxtp>,重新編譯,該 Qt/Embedded平臺上的應用程序即能夠按照定制的要求提供對觸摸屏的支持。

        4、 結束語

        本方案與 Qt 下普通鼠標驅動使用一致的框架,簡潔,條理清楚。已經成功的運用于電能質量監測儀平臺,并且運行穩定,定位準確,反應靈敏。友好的 GUI 界面和便捷的人機接口,使電能質量檢測儀更具亮點。同時,開放源代碼的優勢在此方案中得到充分的體現,通過大量地閱讀源代碼,可以充分的理解軟件工作機制并按用戶的要求進行定制,做出真正適合用戶的產品。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 太康县| 芒康县| 乐至县| 建水县| 含山县| 嘉祥县| 类乌齐县| 克什克腾旗| 横峰县| 安阳县| 临沭县| 牙克石市| 敦煌市| 红安县| 新绛县| 汉阴县| 嵊州市| 南投市| 郎溪县| 新疆| 余江县| 延庆县| 马鞍山市| 杂多县| 浮山县| 长岛县| 岑溪市| 聂荣县| 宁陕县| 汽车| 盐山县| 闵行区| 海门市| 诏安县| 仙居县| 滦南县| 神木县| 佛山市| 镶黄旗| 崇信县| 济南市|