SyncML在蓝牙车载信息娱乐设备上的设计与实现

发布者:科技创造者最新更新时间:2016-09-08 来源: eepw关键字:SyncML  蓝牙车载  信息娱乐设备 手机看文章 扫描二维码
随时随地手机看文章
  SyncML与蓝牙协议

  图1为SyncML的蓝牙应用协议结构图。依据SyncML协会定义的蓝牙绑定协议,SyncML服务器的蓝牙实现需要用到SDP和OBEX协议,电话簿同步应用需要用到vCard规范。SDP协议用于SyncML服务器蓝牙服务的注册,查询蓝牙手机的SyncML客户端服务以在RFCOMM层上建立蓝牙连接,该RFCOMM连接是SyncML连接的基础;OBEX(Object Exchange)是对象交换协议,它管理SyncML服务的连接,将SyncML文档封装为Object进行传输并控制传输过程;vCard规范是电子名片规范,定义了个人名片信息的标准格式,方便传播和交换。下面从这三个方面介绍SyncML的电话薄同步应用的关键点。

 

  SDP在SyncML中的应用

  SyncML绑定协议中定义了SyncML客户端和服务器的SDP纪录。

  SDP是蓝牙服务发现协议,它提供了注册蓝牙服务和搜索及浏览蓝牙服务的方法。注册蓝牙服务是本地行为,以Service Discovery DataBase即服务发现数据库的形式纪录,每条Record即服务发现数据库中的一个条目。搜索及浏览则基于C/S结构(客户端/服务器)的请求-响应形式,使得客户端可以访问服务器端的服务数据库。

  作为SyncML的服务器端,首先需要注册该蓝牙服务并处于pageable(可被寻呼)状态,这样才能被蓝牙手机发现本地设备的SyncML服务。SDP Record以结构体形式定义,定义了若干属性和数据类型,包括ServiceClassIDList、protocolDescriptorList、 Service Name、ServiceDescription等,其中ServiceClassIDList属性是最为重要的,以全局唯一标识符UUID表示,客户端搜索服务器端服务的时候便是根据该属性进行定位。

  Syncml服务器端的ServiceClassID为00000001-0000-1000-8000-0002EE000002,蓝牙协议为OBEX,数据类型均为DataElSeq。注册该服务时首先给server channel赋值为默认值0,然后为该服务分配Rfcomm 通道,将分配的通道号给server channel重新赋值。

  车载蓝牙设备与手机建立免提连接后主动发起跟手机的SyncML服务的连接,首先设备通过SyncML客户端ServiceClassID定位手机端的SyncML服务记录,然后在该服务记录中查询手机为SyncML服务分配的Rfcomm通道号,然后建立Rfcomm层的连接。

  OBEX绑定

  SyncML应用独立于具体的传输方式,换言之,针对具体的传输方式,SyncML定义了相应的绑定适配协议。对于蓝牙应用,SyncML OBEX绑定协议定义了SyncML在蓝牙上的实现方式。下面介绍OBEX协议,以及SyncML在OBEX上绑定时需要注意的地方。

  OBEX(Object Exchange)对象交换协议是采用C/S(客户/服务器)结构的面向会话的协议,它建立了“对象模型”以抽象描述各种实体,并定义了Header的概念来描述对象,一个对象便是一系列Header的集合。

  OBEX定义了OBEX客户端和服务器端的应用规范,客户端是指发起OBEX连接、初始化OBEX会话的一端。根据车载设备要在免提连接建立后进行电话薄同步的应用,车载设备需要实现OBEX客户端。OBEX客户端在之前建立的Rfcomm连接的通道上发起连接请求,请求数据为80 00 15 11 00 04 00 46 00 0e 53 59 4e 43 4d 4c 2d 53 59 4e 43。其中0x80为连接操作符,连接请求包长度为0x0015,OBEX版本为version1.1,版本号表示为0x1100,最大OBEX包长度为0x0400,0x46表示Target,Target表明连接的目的或服务,在这里Target为53 59 4e 43 4d 4c 2d 53 59 4e 43即SYNCML-SYNC,表明建立的OBEX连接用于SyncML。

  SyncML Document需要封装为SyncML MIME类型的对象在OBEX请求或响应主体内传输,该类型为"application/vnd.syncml+wbxml"。SyncML同步电话薄的速度是个很关键的用户体验,相关的关键属性值为最大OBEX包长度,它决定了每次交互的OBEX包的大小,从而决定了交互次数,该最大包长度越大,交互次数越少,从而同步速度越快,反之,同步速度越慢。该最大包长度在OBEX连接时协商决定,取双方设备能够支持的最大包长度的较小值。

  SyncML的蓝牙应用不可避免地会遇到兼容性问题,在测试过程中发现车载设备和Nokia6288手机进行同步时,车载设备通过PUT发给手机的SyncML Document的最后一包必须是空包82 00 03,否则无法继续同步。

  vCard解析

  SyncML实现的蓝牙手机和车载设备间电话薄同步应用中,首先提取出采用vCard格式的个人信息数据和相关命令,将数据和命令映射在一起存储为结构体形式的列表,然后根据 vCard规范解析出个人信息,根据命令完成添加、删除和替代电话薄条目。解析出的个人信息包括人名、手机号码、家庭电话、办公电话和车载电话,命令为 ADD、DELETE、REPLACE。下面简要介绍vCard规范,以及vCard解析的实现。

  vCard电子名片规范定义了个人公共信息交换(PDI)的描述标准和组织格式,该格式与信息传送的方式无关,方便了各种系统和应用之间的信息交换。在vCard中,个人公共信息包括姓名、年龄、地址、电话等与个人紧密相关的基本信息。手机内vCard样例如下:

