基于蓝牙的数据传输系统的设计

蓝牙(Bluetooth)是由东芝、爱立信、IBM、Intel和诺基亚于1998年5月共同提出的近距离无线数据通讯技术标准。它能够在10米 的半径范围内实现单点对多点的无线数据和声音传输,其数据传输带宽可达1Mbps。通讯介质为频率在2.402GHz到2.480GHz之间的电磁波 [1]。
蓝牙技术已获得了两千余家企业的响应,从而拥有了巨大的开发和生产能力。蓝牙已拥有了很高的知名度,广大消费者对这一技术很有兴趣。
蓝牙技术可以方便地建立无线连接代替传统的有线电缆连接,本论文给出了一种基于蓝牙的无线数据传输系统的研制方案及软件关键算法,能够实现短距离内数据的无线传输,具有较强的可靠性和较快的数据传输速度,能够应用在各种不方便使用有线电缆的现场。
本程序采用VisualC++软件设计平台完成了初始化蓝牙协议栈、查询蓝牙设备、建立ACL连接以及发送数据的全过程,实现了点对点及点对多点的蓝牙无 线数据传输。为了完成整个应用程序本论文采用了基于蓝牙协议栈的开发方案,并阐述了这一方案的设计过程,原理,方法以及测试过程。在本次设计过程中应用程 序通过对按钮事件的响应来完成对各种命令消息的处理,通过使用蓝牙协议栈提供的动态链接库中包含的函数完成了对蓝牙设备的各种操作,从而完成了本次毕业设 计。实验证明,本程序能够实现短距离内数据的无线传输,具有较强的可靠性和较快的数据传输速度。

关键词 蓝牙,数据传输,动态链接库

摘 要 I
ABSTRACT II
第一章 绪论 1
1.1研究背景及意义 1
1.1.1 研究背景 1
1.1.2 蓝牙技术发展现状 2
1.2研究的意义 3
1.3研究的主要内容和基本思路 4
1.4论文的构成 5
第二章 蓝牙系统分析 7
2.1蓝牙市场分析 7
2.1.1蓝牙的应用产品分析 7
2.1.2蓝牙的市场状况分析 8
2.1.3蓝牙的市场前景分析 8
2.2系统可行性分析 9
第三章 系统的总体设计 10
3.1蓝牙协议体系结构 10
3.2蓝牙数据传输关键技术 11
3.3系统开发方案设计 14
3.3.1 基于完整协议栈的开发方案 14
3.3.2基于开放协议栈的开发方案 14
3.3.3 基于蓝牙硬件的开发方案 15
3.3.4 蓝牙数据传输系统开发方案设计 15
3.4系统开发环境 16
3.4.1硬件开发环境蓝牙DDP3303 16
3.4.2软件开发环境VisualC++6.0 17
3.5系统工作流程 18
第四章 蓝牙数据传输系统软件设计模块 21
4.1 蓝牙数据传输系统软件模块设计 21
4.1.1 系统主界面的结构设计 21
4.1.2 使用DLL调用的程序设计 24
4.2 蓝牙数据传输系统界面说明 32
4.2.1 启动程序界面 32
4.2.2 观察窗口 32
4.2.3 菜单栏 33
4.3 蓝牙数据传输系统执行步骤 34
4.4 蓝牙数据传输系统测试 35
第五章 总结 42
5.1调试过程中遇到的困难及解决方法 42
5.2 工作总结 42
5.3收获与心得 43
5.4设计展望 44
致谢 45
参考文献 46

ABSTRACT
Bluetooth is the wire less close quarter data communication technical norms suggesting that commonly by Toshiba,Ericsson,IBM,Intel and Nokia on May,1998.It is able to realize wirless multiple spot data and voice transmission within 10 meters of radius range.It’s person data transmission bandwidth may amount to 1 Mbps.The communication medium is that frequency is in th electromagnetic wave between 2.480 GHz and 2.402 GHz[1].
Bluetooth technology has already gained more than 2,000 enterprise responding and owned gigantic exploitation and efficiency thereby.Bluetooth has already owned very high notability,the exten sive consumer has had interest in this technology very much.
Bluetooth technique made wireless connections expediently in place of cable connection in short distance. In this paper , a wireless data transfer system based on bluetooth technique is presented , including the sticking point of soft algorithm. The equipment could realize wireless PC data transfer in short distance ,the results show its advantages and high data transfer rate.The wireless PC data transfer system could apply to all kinds of complicated circumstance that use cable connections discommodious.
This program adopts software developing platform of VisualC++ to complete the whole process of initializing Bluetooth protocol stack, inquiring Bluetooth equipment ,establishing ACL linking ,sending datas and realizing data transfer of point to point and point to mult-point. This paper adopt the method which is based on BlueTooth protocol stack to realize whole application program. The designing course, principle, measure and testing process are expounded in this paper. In this design application program passess the treatment coming to be completed to various order information responding to button event ande use the function which is included in DLL(Dynamic Link Library) which is provided by BlueTooth protocol stack to have accomplished various to Bluetooth equipment. The application program could realize wireless PC data transfer in short distance,the results show its dependability and high data transfer rate.

