本发明涉及通信领域,尤其涉及一种蓝牙通信的方法及通信装置。
背景技术:
目前,移动端蓝牙通信主要采用两种方式,有响应方式和无响应方式。无响应方式发送数据的速度大概是有响应方式发送数据速度的二倍。现有蓝牙通信过程中,通常情况下都会使用无响应的方式发送数据,当发送数据量大的情况下,采用无响应方式发送数据时容易出现蓝牙从设备接收能力饱和从而导致蓝牙数据包丢失、接收数据超时等异常情况,影响了蓝牙通信的稳定性。针对以上问题,业界亟需提出保证蓝牙通信稳定的技术方案。
技术实现要素:
为解决以上技术问题,本发明提供了一种蓝牙通信的方法,包括:
步骤S1、通信装置等待上层应用的调用,当数据交互接口被调用时接收上层应用发送的操作数据,执行步骤S2;
步骤S2、通信装置通过无响应方式将操作数据发送给蓝牙设备;
步骤S3、通信装置判断是否成功接收到蓝牙设备返回的操作结果,是则将接收到的操作结果返回给上层应用,结束;否则执行步骤S4;
步骤S4、通信装置通过有响应方式将操作数据发送给蓝牙设备,判断是否成功发送操作数据,是则执行步骤S5;否则通信失败,结束;
步骤S5、通信装置判断是否成功接收到蓝牙设备返回的操作结果,是则将接收到的操作结果返回给上层应用,结束;否则通信失败,结束。
本发明提供了一种通信装置,包括:
接收模块,用于等待上层应用的调用,当数据交互接口被调用时接收上层应用发送的操作数据;
发送模块,用于通过无响应方式将接收模块接收到的操作数据发送给蓝牙设备;
第一判断模块,用于当发送模块通过无响应方式将接收模块接收到的操作数据发送给蓝牙设备之后,判断是否成功接收到蓝牙设备返回的操作结果;
发送模块,还用于当第一判断模块判定成功接收到蓝牙设备返回的操作结果时,将接收到的操作结果返回给上层应用;还用于当第一判断模块判定没有成功接收到蓝牙设备返回的操作结果时,通过有响应方式将操作数据发送给蓝牙设备;
第二判断模块,用于当发送模块通过有响应方式将操作结果发送给蓝牙设备之后,判断是否成功发送操作数据;
第三判断模块,用于当第二判断模块判定成功发送操作数据之后,判断是否成功接收到蓝牙设备返回的操作结果;
发送模块,还用于当第三判断模块判定成功接收到蓝牙设备返回的操作结果时,将接收到的操作结果返回给上层应用。
本发明的有益效果为:本发明通过采用无响应方式与有响应方式相结合的方式发送数据,即保证了通信速率,也增加了蓝牙通信的稳定性,为用户提供更好的体验。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1提供的一种蓝牙通信的方法的流程图;
图2为本发明实施例2提供的一种蓝牙通信的方法的流程图;
图3为本发明实施例3提供的一种通信装置的方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例提供一种蓝牙通信的方法,参见图1,包括:
步骤S1、通信装置等待上层应用的调用,当数据交互接口被调用时接收上层应用发送的操作数据,执行步骤S2;
步骤S2、通信装置通过无响应方式将操作数据发送给蓝牙设备;
步骤S3、通信装置判断是否成功接收到蓝牙设备返回的操作结果,是则将接收到的操作结果返回给上层应用,结束;否则执行步骤S4;
步骤S4、通信装置通过有响应方式将操作数据发送给蓝牙设备,判断是否成功发送操作数据,是则执行步骤S5;否则通信失败,结束;
步骤S5、通信装置判断是否成功接收到蓝牙设备返回的操作结果,是则将接收到的操作结果返回给上层应用,结束;否则通信失败,结束。
可选的,步骤S2之后,步骤S3之前还包括:通信装置休眠第一预设时长。
可选的,步骤S2之后,步骤S3之前还包括:通信装置获取蓝牙信号强度,根据蓝牙信号强度确定第一休眠时长,进行休眠。
需要说明的是,当蓝牙信号强度越强,确定的第一休眠时长越短。
优选的,步骤S3中,通信装置判定没有成功接收到蓝牙设备返回的操作结果之后,执行步骤S4之前还包括:通信装置更新无响应发送次数,并判断无响应发送次数是否超过第一预设值,是则执行步骤S4,否则返回步骤S2。
进一步的,步骤S2之后,步骤S3之前还包括:通信装置根据无响应发送次数确定第二休眠时长,进行休眠。
需要说明的是,无响应发送次数越多,第二休眠时长越长;
可选的,步骤S4中通信装置判定成功发送操作数据之后,步骤S5之前还包括:通信装置休眠第二预设时长;
可选的,步骤S4中通信装置判定成功发送操作数据之后,步骤S5之前还包括:通信装置获取蓝牙信号强度,根据蓝牙信号强度确定第三休眠时长,进行休眠。
需要说明的是,当蓝牙信号强度越强,确定的第三休眠时长越短。
可选的,步骤S4中,通信装置判定没有成功发送操作数据之后,还包括:通信装置更新有响应发送次数,并判断有响应发送次数是否超过第二预设值,是则通信失败,结束,否则返回步骤S4;
步骤S5中,通信装置判定没有成功接收到蓝牙设备返回的操作结果之后,还包括:通信装置更新有响应发送次数,并判断有响应发送次数是否超过第二预设值,是则通信失败结束,否则返回步骤S4。
更进一步的,通信装置判定成功发送操作数据之后,步骤S5之前还包括:通信装置根据有响应发送次数确定第四休眠时长,进行休眠。
需要说明的是,有响应发送次数越多,第四休眠时长越长;
本实施例当发送操作数据之后通过增加休眠时长,增加蓝牙从设备接收数据的时间,从而保证通信稳定;具体通过以下方式确定休眠时长:1)休眠预设时长;2)根据当前蓝牙信号强度确定休眠时长;3)根据发送操作数据的次数确定休眠时长。
优选的,步骤S3中,通信装置判定没有成功接收到蓝牙设备返回的操作结果之后,执行步骤S4之前还包括:
步骤A1、通信装置获取蓝牙信号强度,判断蓝牙信号强度是否大于预设值,是则执行步骤A2;否则执行步骤S4;
步骤A2、通信装置更新无响应发送次数,判断无响应发送次数是否大于第三预设值,是则执行步骤S4,否则返回步骤S2。
具体的,步骤S2具体包括:
步骤B1、通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,通过无响应方式将当前分包数据发送给蓝牙设备;
步骤B2、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤B1,否则执行步骤S3。
更进一步的,步骤S3中,通信装置判定没有成功接收到蓝牙设备返回的操作结果之后,步骤S4之前,还包括:
步骤C1、通信装置根据预设长度对操作数据中未被发送的数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
步骤C2、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤C1,否则执行步骤S3;
需要说明的是,预设长度小于所述通信设备上次发送的数据长度。
具体的,步骤S4中具体包括:
步骤D1、通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
步骤D2、通信装置判断是否已成功发送数据,是则执行步骤D3,否则通信失败,结束;
步骤D3、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤D1,否则执行步骤S5。
更进一步的,步骤D2中,通信装置判定没有成功发送数据时,还包括:
步骤E1、通信装置根据预设长度对操作数据中未被发送的数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
步骤E2、通信装置判断是否已成功发送数据,是则执行步骤E3,否则通信失败,结束;
步骤E3、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤E1,否则执行步骤S5;
需要说明的是,预设长度小于通信设备上次发送的数据长度。
上述方法当通信失败之后,减少单包数据长度,保证通信稳定;
具体的,通信装置判断是否成功接收到蓝牙设备返回的操作结果具体包括:
步骤F1、通信装置判断是否接收到蓝牙设备返回的操作结果,是则执行步骤F2,否则判定没有成功接收到所述蓝牙设备返回的操作结果;
步骤F2、通信装置判断接收到的操作结果是否完整,是则判定成功接收到蓝牙设备返回的操作结果,否则判定没有成功接收到蓝牙设备返回的操作结果。
步骤E2具体包括:
步骤F2-1、通信装置从操作结果中获取协议数据长度和消息校验值,判断操作结果的长度是否与协议数据的长度匹配,是则执行步骤E2-2;否则判定操作结果不完整;
步骤F2-2、通信装置根据消息校验值验证操作结果,若验证通过则判定操作结果完整,否则判定操作结果不完整。
优选的,通信装置接收上层应用发送的操作数据之后,步骤S2之前还包括:通信装置获取蓝牙信号强度,判断蓝牙信号强度是否大于预设值,是则执行步骤S2;否则执行步骤S4。
优选的,步骤S3中,当通信装置判断已成功接收到蓝牙设备返回的操作结果之后还包括:通信装置记录当前发送方式为无响应方式;
步骤S5中,当通信装置判断已成功接收到蓝牙设备返回的操作结果之后还包括:通信装置记录当前发送方式为有响应方式;
接收上层应用发送的操作数据之后,步骤S2之前还包括:通信装置判断当前发送方式,当当前发送方式为无响应方式时执行步骤S2;当当前发送方式为有响应方式时,执行步骤S4。
更进一步的,通信装置接收上层应用发送的操作数据之后,通信装置判断当前发送方式之前还包括:通信装置判断距离上次数据交互接口被调用的时长是否超过第三预设值,是则执行步骤S2,否则执行通信装置判断当前发送方式。
实施例2
本实施例提供一种蓝牙通信的方法,参见图2,包括:
步骤101、通信装置接收上层应用的调用,当扫描接口被调用时,执行步骤102;当连接接口被调用时,执行步骤103;当断开连接接口被调用时,执行步骤104;当数据交互接口被调用时,执行步骤105;
步骤102、通信装置扫描周围蓝牙设备,并将扫描到的蓝牙设备的蓝牙设备信息返回给上层应用;返回步骤101;
具体的,通信装置调用CBCentralManager对象的[_manager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:@"12340001-0001-00c3-0000-465453414645"]]options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@YES}]接口扫描周围蓝牙设备,该接口函数的第一参数NSArray*的值为服务标识;当扫描到周围蓝牙设备时触发CBCentralManager对象的didDiscoverPeripheral:advertisementData:RSSI:接口获取已扫描到与服务标识相匹配的蓝牙设备信息;
步骤103、通信装置接收上层应用下发的用户选中的蓝牙设备信息,并与选中的蓝牙设备信息相对应的蓝牙设备建立连接;返回步骤101;
具体的,通信装置通过调用CBCentralManager对象的(void)connectPeripheral:(CBPeripheral*)peripheral options:(nullable NSDictionary<NSString*,id>*)options接口与蓝牙设备建立连接;
步骤104、通信装置与当前连接的蓝牙设备断开连接,返回步骤101;
具体的,通信装置调用CBCentralManager对象的cancelPeripheralConnection:(CBPeripheral*)peripheral接口与当前连接的蓝牙设备断开连接;
步骤105、通信装置接收上层应用发送的操作数据;
步骤106、通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,并通过无响应方式向蓝牙设备发送当前分包数据;
具体的,通信装置获取蓝牙数据通信的单包最大包长,根据单包最大包长依次从操作数据中获取分包数据,并将分包数据发送给蓝牙设备;
需要说明的是,通信装置调用(void)writeValue:(NSData*)data forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)type接口发送待发送数据;其中data是待发送的数据,type是发送类型;
需要说明的是,Type发送类型可以为CBCharacteristicWriteWithResponse类型,即有响应方式和CBCharacteristicWriteWithoutResponse类型,即无响应方式;其中当type是CBCharacteristicWriteWithResponse时会触发CBPeriphera方法的peripheral:(CBPeripheral)peripheral didWriteValueForCharacteristic:(CBCharacteristic)characteristic error:(NSError*)error接口,当error为空则成功,否则失败;当type是CBCharacteristicWriteWithoutResponse时不会触发此方法。
本实施例中,通信装置接收到的操作数据为:12345678900987654321ABCDEFFEDCBA0123456789012345678901234567;操作数据的长度为30字节;通信装置获取到的蓝牙数据通信的单包最大包长为20字节,通信装置首先获取操作数据中的前17字节作为当前分包数据12345678900987654321ABCDEFFEDCBA01,并将数据头0400、第一个分包数据01和当前分包数据12345678900987654321ABCDEFFEDCBA01顺序拼接得到待发送数据,并将待发送数据通过无响应方式发送给蓝牙设备;
更进一步的,本实施例中,通信装置调用(void)writeValue:(NSData*)040001 12345678900987654321ABCDEFFEDCBA01 forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)CBCharacteristicWriteWithoutResponse接口,向蓝牙设备发送待发送数据;
需要说明的是,步骤106之前还包括:通信装置开始计时;
步骤106至步骤107中还包括:通信装置实时监控当前计时器的值是否超过预设时长,是则执行步骤110,否则继续;
步骤107、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤106,否则等待接收蓝牙设备返回的操作结果;执行步骤108,
更为详细的是:
当操作数据长度小于或者等于单包最大长度时,步骤106具体为:通信装置将操作数据作为当前分包数据,根据当前分包数据生成待发送数据,并通过无响应方式向蓝牙设备发送待发送数据;
当操作数据长度大于单包最大长度时,步骤106至步骤107具体包括:
步骤X1、通信装置从操作数据中顺序获取长度为单包最大长度的数据作为当前分包数据;
步骤X2、通信装置通过无响应方式向蓝牙设备发送当前分包数据;更新偏移值;判断更新后的偏移值是否等于操作数据的长度,是则执行步骤108,否则执行步骤X3;
需要说明的是,偏移值的初始值为0;通信装置更新偏移值具体为,通信装置将当前偏移值与当前分包数据的长度相加得到更新后的偏移值;
步骤X3、通信装置判断操作数据中未被发送的数据的长度是否大于单包最大长度,是则返回步骤X1,否则将操作数据中未被发送的数据作为当前分包数据,返回步骤X2;
步骤108、通信装置判断是否在预设时间内接收到蓝牙设备返回的操作结果,是则执行步骤109,否则执行步骤110;
步骤109、通信装置判断接收到的操作结果是否完整,是则将接收到的操作结果返回给上层应用;返回步骤101;否则执行步骤110;
可选的,本实施例中,步骤109具体包括:
步骤109-1、通信装置从操作结果的数据头中获取协议数据长度,并判断接收到的操作结果的长度是否与协议数据长度匹配,是则执行步骤109-2,否则执行步骤110;
步骤109-2、通信装置从操作结果中获取消息校验值,根据消息校验值验证操作结果,若验证通过,则将接收到的操作结果返回给上层应用,返回步骤101,否则执行步骤110;
步骤110、通信装置获取当前蓝牙信号强度,并判断当前蓝牙信号强度是否大于预设值,是则执行步骤111,否则执行步骤113;
具体的,蓝牙通信装置调用CBPeripheral对象的(void)readRSSI接收获取当前蓝牙信号强度;该方法触发(void)peripheral:(CBPeripheral*)peripheral didReadRSSI:(NSNumber*)RSSI error:(nullable NSError*)error;当error为空则成功,否则失败;其中RSSI为蓝牙信号强度;
步骤111、通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,并通过无响应方式向蓝牙设备发送分包数据,休眠预设时长;
具体的,通信装置调用(void)writeValue:(NSData*)0400 01 12345678900987654321ABCDEFFEDCBA01 forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)CBCharacteristicWriteWithoutResponse接口向蓝牙设备发送分包数据;
通信装置触发NSThread对象的(void)sleepForTimeInterval:(NSTimeInterval)time接口休眠预设时长;其中time为预设时长;
可选的,步骤111具体为:通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,并通过无响应方式向蓝牙设备发送分包数据,获取蓝牙信号强度,根据蓝牙信号强度确定第一休眠时长,进行休眠;
需要说明的是,当蓝牙信号强度越强,确定的第一休眠时长越短。
步骤112、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤111,否则等待接收蓝牙设备返回的操作结果,执行步骤116;
步骤113、通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,并通过有响应方式向蓝牙设备发送当前分包数据;
具体的,通信装置调用(void)writeValue:(NSData*)0400 01 12345678900987654321ABCDEFFEDCBA01forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)CBCharacteristicWriteWithResponse接口向蓝牙设备发送待发送数据;该方法触发CBPeriphera方法的peripheral:(CBPeripheral)peripheral didWriteValueForCharacteristic:(CBCharacteristic)characteristic error:(NSError*)error接口;
步骤114、通信装置判断是否成功发送数据,是则执行步骤115,否则通过有响应方式向蓝牙设备重新发送当前分包数据,执行步骤114;
具体的,通信装置调用(void)writeValue:(NSData*)0400 01 12345678900987654321ABCDEFFEDCBA01forCharacteristic:(CBCharacteristic*)characteristic type:(CBCharacteristicWriteType)CBCharacteristicWriteWithResponse接口向蓝牙设备发送待发送数据;该方法触发CBPeriphera方法的peripheral:(CBPeripheral)peripheral didWriteValueForCharacteristic:(CBCharacteristic)characteristic error:(NSError*)error接口;当error为空则成功,否则失败;
通信装置触发NSThread对象的(void)sleepForTimeInterval:(NSTimeInterval)time接口休眠预设时长;
需要说明的是,步骤111和步骤113之前分别还包括:通信装置开始计时;
所述步骤111至步骤112中还包括:通信装置实时监控当前计时器的值是否超过预设时长,是则执行步骤118,否则继续;
所述步骤113至步骤115中还包括:通信装置实时监控当前计时器的值是否超过预设时长,是则执行步骤118,否则继续;
步骤115、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤113,否则等待接收蓝牙设备返回的操作结果,执行步骤116;
更为详细的是:
当操作数据长度小于或者等于单包最大长度时,步骤113具体为:通信装置将操作数据作为当前分包数据,并通过无响应方式向蓝牙设备发送待发送数据;
当操作数据长度大于单包最大长度时,步骤113至步骤115具体包括:
步骤R1、通信装置从操作数据中获取长度为单包最大长度的数据作为当前分包数据;
步骤R2、通信装置通过有响应方式向蓝牙设备发送当前分包数据;判断是否已成功发送分包数据,是则执行步骤R3,否则继续执行步骤R2;
步骤R3、通信装置更新偏移值,判断更新后的偏移值是否等于操作数据的长度,是则等待接收蓝牙设备返回的操作结果,执行步骤116,否则执行步骤R4;
需要说明的是,偏移值的初始值为0;通信装置更新偏移值具体为,通信装置将当前偏移值与当前分包数据的长度相加得到更新后的偏移值;
步骤R4、通信装置判断操作数据中未被发送的数据的长度是否大于单包最大长度,是则返回步骤R1,否则将操作数据中未被发送的数据作为当前分包数据,返回步骤R2;
步骤116、通信装置判断是否在预设时间内接收到蓝牙设备返回的操作结果,是则执行步骤117,否则执行步骤118;
步骤117、通信装置判断接收到的操作结果是否完整,是则将接收到的操作结果返回给上层应用;返回步骤101;否则执行步骤118;
步骤118、通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,并通过有响应方式向蓝牙设备发送当前分包数据,休眠预设时间;
通信装置触发NSThread对象的(void)sleepForTimeInterval:(NSTimeInterval)time接口休眠预设时长;
可选的,步骤118具体为:通信装置根据单包最大长度对操作数据顺序分包得到当前分包数据,并通过无响应方式向蓝牙设备发送分包数据,获取蓝牙信号强度,根据蓝牙信号强度确定第二休眠时长,进行休眠;
需要说明的是,当蓝牙信号强度越强,确定的第二休眠时长越短。
步骤119、通信装置判断是否成功发送数据,是则执行步骤120,否则通过有响应方式重新发送当前分包数据,执行步骤119;
需要说明的是,步骤118之前还包括:通信装置开始计时;
所述步骤118至步骤120中还包括:通信装置实时监控当前计时器的值是否超过预设时长,是则通信失败,结束,否则继续;
步骤120、通信装置判断操作数据中是否还有未被发送的数据,是则返回步骤118,否则等待接收蓝牙设备返回的操作结果,执行步骤121;
步骤121、通信装置判断是否在预设时间内接收到蓝牙设备返回的操作结果,是则执行步骤122,否则通信失败,结束;
步骤122、通信装置判断接收到的操作结果是否完整,是则将接收到的操作结果返回给上层应用;返回步骤101;否则通信失败,结束。
优选的,所述步骤121中当通信装置在预设时间内没有接收到蓝牙设备返回的成功接收数据响应时,通信装置根据预设长度对操作数据中未被发送的数据进行分包得到当前分包数据,并通过有响应方式向蓝牙设备当前分包数据,休眠预设时间;
需要说明的是,预设长度小于单包最大长度,更进一步的,预设长度小于上次发送的数据中分包数据的长度;
更为详细的是,
当操作数据长度小于或者等于预设长度时,通信装置将操作数据作为当前分包数据,并通过无响应方式向蓝牙设备发送待发送数据;
当操作数据长度大于预设长度时,
步骤V1、通信装置从操作数据中依次获取长度为预设长度的数据作为当前分包数据;
步骤V2、通信装置通过有响应方式向蓝牙设备发送当前分包数据;判断是否已成功发送分包数据,是则执行步骤V3,否则继续执行步骤V2;
步骤V3、通信装置更新偏移值,判断更新后的偏移值是否等于操作数据的长度,是则等待接收蓝牙设备返回的操作结果,执行步骤121,否则执行步骤V4;
需要说明的是,偏移值的初始值为0;通信装置更新偏移值具体为,通信装置将当前偏移值与当前分包数据的长度相加得到更新后的偏移值;
步骤V4、通信装置判断操作数据中未被发送的数据的长度是否大于预设长度,是则返回步骤V1,否则将操作数据中未被发送的数据作为当前分包数据,返回步骤V2;
上述优化方案的有益效果为,通信装置通过减少单次发送数据的长度,来保证蓝牙通信的稳定性。
实施例3
本实施例提供一种通信装置,参见图3,包括:
接收模块11,用于等待上层应用的调用,当数据交互接口被调用时接收上层应用发送的操作数据;
发送模块12,用于通过无响应方式将接收模块11接收到的操作数据发送给蓝牙设备;
第一判断模块13,用于当发送模块12通过无响应方式将接收模块11接收到的操作数据发送给蓝牙设备之后,判断是否成功接收到蓝牙设备返回的操作结果;
发送模块12,还用于当第一判断模块13判定成功接收到蓝牙设备返回的操作结果时,将接收到的操作结果返回给上层应用;还用于当第一判断模块13判定没有成功接收到蓝牙设备返回的操作结果时,通过有响应方式将操作数据发送给蓝牙设备;
第二判断模块14,用于当发送模块12通过有响应方式将操作结果发送给蓝牙设备之后,判断是否成功发送操作数据;
第三判断模块15,用于当第二判断模块14判定成功发送操作数据之后,判断是否成功接收到蓝牙设备返回的操作结果;
发送模块12,还用于当第三判断模块15判定成功接收到蓝牙设备返回的操作结果时,将接收到的操作结果返回给上层应用。
可选的,第一判断模块13,具体用于当发送模块12通过无响应方式将接收模块11接收到的操作数据发送给蓝牙设备之后,休眠第一预设时长,判断是否成功接收到蓝牙设备返回的操作结果。
可选的,第一判断模块13,具体用于当发送模块12通过无响应方式将接收模块11接收到的操作数据发送给蓝牙设备之后,获取蓝牙信号强度,根据蓝牙信号强度确定第一休眠时长,进行休眠,判断是否成功接收到蓝牙设备返回的操作结果。
需要说明的是,当蓝牙信号强度越强,确定的第一休眠时长越短。
优选的,第四判断模块,用于当第一判断模块13判定没有成功接收到蓝牙设备返回的操作结果之后,更新无响应发送次数,并判断无响应发送次数是否超过第一预设值;
发送模块12,具体用于当第四判断模块判定无响应发送次数超过第一预设值时,通过有响应方式将操作数据发送给蓝牙设备;还用于当第四判断模块判定无响应发送次数没有超过第一预设值时,通过无响应方式将操作数据发送给蓝牙设备。
更进一步的,第一判断模块13,具体用于当发送模块12通过无响应方式将接收模块11接收到的操作数据发送给蓝牙设备之后,根据无响应发送次数确定第二休眠时长,进行休眠,判断是否成功接收到蓝牙设备返回的操作结果。
需要说明的是,无响应发送次数越多,第二休眠时长越长;
可选的,第三判断模块15,具体用于当第二判断模块14判定成功发送操作数据之后,休眠第二预设时长,判断是否成功接收到蓝牙设备返回的操作结果。
可选的,第三判断模块15,具体用于当第二判断模块14判定成功发送操作数据之后,获取蓝牙信号强度,根据蓝牙信号强度确定第三休眠时长,进行休眠,判断是否成功接收到蓝牙设备返回的操作结果。
需要说明的是,当蓝牙信号强度越强,确定的第三休眠时长越短。
优选的,通信装置还包括:
第五判断模块,用于当第二判断模块14判定没有成功发送操作数据之后,更新有响应发送次数,并判断有响应发送次数是否超过第二预设值;还用于当第三判断模块15判定没有成功接收到蓝牙设备返回的操作结果之后,更新有响应发送次数,并判断有响应发送次数是否超过第二预设值;
发送模块12,还用于当第五判断模块判定有响应发送次数没有超过第二预设值时,通过有响应方式将操作数据发送给蓝牙设备。
更进一步的,第三判断模块15,具体用于当第二判断模块14判定成功发送操作数据之后,根据有响应发送次数确定第四休眠时长,进行休眠,判断是否成功接收到蓝牙设备返回的操作结果。
需要说明的是,无响应发送次数越多,第四休眠时长越长;
优选的,通信装置还包括:
第六判断模块,用于当第一判断模块13判定没有成功接收到蓝牙设备返回的操作结果时,判断蓝牙信号强度是否大于第三预设值;
第七判断模块,用于当第六判断模块判定蓝牙信息号强度大于第三预设值时,更新无响应发送次数,判断无响应发送次数是否大于第四预设值;
发送模块12,具体用于当第七判断模块判定无响应发送次数大于第四预设值时,通过有响应方式将操作数据发送给蓝牙设备;还用于当第六判断模块判定蓝牙信号强度不大于第三预设值时,通过有响应方式将操作数据发送给蓝牙设备,还用于当第七判断模块判定无响应发送次数不大于第四预设值时,通过无响应方式将操作数据发送给蓝牙设备。
具体的,发送模块12具体包括:
第一分包单元,用于根据单包最大长度对接收模块11接收到的操作数据顺序分包得到当前分包数据,通过无响应方式将当前分包数据发送给蓝牙设备;
第一判断单元,还用于判断操作数据中是否还有未被发送的数据;
第一分包单元,还用于当第一判断单元判定还有未被发送的数据时,根据单包最大长度对接收模块11接收到的操作数据顺序分包得到当前分包数据,通过无响应方式将当前分包数据发送给蓝牙设备;
第一判断模块13,用于当第一判断单元判定操作数据中没有未被发送的数据时,判断是否成功接收到蓝牙设备返回的操作结果。
优选的,发送模块12还包括:第二分包单元,用于当第一判断模块13判定没有成功接收到蓝牙设备返回的操作结果时,根据预设长度对操作数据中未被发送的数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
第二判断单元,用于当第二分包单元通过有响应当时将当前分包数据发送给蓝牙设备之后,判断是否还有未被发送的数据;
第二分包单元,还用于当第二判断单元判定还有未被发送的数据时,根据预设长度对操作数据中未被发送的数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
第一判断模块13,还用于当第二判断单元判定操作数据中没有未被发送的数据时,判断是否成功接收到蓝牙设备返回的操作结果;
预设长度小于通信设备上次发送的数据长度。
具体的,发送模块12具体包括:
第三分包单元,用于当第一判断模块13判定没有成功接收到蓝牙设备返回操作结果时,根据单包最大长度对操作数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
第二判断模块14,具体用于当第三分包单元将当前分包数据发送给蓝牙设备之后,判断是否成功发送数据;
第三判断单元,用于当第二判断模块14判定成功发送操作数据之后判断操作数据中是否还有未被发送的数据;
第三分包单元,还用于当第三判断单元判定操作数据中还有未被发送的数据时,根据单包最大长度对操作数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备。
优选的,发送模块12还包括:第四分包单元,用于当第二判断模块14判定没有成功发送数据时,根据预设长度对操作数据中未被发送的数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
第二判断模块14,具体用于当第四分包单元通过有响应当时将当前分包数据发送给蓝牙设备之后,判断是否成功发送数据;
第四判断单元,用于当第二判断模块14判定成功发送数据之后,判断操作数据中是否还有未被发送的数据;
第四分包单元,还用于当第四判断单元判定操作数据中还有未被发送的数据时,根据预设长度对操作数据中未被发送的数据顺序分包得到当前分包数据,通过有响应方式将当前分包数据发送给蓝牙设备;
预设长度小于通信设备上次发送的数据长度;
第三判断模块15,用于当第四判断单元判定操作数据中还有未被发送的数据之后,判断是否成功接收到蓝牙设备返回的操作结果。
具体的,第一判断模块13具体包括:
第五判断单元,用于当发送模块12通过无响应当时将接收模块11接收到的操作数据发送给蓝牙设备之后,判断是否接收到蓝牙设备返回的操作结果;
第六判断单元,用于当第五判断单元判定接收到蓝牙设备返回的操作结果时,判断接收到的操作结果是否完整;
发送模块12,具体用于当第六判断单元判定操作结果完整时,将接收到的操作结果返回给上层应用;具体用于当第五判断单元判定没有接收到蓝牙设备返回的操作结果时,通过有响应方式将操作数据发送给蓝牙设备;具体用于当第六判断单元判定操作结果不完整时,过有响应方式将操作数据发送给蓝牙设备。
第三判断模块15具体包括:
第七判断单元,用于当第二判断模块14判定成功发送操作数据之后,判断是否接收到蓝牙设备返回的操作结果;
第八判断单元,用于当第七判断单元判定接收到蓝牙设备返回操作结果时,判断接收到的操作结果是否完整;
发送模块12,具体用于当第八判断单元判定操作结果完整时,将接收到的操作结果返回给上层应用。
更为详细的,第八判断单元具体包括:
第一判断子单元,用于从操作结果中获取协议数据长度和消息校验值,判断操作结果的长度是否与协议数据的长度匹配;
第二判断子单元,用于当第一判断子单元判定操作结果的长度与协议数据的长度匹配时,根据消息校验值验证操作结果;
发送模块12,具体用于当第二判断子单元验证通过时,将接收到的操作结果返回给上层应用;
优选的,通信装置还包括:
第八判断模块,用于当接收模块11接收到上层应用发送的操作数据时,获取蓝牙信号强度,判断蓝牙信号强度是否大于预设值;
发送模块12,具体用于当第八判断模块判定蓝牙信号强度大于预设值时,通过无响应方式将接收模块11接收到的操作数据发送给蓝牙设备;还用于当第八判断模块判定蓝牙信号不大于预设值时,通过有响应方式将操作数据发送给蓝牙设备。
优选的,通信装置还包括:
记录模块,用于当第一判断模块13判定成功接收到蓝牙设备返回的操作结果时,记录当前发送模式为无响应方式;还用于当第三判断模块15判定成功接收到蓝牙设备返回的操作结果时,记录当前发送模式为有响应方式;
发送模块12,具体用于当接收模块11接收到上层应用发送的操作数据时,判断当前发送模式,当当前发送模式为无响应方式时,通过无响应方式将操作数据发送给蓝牙设备,当当前发送模式为有响应方式时,通过有响应方式将操作数据发送给蓝牙设备。
更进一步的,通信装置还包括:
第九判断模块,用于当接收模块11接收到上层应用发送的操作数据时,通信装置判断距离上次数据交互接口被调用的时长是否超过第三预设值;
发送模块12,具体用于第九判断模块判定距离上次数据交互接口被调用的时长超过第三预设值时,通过无响应方式将操作数据发送给蓝牙设备,还用于当第九判断模块判定距离上次数据交互接收被调用的时长没有超过第三预设值时,判断当前发送模式;当当前发送模式为无响应方式时,通过无响应方式将操作数据发送给蓝牙设备,当当前发送模式为有响应方式时,通过有响应方式将操作数据发送给蓝牙设备。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。