BEGIN:VCARD
VERSION:2.1
N:denglibao
TEL;WORK:045182605447
TEL;HOME:05307415684
TEL;CELL:13478951524
END:VCARD



  现在使用的vCard规范版本为2.1和3.0,定义了数据的存储格式及访问接口的规范,vCard解析需要能够解析这两种版本。根据车载信息娱乐设备的应用,vCard解析函数需要提取出姓名和电话号码两个属性,其中电话号码又包括手机、家庭电话、办公电话、车载电话四类,其属性值均为TEL,参数值分别为CELL、HOME、WORK、CAR,下面给出设计代码的主要部分。

unsigned int vcard_parse(void)
{   
  unsigned int cnt,end,i,phone_index;
  char* p;
  end=vcard_length; 
  value_initia();
  /*begin to parse vcard*/
  for (cnt=13; cnt      after"BEGIN:VCARD"*/
  {
           if((0xd==an_complete_vcard[cnt])&&(0xa==an_
                                     complete_vcard[cnt+1]))
          {  
        /*extract a property,another property parameter or vcard end*/
                    cnt=cnt+2;/*skip \r\n*/
       /*if vcard end*/ 
        p=&an_complete_vcard[cnt];
                     if(0==uCompareASCIIName(p,"END:VCARD",9))
                        {
                if(vcard_cmd==ADD)
                  { 
                                                 phonebook_insert();
                        }//the vcard cmd ADD
    else if(vcard_cmd==REPLACE)
    {   
    }// the vcard cmd REPLACE 
     return 0;
  }else if(0==uCompareASCIIName(p,"TEL;",4))
  {    
         cnt=cnt+4;/* TEL property ,first skip "TEL;"*/           …
           p=&an_complete_vcard[cnt];
           if(0==uCompareASCIIName(p,"PREF",4))/*mobile
            phonenumber*/
       {     
    cnt=cnt+4;/*skip the "PREF"*/
      ...
                                 cnt=cnt-2;/*check next \r\n,in the "for",cnt++,so -2,not -1*/
  }else if(0==uCompareASCIIName(p,"VOICE",5))
  {
  }else if(0==uCompareASCIIName(p,"CELL",4))
  { 
  }else if(0==uCompareASCIIName(p,"HOME",4))
  {
  }else if(0==uCompareASCIIName(p,"WORK",4))
  {
  } else if(0==uCompareASCIIName(p,"CAR",3))
  {  
  }
  } else if(0==uCompareASCIIName(p,"TEL:",4))
  { //some phone’s telephone have no parameter,
           for example TEL:10086  
  }else if(0==uCompareASCIIName(p,"N",1))
  { //name property
  }
       }
}
return 0;
}
  其中,uCompareASCIIName是比较字符串函数,对输入的两个字符串不分大小写按字节进行比较,具体代码略。

  结语

  现在的一些文章中,对SyncML的蓝牙实现只是泛泛而论,并没有对具体的实现做深入的研究和分析,笔者在一款车载信息娱乐设备上设计实现了基于蓝牙技术的嵌入式SyncML服务器,从SDP和OBEX绑定上具体指出了SyncML蓝牙应用的设计要点,并结合vCard规范给出了电话薄数据解析的具体实现代码。实践证明,车载蓝牙设备的嵌入式SyncML服务器运行稳定,有很好的应用价值。
关键字:SyncML  蓝牙车载  信息娱乐设备 引用地址:SyncML在蓝牙车载信息娱乐设备上的设计与实现

上一篇:智能车速度控制系统设计与实现
下一篇:车载移动多媒体系统的开发与实现

推荐阅读最新更新时间:2024-05-03 00:38

拓展蓝牙车载应用博通低成本蓝牙集成方案中国首发
  用头戴式蓝牙通话的朋友在驾驶时接听电话大都会有种不适的感觉,因为一边需要注意驾驶,一边还要操作蓝牙耳机进行通话,所以很多人选择了驾驶时不接听电话,另外,世界各国及其地方政府也在不断颁布“免提”法律,要求行驶中使用手机时,要使用免提式车载电话和耳机,据称中国深圳将于2010年8月颁布“免提”法规,要求正在开车的司机必须采用免提设施打电话。一方面有通信的需求,另一方面也要注意安全,如何权衡这样的选择?解决这个矛盾?仅中国目前就有近8000万辆汽车,如果能解决好这个问题,则会激发出一个新的巨大市场!   4月28日,博通公司选择在中国首发其BCM2074X系列单芯片蓝牙解决方案,凭借博通强大的整合能力解决了汽车驾驶中通信与安全
[汽车电子]
拓展<font color='red'>蓝牙</font><font color='red'>车载</font>应用博通低成本<font color='red'>蓝牙</font>集成方案中国首发
蓝牙单芯片在车载信息娱乐设备中的应用及开发
蓝牙单芯片领头芯片厂商CSR的Bluecore是目前普遍应用的蓝牙单芯片系列,在蓝牙耳机、蓝牙手机和免提装置等设备中应用广泛,也是很多蓝牙工程师的首选。笔者采用Bluecore5-MM(以下简称BC5)和Freescale的Coldfire架构的32位处理器MCF5251,开发了一款整合USB音乐播放、iPOD控制、蓝牙免提和流媒体音乐播放等功能的车载信息娱乐设备。下面,首先简要介绍设备硬件结构,然后从设备软件结构、BC5软件开发方式、内存和DSP的开发上详细讲一下开发中遇到的问题及解决方法。 硬件结构 图1为车载娱乐设备的硬件结构图,包括电源管理、音频输入输出及音源管理、处理器及其外围电路、USB接口及其供电保护
[汽车电子]
<font color='red'>蓝牙</font>单芯片在<font color='red'>车载</font><font color='red'>信息</font><font color='red'>娱乐</font><font color='red'>设备</font>中的应用及开发
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved