<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 實(shí)現(xiàn)針對(duì)觸摸屏的輸入引擎移植解析方案

          實(shí)現(xiàn)針對(duì)觸摸屏的輸入引擎移植解析方案

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

          3.嵌入式GUI研究

          3.1基于嵌入式Linux的GUI系統(tǒng)底層基礎(chǔ)

          一個(gè)能夠兼容多硬件平臺(tái)的嵌入式GUI系統(tǒng),應(yīng)至少抽象出兩類設(shè)備:基于圖形顯示設(shè)備(如VGA卡)的圖形抽象層 GAL(Graphic Abstract Layer)和基于設(shè)備(如鍵盤,等)的抽象層 IAL(Input Abstract Layer)[3]。抽象層的概念類似Linux內(nèi)核虛擬文件系統(tǒng)的概念,它定義了一組不依賴于任何特殊硬件的抽象接口,所有頂層的圖形操作和處理都建立在抽象接口上,而用于該抽象接口的底層代碼稱為“圖形”或“輸入”,類似操作系統(tǒng)中的驅(qū)動(dòng)程序,這實(shí)際是一種面向?qū)ο蟮某绦蚪Y(jié)構(gòu)。利用該抽象接口,嵌入式GUI可以非常方便的到其他POSIX系統(tǒng)上,只需要根據(jù)抽象層接口新的即可。

          3.2嵌入式GUI基本性能需求

          嵌入式GUI應(yīng)在基于操作系統(tǒng)的基礎(chǔ)上,為用戶提供豐富的圖形編程接口,使其能夠方便快速的編制界面友好的應(yīng)用程序。

          GUI模塊的性能指標(biāo)為單位時(shí)間實(shí)例化個(gè)數(shù),如下所列:

          基本圖形繪制速度,即點(diǎn)、線、框、塊、圓、弧、橢圓等圖形單元繪制速度。在顯示設(shè)備可見(jiàn)范圍內(nèi)任意位置產(chǎn)生隨機(jī)大小的基本圖形。量化指標(biāo)為單位時(shí)間內(nèi)繪制的個(gè)數(shù),并以較長(zhǎng)測(cè)試時(shí)間中取得的單位時(shí)間平均值為準(zhǔn)。

          窗口創(chuàng)建速度。在顯示設(shè)備可見(jiàn)范圍內(nèi)任意位置創(chuàng)建隨機(jī)大小的窗口。量化指標(biāo)為單位時(shí)間內(nèi)成功創(chuàng)建及繪制完畢的窗口個(gè)數(shù),并以較長(zhǎng)測(cè)試時(shí)間中取單位時(shí)間平均值為準(zhǔn)。

          控件創(chuàng)建速度。在顯示設(shè)備可見(jiàn)范圍內(nèi)任意位置創(chuàng)建隨機(jī)大小、包含隨機(jī)內(nèi)容的窗口。量化指標(biāo)為單位時(shí)間內(nèi)成功創(chuàng)建及繪制完畢的控件個(gè)數(shù),并以較長(zhǎng)測(cè)試時(shí)間中取單位時(shí)間平均值為準(zhǔn)。

          事件驅(qū)動(dòng)機(jī)制反應(yīng)速度。窗口及不同控件的典型事件及耗時(shí)事件,測(cè)試其完成時(shí)間。窗口及控件的大小、復(fù)雜程度隨機(jī)產(chǎn)生。量化指標(biāo)為單位時(shí)間內(nèi)成功處理完畢的事件數(shù),并以較長(zhǎng)測(cè)試時(shí)間中取單位時(shí)間平均值為準(zhǔn)。

          3.3輸入引擎

          在基于Linux的嵌入式系統(tǒng)中,輸入設(shè)備可能只有和為數(shù)不多的按鍵,相對(duì)圖形引擎來(lái)說(shuō),輸入設(shè)備的處理沒(méi)有統(tǒng)一接口,在此情況下,提供一個(gè)抽象的輸入層,顯得尤為重要。

          這里我們參考MiniGUI,并結(jié)合實(shí)際工程機(jī)械控制系統(tǒng)來(lái)實(shí)現(xiàn)輸入引擎的工作。MiniGUI簡(jiǎn)單可分為三層,最頂層為API,即編程接口;中間層是 MiniGUI的核心層,其中包括了窗口系統(tǒng)必不可少的各個(gè)模塊,如消息事件處理模塊、圖形設(shè)備接口等;而最底層則是GAL和IAL。

          該實(shí)際工程機(jī)械控制系統(tǒng)擬采用作為主要的輸入設(shè)備,需要編寫自己的輸入引擎。首先定義一個(gè)結(jié)構(gòu)體用來(lái)從觸摸屏設(shè)備(/dev/ts)中接受數(shù)據(jù),結(jié)構(gòu)體定義如下:

          typedef struct

          {

          unsigned short b; //觸摸屏狀態(tài)(是否被點(diǎn)擊)

          unsigned short x; //觸摸屏x坐標(biāo)

          unsigned short y; //觸摸屏y坐標(biāo)

          unsigned short pad; //32位填充域,無(wú)實(shí)際意義

          } POS;

          接下來(lái)定義輸入引擎的初始化函數(shù),該函數(shù)打開(kāi)觸摸屏設(shè)備文件:/dev/ts,類似PC上的/dev/psaux設(shè)備。在成功打開(kāi)設(shè)備文件后,該函數(shù)通過(guò) mouse_getxy和mouse_getbutton等函數(shù)將獲得的狀態(tài)信息通過(guò)INPUT結(jié)構(gòu)體傳遞給GUI應(yīng)用程序。

          BOOl InitPADInput (INPUT*input,const char*mdev,const char*mtype)

          {

          ts = open(“/dev/ts”, O_RDONLY);

          if (ts0) {

          fprintf (stderr, “PAD:Can not open touch screen! ”);

          return FALSE;

          }

          ……

          input->get_mouse_xy=mouse_getxy;

          input->get_mouse_button=mouse_getbutton;

          ……

          }

          static void mouse_getxy(int* x, int* y)

          {

          *x=mousex;

          *y=mousey;

          }

          static int mouse_getbutton(void)

          {

          return pos.b;

          }



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();