国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
嵌入式 linux 智能設(shè)備應(yīng)用中 web 支持的實現(xiàn)(一)
由兩篇文章組成的系列文章主要闡述如何在嵌入式 Linux 智能設(shè)備的應(yīng)用程序中增加 Web 支持。第 1 部分,我們將會介紹嵌入式 Linux 智能設(shè)備開發(fā)的現(xiàn)狀、Qt 和 WebKit 的概念。并以廣告機和手持點菜機等應(yīng)用為例,敘述在嵌入式 Linux 平臺以及 Qt,WebKit 等技術(shù)的幫助下,如何在終端應(yīng)用程序中添加網(wǎng)頁瀏覽的功能,如何用 Web 技術(shù)取代傳統(tǒng) UI 技術(shù),以及如何在智能設(shè)備上實現(xiàn)從 C/S 到 B/S 的開發(fā)模式的轉(zhuǎn)換。

嵌入式 Linux 智能設(shè)備開發(fā)的現(xiàn)狀

近幾年,嵌入式 Linux 在智能設(shè)備中的應(yīng)用發(fā)展的非常迅速??梢灶A(yù)見,嵌入式智能設(shè)備和我們的生活將會越來越密不可分。

Linux 在嵌入式系統(tǒng)中的應(yīng)用可以分為兩大類:面向服務(wù)類和面向應(yīng)用類。典型的面向服務(wù)類系統(tǒng)有交換機、路由器、監(jiān)控設(shè)備等;典型的面向應(yīng)用類的系統(tǒng)有手機、PDA、機頂盒等。本文主要討論面向應(yīng)用類,特別是指帶有網(wǎng)絡(luò)和 UI 的應(yīng)用系統(tǒng)。

在嵌入式 Linux 上進行帶 UI 的應(yīng)用程序開發(fā)是一件非常復(fù)雜的事情,主要涉及以下幾個方面:

UI 系統(tǒng)

Linux 本身的 UI 系統(tǒng)并不統(tǒng)一,嵌入式版本上的 UI 系統(tǒng)更是五花八門,而且與其 PC 版本相比也有一些適應(yīng)性的改變。而有些產(chǎn)品的開發(fā)甚至不使用 UI 系統(tǒng),通過直接往 framebuffer 貼圖的方式來實現(xiàn) UI。而且與 PC 相比,嵌入式系統(tǒng)的性能問題,也讓嵌入式的 UI 系統(tǒng)在表現(xiàn)上做出很多妥協(xié)。這些都使得開發(fā)難度增加,帶來更多的不兼容問題。這些都使嵌入式 Linux 上的應(yīng)用開發(fā)和移植變得更加困難,另外也使培養(yǎng)一名合格的嵌入式工程師的成本變的比較高。

廠商支持

對于一個嵌入式平臺,其主芯片的生產(chǎn)商對這個平臺影響巨大。一般來說,生產(chǎn)商會提供對某個或者某些 UI 系統(tǒng)的支持,但是他們不可能支持所有的系統(tǒng)。所以,選定一個嵌入式平臺就意味著開發(fā)團隊需要切換到這個平臺所能支持的 UI 平臺上。這個團隊之前做的應(yīng)用就需要移植到新的 UI 平臺,而這個移植是非常麻煩的。

瀏覽器

嵌入式 Linux 的網(wǎng)絡(luò)接口一般都支持 posix 的標(biāo)準(zhǔn),但是嵌入式設(shè)備的瀏覽器則與 UI 系統(tǒng)一樣是五花八門的。在應(yīng)用的推動下,嵌入式 Linux 平臺上的瀏覽器在近年發(fā)展也非常迅速。他們基于不同的 UI 平臺進行開發(fā)(也有一些直接操作 framebuffer),對 Web 標(biāo)準(zhǔn)的支持和兼容性各不相同。比較簡單的瀏覽器只能支持 HTML 標(biāo)簽,優(yōu)秀的產(chǎn)品則能在兼容性上做到與 PC 平臺上的瀏覽器幾乎同樣的水平。

服務(wù)器技術(shù)

