一种在iOS系统上实现低功耗蓝牙通信的方法及装置与流程

文档序号:11931824阅读:392来源:国知局
一种在iOS系统上实现低功耗蓝牙通信的方法及装置与流程

本发明涉及通信领域,尤其涉及一种在iOS系统上实现低功耗蓝牙通信的方法及装置。



背景技术:

目前全球有超过一亿种的设备支持蓝牙技术,蓝牙无线传输技术建立了优化、易于设定以及广泛兼容的标准。其中,低功耗蓝牙(BLE)拥有极低的运行和待机功耗,且安全性、可靠性极高,但是传输速率较低,支持1Mbps数据传输率下的超短数据包;蓝牙3.0传输率高,数据传输率大约为24Mbps,可以轻松用于录像机至高清电视、PC至PMP、UMPC至打印机之间的资料传输,但高速传送大量数据会消耗更多能量。

在现有技术中,没有一款蓝牙既能拥有极低的运行和待机功耗,又有极高的数据传输率,且在实际运用中,既无法使用单一的蓝牙3.0打开通信通道完成数据通信,也无法使用单一的BLE广播打开特征通道实现数据通信。



技术实现要素:

本发明的目的是为了解决现有技术中存在的问题,提供了一种在iOS系统上实现低功耗蓝牙通信的方法及装置。

一方面,本发明提供了一种在iOS系统上实现低功耗蓝牙通信的方法,包括:

步骤S1:驱动程序扫描周边设备,获取周边设备对象列表;

步骤S2:驱动程序根据目标蓝牙设备的预设唯一标识符,从周边设备对象列表中获取与目标蓝牙设备对应的BLE设备对象;

步骤S3:驱动程序将移动终端与BLE设备对象对应的目标蓝牙设备进行匹配,如果匹配成功,则执行步骤S4,否则报错;

步骤S4:驱动程序从iOS系统中获取蓝牙3.0设备对象列表,并根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象,如果获取成功,则执行步骤S5,否则报错;

步骤S5:驱动程序初始化蓝牙3.0设备对象的通信通道,进行数据通信。

可选地,在步骤S1之前还包括驱动程序初始化中心设备对象,具体为:当驱动程序通过第一驱动接口获取到来自应用程序的初始化请求后,驱动程序初始化中心设备对象。

在本实施例中,驱动程序初始化中心设备对象之前还包括:驱动程序创建中心设备对象,并且设置中心设备对象的委派对象及串口队列。

具体地,步骤S1中驱动程序扫描周边设备具体为:驱动程序通过中心设备对象扫描周边设备。

可选地,步骤S1还包括:保存周边设备对象列表,并向应用程序返回周边设备对象列表里的周边设备对象的唯一标识符。

具体地,步骤S1还包括:驱动程序获取周边设备广播信息;步骤S1具体为:当驱动程序通过第二驱动接口获取到来自应用程序的获取周边设备对象列表和获取周边设备广播信息的请求后,驱动程序通过中心设备对象调用iOS系统的扫描周边设备的方法,通过第二委派接口获得周边设备广播信息和周边设备对象列表后,保存周边设备对象列表,并向应用程序返回周边设备对象的唯一标识符;

可选地,步骤S1之前还包括:驱动程序通过第一委派接口获取中心设备对象的蓝牙状态;

当驱动程序获取中心设备对象的蓝牙状态之后:若驱动程序获得中心设备对象的蓝牙正常工作的状态,则扫描周边设备;若驱动程序获得中心设备对象的蓝牙未打开的状态,则向应用程序返回错误信息;若驱动程序获得中心设备对象的异常状态或不支持连接的状态,则向应用程序返回蓝牙异常的信息。

具体地,步骤S2具体为:当驱动程序获取到来自应用程序的包括目标蓝牙设备的预设唯一标识符的连接设备请求后,驱动程序根据目标蓝牙设备的预设唯一标识符,从扫描到的周边设备列表中获取与目标蓝牙设备对应的BLE设备对象。

更具体地,步骤S2具体为:当驱动程序通过第三驱动接口获取到来自应用程序的目标蓝牙设备的预设唯一标识符后,驱动程序根据目标蓝牙设备的预设唯一标识符在周边设备对象列表中查找是否存在与目标蓝牙设备的预设唯一标识符对应的周边设备对象,如果查找到,则将与目标蓝牙设备的预设唯一标识符对应的周边设备对象作为BLE设备对象,执行步骤S3;否则,通过第三驱动接口向应用程序返回错误信息。

可选地,在步骤S4之前,还包括:驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象,具体包括:驱动程序向iOS系统中注册蓝牙3.0设备的本地通知,驱动程序在iOS系统中注册第一通知,驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象的读写通信线程。

具体地,注册第一通知,具体为:驱动程序通过调用iOS系统注册方法向iOS系统注册接收蓝牙3.0设备的拔插通知。

具体地,步骤S4中驱动程序从移动终端中获取蓝牙3.0设备对象列表,具体为:驱动程序从移动终端的iOS系统中获取蓝牙3.0设备对象列表。

更具体地,步骤S4中驱动程序从iOS系统中获取蓝牙3.0设备对象列表后,还包括:

步骤a1:驱动程序判断蓝牙3.0设备对象列表是否为空,如果为空,则报错,否则执行步骤a2;

步骤a2:驱动程序从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象的协议信息;