KEY WORDS bluetooth, data transfer, dll(dynamic link library)
第一章 绪论
1.1研究背景及意义
1.1.1 研究背景
蓝牙是一种支持设备短距离通信(一般是10m之内)的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。蓝牙的标准是IEEE802.15,工作在2.4GHz 频带,带宽为1Mb/s。
“蓝牙”(Bluetooth)原是一位在10世纪统一丹麦的国王,他将当时的瑞典、芬兰与丹麦统一起来。用他的名字来命名这种新的技术标准,含有将四分 五裂的局面统一起来的意思。蓝牙技术使用高速跳频(FH,Frequency Hopping)和时分多址(TDMA,Time DivesionMuli-access)等先进技术,在近距离内最廉价地将几台数字化设备(各种移动设备、固定通信设备、计算机及其终端设备、各种数字 数据系统,如数字照相机、数字摄像机等,甚至各种家用电器、自动化设备)呈网状链接起来。蓝牙技术将是网络中各种外围设备接口的统一桥梁,它消除了设备之 间的连线,取而代之以无线连接。
蓝牙是一种短距的无线通讯技术,电子装置彼此可以透过蓝牙而连接起来,省去了传统的电线。透过芯片上的无线接收器,配有蓝牙技术的电子产品能够在十公尺的 距离内彼此相通,传输速度可以达到每秒钟1兆字节。以往红外线接口的传输技术需要电子装置在视线之内的距离,而现在有了蓝牙技术,这样的麻烦也可以免除了 [2]。
蓝牙技术是一种无线数据与语音通信的开放性全球规范,它以低成本的近距离无线连接为基础,为固定与移动设备通信环境建立一个特别连接。其程序写在一个9 x 9 mm的微芯片中。例如,如果把蓝牙技术引入到移动电话和膝上型电脑中,就可以去掉移动电话与膝上型电脑之间的令人讨厌的连接电缆而而通过无线使其建立通 信。打印机、PDA、桌上型电脑、传真机、键盘、游戏操纵杆以及所有其它的数字设备都可以成为蓝牙系统的一部分。除此之外,蓝牙无线技术还为已存在的数字 网络和外设提供通用接口以组建一个远离固定网络的个人特别连接设备群。
蓝牙是一种低功耗的无线技术,其设计意图是取代现有的PC机、打印机、传真机、移动电话等设备上的有线接口。作为一种新技术,蓝牙的主要优点是:可以方便 地建立无线连接来代替传统的有线电缆连接;移植性较强,可以应用到很多通信场合中,如WAP、GSM、DECT等;安全性较高,且每一台蓝牙设备的地址全 球唯一;功耗低、设计开发方便、成本较低[3]。
作为一种电缆替代技术,蓝牙具有低成本和高速率的特点,它可把内嵌有蓝牙芯片的计算机、手机和多种便携通信终端互联起来,为其提供语音和数字接入服务,实 现信息的自动交换和处理。蓝牙产品涉及PC、笔记本电脑、移动电话等信息设备和A/V设备、汽车电子、家用电器和工业设备领域。而一旦支持蓝牙的芯片变得 非常便宜,蓝牙将置身于几乎所有产品之中,从微波炉一直到衣服上的纽扣。
蓝牙在个人局域网中获得了很大的成功,应用包括无绳电话,PDA与计算机的互联,笔记本电脑与手机的互联,以及无线RS232,RS485接口等。采用蓝 牙技术的设备使用方便,可自由移动。与无线局域网相比,蓝牙无线系统更小、更轻薄,成本及功耗更低,信号的抗干扰能力强[4]。
1.1.2 蓝牙技术发展现状
蓝牙工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。蓝牙的数据速率为1Mb/s。时分双工传输方案被用来实现全双工传输。ISM频带是对所有无线电系统都开放的频带,因 此使用其中的某个频段都会遇到不可预测的干扰源。例如某些家电、无绳电话、汽车房开门器、微波炉等等,都可能是干扰。为此,蓝牙特别设计了快速确认和跳频 方案以确保链路稳定。跳频技术是把频带分成若干个跳频信道(hop channel),在一次连接中,无线电收发器按一定的码序列(即一定的规律,技术上叫做”伪随机码”,就是”假”的随机码)不断地从一个信道”跳”到另 一个信道,只有收发双方是按这个规律进行通信的,而其他的干扰不可能按同样的规律进行干扰;跳频的瞬时带宽是很窄的,但通过扩展频谱技术使这个窄带宽成百 倍地扩展成宽频带,使干扰可能的影响变成很小。与其它工作在相同频段的系统相比,蓝牙跳频更快,数据包更短,这使蓝牙比其它系统都更稳定。FEC (Forward Error Correction,前向纠错)的使用抑制了长距离链路的随机噪音。应用了二进制调频(FM)技术的跳频收发器被用来抑制干扰和防止衰落。
蓝牙基带协议是电路交换与分组交换的结合。在被保留的时隙中可以传输同步数据包,每个数据包以不同的频率发送。一个数据包名义上占用一个时隙,但实际上可 以被扩展到占用5个时隙。蓝牙可以支持异步数据信道、多达3个的同时进行的同步话音信道,还可以用一个信道同时传送异步数据和同步话音。每个话音信道支持 64kb/s同步话音链路。异步信道可以支持一端最大速率为721kb/s而另一端速率为57.6kb/s的不对称连接,也可以支持43.2kb/s的对 称连接。
通过蓝牙技术连接在一起的设备组成微网。蓝牙技术的无线电收发器的链接距离可达30英尺,不限制在直线范围内,甚至设备不在同一房间内也能相互链接,并且 可以链接多个设备,这就可以把用户身边的设备都链接起来,形成一个”个人领域的网络”(Personal area network)。虽然微网的节点数有限,但多个微网可以连接在一起,组成一个无限大的散布网,从而将不同设备,如个人电脑、拨号网络、笔记本电脑、打印 机、传真机、数码相机、移动电话、高品质耳机等几乎所有具有开关功能的设备,通过无线的方式连成一个围绕个人的网络,使各种数字设备实现真正的资源共享。 蓝牙技术的最终目的是要建立一个全球统一的无线连接标准,让不同厂家生产的移动计算设备在近距离内无需电缆线就可实现数据共享。
爱立信在1999年的Comdex展会上推出了世界上第一款蓝牙耳机 HBH-10,随后又在2001年推出了世界上第一款蓝牙手机T36。现在,由爱立信与索尼公司合并手机业务部门后成立的索尼爱立信,以及诺基亚在它们的 新款手机中几乎全部内置了蓝牙功能。另外,摩托罗拉和三星两大手机厂商则主要在高端手机上集成蓝牙功能。国产手机厂商中联想、CECT、夏新等均开始对蓝 牙技术表现出了热情。2002年第三季度微软宣布其Windows XP操作系统支持蓝牙。另外,Windows Pocket PC、Windows CE、苹果电脑的Mac OS X操作系统、Palm和多数手机操作系统都已经增加了对蓝牙的支持。同时,全球各地还有诸多科技公司正在生产各种蓝牙耳机、蓝牙网关、蓝牙USB接口适配 器等小型产品。
近年来,蓝牙技术的发展转折点主要有两个:一个是1.2版本让无限局域网(WLAN)能与蓝牙共存,另一个则是新版蓝牙传输协议增强数据速率(Enhanced Data Rate,EDR),它将蓝牙的传输速率提高到了2Mb/s。
目前,蓝牙技术开发重点是多点连接,即一台设备同时与多台(最多7台)其他设备互联。而蓝牙技术的应用主要有以下3类:
(1)语音/数据接入:是指将一台计算机通过安全的无线链路连接到通信设备上,完成与广域网的联接。
(2)外围设备互连:是指将各种设备通过蓝牙链路连接到主机上。
(3)个人局域网(PAN):主要用于个人网络与信息的共享与交换[5]。
1.2研究的意义
蓝牙规范接口可以直接集成嵌入到普通电脑、笔记本电脑或一体机电脑的内部芯片中,或通过PC卡或USB接口连接。因而,蓝牙技术在实际生活中的应用十分广 泛。蓝牙耳机、蓝牙键盘、蓝牙数码相机等应用随处可见。在人民生活水平不断提高,通信电子高速发展的今天,更加实用的蓝牙设备及其短距离网络已逐步地进入 我们生活和工作中。
近年来,移动通信发展迅速,便携式计算机如膝上型电脑(Laptop)、笔记本电脑(Notebook)、手持式电脑(HPC)以及个人数字辅助器 (PDA)等也迅速发展,还有因特网的迅速发展,使人们对电话通信以外的各种数据信息传递的需求日益增长。蓝牙技术把各种便携式电脑与蜂窝移动电话用无线 电链路连接起来,使计算机与通信技术更加密切的结合起来,使人们能随时随地进行数据信息的交换与输。因此,计算机行业、移动通信行业都对蓝牙技术非常重 视,认为蓝牙技术将对未来的无线移动数据通信业务产生巨大的促进作用。预计在最近几年内,蓝牙技术、蓝牙芯片、蓝牙产品都将获得重大进展。因此,推广研究 和普及应用蓝牙短距离网络技术,将对信息产业的更快速而统一的发展,提高商务经管领域中信息交流的便捷高效,便利人民生活有着直接而现实的意义。
由于用蓝牙技术可以组成个人局域网,它还能应用到其他许多方面。例如瑞典律勒欧科技大学EIS实验室就开发出无线个人局域网,对曲棍球运动员进行实时检测,培养曲棍球运动员。
蓝牙技术还可以用在遥控汽车上。SigmaComtech介绍了一种用具有蓝牙功能的操作杆来无线控制汽车,输入指令从操纵杆传送到计算机,由其产生控制信号发送给汽车。这一平台还可以在工业应用中使用。
蓝牙的市场是广阔的,前景是光明的。有人预测,到2005年将有14亿个蓝牙产品,价格也会大幅度下降。那时的最大市场是数字移动电话、计算机和外围设备、PC卡、适配器和耳机。大量普及阶段将在2006年,到2010年后蓝牙产品就会无处不在。
由于市场需求,越来越多的蓝牙硅片即将投入生产。旅馆、邮局、高尔夫球场、飞机场、零售商场、会议中心和商业领域都在采用蓝牙技术。BluetoothSiG现已拥有2400家会员公司,预计2005年蓝牙芯片将达14亿片,应用机器近7亿台。
蓝牙的市场前景取决于蓝牙价格和基于蓝牙的应用能否达到一定的规模。目前,蓝牙设备一般由23个芯片组成,价格已低达8美元/片,并逐步向5美元/片迈进。业内人士分析,随着芯片价格、芯片大小以及可操作性、兼容性等问题的进一步解决,蓝牙市场前景必定会更好[6]。
1.3研究的主要内容和基本思路
本次毕业设计中我使用了蓝牙演示开发平台(DDP,Bluetooth Demonstration and Development Platform),其基本核心协议(BCP)组件包括硬件电路模块和软件部分,其中软件部分以应用程序扩展的方式提供动态链接库(DLL),需要运行在 操作系统为Windows2000的计算机上。BCP_DLL是蓝牙高层应用程序开发的组件,可以用于开发蓝牙应用。本组件具有以下特点:
 提供基于蓝牙上层点对点的完整的硬件、软件平台和解决方案,包括基带、射频、HCI接口功能以及核心协议;
 支持某一时刻点对点的语音和一点对多达七点的数据传输;
 提供基带射频硬件电路与计算机RS-232和USB的连接方式;
 软件部分运行于Windows2000操作系统上,简单易用;
 适于蓝牙较高层次的应用程序开发(提供动态链接库及其接口,以及开发的用户手册)。
使用DDP的BCP组件可以进行蓝牙高层应用程序开发,实现查询附近设备、服务发现、语音和数据传输等功能。
DDP的BCP组件包含蓝牙的一些基本核心协议,它们是:
 逻辑链路控制及适配协议(L2CAP)
 服务发现协议(SDP)
 串口仿真协议(RFCOMM)
此外还包括用于处理和管理链路的管理实体(ME)。
设计的重点是在蓝牙核心协议的理解和应用上,其次还要了解数据传输的有关内容。数据传输的一个重要内容是对要传输的数据进行分组。被拆分的数据还要根据蓝 牙数据包格式的定义,加上数据包头,以便模块对其进行正确的识别和处理。软件的主要功能是数据包分组的拆分和重组,所要发送的数据进行蓝牙格式处理后再组 合成较大的数据块,该例程已被写入动态链接库(BCP_DLL.dl1)中,由界面应用程序调用。
根据系统设计的要求,在VisualC++的软件开发平台上,编制程序界面,完成系统的初始化、点对点的连接及断开、ACL数据的传输。要求界面简洁美观,便于操作,最后还要对此界面作简单的测试。
1.4论文的构成
本论文第一章论述了蓝牙的研究背景和发展现状,接着介绍了本论文研究的意义,以及研究的主要内容和基本思路,简要地描述了论文的总体结构和思路。
第二章主要对蓝牙系统作了简要的分析,分别从蓝牙的应用产品,市场状况和市场前景这三个方面,之后又对蓝牙系统的可行性作了分析。只用通过提供蓝牙产品性能方面的各种数据才能体现出本次毕业设计中对蓝牙传输系统研究的现实意义。
第三章首先介绍了蓝牙协议体系结构和蓝牙数据传输的关键技术,接着介绍了蓝牙产品开发的三种方案。通过比较,最后确定本设计的蓝牙数据传输系统开发方案。 最后介绍了本设计的硬件和软件开发环境以及系统的工作流程。硬件采用的是南京东大移动互联有限公司提供的蓝牙模块DDP3303,软件则是采用目前比较流 行的VisualC++6.0。
第四章是论文的主体部分,主要介绍了在软件开发过程中对整个应用程序划分的各个模块的性能研究,以及各个模块中所使用到的VC6.0提供的控件和它的相应函数。此外还介绍了整个应用程序的执行流程,以方便用户使用。
第五章主要是对本次毕业设计过程中的总结。对设计过程中所碰到的一些问题的说明和解决办法,还有个人的一些心得体会。

