新聞中心

        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 邹平县| 靖江市| 太原市| 新和县| 博白县| 垦利县| 山东| 宜都市| 托里县| 泌阳县| 六枝特区| 独山县| 昭通市| 汉沽区| 奉贤区| 小金县| 泸定县| 垦利县| 金湖县| 临城县| 岳西县| 长海县| 乌拉特中旗| 丹寨县| 古浪县| 石嘴山市| 灵台县| 吉安市| 博乐市| 惠州市| 调兵山市| 三原县| 三门县| 南涧| 泰顺县| 丹凤县| 辽阳市| 界首市| 旺苍县| 申扎县| 陆良县|