王昭順,徐柏權(quán)
(1.北京科技大學(xué)計(jì)算機(jī)與通信工程學(xué)院,北京 100083;2.廊坊東方職業(yè)技術(shù)學(xué)院電子信息工程系,河北 廊坊 065001)
一種基于藍(lán)牙的交互式系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)*
王昭順1,徐柏權(quán)2
(1.北京科技大學(xué)計(jì)算機(jī)與通信工程學(xué)院,北京 100083;2.廊坊東方職業(yè)技術(shù)學(xué)院電子信息工程系,河北 廊坊 065001)
隨著無線互聯(lián)技術(shù)和移動(dòng)終端技術(shù)的發(fā)展,手機(jī)等移動(dòng)終端用戶對(duì)藍(lán)牙產(chǎn)品的功能提出了更高的要求。藍(lán)牙采用推送技術(shù)進(jìn)行數(shù)據(jù)傳輸,用戶只能選擇是否接收,不能對(duì)藍(lán)牙發(fā)送端的數(shù)據(jù)進(jìn)行自主交互瀏覽。采用J2ME和藍(lán)牙技術(shù)實(shí)現(xiàn)一種在移動(dòng)藍(lán)牙終端上使用的交互式系統(tǒng),有效地利用了J2ME 跨平臺(tái)的優(yōu)勢(shì),以及藍(lán)牙傳送數(shù)據(jù)易用性和實(shí)用性等優(yōu)點(diǎn)。根據(jù)對(duì)JSR82規(guī)范提供的Java藍(lán)牙無線技術(shù)API的研究,給出了藍(lán)牙交互式系統(tǒng)的設(shè)計(jì)方案和系統(tǒng)結(jié)構(gòu)。通過J2ME的無線應(yīng)用開發(fā)包和MIDlet編程模型,實(shí)現(xiàn)了交互式系統(tǒng)。
藍(lán)牙技術(shù);J2ME;交互式
藍(lán)牙(Bluetooth)是一種用于替代某些電子設(shè)備上使用電纜或連線的短距離無線連接技術(shù),具有低功耗、低成本的特性[1]。隨著無線互聯(lián)技術(shù)和各種移動(dòng)終端技術(shù)的發(fā)展,手機(jī)等移動(dòng)終端用戶對(duì)于藍(lán)牙產(chǎn)品的功能提出了更高的要求。藍(lán)牙采用推送技術(shù)進(jìn)行數(shù)據(jù)傳輸,用戶只能選擇是否接收,不能對(duì)藍(lán)牙發(fā)送端的數(shù)據(jù)進(jìn)行自主交互瀏覽。
本文參照目前的藍(lán)牙技術(shù)以及J2ME平臺(tái),開發(fā)一個(gè)基于J2ME的藍(lán)牙交互式系統(tǒng),提出了采用J2ME和藍(lán)牙技術(shù),實(shí)現(xiàn)一種在移動(dòng)藍(lán)牙終端上使用的交互式系統(tǒng),用戶到達(dá)一個(gè)藍(lán)牙信號(hào)覆蓋區(qū)域時(shí)會(huì)接收到藍(lán)牙發(fā)送設(shè)備發(fā)送到手機(jī)上的J2ME應(yīng)用程序,用戶手機(jī)安裝上系統(tǒng)后可以自主交互地瀏覽藍(lán)牙發(fā)送終端的內(nèi)容。同時(shí),可以有效地利用J2ME 跨平臺(tái)的優(yōu)勢(shì),以及藍(lán)牙傳送數(shù)據(jù)易用性和實(shí)用性等優(yōu)點(diǎn)。
2.1 藍(lán)牙技術(shù)
藍(lán)牙是一種支持設(shè)備短距離通信(一般10 m內(nèi))的無線電技術(shù),能在包括移動(dòng)電話、PDA、無線耳機(jī)、筆記本電腦、相關(guān)外設(shè)等眾多設(shè)備之間進(jìn)行無線信息交換[1]。
藍(lán)牙技術(shù)由一組稱為協(xié)議棧的技術(shù)協(xié)議規(guī)定,規(guī)范的目標(biāo)是允許遵循規(guī)范的應(yīng)用能夠進(jìn)行相互間操作。為了實(shí)現(xiàn)互操作,在遠(yuǎn)程設(shè)備上的對(duì)應(yīng)應(yīng)用程序必須以同一協(xié)議棧運(yùn)行。不同應(yīng)用可運(yùn)行于不同協(xié)議棧。每一協(xié)議棧都使用同一公共藍(lán)牙數(shù)據(jù)鏈路和物理層。圖 1所示為藍(lán)牙的協(xié)議結(jié)構(gòu)(協(xié)議不包含最低的射頻層)。
Figure 1 Architecture of Bluetooth protocol圖1 藍(lán)牙協(xié)議結(jié)構(gòu)
藍(lán)牙2.0 使用EDR技術(shù)增加了帶寬,提高設(shè)備同時(shí)處理多項(xiàng)任務(wù)或同時(shí)連接多個(gè)藍(lán)牙設(shè)備的能力,大大提高了藍(lán)牙技術(shù)的數(shù)據(jù)傳輸速率。藍(lán)牙3.0的核心是AMP(Generic Alternate MAC/PHY)交替射頻技術(shù),允許藍(lán)牙協(xié)議棧針對(duì)任一任務(wù)動(dòng)態(tài)地選擇正確射頻。通過集成802.11 PAL協(xié)議適應(yīng)層,藍(lán)牙在需要的時(shí)候調(diào)用802.11 WI-FI用于實(shí)現(xiàn)高速數(shù)據(jù)傳輸,可以用于錄像機(jī)至高清電視、PC至PMP、UMPC至打印機(jī)之間的資料傳輸。同時(shí),引入了增強(qiáng)電源控制(EPC)機(jī)制,降低實(shí)際空閑功耗。藍(lán)牙4.0技術(shù)包含三個(gè)子規(guī)范:傳統(tǒng)藍(lán)牙技術(shù)、高速藍(lán)牙和新的藍(lán)牙低功耗技術(shù)。這三個(gè)規(guī)范可以組合或者單獨(dú)使用。
2.2 JSR82(JABWT)規(guī)范
JSR82規(guī)范揭示了藍(lán)牙軟件棧給Java平臺(tái)的開發(fā)者。規(guī)范中定義了如下兩個(gè)包[2]:
(1)javax.bluetooth;
(2)javax.obex。
上面兩個(gè)包各自是獨(dú)立的,它們彼此并不依賴對(duì)方。上述兩個(gè)包都需要使用通用連接框架,因此它們都和javax.microedition.io有關(guān)聯(lián),如圖2所示。
Figure 2 Package structure of JABWT圖2 JABWT的包結(jié)構(gòu)
2.3 藍(lán)牙連接應(yīng)用模型
開發(fā)基于藍(lán)牙通信的應(yīng)用程序通常采用客戶端和服務(wù)器的應(yīng)用程序模型。服務(wù)(Service)是通信的核心所在,這個(gè)服務(wù)向客戶端提供了某種功能性的服務(wù)[3]。開發(fā)者一旦創(chuàng)建了一個(gè)服務(wù)之后首先需要把這個(gè)服務(wù)注冊(cè)到服務(wù)查找數(shù)據(jù)庫(kù)SDDB(Service Discovery Data Base)中,然后等待客戶端連接。
客戶端首先必須通過服務(wù)發(fā)現(xiàn)協(xié)議SDP(Service Discovery Protocol)查找到服務(wù)所在的設(shè)備,然后在設(shè)備上查詢服務(wù)。一旦獲得了服務(wù),也就獲得了連接服務(wù)器的URL。借助通用連接框架的方法即可獲得相關(guān)的Connection實(shí)例,客戶端就可以真正地使用服務(wù)器提供的服務(wù)了。
一個(gè)典型的藍(lán)牙功能的應(yīng)用可以作為一個(gè)服務(wù)端或是一個(gè)客戶端,一個(gè)服務(wù)的提供者或是消費(fèi)者,或者同時(shí)表現(xiàn)出服務(wù)和客戶的行為。圖3是一個(gè)典型的藍(lán)牙規(guī)范用例。
Figure 3 A typical use case with Bluetooth function圖3 一個(gè)典型的具有藍(lán)牙功能的用例
3.1 系統(tǒng)結(jié)構(gòu)
交互式藍(lán)牙媒體系統(tǒng)的總體架構(gòu)如圖4所示。軟件結(jié)構(gòu)包含六部分:BTSDK、系統(tǒng)管理模塊、藍(lán)牙設(shè)備模塊、數(shù)據(jù)傳輸模塊、記錄管理模塊和界面模塊。
Figure 4 Overall architecture of interactive Bluetooth system圖4 交互式藍(lán)牙系統(tǒng)的總體架構(gòu)
(1)BTSDK將藍(lán)牙模塊提交上來的數(shù)據(jù)進(jìn)行封裝,通過回調(diào)函數(shù)的方式與外界交互。
(2)系統(tǒng)管理模塊將部分函數(shù)以回調(diào)函數(shù)的方式注冊(cè)給BTSDK,回調(diào)時(shí)即進(jìn)行相關(guān)處理并反饋給用戶界面,同時(shí)將BTSDK的接口進(jìn)行進(jìn)一步封裝,供外部模塊使用。
(3)藍(lán)牙設(shè)備模塊封裝了所有的藍(lán)牙設(shè)備處理模型,包含藍(lán)牙設(shè)備和藍(lán)牙服務(wù)的搜索發(fā)現(xiàn)、設(shè)備管理,以及部分用于藍(lán)牙連接的函數(shù)信息。
(4)數(shù)據(jù)傳輸模塊可以分為兩個(gè)部分:數(shù)據(jù)上傳和數(shù)據(jù)下載。
(5)記錄管理模塊用來保存所有已經(jīng)搜索到的藍(lán)牙設(shè)備,以便用戶再次進(jìn)行數(shù)據(jù)傳輸。
(6)界面模塊設(shè)計(jì)與傳送文件相關(guān)的用戶界面,包含初始界面、搜索界面、文件界面、下載界面等。
3.2 藍(lán)牙設(shè)備管理
本系統(tǒng)通過JSR82 來實(shí)現(xiàn)與移動(dòng)藍(lán)牙終端的通信,藍(lán)牙設(shè)備模塊包含所有與藍(lán)牙設(shè)備及其操作相關(guān)的模型,包括查找設(shè)備與服務(wù)、設(shè)備管理、設(shè)備通信三部分。
3.2.1 查找設(shè)備與服務(wù)
設(shè)備和服務(wù)的查找是由JABWT中的DiscoveryAgent類和DiscoveryListener[4]類完成的。在設(shè)備和服務(wù)查找過程中,回調(diào)機(jī)制被使用。無論是DiscoveryAgent查找設(shè)備還是查找服務(wù)的方法,最后一個(gè)參數(shù)都是DiscoveryListener,一旦服務(wù)或者設(shè)備被查找到,DiscoveryListener的相關(guān)方法就會(huì)被調(diào)用。
3.2.2 設(shè)備管理
JSR82 規(guī)范介紹了用于設(shè)備管理的三個(gè)類:LocalDevice、RemoteDevice和DeviceClass[4]。LocalDevice獲得本地藍(lán)牙設(shè)備的靜態(tài)信息。它依靠javax.bluetooth.DeviceClass 類來獲得設(shè)備類型和它所提供的服務(wù)類型。RemoteDevice 獲得藍(lán)牙鄰近區(qū)的設(shè)備信息。獲得RemoteDevice 對(duì)象后就可以調(diào)用getBluetoothAddress()和getFriendlyName()方法獲得遠(yuǎn)程設(shè)備的地址和好友名稱。
3.2.3 設(shè)備通信
兩臺(tái)設(shè)備必須共享通用的通信協(xié)議才能通信。為了使應(yīng)用能夠訪問更多的藍(lán)牙服務(wù),藍(lán)牙Java API 提供了一個(gè)機(jī)制,它允許連接到使用RFCOMM、L2CAP或OBEX協(xié)議的任何服務(wù)[5]。
通過以上步驟實(shí)現(xiàn)了移動(dòng)藍(lán)牙終端與藍(lán)牙發(fā)送器連接以及數(shù)據(jù)的上傳和下載過程。
3.3 狀態(tài)機(jī)描述系統(tǒng)
交互式藍(lán)牙媒體系統(tǒng)的系統(tǒng)管理模塊應(yīng)用有限狀態(tài)機(jī)實(shí)現(xiàn)系統(tǒng)狀態(tài)的標(biāo)識(shí)與轉(zhuǎn)變。藍(lán)牙交互式系統(tǒng)應(yīng)用層狀態(tài)轉(zhuǎn)換如圖5所示。
Figure 5 Bluetooth interactive system application layer state conversion diagram圖5 藍(lán)牙交互式系統(tǒng)應(yīng)用層狀態(tài)轉(zhuǎn)換圖
在系統(tǒng)中State類和UIFsm類是實(shí)現(xiàn)有限狀態(tài)機(jī)的基類,狀態(tài)改變過程通過Action類對(duì)象反饋調(diào)用Transition類對(duì)象進(jìn)行狀態(tài)過渡。狀態(tài)過渡用到的幾個(gè)主要函數(shù)如下:
(1)addTransition(Stringe, States):添加定義的過渡狀態(tài)到當(dāng)前系統(tǒng)狀態(tài);
(2)addAction(intw, Stringn, Stringe, intf):添加當(dāng)前狀態(tài)的事件操作;
(3)doAction(intfun, Fsmfsm):狀態(tài)轉(zhuǎn)變方法,實(shí)現(xiàn)對(duì)應(yīng)狀態(tài)的過渡。
系統(tǒng)通過創(chuàng)建的Model接口和UIFsm類中的addModel()方法將State與模型類進(jìn)行匹配。系統(tǒng)各模型的狀態(tài)與狀態(tài)機(jī)的狀態(tài)相對(duì)應(yīng),并通過以下函數(shù)進(jìn)行模型轉(zhuǎn)換:
(1)addModel(Stringstate, Modelmodel):添加模型到當(dāng)前狀態(tài);
(2)getCurrentModel():獲取Model的名字;
(3)getModel(Stringstate):獲得模型對(duì)象實(shí)例;
(4)outEvent(Stringe): UIFsm狀態(tài)轉(zhuǎn)換事件處理方法,控制系統(tǒng)中的狀態(tài)改變;
(5)incoming(Stringe, Fsmf):State內(nèi)部狀態(tài)轉(zhuǎn)換處理方法;
(6)outgoing(Stringe, Fsmf):State內(nèi)部狀態(tài)轉(zhuǎn)換處理方法。
3.4 用戶界面以及操作的實(shí)現(xiàn)
系統(tǒng)的每個(gè)界面都繼承javax.microedition.lcdui包中提供的API,主要由Display和Displayable組成。
用戶界面與交互操作實(shí)現(xiàn)如圖6所示。
Figure 6 User interface and interactive operation implementation structure diagram圖6 用戶界面與交互操作實(shí)現(xiàn)結(jié)構(gòu)圖
程序中首先定義了一個(gè)BaseScreen抽象類,類中通過makeActive()方法把Display的setCurrent()方法進(jìn)行封裝并提供給所有繼承子類。Display通過setCurrent()方法切換當(dāng)前屏幕。程序中絕大部分對(duì)Item的操作是繼承自TabItem實(shí)現(xiàn)的,TabItem選用CustomItem組件作為父類,它與Canvas的事件傳輸進(jìn)行交互操作,能夠獲得屏幕上顯示的Item對(duì)象,然后通過調(diào)用TabItem的各種Form對(duì)象進(jìn)行交互。在TabItem類中要實(shí)現(xiàn)的是與設(shè)備相關(guān)的各種操作,如手機(jī)鍵盤按鍵的各種移動(dòng)、按下和釋放操作的響應(yīng)。
3.5 程序運(yùn)行機(jī)制與事件處理方法
程序運(yùn)行與事件處理流程如圖7所示。
Figure 7 Running of the program and event processing flow chart圖7 程序運(yùn)行與事件處理流程圖
程序由MIDlet的狀態(tài)函數(shù)進(jìn)入系統(tǒng),首先進(jìn)行初始化并進(jìn)入默認(rèn)的設(shè)備界面,用戶菜單包括Browser、Discover和Download命令,當(dāng)用戶通過按鍵選擇相關(guān)命令后會(huì)觸發(fā)當(dāng)前屏幕的Form對(duì)象中對(duì)相關(guān)命令的處理函數(shù)。
在事件處理中,Command類是對(duì)一個(gè)動(dòng)作語義的封裝,而動(dòng)作的具體行為必須在CommandListener中的commandAction()方法中實(shí)現(xiàn)。Form對(duì)象全部繼承自BaseScreen類,BaseScreen類實(shí)現(xiàn)了CommandListener, CommandListener是MIDlet程序在屏幕導(dǎo)航中廣泛使用的接口,Displayable對(duì)象通過addCommand()方法添加Command實(shí)例來接受高級(jí)事件,添加之后利用commandAction()方法進(jìn)行事件處理。
3.6 與實(shí)際產(chǎn)品的互操作測(cè)試結(jié)果
藍(lán)牙SIG 定義了一些測(cè)試用例,但它們的測(cè)試路徑覆蓋率不夠高,為此我們經(jīng)過仔細(xì)分析軟件執(zhí)行路徑和profiles 自身的關(guān)鍵特征,新增了異常情況和特殊情況下的測(cè)試用例,以盡可能地提高測(cè)試充分性。
表1為根據(jù)藍(lán)牙互操作規(guī)范定義的部分測(cè)試用例,每個(gè)用例提供了一個(gè)使用場(chǎng)景和期望的結(jié)果。
Table 1 Part of test cases表1 部分測(cè)試用例設(shè)計(jì)
圖8所示為程序部分功能屏幕截圖。
Figure 8 Part of the program screenshot圖8 程序屏幕截圖
測(cè)試結(jié)果發(fā)現(xiàn),對(duì)于Nokia、Sony Erricson 與Motorola 等品牌的手機(jī),交互式藍(lán)牙系統(tǒng)都能夠正常安裝。安裝成功后手機(jī)系統(tǒng)在程序初始化后都能正常進(jìn)入默認(rèn)界面,并順利通過測(cè)試用例的測(cè)試。測(cè)試中由于不同手機(jī)的導(dǎo)航鍵屬性值不同,導(dǎo)致部分手機(jī)系統(tǒng)中不能通過導(dǎo)航鍵跳轉(zhuǎn)界面,這屬于程序考慮范圍內(nèi),程序通過手機(jī)數(shù)字按鍵實(shí)現(xiàn)了導(dǎo)航鍵的跳轉(zhuǎn)功能,測(cè)試結(jié)果與預(yù)期結(jié)果相同。
3.7 與傳統(tǒng)藍(lán)牙產(chǎn)品的技術(shù)比較
大多數(shù)藍(lán)牙技術(shù)采用推送技術(shù)進(jìn)行數(shù)據(jù)傳輸,用戶只能單向地選擇是否接收發(fā)送端發(fā)送過來的數(shù)據(jù),但是并不能對(duì)發(fā)送端的數(shù)據(jù)內(nèi)容進(jìn)行自主交互瀏覽。
交互式藍(lán)牙系統(tǒng)使用戶與藍(lán)牙發(fā)送器之間產(chǎn)生互動(dòng),能使用戶任意地選擇所需的內(nèi)容,大大地增強(qiáng)了整個(gè)藍(lán)牙網(wǎng)絡(luò)系統(tǒng)的交互性與適用性。
本文針對(duì)藍(lán)牙用戶不能對(duì)藍(lán)牙發(fā)送內(nèi)容進(jìn)行選擇接收這一缺陷,采用J2ME和藍(lán)牙技術(shù)開發(fā)了一個(gè)基于J2ME的藍(lán)牙交互式系統(tǒng)。
藍(lán)牙交互式系統(tǒng)突破了傳統(tǒng)手機(jī)藍(lán)牙及藍(lán)牙發(fā)射器的局限性,使用戶手機(jī)與藍(lán)牙發(fā)送器產(chǎn)生自主的互動(dòng)效應(yīng),用戶可自主地選擇所需瀏覽的節(jié)目?jī)?nèi)容和使用服務(wù)娛樂功能,使各類型場(chǎng)所均可形成一個(gè)區(qū)域性網(wǎng)絡(luò)。藍(lán)牙手機(jī)用戶真正能夠得到他們喜歡和需要的功能與服務(wù),其應(yīng)用范圍將十分廣泛。
[1] McDermott-Wells P. What is Bluetooth [J]. IEEE Potentials,2004,23 (5):33-35.
[2] Wang Li-ming,Yin Bo,Bie Zai-ping. Implementation of LBS system based on J2ME and Bluetooth GPS[J]. Microcomputer Information,2009,25(2-3):5-7.(in Chinese)
[3] Zhou Zhen,Guo Qing-ping. Development and implementation of Bluetooth based on J2ME [J].Computer Knowledge and Technology(Academic Exchange),2007(13):93-94.(in Chinese)
[4] Haartsen J,Naghshineh M,Inouye J,et al.Bluetooth:Vision,goals,and architecture[J]. Mobile Computing and Communications Review, 1998, 2(11):65-69.
[5] Ma Yi-hua, Feng En-xin. Applications and implementation of J2ME Bluetooth technology based on JSR-82 specification[J].Radio Engineering,2004,34(8):48-50.(in Chinese)
附中文參考文獻(xiàn):
[2] 王立明,殷波,別再平.基于J2ME和藍(lán)牙GPS的LBS系統(tǒng)設(shè)計(jì)[J]. 微計(jì)算機(jī)信息,2009,25(2-3):5-7.
[3] 周臻,郭慶平.基于J2ME的藍(lán)牙應(yīng)用開發(fā)及實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2007(13):93-94.
[5] 馬毅華,馮恩信.基于JSR-82規(guī)范的J2ME藍(lán)牙應(yīng)用及其實(shí)現(xiàn)[J].無線電工程,2004,34(8):48-50.
WANGZhao-shun,born in 1969,PhD,professor,CCF member(E200006628S),his research interest includes software engineering.
DesignandimplementationofaninteractivesystembasedonBluetooth
WANG Zhao-shun1,XU Bai-quan2
(1.School of Computer and Communication Engineering,University of Science and Technology Beijing,Beijing 100083;2.Department of Information Engineering,Langfang Oriental Institute of Technology,Langfang 065001,China)
With the development of the wireless connectivity technology and the mobile terminal technologies, mobile terminal users such as mobile phone users ask Bluetooth products for higher requirements. Bluetooth uses the push technology to transfer data, and users only have authority to choose whether to receive the data but cannot browse the data from the Bluetooth transmitter independently and interactively. An interactive system based on the J2ME and Bluetooth technologies is introduced. It utilizes the advantage of cross-platform of J2ME as well as the advantages of easy of use and practicability of Bluetooth technology to transfer data. Based on the JSR82 Java Bluetooth wireless technology API provided in the specification, the design scheme and system structure of the proposed Bluetooth interactive system is given. Based on the J2ME wireless application development kit and the MIDlet programming model, the interactive system is implemented.
Bluetooth protocol;J2ME;interactive
1007-130X(2014)08-1500-05
2013-06-28;
:2013-11-15
TP391.9
:A
10.3969/j.issn.1007-130X.2014.08.013
王昭順(1969-),男,江西南豐人,博士,教授,CCF會(huì)員(E200006628S),研究方向?yàn)檐浖こ?。E-mail:zhswang@sohu.com
通信地址:065001 河北省廊坊市廊坊東方職業(yè)技術(shù)學(xué)院信息工程系 徐柏權(quán)
Address:Department of Information Engineering,Langfang Oriental Institute of Technology,Langfang 065001,Hebei,P.R.China