很多嵌入式應(yīng)用需要與服務(wù)器進行連接,點菜機就是一個典型的應(yīng)用。手持智能設(shè)備端需要將用戶的操作寫入遠程的服務(wù)器,然后遠程的信息管理系統(tǒng)進行進一步的處理。這種類型的應(yīng)用對于 PC 平臺來說就是一個非常簡單的數(shù)據(jù)庫應(yīng)用系統(tǒng),數(shù)據(jù)庫、遠程調(diào)用、并發(fā)、中間件等技術(shù)已經(jīng)應(yīng)用了多年,而且還有眾多成熟的企業(yè)應(yīng)用的框架,可以靈活而快速的搭建出一個系統(tǒng)。但是這些在嵌入式平臺都是不存在的,這意味著開發(fā)人員還需要用相當(dāng)于 PC 平臺十幾年前的水平來進行開發(fā),為了讓嵌入式系統(tǒng)和服務(wù)器的數(shù)據(jù)庫進行對接,開發(fā)人員還需要在服務(wù)器端編寫一個專門的程序來充當(dāng)橋梁的作用。筆者見過在不少項目里還需要直接控制 socket 來和服務(wù)器進行數(shù)據(jù)交換,這些對于 PC 平臺都是不可想象的。另外開發(fā)一個支持多個客戶端并發(fā)的穩(wěn)定服務(wù)器程序并不是一件容易的事情,這些問題都會影響整個嵌入式開發(fā)過程的成本和質(zhì)量。

如果一個公司希望在某個嵌入式 Linux 平臺上開發(fā)一個包含了 Web 瀏覽的應(yīng)用,而他自己之前并不擁有一個完善的平臺的話,其開發(fā)團隊首先需要選定一個 UI 系統(tǒng),然后尋找一家做瀏覽器的公司,與其合作,再想辦法將瀏覽器移植到自己的平臺上。如果是需要在自己的應(yīng)用程序中嵌入一個瀏覽網(wǎng)頁的窗體,那么問題就會更加復(fù)雜,因為還涉及到與選定的瀏覽器進行代碼或者模塊級別集成的問題。

Qt 和 WebKit 簡介

Qt 是一個跨平臺的 C++ 圖形用戶界面應(yīng)用程序框架,對 Windows、Linux、Mac OS X、Unix、Free BSD 等主要的操作系統(tǒng)均有支持。Qt 不僅包含了圖形界面庫,還集成了 Network、File、IO、Database、2D/3D、XML 等模塊,基本涵蓋了一個應(yīng)用程序所需要的所有功能,這些讓 Qt 成為最有影響力的跨平臺框架,Linux 平臺上的 KDE 就是基于 Qt 開發(fā)的。Qt Embedded 則是 Qt 針對嵌入式平臺的版本,在嵌入式平臺的 UI 市場占有很大的份額。

Qt 可以解決上一節(jié)所討論的很多問題,因為其優(yōu)異的跨平臺性能,開發(fā)人員甚至可以在 PC 上進行開發(fā)調(diào)試,然后直接將代碼放到交叉編譯環(huán)境中生成嵌入式版本,這樣的移植基本不需要改動代碼。

WebKit 是一個開源的瀏覽器引擎,目前 Safari,Chrome 等瀏覽器均使用了 WebKit 作為核心。Qt 從 4.5 版本開始,集成了 WebKit 作為 Qt 的平臺組件,用戶可以像使用其他組件一樣將 WebKit 引擎集成到自己的應(yīng)用程序中,以提供 Web 的支持。


 

在應(yīng)用程序中添加網(wǎng)頁瀏覽的支持

通過網(wǎng)址 http://qt.nokia.com/downloads 可以找到 Embedded Linux 版本的最新 Qt 源代碼?,F(xiàn)在最新版本是 4.5.3。

WebKit 作為第三方資源可以在如下目錄中找到:

/qt-embedded-Linux-opensource-src-4.5.3/src/3rdparty/WebKit/

Qt 中對 WebKit 做了封裝,主要有以下幾個類:

QWebView 最常用的類,這是一個窗體控件,可以用來渲染網(wǎng)頁 
QWebPage 被 QWebView 包含,表示一個 documentQWebFrame 被 QWebPage 包含,表示一個 frameQWebSettings    Web 渲染的全局設(shè)置 QWebHistory 用于瀏覽的歷史記錄

QWebView 是最常用的類,接下來我們大概的介紹一下這個類的組成。

根據(jù)頭文件定義,我們可以得知這個類與 Qt 中按鈕、對話框等一樣,都是由 QWidget 派生,可以當(dāng)做一個通用窗體來使用。

class QWebKit_EXPORT QWebView : public Qwidget

這個類有如下的成員函數(shù):

void load ( const QUrl &url );
void setHtml ( const QString &HTML, const QUrl &baseUrl = QUrl() );