步骤a3:驱动程序根据预设的目标蓝牙设备的协议信息和蓝牙3.0设备对象的协议信息进行匹配,若匹配成功,则驱动程序根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象,蓝牙3.0设备对象与BLE设备对象匹配,否则驱动程序通过第三驱动接口向应用程序返回错误信息。

进一步地,驱动程序初始化蓝牙3.0设备对象的通信通道,具体包括:驱动程序通过iOS系统提供的初始化通道接口对蓝牙3.0设备对象与iOS系统之间的通信通道进行初始化,获取通信通道对象,并保存相应的通信通道对象。

具体地,步骤S5中驱动程序初始化蓝牙3.0设备对象的通信通道之后,还包括:驱动程序判断目标蓝牙设备的功耗状态,如果是无功耗状态,返回步骤S1;如果是低功耗状态,返回步骤S1;如果是高功耗状态,则进行数据通信。

进一步地,进行数据通信,具体包括:驱动程序按照预设协议对应用程序传来的数据进行组包后,将组包后的数据发送给蓝牙3.0设备对象,蓝牙3.0设备对象根据数据做出相应的回应并将回应数据返回给驱动程序,驱动程序接收回应数据后进行解包,并将数据返回至应用程序。

更进一步地,将组包后的数据发送给蓝牙3.0设备对象,具体为:驱动程序通过调用iOS系统的write接口发送给蓝牙3.0设备对象;驱动程序接收回应数据,具体为:驱动程序通过调用iOS系统的read接口接收回应数据。

另一方面,本发明提供了一种在iOS系统上实现低功耗蓝牙通信的装置,包括:

扫描模块,用于扫描周边设备;

第一获取模块,用于获取周边设备对象列表;

第二获取模块,用于从周边设备对象列表中获取与目标蓝牙设备对应的BLE设备对象;

第一匹配模块,用于将移动终端与BLE设备对象对应的目标蓝牙设备进行匹配;

第三获取模块,用于当第一匹配模块匹配成功时,从iOS系统中获取蓝牙3.0设备对象列表;

第四获取模块,用于根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象;

第一初始化模块,用于当第四获取模块获取成功时,初始化蓝牙3.0设备对象的通信通道;

通信模块,用于当第一初始化模块初始化蓝牙3.0设备对象的通信通道后,进行数据通信。

可选地,装置还包括:第五获取模块和第二初始化模块;

第五获取模块,用于通过第一驱动接口获取到来自应用程序的初始化请求;

第二初始化模块,用于第五获取模块获取到来自应用程序的初始化请求后,初始化中心设备对象。

可选地,装置还包括:创建模块和设置模块;

创建模块,用于创建中心设备对象;

设置模块,用于设置中心设备对象的委派对象及串口队列。

具体地,扫描模块具体用于:通过中心设备对象扫描周边设备。

可选地,装置还包括:保存模块和第一返回模块;

保存模块,用于保存周边设备对象列表;

第一返回模块,用于向应用程序返回周边设备对象列表里的周边设备对象的唯一标识符。

可选地,装置还包括:第六获取模块、第七获取模块、调用模块、第八获取模块和发送模块;

第六获取模块,用于获取周边设备广播信息;

第七获取模块,用于通过第二驱动接口获取来自应用程序的获取周边设备对象列表和获取周边设备广播信息的请求;

调用模块,用于当第七获取模块接收到请求后,通过中心设备对象调用iOS系统的扫描周边设备的方法;

第八获取模块,用于当调用模块调用iOS系统的扫描周边设备的方法后,通过第二委派接口获得周边设备广播信息和周边设备对象列表;

发送模块,用于向应用程序返回周边设备对象的唯一标识符。

可选地,装置还包括:第九获取模块;

第九获取模块,用于通过第一委派接口获取中心设备对象的蓝牙状态。

相应地,第九获取模块获取中心设备对象的蓝牙状态之后,还包括:第二返回模块和第三返回模块;

具体地,扫描模块,还用于当第九获取模块获得中心设备对象的蓝牙正常工作的状态时,扫描周边设备;

第二返回模块,用于当第九获取模块获得中心设备对象的蓝牙未打开的状态时,向应用程序返回错误信息;

第三返回模块,用于当第九获取模块获得中心设备对象的异常状态或不支持连接的状态时,向应用程序返回蓝牙异常的信息。

可选地,装置还包括:第十获取模块和第十一获取模块;

第十获取模块,用于获取来自应用程序的包括目标蓝牙设备的预设唯一标识符的连接设备请求;

第十一获取模块,用于根据目标蓝牙设备的预设唯一标识符从扫描到的周边设备列表中获取与目标蓝牙设备对应的BLE设备对象。

可选地,装置还包括:第十二获取模块、第一查找模块、作为模块和返回错误模块;

第十二获取模块,用于通过第三驱动接口获取到来自应用程序的目标蓝牙设备的预设唯一标识符;

第一查找模块,用于在第十二获取模块通过第三驱动接口获取到来自应用程序的目标蓝牙设备的预设唯一标识符后,根据目标蓝牙设备的预设唯一标识符在周边设备对象列表中查找是否存在与目标蓝牙设备的预设唯一标识符对应的周边设备对象;

作为模块,用于当第一查找模块查找到与目标蓝牙设备的预设唯一标识符对应的周边设备对象时,将与目标蓝牙设备的预设唯一标识符对应的周边设备对象作为BLE设备对象;

第一匹配模块,还用于当作为模块将与目标蓝牙设备的预设唯一标识符对应的周边设备对象作为BLE设备对象时,将移动终端与BLE设备对象对应的目标蓝牙设备进行匹配;