第二章 蓝牙系统分析
现代通信技术正走向网络核心技术分组化、窄带接入技术无线化。在无线接入领域,早期采用的是电路型传输方式和分组传输技术。近年来由Ericsson、 Intel、Nokia、Toshiba、IBM五家公司组成的蓝牙特殊利益集团SIG联手推出了蓝牙计划(Bluetooth)。采用蓝牙技术的设备使 用方便,可自由移动。与无线局域网相比,蓝牙无线系统更小、更轻薄,成本及功耗更低,信号的抗干扰能力强。本文正是研究基于蓝牙开发平台的无线数据传输, 并且非常具有实际应用价值,可广泛应用在实验及办公环境当中。
2.1蓝牙市场分析
蓝牙技术解决了短距离内(10~100米)小型移动设备间的无线互连问题。它的硬件市场非常广阔,涵盖了局域网络中的各类数据和语音设备等。蓝牙技术主要 针对三大类的应用:话音/数据接入、外围设备互连和个人局域网。从市场的角度看,蓝牙技术可制造出点对点连接、点对多点连接的市场应用产品及个人局域网等 网络设备。蓝牙正逐渐渗透到我们生活的各个方面,下面就从蓝牙的应用产品、市场状况和应用前景三个方面对其作简单的分析。
2.1.1蓝牙的应用产品分析
蓝牙产品根据不同的应用,可以大致分为四类[7],类与类之间存在着重叠。第一类是应用于各种适配器,如PCMCIA、USB蓝牙适配器、CF卡蓝牙适配 器等,这些适配器能够给己有的固定设备,如电脑和打印机等,实现无线连接的功能;第二类是蓝牙电气产品,如蓝牙耳机、电脑和其外围设备的连接(无线键盘、 无线鼠标、无线游戏操纵杆);第三类是嵌入式系统,这里的系统指电脑或其他固定设备,蓝牙设备直接集成在这些设备里,对于PC而言,可以将蓝牙系统直接集 成在主板上。嵌入到系统中后,就不必采用第一类的蓝牙适配器;第四类是移动电话,通过适配器或直接嵌入等方式将蓝牙功能集成到移动电话中。
蓝牙应用确实非常广泛,而随着蓝牙技术的进一步成熟,蓝牙互操作性等问题的解决,蓝牙芯片成本的进一步降低,蓝牙产品必将大规模的投入生产和应用,为人类生活带来更多便利。
2.1.2蓝牙的市场状况分析
短距离无线蓝牙技术已经嵌入到了许多消费装置中,从笔记本电脑、手机到汽车都可以看到蓝牙的踪影。同时蓝牙在操作系统方面也得到了强有力的支持,2002 年第三季度微软宣布在Windows XP支持蓝牙,而在此之前已经有Pocket PC、Windows CE.Net、苹果电脑的Mac OS X操作系统、Palm与多数手机操作系统增加了对蓝牙的支持[8]。
具权威机构预测,到2004年,在所有重要的电子产品中,60%将是便携式的,而蓝牙技术恰恰是为这些设备之间提供无线连接的主要技术。未来的信息家电将 是以因特网和家庭网络为基础,能以无线连接实现双向传输,显然蓝牙技术是符合家电需求的优选技术。据市场调查机构Navian公司日前公布的调查报告, 2001年全球蓝牙芯片发货量达505万套,价值9400多万美元。该公司认为,2002年全球蓝牙芯片发货量将超过3000万套,价值4.32亿美元。 另据美国ABI市场调查公司预测,采用蓝牙技术的通信应用设备将从2002年的5600万部迅速增长到2005年的超过10亿部。随着设备的增加,届时蓝 牙设备的销售额可达53亿美元。
蓝牙技术不仅在手机、照相机及PC应用中显示出巨大的增长,而且汽车也将装备蓝牙技术设备。另据Frost&Sallivan公司研究,欧洲蓝牙芯片市场前景看好,2000年欧洲的销售额已达3670万美元,到2006年将达到约7亿美元[9]。
2.1.3蓝牙的市场前景分析
蓝牙的市场前景取决于蓝牙价格和基于蓝牙的应用能否达到一定的规模[10]。根据蓝牙的定位,蓝牙应该通过一个体积小、成本低、功耗低、跳速快的单芯片来 实现,只有低廉的价格才能在现有的通信产品、家电产品和办公产品中引入蓝牙技术。虽然目前定义了不少蓝牙的应用,但这些都是对传统应用的改进,真正基于蓝 牙的特性的应用还是很少,这也将成为影响蓝牙市场发展的重要因素。不过,即使蓝牙市场没有像预测的那样快速扩展,蓝牙的市场价值也不用怀疑,毕竟需求才是 影响市场的主要因素。
目前,蓝牙的初期产品已经问世,一些芯片厂商已经开始着手改进具有蓝牙功能的芯片。与此同时,一些颇具实力的软件公司或者推出自已的协议栈软件,或者与芯 片厂商合作推出蓝牙技术实现的具体方案。尽管如此,蓝牙技术要真正普及开来还需要解决以下几个问题:首先要降低成本;其次要实现方便、实用,并真正给人们 带来实惠和好处;第三要安全、稳定、可靠地进行工作;第四要尽快出台一个有权威的国际标准。一旦上述问题被解决,蓝牙将迅速改变人们的生活与工作方式,并 大大提高人们的生活质量[11]。
2.2系统可行性分析
蓝牙系统采用ISM免费频段,在通信的时候无须考虑通信成本的问题。蓝牙设备的收发距离为l0米,作为室内的无线数据传输已足够,而增加发送功率传输距离 还可以达到100米。距离较短是蓝牙技术的一个缺点,但利用蓝牙技术组建的无线个人区域网可以有效解决这方面的不足。蓝牙设备可以每8个(也可以少于8 个)设备组成一个微微网,每个微微网又可以和其他的微微网互联组成散射网,从而提高蓝牙设备的通信距离,因此本系统可以很方便的进行扩展,实现远距离的无 线数据传输。并且还可以由点对点的传输,扩展到点对多点,由数据传输还可以扩展到语音传输,而且可以达到实时传输。蓝牙采用无线接口来代替有线电缆连接, 具有很强的移植性,适用于多种场合,加上该技术功耗低、对人体危害小,应用简单、容易实现,所以也易于推广。
第三章 系统的总体设计
要进行系统的设计,则必须详细了解所使用的硬件和软件开发环境,而要了解硬件开发环境,首先还必须了解蓝牙的协议体系结构以及蓝牙数据传输的一些关键技术。最后也是最重要的还必须了解蓝牙数据传输系统的工作流程。本章就是从以下几个方面分别进行阐述的。
3.1蓝牙协议体系结构
蓝牙核心系统覆盖了最低四层(射频层、基带层、链路管理层和逻辑链路控制与适配层L2CAP)和与其相关的服务层协议[12]。核心系统架构如图3.1所 示。最底三层有时作为一个子系统蓝牙控制器。通常在蓝牙控制器和L2CAP及其它应用层(即蓝牙主机)之间是一个标准的物理通信界面,而该物理通信界面一 般是可选的。该界面叫作主机控制界面(HCI),HCI层以下的叫做主控制器,HCI层以上的叫主机。蓝牙核心系统通过各种接入点来提供设备管理服务、传 输控制服务和数据传输服务(图中的椭圆形即为接入点)。下面对核心系统最低四层加以简单说明。
(1)射频层:射频块主要在物理信道上可靠地传送和接收符合要求的数据。蓝牙的射频系统是一个跳频系统,其任一分组在指定时隙、指定频率上发送。它使用查 询和分页进程同步不同设备间的发送频率和时钟,为基带数据分组提供了两种物理连接方式,即面向连接(SCO)和无连接(ACL),而且,在同一射频上可实 现多路数据传送。
(2)基带层:对射频块的时间和频率进行控制,传输符合基带要求的数据流。还-可使用各种用户模式在蓝牙设备间传送话音,面向连接的话音分组只需经过基带传输,而不到达L2CAP。话音模式在蓝牙系统内相对简单,只需开通话音连接就可传送话音。
(3)链路管理器层:链路管理器主要对与物理信道、逻辑传输和逻辑连接上所传输的相关数据载荷进行编码和解码。它通过连接的发起、交换、核实,进行身份认证和加密,通过协商确定基带数据分组大小。它还控制无线设备的电源模式和工作周期,以及微微网内设备单元的连接状态。
(4)逻辑链路控制与适配层(L2CAP):逻辑链路控制和适配层主要是进行流量控制和接收缓冲分配。L2CAP向上层提供面向连接的和无连接的数据服务,它采用了多路技术、分割和重组技术、群提取技术。L2CAP允许高层协议以64k字节长度收发数据分组。
图3.1 蓝牙核心体系架构
3.2蓝牙数据传输关键技术
蓝牙系统一般由天线单元,链路控制(固件)单元,链路管理(软件)单元,蓝牙软件(协议)单元等4个功能单元组成(如图3.2)。蓝牙天线属于微带天线, 无线接口遵循FCC(美国联邦通讯委员会)对ISM (工业、科学、医学)频段的规定。基带描述了设备的数字信号处理部分,即蓝牙链路控制器,它完成基带协议和其它底层的链路规程。链路管理(LM)软件模块 携带了链路的数据设置、鉴权、链路硬件配置和其它一些协议。
图3.2 蓝牙系统的组成

