<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 汽車電子 > 設(shè)計(jì)應(yīng)用 > 藍(lán)牙車載產(chǎn)品的兼容性設(shè)計(jì)

          藍(lán)牙車載產(chǎn)品的兼容性設(shè)計(jì)

          —— Compatibility Design of Bluetooth Automobile Products
          作者:馬建輝 單鐵城 山東省科學(xué)院自動(dòng)化研究所山東省汽車電子重點(diǎn)實(shí)驗(yàn)室 馬共立 哈爾濱威克科技 時(shí)間:2010-05-07 來源:電子產(chǎn)品世界 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/108773.htm

            技術(shù)問世10余年,得到了廣泛應(yīng)用,其中部分原因在于SIG組織為各種應(yīng)用以Profile的形式定義了應(yīng)用協(xié)議,這樣設(shè)備之間的互操作便有章可循,但即使如此,藍(lán)牙設(shè)備之間的互操作性又稱兼容性問題仍存在于幾乎所有藍(lán)牙應(yīng)用中。筆者歷時(shí)兩年時(shí)間為某合資汽車廠商開發(fā)了一款藍(lán)牙車載產(chǎn)品,實(shí)現(xiàn)了免提通話、雙重呼叫管理、電話本自動(dòng)下載與手動(dòng)下載、流媒體音樂播放及遠(yuǎn)程控制功能,期間測(cè)試了近100部手機(jī)和音樂播放器,遇到并解決了各種兼容性問題。結(jié)合產(chǎn)品開發(fā)過程中測(cè)試并解決兼容性問題的經(jīng)驗(yàn),本文對(duì)兼容性問題出現(xiàn)的原因進(jìn)行了分析,大致有以下三個(gè)方面的原因:具體應(yīng)用本身定義不嚴(yán)格、應(yīng)用上下文差異、引入?yún)f(xié)議帶來的兼容性。以下就這三個(gè)方面進(jìn)行詳細(xì)分析并結(jié)合具體實(shí)例,說明其解決方法。

            應(yīng)用定義不嚴(yán)格

            藍(lán)牙SIG組織定義了Profile,對(duì)各種功能的實(shí)現(xiàn)方式做了規(guī)范,并且定義了必選功能和可選功能,設(shè)備廠商可以對(duì)可選項(xiàng)有選擇得實(shí)現(xiàn),這樣便會(huì)造成一定的差異。而且Profile并沒有對(duì)應(yīng)用本身做嚴(yán)格定義,只是定義了功能,而應(yīng)用是功能的集合體,Profile并沒有定義怎么由多個(gè)功能組合實(shí)現(xiàn)某個(gè)應(yīng)用,這樣藍(lán)牙設(shè)備廠商在實(shí)現(xiàn)某一應(yīng)用時(shí)便有了差異性。雙重呼叫是車載設(shè)備免提通話應(yīng)用中兼容性最多的一種應(yīng)用,下面分析下該應(yīng)用出現(xiàn)兼容性問題的原因并舉例剖析其解決方法。

            對(duì)于免提通話而言,比較重要的幾個(gè)功能是呼叫建立提示CALL_SETUP、呼叫保持CALL_HELD、呼叫結(jié)果CALL、呼叫信息CLCC,手機(jī)在呼叫狀態(tài)產(chǎn)生變化時(shí)實(shí)時(shí)向免提設(shè)備端傳送這些提示消息,免提設(shè)備端便可以與手機(jī)的呼叫狀態(tài)保持一致,在免提設(shè)備端控制呼叫才符合預(yù)期。其中CALL_SETUP和CALL是必選功能,但對(duì)于雙重呼叫而言非常重要的CALL_HELD和CLCC卻是可選功能,雙重呼叫在免提剖面HFP(Hands-Free Profile)中定義為Three way calling,這也是一個(gè)可選功能。這樣在支持雙重呼叫時(shí),各種手機(jī)便以自己的方式來支持或者部分支持,這樣便來了雙重呼叫的兼容性問題。下面以第二個(gè)呼叫為呼出為例剖析解決方法。

            當(dāng)撥打第二個(gè)電話時(shí),手機(jī)會(huì)發(fā)送CALL_SETUP=2消息,表示正在呼出,結(jié)果有對(duì)方拒接、對(duì)方接聽、未撥通這么幾種情況。顯然判斷出呼出結(jié)果是至關(guān)重要的,我們通過對(duì)手機(jī)進(jìn)行測(cè)試然后根據(jù)其表現(xiàn)特性進(jìn)行分類,將手機(jī)分為如下幾類:A-支持CALL_HELD不支持CLCC、B-支持CALL_HELD和CLCC、C-支持CLCC不支持CALL_HELD而且手機(jī)在Three way calling下不支持CALL、D-支持CLCC不支持CALL_HELD但手機(jī)在Three way calling下支持CALL、E-不支持CALL_HELD也不支持CLCC但手機(jī)在Three way calling下支持CALL、F-不支持CALL_HELD也不支持CLCC而且手機(jī)Three way calling下不支持CALL。

            對(duì)于支持CALL_HELD消息的AB類手機(jī)而言,我們可以通過CALL_HELD來判斷呼出結(jié)果,CALL_HELD=1表示對(duì)方接聽,CALL_HELD=0則表示對(duì)方拒接或未撥通;對(duì)于支持CLCC的CD類手機(jī)而言,如果手機(jī)在Three way calling下支持CALL,CALL=1則表示對(duì)方接聽,如果沒有CALL消息說明對(duì)方拒接或未撥通,這時(shí)需要在CALL_SETUP=0時(shí)讀取手機(jī)當(dāng)前的呼叫信息,然后根據(jù)該呼叫信息更新免提設(shè)備端的呼叫狀態(tài);對(duì)于不支持CLCC和CALL_HELD的EF類手機(jī)而言,如果手機(jī)在Three way calling下支持CALL,CALL=1則表示對(duì)方接聽,否則在CALL_SETUP=0時(shí)默認(rèn)將呼叫結(jié)果處理為對(duì)方拒接,即這個(gè)時(shí)候無法判斷呼出結(jié)果。

            應(yīng)用上下文差異

            藍(lán)牙是個(gè)對(duì)時(shí)間特性要求很嚴(yán)格的應(yīng)用,每種藍(lán)牙行為及其每個(gè)階段必須在相應(yīng)時(shí)間內(nèi)完成,否則可能造成失敗或者長(zhǎng)時(shí)間無法響應(yīng)。應(yīng)用的上下文是指在某個(gè)藍(lán)牙行為完成后,下面將要進(jìn)行什么樣的藍(lán)牙行為,它是由藍(lán)牙設(shè)備的應(yīng)用決定的,同類產(chǎn)品在應(yīng)用上的差異便會(huì)帶來應(yīng)用上下文上的差異,這樣便可能會(huì)帶來兼容性問題。比如在藍(lán)牙車載設(shè)備與藍(lán)牙手機(jī)互操作完成配對(duì)后,當(dāng)車載設(shè)備實(shí)現(xiàn)配對(duì)后的自動(dòng)連接時(shí),便由于手機(jī)在配對(duì)完成后的處理有所不同而遇到了兼容性問題。車載設(shè)備實(shí)現(xiàn)了配對(duì)后的自動(dòng)連接功能,在配對(duì)完成后車載設(shè)備讀取外部設(shè)備的SDP進(jìn)行服務(wù)查詢以判斷外部設(shè)備類型(包括免提、音頻流、免提+音頻流三種類型)然后自動(dòng)連接其免提或音頻流服務(wù),結(jié)果造成部分手機(jī)讀取SDP失敗、部分手機(jī)自動(dòng)連接失敗、部分手機(jī)處于長(zhǎng)時(shí)間無法響應(yīng)的狀態(tài)。


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 汽車電子 藍(lán)牙

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();