七 蓝牙低功耗(BLE)协议栈 之 GAP层
一 介绍
GAP(Generic Access Profile, 通用访问规范)定义了设备如何彼此发现、建立连接以及如何实现绑定,同时描述了设备如何成为广播者和观察者,并且实现无需连接的数据传输。还定义了不同类型的地址来实现隐私性和可解析性。
GAP内部有两个基本概念用来描述设备的行为,即模式(mode)和规程(procedure)。
当一个设备被配置为按照某种方式操作一段较长的时间时,称为模式。当一个设备被配置为在某一段有限的时间内执行某种特定的操作时,称为规程。
举个例子,当一个设备正在进行广播时,称其为"广播模式"。广播往往会持续较长时间,也许是该设备唯一用途。而当一个设备正在寻找广播者时,称其为"观察规程"。观察往往持续一段较短时间,用以构建用户界面或者寻找需要的指定信息。
- LL层可以发出各种不同的PDU type的广播包,比如:可连接的、不可连接的等。
- 某种PDU Type的广播包中,还可以进一步定义它的AD Type;在GAP中可以设置广播类型(AD Type),比如Discoverable Mode。
二 GAP定义的4种Role
GATT从数据的提供使用角度提出了client和server两个概念。
GAP从数据的发起、接收角度提出了4个角色:
- Boardcast(广播者),发出广播信号可以没有无线接收器
- Observer(观察者),接收广播信号,可以没有无线发送器
- peripheral(外围设备),可以跟其他设备建立连接,建立连接时它是被动的一方。既含有无线发送器,又含有无线接收器。
- Central(*设备),可以跟其他设备建立连接,建立连接时它是主动的一方。既含有无线发送器,又含有无线接收器。
具体的角色可以做什么,需要什么配置看下图,详细信息在 《core_v5.1》 -> vol 2 -> Part C Generic Access Profile -> 2 Profile Overview
三 GAP的模式和规程
GAP定义了下列模式:
- 广播模式
- 不可发现模式
- 有限可发现模式
- 一般可发现模式
- 不可连接模式
- 定向可连接模式
- 不可绑定模式
- 可绑定模式
GAP 定义了下列规程:
- 观察规程
- 有限发现规程
- 一般发现规程
- 名称发现规程
- 自动连接建立规程
- 一般连接建立规程
- 选择性连接建立规程
- 直接连接建立规程
- 连接参数更新规程
- 终止连接规程
- 绑定规程
规程和模式相互相成的,比如说设备A处于模式X,设备B使用规程Y来访问它。
BLE有一下几种模式和规程:
- Broadcast mode and Observation procedure, 广播模式和观察规程
- Discovery modes and procedures,发现模式和规程
- Connection modes and procedures,连接模式和规程
- Bonding modes and procedures, 绑定模式和规程
- Periodic advertising modes and procedure,周期性的广播模式和规程
1 发现模式和规程
外围设备可以处于三种模式之一,*设备要使用三种规程之一和对方交互。广播的模式类型在广播数据的AD Type字节体现出来。
- Non-Discoverable Mode
不可发现模式,这很少用到。在这种模式下,其发出的广播包中的AD Type需要设置这2个位为0:
- LE General Discoverable Mode
- LE Limited Discoverable Mode
问题是,既然不想被别人发现,为何还要发出广播包?
这完全是各个蓝牙设备都遵守这样的君子约定:
- 设备A发出广播操作,但是其中的AD Type中表示自己是不可被发现的
- 设备B的Controller,肯定可以接受到这个广播包,上传到Host,解析出来其中的AD Type
- 设备B的Host是个君子,不在UI界面显示设备A;但是也许设备B可以自动连接设备A。
- Limited Discoverable Mode
有限可发现模式,为了省电,某些设备可能要先按一下按键,它才会发出广播报文;并且在过一段时间后,它就继续休眠。
我们使用手机查找蓝牙设备时,可能会列出来很多个设备,处于有限可发现模式的设备应该显示在列表的最上面,因为它最紧迫。
在这种模式下其发出的广播包中的AD Type要设置这个位为1: LE Limited Discoverable Mode
- General Discoverable Mode
一般可发现模式,跟有限可发现模式相比,它可以一直发出广播报文。在这种模式下,其发出的广播包中的AD Type要设置这个位为1: LE General Discoverable Mode
- Limited Discoverable Procedure
有限可发现规程。*设备既可以发现处于有限发现模式的设备,也可以发现处于一般发现模式的设备,但是处理有限可发现规程的*设备只列出来处于有限可发现模式的设备。
- General Discoverable Procedure
一般可发现规程。*设备既可以发现处于有限发现模式的设备,也可以发现处于一般发现模式的设备,*设备会列出来所有的设备。
2 连接模式和规程
-
Non-Connectable Mode
不可连接模式 -
Directed Connectable Mode
定向连接模式。
如果希望快速连接*设备,外围设备可以使用该模式。在该模式下他发出ADV_DIRECT_ADV广播报文,直接发给指定的*设备。所以该外围设备应该曾经与该*设备建立过连接。ADV_DIRECT_ADV广播报文的发送频率很快,该模式最多持续1.28s,之后控制器自动停止广播。
- Undirected Connectable Mode
无向连接模式。
如果一个外围设备无需很快建立连接,或者打算尽可能的省电,则可以使用该模式。他发出ADV_IND广播报文。
- Auto Connection Establishment Procedure
自动连接建立规程。
*设备使用该规程来设置控制器,从而向一个或多个外围设备自动建立连接。Host需要实现把想要连接的设备写入白名单中。
它有个缺点:对所有的设备,都只能使用同一套基本连接参数。
- General Connection Establishment Procedure
一般连接建立规程。
这是我们常用的规程,先扫描出设备,选中某一个,然后使用直接连接建立规程去连接它
- Selective Connection Establishment Procedure
选择性连接建立规程。
Host先把想要连接的设备放入Controller的白名单。正在广播的设备只要在白名单上才会被提交给Host。
Host决定是否连接该设备,并使用不同的参数去连接它。相比于自动连接建立规程,选择性连接建立规程可以使用不同的参数连接每一个设备。
- Direct Connection Establishment Procedure
定向连接建立规程,直接去连接指定的设备。
- Connection Parameter Update Procedure
连接参数更新规程: 参考 《core V5.1》-> VOL6 -> Part B -> 5.1 Link Layer control procedures
- Terminate Connection Procedure
终止连接规程。
*设备或外围设备都可以执行该规程,LL层发出LL_TERMINATE_IND_PDU就可以。
四 GAP服务
每一个*设备或外围设备中,都有一个GAP Service。在GAP Service中至少有这2项characteristic:
- Device Name,设备名字
- Appearance,*设备根据它来显示一个图标、字符串等,用来形象地描述设备的功能。
本文地址:https://blog.csdn.net/chengbaojin/article/details/108147945