當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于QTE的嵌入式Linux下可視化打印設(shè)計

摘要:本文主要介紹了利用QTE在嵌入式Linux下通過USB接口開發(fā)圖像采集和打印,詳細(xì)給出了在Samsung公司ARM9處理器S3C2410開發(fā)板上硬件、軟件的設(shè)計和構(gòu)建過程,并對如何控制攝像頭和處理打印機(jī)信息,以及圖形界面的編寫、開發(fā)和移植進(jìn)行了具體討論。
關(guān)鍵詞:Qt/Embedded;嵌入式Linux;圖像采集;打印機(jī)

1引言

隨著計算機(jī)與信息技術(shù)迅猛發(fā)展,嵌入式系統(tǒng)產(chǎn)品已經(jīng)成為現(xiàn)在市場的熱點。而在嵌入式操作系統(tǒng)方面,Linux同目前廣泛的嵌入式系統(tǒng)如Vxwork、UC/OS、Palm OS和Windows CE等相比,具有可移植性好、網(wǎng)絡(luò)性強(qiáng)、編譯工具多、開放源碼等優(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 上的強(qiáng)大功能,在底層摒棄了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)存進(jìn)行讀寫,過程如下:首先打開視頻設(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è)備文件進(jìn)行操作了。利用ioctl (video_fd, VIDIOCGMBUF, &vid_buf)函數(shù)讀取有關(guān)攝像頭的信息,該函數(shù)成功返回后,這些信息從內(nèi)核空間拷貝到用戶程序空間vid_buf各成員分量中。在這里我們采用mmap()系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一文件實現(xiàn)共享內(nèi)存,各進(jìn)程可以像訪問普通內(nèi)存一樣對文件進(jìn)行訪問,訪問時只需要使用指針而不用調(diào)用文件操作函數(shù)。最后通過使用QTE的時間函數(shù)QTimerEvent()和點操作函數(shù)QPoint()來進(jìn)行實時顯示,相關(guān)代碼如下:

Void Video::timerEvent( QTimerEvent * ){

        . . . . . . . . . . .

        int X_off;//定義屏幕上的橫坐標(biāo)

        int Y_off;//定義屏幕上的縱坐標(biāo)

         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)位置便可以看到攝像頭的顯示了,如果想要對圖片進(jìn)行存儲,同樣地可直接對內(nèi)存數(shù)據(jù)進(jìn)行讀取。

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

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

判斷文件格式

有了相應(yīng)的打印機(jī)系統(tǒng),下面需里主要解決的是用QTE控制并且傳遞打印的信息,即打印需要的參數(shù),主要包括圖片的寬,高,紙張大小,圖片位置和名字。用QTE直接與外面進(jìn)行傳遞比較困難,這里我們可采用環(huán)境變量的方式來進(jìn)行信息傳遞。由于在上面我們已經(jīng)獲得了想要的圖片,我們可以用QPixmap()這個類來獲取圖片的信息,用QDir()和QString()兩個類來獲得圖片位置和名字,打印機(jī)的執(zhí)行我們可以通過QTE中的系統(tǒng)執(zhí)行程序來執(zhí)行shell腳本來對打印機(jī)具體操作,相關(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)默認(rèn)是A4,但可由用戶直接在下面開發(fā)的圖形界面里進(jìn)行可視化調(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主機(jī)上,我們稱之為宿主機(jī),而另一套在開發(fā)板(S3C2410)上,稱之為目標(biāo)機(jī)。我們要做的就是先要在宿主機(jī)上開發(fā)出理想中的界面,再通過交叉編譯生成在目標(biāo)機(jī)上可執(zhí)行的二進(jìn)制代碼,然后移植到目標(biāo)機(jī)上進(jìn)行調(diào)試,直到滿意為止。而宿主機(jī)和目標(biāo)機(jī)都已安裝了Linux操作系統(tǒng),在宿主機(jī)上建立開發(fā)環(huán)境這里不細(xì)談,下面只說說圖形界面的開發(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的安裝。

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

低版本只能生成.ui文件,我們還需要進(jìn)行一下轉(zhuǎn)化。用交叉編譯好的工具uic來進(jìn)行轉(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)于攝像頭和打印機(jī)的程序直接加到里面去,書寫規(guī)則與c++相同?,F(xiàn)在還需要main.cpp和1.pro文件,main.cpp文件格式比較固定,例如:

#include <QApplication.h>

#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編譯器認(rèn)識這些文件。 接下來用qmake生成Makefile文件,最后再make一下,這樣便在宿主機(jī)上生成了可執(zhí)行文件。

然后我們可以在pc主機(jī)進(jìn)行試驗和修改,再移植到目標(biāo)機(jī)上。而只需要修改Makefile文件里的環(huán)境變量,讓其進(jìn)行交叉編譯,生成arm下可執(zhí)行文件,最后燒到板子上就可以了。

4.結(jié)束語

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

本文作者創(chuàng)新點:可視化打印往往需要pc機(jī)的支持,這給用戶造成了很大的不便。本文設(shè)計的可視化打印系統(tǒng),使得可視化打印機(jī)完全脫離了pc機(jī)工作,且自帶液晶顯示屏,可以預(yù)覽文本,處理圖像圖片,而且可外接各種存儲設(shè)備,增大了存儲容量,使打印機(jī)具有了獨立性和便攜性。而它可驅(qū)動不同型號的打印機(jī),故能夠節(jié)省了開支。

參考文獻(xiàn):

[1] 王乾,基于嵌入式Linux的打印控制系統(tǒng)的設(shè)計與實現(xiàn),微計算機(jī)信息,2007,第1期
[2] TROLLECH主頁:http://www.trolltech.com/
[3] Xteam(中國)軟件技術(shù)有限公司 著,Qt程序設(shè)計,清華大學(xué)出版社,2005
[4] Alessandro Rubini等著,魏永明等譯,Linux設(shè)備驅(qū)動程序(第二版),中國電力出版2002

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