蓝牙无线连接可靠性的研究与实现
某一方在等待对方响应时,如果发现超过了最大响应时间或者检测到链路丢失,等待应答的一方就可以认为该过程已经终止。
信道出错或发送方系统出错都会引起发送错误的消息。为了检测后一种情况,LM应监测错误消息数量,一旦超过阈值就将其断开,该阈值可根据实际情况进行设置。
由于无法实时地截获PDU,在链路两端的LM都对同一过程进行初始化而且都没有成功时,很可能会发生冲突。这时,主单元将通过发送含有原因码“LMP Error Transaction Collision ”的LMP no accepted PDU,中止从单元的初始化过程,从而保证主单元的初始化过程能够顺利进行。
5 蓝牙应用层中可采用的可靠性措施
5.1 稳定、可靠的蓝牙文件传输协议:RBTFT
蓝牙的文件传输是通过RFCOMM协议建立一条端到端的连接。所以在蓝牙RFCOMM协议的基础之上建立了本文所描述的蓝牙的文件传输协议,称之为RBTFT(表示为Reliable Bluetooth File Transfer),其主要目标是在蓝牙设备之间建立一条可靠的无线连接通道,进行可靠的文件传输。该协议目前的开发是采用VC+ +,应用平台为WIN98/2000/NT,但作为RBTFT 协议的本身不受具体编程语言及操作系统所限制。
RBTFT 协议支持一次传输多个文件、断点续传和CRC校验。其设计思想是基于帧传输方式,即在发送数据时是一帧一帧地发送,为保证可靠的传输,RBTFT协议对RBTFT帧进行了精心的定义,RBTFT 帧由报头、数据子包组成,报头指明帧类型(有些帧是不带数据的命令帧、信息帧,如BTFNAK ) ,还携带CRC校验信息。而数据子包还有不同的子包结束符,指明后面是否有后续包等。在进行数据传输时,采用发送/应答/握手/失败方式,即发送一帧数据,一个应答,若应答没收到,重新进行协商握手,握手失败则向应用程序报告错误。
在利用RBTFT 协议进行实际的文件传输时,首先第一步是进行串口初始化操作,在串口初始化成功时,通过异步消息RBTFT C0NNECT向应用程序报告,表示一条通信链路建立完毕。开始发送数据时,应用程序根据内部缓冲区的大小决定每次真正可发送的数据量,数据将被存储在内部缓冲区内,按照RBTFT协议,内部缓冲区的数据分割成一帧一帧并加人帧信息和CRC校验信息,每一帧将调用内部线程发送数据,当内部缓冲区的数据全部发送完毕(即内部缓冲区为空)时,则向应用程序发送消息表示内部缓冲区的数据全部发送完毕,应用程序将可继续发送其余的数据。在接收方,每到达一帧时,接收方就判读帧信息、对到达的数据进行接收并进行CRC校验,若发生错误则通过RBTFT协议所定义的方式进行重发或协商,当通信能继续则不向应用程序发送任何消息,继续保持链路,若通信不能继续,则放弃此链路,并且向应用程序发送RBTFT ERROR的消息,应用程序将重新复位此链路或进行其它相应的处理。另外,当有任何一方断开链接,应用程序将接收到RBTFT CLOSE消息,表示此链路已经断开。在接收端,所接收到的分帧的数据被去掉帧头重新归到接收缓冲区流,重新拼装为所传输的文件。然后,再进行下一个文件的传输,直至传输完所有的文件。
对于在应用层提高蓝牙无线连接的可靠性而言,最为可贵的是RBTFT协议支持断点续传。我们目前所实现的也就是将RBTFT文件传输协议嵌人到蓝牙无线文件传输的应用中,这样,即便出现文件传输中断的情况,也可以进行断点续传。这对于大文件无线传输尤为有意义。
RBTFT协议支持断点续传的原理在于RBTFT数据帧在报头中携带有指明文件数据在文件具体某个位置开始的偏移量。当发生错误或连接中断时,接收方发送一个带有偏移量的信息帧,说明它希望发送方从该位置重新开始传输。这样就无需重传整个文件,从而实现了断点续传。
5.2 蓝牙文件传翰RBTFT协议发送文件的详细过程
以下是蓝牙文件传输RBTFT 协议发送单个文件的详细过程:
n =0; //初始化重试次数计数器,收发双方建立连接;
file = fopen (filename,“rb ”); 设置并发送包含文件名、文件长度的报头;
for ( ; ;) {
message =所读取接收方发来的响应报头信息;
switch (message) {
case 接收方返回“已经准备接收”:
发送第一个数据子包,并以子包结束符指明后面有后续包;
Continue ;
case 接收方拒绝接收:
fclose (file);
return OK;
case 接收方返回确认信息:
发下一个包;
Continue;
case 超时:n=n+l;
if (n>20)//重试20 次,若还不能恢复连接,则放弃
{return ERROR;}
else if
{重新建立连接;
请求接收方发送带有偏移量的信息帧;
接收该信息帧;
从指定偏移量处开始继续传送;
Continue;}
case 接收方放弃传输:
return ERROR;
case 文件传输完毕:
输出“文件传输完毕”的屏幕提示信息;
return OK;
}
6 结论
本文叙述了蓝牙无线连接在射频、基带协议、链路管理协议(LMP)中采用的可靠性措施,包括:差错检测和校正、进行数据编解码、差错控制、数据加噪等。为了进一步在无线连接中提高蓝牙文件传输的可靠性,在蓝牙RFCOMM协议的基础之上建立了本文所描述的蓝牙的文件传输协议,称之为RBTFT,其中,创造性地提出了支持文件断点续传的办法,并得到了实现,从而在应用层有效地提高了蓝牙无线连接的可靠性。我们相信,在切实提高了蓝牙无线连接的可靠性之后,蓝牙技术将会得到更加广泛的应用。