摘要:本文以Extended Systems公司的蓝牙协议栈产品XTNDAccess Blue SDK为例介绍了蓝牙协议软件的设计原理,协议栈结构,移植过程,及应用的开发方法。 关键词: XTNDAccess Blue SDK Bluetooth IrDA Profile Baseband HCI LMP/HCI/SDP/TCS/RFCOMM/OBEX/IrMC TCP/IP,PPP.AT command 引言: 蓝牙技术广阔的应用前景在国内引起了极大的关注,有些公司已经决定投入资金进行技术跟踪和相应产品的开发。但大多数厂商还在持观望的态度,其中有蓝牙硬件成本仍高居不下的问题,也有蓝牙软件协议开发困难和协议兼容性认证困难的问题。 XTNDAccess Blue SDK是Extended Systems公司(www.extendedsystems.com)开发的功能完善,原码形式提供的,经过Bluetooth SIG兼容性测试的协议软件产品。目前全球已经有超过60个客户在使用该SDK进行着蓝牙应用的开发,其中不乏著名公司,如3COM/Plam,Motorola,HP, Xircomm, Red-M, Fujitsu, Flashpoint…… 本人希望通过介绍XTNDAccess Blue SDK的设计原理和实现方法,揭开蓝牙协议设计与实现的神秘面纱,增加读者对蓝牙协议软件的认识,使读者掌握使用XTNDAccess Blue SDK进行蓝牙产品的开发的过程,也为读者自己进行蓝牙软件设计与实现提供一定的思路。 需要指出的是,蓝牙技术发展迅速,Extended Systems公司的XTNDAccess Blue SDK的软件版本也在不断的更新之中,本文介绍的内容是基于XTNDAccess Blue SDK的1.2版本。该软件的最新特性,可以参考http://www.extendedsystems.com。
1. 蓝牙标准协议栈结构的简介: 蓝牙技术规范目前版本为1.0b,主要规范文档为<<Specification of the Bluetooth Systems--Core>>和<<Specification of the Bluetooth Systems--Profile>>,。 其中<<Specification of the Bluetooth Systems--Core>>对蓝牙技术的射频、基带、音频传输,HCI接口,LMP,L2CAP,SDP,RFCOMM,与IrDA协议的互操作,蓝牙产品的认证等进行了定义。<<Specification of the Bluetooth Systems--Profile>>对蓝牙技术的各种Profile(应用模型)进行详细的定义,其中包括 另外,<<Bluetooth Protocol Architechture>>文档对蓝牙协议的软件结构做了专门的介绍。让我们首先看看该文档中的完整的蓝牙软件协议结构图(见图一)。 图一:标准蓝牙软件协议结构图
规范中将所有协议分类为: 1. 蓝牙核心协议 基带控制部分,包括语音处理;链路管理协议(LMP);逻辑链路适配协议(L2CAP);服务发现协议(SDP)。 2. 电缆替代协议 串口仿真协议(RFCOMM),基于ETSI 07.10规范。 3. 电话控制协议 TCS BIN,基于ITU-T的Q.931规范;AT Commands基于ITU-T的推荐V.250和ETS 300 916(GSM 07.07)规范。 4. 吸收的协议 PPP;TCP/IP;OBEX(对象交换协议)基于红外协议栈中的IrOBEX;WAP。 我们在此文中不再详细介绍各个协议的具体功能,而着重介绍这些协议在XTNDAccess Blue SDK中的实现方法。 2. XTNDAccess Blue SDK的设计思想: Extended Systems公司设计XTNDAccess Blue SDK的目的是为蓝牙应用的开发者提供一个高效开放的蓝牙软件协议开发平台,使开发人员可以很方便地开发出自己的蓝牙应用,很方便的将蓝牙软件移植到开发人员选定的操作系统中,通过特定的HCI接口支持特定的蓝牙模块。 Extended Systems公司是短距离无线通信协议的著名提供商。早在加入Bluetooth SIG之前,就已经是红外通信标准化组织的发起人和标准制定人(当时以Conter Pointer公司的身份)。该公司以Dave Suvak为主的技术专家参与制订了红外通信协议簇中的绝大部分协议。尤其值得指出的是Dave Suvak 编写的IrOBEX协议,被Bluetooth SIG吸收到蓝牙协议中来。作为蓝牙技术和红外技术的结合点,OBEX协议规定了蓝牙技术和红外技术的互操作性。作为Object Push Profile,File Transfer Profile,Synchronization Profile的实现基础,OBEX在蓝牙协议的应用上有着极其重要的地位。 在蓝牙的规范中,蓝牙硬件模块中实现了基带的功能和链路管理协议(LMP),所以不需要SDK实现。但对基带送上来的语音,SDK还是要有特殊的处理部分的。 在蓝牙的协议中,PPP,IP,TCP/UDP等协议归属于TCP/IP协议簇,已经相当成熟,并且被绝大多数操作系统实现,属于操作系统的一部分,所以也SDK也没有实现的必要。 AT Commands非常简单,只是需要在特定的应用中通过RFCOMM协议发送特定的数据(命令)而已,所以也无实现的必要。 WAP协议本身的发展还有许多不确定的因素,并且WAP协议本身比较复杂,相对独立,有独立的软件开发商提供,所以SDK没有包含WAP协议簇的必要。 这样,我们就可以确定了SDK要实现的蓝牙协议的模块:L2CAP,RFCOMM,SDP,TCS BIN,Audio,OBEX。 其中OBEX因为地位特殊,在XTNDAccess Blue SDKstack中被作为Add-Ins(特殊的应用部分)实现,不包含与SDK stack之中。这样我们可以得到在XTNDAccess Blue SDKstack的基本构成。 3.XTNDAccess Blue SDKstack的结构和功能模块: 图二:Blue SDK stack的内部结构图 在图二中,我们看到在Blue SDK stack中除了基本的协议模块外,还有两个软件模块:Management Entity 和 Event Manager。 这两个模块的功能是什么呢? Management Entity是负责管理功能的软件模块,包括: 1) Piconet Manager:负责Piconet的连接的建立、维护,设备查询,维护Slave设备的工作模式(Active,Park,Hold,Sniff)。 2) SCO Manager:负责创建和维护设备之间的语音交换的链路。 3) Security Manager:允许应用程序对鉴权和加密进行设置,真正的鉴权和加密是硬件实现的。 Event Manager是一个执行线程(thread),包含着对所有协议模块的调用,并且管理着协议栈的初始化和定时器信息。 由此可以看出,SDK中附加的两个模块是为了蓝牙的实际应用而建立的。Management Entity包含了蓝牙实现中最常用的管理应用;Event Manager是程序执行的线程实体。
3. XTNDAccess Blue SDK的移植和应用: 图三:构成蓝牙应用的部件 在图三中,我们可以看到以Blue SDK stack为核心,该SDK经过归纳设计出了三种API: Application API—开发蓝牙应用程序; OS API—使用操作系统提供的服务; HCI API—通过特定的HCI类型驱动特定的蓝牙硬件模块。 1) 操作系统的移植-- OS API: 我们的协议栈任务的基本要求是不可重入。 移植前,我们要明确操作系统的一些特性,如:是单任务OS还是多任务的OS;多任务的OS是否是抢占式的;系统的互斥机制;定时器的特性;中断处理程序的编写等等…… 向特定操作系统的移植,会涉及到以下一些操作系统提供的服务 下面我们通过图四表现,协议栈任务的执行过程。 图四:协议栈执行的流图 堆栈任务实际就是反复的调用EVM_Process()函数,此函数不可重入,所以用OS_LockStack()和OS_UnlockStack()函数实现互斥的保护。OS_LockStack()和OS_UnlockStack()利用了一个OS的Semaphore来实现。在任务执行过程中,需要调用到高层协议的时候,SDK使用Callback函数的方式实现。在其它层中,提供的Callback函数,也会锁定协议任务。所以要求操作系统提供的互斥机制可以多次锁定同样的任务。 另外,XTNDAccess Blue SDK以Windows和VxWorks为例,提供了操作系统移植包,用户可以用VC++6.0和VxWorks的编译器对协议栈和例子进行编译,并且可以直接在Windows平台上运行大部分例子程序。 2) 对蓝牙硬件模块的驱动的移植--HCI API: *图五中表现了协议栈与HCI的层次关系 图五:HCI层次图 HCI API Layer:这是在协议栈内部供其它协议模块使用的接口。 HCI Transport Driver:依据不同的传输类型设计的驱动程序,比如UART、RS232、USB,属于规范定义的标准类型;其他,如PCI、PCMCIA,属于非规范定义的传输类型。 HCI Hardware Driver:针对具体硬件的设备驱动程序,负责硬件的初始化和接收和发送的处理,要和HCI Transport Driver接口。 *对HCI接口的移植方法: XTNDAccess Blue SDK已经支持UART,USB,PCMCIA类型的HCI接口。如果用户使用UART或USB的HCI接口,可以直接使用SDK提供的HCI Transport Driver,如果用户使用的UART或USB硬件不是XTNDAccess Blue SDK所支持的,用户要依据HCI Transport Driver提供的API编写自己硬件的HCI Hardware Driver。关于PCMCIA接口,SDK提供对3COM的蓝牙PCMCIA接口的驱动作为参考。如果用户使用自己的HCI接口,那么用户要自己编写HCI Transport Driver和HCI Hardware Driver。 另外,SDK提供了基于TCP/IP的特殊的HCI类型INET。可以在TCI/IP上模拟其它的HCI接口,开发和调试基于SDK的程序。 SDK中所有的例子代码,都支持UART、USB和INET三种HCI接口。以我的经验而言,这种INET接口对于开发应用非常有用。
3) 开发应用程序—Application API: XTNDAccess Blue SDK中的ME、L2CAP、SDP、RFCOMM都提供了供上层应用开发使用的API。另外在RFCOMM上,Extended Systems开发出了Serial API(create/remove/open/close/read/write/ioctl),以供基于串行API开发程序的移植。 应用模型(Profile)的实现:不同的协议模块的上层API的组合可以实现不同的Profile。XTNDAccess Blue SDK的设计支持GAP(Generic Access Profile)、CTP(Cordless Telephone Profile)、Intercom Profile、SDAP(Service Discovery Application Profile)、SPP(Serila Port Profile)、DUN(Dial-Up Networking Profiel)、LAN Access Profile、 Fax Profile,Handset Profile。 SDK中包含一些例子代码,如L2CAP的应用程序、TCS的测试程序、Serial API的应用程序、Cordless Telephony终端和网关的应用程序、Headset Profile的应用程序。这些例子都可在Windows下用VC++6.0直接编译,以供编程参考。并且这些例子都支持UART、USB和INET三种HCI接口。基于INET接口的应用开发可以屏蔽蓝牙的无线通道,对于开发非常简单。 4) OBEX Add-ins: OBEX作为Add-ins,实际是特殊的上层应用。它利用SDK提供的Application API,基于RFCOMM实现了OBEX协议模块。 同时,OBEX也提供了自己的Application API。并且利用这些API,实现了GOEP(Generic Object Exchange Profile)、FTP(File Translate Profle)、Objext Push Profile。 该OBEX具有复用的功能,不只支持蓝牙传输通道,同时也支持红外和TCP/IP传输通道,可以实现蓝牙协议(XTNDAccess Blue SDK)和红外协议(XTNDAccess IrDA SDK—Extended Systems 公司的红外协议栈)及其他通道的复用。如果用户选择的是其他通道(蓝牙、红外、TCP/IP以外),目前SDK不支持,用户可以根据OBEX提供的API开发出自己的传输通道支持驱动。 该部分也包含了一些例子代码,如File Translate的应用、Qbeam的应用。同SDK中一样,这些例子都可在Windows下用VC++6.0直接编译。并且这些例子都支持UART、USB和INET三种HCI接口。 结论: Extended Systems公司的XTNDAccess Blue SDK蓝牙协议软件设计合理,结构清晰,应用简单,功能完全,是一种非常优秀的蓝牙应用开发平台。用户可以在此协议栈基础上方便地开发出符合自己需要的蓝牙应用。 同时也希望此文为自己开发蓝牙协议软件的读者提供一定的思路,设计出自己的蓝牙协议栈。进一步推动蓝牙技术在国内走向实用。 作者简介: 李冉,现任美国IMAG公司Bluetooth产品专员。 1996-1998在电子部六所进行电信软件的开发工作; 1998-2000在美国IMAG公司负责Tornado/VxWorks实时操作系统在嵌入式领域(主要是通信和自动控制领域)中应用的技术咨询工作; 2000-现在 在美国IMAG公司负责Extended Systems公司的蓝牙协议产品的技术咨询工作。
|