蓝牙数据传输系统的主要技术包括:
1. 射频特性
蓝牙设备的工作频段选在全世界范围内都可自由使用的2.4GHz的ISM频段,频道采用23个或79个,频道间隔为1MHz,采用时分双工方式。蓝牙的无 线发射机采用FM调制方式,从而能降低设备的复杂性,最大发射功率分为3个等级100mW(20dBm),2.5mW(4dBm),1mW(0dBm), 在4-20dBm范围内要求采用功率控制。
2. 跳频技术
跳频是蓝牙使用的关键技术之一。对应单时隙包,蓝牙的跳频速率为1600跳/s;对于多时隙包,跳频速率有所降低,但是在建链时则提高为3200跳/s。
3. TDMA结构
蓝牙的基带符号速率为1Mb/s,采用数据包的形式按时隙传送,每时隙625µs,蓝牙系统支持实时的同步定向联接和非实时的异步不定向联接。蓝牙技术支持一个异步数据通道,3个并发的同步语音通道或一个同时传送异步数据和同步语音通道。
4. 网络技术
蓝牙技术支持点对点和点对多点连接。几个piconet可以被连接在一起,靠调频顺序识别每个,同一piconet所有用户都与这个跳频顺序同步。其拓扑 结构可以被描述为”多piconet”结构。在一个”多piconet”结构中,在带有l0个全负载的独立的pieonet的情况下,全双工数据速率超过 6Mbit/s。
5. 基带
基带部分描述了硬件-基带链路控制的数字信号处理规范。基带链路控制负责处理基带协议和其它一些低层常规协议。蓝牙基带协议是电路交换与分组交换的结合。 在被保留的时隙中可以传输同步数据包,每个数据包以不同的频率发送。一个数据包名义上占用一个时隙,但实际上可以被扩展到占用5个时隙。蓝牙可以支持异步 话音。每个话音信道支持64kbit/s同步话音链路。异步信道可以支持一端最大速率为721 kbit/s,而另一端速率为57.6kbit/s的不对称连接,也可以支持43.2kbit/s的对称连接。
6. 连接类型和数据包类型
连接类型定义了哪种类型的数据包能在特别连接中使用。蓝牙基带技术支持两种连接类型,即同步定向连接(SCO)类型(主要用于传送话音)和异步无连接 (ACL)类型(主要用于传送数据包)。同一个piconet中不同的主从对可以使用不同的连接类型,而且在一个阶段内可以任意改变连接类型。每个连接类 型最多可以
支持l6种不同类型的数据包,其中包括四个控制分组,这一点对SCO和ACL来说都是相同的。两种连接类型都使用TDD(时分双工传输方案)实现全双工传 输。SCO连接为对称连接,利用保留时隙传送数据包。连接建立后,master和slave可以不被选中就发送SCO数据包。SCO数据包既可以传送话 音,也可以传送数据,但在传送数据时,只用于重发被损坏的那部分的数据。ACL链路就是定向发送数据包,它既支持对称连接,也支持不对称连接。 Master负责控制链路带宽,并决定piconel中的每个slave可以占用多少带宽和连接的对称性。Slave只有被选中才能传送数据。ACL链路 也支持接收master发给piconet中所有slave的广播消息。
7. 纠错
基带控制器有3种纠错方案:即1/3比例前向纠错(FEC)码、2/3比例前向纠错码和数据的自动请求重发方案。FEC(前向纠错)方案的目的是为了减少 数据重发的次数,降低数据传输负载。但是,要实现数据的无差错传输,FEC就必然要生成一些不必要的开销比特而降低数据的传送效率。这是因为,数据包对于 是否使
用FEC是弹性定义的。报头总有占1/3比例的FEC码起保护作用,其中包含了有用的链路信息。
8. 链路管理
链路管理(LM)软件模块携带了链路的数据设置、鉴权、链路硬件配置和其它一些协议。LM能够发现其它LM远端并通过LMP(链路管理协议)与之通信。 LM模块提供的服务包括:①发送和接收数据。②请求名称。LM能够有效地查询和报告名称或长度最大可达l6位的设备ID。③链路地址查询。④建立连接。⑤ 鉴权。⑥链路模式协商和建立,比如数据模式或者话音/数据模式。在连接建立过程中模式是可以变更的。⑦决定帧的类型。⑧将设备设为sniff模式。工作在 sniff模式的设备只接收M时隙的数据。M时隙的位置是LM协商决定的。Master只能有规律地在特定的时隙发送数据。⑨将设备设为hold模式。工 作在hold模式的设备为了节能,在一个较长的周期内停止接收数据,平均每4s激活一次链路,这由LM定义,LC(链路控制器)具体操作。⑩当设备不需传 送或接收数据但仍需保持同步时将设备设为暂停模式。处于暂停模式的设备周期性地激活并跟踪同步,并检查page消息。
9. 话音技术
蓝牙话音信道采用连接可变斜率增量调制(CVSD)话音编码方案,并且从不重发话音数据包。CVSB编码擅长处理丢失和被损坏的语音采样,即使比特错误率达4% ,CVSD编码的语音还是可听的。
10. 软件结构
蓝牙设备需要支持一些基本互操作特性要求。对某些设备,这种要求涉及到无线模块、空中协议以及应用层协议和对象资格式。但对另外一些设备,比如耳机这种要 求就简单得多。蓝牙设备必须能够彼此识别并装载与之相应的软件以支持设备更高层次的性能。蓝牙对不同级别的设备(如PC、手持机、移动电话、耳机等)有不 同的要求,例如,无法期望一个蓝牙耳机提供地址簿,但是移动电话、手持机、笔记本电脑就需要有更多的功能特性。软件结构需要具有的功能包括:设置及故障诊 断工具、能自动识别其它设备、取代电缆连接、与外设通信、音频通信与呼叫控制、商用卡的交易与号簿网络协议等。蓝牙的软件(协议)单元是一个独立的操作系 统,不与任何操作系统捆绑。适用于几种不同商用操作系统的蓝牙规范正在完善中[13]。
3.3系统开发方案设计
蓝牙产品的开发主要有三种方案[14]:基于完整协议栈的开发方案,基于开放协议栈的开发方案和基于蓝牙硬件的开发方案。
3.3.1 基于完整协议栈的开发方案
目前蓝牙产品大多数采用的是基于协议栈的开发方案。这种方案使用完整的蓝牙协议栈和软硬件开发包,开发者不需要深入研究蓝牙协议规范,利用所提供的开发包 就可以在蓝牙协议栈基础上开发相应的蓝牙产品。采用这种方案的好处是蓝牙产品的开发具有常规性,难度小,从而研发周期短,但是完整的蓝牙协议栈和软硬件开 发包的价格比较贵,因此这种方案非常适合开发商用的蓝牙产品。
3.3.2基于开放协议栈的开发方案
随着蓝牙技术被越来越多地了解和研究,目前,在Internet上出现了一些基于linux操作系统的开放蓝牙协议栈。由于这种蓝牙协议栈具有的开放共享 性,因此用它来开发蓝牙产品最大的好处是开发成本低,但是因为没有开发包,仅仅在蓝牙协议栈的基础上,这会给蓝牙产品的开发带来一定的困难。另外, Internet上公布的这些开放的蓝牙协议栈,基本上是一些蓝牙爱好者共同开发的,往往没有经过全面的系统测试,从而导致整个协议栈的可靠性不高,这会 对所开发的蓝牙产品产生一定的影响。
目前,在Internet上流传较为广泛的开放蓝牙协议栈主要包括IBM公司BlueDrekar蓝牙协议栈、Bluez蓝牙协议栈、Nokia的Affix蓝牙协议栈以及Axis的OpenBT协议栈。
3.3.3 基于蓝牙硬件的开发方案
在没有完整的蓝牙协议栈的情况下,也可以在蓝牙硬件的基础上进行开发。使用这一方案,一般有两种方式可以选择:一种是采用只提供无线接口的简单蓝牙硬件模 块,再针对应用自行开发主芯片,该芯片包括从基带层到应用层的完整蓝牙协议栈,这种开发方式较为复杂;另一种方法是购买由供应商提供的完整蓝牙模块,这种 蓝牙模块一般包括了无线收发层、基带层、链路管理层和主控制器层,再针对该蓝牙模块进行应用开发。在第二种开发方式中,由于主机和主机控制器层在硬件上完 全分离,所以需要通过HCI层把蓝牙模块和蓝牙主机连接在一起,为应用提供支持。
3.3.4 蓝牙数据传输系统开发方案设计
使用完整的蓝牙协议栈和开发包来进行蓝牙产品的开发,虽然其价格昂贵,但是开发周期短,开发难度小。因此针对本毕业设计题目,要求在较短的时间内,开展对蓝牙应用软件和产品的开发和研究是非常适用的。所以本课题采用了第一种开发方案,即基于蓝牙协议栈的开发方案。
本设计是采用东南大学移动互联技术有限公司,提供的蓝牙开发平台(DDP 3303蓝牙芯片),实现无线数据的传输。此公司提供的蓝牙演示开发平台(DDP,Bluetooth Demonstration and Development Platform)基本核心协议(BCP)组件包括硬件电路模块和软件部分,其中软件部分以应用程序扩展的方式提供动态链接库(DLL),BCP_DLL 是蓝牙高层应用程序开发的组件,可以用于用户开发蓝牙应用。
数据传输系统要求利用蓝牙开发平台所提供的软硬件,实现点到点的无线数据传输。本设计要求完成无线数据传输系统中发送端的程序设计与调试。采用VisualC++的程序设计开发环境,要求使操作界面简洁美观,达到点对点及点对多点的实时数据传输。
3.4系统开发环境
3.4.1硬件开发环境蓝牙DDP3303
本设计采用南京东大移动互联技术有限公司提供的蓝牙模块,其型号是DDP3303,该平台可以提供RS232、USB接口供用户进行开发、调试使用,音频接口可进行蓝牙语音的传输。它的硬件电路模块有如下特点:
● 可动态设置主机与蓝牙主控制器之间的接口,方便主机与蓝牙之间进行动态协商。
● 支持完整的蓝牙演示功能,其中包括数据通信、语音通信和文件传输等,并且提供可靠的差错控制、重传等。
● 提供1.1B版本的蓝牙规范所有指令的测试接口,可方便地进行基于HCI层的指令测试。
● 记录窗口提供了工作流程和数据传输记录,以及上次工作流程的保存等功能,方便用户的学习和测试 。
● 可进行点对多点测试 。
● 充分了解掌握蓝牙协议栈包括l2cap、SDP、RFCOMM协议。
● 提供基于协议栈的应用模拟,包括蓝牙耳机、音频网关、模拟串口。
● 提供丰富的帮助文档,大大地加快了用户学习进度和效率。
下面将列出DDP3303蓝牙开发平台主要技术参数表(表3.4.1),有了这些参数,我们就可以在此参数的约束下,达到最佳的传输效率。
表3.4.1 主要技术参数表
蓝牙规范版本 v1.2
外型尺寸(长mm*宽mm*高mm) 75mm*45mm*20mm
输入电压(v) 6V
输入电流(mA) 40-50mA
链接功耗(mw) Master:120mw;Slave:90mw
睡眠功耗(mw) 1.5mw(可再唤醒)
发射功率(mw) 1mw-10mw
接收灵敏度(dbm) -75dbm
工作温度 -40℃-50℃
有效传输距离(M) 0m-15m
工作方式 主从(可互换),从设备最多7个
传输速率 732kb/s
接口类型 USB/RS232
运行环境 Win98/Win2000/WinXP
工作频段 2.4GHz
功能 数据/语音
数据链接方式 SCO/ACL

下图给出了本设计所使用的蓝牙DDP3303开发平台的外观图(图3.4.1),
图3.4.1 蓝牙DDP3303开发平台的外观图
3.4.2软件开发环境VisualC++6.0
Visual C++ 6.0是一个基于Windows平台并为Windows平台开发应用程序的比较复杂的C++集成开发环境,是一个由许多部件组成的完整的开发环境。这些部 件协同工作,从而大大简化了软件开发的过程。在用Visual C++开发面向对象应用程序时,主要有两种方法:一种是使用Windows提供的API函数,另一种方法是直接使用Microsoft提供的MFC类库。 API是应用程序编程接口的缩写。API为应用程序提供系统的各种特殊函数及数据结构定义,Windows应用程序可以利用上千个标准API函数调用系统 功能。MFC类库集成了大量已经预先定义好的类。用户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。本次毕业设计我使用VC++6.0 MFC类库来开发应用程序,开发效率高,并且便于理解[15]。
3.5系统工作流程
蓝牙数据传输主要完成系统的初始化、点对点的连接及断开、ACL数据的传输[14]。整个工作流程从模块的初始化开始逐步展开,其设计流程如图3.5所示。

