嵌入式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 markuplanguage)语言进行设备间的消息传递,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 sessionprotocol)无线会话协议和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(SyncMLReference 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 服务器系统,实现了蓝牙手机和车载设备之间的电话本同步。