引言
隨著藍(lán)牙手機(jī)的普及,越來越多的車主安裝了藍(lán)牙車載免提裝置,跟藍(lán)牙手機(jī)建立連接后便可以通過汽車內(nèi)部的麥克風(fēng)和音響進(jìn)行通話。為了方便用戶撥打電話,本文研制了一款可以從手機(jī)上下載電話簿的免提裝置,通過液晶屏和按鍵,用戶可以對(duì)電話簿條目進(jìn)行導(dǎo)航,選擇電話號(hào)碼進(jìn)行撥打。該免提裝置的藍(lán)牙部分采用Bluecore5-MM芯片,液晶屏和按鍵接口在8位單片機(jī)PIC18F2480上實(shí)現(xiàn),同時(shí)借助PIC18F2480內(nèi)部的CAN控制器,該免提裝置可以輕松集成到車載CAN網(wǎng)絡(luò)中。其結(jié)構(gòu)框圖見圖1。
為了保證電話簿數(shù)據(jù)的一致性,當(dāng)用戶在手機(jī)上更新了電話簿時(shí),免提裝置上的電話簿數(shù)據(jù)庫也應(yīng)該同步更新,藍(lán)牙SIG組織沒有單獨(dú)定義同步協(xié)議,本文在分析通用的數(shù)據(jù)同步協(xié)議SyncML的基礎(chǔ)上,將SyncML與藍(lán)牙OBEX綁定,實(shí)現(xiàn)了免提裝置和手機(jī)間電話簿的同步。 SyncML簡介 SyncML是同步標(biāo)記語言(Synchronous Markup Language)的縮寫,旨在提供一種終端用戶、設(shè)備開發(fā)商、數(shù)據(jù)提供商、基礎(chǔ)構(gòu)件開發(fā)商、應(yīng)用軟件開發(fā)商及服務(wù)提供商協(xié)同工作的機(jī)制,使得任何終端設(shè)備均可隨時(shí)隨地進(jìn)行數(shù)據(jù)同步。它包括同步協(xié)議、表示協(xié)議和傳輸綁定協(xié)議三個(gè)部分。 同步協(xié)議 同步協(xié)議指定了如何使用表示協(xié)議以滿足客戶端和服務(wù)器SyncML的互操作性,以消息序列表(message sequence chart)的形式定義了七種同步類型的會(huì)話流程,以請(qǐng)求/響應(yīng)的形式定義了會(huì)話中的數(shù)據(jù)交互過程等。同步協(xié)議采用客戶端/服務(wù)器模式定義了同步框架,劃分了客戶端和服務(wù)器的任務(wù)模塊。 其中,服務(wù)器的同步引擎負(fù)責(zé)整個(gè)數(shù)據(jù)同步操作,同步服務(wù)器代理和同步客戶端代理實(shí)現(xiàn)同步協(xié)議,SyncML接口實(shí)現(xiàn)表示協(xié)議,SyncML適配器實(shí)現(xiàn)傳輸協(xié)議的綁定,用于收發(fā)XMI語言格式的object。下面通過同步協(xié)議定義的幾個(gè)重要概念來描述一下同步機(jī)制。 客戶端和服務(wù)器端都要建立自己的數(shù)據(jù)庫,每個(gè)數(shù)據(jù)條目都由一個(gè)UID(唯一標(biāo)識(shí)符)進(jìn)行標(biāo)識(shí),客戶端UID稱為LUID,服務(wù)器UID稱為GUID。服務(wù)器建立一個(gè)ID映射表,使得LUID可以和GUID一一映射,當(dāng)數(shù)據(jù)條目發(fā)生更改時(shí),建立記錄更改信息的變更日志。當(dāng)同步開始后,通過UID映射和變更日志指定是哪個(gè)數(shù)據(jù)條目發(fā)生了怎樣的改變。 為了檢查同步效果,服務(wù)器端和客戶端各有兩個(gè)同步錨last和next,一般情況是用ISO8601格式的日歷時(shí)間,也可以用一個(gè)序列號(hào),在初始化同步時(shí)客戶端和服務(wù)器端互換同步錨,它的用法如下: 設(shè)本次同步客戶端同步錨為last_c、next_c,服務(wù)器端同步錨為last_s、next_s,同步成功,則更新next_c=next_s,同步不成功則不更新next_c。 下次同步時(shí),客戶端同步錨為last_c'=next_c、next_c',服務(wù)器端同步錨為last_s'=next_s、next_s',客戶端發(fā)送last_c'和next_c'到服務(wù)器端,服務(wù)器端比較last_c'與last_s',相等則說明上次同步是成功的,不相等則說明上次同步失敗。檢查出上次同步失敗后就要初始化慢同步(雙向同步所有數(shù)據(jù))下載所有的電話簿數(shù)據(jù)。 表示協(xié)議 表示協(xié)議定義了SyncML同步應(yīng)用中XML(Extensible MarkupLanguage)的語法和語義,是一種與平臺(tái)無關(guān)并被廣泛采用的標(biāo)準(zhǔn)。SyncML以XML文檔的形式定義了SyncML消息的格式,每條消息就是一個(gè)單獨(dú)的XML文檔。該文檔包括一個(gè)Header和Body,Header以SyncHdr類型定義,指定了該SyncML消息的路由和版本信息;Body以SyncBody類型定義,包含了一條或多條SyncML操作,一個(gè)操作的語義由命令和被操作數(shù)據(jù)的類型共同確定。SyncMLDTD定義了SyncML消息中通用元素的類型,根據(jù)這些通用元素類型可以指定特定的元素類型,從而滿足各種數(shù)據(jù)同步的擴(kuò)展需要。 SyncML在藍(lán)牙車載免提裝置中的實(shí)現(xiàn) SyncML OBEX綁定協(xié)議 OBEX(Object Exchange)是紅外數(shù)據(jù)標(biāo)準(zhǔn)協(xié)會(huì)(IrDA)定義的用于對(duì)象交換的一種協(xié)議,后被藍(lán)牙SIG組織采納,定義了GOEP(General Object ExchangeProfile)與其適配。在GOEP的基礎(chǔ)上,藍(lán)牙SIG定義了FTP、OPP、PBAP剖面應(yīng)用,其中PBAP是專為電話簿數(shù)據(jù)的自動(dòng)下載定義的剖面,可以下載手機(jī)和SIM卡上存儲(chǔ)的電話簿,還可以下載呼叫日志、呼入、呼出和未接來電。OPP可以用于電話簿的手動(dòng)下載。SyncML針對(duì)OBEX定義的綁定協(xié)議分別定義了SyncML在紅外OBEX和藍(lán)牙OBEX上的實(shí)現(xiàn)方式,跟藍(lán)牙OBEX的綁定如圖2所示。