图3.5 工作流程图
以下为每个部分的详细说明。
(1)系统初始化
系统初始化包括模块的初始化和系统初始状态设定。系统物理连接完成后,驱动程序自动加载,并开始初始化工作。系统首先将复位。驱动程序向模块发出 HCI_Rest指令,对模块进行复位,模块接收到该指令后,完成复位操作并向主机返回一个命令完成事件(Command Complete Event),通知主机复位完成。主机接收到复位完成事件后,读取并保存模块信息,包括版本信息、蓝牙地址和缓冲区大小等。其中的蓝牙地址将用于连接操 作,它在模块出厂时已经设定好,缓冲区大小参数将提交给主机,以便主机对要传输的数据进行分块。然后,主机将对模块进行初步设置,包括主机缓冲区设置和计 时器设置。通过HCI_Host_Buffer_Size指令,将主机缓冲区大小参数传递给模块,主机在对数据传输进行控制时将用到该信息。对于计时器, 包括查询时间值的大小、间隔等内容,模块默认了常用信息,实际应用中没有特别要求不用对其进行修改。但要应用相关指令将其读取出来并由主机保存,以便控制 时使用。在HCI的主机控制器和基带指令中有HCI_Read_xxx_Timeout指令,将返回这些计时器设置。
(2)查询从蓝牙设备
初始化完成后,开始进行查询(Inquiry),查询其它蓝牙设备。在Inquiry没有响应的情况下,系统进入该状态等待其它设备的连接请求。初步设置 完成后,系统将进行一次扫描,以便发现有效范围内的其它系统,从而决定本系统应处的状态。系统在开始的这次扫描后,将进行进一步的状态设置。 HCI_Inquiry指令将使系统进入寻找临近设备的状态,它的主要参数包括Inquiry_Length和Num_ Response。这里将产生程序的分支:如果找到临近设备,则系统设置为主设备,并发送连接请求;如果没有找到临近设备,那么在超过 Inquiry_Length时间之后,系统设置为从设备,并进入定期查询状态(HCI_Periodic_Inquiry_Mode),等待其它设备作 为主设备的连接请求。定期查询的参数则包括查询间隔、每次查询时间及允许应答的设备数等。
(3)建立连接
设备A作为主设备向设备B发送了连接请求, B的蓝牙模块接到该请求后向主机B发送一个连接请求事件(Connection Request Event),该事件中包含设备A的蓝牙地址、设备类型、链接模式等连接参数。设备B接收A的连接请求并发送指令 HCI_Accept_Connection_Request,同时用Role参数指定自己的角色。该指令发出后,设备A、B都将收到一个连接完成事件 (Connection Complete Event),该事件参数中包括了对方蓝牙地址、链接模式、加密方式以及连接句柄(Connection_ Handle),其中链接句柄是该连接的”名字”,对该连接的操作都将通过引用连接句柄进行。这样,两个设备间的连接就建立完成,可以进行数据传输了。中 断链接相对较为简单。链接的任一方发出中断指令,就可以中断链接。指令HCI_Disconnect中带有参数Connection_Handle,以表 示中断哪个链接。在当前数据传输操作完成后,A和B都将收到一个带有连接句柄的中断链接事件(Disconnection Complete Event)。
(4)数据传输
系统链接建立后,数据传输就比较简单了。因为通信信道已经建立,只需要向USB总线上发送要发送的数据即可。数据传输的一个重要内容是对要传输的数据进行 分组,以适应模块数据缓冲区的大小,这是以读取Buffer_Size的值为依据的。被拆分的数据还要根据蓝牙数据包格式的定义,加上数据包头,以便模块 对其进行正确的识别和处理。在软件中,专门针对这一要求编制了一个数据包处理例程,它的主要功能是数据包分组的拆分和重组。所要发送的数据进行蓝牙格式处 理后再组合成较大的数据块,该例程已被写入一个动态链接库(BCP_DLL.dl1)中,由界面应用程序调用。数据传输部分另一个重要内容就是针对USB 总线的编程。USB驱动程序并不直接与硬件对话,而是通过创建USB请求块(URB),并把它提交给总线驱动程序(USBD.SYS)来完成硬件操作。经 过前面的数据打包例程处理过的数据又将进行URB的接受实体,当它接收到送来的URB时,就会把驱动程序对其的调用转化为带有主功能的代码,来完成指定的 操作。由此,驱动程序首先要依照DDK中的规则创建URB。URB创建后,就可以使用它与USBD.SYS进行交互[16]。当然在本设计中,也可以完全 不用USB接口来传输数据,而直接由RS232串口来完成数据的传输。
第四章 蓝牙数据传输系统软件设计模块
本章节是整个论文的一个重点,主要论述了应用程序界面的设计以及实现的过程以及消息的发送与响应,接着讲述了对整个应用程序的设计过程,已经程序运行时的执行过程,最后完成了对整个应用程序性能的检测。
4.1 蓝牙数据传输系统软件模块设计
要想使用蓝牙设备进行数据传输,需要开发出适合于所用蓝牙设备的应用程序,基于上文所讲蓝牙系统工作流程,使用VC6.0开发一个适用于蓝牙DDP3303开发平台的应用程序。详细的设计过程如下所示:
4.1.1 系统主界面的结构设计
1.特殊消息类型及结构的设计
基于BCP_DLL.dll开发的应用程序首先要初始化BCP,并向BCP注册,注册的内容包括:
 应用程序线程ID(Thread identifier)
 应用程序定义的用于接收BCP_DLL的消息
如果注册成功,BCP将给该应用程序分配一个ID,用以区分多个应用程序。应用程序使用大部分命令时会需要将它的ID传递给BCP,以便将返回消息发给相应的应用程序线程。
BCP_DLL是通过向应用程序线程发送消息来传递信息的,包括协议栈报告的错误状态、接收到对方设备请求的向上指示和接收到的数据等。应用程序接收到 BCP_DLL发送的消息并做出了相应的处理后,必须调用一个函数通知BCP_DLL作为对此消息的应答。BCP_DLL发送的消息如果是应用程序向 BCP_DLL注册的消息,那么这个消息带有两个参数,分别是:
wParam BCP_MSG结构的指针。
lParam BCP_MSG结构的长度。
应用程序要对这些参数进行分析,BCP_MSG结构规定了参数的格式,BCP_MSG结构包括两大部分:
MsgType(消息类型) 消息类型给出了BCP返回的消息种类。BCP通过这些消息向用户报告命令执行的结果、协议栈发给应用程序的指示信息和事件信息。
MsgBody(消息体) 消息体是联合类型,内部包括多个结构,每一种结构都分别对应一个MsgType的消息所带的必要参数,但并不是所有的消息类型都有参数。
所有消息的定义和BCP_MSG结构的定义在头文件BT_BCP.h中。
2.系统主界面的设计
主界面由菜单栏,对话框和状态栏三大部分组成,其中菜单栏有三个菜单选项,分别是:”编辑”,”查看”和”帮助”。下面说明主界面的设计步骤。
第一步:选择File|New…菜单项,弹出NEW对话框,选择Projects标签,选中MFC AppWizard(exe)项,在Location编辑框中输入要建立的工程所在的目录,可以点击编辑框右边的省略号按钮选择一个已存在的目录,在 Project name编辑框中输入要建立的工程名称,在这里输入:TEST。
第二步:在弹出的MFC AppWizard-Step1对话框中选择single document,即应用程序的类型为单文档模式,然后单击OK按钮。
第三步:在弹出的MFC AppWizard-Step 6 of 6对话框中选择视图类CTestView,更改其基类名称为CFormView类,其余选项保持默认设置,然后单击OK按钮。
第四步:在弹出的New Project Information对话框中点击Finish按钮,完成应用程序主框架的创建。
完成主框架窗口的创建之后,点击运行,可以看到一个普通的应用程序界面,并不能实现我们想要完成的蓝牙数据传输的功能,为此我们还应该向应用程序中添加一些必要的控件,下面是整个界面的设计过程:
首先,删除工具栏。本应用程序很少使用到工具栏,基本是通过对按钮控件的消息响应来完成蓝牙数据通信的功能。删除的方法也很简单,将框架类 CMainFrame的头文件MainFrm.h中声明的工具栏对象m_wndToolBar加”//”注释掉,再将CMainFrame类的成员函数 OnCreate中创建的该工具栏对象的一段代码进行同样的处理即可。
其次,修改菜单。将”文件”菜单删除,使用Delete按钮即可删除,保留其余三个菜单,然后分别对这三个菜单的下拉菜单项作调整。其中,”编辑”菜单改 为”存储当前工作流程”和”载入上一次工作流程”两个菜单项;”查看”菜单改为”状态栏”选项;”帮助”菜单改为”关于蓝牙数据传输系统…”选项。菜单项 的名称,ID号和消息响应函数列于表4.2。
最后,添加对话框。系统主界面中共放置了10个Button,1个Edit Box,10个Stitic Text,3个Combo Box,3个Group Box以及2个List Control和1个Progress。虽然对话框树目比较多,但在主界面中将它们按照蓝牙设备的操作顺序摆放在相应的位置,使得操作简洁。将这些对话框 的名称,属性,ID号和消息响应函数列于表4.3中(10个Stitic Text和3个Group Box已略去)[17]。
表4.1 菜单项属性
菜单项的名称 ID号 消息响应函数
存储当前工作流程 ID_SAVE_WORKDREAM OnSaveWorkdream()
载入上一次工作流程 ID_READWORK OnReadwork()
状态栏 ID_VIEW_STATUS_BAR 无
关于毕业设计演示程序… ID_APP_ABOUT ON_COMMAND(ID_APP_ABOUT, OnAppAbout)