返回错误模块,用于当第一查找模块没有查找到与目标蓝牙设备的预设唯一标识符对应的周边设备对象时,通过第三驱动接口向应用程序返回错误信息。

可选地,装置还包括:第三初始化模块;

第三初始化模块,用于初始化目标蓝牙设备的蓝牙3.0设备对象。

具体地,第三初始化模块还包括:第一注册子模块、第二注册子模块、初始化子模块;

第一注册子模块,用于向iOS系统中注册蓝牙3.0设备的本地通知;

第二注册子模块,用于在iOS系统中注册第一通知;

初始化子模块,用于初始化目标蓝牙设备的蓝牙3.0设备对象的读写通信线程。

具体地,第一注册子模块还包括:注册单元;

注册单元,用于调用iOS系统注册方法向iOS系统注册接收蓝牙3.0设备的拔插通知。

具体地,第三获取模块具体用于:从移动终端的iOS系统中获取蓝牙3.0设备对象列表。

可选地,装置还包括:第一判断模块、第十三获取模块、报错模块、第二匹配模块、第十四获取模块和第五返回模块;

第一判断模块,用于第三获取模块获取到蓝牙3.0设备对象列表后,判断蓝牙3.0设备对象列表是否为空;

第十三获取模块,用于当第一判断模块判断不为空时从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象的协议信息;

报错模块,当第一判断模块判断为空时,用于报错;

第二匹配模块,用于根据预设的目标蓝牙设备的协议信息和蓝牙3.0设备对象的协议信息进行匹配;

第十四获取模块,用于当第一匹配模块匹配成功时,根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象;

具体地,第一匹配模块,具体用于当第十四获取模块根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象时,用于蓝牙3.0设备对象与BLE设备对象匹配;

第五返回模块,用于当匹配模块匹配失败时,通过第三驱动接口向应用程序返回错误信息。

具体地,第一初始化模块包括:初始化子模块、获取子模块和保存子模块;

初始化子模块,用于通过iOS系统提供的初始化通道接口对蓝牙3.0设备对象与iOS系统之间的通信通道进行初始化;

获取子模块,用于获取通信通道对象;

保存子模块,用于保存相应的通信通道对象。

可选地,装置还包括:第二判断模块;

第二判断模块,用于判断目标蓝牙设备的功耗状态;

扫描模块,还用于当第二判断模块判断目标蓝牙设备的功耗状态是无功耗状态时,扫描周边设备;

扫描模块,还用于当第二判断模块判断目标蓝牙设备的功耗状态是低功耗状态时,扫描周边设备;

通信模块,还用于当第二判断模块判断目标蓝牙设备的功耗状态是高功耗状态时,进行数据通信。

具体地,在本实施例中,通信模块具体包括:组包单元、发送单元、接收单元、解包单元和返回单元;

组包单元,用于按照预设协议对应用程序传来的数据进行组包;

发送单元,用于将组包单元组包的数据发送给蓝牙3.0设备对象;

接收单元,用于接收回应数据;

解包单元,用于接收回应数据后进行解包;

返回单元,用于将解包单元解包的数据返回至应用程序。

具体地,发送单元,具体用于通过调用iOS系统的write接口发送给蓝牙3.0设备对象;接收单元,具体用于通过调用iOS系统的read接口接收回应数据。

本发明取得的有益效果是:

采用本发明的技术方案,将低功耗蓝牙和蓝牙3.0的优点结合在一起,既保证BLE低功耗维持设备待机时间,又保证通信速度。

附图说明

为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一中提供的一种在iOS系统上实现低功耗蓝牙通信的方法的流程图;

图2为本发明实施例二中提供的一种在iOS系统上实现低功耗蓝牙通信的方法的流程图;

图3为本发明实施例三中提供的一种在iOS系统上实现低功耗蓝牙通信的装置的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例一

本实施例提供了一种在iOS系统上实现低功耗蓝牙通信的方法,可以由安装在具有iOS系统的移动终端中的驱动程序或者由安装在具有iOS系统的移动终端上的包括驱动程序和应用程序的可执行文件来实现与蓝牙设备通信。其中,具有iOS系统的移动终端可以为iPhone、iPod、iTouch或iPad等设备,蓝牙设备具体为既支持BLE又支持蓝牙3.0的蓝牙设备,例如可以为:既支持蓝牙BLE又支持蓝牙3.0的蓝牙读卡器或者蓝牙KEY等。

如图1所示,具体包括:

步骤101:驱动程序初始化中心设备对象,并扫描周边设备;

驱动程序初始化中心设备对象,具体为:当驱动程序通过第一驱动接口获取到来自应用程序的初始化请求后,驱动程序初始化中心设备对象。其中,初始化中心设备对象具体为:创建中心设备对象,并且设置中心设备对象的委派对象及串口队列;

扫描周边设备,具体为:当驱动程序通过第二驱动接口获取到来自应用程序的获取周边预设唯一标识符列表和获取周边设备广播信息的请求后,驱动程序通过中心设备对象调用iOS系统的扫描周边设备的方法,通过第二委派接口获得周边设备对象列表。

当驱动程序通过第二委派接口获取到周边设备广播信息和周边设备对象列表后,从广播信息中获取周边设备对象中的预设唯一标识符,将周边设备对象中的预设唯一标识符和周边设备对象一一对应的存储到周边设备对象列表中,并向应用程序返回周边设备对象列表中的预设唯一标识符;

