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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于QTE的嵌入式Linux下可視化打印設(shè)計

          基于QTE的嵌入式Linux下可視化打印設(shè)計

          作者: 時間:2008-05-05 來源: 收藏

            1 引言

          本文引用地址:http://www.ex-cimer.com/article/82135.htm

            隨著計算機與信息技術(shù)迅猛發(fā)展,嵌入式系統(tǒng)產(chǎn)品已經(jīng)成為現(xiàn)在市場的熱點。而在嵌入式操作系統(tǒng)方面,Linux同目前廣泛的嵌入式系統(tǒng)如、、等相比,具有可移植性好、網(wǎng)絡(luò)性強、編譯工具多、開放源碼等優(yōu)點,逐漸成為嵌入式系統(tǒng)的研究熱點和廣泛使用的平臺。

            Qt/Embedded 是著名的Qt 庫開發(fā)商 Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的Qt 版本,開發(fā)人員多為K D E 項目的核心開發(fā)人員。許多基于Qt 的X Window 程序可以非常方便地移植到Qt/Embedded 上,延續(xù)了在X 上的強大功能,在底層摒棄了X lib而采用了framebuffer 作為底層圖形接口。Qt/Embedded 類庫完全采用C++ 封裝。豐富的控件資源和良好的可移植性是Qt/Embedded的優(yōu)勢,使用X 下的開發(fā)工具Qt Designer可以直接開發(fā)基于Qt/Embedded 的UI(用戶操作接口)界面。本文便是在嵌入式Linux系統(tǒng)的s3c2410平臺上,主要是基于QTE而通過控制USB設(shè)備,實現(xiàn)可視化圖像圖片處理和打印。

            2 可視化打印的硬件系統(tǒng)

          硬件結(jié)構(gòu)原理圖如圖1所示:

          圖1硬件結(jié)構(gòu)原理圖 

            本系統(tǒng)采用的嵌入式微處理器是Samsung公司的S3C2410是一種集成了ARM公司ARM920T處理器核的16/32位微控制器。Flash存儲器采用Samsung公司的K9F1208U0M Nand Flash存儲器,存儲容量為64MB;SDRAM存儲器采用HY57V561620CT,大小為32MB;USB集線器芯片采用ALCOR MICRO公司AU9254A21型號的USB集線器芯片;觸摸屏采用Sharp公司的3.5寸LCD液晶屏, 320×240的分辨率。

            3 可視化打印的具體實現(xiàn)

            3.1 可視化打印的圖像采集實現(xiàn)

            在可視化視頻采集QTE編程中,需要對內(nèi)存進行讀寫,過程如下:首先打開視頻設(shè)備,攝像頭在系統(tǒng)中對應(yīng)的設(shè)備文件為/dev/video0,采用系統(tǒng)調(diào)用函數(shù)video_fd =open(/dev/ov51l/video0, O_RDWR),video_fd是設(shè)備打開后返回的文件描述符(打開錯誤返回-1),以后的系統(tǒng)調(diào)用函數(shù)就可使用它來對設(shè)備文件進行操作了。利用ioctl (video_fd, VIDIOCGMBUF, &vid_buf)函數(shù)讀取有關(guān)攝像頭的信息,該函數(shù)成功返回后,這些信息從內(nèi)核空間拷貝到用戶程序空間vid_buf各成員分量中。在這里我們采用mmap()系統(tǒng)調(diào)用使得進程之間通過映射同一文件實現(xiàn)共享內(nèi)存,各進程可以像訪問普通內(nèi)存一樣對文件進行訪問,訪問時只需要使用指針而不用調(diào)用文件操作函數(shù)。最后通過使用QTE的時間函數(shù)QTimerEvent()和點操作函數(shù)QPoint()來進行實時顯示,相關(guān)代碼如下:

          Void Video::timerEvent( QTimerEvent * ){
                  . . . . . . . . . . .
                  int X_off;//定義屏幕上的橫坐標
                  int Y_off;//定義屏幕上的縱坐標
                   FrameBuffer *fb;Video *v;QFrame frame;//定義需要的參數(shù)
                QPoint p = frame->mapToGlobal(QPoint(X_off, Y_off));//找到屏幕的相應(yīng)點
                  unsigned char *Map = v->Getmap24(width, height); //獲得視頻信息
                  fb->Drawmap(Map, p.x(), p.y(), width, height);//視頻顯示
                  . . . . . . . . . . .}
            打印請求

            這樣在我們的LCD顯示器的相應(yīng)位置便可以看到攝像頭的顯示了,如果想要對圖片進行存儲,同樣地可直接對內(nèi)存數(shù)據(jù)進行讀取。

            3.2 可視化的打印實現(xiàn)  

            首先給出控制打印機的流程圖,如圖2所示框圖這里我們使用的是HP Deskjet系列噴墨打印機,此打印機驅(qū)動程序具有良好的通用性和可移植性,源代碼可從惠普公司官方網(wǎng)站獲得,我們選用的是GNU Ghostscript7.05版本,與打印相關(guān)的具體實現(xiàn)可參見我們前期的工作[1]。 判斷文件格式

            有了相應(yīng)的打印機系統(tǒng),下面需里主要解決的是用QTE控制并且傳遞打印的信息,即打印需要的參數(shù),主要包括圖片的寬,高,紙張大小,圖片位置和名字。用QTE直接與外面進行傳遞比較困難,這里我們可采用環(huán)境變量的方式來進行信息傳遞。由于在上面我們已經(jīng)獲得了想要的圖片,我們可以用QPixmap()這個類來獲取圖片的信息,用QDir()和QString()兩個類來獲得圖片位置和名字,打印機的執(zhí)行我們可以通過QTE中的系統(tǒng)執(zhí)行程序來執(zhí)行shell腳本來對打印機具體操作,相關(guān)代碼如下:

          Void Widget::PictureAndPrint(){ 

          圖2打印任務(wù)管理程序流圖[1]
          int w,h;//定義圖片的長和高
          QDir dir;//定義文件位置 
          QString string1;//保存文件位置
          QString string2;//定義文件名
          QPixmap Picture1=QPixmap(“圖片位置”);//取圖片
          w= Picture1.width();//獲取寬度
          h= Picture1.height();//獲取長度
          string1=dir.currentDirPath ();//獲取圖片地址
          string2=fn;
          . . . . . . . .
          char m11[8];//存放傳送所需要的參數(shù)
            char *can=W;
            setenv(can,m11,2);//把參數(shù)傳給環(huán)境變量
             . . . . . . . .
            system(./print.sh);} //執(zhí)行打印命令腳本
          紙張的大小系統(tǒng)默認是A4,但可由用戶直接在下面開發(fā)的圖形界面里進行可視化調(diào)整,比如選擇圖片,對圖片放大縮小,確定打印位置等等。

          3.3 可視化打印的QTE圖形界面開發(fā)和移植

          上面已經(jīng)給出了底層可視化打印的構(gòu)建,而這時就需要一個統(tǒng)一的可視化圖形界面能夠提供給用戶方便,靈活,快捷的操作,起到對整個系統(tǒng)的統(tǒng)一調(diào)度和協(xié)調(diào),使得對圖片和打印的處理更加得心應(yīng)手。這里為了方便開發(fā),需要建立兩套環(huán)境系統(tǒng),一套在PC主機上,我們稱之為宿主機,而另一套在開發(fā)板(S3C2410)上,稱之為目標機。我們要做的就是先要在宿主機上開發(fā)出理想中的界面,再通過交叉編譯生成在目標機上可執(zhí)行的二進制代碼,然后移植到目標機上進行調(diào)試,直到滿意為止。而宿主機和目標機都已安裝了Linux操作系統(tǒng),在宿主機上建立開發(fā)環(huán)境這里不細談,下面只說說圖形界面的開發(fā)過程和移植。

          我們用qtdesigner設(shè)計器來設(shè)計完整的圖形界面,qtdesigner是嵌入式公司Trolltech的Qt軟件包的一個組成部分。如果用戶使用的是KDE桌面,那么Qt已經(jīng)自動安裝上了,Qt Designer也很有可能已經(jīng)被安裝好。如果用戶的系統(tǒng)沒有安裝,那么針對不同的版本,可以很方便地找到KDE Development Tools,并安裝之。以Red Hat 9.0為例,用戶可以從主選單→系統(tǒng)設(shè)置→添加/刪除應(yīng)用程序中選擇KDE軟件開發(fā),即可完成Qt Designer的安裝。

          而詳細的功能設(shè)計要在設(shè)計器所生成的.cpp文件里改,改的時候可以用Linux自身帶的vi編輯器,也可以用Qt公司提供的自身帶的編輯器。在設(shè)計過程中,我們的開發(fā)主要是用QWidget()類作為程序的主類,而用QApplication()類和、QPixmap()類和其它的類作為配套,進行圖形的窗口、按鈕和輸入對話框設(shè)計,當(dāng)然這些圖形的選擇可以直接在qtdesigner中拖拽,界面的顏色和圖標也可以直接在里面加上,但是一些特殊功能的實現(xiàn)還是要在編輯其中改的。界面實現(xiàn)的主要功能是攝像頭實時顯示背景、對圖片進行處理(包括放大、縮小等)、打印定位、圖片選擇和編輯,攝像頭和打印機的配置等。最后,我們在做一個上層和底層的接口程序,要求這個接口程序能夠把打印機和攝像頭與上層的可視化界面連接起來,形成真正意義上的“無縫”連接。

          低版本只能生成.ui文件,我們還需要進行一下轉(zhuǎn)化。用交叉編譯好的工具uic來進行轉(zhuǎn)化,具體的轉(zhuǎn)化形式是(假設(shè)生成的文件為1.ui)uic –o 1.h 1.ui;uic –o 1.cpp –impl 1.h 1.ui;以上兩句語句就會生成1.h和1.cpp兩個文件,當(dāng)1.cpp生成以后,就可以直接把上面已經(jīng)寫好的關(guān)于攝像頭和打印機的程序直接加到里面去,書寫規(guī)則與c++相同?,F(xiàn)在還需要main.cpp和1.pro文件,main.cpp文件格式比較固定,例如:
          #include
          #include <1.h>
          //主程序開始
          int main(int argc, char *argv[]){
          QApplication app(argc, argv);
          Form1 w;//Form1是主程序的名字
          w.show();
          return app.exec();}

          然后,我們用qmake的功能來自動生成.pro文件,命令如下:qmake –project,生成一個.pro文件,我們用vi編譯器來修改它,加入CONFIG +=qt warn_on release,為的是讓qt編譯器認識這些文件。 接下來用qmake生成Makefile文件,最后再make一下,這樣便在宿主機上生成了可執(zhí)行文件。
          然后我們可以在pc主機進行試驗和修改,再移植到目標機上。而只需要修改Makefile文件里的環(huán)境變量,讓其進行交叉編譯,生成arm下可執(zhí)行文件,最后燒到板子上就可以了。

          4.結(jié)束語

          當(dāng)前嵌入式產(chǎn)品正向著功能強的,操作簡單,體積小等方向發(fā)展,隨著功能的不斷強大,提供一體化服務(wù)成為一種必然和需求。本文設(shè)計了通過S3C2410來實現(xiàn)基于QTE的嵌入式Linux的可視化打印設(shè)備,脫離了龐大的PC機的預(yù)覽、控制、使得可視化打印更加方便、快捷,具有很高的靈活性,這樣既獲得了優(yōu)越的性能又節(jié)省了開支,具有比較高的實用價值。



          關(guān)鍵詞: Vxwork UC/OS Palm OS Windows CE

          評論


          相關(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); })();