表4.2 对话框属性
属性 名称 ID号 消息响应函数
Button 启动协议栈 IDC_BUTTONSTART OnButtonstart()
注册服务 IDC_BUTTONREGSER OnButtonregser()
注册RFCOMM信道号 IDC_BUTTONREGRF OnButtonregrf()
查询设备 IDC_BUTTONINQ OnButtoninq()
服务发现 IDC_BUTTONSEARCH OnButtonsearch()
建立ACL连接 IDC_BUTTONLINK OnButtonlink()
建立RFCOMM信道 IDC_BUTTONCONNECT OnButtonconnect()
发送数据 IDC_BUTTONSEND OnButtonsend()
断开RFCOMM信道 IDC_BUTTONUNCONNECT OnButtonunconnect()
断开ACL连接 IDC_BUTTONUNLINK OnButtonunlink()
Combo Box 注册的RFCOMM 信道号 IDC_COMBO5 无
建立连接的设备地址 IDC_COMBO1 OnSelchangeCombo1()
对方的RFCOMM信道号 IDC_COMBO2 无
Edit Box 本地设备地址 IDC_STATIC1 无
List Control 显示工作流程 IDC_STATUS 无
数据传输 ID_LIST1 无
服务发现 IDC_RESEARCH 无
Progress 查询设备进度 IDC_PROGRESS1

4.1.2 使用DLL调用的程序设计
主界面设计完成后,就是要对单击界面按钮事件的响应,即需要使用BCP_DLL.dll提供的函数库来完成各个按钮标识符所标识的功能,下面是整个毕业设计主应用程序设计的相关介绍:
1.系统初始化的设计
系统初始化过程包括:启动蓝牙协议栈、注册服务、注册RFCOMM信道号三个步骤。而在初始化协议栈之前,还必须进行传输层的初始化,这个过程是在应用程序启动之前通过对一个组合框列表的选择来完成相应的初始化,主要是对蓝牙设备与主机的连接。
(1)对传输层初始化所使用到的是DLL中的接口函数为void BCP_Init(BOOL UsbOrNot,UINT8 NumberOfCom);函数的作用为初始化BCP组件并选择传输层接口。当参数UsbOrNot为TRUE时选USB作为传输层接口;为FALSE时 选RS-232作为传输层接口。如果选择RS-232作为传输层接口,参数NumberOfCom制定串口号的值 ,1为”串口1″,2为”串口2″。
实现传输层初始化的程序段如下,其中用来获取选择传输接口的ComboBox的ID号为IDC_COMBO1。
//Test.cpp
CComboBox m_SelTran;//定义ID号为IDC_COMBO1的编辑框的变量
int Tran; //传输层的选择0:COM1,1:COM2,2:USB
Tran = m_SelTran.GetCurSel();//返回编辑框中输入的选项转换为的整数值
switch(Tran)
{
case 0:{
m_pMainWnd->SetWindowText(”毕业设计 - COM1″);
break; //选择COM1后设置的对话框名称
}
case 1:{
m_pMainWnd->SetWindowText(”毕业设计- COM2″);
break; //选择COM2后设置的对话框名称
}
case 2:{
m_pMainWnd->SetWindowText(”毕业设计- USB”);
break; //选择USB后设置的对话框名称
}
}
//DiaTest.cpp文件
switch(Tran)
{
case 0:{
BCP_Init(false,1); //选择COM1后对传输层初始化
Break;
}
case 1:{
BCP_Init(false,2); //选择COM2后对传输层初始化
Break;
}
case 2:{
BCP_Init(true,1); //选择USB后对传输层初始化
Break;
}
}
在本次毕业设计中选择的是USB接口。
(2)在启动BCP之前须向BCP注册应用程序线程ID以及接收消息类型。可以向BCP注册多个应用,注册可以在任何时刻,但是在启动BCP之前至少必须注册一个,并由该应用启动BCP。这个过程我们通过BCP_Register完成。具体函数代码如下所示:
//DiaTest.cpp文件
extern UINT8 ucCmpID;//定义变量存放线程ID号
HANDLE MSGThread; //定义句柄
DWORD dwThreadID; //定义应用程序线程ID
MSGThread=CreateThread((LPSECURITY_ATTRIBUTES) NULL, 0,
(LPTHREAD_START_ROUTINE)ProcessBTMsg, NULL,
0, &dwThreadID);//创建应用程序线程
WM_BCP_MSG = RegisterWindowMessage(_TEXT(”WM_BCP_MSG”));
//注册窗口消息
ucCmpID = BCP_Register( dwThreadID, WM_BCP_MSG, MOD4);
//将在BCP中注册的线程ID号附给变量ucCmpID
if( ucCmpID == 0 )
{
//MessageBox(”BCP Register Error!”, “BCP Demo”,MB_OK);注册失败
Process(48);// Process(int type)是一个自定义的输出字符串的函数,
此时输出头文件中定义的第48个字符串
return FALSE;
}
for (int i=0;i<30;i++) RegChannel[i]=0;
//注册成功后,初始化30个信道标志位
SetTimer(10,1000,NULL);
//每隔1秒钟向应用程序的消息队列中放一个WM_TIMER消息
(3)接下来就是要初始化蓝牙协议栈,初始化的作用一方面是将应用程序的线程ID注册到BCP中;另一方面是启动BCP,等待应用程序发送的消息。
用于初始化蓝牙协议栈的接口函数为void BCP_Start(UINT8 ucCmpID),它的作用是启动BCP,参数ucCmpID是进行该项操作的应用程序ID。实现初始化蓝牙协议栈的程序段如下:
void CDiaTest::OnButtonstart()
{
BCP_Start(ucCmpID);//启动BCP
}
启动BCP成功之后,在消息处理函数ProcessBTMsg()中处理成功返回的消息START_CNF,将本地的蓝牙地址显示在指定的对话框内。具体参考DiaTest.cpp文件注释。
(4)接着就要注册本地RFCOMM信道号,因为注册的信道号只能在1到30之间,首先必须编程检测用户输入的值是否在1-30之间,可以通过对话框数据 检验(Dialog data validation,简称DDV)实现对用户输入值的检验。注册工程使用接口函数void BCP_RegisterChannel(UINT8 ucCmpID, UINT8 ucSeverChannel);向RFCOMM服务器注册RFCOMM服务器信道号,并且显示在指定的窗口内。具体的程序详见附录 DiaTest.cpp文件中的void CDiaTest::OnButtonregrf()函数。
(5)然后就要点击”注册服务”按钮来完成注册本地服务。本应用程序提供了串口(Serial Port)服务,该服务类型及相关属性保存在SerialPort.dat文件中。为了成功注册该服务,此文件必须与可执行程序处于相同目录下。
2.建立连接设计
(1)点击”设备查询”按钮查询附近蓝牙设备,这一过程大概需要 10.24秒的时间,具体的流程可以观察”工作流程”窗口上方查询过程的进度条。此外只有那些处于可被发现的蓝牙设备才可以被查询到,具体程序详见附录 DiaTest.cpp文件中的void CDiaTest::OnButtoninq() 函数
(2)点击”建立ACL连接”按钮,从下拉列表中选择一个已经查询到的蓝牙设备,就可以建立连接,具体代码参见附录DiaTest.cpp文件中的void CDiaTest::OnButtonlink() 函数。
(3)建立ACL连接之后进行服务发现。通过服务发现可以获取远端注册的服务,具体结果将在”服务发现结果显示”窗口内显示,具体实现代码参加附录DiaTest.cpp文件中的void CDiaTest::OnButtonsearch() 函数。
3.消息循环和消息处理的设计
用户在点击”查询设备”按钮之后,就进入了该按钮的响应函数void CDiaTest::OnButtoninq()中,首先执行查询附近蓝牙设备的接口函数BCP_Inquiry(ucCmpID, InquiryLength, INQUIRY_MAX);其中参数ucCmpID是进行该项操作的应用程序ID,InquiryLength是查询设备的最长时间(1.28秒到 61.44秒),INQUIRY_MAX是查询设备接收的最多响应数。同时该函数返回消息INQUIRY_RESULT。本应用程序中设置 InquiryLength为8,则查询最长时间为10.24秒,INQUIRY_MAX为30,此外在该按钮响应函数中还设置了函数SetTimer (1,128,NULL),也就是说,每隔128毫秒Windows就要将查询设备函数BCP_Inquiry产生的消息放到消息队列中去,每当本数据传 输应用程序检索到该消息时,就将其发送到它的窗口响应函数void ProcessBTMsg()中,在指定的”工作流程”对话框中显示查询到的蓝牙设备地址。具体程序详见附录文件DiaTest.cpp。
设备查询完毕之后,就要与远端设备建立ACL连接,这是通过接口函数void BCP_ReqLink(UINT8 ucCmpID, BDADDR tAddress, PageScanRepMode_T tPageScanRepMode, PageScanMode_T tPageScanMode,UINT16 tClockOffset, AcceptRoleSwitch_T tAcceptRoleSwitch);来实现的。连接建立成功之后返回消息LINK_CNF,然后进入此消息的响应函数void ProcessBTMsg()中,完成本地与远端设备之间的ACL连接。具体程序详见附录文件DiaTest.cpp。
最后就是要建立RFCOMM信道,点击”建立RFCOMM信道”按钮进入窗口响应函数void CDiaTest::OnButtonconnect(),利用接口函数void BCP_ReqConnect(UINT8 ucCmpID, UINT8 ucServerChannelID, UINT16 acl_handle);实现在一条ACL连接上发出连接RFCOMM信道请求的命令,信道建立成功则返回消息CONNECT_CNF,当本应用程序从消 息队列中取到这条消息后,就进入此消息的响应函数void ProcessBTMsg()中,完成RFCOMM信道的建立,同时将建立连接的远端设备地址和信道号显示在相应的窗口内。具体消息参见下表:
4.3消息类型及其意义
消息类型 返回消息的意义
START_CNF 启动BCP成功
REGISTER_CHANNEL_CNF RFCOMM服务器信道号注册成功
REGISTER_SERVICE_CNF 服务记录注册成功
INQUIRY_RESULT 当前查询过程中的蓝牙设备查询响应
LINK_CNF ACL连接建立成功
UNLINK_CNF ACL连接断开成功
DISCONNECT_CNF 断开RFCOMM信道成功
DATA_CNF 数据已发送