其中,预设唯一标识符是蓝牙设备的唯一识别信息,本实施例中,可以为蓝牙设备的设备名称,也可以为蓝牙设备的序列号。

具体地,创建中心设备对象为:驱动程序调用iOS系统中CBCentralManager对象的init接口;设置中心设备对象的委派对象及串口队列为:驱动程序调用iOS系统中CBCentralManager对象的initWithDelegate:queue:接口;中心设备对象扫描周边设备的方法为:调用iOS系统中CBCentralManager对象的scanForPeripheralsWithServices:options:接口。

需要说明的是,在驱动程序通过中心设备对象扫描周边设备之前,驱动程序通过第一委派接口获取中心设备对象的蓝牙状态,具体为:驱动程序获得中心设备对象的蓝牙正常工作的状态,则执行步骤202;驱动程序获得中心设备对象的蓝牙未打开的状态,则应用程序返回错误信息;驱动程序获得中心设备对象的异常状态或不支持连接的状态,则向应用程序返回蓝牙异常的信息。其中,蓝牙异常状态包括:中心设备关闭状态、中心设备不支持BLE状态、中心设备异常状态、连接超时报错等。

具体地,驱动程序通过调用iOS系统中CBCentralManager对象的entralManagerDidUpdateState:接口获取中心设备对象的蓝牙状态。

还需说明的是,步骤101之后还可以包括:驱动程序设置中心设备对象扫描周边设备的扫描时间。

步骤102:驱动程序根据目标蓝牙预设唯一标识符,从扫描到的周边设备中获取与目标蓝牙设备对应的BLE设备对象;

具体地,当驱动程序通过第三驱动接口获取到来自应用程序的目标预设唯一标识符后,驱动程序根据目标预设唯一标识符在周边设备对象列表中查找是否存在与目标预设唯一标识符对应的周边设备对象,如果查找到,则将与目标预设唯一标识符对应的周边设备对象作为BLE设备对象,执行步骤103;否则,通过第三驱动接口向应用程序返回错误信息。

步骤103:驱动程序将移动终端与BLE设备对象对应的目标蓝牙设备进行匹配,并初始化蓝牙目标设备的蓝牙3.0设备对象;

具体地,驱动程序使用中心设备对象调用iOS系统的连接周边设备方法,并设置周边设备对象的委派对象。其中,当驱动程序通过第三委派接口获取到连接周边设备成功的委派通知时,表示中心设备对象完成与BLE设备对象对应的目标蓝牙设备匹配,同时激活蓝牙目标设备的蓝牙3.0设备对象;否则通过第三驱动接口向应用程序返回错误信息。

其中,驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象,具体包括:驱动程序向iOS系统中注册蓝牙3.0设备的本地通知,驱动程序在iOS系统中注册第一通知,驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象的读写通信线程。在本实施例中,第一通知为:实时监控蓝牙3.0设备插入通知和实时监控蓝牙3.0设备拔出通知。

步骤104:驱动程序获取蓝牙3.0设备对象,并与BLE设备对象匹配;

具体步骤如下:

步骤104-1:驱动程序获取到来自iOS系统的蓝牙3.0设备对象列表,如果驱动程序获得的蓝牙3.0设备对象列表为空,则向应用程序返回错误信息,否则执行步骤104-2;

具体地,驱动程序获取iOS系统中的蓝牙3.0设备对象列表方法为:

驱动程序通过EAAccessoryManager对象的connectedAccessories成员接口获得。

步骤104-2:驱动程序从蓝牙3.0对象设备列表中获取目标蓝牙设备的协议信息;

例如,目标蓝牙设备的协议信息为:com.ftsafe.rakuten。

步骤104-3:驱动程序根据预设的目标蓝牙设备的协议信息和蓝牙3.0设备对象列表中的蓝牙3.0设备对象协议信息进行匹配,匹配成功,执行步骤104-4,否则驱动程序通过第三驱动接口向应用程序返回错误信息;

具体地,根据目标蓝牙设备的协议信息从蓝牙3.0设备列表中筛选出和目标蓝牙设备的协议信息相同的蓝牙3.0设备对象列表。

步骤104-4:驱动程序将匹配成功的蓝牙3.0设备对象与BLE设备对象进行匹配。

具体地,驱动程序判断匹配成功的蓝牙3.0设备对象中的预设唯一标识符与驱动程序通过第三驱动接口获得的目标预设唯一标识符是否匹配,若匹配成功则执行步骤105,否则向应用程序返回错误信息。

需要说明的是,本实施例中,预设唯一标识符可以是蓝牙3.0设备的mac地址,也可以是蓝牙3.0设备的序列号。

以mac地址为例,蓝牙3.0设备对象中的mac地址为:3481f40A05D6,目标蓝牙预设唯一标识符为:34567890120A05D6,通过匹配,两者后三个字节相同且均为0A05D6,则两者匹配成功。

步骤105:驱动程序初始化目标蓝牙设备的通信通道,并判断目标蓝牙设备的功耗状态,如果是无功耗状态,返回步骤101;如果是低功耗状态,返回步骤101;如果是高功耗状态,进行数据通信。

具体地,驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象的通信通道后,驱动程序按照预设协议进行协议数据组包,进行数据通信。

驱动程序初始化目标蓝牙设备的通信通道,具体为:驱动程序通过iOS系统提供的初始化通道接口对蓝牙设备与iOS系统之间的通信通道进行初始化,获取通信通道对象,并保存相应的通信通道对象。

