设。
[0031]S2、蓝牙外设接收分片数据,校验分片数据中的有效载荷和分片编号,如果正确,则将接收的分片数据进行重组保存并发送响应类型为“成功”的分片确认数据;如果不正确,则发送响应类型为“失败”的分片确认数据;
53、蓝牙主机通过传输层的上行通道接收蓝牙外设发送的分片确认数据,通过分片确认数据中携带的数据类型判定接收的本条信息为分片确认数据,再通过分片确认数据的响应类型判定数据传送是否成功,如果成功,则蓝牙主机根据分片确认数据中携带的响应数据继续发送下一片分片;
54、重复执行步骤SI和S2,直到蓝牙外设接收到的有效载荷等于应用数据长度,视为应用数据传输成功,蓝牙外设发送“接收成功”的分片确认数据至蓝牙主机,蓝牙主机结束传输。
[0032]3、蓝牙传输最大的问题就是可靠性差,本发明为了保证其可靠性,避免数据在传输过程中可能存在丢失或者误码,需要在传输过程中加入了断点续传和可靠性传输机制。
[0033]原理为:由于具备传输层分片机制的支持,数据传输过程中的对等体(peer),能够很好的跟踪记录当前传输的进度。本发明中将一次应用层面的逻辑传输(比如传输某个命令或者某些数据)视为一次事务:若所有分片完全发送或完全接收则事务成功,如果有分片尚未发送或者接收,则视为事务失败。如果传输因物理链路断开或者第4节中阐述的帧失败而失败,那么发送方可以重新发起物理链接,并且向接收方发送分片编号不为O的续传分片。这要求接收方在接收的同时,如果没有收到分片编号为O的分片,则不复位接收状态,以此进行断点续传,直到所有分片传输结束,接收方接收到的数据长度总和等于分片前2字节表示的有效载荷长度总和为止。
[0034]可靠性传输的流程图如图5所示,具体采用的机制如下:
第一种机制,在步骤Si中,蓝牙主机发送数据之后,进入阻塞等待状态,如果在超时时间内没有接收到来自蓝牙外设的分片确认数据,认为分片传输失败,进而重传当前分片,直到正确收到来自蓝牙外设的分片确认数据或者超出重传次数上限。
[0035]此机制的应用场景为:某分片在发送至对端过程中丢失。此时接收方收不到任何分片,发送方的发送进入发送阻塞等待,等待一段时间后超时,并开始重传上一分片。
[0036]第二种机制,如果超出重传次数上限或者物理链路层的连接断开,则视为传输事务未完成,可启用断点续传,具体为:
Xl、确认物理链路层的连接是否正常,如果不正常,重新建立物理链路层的连接;
X2、确定上一次发送成功的分片数据的分片编号N,开始发送分片编号为N+1的分片数据,直到蓝牙外设接收到的有效载荷等于应用数据长度,视为应用数据传输成功,蓝牙外设发送“接收成功”的分片确认数据至蓝牙主机,蓝牙主机结束传输。
[0037]此机制的应用场景为:如果因为异常原因,导致蓝牙物理链路断开,在发送方和接收方都会产生一个断开事件,双方收到该事件后终止发送操作,如果发送方不选择断点续传的话,则会重新开始发送分片序号为O的分片,那么双方状态机复位,事务失败并重新开始。或者,对于单个特定分片,重传次数应设置上限,如果重传上限达到,证明蓝牙底层链路出现异常,此时断开物理连接。
[0038]第三种机制,如果超出重传次数上限或者物理链路层的连接断开,则视为传输事务未完成,可重新启动进行数据传送,具体为:
Cl、确认物理链路层的连接是否正常,如果不正常,重新建立物理链路层的连接;
C2、蓝牙主机发送分片编号为O的分片数据,蓝牙外设接收到此分片数据后,采用状态复位机制,丢弃之前接收并重组的分片数据,并回滚传输事务,传输重新开始。
[0039]第四种机制,步骤S2中,如果蓝牙外设校验分片编号时,发现分片编号不是期望的编号,则发送响应类型为“失败”的分片确认数据,同时,响应数据为期望的分片编号;
步骤S3中,蓝牙主机接到此分片确认数据后,根据响应数据表示的期望分片编号开始发送分片数据。
[0040]此机制的应用场景为:接收方收到序号为N的分片,但发给发送方的带有期望序号是N+1的ACK在传输过程中被丢掉,同理,发送方进入发送阻塞等待,此时按发送方的逻辑应当重发上一分片,该重发的分片被接收方接收之后,接收方对比收到的分片序号N并不是期望的N+1,故丢弃该分片,并重发期望序号是N+1的ACK给发送方。
[0041 ]第五种机制,步骤S2中,如果蓝牙外设接收处理时发生异常,则直接丢弃本次分片,并发送响应类型为“失败”的分片确认数据,同时,响应数据为当前的分片编号;
步骤S3中,蓝牙主机接到此分片确认数据后,根据响应数据表示的期望分片编号开始发送分片数据。
[0042]此机制的应用场景为:接收方在接收处理时发生异常,直接丢弃本次的分片,并以当前分片序号N作为期待的下一分片序号,并通过ACK告知发送方,发送方收到之后重发一次分片。或者,如果接收方对收到分片序号为N的数据并进行校验,如果有效性校验失败,则认为数据发生了非法篡改,那么在ACK中设置期望分片序号为N,请求发送方重传。
[0043]上述全局操作步骤如图6所示,具体流程如下:
(1)主机对外设发出的广告进行扫描,根据MAC地址或者名称判断是否为本次传输目标,如果是则发起蓝牙物理连接,并发现服务和寻找上行、下行GATT Characteristics,此过程结束之后,逻辑链接建立;
(2)主机对将要发送的用户层数据进行长度计算,并提交给至传输层;
(3)传输层采用16字节分片原则,从O序号开始对用户层数据进行分片,在每个分片头部加入本次传输总体有效载荷长度、当前分片序号,并在分片尾部加入当前分片校验数据,通过下行Charac ter istic Wr i te方式传输给等待接收的从机;
(4)从机作为接收方,接收到数据之后进行有效性校验,校验成功之后对数据进行重组保存,并通过ACK和上行Characteristic Notify方式通知发送方本条分片是否发送正确,以及期望的下一分片序号;
(5)发送方在发送当前分片之后,进入阻塞等待状态,如果在超时时间内没有接收到来自接收方的ACK,认为分片传输失败,进而重传当前分片,直到正确收到来自接收方的ACK或者超出重传次数上限;
(6)重复步骤(3)至(5)直到接收方接收到的有效载荷等于应用数据长度,视为接收成功,接收方发送“接收成功” ACK给发送方,由发送方结束传输并断开蓝牙物理链路;
(7)重复步骤(3)至(5),在此过程中如果出现重传超出上限,或者物理链路断开,则视为传输事务未完成,假定当前已经传输完成序号为N的分片。此时由发送方外部干涉,决定是否启用断点续传,如果进行断点续传,则发送方或重新建立蓝牙物理连接,并开始发送序号为N+1的分片,回到(3)至(5)构建的传输过程,直到成功结束进入(6)或者失败进入(7);如果发送方决定不进行断点续传,那么视为传输事务失败,或在重新建立物理链路之后,发送序号为O的分片,引