CN107994928B - 一种实现蓝牙数据同步收发的方法及通信装置 - Google Patents
一种实现蓝牙数据同步收发的方法及通信装置 Download PDFInfo
- Publication number
- CN107994928B CN107994928B CN201810020572.4A CN201810020572A CN107994928B CN 107994928 B CN107994928 B CN 107994928B CN 201810020572 A CN201810020572 A CN 201810020572A CN 107994928 B CN107994928 B CN 107994928B
- Authority
- CN
- China
- Prior art keywords
- bluetooth
- module
- bluetooth equipment
- data
- communication device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000001360 synchronised effect Effects 0.000 title claims abstract description 17
- 230000003993 interaction Effects 0.000 claims abstract description 84
- 238000012544 monitoring process Methods 0.000 claims description 23
- 230000002093 peripheral effect Effects 0.000 claims description 22
- 230000001960 triggered effect Effects 0.000 description 12
- 230000002159 abnormal effect Effects 0.000 description 4
- 238000006467 substitution reaction Methods 0.000 description 2
- 239000011800 void material Substances 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04B—TRANSMISSION
- H04B5/00—Near-field transmission systems, e.g. inductive or capacitive transmission systems
- H04B5/70—Near-field transmission systems, e.g. inductive or capacitive transmission systems specially adapted for specific purposes
- H04B5/72—Near-field transmission systems, e.g. inductive or capacitive transmission systems specially adapted for specific purposes for local intradevice communication
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Mobile Radio Communication Systems (AREA)
- Telephone Function (AREA)
Abstract
本发明涉及通信领域,特别涉及一种实现蓝牙数据同步收发的方法及通信装置,该方法包括:通信装置等待上层应用的调用;当连接函数接口被调用时,通信装置与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征;当数据交互接口被调用时,接收上层应用发送的操作数据;设置数据交互状态为等待状态;开启并执行辅助线程;当监控到数据交互状态切换成完成状态时,获取接收到的所有响应数据,并将响应数据返回给上层应用;本发明通信装置通过创建发送数据的辅助线程并设置数据交互状态,使得上层应用只有将响应数据接收完成之后,再进行下一次数据交互,实现了数据的同步收发。
Description
技术领域
本发明涉及通信领域,特别涉及一种实现蓝牙数据同步收发的方法及通信装置。
背景技术
现有技术中,苹果的IOS操作系统和OSX操作系统的蓝牙通讯均采用了CoreBluetooth的框架,CoreBluetooth框架的核心是:central(中心)和peripheral(外设)。中心与外设的数据交互通过服务的不同特征进行,外设发送数据,通过请求消息代理接收数据,这种方式在外部调用的时候就会出现数据收发不同步的问题。
发明内容
为解决以上技术问题,本发明提供了一种实现蓝牙数据同步收发的方法及通信装置;
其中,一种实现蓝牙数据同步收发的方法,包括:
步骤S1、通信装置等待上层应用的调用;当连接函数接口被调用时,执行步骤S2;当数据交互接口被调用时,执行步骤S3;
步骤S2、通信装置与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征;返回步骤S1;
步骤S3、通信装置接收上层应用发送的操作数据;设置数据交互状态为等待状态;开启并执行辅助线程;
步骤S4、通信装置监控数据交互状态,当监控到数据交互状态切换成完成状态时,获取接收到的所有响应数据,并将获取到的响应数据返回给上层应用;返回步骤S1;
通信装置执行辅助线程,包括:
步骤R1、通信装置通过当前连接的蓝牙设备的写特征将操作数据发送给蓝牙设备;
步骤R2、通信装置通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
步骤R3、通信装置从响应数据中获取应接收数据长度,根据接收到全部的响应数据计算实际接收数据长度,判断实际接收数据长度是否小于应接收数据长度,是则保存响应数据;返回步骤R2;否则保存响应数据,并设置数据交互状态为完成状态。
一种实现蓝牙数据同步收发的通信装置,包括:
调用模块,用于监控上层应用的调用;
连接模块,用于当调用模块监控到连接函数接口被调用时,与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征,触发所述调用模块;
接收模块,用于当调用模块监控到数据交互接口被调用时,接收上层应用发送的操作数据;
设置模块,用于当接收模块接收到所述操作数据时,设置数据交互状态为等待状态;
执行模块,用于当接收模块接收到所述操作数据时,开启并执行辅助线程;
监控模块,用于当接收模块接收到所述上层应用发送的操作数据之后,监控数据交互状态;
获取模块,用于当监控模块监控到数据交互状态为完成状态时,获取接收到的所有响应数据;
发送模块,用于将获取模块获取到的所有响应数据返回给上层应用;触发调用模块;
执行模块,具体包括:
发送单元,用于通过当前连接的蓝牙设备的写特征将操作数据发送给蓝牙设备;
接收单元,用于通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
第一判断单元,用于从响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断实际接收数据长度是否小于应接收数据长度;
保存单元,用于当第一判断单元判定实际接收数据长度小于应接收数据长度时,保存响应数据;
保存设置单元,用于当第一判断单元判定实际接收数据长度不小于应接收数据长度时,保存响应数据,并设置数据交互状态为完成状态。
本发明的有益效果为:本发明通信装置通过创建收发数据的辅助线程并设置数据交互状态,使得上层应用将响应数据接收完成之后,再进行下一次数据交互,实现了数据的同步收发。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1至图2为本发明实施例1提供的一种实现蓝牙数据同步收发的方法的流程图;
图3至图4为本发明实施例2提供的一种实现蓝牙数据同步收发的方法的流程图;
图5为本发明实施例3提供的一种实现蓝牙数据同步收发的通信装置的方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例提供一种实现蓝牙数据同步收发的方法,参见图1,包括:
步骤101、通信装置等待上层应用调用,当初始化函数接口被调用时执行步骤102;当扫描函数接口被调用时执行步骤104;当连接函数接口被调用时执行步骤106;当数据交互函数接口被调用时执行步骤113;当断开连接函数接口被调用时执行步骤118;
步骤102、通信装置创建中心设备,设置中心设备的消息代理;
具体的,通信装置通过调用CBCentralManager对象的init接口创建中心设备,调用CBCentralManager对象的initWithDelegate:queue:接口设置中心设备的消息代理,并设置初始化函数的回调函数;设置扫描函数的回调函数;设置连接函数的回调函数;设置断开连接函数的回调函数。
步骤103、通信装置监听中心设备的蓝牙状态,并将监听到的蓝牙状态返回给上层应用,返回步骤101;
具体的,通信装置通过调用CBCentralManager对象的entralManagerDidUpdateState:接口获取中心设备对象的state值:
当state值为CBCentralManagerStatePoweredOn时,表示中心设备蓝牙开启;通信装置向上层应用返回的蓝牙状态为开启状态;
当state值为CBCentralManagerStatePoweredOff时表示中心设备蓝牙关闭;通信装置向上层应用返回的蓝牙状态为关闭状态;
当state值为CBCentralManagerStateUnknown时表示中心设备状态异常;通信装置向上层应用返回的蓝牙状态为异常状态;
当state值为CBCentralManagerStateUnsupported时表示当前中心设备不支持连接;通信装置向上层应用返回的蓝牙状态为不支持状态。
步骤104、通信装置获取预置的服务标识,根据服务标识扫描周围蓝牙设备;
具体的,通信装置调用CBCentralManager对象的[_managerscanForPeripheralsWithServices:@[[CBUUIDUUIDWithString:@"12340001-0001-00c3-0000-465453414645"]]options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@YES}]接口扫描周围蓝牙设备,该接口函数的第一参数NSArray*的值为服务标识;;当扫描到周围蓝牙设备时触发CBCentralManager对象的didDiscoverPeripheral:advertisementData:RSSI:接口获取已扫描到与服务标识相匹配的蓝牙广播数据;
需要说明的是,当该方法的第一参数NSArray*为空时则扫描到的周围蓝牙设备均会返回蓝牙广播数据;该方法的第一参数NSArray*的值为服务标识则只有与该服务标识相匹配的周围蓝牙设备会返回蓝牙广播数据;
优选的,步骤104之后还包括:通信装置获取预设的扫描时间或者接收上层应用发送的扫描时间。在扫描时间内,通信装置会持续扫描周边设备,直至扫描时间结束。
步骤105、通信装置接收与服务标识相匹配的蓝牙广播数据,从蓝牙广播数据中获取蓝牙设备标识和蓝牙设备信息,将蓝牙设备标识和蓝牙设备信息对应保存,并将蓝牙设备信息返回给上层应用,返回步骤101;
步骤106、通信装置接收上层应用发送的蓝牙设备信息;获取与蓝牙设备信息对应的蓝牙设备标识作为目标蓝牙设备标识,根据目标蓝牙设备标识连接对应的目标蓝牙设备;
具体的,通信装置通过调用CBCentralManager对象的connectPeripheral:peripheraloptions:nil接口与目标蓝牙设备建立连接;
步骤107、通信装置判断与目标蓝牙设备是否连接成功,是则执行步骤108,否则向上层应用返回连接失败通知,返回步骤101;
具体的,通信装置检测触发的函数接口类型,如触发的函数接口类型为第一预设函数接口,则与目标蓝牙设备连接成功,如触发的函数接口类型为第二预设函数接口,则与目标蓝牙设备连接失败;
具体地,在本实施例中,第一预设函数接口为centralManager:(CBCentralManager*)centraldidConnectPeripheral:(CBPeripheral*)peripheral;
第二预设函数接口为:centralManager:(CBCentralManager*)centraldidFailToConnectPeripheral:(CBPeripheral*)aPeripheral error:(NSError*)error。
步骤108、通信装置扫描目标蓝牙设备的服务;判断扫描服务是否成功,是则执行步骤109,否则向上层应用返回连接失败通知;
具体的,通信装置调用CBPeripheral对象的discoverServices:@[[CBUUIDUUIDWithString:@"12340001-0001-00c3-0000-465453414645"]]方法,该方法触发CBPeripheral方法的peripheral:(CBPeripheral)peripheraldidDiscoverServices:(NSError)error接口扫描目标蓝牙设备的服务;
当error值不为空时,通信装置判定没有扫描到目标蓝牙设备的服务;向上层应用返回连接失败通知;
当error值为空时,通信装置判定扫描到目标蓝牙设备的服务;执行步骤109;
需要说明的是,本实施例中,目标蓝牙设备的服务对应的标识,简称为服务标识;该目标蓝牙设备的服务下的每个特征对应一个标识,简称为特征标识;
步骤109、通信装置判断扫描到的蓝牙设备的服务中是否有与预置的服务标识相匹配的蓝牙设备的服务,是则将与预置的服务标识相匹配的蓝牙服务作为目标服务;执行步骤110,否则向上层应用返回连接失败通知,返回步骤101;
步骤110、通信装置扫描目标服务下的特征,判断是否成功扫描到目标服务下的特征,是则执行步骤111,否则向上层应用返回连接失败通知,返回步骤101;
具体的,通信装置调用CBPeripheral对象[PeripheraldiscoverCharacteristics:@[[CBUUIDUUIDWithString:@"12340001-0002-00c3-0000-465453414645"]]forService:@[[CBUUIDUUIDWithString:@"12340001-0001-00c3-0000-465453414645"]]];该方法触发CBPeriphera方法的peripheral:(CBPeripheral)peripheraldidDiscoverCharacteristicsForService:(CBService)serviceerror:(NSError*)error接口扫描目标服务的特征,判断是否成功扫描到目标服务下的特征;
当error值不为空时,通信装置判定没有扫描到目标服务的特征;向上层应用返回连接失败通知;
当error值为空时,通信装置判定扫描到目标服务的所有特征;执行步骤111;
步骤111、通信装置枚举扫描到的目标服务下的特征,判断是否可以查找到读特征和写特征,是则执行步骤112,否则向上层应用返回连接失败通知,返回步骤101;
具体的,通信装置枚举扫描到的目标服务下的特征,判断是否有与预设的读特征标识和写特征标识相匹配的特征,是则执行步骤112,否则向上层应用返回失败通知,返回步骤101;
步骤112、通信装置将扫描到的读特征与目标蓝牙设备标识对应保存,将扫描到的写特征与目标蓝牙设备标识对应保存;并将目标蓝牙设备标识返回给上层应用,返回步骤101;
具体的,当通信装置判定可以查找到读特征和写特征时触发连接函数的回调函数向上层应用返回目标蓝牙设备标识;
更为详细的,通信装置的连接函数接口被调用时创建第一全局变量和第二全局变量;
步骤112具体为:通信装置将扫描到的读特征与目标蓝牙设备标识对应保存,将扫描到的写特征与目标蓝牙设备标识对应保存;并使用读特征为第一全局变量赋值,使用写特征为第二全局变量赋值;
步骤113、通信装置接收上层应用发送的操作数据和蓝牙设备标识;
步骤114、通信装置判断是否可以查找到与蓝牙设备标识相匹配的读特征和写特征,是则执行步骤115,否则向上层应用返回数据交互失败通知,返回步骤101;
步骤115、通信装置设置数据交互状态的初始状态为等待状态;开启辅助线程,所述辅助线程通过查找到的写特征和读特征与蓝牙设备实现数据交互;
具体的,通信装置获取第一全局变量作为读特征,获取第二全局变量作为写特征;通信装置创建第三全局变量,并使用第一预设值为第三全局变量赋值;
更为详细的,第一预设值为-1;
具体的,通信装置调用通用模式:NSThread对象的detachNewThreadSelector:toTarget:withObject:接口开启辅助线程;
辅助线程的执行方法,参见图2,包括:
步骤201、通信装置通过写特征将操作数据发送给与蓝牙设备标识对应的蓝牙设备;判断操作数据是否发送成功,是则执行步骤202,否则执行步骤205;
具体的,通信装置调用CBPeripheral对象的writeValue:(NSData*)12345678forCharacteristic:(CBCharacteristic*)characteristictype:(CBCharacteristicWriteType)type接口;其中12345678是待发送的数据,characteristic是写特征,type是发送类型;将操作数据发送给与蓝牙设备标识对应的蓝牙设备,触发CBPeriphera方法的peripheral:(CBPeripheral)peripheraldidWriteValueForCharacteristic:(CBCharacteristic)characteristicerror:(NSError*)error接口判断操作数据是否发送成功,当error为空则成功,否则失败;
需要说明的是,Type发送类型可以为CBCharacteristicWriteWithResponse类型和CBCharacteristicWriteWithoutResponse类型;其中当type是CBCharacteristicWriteWithResponse会通过触发CBPeriphera方法的peripheral:(CBPeripheral)peripheraldidWriteValueForCharacteristic:(CBCharacteristic)characteristicerror:(NSError*)error接口,当type是CBCharacteristicWriteWithoutResponse时不会触发此方法。
步骤202、通信装置通过读特征读取蓝牙设备返回的响应数据,判断是否成功接收到蓝牙设备返回的响应数据,是则执行步骤203,否则执行步骤205;
具体的,通信装置调用readValueForCharacteristic:方法触发peripheral:(CBPeripheral)peripheraldidUpdateValueForCharacteristic:(CBCharacteristic)characteristicerror:(NSError*)error接口读取蓝牙设备返回的响应数据,判断是否成功接收到蓝牙设备返回的响应数据,当error为空则成功,否则失败;
步骤203、通信装置从响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断实际接收数据长度是否小于应接收的数据长度,是则返回步骤202;否则执行步骤204;
步骤204、通信装置设置数据交互状态为完成状态,并保存接收到的响应数据;
具体的,通信装置使用第二预设值为第三全局变量赋值,第二预设值具体为0;并创建第四全局变量;将接收到的所有响应数据拼接给第四全局变量赋值;
步骤205、通信装置设置数据交互状态为失败状态;
具体的,通信装置使用第三预设值为第三全局变量赋值,第三预设值具体为1;
步骤116、通信装置判断数据交互状态,当数据交互状态为等待状态时继续执行步骤116;当数据交互状态为完成状态时,执行步骤117,当数据交互状态为失败状态时,向上层应用返回数据交互失败通知,返回步骤101;
具体的,通信装置获取第三全局变量,判断第三全局变量,当第三全局变量为-1时,判定数据交互状态为等待状态,执行步骤116;当第三全局变量为0时,判定数据交互状态为完成状态,继续执行步骤117;当第三全局变量为1时,判定数据交互状态为失败状态,向上层应用返回数据交互失败通知。
步骤117、通信装置获取所有的响应数据,并将获取到响应数据返回给上层应用;
具体的,通信装置获取第四全局变量作为响应数据,并将响应数据返回给上层应用。
步骤118、通信装置接收上层应用发送的蓝牙设备标识,并断开与蓝牙设备标识对应的蓝牙设备的连接;
具体的,通信装置调用CBCentralManager对象的cancelPeripheralConnection:(CBPeripheral*)peripheral接口断开与蓝牙设备标识对应的蓝牙设备的连接;
步骤119、通信装置判断是否成功断开连接,是则向上层应用返回断开连接成功通知,返回步骤101,否则向上层应用返回断开连接失败通知,返回步骤101;
具体的,通信装置调用centralManager方法的(void)centralManager:(CBCentralManager)centraldidDisconnectPeripheral:(CBPeripheral)peripheralerror:(NSError*)error接口判断是否成功断开连接;当error为空则成功,否则失败;
实施例2
本实施例提供一种实现蓝牙数据同步收发的方法,参见图3,包括
步骤301、通信装置等待上层应用调用,当初始化函数接口被调用时执行步骤302;当扫描函数接口被调用时执行步骤304;当连接函数接口被调用时执行步骤306;当数据交互函数接口被调用时执行步骤312;当断开连接函数接口被调用时执行步骤317;
步骤302、通信装置创建中心设备,设置中心设备的消息代理;
具体的,通信装置通过调用CBCentralManager对象的init接口创建中心设备,调用CBCentralManager对象的initWithDelegate:queue:接口设置中心设备的消息代理,并设置初始化函数的回调函数;设置扫描函数的回调函数;设置连接函数的回调函数;设置断开连接函数的回调函数。
步骤303、通信装置监听中心设备的蓝牙状态,并将监听到的蓝牙状态返回给上层应用,返回步骤301;
具体的,通信装置通过调用CBCentralManager对象的entralManagerDidUpdateState:接口获取中心设备对象的state值:
当state值为CBCentralManagerStatePoweredOn时,表示中心设备蓝牙开启;通信装置向上层应用返回的蓝牙状态为开启状态;
当state值为CBCentralManagerStatePoweredOff时表示中心设备蓝牙关闭;通信装置向上层应用返回的蓝牙状态为关闭状态;
当state值为CBCentralManagerStateUnknown时表示中心设备状态异常;通信装置向上层应用返回的蓝牙状态为异常状态;
当state值为CBCentralManagerStateUnsupported时表示当前中心设备不支持连接;通信装置向上层应用返回的蓝牙状态为不支持状态。
步骤304、通信装置获取预置的服务标识,根据服务标识扫描周围蓝牙设备;
优选的,步骤304之后还包括:通信装置获取预设的扫描时间或者接收上层应用发送的扫描时间。在扫描时间内,通信装置会持续扫描周边设备,直至扫描时间结束。
步骤305、通信装置接收与服务标识相匹配的蓝牙广播数据,从蓝牙广播数据中获取蓝牙设备标识和蓝牙设备信息,将蓝牙设备标识和蓝牙设备信息对应保存,并将蓝牙设备信息返回给上层应用,返回步骤301;
步骤306、通信装置接收上层应用发送的蓝牙设备信息;获取与蓝牙设备信息对应的蓝牙设备标识作为目标蓝牙设备标识,根据目标蓝牙设备标识连接对应的目标蓝牙设备;
具体的,通信装置通过调用CBCentralManager对象的connectPeripheral:peripheral options:nil接口与目标蓝牙设备建立连接;
步骤307、通信装置判断与目标蓝牙设备是否连接成功,是则执行步骤308,否则向上层应用返回连接失败通知,返回步骤301;
具体的,通信装置检测触发的函数接口类型,如触发的函数接口类型为第一预设函数接口,则与目标蓝牙设备连接成功,如触发的函数接口类型为第二预设函数接口,则与目标蓝牙设备连接失败;
具体地,在本实施例中,第一预设函数接口为centralManager:(CBCentralManager*)centraldidConnectPeripheral:(CBPeripheral*)peripheral;
第二预设函数接口为:centralManager:(CBCentralManager*)centraldidFailToConnectPeripheral:(CBPeripheral*)aPeripheralerror:(NSError*)error。
步骤308、通信装置根据预置的服务标识扫描目标蓝牙设备的服务,判断是否成功扫描到与服务标识相匹配的蓝牙设备的服务,是则将与预置的服务标识相匹配的蓝牙服务作为目标服务,执行步骤309,否则向上层应用返回连接失败通知,返回步骤301;
需要说明的是,本实施例中,目标蓝牙设备的服务对应的标识,简称为服务标识;该目标蓝牙设备的服务下的每个特征对应一个标识,简称为特征标识;
具体的,通信装置获取预设的服务标识;根据服务标识扫描目标蓝牙设备的服务,判断扫描服务是否成功,是则执行步骤309,否则向上层应用返回连接失败通知;
步骤309、通信装置根据预置的读特征标识和写特征标识扫描目标服务下的特征,判断在目标服务下是否成功扫描到读特征和写特征,是则将与预置的服务标识相匹配的蓝牙服务作为目标服务;执行步骤310,否则向上层应用返回连接失败通知,返回步骤301;
具体的,通信装置根据预设的蓝牙服务的读特征标识和写特征标识或者接收到上层应用发送的读特征标识和写特征标识判断是否成功扫描到蓝牙设备服务下的读特征和写特征,是则执行步骤310,否则向上层应用返回连接失败响应;
通信装置调用CBPeripheral对象的discoverCharacteristics:(NSArray*)characteristicUUIDsforService:(CBService*)service方法),该方法触发CBPeriphera方法的peripheral:(CBPeripheral)peripheraldidDiscoverCharacteristicsForService:(CBService)service error:(NSError*)error扫描目标服务的特征;
当error值不为空时,通信装置判定没有扫描到目标服务的特征;向上层应用返回连接失败通知;
当error值为空时,通信装置判定扫描到目标服务的所有特征;执行步骤310;
步骤310、通信装置将查找到的读特征与目标蓝牙设备标识对应保存,并设置读特征为通知属性;
具体的,通信装置调用CBPeripheral对象的setNotifyValue:(BOOL)enabledforCharacteristic:(CBCharacteristic*)characteristic;接口设置读特征为通知属性。优选的,步骤310之前还包括:通信装置读取查找到的读特征的属性,判断读特征的属性是否为通知属性,是则执行步骤311,否则执行步骤310;
具体的,通信装置调用CBCHaracteristic方法的properties接口来读取特征的属性,判断读特征的属性是否为通知属性,是则执行步骤311,否则执行步骤310
步骤311、通信装置将查找到的写特征与目标蓝牙设备标识对应保存,并将目标蓝牙设备标识返回给上层应用,返回步骤301;
步骤312、通信装置接收上层应用发送的操作数据和蓝牙设备标识;
步骤313、通信装置判断是否可以查找到与蓝牙设备标识相匹配的读特征和写特征,是则执行步骤314,否则向上层应用返回数据交互失败通知,返回步骤301;
步骤314、通信装置设置数据交互状态的初始状态为等待状态;开启辅助线程,所述辅助线程通过查找到的写特征和读特征与蓝牙设备实现数据交互;
具体的,通信装置获取第一全局变量作为读特征,获取第二全局变量作为写特征;通信装置创建第三全局变量,并使用第一预设值为第三全局变量赋值;
更为详细的,第一预设值为-1;
具体的,通信装置调用通用模式:NSThread对象的detachNewThreadSelector:toTarget:withObject:)函数接口开启辅助线程接口开启辅助线程;
辅助线程的执行方法,参见图4,包括:
步骤401、通信装置通过写特征将操作数据发送给与蓝牙设备标识对应的蓝牙设备;判断操作数据是否发送成功,是则执行步骤402,否则执行步骤405;
步骤402、通信装置等待蓝牙设备返回的响应数据;判断是否成功接收到蓝牙设备返回的响应数据,是则执行步骤403,否则继续执行步骤402;
本实施例中,通信装置连接函数接口被调用的过程中已经设置读特征的属性为通知属性,当通信装置接收到蓝牙设备返回的响应数据时,会自动触发peripheral:(CBPeripheral)peripheraldidUpdateValueForCharacteristic:(CBCharacteristic)characteristicerror:(NSError*)error接口读取蓝牙设备返回的响应数据,判断是否成功接收到蓝牙设备返回的响应数据,当error为空则成功,否则失败;
步骤403、通信装置从响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断实际接收数据长度是否小于应接收的数据长度,是则返回步骤402;是则执行步骤404;
步骤404、通信装置设置数据交互状态为完成状态,并保存接收到的响应数据;
具体的,通信装置使用第二预设值为第三全局变量赋值,第二预设值具体为0;并创建第四全局变量;将接收到的所有响应数据拼接给第四全局变量赋值;
步骤405、通信装置设置数据交互状态为失败状态。
具体的,通信装置使用第三预设值为第三全局变量赋值,第三预设值具体为1;
步骤315、通信装置判断数据交互状态,当数据交互状态为等待状态时,继续执行步骤315,当数据交互状态为完成状态时,执行步骤316,当数据交互状态为失败状态时,向上层应用返回数据交互失败通知,返回步骤301;
具体的,通信装置获取第三全局变量,判断第三全局变量,当第三全局变量为-1时,判定数据交互状态为等待状态,继续执行步骤315;当第三全局变量为0时,判定数据交互状态为完成状态,继续执行步骤316;当第三全局变量为1时,判定数据交互状态为失败状态,向上层应用返回数据交互失败通知。
步骤316、通信装置获取所有的响应数据,并将获取到的响应数据返回给上层应用;
具体的,通信装置获取第四全局变量作为响应数据,并将响应数据返回给上层应用。
步骤317、通信装置接收上层应用发送的蓝牙设备标识,并断开与蓝牙设备标识对应的蓝牙设备的连接;
具体的,通信装置调用CBCentralManager对象的cancelPeripheralConnection:(CBPeripheral*)peripheral接口断开与蓝牙设备标识对应的蓝牙设备的连接;
步骤318、通信装置判断是否成功断开连接,是则向上层应用返回断开连接成功通知,返回步骤301,否则向上层应用返回断开连接失败通知,返回步骤301;
具体的,通信装置调用centralManager方法的(void)centralManager:(CBCentralManager)centraldidDisconnectPeripheral:(CBPeripheral)peripheralerror:(NSError*)error;接收判断是否成功断开连接;当error为空则成功,否则失败;
更进一步的,通信装置通过断开连接函数的回调函数向上层应用返回断开连接成功\失败的通知。
为了更好的说明该通信装置的工作方法,提供一种使用该通信装置与蓝牙设备进行通信的方法,包括:
步骤501、应用程序调用初始化函数接口进行初始化,并接收初始化函数的回调函数返回的蓝牙状态;
步骤502、应用程序判断蓝牙状态是否为开启状态,是则执行步骤503,否则提示用户开启蓝牙,结束;
步骤503、应用程序调用扫描函数接收扫描周围蓝牙设备,并接收扫描函数的回调函数返回扫描的蓝牙设备信息;
步骤504、应用程序显示扫描到的蓝牙设备信息,接收用户选择,并将用户选中的蓝牙设备信息作为参数调用连接函数接口;
步骤505、应用程序判断是否接收到连接函数的回调函数返回的蓝牙设备标识,是则执行步骤506,否则结束;
步骤506、应用程序组织操作数据,并获取通信密钥,使用通信密钥对操作数据进行加密得到密文操作数据,并将蓝牙设备标识和密文操作数据作为参数调用数据交互函数接口;并接收通信装置返回的响应数据;
步骤507、应用程序判断是否还有未发送的操作数据,是则返回步骤506,否则执行步骤508;
步骤508、应用程序将蓝牙设备标识作为参数调用断开连接函数接口,接收断开连接函数的回调函数返回的断开结果。
实施例3
本实施例提供一种实现蓝牙数据同步收发的通信装置,如图5所示,包括:
调用模块11,用于监控上层应用的调用;
连接模块12,用于当调用模块11监控到连接函数接口被调用时,与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征,触发调用模块11;
具体的,连接模块12,具体用于:扫描周围蓝牙设备,当扫描到蓝牙设备时,与扫描到的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;触发调用模块11。
更为详细的,连接模块12,具体用于:当调用模块11监控到连接函数接口被调用时,扫描周围蓝牙设备,当扫描到蓝牙设备时,获取扫描到的蓝牙设备的蓝牙设备标识,并根据蓝牙设备标识与对应的蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征;触发调用模块11。
具体的,连接模块12,具体用于:当调用模块11监控到连接函数接口被调用时,获取预置的服务标识,并根据服务标识扫描周围蓝牙设备;当扫描到蓝牙设备时,与扫描到的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;触发调用模块11。
接收模块13,用于当调用模块11监控到数据交互接口被调用时,接收上层应用发送的操作数据;
设置模块14,用于当所述接收模块13接收到所述操作数据时时,设置数据交互状态为等待状态;
执行模块15,用于当所述接收模块13接收到所述操作数据时时,开启并执行辅助线程;
监控模块16,用于当接收模块13接收到上层应用发送的操作数据之后,监控数据交互状态;
获取模块17,用于当监控模块16监控到数据交互状态为完成状态时,获取接收到的响应数据;
发送模块18,用于将获取模块17获取到的所有响应数据返回给上层应用;触发调用模块11;
执行模块15,具体包括:
发送单元,用于通过当前连接的蓝牙设备的写特征将操作数据发送给蓝牙设备;
接收单元,用于通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
可选的,接收单元,具体用于通过当前连接的蓝牙设备的读特征读取蓝牙设备返回的响应数据。
可选的,连接模块12,具体用于当调用模块11监控到连接函数接口被调用时,与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征,并将读特征设置为通知属性,触发调用模块11;
相应的,接收单元,具体用于等待接收到蓝牙设备返回响应数据的通知,当接收到通知时,通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据。
第一判断单元,用于从响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断实际接收数据长度是否小于应接收数据长度;
保存单元,用于当第一判断单元判定实际接收数据长度小于应接收数据长度时,保存响应数据;
保存设置单元,用于当第一判断单元判定实际接收数据长度不小于应接收数据长度时,保存响应数据,并设置数据交互状态为完成状态。
优选的,该通信装置还包括:
扫描模块,用于当调用模块11监控到扫描函数接口被调用时,扫描周围蓝牙设备,获取扫描到的蓝牙设备的蓝牙设备标识和蓝牙设备信息,将每个蓝牙设备的蓝牙设备标识和蓝牙设备信息对应保存;
具体的,扫描模块,具体用于:当调用模块11监控到扫描函数接口被调用时,获取预置的服务标识,并根据服务标识扫描周围蓝牙设备,获取扫描到的蓝牙设备的蓝牙设备标识和蓝牙设备信息,将每个蓝牙设备的蓝牙设备标识和蓝牙设备信息对应保存。
发送模块18,还用于将扫描模块扫描到的所有蓝牙设备信息发送给上层应用,触发调用模块11;
优选的,该通信装置还包括:保存模块,用于将连接模块12获取到的读特征和写特征与当前连接的蓝牙设备的蓝牙设备标识对应保存。
优选的,该通信装置还包括:判断模块;
接收模块,具体用于当调用模块监控到数据交互接口被调用时,接收上层应用发送的操作数据和蓝牙设备标识;
判断模块,用于判断是否可以查找到与上层应用发送的蓝牙设备标识相匹配的读特征和写特征;
设置模块,具体用于当判断模块判定查找到与上层应用发送的蓝牙设备标识相匹配的读特征和写特征时,设置数据交互状态为等待状态;
执行模块,具体用于当判断模块判定查找到与上层应用发送的蓝牙设备标识相匹配的读特征和写特征时,开启并执行辅助线程;
发送模块,还用于当判断模块判定没有查找到与上层应用发送的蓝牙设备标识相匹配的读特征和写特征时,向上层应用返回数据交互失败通知。
优选的,执行模块还包括:
第二判断单元,用于当发送单元将操作数据发送给蓝牙设备之后,判断操作数据是否发送成功;
接收单元,具体用于当第二判断单元判定操作数据发送成功之后,通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
设置单元,还用于当第二判断单元判定操作数据发送失败时,设置数据交互状态为失败;
第三判断单元,用于接收单元接收蓝牙设备返回的响应数据之后,判断是否成功接收蓝牙设备返回的响应数据;
第一判断单元,具体用于当第三判断单元判定成功接收蓝牙设备返回的响应数据时,从接收单元接收到的响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断实际接收数据长度是否小于应接收数据长度;
设置单元,还用于当第三判断单元判定接收蓝牙设备返回的响应数据失败时,设置数据交互状态为失败;
发送模块18,还用于当监控模块16监控到数据交互状态为失败时,向上层应用返回数据交互失败通知。
优选的,该通信装置还包括:创建模块和监听模块;
创建模块,用于当调用模块检测到初始化函数接口被调用时创建中心设备,并设置中心设备的消息代理;
具体的,创建模块,具体用于创建中心设备,并设置连接函数的回调函数。
监听模块,用于监听中心设备的蓝牙状态;
发送模块18,还用于将监听模块监听到的蓝牙状态返回给上层应用,触发等待调用模块11。
可选的,连接模块12具体包括:
连接单元,用于与蓝牙设备建立连接;
第一扫描单元,用于扫描当前连接的蓝牙设备的服务;
第四判断单元,用于判断第一扫描单元扫描到的蓝牙设备的服务中是否有与预置的服务标识相匹配的服务;
第二扫描单元,用于当第四判断单元判定第一扫描单元扫描到的蓝牙设备的服务中有与预置的服务标识相匹配的服务时,将与预置的服务标识相匹配的蓝牙服务作为目标服务,扫描目标服务下的特征;
第五判断单元,用于判断是否成功扫描到读特征和写特征;
触发单元,用于当第五判断单元判定成功扫描到读特征和写特征时,触发调用模块11;
发送模块18,还用于当第四判断单元判定第一扫描单元扫描到的蓝牙设备的服务中没有与预置的服务标识相匹配的服务时,向上层应用返回连接失败通知;还用于当第五判断单元判定没有成功扫描到读特征和写特征时,向上层应用返回连接失败通知。
可选的,连接模块12具体包括:
连接单元,用于与蓝牙设备建立连接;
第三扫描单元,用于根据预置的服务标识扫描当前连接的蓝牙设备的服务;
第六判断单元,用于判断是否成功扫描到与服务标识相匹配的蓝牙设备的服务;
第四扫描单元,用于当第六判断单元判定成功扫描到与服务标识相匹配的服务时,将与预置的服务标识相匹配的蓝牙服务作为目标服务,根据预置的读特征标识和写特征标识扫描目标服务下的特征;
第七判断单元,用于判断是否成功扫描到读特征和写特征;
触发模块,用于当第七判断单元判定成功扫描到读特征和写特征时,触发调用模块11;
发送模块18,还用于当第六判断单元判定没有扫描到与服务标识相匹配的蓝牙设备的服务时,向上层应用返回连接失败通知;还用于当第七判断单元判定没有成功扫描到读特征和写特征时,向上层应用返回连接失败通知。
优选的,该通信装置还包括:断开连接模块12和第三判断模块;
接收模块13,还用于当调用模块11检测到断开连接函数接口被调用时,接收上层应用发送的蓝牙设备标识;
断开连接模块12,用于断开与接收模块13接收到的蓝牙设备标识对应的蓝牙设备的连接;
第三判断模块,用于判断是否成功断开连接;
发送模块18,还用于当第三判断模块判定成功断开连接时向上层应用返回断开连接成功通知;当第三判断模块判定断开连接失败时向上层应用返回断开连接失败通知。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (31)
1.一种实现蓝牙数据同步收发的方法,其特征在于,包括:
步骤S1、通信装置等待上层应用的调用;当连接函数接口被调用时,执行步骤S2;当数据交互接口被调用时,执行步骤S3;
步骤S2、所述通信装置与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征;返回步骤S1;
步骤S3、所述通信装置接收上层应用发送的操作数据;设置数据交互状态为等待状态;开启并执行辅助线程;
步骤S4、所述通信装置监控数据交互状态,当监控到数据交互状态切换成完成状态时,获取接收到的所有响应数据,并将获取到的响应数据返回给上层应用;返回步骤S1;
所述通信装置执行辅助线程,包括:
步骤R1、所述通信装置通过当前连接的蓝牙设备的写特征将操作数据发送给蓝牙设备;
步骤R2、所述通信装置通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
步骤R3、所述通信装置从响应数据中获取应接收数据长度,根据接收到全部的响应数据计算实际接收数据长度,判断所述实际接收数据长度是否小于所述应接收数据长度,是则保存响应数据;返回步骤R2;否则保存响应数据,并设置数据交互状态为完成状态。
2.如权利要求1所述的方法,其特征在于,所述步骤S2具体包括:所述通信装置扫描周围蓝牙设备,当扫描到蓝牙设备时,与扫描到的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;返回步骤S1。
3.如权利要求2所述的方法,其特征在于,所述当扫描到蓝牙设备时,与扫描到的蓝牙设备建立连接,具体为:当扫描到蓝牙设备时,获取扫描到的蓝牙设备的蓝牙设备标识,并根据所述蓝牙设备标识与对应的蓝牙设备建立连接。
4.如权利要求1所述的方法,其特征在于,所述步骤S1中还包括:当扫描函数接口被调用时执行步骤A;
步骤A:所述通信装置扫描周围蓝牙设备,获取扫描到的蓝牙设备的蓝牙设备标识和蓝牙设备信息,将每个蓝牙设备的蓝牙设备标识和蓝牙设备信息对应保存;并将获取到的所有蓝牙设备信息返回给上层应用;返回步骤S1;
所述步骤S2具体为:所述通信装置接收所述上层应用发送的蓝牙设备信息,根据接收到的所述蓝牙设备信息查找对应保存的蓝牙设备标识,根据所述蓝牙设备标识与对应的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;返回步骤S1。
5.如权利要求2或4所述的方法,其特征在于,所述通信装置扫描周围蓝牙设备具体为:所述通信装置获取预置的服务标识,并根据所述服务标识扫描周围蓝牙设备。
6.如权利要求3或4所述的方法,其特征在于,所述步骤S2中还包括:将读特征和写特征与当前连接的蓝牙设备的蓝牙设备标识对应保存。
7.如权利要求6所述的方法,其特征在于,所述步骤S3中还包括:所述通信装置接收上层应用发送的操作数据和蓝牙设备标识;判断是否可以查找到与上层应用发送的蓝牙设备标识相匹配的读特征和写特征,是则执行所述设置数据交互状态为等待状态;开启并执行辅助线程;否则向上层应用返回数据交互失败通知。
8.如权利要求1所述的方法,其特征在于,
所述步骤R1之后,所述步骤R2之前还包括:所述通信装置判断所述操作数据是否发送成功,是则执行步骤R2,否则设置数据交互状态为失败状态;
所述步骤R2之后,所述步骤R3之前还包括:所述通信装置判断是否成功接收到蓝牙设备返回的响应数据,是则执行步骤R3,否则设置数据交互状态为失败状态;
所述步骤S4中还包括:所述通信装置监控到数据交互状态为失败状态时,向上层应用返回数据交互失败通知,结束。
9.如权利要求1所述的方法,其特征在于,所述步骤R2具体为:所述通信装置通过当前连接的蓝牙设备的读特征读取蓝牙设备返回的响应数据。
10.如权利要求1所述的方法,其特征在于,所述步骤S2中还包括:所述通信装置设置所述读特征为通知属性;
所述步骤R2具体为:所述通信装置等待接收到蓝牙设备返回响应数据的通知,当接收到所述通知时,通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据。
11.如权利要求1所述的方法,其特征在于,所述步骤S1中还包括:当初始化函数接口被调用时执行步骤B1;
步骤B1、所述通信装置创建中心设备,并设置中心设备的消息代理;
步骤B2、所述通信装置监听中心设备的蓝牙状态,并将监听到的蓝牙状态返回给上层应用,返回步骤S1。
12.如权利要求11所述的方法,其特征在于,所述步骤B1具体为:所述通信装置创建中心设备,并设置连接函数的回调函数。
13.如权利要求1所述的方法,其特征在于,所述获取当前连接的蓝牙设备的读特征和写特征,具体包括:
步骤C1、所述通信装置扫描所述当前连接的蓝牙设备的服务,判断扫描到的蓝牙设备的服务中是否有与预置的服务标识相匹配的服务,是则将与预置的服务标识相匹配的蓝牙服务作为目标服务,执行步骤C2,否则向上层应用返回连接失败通知;
步骤C2、所述通信装置扫描所述目标服务下的特征,判断是否成功扫描到读特征和写特征,是则返回步骤S1;否则向上层应用返回连接失败通知。
14.如权利要求1所述的方法,其特征在于,所述获取当前连接的蓝牙设备的读特征和写特征,具体包括:
步骤D1、所述通信装置根据预置的服务标识扫描当前连接的蓝牙设备的服务,判断是否成功扫描到与所述服务标识相匹配的蓝牙设备的服务,是则将与所述服务标识相匹配的蓝牙设备的服务作为目标服务;执行步骤D2,否则向上层应用返回连接失败通知;
步骤D2、所述通信装置根据预置的读特征标识和写特征标识扫描所述目标服务下的特征,判断是否成功扫描到读特征和写特征,是则返回步骤S1;否则向上层应用返回连接失败通知。
15.如权利要求1所述的方法,其特征在于,所述步骤S1中还包括:当断开连接函数接口被调用时,执行步骤E1:
步骤E1、所述通信装置接收上层应用发送的蓝牙设备标识,并断开与所述蓝牙设备标识对应的蓝牙设备的连接:
步骤E2、所述通信装置判断是否成功断开连接,是则向上层应用返回断开连接成功通知,否则向上层应用返回断开连接失败通知。
16.一种实现蓝牙数据同步收发的通信装置,其特征在于,包括:
调用模块,用于监控上层应用的调用;
连接模块,用于当所述调用模块监控到连接函数接口被调用时,与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征,触发所述调用模块;
接收模块,用于当所述调用模块监控到数据交互接口被调用时,接收上层应用发送的操作数据;
设置模块,用于当所述接收模块接收到所述操作数据时,设置数据交互状态为等待状态;
执行模块,用于当所述接收模块接收到所述操作数据时,开启并执行辅助线程;
监控模块,用于当接收模块接收到所述上层应用发送的操作数据之后,监控数据交互状态;
获取模块,用于当所述监控模块监控到数据交互状态为完成状态时,获取接收到的所有响应数据;
发送模块,用于将所述获取模块获取到的所有响应数据返回给上层应用;触发调用模块;
所述执行模块,具体包括:
发送单元,用于通过当前连接的蓝牙设备的写特征将操作数据发送给蓝牙设备;
接收单元,用于通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
第一判断单元,用于从响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断所述实际接收数据长度是否小于所述应接收数据长度;
保存单元,用于当所述第一判断单元判定所述实际接收数据长度小于所述应接收数据长度时,保存响应数据;
保存设置单元,用于当所述第一判断单元判定所述实际接收数据长度不小于所述应接收数据长度时,保存响应数据,并设置数据交互状态为完成状态。
17.如权利要求16所述的通信装置,其特征在于,所述连接模块,具体用于:扫描周围蓝牙设备,当扫描到蓝牙设备时,与扫描到的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;触发所述调用模块。
18.如权利要求17所述的通信装置,其特征在于,所述连接模块,具体用于:当所述调用模块监控到连接函数接口被调用时,扫描周围蓝牙设备,当扫描到蓝牙设备时,获取扫描到的蓝牙设备的蓝牙设备标识,并根据所述蓝牙设备标识与对应的蓝牙设备建立连接获取当前连接的蓝牙设备的读特征和写特征;触发所述调用模块。
19.如权利要求17所述的通信装置,其特征在于,所述连接模块,具体用于:当所述调用模块监控到连接函数接口被调用时,获取预置的服务标识,并根据所述服务标识扫描周围蓝牙设备;当扫描到蓝牙设备时,与扫描到的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;触发所述调用模块。
20.如权利要求16所述的通信装置,其特征在于,还包括:
扫描模块,用于当所述调用模块监控到扫描函数接口被调用时,扫描周围蓝牙设备,获取扫描到的蓝牙设备的蓝牙设备标识和蓝牙设备信息,将每个蓝牙设备的蓝牙设备标识和蓝牙设备信息对应保存;
所述发送模块,还用于将扫描模块扫描到的所有蓝牙设备信息发送给上层应用,触发所述调用模块;
所述连接模块,具体用于当所述调用模块监控到连接函数接口被调用时,接收所述上层应用发送的蓝牙设备信息,根据接收到的所述蓝牙设备信息查找对应保存的蓝牙设备标识,根据所述蓝牙设备标识与对应的蓝牙设备建立连接;获取当前连接的蓝牙设备的读特征和写特征;触发所述调用模块。
21.如权利要求20所述的通信装置,其特征在于,所述扫描模块,具体用于:当所述调用模块监控到扫描函数接口被调用时,获取预置的服务标识,并根据所述服务标识扫描周围蓝牙设备,获取扫描到的蓝牙设备的蓝牙设备标识和蓝牙设备信息,将每个蓝牙设备的蓝牙设备标识和蓝牙设备信息对应保存。
22.如权利要求18或20所述的通信装置,其特征在于,还包括:保存模块,用于将所述连接模块获取到的所述读特征和写特征与当前连接的蓝牙设备的蓝牙设备标识对应保存。
23.如权利要求22所述的通信装置,其特征在于,还包括:判断模块;
所述接收模块,具体用于当所述调用模块监控到数据交互接口被调用时,接收上层应用发送的操作数据和蓝牙设备标识;
所述判断模块,用于判断是否可以查找到与上层应用发送的蓝牙设备标识相匹配的读特征和写特征;
设置模块,具体用于当所述判断模块判定查找到与所述上层应用发送的蓝牙设备标识相匹配的读特征和写特征时,设置数据交互状态为等待状态;
执行模块,具体用于当所述判断模块判定查找到与所述上层应用发送的蓝牙设备标识相匹配的读特征和写特征时,开启并执行辅助线程;
所述发送模块,还用于当所述判断模块判定没有查找到与所述上层应用发送的蓝牙设备标识相匹配的读特征和写特征时,向上层应用返回数据交互失败通知。
24.如权利要求16所述的通信装置,其特征在于,所述执行模块还包括:
第二判断单元,用于当所述发送单元将操作数据发送给蓝牙设备之后,判断所述操作数据是否发送成功;
所述接收单元,具体用于当所述第二判断单元判定操作数据发送成功之后,通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据;
所述设置单元,还用于当所述第二判断单元判定操作数据发送失败时,设置数据交互状态为失败;
第三判断单元,用于所述接收单元接收蓝牙设备返回的响应数据之后,判断是否成功接收蓝牙设备返回的响应数据;
所述第一判断单元,具体用于当所述第三判断单元判定成功接收蓝牙设备返回的响应数据时,从所述接收单元接收到的所述响应数据中获取应接收数据长度,根据接收到的响应数据计算实际接收数据长度,判断所述实际接收数据长度是否小于所述应接收数据长度;
所述设置单元,还用于当所述第三判断单元判定接收蓝牙设备返回的响应数据失败时,设置数据交互状态为失败;
所述发送模块,还用于当所述监控模块监控到所述数据交互状态为失败时,向所述上层应用返回数据交互失败通知。
25.如权利要求16所述的通信装置,其特征在于,所述接收单元,具体用于通过当前连接的蓝牙设备的读特征读取蓝牙设备返回的响应数据。
26.如权利要求16所述的通信装置,其特征在于,所述连接模块,具体用于当所述调用模块监控到连接函数接口被调用时,与蓝牙设备建立连接,获取当前连接的蓝牙设备的读特征和写特征,并将所述读特征设置为通知属性,触发所述调用模块;
所述接收单元,具体用于等待接收到蓝牙设备返回响应数据的通知,当接收到所述通知时,通过当前连接的蓝牙设备的读特征接收蓝牙设备返回的响应数据。
27.如权利要求16所述的通信装置,其特征在于,还包括:创建模块和监听模块;
所述创建模块,用于当所述调用模块检测到初始化函数接口被调用时创建中心设备,并设置中心设备的消息代理;
所述监听模块,用于监听中心设备的蓝牙状态;
所述发送模块,还用于将所述监听模块监听到的蓝牙状态返回给上层应用,触发等待调用模块。
28.如权利要求27所述的通信装置,其特征在于,所述创建模块,具体用于创建中心设备,并设置连接函数的回调函数。
29.如权利要求16所述的通信装置,其特征在于,所述连接模块具体包括:
连接单元,用于与蓝牙设备建立连接;
第一扫描单元,用于扫描所述当前连接的蓝牙设备的服务;
第四判断单元,用于判断所述第一扫描单元扫描到的蓝牙设备的服务中是否有与预置的服务标识相匹配的服务;
第二扫描单元,用于当所述第四判断单元判定所述第一扫描单元扫描到的蓝牙设备的服务中有与预置的服务标识相匹配的服务时,将与预置的服务标识相匹配的蓝牙服务作为目标服务,扫描目标服务下的特征;
第五判断单元,用于判断是否成功扫描到读特征和写特征;
触发单元,用于当所述第五判断单元判定成功扫描到读特征和写特征时,触发所述调用模块;
所述发送模块,还用于当所述第四判断单元判定所述第一扫描单元扫描到的蓝牙设备的服务中没有与预置的服务标识相匹配的服务时,向上层应用返回连接失败通知;还用于当所述第五判断单元判定没有成功扫描到读特征和写特征时,向上层应用返回连接失败通知。
30.如权利要求16所述的通信装置,其特征在于,所述连接模块具体包括:
连接单元,用于与蓝牙设备建立连接;
第三扫描单元,用于根据预置的服务标识扫描当前连接的蓝牙设备的服务;
第六判断单元,用于判断是否成功扫描到与所述服务标识相匹配的蓝牙设备的服务;
第四扫描单元,用于当所述第六判断单元判定成功扫描到与所述服务标识相匹配的服务时,将与预置的服务标识相匹配的蓝牙服务作为目标服务,根据预置的读特征标识和写特征标识扫描目标服务下的特征;
第七判断单元,用于判断是否成功扫描到读特征和写特征;
触发模块,用于当所述第七判断单元判定成功扫描到读特征和写特征时,触发所述调用模块;
所述发送模块,还用于当所述第六判断单元判定没有扫描到与所述服务标识相匹配的蓝牙设备的服务时,向上层应用返回连接失败通知;还用于当所述第七判断单元判定没有成功扫描到读特征和写特征时,向上层应用返回连接失败通知。
31.如权利要求16所述的通信装置,其特征在于,还包括:断开连接模块和第三判断模块;
所述接收模块,还用于当所述调用模块检测到断开连接函数接口被调用时,接收上层应用发送的蓝牙设备标识;
所述断开连接模块,用于断开与所述接收模块接收到的所述蓝牙设备标识对应的蓝牙设备的连接;
第三判断模块,用于判断是否成功断开连接;
所述发送模块,还用于当所述第三判断模块判定成功断开连接时向上层应用返回断开连接成功通知;当所述第三判断模块判定断开连接失败时向上层应用返回断开连接失败通知。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810020572.4A CN107994928B (zh) | 2018-01-10 | 2018-01-10 | 一种实现蓝牙数据同步收发的方法及通信装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810020572.4A CN107994928B (zh) | 2018-01-10 | 2018-01-10 | 一种实现蓝牙数据同步收发的方法及通信装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107994928A CN107994928A (zh) | 2018-05-04 |
CN107994928B true CN107994928B (zh) | 2021-04-27 |
Family
ID=62040751
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810020572.4A Active CN107994928B (zh) | 2018-01-10 | 2018-01-10 | 一种实现蓝牙数据同步收发的方法及通信装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107994928B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115065691B (zh) * | 2022-08-18 | 2022-11-01 | 飞天诚信科技股份有限公司 | 一种基于安卓平台的通讯实现方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102075321A (zh) * | 2010-11-24 | 2011-05-25 | 东南大学 | 移动通信端到端语音加密蓝牙手持设备及语音加密方法 |
CN103906048A (zh) * | 2012-12-25 | 2014-07-02 | 广东乐心医疗电子股份有限公司 | 通过蓝牙技术安全地传送数据的方法与装置 |
CN106686535A (zh) * | 2017-01-23 | 2017-05-17 | 飞天诚信科技股份有限公司 | 一种在iOS系统上实现低功耗蓝牙通信的方法及装置 |
CN106851540A (zh) * | 2017-02-08 | 2017-06-13 | 飞天诚信科技股份有限公司 | 一种蓝牙配对的实现方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170208639A1 (en) * | 2016-01-15 | 2017-07-20 | Lg Electronics Inc. | Method and apparatus for controlling a device using bluetooth technology |
-
2018
- 2018-01-10 CN CN201810020572.4A patent/CN107994928B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102075321A (zh) * | 2010-11-24 | 2011-05-25 | 东南大学 | 移动通信端到端语音加密蓝牙手持设备及语音加密方法 |
CN103906048A (zh) * | 2012-12-25 | 2014-07-02 | 广东乐心医疗电子股份有限公司 | 通过蓝牙技术安全地传送数据的方法与装置 |
CN106686535A (zh) * | 2017-01-23 | 2017-05-17 | 飞天诚信科技股份有限公司 | 一种在iOS系统上实现低功耗蓝牙通信的方法及装置 |
CN106851540A (zh) * | 2017-02-08 | 2017-06-13 | 飞天诚信科技股份有限公司 | 一种蓝牙配对的实现方法及装置 |
Non-Patent Citations (1)
Title |
---|
蓝牙低功耗技术的研究与实现;镇咸舜;《中国优秀硕士学位论文全文数据库信息科技辑》;20131215;第2013卷(第S2期);第3章 BLE协议栈各层的研究分析 * |
Also Published As
Publication number | Publication date |
---|---|
CN107994928A (zh) | 2018-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101820392B1 (ko) | 데이터 접속을 구축하기 위한 방법, 장치 및 시스템 | |
CN109792287B (zh) | 一种传输响应消息的方法和装置 | |
US20100027531A1 (en) | Communication control apparatus, system, method and program | |
CN101977382B (zh) | 音视频集成控制电路及其接入接入点的方法 | |
CN109005532B (zh) | 一种蓝牙连接方法、蓝牙主设备以及蓝牙从设备 | |
CN110192428A (zh) | 服务请求处理 | |
CN107994928B (zh) | 一种实现蓝牙数据同步收发的方法及通信装置 | |
CN102006359A (zh) | 一种手机通讯模式的优先级管理系统及方法 | |
CN108184225B (zh) | 一种蓝牙连接过程中实时取消蓝牙连接的方法及智能终端 | |
CN114926163A (zh) | 资源跨链转移方法及装置 | |
CN108235083B (zh) | 电视日志信息获取方法及装置 | |
CN106210362B (zh) | 通话方法及装置 | |
CN109302325A (zh) | 串口服务器、设备管理方法及可读存储介质 | |
CN111436162A (zh) | 一种处理方法及设备 | |
US9002409B2 (en) | Method of processing radio frequency signal in mobile terminal, and mobile communication system and mobile terminal using the same | |
CN108541078B (zh) | 终端绑定方法、系统、终端和服务器 | |
CN110995780A (zh) | Api调用方法、装置、存储介质及电子设备 | |
CN114025400B (zh) | 会话状态保持方法及会话状态保持装置 | |
CN115665713A (zh) | 多设备的通信方法、装置、设备及存储介质 | |
CN102547606A (zh) | 一种访问远程终端的方法、系统及装置 | |
CN106470281A (zh) | 一种漏话提醒方法及装置 | |
CN105188155B (zh) | 一种网络连接的方法及终端 | |
CN110298654B (zh) | 基于5g网络的手机支付方法和系统 | |
JP2014068320A (ja) | 無線lan通信装置、システム、および方法 | |
TW578433B (en) | Push wireless downloading method and system of wireless device application program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
OL01 | Intention to license declared | ||
OL01 | Intention to license declared |