0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于蓝牙技术实现嵌入式SyncML服务器的应用方案

电子设计 来源:电子产品世界 作者:马建辉;吕梦兴 2021-03-31 09:38 次阅读

作者:马建辉;吕梦兴;王知学;于良杰;成巍

SyncML与蓝牙协议

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

基于蓝牙技术实现嵌入式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服务器运行稳定,有很好的应用价值。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 蓝牙
    +关注

    关注

    112

    文章

    5430

    浏览量

    165665
  • 服务器
    +关注

    关注

    12

    文章

    8120

    浏览量

    82522
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63371
收藏 人收藏

    评论

    相关推荐

    基于H264的嵌入式视频服务器的设计

    基于H264的嵌入式视频服务器的设计摘要! 本文介绍了基于的嵌入式视频服务器的设计重点阐述了嵌入式操作系统" 视频
    发表于 06-25 10:50

    于蓝牙嵌入式通信模块的实现

    于蓝牙嵌入式通信模块的实现
    发表于 08-20 09:32

    嵌入式流媒体服务器的设计与实现

    嵌入式流媒体服务器的设计与实现
    发表于 08-20 10:09

    嵌入式FTP服务器实现什么功能?

    FTP服务是目前广泛应用的因特网应用服务之一,为了在国产嵌入式实时操作系统平台上开发FTP服务,采用多线程并发服务器的体系结构设计了一种
    发表于 03-11 08:27

    如何用嵌入式处理MCF5272来实现家庭蓝牙网关?

    本文基于蓝牙技术,介绍了用Motorola公司的嵌入式处理MCF5272来实现家庭蓝牙网关的具
    发表于 06-04 06:36

    怎么实现基于嵌入式WEB的视频服务器的设计?

    嵌入式WEB的网络视频监控系统的主要原理是什么?怎么实现基于嵌入式WEB的视频服务器的设计?
    发表于 06-07 06:21

    如何配置嵌入式服务器

    嵌入式Web服务器每个Spring Boot Web应用程序都包含一个嵌入式Web服务器。此功能会导致许多操作方法问题,包括如何更改嵌入式
    发表于 10-27 08:35

    于蓝牙应用的嵌入式设备

    的发展.其中蓝牙技术就是一个典型的例子.它的无线通讯方式使得各类数据的传输和交换变得越来越便捷.以此同时,各类基于蓝牙应用的嵌入式设备迅速成为炙手可热的消费类电子产品.特别是
    发表于 11-05 06:06

    如何实现嵌入式Web服务器的设计?

    和交互性成为嵌入式系统网络化过程的必然选择.带有Web接入能力的嵌入式设备将会得到飞速的发展,应用在信息家电,通信设备,仪器仪表,远程管理等各个领域中.嵌入式Web服务器
    发表于 11-09 06:44

    实现嵌入式Web服务器设计的方法

    具有语言标准统一性的特点,所以只要将网络服务器嵌入嵌入式设备中,就可以实现客户端浏览收发信息和控制外围设备等功能。本论文根据ARM的
    发表于 11-09 09:14

    如何实现嵌入式WEB服务器系统的控制设计

    简单设计。本设计利用ARM 自带的WEB服务器技术,来实现嵌入式WEB服务器系统的控制设计。该技术
    发表于 11-09 08:47

    嵌入式Web服务器的设计与实现

    摘要:嵌入式Web服务器嵌入式系统应用的一个重要组成部分.以其简单,廉价,功能完善和通用性强等特点,在远程监控,智能家电和资源共享等多种场合得到广泛应用.本文以嵌入式Web
    发表于 11-09 08:41

    嵌入式WEB服务器常见的有哪些

    ========================================================================嵌入式WEB服务器BOA的移植方法(一)2007-2-26 16:20:00 随着Internet
    发表于 12-14 08:43

    如何使用Apache FtpServer实现嵌入式FTP服务器

    1.Apache FtpServer是一个纯Java实现的FTP服务器2.既可以作为一个完整的FTP服务器单独使用,也可以在Java程序中调用3.使用Apache FtpServer实现
    发表于 12-27 06:49

    嵌入式SyncML服务器的设计与实现

    该文应用SyncML协议实现蓝牙手机与车载免提系统之间的电话本同步,其中车载系统为SyncML服务器端。系统采用双处理器结构,使用CSR公
    发表于 02-23 15:10 22次下载