新聞中心

        EEPW首頁 > 汽車電子 > 設計應用 > 藍牙車載產品的兼容性設計

        藍牙車載產品的兼容性設計

        作者:馬建輝 單鐵城 山東省科學院自動化研究所山東省汽車電子重點實驗室 馬共立 哈爾濱威克科技 時間:2010-05-07 來源:電子產品世界 收藏

          對于這種兼容性問題,需要對手機在不同應用上下文的表現特性進行分析,并根據其差異進行分類。通過對手機在配對完成后的處理進行分析,有的手機配對完成后馬上自動連接,有的需要用戶確認再手動連接,有的會通過SDP讀取車載設備的服務列表然后針對車載設備提供的服務自動連接(車載設備提供免提服務、SPP服務、SyncML服務、流媒體音樂播放服務),而有的不會自動連接,這樣分類后,根據手機特性的不同設計實現配對后的自動連接如下:

        本文引用地址:http://www.104case.com/article/108773.htm

          車載設備在配對完成后的4秒內無操作,配對后馬上自動連接的手機(如nokia 6500c)和大部分讀取SDP后自動連接的手機(如三星SGH-U608、SGH-E208),可以迅速連接上車載設備。配對完成四秒后車載設備通過SDP判斷配對設備的類型(包括免提、音頻流、免提+音頻流三種類型),如果類型為免提+音頻流,則在連接免提成功后等待10秒再去連接音頻流,之所以10秒后再去連接音頻流是因為免提連接成功后,需要連接PBAP或SyncML或SPP去下載電話本,如果同時進行A2DP的連接去連接配對設備的流媒體服務,會造成鏈路丟失,免提連接及音頻流連接斷開。如果連接免提失敗,則不再連接其音頻流服務,因為有的手機如多普達D600的PDA手機,配對完成后讀取SDP然后自動連接,有時會造成免提連接不成功,如果去連接其音頻流,連接成功,但之后從車載設備端連接手機無法連接成功。斷開流媒體后,連接免提一直失敗,必須重新配對才行。

          對于用戶確認手動連接的手機和部分讀取SDP然后自動連接車載設備的手機,在車載設備自動連接手機期間,可能會收到手機的連接請求,如果連接請求的手機與自動連接的手機為同一設備(地址相同),則接收該連接請求,否則會造成自動連接失敗。同時由于車載設備支持SPP的dev A,PDA手機的dev A可能會在配對后自動連接車載設備的SPP dev A,這時要拒絕該連接,如果不對該連接請求進行處理,會造成PDA手機處于長時間無法響應的狀態。

          藍牙技術是個開放性的協議,它借鑒了很多成熟的已經得到廣泛應用的協議,比如Syncml

          引入協議帶來的兼容性

        ,封裝在藍牙OBEX協議上可以實現個人信息的同步更新,比如vCard,它和PBAP、OPP協議結合,用來進行電話本條目和呼叫日志的封裝、下載和解析,這些協議本身便存在一定的兼容性問題,需要深入研究引入的協議,并盡量多地測試更多手機以盡量完善應用程序。下面以vCard的解析為例來說明該兼容性問題的解決方法。

          vCard是電子名片規范,定義了個人信息數據的存儲格式及訪問接口的規范,現在廣泛應用的是v2.1版本和3.0版本,對于電話本條目和呼叫日志而言,關鍵信息為姓名、電話號碼及呼叫時間。含有多個電話號碼的電話本條目,我們將之定義為VCARD,其電話號碼包含家庭電話、工作電話、手機、車載電話四種屬性。

          vCard樣例如下:

        BEGIN:VCARD
        VERSION:2.1
        N;CHARSET=UTF-8;ENCODING=QUOTED-
              PRINTABLE;:=9A=6C=5E=FA=8F=89
        TEL;CELL:13475909642
        TEL;WORK:053182605413
        END:VCARD
        以上的vCard樣例中,人名字段提取為“馬建輝”的UTF-8字符0x9A6C 0x5EFA 0x8F89,這部分的兼容性在于不同手機在封裝電話本條目的人名字段時所使用的字符集和編碼方式不一致,字符集有ASCII和UTF-8,編碼方式有8BIT、QUOTED-PRINTABLEPRINTABLE、BASE64這么幾種方式,需要對這幾種方式分別處理,比如以上vCard人名字段的處理需要把=9A=6C=5E=FA=8F=89轉換為0x9A6C 0x5EFA 0x8F89,處理代碼如下所示,temp_name數組為未處理的人名字符串,處理好的人名放在NAME數組中:
        if(temp_name[i]=='=')
         {
                if((temp_name[i+1]>=0x41)&&(temp_name[i+1]<=0x46))
         temp1=temp_name[i+1]-0x37;
                 else if((temp_name[i+1]>=0x30)&&(temp_name[i+1]<=0x39))
         temp1=temp_name[i+1]-0x30;
                 if((temp_name[i+2]>=0x41)&&(temp_name[i+2]<=0x46))
         temp2=temp_name[i+2]-0x37;
                 else if((temp_name[i+2]>=0x30)&&(temp_name[i+2]<=0x39))
         temp2=temp_name[i+2]-0x30;
              
                 NAME[name_len]=(temp1<<4)+temp2;
                 name_len++; 
                  i+=3;   
         }

          另外還需要考慮一些特殊情況,如Sony Erricson 手機電話本條目的人名字段有時會把空格處理為0xE38080,所以如果提取出0xE38080,需要把該特殊字符以空格0x20代替,否則會處理為亂碼。



        關鍵詞: 汽車電子 藍牙

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 中江县| 云南省| 梅河口市| 宁国市| 杨浦区| 资阳市| 庆城县| 莒南县| 临沧市| 嫩江县| 余江县| 浦东新区| 蒙城县| 徐州市| 鄂伦春自治旗| 太白县| 志丹县| 高唐县| 饶河县| 南华县| 得荣县| 衡阳市| 万全县| 苗栗县| 遂平县| 左云县| 万山特区| 黄浦区| 庄浪县| 虎林市| 眉山市| 崇文区| 漠河县| 鱼台县| 东宁县| 虎林市| 巴林右旗| 凤阳县| 阳信县| 通许县| 尉氏县|