藍牙車(chē)載產(chǎn)品的兼容性設計
引言
本文引用地址:http://dyxdggzs.com/article/108773.htm藍牙技術(shù)問(wèn)世10余年,得到了廣泛應用,其中部分原因在于藍牙SIG組織為各種應用以Profile的形式定義了應用協(xié)議,這樣藍牙設備之間的互操作便有章可循,但即使如此,藍牙設備之間的互操作性又稱(chēng)兼容性問(wèn)題仍存在于幾乎所有藍牙應用中。筆者歷時(shí)兩年時(shí)間為某合資汽車(chē)廠(chǎng)商開(kāi)發(fā)了一款藍牙車(chē)載產(chǎn)品,實(shí)現了免提通話(huà)、雙重呼叫管理、電話(huà)本自動(dòng)下載與手動(dòng)下載、流媒體音樂(lè )播放及遠程控制功能,期間測試了近100部手機和音樂(lè )播放器,遇到并解決了各種兼容性問(wèn)題。結合產(chǎn)品開(kāi)發(fā)過(guò)程中測試并解決兼容性問(wèn)題的經(jīng)驗,本文對兼容性問(wèn)題出現的原因進(jìn)行了分析,大致有以下三個(gè)方面的原因:具體應用本身定義不嚴格、應用上下文差異、引入協(xié)議帶來(lái)的兼容性。以下就這三個(gè)方面進(jìn)行詳細分析并結合具體實(shí)例,說(shuō)明其解決方法。
應用定義不嚴格
藍牙SIG組織定義了Profile,對各種功能的實(shí)現方式做了規范,并且定義了必選功能和可選功能,設備廠(chǎng)商可以對可選項有選擇得實(shí)現,這樣便會(huì )造成一定的差異。而且Profile并沒(méi)有對應用本身做嚴格定義,只是定義了功能,而應用是功能的集合體,Profile并沒(méi)有定義怎么由多個(gè)功能組合實(shí)現某個(gè)應用,這樣藍牙設備廠(chǎng)商在實(shí)現某一應用時(shí)便有了差異性。雙重呼叫是車(chē)載設備免提通話(huà)應用中兼容性最多的一種應用,下面分析下該應用出現兼容性問(wèn)題的原因并舉例剖析其解決方法。
對于免提通話(huà)而言,比較重要的幾個(gè)功能是呼叫建立提示CALL_SETUP、呼叫保持CALL_HELD、呼叫結果CALL、呼叫信息CLCC,手機在呼叫狀態(tài)產(chǎn)生變化時(shí)實(shí)時(shí)向免提設備端傳送這些提示消息,免提設備端便可以與手機的呼叫狀態(tài)保持一致,在免提設備端控制呼叫才符合預期。其中CALL_SETUP和CALL是必選功能,但對于雙重呼叫而言非常重要的CALL_HELD和CLCC卻是可選功能,雙重呼叫在免提剖面HFP(Hands-Free Profile)中定義為T(mén)hree way calling,這也是一個(gè)可選功能。這樣在支持雙重呼叫時(shí),各種手機便以自己的方式來(lái)支持或者部分支持,這樣便來(lái)了雙重呼叫的兼容性問(wèn)題。下面以第二個(gè)呼叫為呼出為例剖析解決方法。
當撥打第二個(gè)電話(huà)時(shí),手機會(huì )發(fā)送CALL_SETUP=2消息,表示正在呼出,結果有對方拒接、對方接聽(tīng)、未撥通這么幾種情況。顯然判斷出呼出結果是至關(guān)重要的,我們通過(guò)對手機進(jìn)行測試然后根據其表現特性進(jìn)行分類(lèi),將手機分為如下幾類(lèi):A-支持CALL_HELD不支持CLCC、B-支持CALL_HELD和CLCC、C-支持CLCC不支持CALL_HELD而且手機在Three way calling下不支持CALL、D-支持CLCC不支持CALL_HELD但手機在Three way calling下支持CALL、E-不支持CALL_HELD也不支持CLCC但手機在Three way calling下支持CALL、F-不支持CALL_HELD也不支持CLCC而且手機Three way calling下不支持CALL。
對于支持CALL_HELD消息的AB類(lèi)手機而言,我們可以通過(guò)CALL_HELD來(lái)判斷呼出結果,CALL_HELD=1表示對方接聽(tīng),CALL_HELD=0則表示對方拒接或未撥通;對于支持CLCC的CD類(lèi)手機而言,如果手機在Three way calling下支持CALL,CALL=1則表示對方接聽(tīng),如果沒(méi)有CALL消息說(shuō)明對方拒接或未撥通,這時(shí)需要在CALL_SETUP=0時(shí)讀取手機當前的呼叫信息,然后根據該呼叫信息更新免提設備端的呼叫狀態(tài);對于不支持CLCC和CALL_HELD的EF類(lèi)手機而言,如果手機在Three way calling下支持CALL,CALL=1則表示對方接聽(tīng),否則在CALL_SETUP=0時(shí)默認將呼叫結果處理為對方拒接,即這個(gè)時(shí)候無(wú)法判斷呼出結果。
應用上下文差異
藍牙是個(gè)對時(shí)間特性要求很?chē)栏竦膽?,每種藍牙行為及其每個(gè)階段必須在相應時(shí)間內完成,否則可能造成失敗或者長(cháng)時(shí)間無(wú)法響應。應用的上下文是指在某個(gè)藍牙行為完成后,下面將要進(jìn)行什么樣的藍牙行為,它是由藍牙設備的應用決定的,同類(lèi)產(chǎn)品在應用上的差異便會(huì )帶來(lái)應用上下文上的差異,這樣便可能會(huì )帶來(lái)兼容性問(wèn)題。比如在藍牙車(chē)載設備與藍牙手機互操作完成配對后,當車(chē)載設備實(shí)現配對后的自動(dòng)連接時(shí),便由于手機在配對完成后的處理有所不同而遇到了兼容性問(wèn)題。車(chē)載設備實(shí)現了配對后的自動(dòng)連接功能,在配對完成后車(chē)載設備讀取外部設備的SDP進(jìn)行服務(wù)查詢(xún)以判斷外部設備類(lèi)型(包括免提、音頻流、免提+音頻流三種類(lèi)型)然后自動(dòng)連接其免提或音頻流服務(wù),結果造成部分手機讀取SDP失敗、部分手機自動(dòng)連接失敗、部分手機處于長(cháng)時(shí)間無(wú)法響應的狀態(tài)。
評論