Qt/Embedded在嵌入式Linux系統(tǒng)中的應(yīng)用
對(duì)應(yīng)于鼠標(biāo)類設(shè)備的實(shí)現(xiàn)位于src/kernel/qmouse_qws.cpp中。由于觸摸屏在實(shí)現(xiàn)原理上存在著a/d量化誤差的問題,因此所有的觸摸屏接口實(shí)現(xiàn)類需要從特殊的qcalibratedmousehandler繼承,并獲得校正功能。 qt/embedded 2.x中對(duì)于鍵盤響應(yīng)的實(shí)現(xiàn)函數(shù)位于src/kernel/qkeyboard_qws.cpp中。在qkeyboard_qws.h中,定義了鍵盤類設(shè)備接口的基類qwskeyboardhandler,移植時(shí)需要根據(jù)鍵盤驅(qū)動(dòng)程序從該類派生出實(shí)現(xiàn)類,實(shí)現(xiàn)鍵盤事件處理函數(shù)processkeyevent(),并在qwsserver::newkeyboardhandler函數(shù)中注冊(cè)自己的鍵盤類設(shè)備即可。其中對(duì)于點(diǎn)擊鍵的鍵碼定義在qt/embedded的命名空間——src/kernel/qnamespace.h中。 圖4為筆者在該smart-phone開發(fā)平臺(tái)上移植qt/embedded 2.3.7和qtopia 1.7.0后顯示的截圖。 2.2 在mc9328平臺(tái)上移植和應(yīng)用 在某車載導(dǎo)航輔助系統(tǒng)的開發(fā)平臺(tái)設(shè)計(jì)中,采用了qt/embedded 3.3.2版本作為其gui系統(tǒng)的實(shí)現(xiàn)方案。硬件平臺(tái)采用自行設(shè)計(jì)的以motorola mc9328 mx1為核心的開發(fā)系統(tǒng)。該系統(tǒng)采用cpu內(nèi)部lcd控制器和240×320分辨率的16 bpp tft lcd作為顯示設(shè)備,采用i2c總線擴(kuò)展出16按鍵以及mx1集成的asp模塊和電阻觸摸屏。操作系統(tǒng)為arm linux 2.4.18。 qt/embedded 3.x版本系統(tǒng)中與底層硬件接口相關(guān)部分的源碼位于src/embedded/目標(biāo)中。該部分包含三類設(shè)備的接口:framebufer、鼠標(biāo)與鍵盤。參照該目標(biāo)中相關(guān)設(shè)備的具體接口代碼,根據(jù)自身硬件臺(tái)增添接口即可。 由于系統(tǒng)lcd的岔道率為240×320,物理尺寸較小,在實(shí)現(xiàn)其于該系統(tǒng)的framebuffer驅(qū)動(dòng)程序時(shí)并沒有將其本身與linux字符控制臺(tái)設(shè)備掛靠,因此framebuffer并不具備text模式的工作方式。在移植qt/embedded時(shí),無需作framebuffer設(shè)備的工作方式轉(zhuǎn)換。正確配置色彩顯示支持后,qt/embedded能夠在lcd顯示出正確的圖形。由于該平臺(tái)的顯示系統(tǒng)為縱向320行,在設(shè)計(jì)時(shí)考慮到人對(duì)于非手持設(shè)備的視覺習(xí)慣為寬度大于高度的觀察方式,為了符合這種習(xí)慣性的觀察方式,在移植qt/embedded時(shí)采用了transformed的旋轉(zhuǎn)圖形顯示方式在軟件上實(shí)現(xiàn)了顯示方向的轉(zhuǎn)換變化。 鼠標(biāo)設(shè)備接口這一基類qwsmousehandler的實(shí)現(xiàn)位于src/embedded/qmouse_qws.cpp中。與2.x版本系列不同的是,3.x中所有的linux觸摸屏示例接口代碼均實(shí)現(xiàn)在src/embedded/qmouselinuxtp_qws.cpp中的qwslinuxtpmousehandler類中。其中對(duì)于不同型號(hào)的觸摸屏的接口實(shí)現(xiàn)代碼,采用不同的宏定義和預(yù)編譯的方式將它們分隔開。筆者還通過從qwslinuxtpmousehandler中繼承自身觸摸屏接口類,替代原有的qwslinuxtpmousehandlerprivate類,而在qwslinuxtpmousehandler生成自身觸摸屏接口對(duì)象的方式,較好地將移植部分的代碼與原有比較混亂的代碼分隔開來。 3 總結(jié) 隨著嵌入式處理器運(yùn)算能力的不斷提高,對(duì)外設(shè)支持的不斷豐富,嵌入式linux系統(tǒng)的應(yīng)用也逐漸增多。qt/embedded延續(xù)了qt在桌面系統(tǒng)的所有功能,豐富的api接口和基于組件的編程模型使得嵌入式linux系統(tǒng)中的應(yīng)用程序開發(fā)更加便捷。由于qt/embedded本身面向高端的手持設(shè)備和移動(dòng)設(shè)備,將成為未來嵌入式系統(tǒng)的主要gui |