這兩個函數(shù)可以讓 QWebView 加載網(wǎng)頁或者顯示一段 HTML 內(nèi)容,是 QWebView 最重要的函數(shù)。

這個類還有幾個重要的 slot:

void stop ();
void back ();void forward ();void reload ();

這幾個函數(shù)也是我們平時瀏覽網(wǎng)頁時常用的功能。

QwebView 類還有幾個重要的 signal:

Q_SIGNALS:
void loadStarted (); void loadProgress ( int progress ); void loadFinished ( bool );

很明顯,這幾個 signal 是用來顯示網(wǎng)頁的加載過程。

接著我們通過代碼來看 QWebView 是如何使用的。假設(shè)程序有一個主窗體 MainWindow,在 MainWindow 的構(gòu)造函數(shù)中,有如下代碼段:

清單 1. MainWindow 構(gòu)造函數(shù)的代碼段

QWebView* view = new QWebView ( this ); // 設(shè)置窗體左上角的坐標(biāo)以及長寬 view -> setGeometry( 50 , 50 , 400 , 300 ); view -> show(); view -> load( QUrl("http://www.google.com") );

設(shè)備網(wǎng)絡(luò)配置好之后,運行程序,我們就可以看到在窗體中有一個區(qū)域顯示出 google 的主頁(編譯的時候要注意在項目的 pro 文件中包含 WebKit 的頭文件路徑和動態(tài)庫)??梢?,Qt 已經(jīng)將 WebKit 做了很好的封裝,子應(yīng)用程序中加入網(wǎng)頁瀏覽功能是非常方便的。

如果希望能知道網(wǎng)頁加載的進度,可以通過如下的代碼來實現(xiàn):

首先實現(xiàn)槽函數(shù)的定義:

清單 2. 槽函數(shù)的定義

Private slot: void setProgress(int progress) {  // progress,即百分比進度 } void loadFinished() {  // 表示網(wǎng)頁加載完畢 }

第二步連接 Qt 的信號與槽函數(shù):

清單 3. 連接 Qt 信號與槽函數(shù)

connect(view , SIGNAL(loadProgress(int)), this, SLOT(setProgress(int))); connect(view , SIGNAL(loadFinished(bool)), this, SLOT(loadFinished()));

這樣,在程序中加一個進度條表示網(wǎng)頁加載過程就實現(xiàn)了。


 

用 Web 取代本地 UI 的應(yīng)用

在嵌入式 Linux 智能設(shè)備上有一個典型的應(yīng)用:信息機,或者廣告機。這種機器一般都帶有一個屏幕,有些會有觸摸屏。屏幕上會組合顯示文字、圖片和視頻,或者提供簡單的查詢功能。這種類型的設(shè)備最先是由內(nèi)置 PC 來實現(xiàn)的,在各種服務(wù)大廳供用戶使用?,F(xiàn)在普遍使用嵌入式系統(tǒng)來取代 PC,以降低成本。

我們在銀行、通信運營商服務(wù)大廳、醫(yī)院、電梯房等地方經(jīng)常能看到各種各樣的廣告機。一個典型的屏幕顯示情況如下:

圖 1. 廣告機屏幕示例

這是組合比較復(fù)雜的情況,也有整個屏幕就是文字、圖片或者視頻的。與傳統(tǒng)和大型軟件開發(fā)相比,實現(xiàn)這樣的功能看上去并不算很難。開發(fā)人員可能需要在嵌入式平臺自己去實現(xiàn)字幕、圖片和天氣的顯示組件或者模塊(暫時忽略視頻播放功能),然后在屏幕上進行顯示即可。比較困難的地方在于以下幾個方面:

內(nèi)容顯示

圖片和字幕需要以某種格式進行存放,天氣信息來源于 Internet,開發(fā)人員需要編寫代碼對這些內(nèi)容進行顯示,并根據(jù)不同規(guī)則對內(nèi)容進行切換。如有以下的配置文件內(nèi)容:

清單 4. 屏幕配置文件 1

<screen> <duration>30</duration> <pic>1.jpg</pic> <text>1.txt</text> <video>1.avi</video> <weather>http://xxxxx.HTML</weather> </screen> <screen> <duration>25</duration> <pic>2.jpg</pic> <text>2.txt</text> <video>2.avi</video> <weather>http://xxxxx.HTML</weather> </screen> ... ...

開發(fā)人員需要編寫一個解析器,能夠解析這個 xml 文件,并且按照其中的規(guī)則進行內(nèi)容的顯示。

內(nèi)容更新

如果需要對廣告機的內(nèi)容進行更換,維護人員則需要將內(nèi)容按照這個格式進行編排。編排的效果是需要反復(fù)調(diào)整的,這個時候,要不就是每次都用一臺廣告機來看實際效果,要不然可能還需要專門設(shè)計一個預(yù)覽程序。

顯示布局

屏幕的顯示布局很可能也是要變動的,那么意味著布局最好也是可配置的,折舊要求廣告機程序能夠解析并且實現(xiàn)顯示布局的配置。如果說解析上面的配置文件并不是很麻煩的事情,但是如果配置文件變成下面這樣,就不一樣了。

清單 5. 屏幕配置文件 2

<screen> <duration>30</duration> <pic x=800 y=200 width=320 height=240>1.jpg</pic> <text x=0 y=600 width=1024 height=240>1.txt</text> <video x=0 y=0 width=800 height=600>1.avi</video> <weather>http://xxxxx.HTML</weather> </screen> <screen> <duration>30</duration> <pic x=800 y=200 width=320 height=240>2.jpg</pic> <pic x=800 y=400 width=320 height=240>22.jpg</pic> <text x=0 y=600 width=1024 height=120>2.txt</text> <text x=0 y=800 width=1024 height=120>22.txt</text> <video x=0 y=0 width=800 height=600>2.avi</video> <weather>http://xxxxx.HTML</weather> </screen> ... ...

不但各種元素的位置可配置,圖片、文本等的數(shù)量也發(fā)生了改變。這個時候,解析程序?qū)⒆兊孟喈?dāng)復(fù)雜。當(dāng)更多的需求出現(xiàn),如要求配置滾動字幕的速度、背景顏色,要求圖片和文字等內(nèi)容可以單獨配置刷新時間等,這樣的配置文件不會比 HTML 標(biāo)準(zhǔn)簡單,而解析程序的規(guī)模也將急劇膨脹。

