藍牙電話之PBAP協議分析

藍牙電話之PBAP—簡介

藍牙電話應用不但需要HFP協議來支持打電話的功能,還有查看通訊錄和通話記錄等需求,那這就是PBAP協議乾的事了,本系列我們就來聊一聊PBAP的前世今生。

PBAP:Phone Book Access Profile的簡稱,電話本訪問協議,是一種基於OBEX的上層協議,該協議可以同步手機這些具有電話本功能設備上的通訊錄和通話記錄等信息。該協議初始版本爲2004-05-20的D05r00版本,隨着後續的不斷髮展優化,首次被藍牙組織SIG董事會採用是2013-11-05的v1.2.0版本,當前最新版本爲2019-01-21發佈的v1.2.3。我們之後所講的PBAP協議規定都是以2015-12-15發佈的v1.2.1版本爲唯一依據,詳情可查看《PBAP_v1.2.1.pdf》。
在這裏插入圖片描述

PBAP協議規定兩種角色:

  • PSE:Phone Book Server Equipment,擁有電話本源數據的設備,作爲服務端,比如手機。
  • PCE:Phone Book Client Equipment,向PSE端請求電話本信息的設備,作爲客戶端,比如車載藍牙。
    在這裏插入圖片描述

由於PBAP協議是基於OBEX協議之上的應用層協議,所以我們先來簡單學習下OBEX的相關知識,依據的協議爲OBEX 1.3版本,詳情可參考《OBEX 1.3.pdf》。

OBEX:Object Exchange的簡稱,對象交換協議,來源於紅外通訊協議,但又不侷限於具體的傳輸方式,後來被藍牙組織SIG吸納其中部分並進行優化處理作爲藍牙協議中的OBEX層用於藍牙設備間的文件數據傳輸,如藍牙傳輸文件(OPP)、同步電話簿(PBAP)和同步短信(MAP)等場景下都是以OBEX協議組織相關數據進行傳輸的。

OBEX協議有兩種角色ServerClinet,通過request-response(請求-響應)形式進行交互,即客戶端Client進行請求,服務端Server響應客戶端請求的方式傳輸數據對象。應用於PBAP協議中客戶端只能進行讀取操作,不能對源數據進行修改操作,這樣保證了源數據的安全性。

OBEX協議的數據組成有兩個關鍵部分,分別爲對象模型和會話協議。

(1) 對象模型:根據相關具體應用而定,這部分定義了Header來描述對象的一個方面,多個Header的集合便是一個完整的對象。

每個Header都是由兩部分組成:HI + HV

  • HI:the header ID,一個字節,高兩位代表ID的編碼方式,低六位代表ID的含義
    在這裏插入圖片描述
    所以協議定義瞭如下這些HI,紅色圖框標註的幾個類型的HI在PBAP中很重要:
    在這裏插入圖片描述
    HI=0x4C的APP.Parameters表示基於OBEX的上層應用協議在請求或響應包中傳遞的附加信息,也是由一系列連續的Tag-Length-Value構造組成:在這裏插入圖片描述
    那這一系列參數在PBAP中的構造組成主要是:在這裏插入圖片描述

  • HV:the header value,一個或多個字節,代表HI指示類型的具體值

(2) 會話協議:即Client和Server端採用請求-響應的方式進行數據傳輸

  • 請求數據格式
    在這裏插入圖片描述
    每個請求包必須有響應確認。
    請求命令中的opcode有如下選擇:在這裏插入圖片描述
    其中紅框標註的則是在PBAP中常使用到的三條指令,主要是建立連接、斷開連接,還有一個Get就是數據傳輸的主要實現方式,PBAP中獲取通訊錄及通話記錄都是以這樣的方式同步數據的。

  • 響應數據格式
    在這裏插入圖片描述
    迴應Client端的請求,response code有多種定義及說明,感興趣的同學自行可以查看《OBEX 1.3.pdf》的3.2.1部分,但主要使用的回覆code還是0xA0(OK)和0x90(Continue)。

前面OBEX會話協議中的請求部分也介紹到了在PBAP中常用的三種請求,接下來我們再分別就這些請求再加以詳細說明。

1、Connect在這裏插入圖片描述

  • OBEX version number:已編碼的OBEX協議版本,當前默認爲1.0,這個和OBEX協議沒有必然相同的關係。
  • lags:連接的標誌,默認爲 0。
  • maximum OBEX packet length:OBEX數據傳輸的最大包長,連接兩方協議確定。

2、Disconnect在這裏插入圖片描述

3、Get在這裏插入圖片描述

總體而言OBEX的操作還是挺簡單的,更多OBEX的詳細分析可以參考協議或相關文章,這裏就不做過多介紹。

接下來我們再回來看看PBAP協議在整體藍牙協議結構中的位置:在這裏插入圖片描述

從上面的藍牙協議棧結構中可以看出,PBAP應用層協議處於最上層,之後就是數據格式處理方式,由於通訊錄在手機中都是以vCard的格式存儲的,所以這邊爲vCard的數據處理格式。再往下就是通過OBEX協議層聯通藍牙協議棧中的RFCOMM,最後通過統一的數據傳輸通道l2cap鏈路發送數據。

當前vCard的版本有vCard 2.1 and vCard 3.0兩種版本,所以PSE需要兩種數據格式都支持,同步數據時根據PCE請求的哪種格式就以那種格式封裝數據進行傳輸。但是無論哪種格式,vCard屬性內容的字符集使用唯一的字符編碼utf-8格式進行編碼轉換。

PSE如果是手機等帶有SIM卡的設備,那其存儲源數據的地方可能是手機也可能是SIM卡,因此在同步數據時需要考慮的更全面。這樣的設備數據存儲形式如下圖所示:在這裏插入圖片描述

其中的各個電話簿對象說明如下表:
在這裏插入圖片描述

所以在同步獲取相關數據時需要指明從哪個路徑下獲取對應的數據,即從手機同步還是從SIM卡中同步數據。

  • 手機路徑:telecom/xxx.vcf
  • SIM卡路徑:SIM1/telecom/xxx.vcf

因此根據同步的路徑和同步對象的不同,我們大致可以得出四種不同的同步命令:

  1. 同步手機中的通訊錄
  2. 同步SIM卡中的通訊錄
  3. 同步手機中的通話記錄
  4. 同步SIM卡中的通話記錄

在後面的PBAP同步流程分析中我們也將着重講解以上四個方面,使用PBAP協議中的Phone Book Download Feature功能,同步PCE感興趣的電話簿對象,整體流程如下:在這裏插入圖片描述

藍牙電話中關於PBAP協議我們就總結到這,後續分別總結下PBAP的連接斷開、同步等流程,感興趣的小夥伴歡迎私信留言一起討論。

更多互聯互通技術,歡迎關注微信公衆號:Connectivity在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章