OBEX在藍牙開(kāi)發(fā)中的應用
OBEX(Object Exchange)協(xié)議將點(diǎn)對點(diǎn)設備間的信息交互應用以面向對象的方式分解為數據+操作,把數據柔性抽象為對象來(lái)描述,同時(shí)定義一種信息交互方式規范操作。OBEX協(xié)議的兩個(gè)關(guān)鍵部分便是定義了對象模型和會(huì )話(huà)方式,對象模型依據應用而定,定義了Header描述對象的一個(gè)方面,Header的集合便是一個(gè)完整的對象。會(huì )話(huà)采用請求-響應方式,客戶(hù)端發(fā)起請求,服務(wù)器端給與響應。下面從對象模型和會(huì )話(huà)協(xié)議上詳細解析下OBEX協(xié)議。
對象模型
對象模型是對對象本身的抽象描述,它定義了Header的概念,一個(gè)Header描述對象的一個(gè)方面。對象模型是一系列Header的集合體,依據應用而定,因為OBEX是很多應用的基礎協(xié)議,所以這里的應用包括底層信息交互操作及其之上的應用。對象模型可以認為是對象和應用之間的載體,因為它一方面描述了對象信息,另一方面又滿(mǎn)足具體應用的可操作性。
下面對Header舉個(gè)例子。比如文件傳輸應用,將文件抽象為對象模型時(shí),需要的Header有文件名稱(chēng)Name、文件數據長(cháng)度DataLength、文件類(lèi)型Type,可能還會(huì )有ApplicatiON specific Header即具體應用相關(guān)的Header,比如定義MASK選定文件數據只包含某些屬性。
Header的形式為ID+Value,ID為單字節,它定義了Value類(lèi)及其表示格式,Bit7和Bit6指定了Value值的格式,如ID==0x01則表示NAME,格式為兩字節長(cháng)度+以0x00結尾的字符串數據的方式,當文件名為teST.txt時(shí),Header即為01 00 0b 't' 'e' 's' 't' '.' 't' 'x' 't' 00。ID作為Value的一種描述,就
像Header只是對象的一種描述一樣,這種定義方式大大擴展了OBEX的Header空間。
會(huì )話(huà)協(xié)議
OBEX會(huì )話(huà)協(xié)議定義了請求-響應形式的會(huì )話(huà)式操作,定義發(fā)起請求的一端為客戶(hù)端,給與響應的為服務(wù)器端,OBEX應用便是在客戶(hù)端和服務(wù)器端的一系列請求-響應會(huì )話(huà)中完成的。OBEX以“操作符”的方式來(lái)定義請求,以“回應符”的方式定義響應。操作符包括:連接CONNECT(0x80)、斷開(kāi)連接DISCONNECT(0x81)、發(fā)送PUT(0x02,0x82)、索取GET(0x03,0x83)、設置路徑SETPATH(0x85)、中止當前會(huì )話(huà)ABORT(0xff);回應符有0x90-繼續、0xA0-成功和其他表示錯誤原因的回應符。
OBEX是個(gè)嚴謹的協(xié)議,其會(huì )話(huà)協(xié)議的設計實(shí)現首先遵從一問(wèn)一答的會(huì )話(huà)方式,如果在沒(méi)有應答之前發(fā)送下一個(gè)請求會(huì )造成服務(wù)器端拒絕該請求;其次客戶(hù)端和服務(wù)器端都定義了一系列狀態(tài)表示會(huì )話(huà)進(jìn)程及進(jìn)行狀態(tài)的跳轉,比如當前進(jìn)行的PUT操作,當操作符為0x02,服務(wù)器端給與回應符0x90之后,客戶(hù)端這時(shí)不能進(jìn)行GET操作,必須等到發(fā)完了最后一包即操作符為0x82,服務(wù)器端給與回應符0xA0之后才能發(fā)起GET請求,否則GET請求會(huì )被服務(wù)器端視為錯誤的請求而給與錯誤回應。
OBEX在PBAP中的應用
PBAP(PhoneBook Access Profile)是專(zhuān)門(mén)為藍牙車(chē)載設備自動(dòng)下載手機內的電話(huà)本和呼叫日志而定義的一套協(xié)議,它將電話(huà)本和呼叫日志定義成特定的對象模型,定義了五種文件-Local Phone電話(huà)本、SIM卡電話(huà)本、Dialed Call、Missed Call、Received Call,文件類(lèi)型Type和文件名Name均固定,如SIM卡的電話(huà)本文件類(lèi)型為"x-^/phonebook",文件名為"SIM1/telecom/pb.vcf"。
PBAP在OBEX上的適配非常簡(jiǎn)單,客戶(hù)端(車(chē)載設備)向服務(wù)器端(手機)發(fā)起連接請求時(shí)指定Target為796135f0-f0c5-11d8-0966-0800200c9a66(十六進(jìn)制),表示OBEX連接的目的是PBAP應用,建立連接后,客戶(hù)端發(fā)起GET命令,請求類(lèi)型為"x-^/phonebook",名稱(chēng)為"SIM1/telecom/pb.vcf"的文件,便能下載SIM卡中的電話(huà)本。PABP可以通過(guò)一個(gè)Application Specific Header設置電話(huà)本數據即VCARD中含有的屬性,一般設置為含有VERSION-版本、N名字、TEL電話(huà)號碼,PHOTO之類(lèi)的數據量很大但無(wú)用的屬性便可以過(guò)濾掉,從而減少了傳輸數據量,加快了下載速度。
相比較于沒(méi)有得到普及的IrMC電話(huà)本同步,PBAP只提供下載功能,而沒(méi)有動(dòng)態(tài)更新的功能,從而不用定義特別的命令,在OBEX之上采用GET命令便能實(shí)現,正因其簡(jiǎn)單,所以被大多數手機廠(chǎng)商所接受得到了大量的應用。
OBEX在OPP中的應用
OPP(Object Push Profile)對象推送協(xié)議,是藍牙在OBEX協(xié)議的基礎上定義實(shí)現的一個(gè)專(zhuān)屬協(xié)議,它做為一個(gè)手動(dòng)傳輸協(xié)議,用于資源在設備間的共享傳輸。OPP的應用加入了人為的選擇操作,大大擴展了共享對象的選擇空間,可以選擇音樂(lè )、電影、文檔、圖片或者一條電話(huà)號碼手動(dòng)PUSH到目標機。
OPP中的對象采用File的形式封裝,FileName Header后綴有.mp3、.mov、.doc、.jpg、.vcf等,對應在Type Header上都有相應的MIME類(lèi)型,數據在PUT請求中分段傳輸,目標機根據Type判斷對象屬性從而進(jìn)行相應的操作,比如當類(lèi)型為"text/x-vcard"時(shí),便能判斷出PUSH的對象為vCard形式的電話(huà)本條目,從而可以根據vCard規范提取出人名,電話(huà)號碼等屬性。
結語(yǔ)
OBEX定義了對象模型以描述各種數據,同時(shí)定義請求響應的會(huì )話(huà)方式,將點(diǎn)對點(diǎn)設備的信息交互應用統一起來(lái),本文闡述了OBEX的思想,并針對OBEX在藍牙中的應用,以PBAP、OPP為例講述了以OBEX為基礎的藍牙協(xié)議的綁定實(shí)現,對采用OBEX做藍牙開(kāi)發(fā)的工程師具有很好的指導意義。
評論