綜上,廣告機的軟件關(guān)鍵并不在于內(nèi)容如何能顯示出來,而是軟件需要有復(fù)雜的解析能力,能夠支持可配置的布局和內(nèi)容。目前這些廣告機的配置文件大多使用 xml 來存儲信息,而一個能夠同時解決復(fù)雜布局和內(nèi)容顯示的程序,實際上已經(jīng)非常類似瀏覽器的概念了。那么,讓我們從真正的瀏覽器的角度來看待廣告機的這些問題。

如果把屏幕內(nèi)容當(dāng)成一個網(wǎng)頁的話,屏幕布局、內(nèi)容顯示、更新、維護等都轉(zhuǎn)換成了設(shè)計網(wǎng)頁的問題,而最關(guān)鍵的解析程序的開發(fā)可以忽略,用已有的成熟的瀏覽器取代。這里的網(wǎng)頁設(shè)計并不關(guān)系到網(wǎng)頁服務(wù)器端的開發(fā),因為廣告機的內(nèi)容大多是存儲在本地,所以只需要直接設(shè)計頁面。頁面內(nèi)容的更新,或者整個頁面的更新都可以通過標(biāo)準(zhǔn) HTML,或者 JavaScript 之類腳本里實現(xiàn)。對于“天氣”播放功能的實現(xiàn)就更加簡單了,之前的方式需要編寫程序通過網(wǎng)絡(luò)從遠程獲取數(shù)據(jù)然后顯示,比較麻煩。轉(zhuǎn)換成網(wǎng)頁模式之后,只需要在網(wǎng)頁中嵌入一個子網(wǎng)頁,指向遠程的服務(wù)器鏈接即可??梢姡詮V告機為例,在架構(gòu)上使用網(wǎng)頁來取代之前的模式,能充分利用已有的資源和工具,極大的減少開發(fā)的工作量。

我們再考慮另外一種應(yīng)用:帶交互的信息查詢機。帶交互功能的信息機主要提供給人們索引和查詢信息的功能,信息被分類并且根據(jù)索引存儲,信息機的解析程序通過與用戶的交互,顯示所需要的信息。實際上,交互和索引跳轉(zhuǎn)是網(wǎng)頁天生的特性,所以,同樣可以采用網(wǎng)頁和瀏覽器的模式取代編寫本地程序進行交互和解析,可以把幾乎所有的工作轉(zhuǎn)換成網(wǎng)頁設(shè)計,從而將開發(fā)工作量減到了最低。


 