驱动程序进行数据通信,主要包括:对数据进行读写操作,具体为:驱动程序通过调用iOS系统中EASession对象的write接口进行写操作,通过调用read接口进行读操作。

在本实施例中,驱动程序判断目标蓝牙设备的功耗状态,具体包括:如果是无功耗状态,即目标蓝牙设备断电,则返回步骤101;如果是低功耗状态,即目标蓝牙设备休眠或是只有蓝牙3.0设备对象工作,返回步骤101;如果是高功耗状态,即BLE设备对象和蓝牙3.0设备对象同时工作,则进行数据通信。

具体地,在本实施例中,蓝牙设备休眠的具体情况是:蓝牙3.0设备对象不工作,只有BLE设备对象进行供电,没有数据通信。需要说明的是,驱动程序是通过蓝牙3.0设备对象的断开连接通知判断蓝牙设备是否休眠和断电的。其中,只有蓝牙3.0设备对象工作包括:驱动程序的Disconnect接口主动被调用和系统即将将应用程序退出两种情况。

在本实施例中,驱动程序进行数据通信,主要包括:驱动程序按照预设协议对应用程序传来的数据进行组包后,将组包后的数据发送给目标蓝牙设备,目标蓝牙设备根据数据做出相应的回应并将回应数据返回给驱动程序,驱动程序接收回应数据后进行解包,并将数据返回至应用程序。

具体地,驱动程序通过调用iOS系统中EASession对象的write接口,将组包后的数据发送给目标蓝牙设备,通过调用iOS系统中EASession对象的read接口驱动程序接收回应数据。

还需要说明的是,在本实施例中,第一驱动接口、第二驱动接口和第三驱动接口之间没有时间或者逻辑上的先后顺序。

本发明提供了一种在iOS系统上实现低功耗蓝牙通信的方法,首先初始化中心设备对象,根据中心设备对象获取BLE设备对象后,与对应的目标蓝牙设备进行匹配,获取蓝牙3.0设备对象,并与BLE设备对象进行匹配,匹配成功后即可通信。采用本发明的技术方案,既能维持设备待机时间,又保证通信速度。

实施例二

本实施例提供了一种在iOS系统上实现低功耗蓝牙通信的方法,可以由安装在具有iOS系统的移动终端中的驱动程序或者由安装在具有iOS系统的移动终端上的包括驱动程序和应用程序的可执行文件来实现与蓝牙设备通信。其中,具有iOS系统的移动终端可以为iPhone、iPod、iTouch或iPad等设备,蓝牙设备具体为既支持BLE又支持蓝牙3.0的蓝牙设备,例如可以为:既支持蓝牙BLE又支持蓝牙3.0的蓝牙读卡器或者蓝牙KEY等。

方法,如图2所示,具体包括:

步骤201:驱动程序初始化中心设备对象,并获取中心设备对象的蓝牙状态;

具体地,当驱动程序通过第一驱动接口获取到来自应用程序的初始化请求后,驱动程序初始化中心设备对象。其中,驱动程序初始化中心设备对象具体为:驱动程序创建中心设备对象,并且设置中心设备对象的委派对象及串口队列。

具体地,创建中心设备对象为:驱动程序调用iOS系统中CBCentralManager对象的init接口;设置中心设备对象的委派对象及串口队列为:驱动程序调用iOS系统中CBCentralManager对象的initWithDelegate:queue:接口。

驱动程序获取中心设备对象的蓝牙状态,具体为:驱动程序通过第一委派接口获取中心设备对象的蓝牙状态。具体地,驱动程序获得中心设备对象的蓝牙正常工作的状态,则执行步骤202;驱动程序获得中心设备对象的蓝牙未打开的状态,则应用程序返回错误信息;驱动程序获得中心设备对象的异常状态或不支持连接的状态,则向应用程序返回蓝牙异常的信息。其中,蓝牙异常状态包括:中心设备关闭状态、中心设备不支持BLE状态、中心设备异常状态、连接超时报错等。

具体地,驱动程序通过调用iOS系统中CBCentralManager对象的entralManagerDidUpdateState:接口获取中心设备对象的蓝牙状态:当CBCentralManager类中的state接收到来自iOS系统中CBCentralManagerStatePoweredOn的指令,表示中心设备蓝牙打开;当state接收到CBCentralManagerStatePoweredOff的指令,表示中心设备蓝牙关闭;当state接收到CBCentralManagerStateUnknown的指令,表示中心设备状态异常;当state接收到CBCentralManagerStateUnsupported的指令,表示当前中心设备不支持连接。

需要说明的是,如果应用程序未退出,整个过程驱动程序只需要初始化中心设备对象一次即可,如果应用程序退出,则需要驱动程序重新进行初始化中心设备对象。

步骤202:驱动程序通过中心设备对象扫描周边设备,获取周边设备广播信息和周边设备对象列表,保存周边设备对象列表,并向应用程序返回周边设备对象中的预设唯一标识符;

在本实施例中,驱动程序获取周边设备广播信息和周边设备对象列表,具体地:当驱动程序通过第二驱动接口获取到来自应用程序的获取周边设备广播信息和周边预设唯一标识符列表的请求后,驱动程序通过中心设备对象调用iOS系统的扫描周边设备的方法,通过第二委派接口获得周边设备广播信息和周边设备对象列表。

