基于S3C2440的WindML圖形驅(qū)動(dòng)設(shè)計(jì)
WindML通過(guò)事件機(jī)制完成對(duì)鍵盤(pán)輸入的響應(yīng)。它采用客戶/服務(wù)器模式,其事件驅(qū)動(dòng)的原理如圖4所示。
WindML輸入驅(qū)動(dòng)是一個(gè)分層結(jié)構(gòu),包括一個(gè)底層的驅(qū)動(dòng),負(fù)責(zé)處理設(shè)備控制器和一個(gè)高層的驅(qū)動(dòng),還負(fù)責(zé)翻譯從設(shè)備中接收到的原始數(shù)據(jù)。
底層輸入驅(qū)動(dòng)是作為I/O驅(qū)動(dòng)來(lái)開(kāi)發(fā)的,一般構(gòu)建進(jìn)入系統(tǒng)內(nèi)核,底層驅(qū)動(dòng)在初始化時(shí)就會(huì)被連接到操作系統(tǒng)的I/O系統(tǒng)中。底層驅(qū)動(dòng)負(fù)責(zé)完成以下功能:
初始化設(shè)備控制器和輸入設(shè)備;
處理由設(shè)備控制器產(chǎn)生的中斷;
從輸入設(shè)備中接收原始數(shù)據(jù),把它們按序地排列在I/O系統(tǒng)的高端驅(qū)動(dòng)隊(duì)列中;
接收高層驅(qū)動(dòng)的指令并做出相應(yīng)的反應(yīng),如控制鍵盤(pán)上LED的亮滅。
此外,底層輸入驅(qū)動(dòng)必須支持輸入服務(wù)任務(wù)用于檢測(cè)輸入數(shù)據(jù)的Select()機(jī)制。
高層輸入驅(qū)動(dòng)主要負(fù)責(zé)接收來(lái)自低層輸入驅(qū)動(dòng)的原始數(shù)據(jù),處理這些數(shù)據(jù),封裝數(shù)據(jù)成為一個(gè)輸入事件消息以及把這些消息放到消息隊(duì)列中。在實(shí)現(xiàn)時(shí)需要完成以下例程:
(1)驅(qū)動(dòng)打開(kāi)例程。分配并初始化驅(qū)動(dòng)控制結(jié)構(gòu),打開(kāi)底層輸入驅(qū)動(dòng),設(shè)置底層驅(qū)動(dòng)到合適模式,以及當(dāng)成功打開(kāi)驅(qū)動(dòng)后返回一個(gè)指向驅(qū)動(dòng)結(jié)構(gòu)的指針。
函數(shù)原型如下:
驅(qū)動(dòng)打開(kāi)例程有兩個(gè)參數(shù),第一個(gè)參數(shù)是用于接收原始輸入數(shù)據(jù),被驅(qū)動(dòng)打開(kāi)的底層輸入驅(qū)動(dòng)的名字;第二個(gè)參數(shù)是一個(gè)指向輸入驅(qū)動(dòng)結(jié)構(gòu)(UGL_INPUT_DEV)的指針。
(2)驅(qū)動(dòng)控制例程。
函數(shù)原型如下:
該函數(shù)有3個(gè)參數(shù):第一個(gè)參數(shù)是由驅(qū)動(dòng)打開(kāi)例程創(chuàng)建和初始化的驅(qū)動(dòng)控制結(jié)構(gòu);第二個(gè)參數(shù)是請(qǐng)求的類(lèi)型;第三個(gè)參數(shù)依賴于第二個(gè)參數(shù)的請(qǐng)求類(lèi)型。
(3)開(kāi)發(fā)驅(qū)動(dòng)關(guān)閉例程。該函數(shù)負(fù)責(zé)完成關(guān)閉底層輸入驅(qū)動(dòng),釋放由打開(kāi)例程分配的系統(tǒng)資源以及設(shè)置底層設(shè)備回到它操作之前的原始狀態(tài)。
最后需實(shí)現(xiàn)I2C總線接口驅(qū)動(dòng),將底端輸入驅(qū)動(dòng)及高端輸入驅(qū)動(dòng)連接起來(lái),完成鍵盤(pán)驅(qū)動(dòng)程序的編寫(xiě)。
圖5所示是WindML繪圖的一個(gè)例子。圖中創(chuàng)建了2個(gè)窗口,左邊的窗口通過(guò)鍵盤(pán)可以控制小球的運(yùn)動(dòng),右邊窗口可以在其中輸入文字。本文引用地址:http://cafeforensic.com/article/151420.htm
4 結(jié)語(yǔ)
本文對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks的媒體庫(kù)windML及其圖形界面開(kāi)發(fā)的方法做了詳細(xì)的介紹,上面提到的圖形界面開(kāi)發(fā)的方法已經(jīng)被作者成功地應(yīng)用于實(shí)際工程開(kāi)發(fā),并取得了良好的效果。
評(píng)論