基于Linux和MiniGUI的某型指控終端人機(jī)接口設(shè)計(jì)
在系統(tǒng)內(nèi)部,I/0設(shè)備的存取是通過一系列的入口點(diǎn)來進(jìn)行的,字符型設(shè)備提供以下入口點(diǎn):open,close,read,write,ioctl;它們分別對應(yīng)打開設(shè)備、關(guān)閉設(shè)備、讀設(shè)備、寫設(shè)備以及其他操作。這些入口點(diǎn)的定義是通過一個重要的數(shù)據(jù)結(jié)構(gòu)file_operations來完成的。
鍵盤驅(qū)動程序編制的要點(diǎn)有:
(1)定義一個*的健值矩陣,作為輸出,按下一個按鍵,得到對應(yīng)的鍵值;
(2)初始化時(shí)設(shè)置所用到的I/O端口的讀/寫模式,行線為寫,列線為讀;
(3)定義鍵盤掃描函數(shù)scan_kbd()。它的算法是:初始化時(shí)所有的行線置低電平,如果沒有鍵按下,列線都將讀到高電平。否則,任何鍵的閉合將造成該列成為低電平。
(4)在read入口點(diǎn),也就是file_operations結(jié)構(gòu)定義的read方法中,調(diào)用scan_kbd()。這樣,驅(qū)動程序就可以定時(shí)掃描幾個I/O端口,獲取鍵值,然后通過putuser發(fā)送到用戶地址空間。
設(shè)置I/O模式,讀/寫I/0端口的位,可以通過頭文件S3C2410.h中專門定義的宏set_gpio_ctrl,write_gpio_bit,read_gpio_bit來進(jìn)行。
鍵盤驅(qū)動程序經(jīng)過編譯后,可以作為一個設(shè)備文件編譯入內(nèi)核,也可以采取模塊動態(tài)加載的方式。
3.2 MiniGUl IAL引擎的實(shí)現(xiàn)
通常,MiniGUI在使用前應(yīng)針對目標(biāo)系統(tǒng)的特點(diǎn)進(jìn)行配置和編譯,例如指定目標(biāo)操作系統(tǒng)、運(yùn)行模式、圖形引擎和輸入引擎、字體類型、字符集、所支持的控件類等。該課題中,因?yàn)椴扇×俗孕?a class="contentlabel" href="http://cafeforensic.com/news/listbylabel/label/設(shè)計(jì)">設(shè)計(jì)的鍵盤作為輸入設(shè)備,因此最重要的配置是輸入引擎(input abstract lay-er,IAL)。
抽象層是一組不依賴于硬件的抽象接口,其作用類似于操作系統(tǒng)的驅(qū)動程序,將底層的硬件操作與操作系統(tǒng)隔離,這樣做簡化了在不同平臺上移植的難度。開發(fā)特定的鍵盤輸入,主要是完成兩部分工作:鍵盤驅(qū)動程序設(shè)計(jì)和鍵盤輸入引擎開發(fā)。前者負(fù)責(zé)從鍵盤接收原始輸入事件和數(shù)據(jù),后者負(fù)責(zé)將原始的輸入事件和數(shù)據(jù)轉(zhuǎn)換成MiniGUl抽象的鍵盤事件和數(shù)據(jù)。
在代碼實(shí)現(xiàn)上,MiniGUI通過INPUT數(shù)據(jù)結(jié)構(gòu)來表示輸入引擎。該結(jié)構(gòu)中指定了若干函數(shù)指針,編寫特定的輸入引擎,主要就是編碼實(shí)現(xiàn)INPUT結(jié)構(gòu)中的各個函數(shù)。新的IAL引擎編寫完成后,應(yīng)加入MiniGUI進(jìn)行配置,然后對MiniGUI進(jìn)行編譯。在工程實(shí)踐中,一種比較簡便的方法是對MiniGUI已經(jīng)實(shí)現(xiàn)的引擎進(jìn)行修改。
3.3 圖形界面設(shè)計(jì)
MiniGUI是一個圖形用戶界面支持系統(tǒng),通常的GUI編程概念均適用于MiniGUI編程,如窗口和事件驅(qū)動編程等。嵌入式系統(tǒng)完成的功能一般比較單一,對于該系統(tǒng)而言,重點(diǎn)在于實(shí)現(xiàn)人機(jī)接口部分,因此只需要輪詢用戶的按鍵輸入即可。如圖2所示。
MiniGUI中有三種窗口類型:主窗口、對話框和控件窗口。每一個MiniGUI應(yīng)用程序一般都要創(chuàng)建一個主窗口,作為應(yīng)用程序的主界面或開始界面。MiniGUI包含有許多控件類,如靜態(tài)框、按鈕、列表框、編輯框、進(jìn)度條等,這些控件類可以實(shí)現(xiàn)和Windows標(biāo)準(zhǔn)控件類似的效果。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論