具体地,中心设备对象扫描周边设备为:驱动程序调用iOS系统中CBCentralManager对象的scanForPeripheralsWithServices:options:接口,其中,scanForPeripheralsWithServices:options:接口中的预设服务标识数组可以为空;获取周边设备广播信息和周边设备对象列表为:驱动程序通过iOS系统中CBCentralManager对象的didDiscoverPeripheral:advertisementData:RSSI:第二委派接口获得。

在本实施例中,当驱动程序通过第二委派接口获取到周边设备广播信息和周边设备对象列表后,从广播信息中获取周边设备对象中的预设唯一标识符,将周边设备对象中的预设唯一标识符和周边设备对象一一对应的存储到周边设备对象列表中,并向应用程序返回周边设备对象列表中的预设唯一标识符;

其中,预设唯一标识符是蓝牙设备的唯一识别信息,本实施例中,可以为蓝牙设备的设备名称,也可以为蓝牙设备的序列号。

还需说明的是,步骤202之后还可以包括:驱动程序设置中心设备对象扫描周边设备的扫描时间。其中扫描时间,可以是应用程序制定扫描的时间,也可以是驱动程序设定的一个固定的扫描时间。在设定的时间内,驱动程序会持续扫描周边设备,直至设定的扫描时间结束。

步骤203:当驱动程序获取到来自应用程序的包括目标蓝牙预设唯一标识符的连接设备请求后,驱动程序根据目标蓝牙预设唯一标识符获取BLE设备对象;

具体地,当驱动程序通过第三驱动接口获取到来自应用程序的目标预设唯一标识符后,驱动程序根据目标预设唯一标识符在周边设备对象列表中查找是否存在与目标预设唯一标识符对应的周边设备对象,如果查找到,则将与目标预设唯一标识符对应的周边设备对象作为BLE设备对象,执行步骤204;否则,通过第三驱动接口向应用程序返回错误信息。

需要说明的是,当应用程序获取到来自用户在显示界面上选择的目标蓝牙预设唯一标识符后,将包括目标蓝牙预设唯一标识符的连接设备请求发送给驱动程序;当应用程序获取到来自驱动程序的错误信息后,输出错误信息。

步骤204:驱动程序将移动终端与BLE设备对象对应的目标蓝牙设备进行匹配;

具体地,驱动程序使用中心设备对象调用iOS系统的连接周边设备方法,并设置周边设备对象的委派对象。其中,当驱动程序通过第三委派接口获取到连接周边设备成功的委派通知时,表示中心设备对象完成与BLE设备对象对应的目标蓝牙设备匹配,执行步骤205;否则通过第三驱动接口向应用程序返回错误信息。

具体地,中心设备对象连接周边设备的方法为:驱动程序通过调用iOS系统中CBCentralManager对象的connectPeripheral:options:接口。

步骤205:驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象;

具体地,驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象,具体包括:驱动程序向iOS系统中注册蓝牙3.0设备的本地通知,驱动程序在iOS系统中注册第一通知,驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象的读写通信线程。

本实施例中,第一通知为:实时监控蓝牙3.0设备插入通知和实时监控蓝牙3.0设备拔出通知;

具体地,实时监控蓝牙设备插入通知为:EAAccessoryDidConnectNotification,实时监控蓝牙设备拔出通知为:EAAccessoryDidDisconnectNotification;

具体地,驱动程序向iOS系统中注册蓝牙3.0设备的本地通知的方法为:驱动程序通过调用iOS系统中的EAAccessoryManager对象的registerForLocalNotifications接口;驱动程序向iOS系统中心注册第一通知的方法为:驱动程序通过调用iOS系统中NSNotificationCenter对象的addObserver:selector:name:object:接口。

需要说明的是,在本实施例中,步骤203之后还可以包括:驱动程序设置中心设备对象连接周边设备的时间。在执行过步骤205的激活目标蓝牙设备的蓝牙3.0设备对象后,需判断中心设备对象连接周边设备是否超时,如果超时,需返回步骤203,如果未超时,则驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象。

步骤206:驱动程序获取来自iOS系统中的蓝牙3.0设备对象,并与BLE设备对象匹配;

具体步骤如下:

步骤2061:驱动程序获取到来自iOS系统的蓝牙3.0设备对象列表,如果驱动程序获得的蓝牙3.0设备对象列表为空,则向应用程序返回错误信息,否则执行步骤2062;

具体地,驱动程序获取iOS系统中的蓝牙3.0设备对象列表方法为:驱动程序通过EAAccessoryManager对象的connectedAccessories成员接口获得。

步骤2062:驱动程序从蓝牙3.0对象设备列表中获取蓝牙3.0设备对象的协议信息;

步骤2063:驱动程序根据预设的目标蓝牙设备的协议信息和蓝牙3.0设备对象的协议信息进行匹配,匹配成功,执行步骤2064,否则驱动程序通过第三驱动接口向应用程序返回错误信息;

具体的,根据目标蓝牙设备的协议信息从蓝牙3.0设备列表中筛选出和目标蓝牙设备的协议信息相同的蓝牙3.0设备对象列表。

例如,目标蓝牙设备的协议信息为:com.ftsafe.rakuten。

步骤2064:驱动程序将匹配成功的蓝牙3.0设备对象与BLE设备对象进行匹配。

具体地,驱动程序判断匹配成功的蓝牙3.0设备对象中的预设唯一标识符与驱动程序通过第三驱动接口获得的目标预设唯一标识符是否匹配,若匹配成功则执行步骤207,否则向应用程序返回错误信息。