從 C/S 到 B/S 的轉(zhuǎn)換

在嵌入式智能設(shè)備的應(yīng)用中,有很大一部分是嵌入式智能終端需要與遠程的服務(wù)器進行連接,通過人機交互和數(shù)據(jù)采集來實現(xiàn)應(yīng)用,比較典型的就是點菜機。

無線點菜機是一種很常見的嵌入式智能設(shè)備,大多采用 Windows CE 或嵌入式 Linux 作為操作系統(tǒng)。如果把點菜機當(dāng)成一個 PC 系統(tǒng),那么這就是一個非常典型的客戶端 / 服務(wù)器架構(gòu)的應(yīng)用。

圖 2. 無線點菜機系統(tǒng)示例

如圖 2 所示,點菜機通過 WIFI 與服務(wù)器相連,通過網(wǎng)絡(luò)與服務(wù)器通訊進行點菜操作,廚房端也有客戶端與服務(wù)器相連,根據(jù)點菜情況進行菜品制作的安排。忽略 PC 和嵌入式開發(fā)的差異性,這個應(yīng)用的實現(xiàn)過程和原理與 PC 基本是一致的。不同的是,通過網(wǎng)絡(luò)實現(xiàn)業(yè)務(wù)的調(diào)用,如我們在前面提到過的,這在 PC 平臺上已經(jīng)有了很多資源甚至成熟企業(yè)應(yīng)用框架,但是在嵌入式 Linux 平臺上幾乎都沒有。所以,開發(fā)人員需要自己來實現(xiàn)點菜機和服務(wù)器之間的業(yè)務(wù)調(diào)用,進而與服務(wù)器端的業(yè)務(wù)處理部分進行集成。

對于服務(wù)器而言,最重要的部分就是數(shù)據(jù)庫,要遠程的操作數(shù)據(jù)庫,PC 平臺有大量的數(shù)據(jù)庫組件實現(xiàn)對各種數(shù)據(jù)庫的支持,但是在嵌入式 Linux 平臺就沒那么豐富的組件資源可以利用。所以,開發(fā)人員需要在服務(wù)器端實現(xiàn)一個“代理”,點菜機通過“代理”對數(shù)據(jù)庫進行操作。這個“代理”不一定很復(fù)雜,但問題是,它仍然會占用大量的開發(fā)工作量,消耗工作時間。另外一個問題在于,當(dāng)這個系統(tǒng)功能需要改變時,比如希望在點菜機界面增加顯示圖片的功能,客戶端和“代理”端都需要同步進行開發(fā),因此維護起來也是比較麻煩的。

實際上,這一類的應(yīng)用在 PC 上現(xiàn)在大多已經(jīng)由 C/S 模式轉(zhuǎn)向了 B/S 模式。既然現(xiàn)在嵌入式 Linux 平臺已經(jīng)有了 Web 的支持,那么在嵌入式 Linux 平臺 B/S 是否也同樣適用呢。對于點菜系統(tǒng)這樣的應(yīng)用,假如我們在 pc 平臺已經(jīng)用 B/S 模式進行了實現(xiàn)(與很多企業(yè)應(yīng)用相比,這是比較簡單的)。只要嵌入式平臺支持標(biāo)準(zhǔn) Web,那么直接用嵌入式客戶端的瀏覽器,這套系統(tǒng)的遷移很可能只需要考慮嵌入式設(shè)備的屏幕尺寸問題,把網(wǎng)頁顯示調(diào)整一下而已。

除了點菜機之外,物流行業(yè)中廣泛使用的條碼掃描機也是典型的應(yīng)用之一。當(dāng)貨物入倉之時,工作人員用手持智能終端掃描條形碼,數(shù)據(jù)會上傳到服務(wù)器進行處理。如果采用 Web 方式,嵌入式 Linux 端開發(fā)工作量就會大大降低,只需要讀取條碼,然后通過 Web 輸入即可。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
bt3環(huán)境下使用 Qt 4.4.0 中的QWebView控件(WebKit引擎) - hc...
Qt for windows 中QWebView如何上網(wǎng)
QT?Webkit?添加JS對象
QT webkit學(xué)習(xí)筆記(1)
跨平臺工具詳解之十一:Qt(Nokia) | Web App Trend
《ARM9嵌入式系統(tǒng)設(shè)計基礎(chǔ)教程》第13章圖形用戶接口(GUI)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服