關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > MiniGUI中開發(fā)實(shí)現(xiàn)鍵盤輸入設(shè)備方案解析

MiniGUI中開發(fā)實(shí)現(xiàn)鍵盤輸入設(shè)備方案解析

作者: 時(shí)間:2012-05-14 來(lái)源:網(wǎng)絡(luò) 收藏

3.2 編寫小輸入引擎

3.2.1 底層輸入操作函數(shù)實(shí)現(xiàn)

對(duì)于小輸入,鼠標(biāo)操作接口函數(shù)不用進(jìn)行任何操作,直接返回即可,主要需要編寫的是keyboard_update及wait_event函數(shù)。當(dāng)。 MiniCUI應(yīng)用程序運(yùn)行時(shí),相關(guān)的底層事件處理例程會(huì)不斷調(diào)用wait_event函數(shù)查詢是否有輸入事件發(fā)生,故在該函數(shù)中調(diào)用小驅(qū)動(dòng)的 read函數(shù),獲取用戶輸入的按鍵信息。若有鍵盤事件發(fā)生,則返回IAL_KEYEVENT,底層事件處理例程就會(huì)調(diào)用keyboard_update函數(shù)進(jìn)行處理,獲取當(dāng)前鍵盤狀態(tài)。

需要注意的是,由于系統(tǒng)以很高的頻率不斷調(diào)用wait_event函數(shù),因此當(dāng)該函數(shù)捕捉到鍵按下事件時(shí),需要一定時(shí)間(如100 ms)延時(shí)再返回,以避免一次按鍵產(chǎn)生多次鍵盤事件。

使用一個(gè)一維數(shù)組state[128]記錄按鍵的狀態(tài)。該數(shù)組定義在include/common.h中。State[128]中每個(gè)元素均對(duì)應(yīng)一特定的按鍵,如果某一元素為l,說明它所對(duì)應(yīng)的鍵被按下,否則該鍵未被按下。因此,key-board_update函數(shù)要做的工作就是,根據(jù)鍵盤掃描驅(qū)動(dòng)程序的返回值,更新state[128]數(shù)組的元素值,從而向上層驅(qū)動(dòng)程序和應(yīng)用程序反映按鍵狀態(tài)??梢姡粝雽?shí)現(xiàn)任意標(biāo)準(zhǔn)鍵盤按鍵功能,只需修改keyboard_update函數(shù)里相應(yīng)的鍵值映射,或直接修改鍵盤驅(qū)動(dòng)里的鍵值映射數(shù)組為對(duì)應(yīng)的標(biāo)準(zhǔn)鍵盤按鍵的系統(tǒng)掃描碼。

3.2.2 初始化及終止函數(shù)實(shí)現(xiàn)

在初始化函數(shù)中先打開小鍵盤,成功以后對(duì)輸入引擎的其他成員(底層輸入操作接口函數(shù))賦值,返回TRUE。終止清除函數(shù)的主要工作是關(guān)閉鍵盤輸入文件。輸入引擎相關(guān)內(nèi)容的格式可參照src/ial/目錄下的其他輸入引擎。至此,完成了小鍵盤輸入引擎(mykbd.c文件)的開發(fā)。

3.3 輸入引擎的使用原理

在 src/ial/ial. c中,用inputs結(jié)構(gòu)數(shù)組定義了支持的所有輸入引擎信息。系統(tǒng)啟動(dòng)后,將根據(jù).cfg配置文件,在inputs結(jié)構(gòu)中尋找特定的輸入引擎作為當(dāng)前的輸入引擎。然后,調(diào)用該引擎的初始化函數(shù),對(duì)全局變量cur_input(表當(dāng)前使用的輸入引擎)的其他成員函數(shù)進(jìn)行賦值。

在src/sever/server.c中,函數(shù)IdleHandler4Server凋用輸入引擎中IAL_WaitEvent成員函數(shù),檢查是否有底層輸入事件發(fā)生。當(dāng)有事件發(fā)生時(shí),檢查是鼠標(biāo)(觸摸屏)事件還是鍵盤事件發(fā)生,并分別用parseEvent(msg_que, event)處理這些事件。parseEvent函數(shù)中首先調(diào)用Getl-wevent(event,1we)函數(shù)。該函數(shù)利用IAL引擎中相應(yīng)底層操作函數(shù)收集底層輸入事件1we(該結(jié)構(gòu)定義在paxseEverlt函數(shù)中),parseEvent再將收集到的這些事件轉(zhuǎn)化為上層能理解的消息。具體實(shí)現(xiàn)細(xì)節(jié)可參考server.c文件。

4 鍵盤輸入在MiniGuI中的實(shí)現(xiàn)步驟

4.1 加載小鍵盤驅(qū)動(dòng)

有兩種方法加載:一是把該驅(qū)動(dòng)加載入內(nèi)核;二是可以將編譯的*.o文件拷貝到目標(biāo)板根文件系統(tǒng)巾,目標(biāo)板啟動(dòng)后用insmod命令動(dòng)態(tài)加載。

DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