需要说明的是,本实施例中,唯一标示符可以是蓝牙设备的mac地址,也可以是蓝牙设备序列号。

以mac地址为例,蓝牙3.0设备对象中的mac地址为:3481f40A05D6,目标蓝牙预设唯一标识符为:34567890120A05D6,通过匹配,两者后三个字节相同且均为0A05D6,则两者匹配成功。

步骤207:驱动程序初始化目标蓝牙设备的蓝牙3.0设备对象的通信通道;

具体地,驱动程序通过iOS系统提供的初始化通道接口对蓝牙设备与iOS系统之间的通信通道进行初始化,获取通信通道对象,并保存相应的通信通道对象;

具体地,驱动程序通过iOS系统中EASession对象的initWithAcessory:forProtocol:接口,对蓝牙设备与iOS系统之间的通信通道进行初始化,获得已经初始化的通道EASession对象,利用已经初始化的EASession对象获得NSInputStream和NSOutputStream对象后,将EASession对象、NSOutputStream对象、NSInputStream对象保存,并通过open接口打开,用于后续的数据通信。

步骤208:驱动程序判断目标蓝牙设备的功耗状态,如果是无功耗状态,返回步骤201;如果是低功耗状态,返回步骤201;如果是高功耗状态,进行数据通信。

在本实施例中,驱动程序判断目标蓝牙设备的功耗状态,具体包括:如果是无功耗状态,即目标蓝牙设备断电,则返回步骤201;如果是低功耗状态,即目标蓝牙设备休眠或是只有蓝牙3.0设备对象工作,返回步骤201;如果是高功耗状态,即BLE设备对象和蓝牙3.0设备对象同时工作,则进行数据通信。

具体地,在本实施例中,蓝牙设备休眠的具体情况是:蓝牙3.0设备对象不工作,只有BLE设备对象进行供电,没有数据通信。需要说明的是,驱动程序是通过蓝牙3.0设备对象的断开连接通知判断蓝牙设备是否休眠和断电的。其中,只有蓝牙3.0设备对象工作包括:驱动程序的Disconnect接口主动被调用和系统即将将应用程序退出两种情况。

在本实施例中,驱动程序进行数据通信,主要包括:驱动程序按照预设协议对应用程序传来的数据进行组包后,将组包后的数据发送给目标蓝牙设备,目标蓝牙设备根据数据做出相应的回应并将回应数据返回给驱动程序,驱动程序接收回应数据后进行解包,并将数据返回至应用程序。

在本实施例中,驱动程序按照预设协议进行协议数据组包,例如,驱动程序获得应用程序传入的数据为:0x 00 84 00 00 08,如果驱动程序按照私有协议组包,则为:0xA5 00 09 00 00 03 03 00 84 00 00 08,如果驱动程序按照CCID协议组包,则为:0x6f 05 00 00 00 00 04 00 00 00 00 84 00 00 08。

具体地,驱动程序通过调用iOS系统中EASession对象的write接口,将组包后的数据发送给目标蓝牙设备,通过调用iOS系统中EASession对象的read接口驱动程序接收回应数据。

需要说明的是,在本实施例中,第一驱动接口、第二驱动接口和第三驱动接口之间没有时间或者逻辑上的先后顺序。

实施例三

本实施例提供了一种在iOS系统上实现低功耗蓝牙通信的装置,如图3所示,装置包括:

扫描模块101,用于扫描周边设备;

第一获取模块102,用于获取周边设备对象列表;

第二获取模块103,用于从周边设备对象列表中获取与目标蓝牙设备对应的BLE设备对象;

第一匹配模块104,用于将移动终端与BLE设备对象对应的目标蓝牙设备进行匹配;

第三获取模块105,用于当第一匹配模块匹配成功时,从iOS系统中获取蓝牙3.0设备对象列表;

第四获取模块106,用于根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象;

第一初始化模块107,用于当第四获取模块获取成功时,初始化蓝牙3.0设备对象的通信通道;

通信模块108,用于当所述第一初始化模块初始化所述蓝牙3.0设备对象的通信通道后,进行数据通信。

可选地,在本实施例中,装置还包括:第五获取模块和第二初始化模块;

第五获取模块,用于通过第一驱动接口获取到来自应用程序的初始化请求;

第二初始化模块,用于第五获取模块获取到来自应用程序的初始化请求后,初始化中心设备对象。

可选地,在本实施例中,装置还包括:创建模块和设置模块;

创建模块,用于创建中心设备对象;

设置模块,用于设置中心设备对象的委派对象及串口队列。

具体地,在本实施例中,扫描模块101具体用于:通过中心设备对象扫描周边设备。

可选地,在本实施例中,装置还包括:保存模块和第一返回模块;

保存模块,用于保存周边设备对象列表;

第一返回模块,用于向应用程序返回周边设备对象列表里的周边设备对象的唯一标识符。

可选地,在本实施例中,装置还包括:第六获取模块、第七获取模块、调用模块、第八获取模块和发送模块;

第六获取模块,用于获取周边设备广播信息;

第七获取模块,用于通过第二驱动接口获取来自应用程序的获取周边设备对象列表和获取周边设备广播信息的请求;

调用模块,用于当第七获取模块接收到请求后,通过中心设备对象调用iOS系统的扫描周边设备的方法;

第八获取模块,用于当调用模块调用iOS系统的扫描周边设备的方法后,通过第二委派接口获得周边设备广播信息和周边设备对象列表;

发送模块,用于向应用程序返回周边设备对象的唯一标识符。

