一種龍芯手持機(jī)MiniGUI觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式技術(shù)領(lǐng)域,尤其涉及一種龍芯手持機(jī)MiniGUI觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]MiniGUI是一款面向嵌入式系統(tǒng)的高級(jí)窗口系統(tǒng)和圖形用戶界面支持系統(tǒng),歷經(jīng)十余年時(shí)間發(fā)展,它性能優(yōu)良、功能豐富,成為一款優(yōu)秀的國(guó)產(chǎn)嵌入式操作系統(tǒng)。支持Linux/uClinux、eCos、uC/OS-11、VxWorks、ThreadX、Nucleus、pS0S、0SE 等操作系統(tǒng)和數(shù)十種SoC芯片,已驗(yàn)證的硬件平臺(tái)包括ARM、MIPS、IA、PowerPC、M68K、Intel x86等等,廣泛應(yīng)用于嵌入式系統(tǒng)領(lǐng)域。
[0003]龍芯處理器是第一款國(guó)產(chǎn)芯片,現(xiàn)在發(fā)展分為三類:龍芯I號(hào)(嵌入式)、龍芯2號(hào)(桌面)、龍芯3號(hào)(服務(wù)器)。隨著國(guó)產(chǎn)化步伐加快,基于龍芯IA處理器的手持機(jī)也應(yīng)運(yùn)而生,由于龍芯IA處理器性能較低,不適合運(yùn)行大型操作系統(tǒng),可以在上面移植嵌入式操作系統(tǒng),而Mini⑶I是一個(gè)很不錯(cuò)的選擇。
[0004]MiniGUI輸入抽象層(Input Abstract1n Layer,IAL),將 MiniGUI 涉及的所有輸入設(shè)備,如鍵鼠和觸摸屏等抽象了出來(lái),為上層提供一致的接口。但MiniGUI未考慮很全面,在輸入引擎中,鍵鼠和觸摸屏不可以同時(shí)使用,這會(huì)導(dǎo)致手持機(jī)中可以使用鍵鼠,就不可以使用觸摸屏(或者可以使用觸摸屏,不能使用鍵鼠)的問(wèn)題。
【發(fā)明內(nèi)容】
[0005]為了解決以上的技術(shù)問(wèn)題,本文提出了一種龍芯手持機(jī)MiniGUI觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)方法。
[0006]本發(fā)明的主要目的是MiniGUI中鍵鼠和觸摸屏不可以同時(shí)使用問(wèn)題,基于龍芯手持機(jī),提出了一種Mini⑶I觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)方法。本發(fā)明實(shí)現(xiàn)方法為改寫IAL層的native引擎,加入觸摸屏的驅(qū)動(dòng),讓其不僅可以使用鍵鼠,還可以同時(shí)使用觸摸屏。本發(fā)明主要?jiǎng)?chuàng)新點(diǎn)是在MiniGUI中可以同時(shí)使用鍵鼠和觸摸屏,解決鍵鼠和觸摸屏不能同時(shí)使用的問(wèn)題。
[0007]本發(fā)明基于龍芯手持機(jī),但實(shí)現(xiàn)方法不僅限于此,實(shí)現(xiàn)方案如下:
1、本發(fā)明首先要實(shí)現(xiàn)miniGUI在龍芯手持機(jī)上的移植,主要移植的庫(kù)和文件包括:busybox、freetype、jpeg、png、zlib、tslib、Iibminigu1、Iibmgplus、minigui_res、mg-samples。其移植過(guò)程不在此進(jìn)行贅述,但是tslib庫(kù)是觸摸屏驅(qū)動(dòng)庫(kù),必須要進(jìn)行移植。
[0008]2、移植完成后就需要修改I ibminigui庫(kù)中IAL層的native引擎,native引擎主要包括如下函數(shù):InitNativeInput、TermNat ive Input、Mouse_update、Mouse_getxy、Mouse_getbutton、Keyboard_update、Keyboard_state、Wait_event ο 其中 Ini tNat ive Input、TermNat ive Input分別代表輸入設(shè)備的初始化和終止輸入設(shè)備而Mouse—update、Mouse—getxy、Mouse—36七1311^011三個(gè)函數(shù)可以分別獲取鼠標(biāo)的狀態(tài)、位置、點(diǎn)擊1671303『(1—update、Keyboard—state兩相函數(shù)可以獲取鍵盤的相應(yīng)狀態(tài)D最重要的是Wait—event函數(shù),它是native引擎的核心,該函數(shù)檢查鍵鼠是否有可讀的數(shù)據(jù)等待讀取,如果是,則分別讀取相應(yīng)數(shù)據(jù)。
[0009]3、由于native引擎中本身存在鼠標(biāo)的位置和點(diǎn)擊狀態(tài)獲取,觸摸屏鼠標(biāo)的位置和點(diǎn)擊狀態(tài)的變量延用native引擎本身變量,所以Mouse_getxy、Mouse_getbutton不需要修改,需要修改的函數(shù)只包括Ini tNat ive Input、TermNat ivelnput、Mouse_update、Wai t_evento
[0010]4、首先,修改Ini tNat ivelnput、TermNativeInput 函數(shù),在 Ini tNat ive Input 函數(shù)中依賴tslib庫(kù)文件加入觸摸屏的打開(kāi)函數(shù),在TermNativeInput函數(shù)加入觸摸屏關(guān)閉函數(shù)。
[0011 ] 5、其次,Mouse_update更新鼠標(biāo)的位置和點(diǎn)擊狀態(tài),通過(guò)ts_read函數(shù)讀取出觸摸屏鼠標(biāo)狀態(tài),并分別賦值給xpos、ypos、buttons變量,然后三種變量通過(guò)Mouse_getxy、Mouse_getbutton將值傳遞給系統(tǒng)顯示。
[0012]6、再次,Wait_event中執(zhí)照原先鼠標(biāo)添加處理函數(shù),一是如果觸摸屏的文件描述符不存在,則需要重新打開(kāi)觸摸屏,二是如果有鼠標(biāo)事件,則先檢測(cè)觸摸屏文件描述符是否存在,如果存在則檢測(cè)觸摸屏文件描述符是否可讀,如果可讀則返回一個(gè)標(biāo)志IAL_MOUSEEVENT,如果文件描述符非法則直接關(guān)閉觸摸屏。
[0013]7、最后,按以上步驟修改完成后,在手持機(jī)上試驗(yàn),發(fā)現(xiàn)當(dāng)提起觸摸筆后,鼠標(biāo)會(huì)亂跑,對(duì)照原碼分析,是由于觸摸屏與鼠標(biāo)相互干擾導(dǎo)致,解決此問(wèn)題的方法為,一是在ffait_event中,如果觸摸屏事件發(fā)生,則讓鼠標(biāo)的文件描述符失效;二是在Mouse_update中,更新完觸摸屏事件后,如果觸摸屏被點(diǎn)擊,或者鼠標(biāo)的文件描述符失效,都直接返回。這樣就可以解決觸摸筆提起后鼠標(biāo)亂跑的問(wèn)題。
【附圖說(shuō)明】
[0014]圖1是Mini⑶I系統(tǒng)結(jié)構(gòu)圖;
圖2是native引擎的結(jié)構(gòu)圖;
圖3是觸摸屏驅(qū)動(dòng)流程圖。
【具體實(shí)施方式】
[0015]下面參照附圖對(duì)本發(fā)明的內(nèi)容進(jìn)行更加詳細(xì)的闡述:
如圖1所示,本發(fā)明首先要實(shí)現(xiàn)miniGUI在龍芯手持機(jī)上的移植,主要移植的庫(kù)和文件包括:busybox、freetype、jpeg、png、zlib、tslib、I ibminigu1、I ibmgplus、minigu1-res、mg-samp Ies0其移植過(guò)程不在此進(jìn)行贅述,但是ts I ib庫(kù)是觸摸屏驅(qū)動(dòng)庫(kù),必須要進(jìn)行移植。
[0016]如圖2所示,移植完成后就需要修改I ibminigui庫(kù)中IAL層的native引擎,native引擎主要包括如下函數(shù):InitNativeInput、TermNativeInput、Mouse_update、Mouse_getxy、Mous e_get but ton、Key boar d_update、Keybo ar d_ state、Wait_e vent。其中Ini tNat ive Input、TermNat ive Input分別代表輸入設(shè)備的初始化和終止輸入設(shè)備。而Mouse_update、Mouse_getxy、Mouse_getbutton三個(gè)函數(shù)可以分別獲取鼠標(biāo)的狀態(tài)、位置、點(diǎn)擊。Keyboard_update、Keyboard_state兩相函數(shù)可以獲取鍵盤的相應(yīng)狀態(tài)。最重要的是Wai t_event函數(shù),它是native引擎的核心,該函數(shù)檢查鍵鼠是否有可讀的數(shù)據(jù)等待讀取,如果是,則分別讀取相應(yīng)數(shù)據(jù)。
[0017]如圖3所示,由于native引擎中本身存在鼠標(biāo)的位置和點(diǎn)擊狀態(tài)獲取,觸摸屏鼠標(biāo)的位置和點(diǎn)擊狀態(tài)的變量延用native引擎本身變量,所以Mouse_getxy、Mouse_getbutton不需要修改,需要修改的函數(shù)只包括InitNati velnput、TermNat ivelnput、Mouse_update、Wait_event0
[0018]首先,修改InitNativelnput、TermNati velnput 函數(shù),在Ini tNat ivelnput函數(shù)中依賴tslib庫(kù)文件加入觸摸屏的打開(kāi)函數(shù),在TermNativeInput函數(shù)加入觸摸屏關(guān)閉函數(shù)。
[0019]其次,Mouse_update更新鼠標(biāo)的位置和點(diǎn)擊狀態(tài),通過(guò)ts_read函數(shù)讀取出觸摸屏鼠標(biāo)狀態(tài),并分別賦值給xpos、ypos、buttons變量,然后三種變量通過(guò)Mouse_getxy、Mouse_getbutton將值傳遞給系統(tǒng)顯示。
[0020]再次,Wait_event中執(zhí)照原先鼠標(biāo)添加處理函數(shù),一是如果觸摸屏的文件描述符不存在,則需要重新打開(kāi)觸摸屏,二是如果有鼠標(biāo)事件,則先檢測(cè)觸摸屏文件描述符是否存在,如果存在則檢測(cè)觸摸屏文件描述符是否可讀,如果可讀則返回一個(gè)標(biāo)志IAL_MOUSEEVENT,如果文件描述符非法則直接關(guān)閉觸摸屏。
[0021 ]最后,按以上步驟修改完成后,在手持機(jī)上試驗(yàn),發(fā)現(xiàn)當(dāng)提起觸摸筆后,鼠標(biāo)會(huì)亂跑,對(duì)照原碼分析,是由于觸摸屏與鼠標(biāo)相互干擾導(dǎo)致,解決此問(wèn)題的方法為,一是在Wait_event中,如果觸摸屏事件發(fā)生,則讓鼠標(biāo)的文件描述符失效;二是在Mouse_update中,更新完觸摸屏事件后,如果觸摸屏被點(diǎn)擊,或者鼠標(biāo)的文件描述符失效,都直接返回。這樣就可以解決觸摸筆提起后鼠標(biāo)亂跑的問(wèn)題。
【主權(quán)項(xiàng)】
1.一種龍芯手持機(jī)Mini⑶I觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)方法,其特征在于, 1)、首先要實(shí)現(xiàn)miniGUI在龍芯手持機(jī)上的移植,主要移植的庫(kù)和文件包括:busybox、freetype、jpeg、png、zlib、tslib、Iibminigu1、libmgpIus、minigu1-res、mg-sampIes; 2)、移植完成后就需要修改libminigui庫(kù)中IAL層的native引擎,native引擎主要包括如下函數(shù):InitNativeInput、TermNativeInput、Mouse_update、Mouse_getxy、Mouse_getbutton、Keyboard_update、Keyboard_state、Wait_event; 其中,InitNativeInput、TermNativeInput分別代表輸入設(shè)備的初始化和終止輸入設(shè)備; Mouse_update、Mouse_getxy、Mouse_getbutton三個(gè)函數(shù)可以分別獲取鼠標(biāo)的狀態(tài)、位置、點(diǎn)擊; Wait_event,是native引擎的核心,該函數(shù)檢查鍵鼠是否有可讀的數(shù)據(jù)等待讀取,如果是,則分別讀取相應(yīng)數(shù)據(jù); 3)、修改完成后,在手持機(jī)上試驗(yàn),發(fā)現(xiàn)當(dāng)提起觸摸筆后,鼠標(biāo)會(huì)亂跑,對(duì)照原碼分析,是由于觸摸屏與鼠標(biāo)相互干擾導(dǎo)致,解決此問(wèn)題的方法為,一是在Wait_eVent中,如果觸摸屏事件發(fā)生,則讓鼠標(biāo)的文件描述符失效;二是在MoUSe_Update中,更新完觸摸屏事件后,如果觸摸屏被點(diǎn)擊,或者鼠標(biāo)的文件描述符失效,都直接返回。2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 需要修改的函數(shù)只包括InitNat ive Input、TermNative Input、Mous e_update、Wait_evento3.根據(jù)權(quán)利要求2所述的方法,其特征在于, I)、首先,修改InitNativeInput、TermNativeInput函數(shù),在InitNativeInput函數(shù)中依賴tslib庫(kù)文件加入觸摸屏的打開(kāi)函數(shù),在TermNativeInput函數(shù)加入觸摸屏關(guān)閉函數(shù); 2)、其次,Mouse_update更新鼠標(biāo)的位置和點(diǎn)擊狀態(tài),通過(guò)t s_read函數(shù)讀取出觸摸屏鼠標(biāo)狀態(tài),并分別賦值給xpos、ypos、buttons變量,然后三種變量通過(guò)Mouse_getxy、Mouse_getbutton將值傳遞給系統(tǒng)顯示; 3)、再次,Wait_event中執(zhí)照原先鼠標(biāo)添加處理函數(shù),一是如果觸摸屏的文件描述符不存在,則需要重新打開(kāi)觸摸屏,二是如果有鼠標(biāo)事件,則先檢測(cè)觸摸屏文件描述符是否存在,如果存在則檢測(cè)觸摸屏文件描述符是否可讀,如果可讀則返回一個(gè)標(biāo)志IAL_MOUSEEVENT,如果文件描述符非法則直接關(guān)閉觸摸屏。
【專利摘要】本發(fā)明提供一種龍芯手持機(jī)MiniGUI觸摸屏驅(qū)動(dòng)實(shí)現(xiàn)方法,屬于嵌入式技術(shù)領(lǐng)域,本發(fā)明實(shí)現(xiàn)方法為改寫IAL層的native引擎,加入觸摸屏的驅(qū)動(dòng),讓其不僅可以使用鍵鼠,還可以同時(shí)使用觸摸屏。本發(fā)明特點(diǎn)是在MiniGUI中可以同時(shí)使用鍵鼠和觸摸屏,解決鍵鼠和觸摸屏不能同時(shí)使用的問(wèn)題。
【IPC分類】G06F13/10
【公開(kāi)號(hào)】CN105512057
【申請(qǐng)?zhí)枴緾N201510820678
【發(fā)明人】吳登勇, 王則陸, 陳亮甫
【申請(qǐng)人】山東超越數(shù)控電子有限公司
【公開(kāi)日】2016年4月20日
【申請(qǐng)日】2015年11月24日