嵌入式SyncML 服务器的设计与实现
随着信息社会的迅速发展,需求的不断增长,人们对设备的功能性要求也不断地提高。设备的多样性导致传输协议的多样性,数据同步建立在私有协议上,每种协议只能支持有限
种类的设备、系统及数据类型。这些不兼容的协议技术,增加了用户、生产商、服务提供商、
开发商工作的复杂度,同时也限制了移动设备的使用、数据的访问和发行。为此通信行业巨
头们制定了一个业界标准的数据同步协议,称为SyncML(Synchronization Markup Language,
同步标注性语言)协议,该协议已经得到大多数厂商的广泛支持。
在笔者研发的一款蓝牙车载免提设备中,采用SyncML协议实现了蓝牙手机和车载设备之
间的电话本同步,在接听来电时进行人名提示、对电话簿条目进行导航、选择电话号码拨打
电话,极大地方便了用户使用。该设备采用双处理器,结构如图1所示:
图1 车载免提设备结构图
系统采用CSR公司的BC5( BlueCore5-Multimedia External )蓝牙芯片,实现SyncML的
OBEX绑定协议,连接手机的同步通道进行数据收发,主处理器采用飞思卡尔公司的MCF5251
芯片,实现SyncML的表示协议、同步协议和应用程序,进行SyncML文档的处理、电话本保存
和SyncML文档生成,其中手机为SyncML客户端,车载设备为服务器端。
1 SyncML 同步协议
1.1 协议概述
SyncML是一种行业通用的移动数据同步协议,采用统一格式的XML(extensible markup
language)语言进行设备间的消息传递,XML类似于HTML,而且用户可以自定义自己的标记,
便于推广普及。
SyncML协议基于XML而定义,因而继承了其语言简单、开放、可扩展的特点,使得整个
协议具有高度的灵活性和扩展性,可以适用于各种终端设备和网络设备,简单灵活且易于实
现,按照该协议实现的产品又能在最大程度上保证互操作性。SyncML协议从发布至今,国际
上已经有近700家公司宣布支持,3GPP也决定采用SyncML作为其数据同步的标准,2001年发
布的WAP2.0也将SyncML作为数据同步的解决方案。
1.2 SyncML协议体系
SyncML是一套协议集,包括数据同步协议、表示协议和传输方式绑定协议。
(1)数据同步协议:同步协议定义了客户端和服务器端之间消息的交互过程,同时定
义了七种同步类型:双向同步、慢同步、客户端单向同步、客户端刷新同步、服务器端单向
同步和服务器端刷新同步、服务器通知同步。其中双向同步和慢同步是兼容性规范要求必须
支持的,其他同步模式未作硬性规定。在笔者研制的设备中实现了双向同步和慢同步。
(2)表示协议:定义了SyncML文档的表示方式,一个SyncML文档就是一个遵循XML规范
的XML文件,它可能被拆分为多条SyncML消息。一条SyncML消息包括两部分:消息头、消息
体。SyncML消息头中包含有消息的路由、版本、认证、会话等信息,由SyncHdr元素说明。
消息体包含一个或者多个SyncML命令,也包含需要同步的数据,由SyncBody元素说明。
(3)传输方式绑定协议:为了实现不同设备之间传输协议的兼容性,SyncML协议底层
绑定了HTTP(hypertext transfer protocol)超文本传输协议、WSP(wireless session
protocol)无线会话协议和OBEX(IrDA object exchange protocol)对象交换协议,这3
种传输协议基本上覆盖了所有设备的传输。在笔者研制的设备中实现了OBEX绑定协议。
1.3 SyncML协议框架结构
基于SyncML的同步应用框架可分为三层:最底层为通讯协议层,如HTTP、WSP、OBEX等
网络传输协议;中间层为SyncML协议实现及接口层,是架构的核心层,提供了SyncML的实现
并向同步应用层提供统一的开发接口,SyncML接口是SyncML适配器的应用编程接口,同样也
是框架实体与网络传输的接口,并负责在应用A和应用B之间发起和维护一个网络连接;上层
为同步应用层。
2 SyncML 服务器设计
在蓝牙车载免提系统中,以SRTK 为基础进行SyncML 服务器系统的设计。SRTK(SyncML
Reference Toolkit)是SyncML 组织提供的一个实现工具包,不仅被国内学者研究探讨,也
作为很多企业级同步功能的实现基础,SRTK 提供了一个接口统一的实现方式和命令解析方
式,但并没有提供所有的细节实现,而且没有提供针对任何具体应用的应用程序。例如当服
务器接收到手机端的SyncML 文档后,如何对该文档进行命令处理,产生什么样的SyncML
文档,需要开发人员自己实现,而且SRTK 只提供了在Windows、Palma、Linux 环境下的实
现,在MCF5251 上需要进行移植。
2.1 SRTK
SRTK 分为三层:
第一层:核心层,实现SyncML 应用,主要包括SyncML 管理、命令生成和命令处理三部
分,该层具有平台无关性。管理部分对SyncML 实例、工作区进行管理,控制缓冲区,并且
在发送和接收模式间转换;命令生成部分构造同步数据包和命令序列,生成同步的文档,仅
用于“发送”模式;命令处理部分解析收到的数据包,提取命令,转交给已注册的事件响应
函数或回调函数,仅用于“接收”模式。
第二层:插件层,为核心层提供服务,分为SyncML 工作区管理和文档编解码两部分,
该层具有平台相关性。工作区管理为发送、接收的数据包托管内存,处理发送和接收的数据
缓冲区,允许并发执行;文档编解码部分实现XML 和WBXML 文档的编码与解码,压缩或解析
XML 和WBXML 的数据包。
第三层,系统数据库层,封装了一些系统相关的库函数,比如内存分配和字符串处理等,
把这一层单独划分出来是为了使整个模块与平台无关。
2.2 系统设计
SyncML 主应用程序在飞思卡尔为其32 位嵌入式处理器提供的操作系统FlexOS 上实现,
对SRTK 进行了移植,在此基础上以回调函数的形式进行同步命令的处理和SyncML 文档的解
析,实现客户端对服务器端电话薄的“添加”、“更新”、“删除”等操作,从而实现了蓝牙手
机与车载蓝牙免提设备间的电话簿同步。OBEX 绑定协议由BC5 在其GOEP 应用剖面上实现,
完成了SyncML 文档在蓝牙上的数据传输。
2.2.1 同步的流程
(1)建立 OBEX 连接:这部分由BC5 实现,BC5 通过SDP(服务发现协议)查询手机为
其SyncML 服务注册蓝牙通道,与该通道建立蓝牙连接,这是进行电话簿同步的前提。
(2)同步初始化:连接成功后,要进行同步初始化的工作,在该过程中,服务器端和
客户端设备首先交换信息,主要包括能力描述、请求访问的数据库和同步类型、认证信息、
同步锚等,然后服务器主动发送命令通知手机开始同步,MCF5251将包含有代码为206的Alert
命令的文档经由BC5转发给手机,手机在成功接收并解析该文档后,将向SyncML服务器发出
同步请求。
(3)同步处理和数据映射:BC5将从手机端接收到的SyncML文档转发给MCF5251,MCF5251
解析该文档,保存电话簿VCARD列表、建立ID映射表,同时生成回应的SyncML文档,由BC5
发送给手机,继续同步过程。
(4)同步结束:当手机发送的文档中只有Status命令时,这标志着同步结束,这时
MCF5251解析VCARD列表并通知BC5同步结束,BC5断开与手机的OBEX连接。
2.2.2 工作区管理和内存管理
工作区管理和内存管理是整个 SyncML 应用系统的核心。在系统初始化时,首先设置所
有工作区最大的字节个数,然后在SyncML 例程初始化时,为当前工作区分配内存。该最大
字节数需要通知手机,在消息头(SyncHdr)中的Meta 属性中设置,描述如下:
10000
这样便定义了SyncML 文档的最大字节数为10000。
SRTK 的移植工作主要体现在内存管理上,由于在SyncML 应用中大多情况下都需要动态
分配内存,而MCF5251 不容许动态分配内存,为此在将SRTK 移植到MCF5251 中时,本文设
计了函数MyMalloc 来静态分配内存,其C 语言描述如下所示:
void * MyMalloc(unsigned int Number)
{
unsigned char * temp;
temp = (unsigned char *) AllMemSFS + SysDFC;
SysDFC += Number;
return temp;
}
其中AllMemSFS 是系统内存数组,该数组足够大,可以满足所有应用,SysDFC 是系统
已经分配的内存字节个数,Number 是申请的字节个数。函数返回一个指针,该指针的起始
地址等于AllMemSFS 首地址与SysDFC 的和。
2.2.3 应用程序的关键技术
根据近几年手机销售量,笔者选择了6 部手机进行同步测试,包括索爱W908c、索爱
K530c、索爱W700c、诺基亚N72、诺基亚6230、诺基亚6500c。发现这些蓝牙手机在SyncML
同步上存在一定的兼容性问题,实验结果表明索爱W908c、索爱K530c、索爱W700c 不容许
强制慢同步,也就是说当手机请求与服务器进行电话薄更新(Alert 命令代码为200)时,
如果服务器要强制慢同步(Alert 命令代码为201)并且服务器对Alert 命令的回应命令
Status 的代码为200(表示SyncML 命令成功完成)时,手机将取消此次同步。在这种情况
下服务器对Alert 命令的回应命令Status 的代码必须为508(表示服务器与客户端同步状
态不一致时的刷新请求),这样方可使得同步正常完成。
电话簿同步速度对用户体验来说是个关键的指标,所以笔者在保证对蓝牙手机同步兼容
性的基础上,做了如下处理以提高同步速度:(1)增大OBEX 每包字节长度,该操作对大部
分手机有效;(2)增大服务器能接收的最大消息字节数,该操作只对部分手机有效。
在同步过程中,下列情况下同步将失败:(1)同步过程中蓝牙连接断开,SyncML 同步
服务便中止,同步失败;(2)如果服务器接收到的SyncML 文档超过了设定的能够接收到的
最大消息的字节数或者存在语法错误,服务器将中止同步,命令BC5 断开与手机的连接,同
步失败。断开连接一定要遵守OBEX 协议,对于正在进行的数据传输必须调用Abort 中止本
次数据传输,然后才能正确断开连接,否则下次进行同步时将无法正确同步。
3 结论
实验结果表明,应用SyncML 协议能够很好地实现蓝牙手机和车载免提设备间的电话簿
同步,给用户接打电话提供了很多便利。同理,采用SyncML 协议可以在任何支持SyncML
的移动设备间实现个人数据同步化,它的商业实现对于移动计算来说将是革命性的。
本文作者创新点:采用CSR 公司的BC5 芯片和飞思卡尔公司的MCF5251 芯片,设计了嵌
入式SyncML 服务器系统,实现了蓝牙手机和车载设备之间的电话本同步。
页:
[1]