可选地,在本实施例中,装置还包括:第九获取模块;

第九获取模块,用于获取中心设备对象的蓝牙状态。

相应地,在本实施例中,第九获取模块获取中心设备对象的蓝牙状态之后,还包括:第二返回模块和第三返回模块;

在本实施例中,扫描模块101还用于:当第九获取模块获得中心设备对象的蓝牙正常工作的状态时,扫描周边设备;

第二返回模块,用于当第九获取模块获得中心设备对象的蓝牙未打开的状态时,向应用程序返回错误信息;

第三返回模块,用于当第九获取模块获得中心设备对象的异常状态或不支持连接的状态时,向应用程序返回蓝牙异常的信息。

可选地,在本实施例中,装置还包括:第十获取模块和第十一获取模块;

第十获取模块,用于获取来自应用程序的包括目标蓝牙设备的预设唯一标识符的连接设备请求;

第十一获取模块,用于根据目标蓝牙设备的预设唯一标识符从扫描到的周边设备列表中获取与目标蓝牙设备对应的BLE设备对象。

可选地,在本实施例中,装置还包括:第十二获取模块、第一查找模块、作为模块和返回错误模块;

第十二获取模块,用于通过第三驱动接口获取到来自应用程序的目标蓝牙设备的预设唯一标识符;

第一查找模块,用于在所述第十二获取模块通过第三驱动接口获取到来自应用程序的目标蓝牙设备的预设唯一标识符后,根据目标蓝牙设备的预设唯一标识符在所述周边设备对象列表中查找是否存在与所述目标蓝牙设备的预设唯一标识符对应的周边设备对象;

第一匹配模块,还用于当作为模块将与目标蓝牙设备的预设唯一标识符对应的周边设备对象作为BLE设备对象时,将移动终端与BLE设备对象对应的所述目标蓝牙设备进行匹配;

返回错误模块,用于当第一查找模块没有查找到与目标蓝牙设备的预设唯一标识符对应的周边设备对象时,通过第三驱动接口向应用程序返回错误信息。

可选地,在本实施例中,装置还包括:第三初始化模块;

第三初始化模块,用于初始化目标蓝牙设备的蓝牙3.0设备对象。

具体地,在本实施例中,第三初始化模块还包括:第一注册子模块、第二注册子模块和初始化子模块;

第一注册子模块,用于向iOS系统中注册蓝牙3.0设备的本地通知;

第二注册子模块,用于在iOS系统中注册第一通知;

初始化子模块,用于初始化目标蓝牙设备的蓝牙3.0设备对象的读写通信线程。

具体地,在本实施例中,第一注册子模块还包括:注册单元;

注册单元,用于调用iOS系统注册方法向iOS系统注册接收蓝牙3.0设备的拔插通知。

具体地,在本实施例中,第三获取模块105具体用于:从移动终端的iOS系统中获取蓝牙3.0设备对象列表。

可选地,在本实施例中,装置还包括:第一判断模块、第十三获取模块、报错模块、第二匹配模块、第十四获取模块和第五返回模块;

第一判断模块,用于所述第三获取模块获取到蓝牙3.0设备对象列表后,判断蓝牙3.0设备对象列表是否为空;

第十四获取模块,用于当第一判断模块判断不为空时,从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象的协议信息;

报错模块,用于当第一判断模块判断为空时报错;

第二匹配模块,用于根据预设的目标蓝牙设备的协议信息和蓝牙3.0设备对象的协议信息进行匹配;

第十四获取模块,用于当匹配模块匹配成功时,根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象;

具体地,在本实施例中,第一匹配模块104,具体用于:当第十四获取模块根据预设唯一标识符从蓝牙3.0设备对象列表中获取蓝牙3.0设备对象时,用于蓝牙3.0设备对象与BLE设备对象匹配;

第五返回模块,用于当匹配模块匹配失败时,通过第三驱动接口向应用程序返回错误信息。

具体地,在本实施例中,第一初始化模块107包括:初始化子模块、获取子模块和保存子模块;

初始化子模块,用于通过iOS系统提供的初始化通道接口对蓝牙3.0设备对象与iOS系统之间的通信通道进行初始化;

获取子模块,用于获取通信通道对象;

保存子模块,用于保存相应的通信通道对象。

可选地,在本实施例中,装置还包括:第二判断模块;

第二判断模块,用于判断目标蓝牙设备的功耗状态。

扫描模块101,还用于当第二判断模块判断所述目标蓝牙设备的功耗状态是无功耗状态时,扫描周边设备;

扫描模块101,还用于当第二判断模块判断所述目标蓝牙设备的功耗状态是低功耗状态时,扫描周边设备;

通信模块108,还用于当第二判断模块判断所述目标蓝牙设备的功耗状态是高功耗状态时,进行数据通信。

具体地,在本实施例中,通信模块108具体包括:组包单元、发送单元、接收单元、解包单元和返回单元;

组包单元,用于按照预设协议对应用程序传来的数据进行组包;

发送单元,用于将组包单元组包的数据发送给蓝牙3.0设备对象;

接收单元,用于接收所述蓝牙3.0设备对象返回的回应数据;

解包单元,用于接收回应数据后进行解包;

返回单元,用于将解包单元解包的数据返回至应用程序。

具体地,在本实施例中,发送单元具体用于:通过调用iOS系统的write接口发送给蓝牙3.0设备对象;接收单元具体用于:通过调用iOS系统的read接口接收回应数据。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1