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