对于各种消息的处理参见DiaTest.cpp文件中的void ProcessBTMsg()函数。
4.发送数据的设计
首先选择发送数据的目的地,即远端设备的地址和目的设备注册的RFCOMM信道号,在发送数据之前首先弹出一个对话框,用来编辑所发送的数据。最后调用接 口函数void BCP_SendData(UINT16 uiHandle, UNIT8* pucData, INT16 uiLength);就可以发送数据了。参数uiHandle是用来发送数据的RFCOMM信道的句柄;pucData 是数据的指针,发送数据的内存应由用户来释放,本函数返回时即可释放;uiLength是发送数据的长度,必须少于128个字节。此函数返回消息 DATA_CNF表示数据已发送。实现发送数据的程序代码如下:
void CDiaTest::OnButtonsend()
{
// TODO: Add your control notification handler code here
CString rString;
CDiaSend dlg;
if (dlg.DoModal()==IDOK)
{
int m = m_LinkDevice.GetCurSel();
int i = ChangeDeviceIndex(m); // 选择的设备地址序号
int n = m_RfCommChannel.GetCurSel();
int j = ChangeRfChIndex(i,n);// 选择的RFCOMM序号
TempSendData = dlg.m_str;
if(bt_device[i].dlc[j].dlc_handle == 0)
{
CString temp_str = STR_STATUS[52];
MessageBox(temp_str,”蓝牙数据传输系统”);
Return;
}
BCP_SendData(bt_device[i].dlc[j].dlc_handle,
(UINT8 *)TempSendData.GetBuffer(TempSendData.GetLength()),
TempSendData.GetLength());
}
}
5.断开连接的设计
数据发送完毕之后,还必须将已有的连接断开,包括断开RFCOMM信道和断开ACL连接,并且必须在断开ACL之前首先断开RFCOMM信道。其中断开 RFCOMM信道的程序段如下,用到的接口函数是void BCP_ReqDisconnect(UINT16 uiHandle),用来断开一条RFCOMM信道。参数uiHandle是断开的RFCOMM信道的句柄。返回消息DISCONNECT_CNF表示断 开RFCOMM信道成功。然后进入此消息的处理函数void ProcessBTMsg()中来处理这个消息,在”工作流程”对话框中显示”RFCOMM信道断开成功”的提示语。实现断开RFCOMM信道的程序段如 下:
//DiaTest.cpp
void CDiaTest::OnButtonunconnect()
{
int m = m_LinkDevice.GetCurSel();
int i = ChangeDeviceIndex(m); // 选择的设备序号
int n = m_RfCommChannel.GetCurSel();
int j = ChangeRfChIndex(i,n); // 选择的RFCOMM序号
BCP_ReqDisconnect(bt_device[i].dlc[j].dlc_handle);//断开RFCOMM信道
}
断开ACL连接的程序设计也与之相似,它用到的接口函数是void BCP_UnLink(UINT8 ucCmpID, UINT16 tHandle),参数ucCmpID是进行该项操作的应用程序ID,tHandle是需要断开的ACL连接句柄。返回消息UNLINK_CNF表示 ACL连接断开成功。然后进入此消息的处理函数void ProcessBTMsg()中来处理这个消息,在”工作流程”对话框中显示”ACL连接断开成功”的提示语,同时删除一个设备地址。实现断开ACL连接 的程序段如下:
//DiaTest.cpp
void CDiaTest::OnButtonunlink()
{
// TODO: Add your control notification handler code here
// 选择的组合框序号
int i=m_LinkDevice.GetCurSel();
UINT16 Handle =0;
//有RFCOMM信道时不能删除ACL
if (i<0) return;
for(int j=0; j
{
if (bt_device[i].dlc[j].dlc_handle != 0)
{
CString temp_str = STR_STATUS[53];
MessageBox(temp_str,”蓝牙数据传输系统”);//弹出消息框
Return;
}
}
//断开ACL连接
j=ChangeDeviceIndex(i);
Handle = bt_device[j].acl_handle;
BCP_UnLink(ucCmpID,Handle);
}
6.点对多点的设计
点到多点的设计主要是建立主蓝牙设备和多个蓝牙设备之间的连接,因为一个主蓝牙设备可以和多达7个蓝牙设备实现建立ACL连接,所有已建立的ACL连接所 对应的远端蓝牙地址都显示在”建立连接设备”组合框内。为了实现该目的我首先编写函数ChangeDeviceIndex(int Index)返回所有建立连接的设备号。点击鼠标进入列表框”建立连接的设备地址”的消息响应函数void CDiaTest::OnSelchangeCombo1()中,完成所有建立连接的设备地址和信道号的显示,这样建立连接的设备地址和RFCOMM信道 号都在相应的下拉列表框中保存下来了,在点到多点连接中实现数据传输中其重要作用的另外一个函数int CDiaTest::ChangeRfChIndex(),它主要完成注册连接的RFCOMM信道号组合框中的选项与bt_device[]中的对应关系 的转换,关键代码如下所示:
CString str;
CString dst;
char ch[6];
int j=m_RfCommChannel.GetCurSel();
m_RfCommChannel.GetLBText(j,str);
for(int i=0;i
{
if (bt_device[acl].dlc[i].dlc_handle != 0)
{
char adr[6];
sprintf(adr,”%d”,acl);
dst=adr;
if (bt_device[acl].dlc[i].direction) str+=” IN:”;
else str+=” OUT:”;
sprintf(ch,” %d”,bt_device[acl].dlc[i].channel_id);
str+=ch;
}
if(memcmp(dst,str,sizeof(dst))==0) //判断选择的RFCOMM信道号
{
return i;
break;
}
}
4.2 蓝牙数据传输系统界面说明
4.2.1 启动程序界面
在VC++6.0的环境下,打开Test.dsw这个文件,编译链接并运行之后,将会显示如下的启动界面(如图4.1所示)。

图4.1 启动界面
下拉菜单中将会显示”串口1″、”串口2″和”通用串行总线”三个选项,若PC机上只有一个串口则选择”串口1″这个选项;若PC机上有两个串口则要视情 况而定,选择”串口1″或”串口2″;若将数据线插到USB接口上,则要选择”通用串行总线”这个选项,但此时还必须装上USB驱动程序,才能识别USB 接口并继续往下执行。
4.2.2 观察窗口
蓝牙数据传输系统的主窗口(如图4.2)内观察窗口用来显示程序运行过程的信息和数据,它们是:
● 工作流程:显示BCP运行过程中各步骤的信息。
● 数据传输:显示在RFCOMM信道上发送和接收到的数据及去向和来源。
主窗口还显示以下各种信息:
● 本地设备地址:启动BCP后显示本地蓝牙设备地址。
● 注册的RFCOMM 信道号:显示注册的本地RFCOMM信道号。
● 建立连接的设备:显示建立ACL连接的所有远端蓝牙设备地址。
● RFCOMM信道号:显示建立在某个ACL连接上的所有RFCOMM信道。

4.2 蓝牙演示程序主窗口
4.2.3 菜单栏
菜单栏中共有三个选项,分别是:”编辑”、”察看”和”帮助”(如图4.3所示)。
编辑菜单栏中有两个选项:”存储当前工作流程”将当前”工作流程”观察窗口内的内容保存到DDP.txt文件中,以便分析;”载入上一次工作流程”可以将DDP.txt的内容显示到一个对话框中。
察看菜单栏中有一个选项:”状态栏”,选中它可以在主窗口的最下方显示时间、日期等状态信息。
帮助菜单栏中有一个选项:”关于蓝牙演示程序”,点击它可以显示制作人、版本号等帮助信息。

4.3 菜单栏
4.3 蓝牙数据传输系统执行步骤
蓝牙执行过程有一定的流程,每一步的结果都会显示在”工作流程”观察窗口内。具体操作步骤如下:
1 启动蓝牙协议栈
点击”启动蓝牙协议栈”按钮。在这个过程中,应用程序向BCP注册,初始化并启动蓝牙协议栈。
2 注册本地RFCOMM信道号
在按下”注册RFCOMM信道号”按钮后的文本框中填入正确的RFCOMM信道号,该值为介于1~30之间的整数。这个信道号注册到RFCOMM服务器。
3 注册本地服务
点击”注册服务”按钮来完成注册本地服务。
4 设备查询
点击”查询设备”按钮查询附近蓝牙设备,这一过程需要大约十秒钟的时间,”数据传输”观察窗口上方显示查询过程的进度条。所有查询到的蓝牙设备地址将会显示在”工作流程”观察窗口中。
只有那些处于可被发现的蓝牙设备才可以被查询到。
5 建立ACL连接
点击”建立ACL连接”按钮,从下拉列表中选择一个已经查询到的蓝牙设备,就可以与其建立ACL连接。
建立ACL连接是完成后面工作的基础,服务发现和RFCOMM信道的建立都需要两个设备之间存在一条ACL连接。可以与多达7个设备建立ACL连接,所有已建立的ACL连接所对应的远端蓝牙地址都显示在”建立连接的设备”组合框内。
6 服务发现
建立ACL连接后,也可以进行服务发现。通过服务发现可以获取远端注册的服务。点击”服务发现”按钮即可。如果成功,会在”服务发现结果显示”列表框内显示服务发现的结果。
7 建立RFCOMM信道
建立ACL连接后,就可以建立两个端的RFCOMM信道了。在按下”建立RFCOMM信道”按钮后的文本框内填入远端RFCOMM服务器注册的 RFCOMM信道号,确认后远端就会弹出对话框询问是否接受连接请求,如果接受就可以建立一条RFCOMM信道。在一分钟内没有得到回应,本地端的 RFCOMM会自动断开RFCOMM信道。
实际上,远端注册的RFCOMM信道号是通过服务发现过程获得的,是否可以建立RFCOMM信道也是根据服务发现的结果来进行判断的。演示程序忽略了这一 过程,直接由本地端在建立RFCOMM信道时输入。演示程序在两个蓝牙设备间可以建立多达60条RFCOMM信道。与某个设备建立的所有RFCOMM信道 都显示在”RFCOMM信道号”组合框中,格式为”方向:信道号”。
8 数据传输
RFCOMM模拟了一个设备串口。选择某个连接设备的某个RFCOMM信道后,按下”发送数据”按钮即出现文本框用于输入字符,确认后就可以将这些字符发 送到远端。另一方也可向本地发送字符,收发的字符都显示在”数据传输”观察窗口内这就是演示程序实现的简单的文字聊天功能。
9 断开RFCOMM信道
点击”断开RFCOMM信道”按钮,就会断开已经建立的RFCOMM信道。
10 断开ACL连接
点击”断开ACL连接”按钮,就会拆除已经建立的ACL连接。
在拆除ACL连接时,演示程序要求只有在断开RFCOMM信道后才可以断开ACL连接。
4.4 蓝牙数据传输系统测试
整个应用程序完成设计之后就是对应用程序的检测,首先将蓝牙设备通USB接口与主机相连,启动生成的”毕设.exe”文件,注意在启动之前,需要将” SerialPort.dat”" BCP_DLL.dll”" USBDLL.dll”文件与exe文件放在同一个目录下。启动之后选择初始化端口为USB接口,然后进入程序主界面,下面是整个测试流程:
1 初始化测试
预期结果:在点击”初始化协议栈”按钮之前,应用程序完成了对接口的初始化以及注册应用线程ID。点击按钮之后,本地蓝牙设备地址出现在”本地设备地址” 旁边的编辑框中。分别点击”注册服务”和”注册RFCOMM信道号”按钮完成本机设备的初始化,流程显示在”工作流程”列表控件中。
实际输出:启动蓝牙协议栈之后,本地设备地址00:06:6E:10:A7:32显示在列表框中,注册的信道号1显示在列表框中,并在工作流程列表控件中显示注册RFCOMM信道号成功。
图片演示:

a.初始化协议栈

b.注册RFCOMM服务信道号

c.注册服务
4.5 初始化演示
2 连接建立测试
预期结果:点击”查询设备”按钮,此时在进度控件中会显示查询进度,大概耗时10.24秒;然后点击”建立ACL连接”按钮会弹出一个对话框显示查询到的 设备,选择一个要建立连接的设备,点击确定按钮之后,会在”建立连接设备”编辑框中,并在工作流程中显示”ACL建立连接成功”。
实际输出:实际输出显示对方设备地址00:06:6E:10:A7:32,工作流程列表控件如图所示。
图片演示:如图4.6

a.查询设备

b.建立ACL连接

c.建立RFCOMM连接
图4.6 连接建立演示
3 数据发送测试
预期输出:首先点击”建立RFCOMM信道”按钮,建立RFCOMM连接。点击按钮之后会弹出一个输入对方设备注册的RFCOMM信道好的对话框,输入对 方注册的信道号,然后点击”发送数据”按钮,弹出一个文本编辑框,输入要发送的数据”hello world”之后,在数据发送列表控件中显示相应的发送数据。
实际输出:数据发送列表控件中显示远端设备地址为00:06:6E:10:A7:32,信道号为0×03,信道方向为DLC_OUT,传送的数据为”hello world”同时工作流程中显示”发送数据成功.”。
图片演示:如图4.7

图4.7 发送数据演示
4 断开连接测试
测试内容:数据发送后如需关闭程序,首先要断开RFCOMM连接,然后在断开ACL连接。我们先点击”断开RFCOMM连接”按钮,接着点击”断开ACL连接”按钮即可完成相应操作。
实际输出:点击断开RFCOMM信道,然后点击断开ACL连接,此时发送数据框变灰色,并在工作流程列表控件中显示断链成功。
图片演示:如图4.8

图4.8 断开连接演示

第五章 总结
5.1调试过程中遇到的困难及解决方法
在本次毕业设计过程中我碰到了各种各样的问题,有些是因为自己对控件功能的不熟悉造成,有些是对基本语法的掌握能力不高造成,还有些是用户手册了解不是很深造成的。
我将在本次毕业设计中碰到的一些问题以及解决方法,还有个人的一点思考写在下面以做共勉。
1、 C++语言较之C语言有许多共同的地方,但是也有其不同的地方,比如增加了面向对象。在学习过程中我们不但要注意到它们的共同点,更要对它们的不同点多加思考以求掌握
2、 在C++语言中还有一个this指针的频繁使用值得大家思考,如果大家很好掌握了这个指针将会发现这个指针在我们的程序设计过程中会帮助我们很多,关于这方面的东西大家应该多多上网查些资料。
3、 在学习Visual C++ 6.0进行程序设计中要注意到VC是基于消息响应的,所以在学习过程中我们要首先理解整个程序的运行过程以及如何进行消息相应,只有真正弄懂了这些,VC才能被我们方便的使用。
4、 关于VC动态链接库的问题设计到动态调用和静态调用,由于本次毕业设计中使用到了BCP_DLL.dll文件,因此我们要对动态链接库方面的知识有个详细的了解,包括如何使用动态链接库。
5、 本次毕业设计中我们使用USB接口实现了蓝牙设备与主机之间的连接,在运行程序时发现不能正常初始化协议栈,如果出现这个问题就需要我们设置断点来检查可 能出现错误的地方。还有在查询设备的时候由于我们设置了查询的最长时间是10.24秒,所以在查询过程中不要急于看到结果而忽略到这个问题。
5.2 工作总结
该应用程序主要建立在对按钮事件的响应,以及对BCP_DLL.dll文件提供的蓝牙接口函数产生的各种消息的响应。通过对这些消息的响应完成了各种功能。
本毕业设计主要完成了基于蓝牙设备的无线数据传输,在进行软件开发之前,我首先详细阅读了蓝牙演示开发平台基本核心协议组件用户手册,详细了解了各个蓝牙 接口函数的作用以及该函数所产生的消息体成员的具体含义。接着在图书馆借了几本关于Visual C++ 6.0的书,了解整个VC程序的开发流程与方法,并着手设计软件界面。由于在本次设计中涉及到对动态链接库的使用,我着重参看了这方面的内容,并选择隐含 链接使应用程序链接到BCP_DLL.dll。最后就是着手对各个消息事件的响应,从而完成蓝牙设备数据传输的功能。
本系统经实际测试,完成了点到点以及点到多点的数据传输的功能。
测试结果表明,所设计的蓝牙数据传输系统能够实现发送和接收数据要求,并且具有很好的可靠性和实时性。由于具有很高的性能价格比,采用蓝牙的短距离无线数据传输系统具有很好的市场前景。
5.3收获与心得
长达三个月的毕业设计已经接近尾声,在这段时间里通过老师的帮助以及自身的努力基本完成了任务要求,并培养了自己主动发现问题,思考问题,解决问题的能力,通过对Visual C++6.0的学习培养了自己的自学能力,对今后其它语言的学习打下了良好的基础。
第一,合理安排毕业设计进度。从接到毕业设计论文题目之后,我就开始有条不紊的着手进行毕业设计。首先是资料搜集阶段,广泛查阅各种资料,去图书馆借相关资料书籍,接着就是对各种资料的消化理解运用,最后着手进行程序设计。
第二,熟练掌握了Visual C++ 6.0如何开发一个MFC应用程序,虽然只是了解了一个皮毛,但是通过这段时间的学习,我了解到应该如何去学习一门编程语言,就算以后我从事与VC无关的 工作,我仍可以把在本次毕业设计中得到的经验合理利用到我所从事的领域,相信对我的学习过程会有很大的帮助。
第三,提高了我自己动手发现问题解决问题的能力,在本次毕业设计过程中碰到了许多各种各样的问题,在发现问题的过程中通过自己的思考和老师的帮助下去尝试 解决问题,从中我学到了很多东西并体会到了只有自己认真思考了知识才真的属于你。在本次毕业设计过程中我还提高了自己对中英文材料检索的能力,在开始的资 料收集阶段通过互联网,图书馆查询各种与我毕业设计相关的资料,在这个搜索过程中获得了各种各样的技巧,相信对我以后的工作会有很大的帮助。
5.4设计展望
本毕业设计虽然实现了蓝牙基本的数据传输,但仍有许多地方需要进一步改进和完善。
首先在点到多点数据连接中我只完成了一个主设备对从设备的连接过程中,没有考虑到一个蓝牙设备既可以是主设备又可以是从设备。
其次在本次毕业设计中我只完成了数据传输,在更多的应用中是进行文件传输,由于动态链接库提供的Bcp_SendData函数有字节限制,一旦大小超过限制就要进行拆包操作。
最后我们还可以通过蓝牙设备建立音频视频连接,但是在本次毕业设计过程中没有反映。这个过程也可以通过动态链接库提供的接口函数实现的。
随着蓝牙技术的成熟以及蓝牙芯片价格的下降,蓝牙技术将会在各个领域有个更为广泛的应用。
参考文献
[1] Bluetooth: Raffaele Bruno, Marco Conti, Enrico Gregori.Architecture, Protocols and Scheduling Algorithms [J]. Cluster Computing, 2002, 5 (2):117-131
[2]蓝牙技术 http://info.tele.hc360.com/html/001/001/011/42986.htm
[3]杜丰.蓝牙技术面临挑战.[J].现代电子技术,2004,(20):74~77.
[4]邓永红.详解蓝牙技术.[J].有线电视技术,2005,(5):6~11.
[5]李琦.蓝牙技术和应用.[J].青海师专学报,2005,(6):83~85.
[6] 浅谈蓝牙技术、产品与应用 http://info.it.hc360.com/2006/04/181745136335.shtml
[7]蓝牙市场及应用.http://www.damayi.com/default.asp.
[8]蓝牙技术在中国的发展分析.[J].中国通信信息,2002.2.5.
[9]蓝牙在中国.http://www.proteam.com.cn/bluetooth.
[10]无线风光在蓝牙.http://www.damayi.com/default.asp.
[11]金纯等.蓝牙技术[M].北京:电子工业出版社.2001.
[12]符鹤,周忠华,彭智超.蓝牙技术的原理及其应用.[j].微型电脑应用,2006,7(3):60~61
[13]刘海文等.蓝牙技术及系统原理[M].北京:电子技术出版社.2000.
[14]黄丽.面向家庭网络的蓝牙技术研究与实践[M].合肥:工业大学出版社.2003. 11
[15]王晖等.精通Visual C++ 6.0[M].北京:电子工业出版社,1999.3.
[16]张元.基于蓝牙的微机无线数据传输系统.[J].仪器仪表用户杂志, 2004.11:56~58
[17]席庆 张春林.Visual C++ 6.0[M].北京:中国水利水电出版社,1999.10

 

你可能感兴趣的:(蓝牙)