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