嵌入式Linux中基于Qt/Embeded觸摸屏驅動的設計
由前面鼠標設備驅動類的派生結構可知,添加驅 動接口先要通過調用QmouseDriverFactory或QmouseDriverPlugin 類根據相應的設備名生成相對應的 QWSCustomMouseHandler 對象,這些具體的設備驅動 接口類都是由 QWSMouseHandler 類派生出來的,都 繼承了 QWSMouseHandler 類。然后再由系統(tǒng)調用QWSCustomMouseHandler:: readMouseData (),獲取到的觸摸屏定位和狀態(tài)信息都直接送到鼠標設備驅動類的抽象層 QWSMouseHandler 類,Qt/Embedded 通過 QWSMouseHandler 類來實現對鼠標設備的操作。
可以通過兩種方式添加設備驅動接口類,一種是 通過調用 QmouseDriverFactory 生成相應的 QWSCustomMouseHandler,一種是由 QmouseDriverPlugin 添 加生成相應的 QWSCustomMouseHandler。我們采用第 一種方案,在原有的接口 qwsmouselinuxtp_qws.cpp 上 進行修改,以適合新的觸摸屏設備驅動接口。
首先,我們在 qwsmouselinuxtp_qws.cpp 修改,先 把 TS_EVENT 的結構改為相應設備的數據結構,再把 QWSLinuxTPMouseHandlerPrivate 函數中打開的設備 文件節(jié)點由/dev/ts 改為自己的設備文件/dev/ttyS1。然 后修改 readMouseData()函數,按自己的數據結構 讀取設備文件,傳遞給 QPoint 類對鼠標進行定位或轉 換為鼠標按鍵狀態(tài)。這個函數的操作可以參照windows 下的鼠標驅動源代碼。
其實這樣修改以后,已經能正常使用觸摸屏設備 了,但是為了在該系統(tǒng)平臺上同時使用鼠標和觸摸屏 操作還必須完成兩個步驟:一個是要正確的設置QWS_ MOUSE_PROTO 環(huán)境變量,閱讀 qwindowsystem_ qws.cpp 中 QWSServer:: openMouse () 函數可知,該環(huán) 境變量可同時設置多個設備Driver> [: Device>],多個設備之間以空格隔開,由此可設置 QWS_MOUSE_PROTO=Auto LinuxTP, Qt/Embedded 通過該環(huán)境變量生成相應的鼠標和觸摸屏驅動接口,對設備進行操作。然后再對Qt/Embedded的鼠標驅動接口類的源代碼進行修改。由于觸摸屏是采用了系統(tǒng)的串口,而Qt/Embedded 自動搜索鼠標接口時發(fā)現串口正在工作中,就會把它當作一個鼠標設備進行操作,這就發(fā)生了設備沖突。因此,我們要在 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 文件(代碼如下),可知在QWSMouseLinuxTPHandler 中已經實現了坐標的校準,一般直接讀取坐標的位置 和狀態(tài)即可。
class QWSLinuxTPMouseHandler:
public QWSCalibratedMouseHandler
{
};
最后只需要在配置 Qt/Embedded 的安裝configure 加入選項-qt-mouse-linuxtp>,重新編譯,該 Qt/Embedded平臺上的應用程序即能夠按照定制的要求提供對觸摸屏的支持。
4、 結束語
本方案與 Qt 下普通鼠標驅動使用一致的框架,設計簡潔,條理清楚。已經成功的運用于電能質量監(jiān)測儀平臺,并且運行穩(wěn)定,定位準確,反應靈敏。友好的 GUI 界面和便捷的人機接口,使電能質量檢測儀更具亮點。同時,開放源代碼的優(yōu)勢在此方案中得到充分的體現,通過大量地閱讀源代碼,可以充分的理解軟件工作機制并按用戶的要求進行定制,做出真正適合用戶的產品。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)linux相關文章:linux教程
評論