1.概述
GAP层(Generic access profile-通用访问配置文件)。GAP是对LL层payload(有效数据包)如何进行解析的两种方式的一种,而且也是最简单的一种。GAP简单的对LL payload进行一些规范和定义,因此GAP能实现的功能极其有限。GAP目前主要用来进行广播,扫描和发起连接。GAP保证了不同的BLE设备可以互相发现对方并建立连接。
GAP定义了蓝牙设备如何发现和建立与其他设备的安全或不安全连接。它处理一些一般模式的业务,比如询问、命名和搜索,还处理一些安全问题,比如担保。同时还处理一些有关连接的业务,比如链路建立、信道和连接建立。GAP规定的是一些一般性的运行任务。因此,它具有强制性,并作为所有其他蓝牙应用规范的基础。GAP是所有其他配置文件的基础,它定义了在蓝牙设备之间建立基带链路的通用方法,除此之外,GAP还定义了下列内容:
- 必须在所有蓝牙设备中实施的功能
- 发现和链接设备的通用步骤
- 基本用户界面术语
GAP是应用层能够直接访问BLE协议栈的最底层,它包括管理广播和连接事件的有关参数。GAP模块代表了所有蓝牙设备的共用基础功能,如传输,协议或者应用规范所使用的模式和访问过程。GAP的服务包括设备发现,连接方式,安全,认证,关联模型和服务发现等。
总之一句话,GAP是保证BLE设备能互相发现和连接的规范。GAP就好比一种语言,大家都说同一种语言才能相互听懂,相互知道说的是什么。否则就只能大眼瞪小眼。
BLE协议栈的GAP层负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止,启动安全功能,设备配置。
GAP还定义了以下四种角色类型:
广播者(Broadcaster):用于只通过广播发送数据的应用。广播发送者,是不可连接的设备。广播者角色只是广播信息而不接受信息(ibeacon类似应用)。
观察者(Observer):用于接收广播数据的应用。扫描广播,不能够启动连接。观察者只监听空气中的事件(抓包器)。
外围设备(Peripheral):用于通过广播发送数据并且可以建立链路的应用。广播发送者,是可连接的设备,在单一链路层连接时作为从机。
中央设备(Central):用于接收广播数据并且建立一条或多条链路的应用。扫描广播启动连接,在单一或多链路层连接时作为主机,支持三个同时连接。
2. GAP结构
2.1 GAP的位置
GAP层作为蓝牙协议层的组成模块,如下图所示,虚线框内的部分为蓝牙协议层。Application在蓝牙协议层之上,baseband/RF位于蓝牙协议层之下。GAP层给application提供访问Upper stack的接口。
2.2 GAP的功能
GAP提供如下功能
广播(Advertising):设置和获取广播参数,启动和停止
扫描(Scan):设置和获取扫描参数,启动和停止
连接(Connection):设置连接参数,创建连接,终止连接,更新连接参数
配对:设置配对参数,启动配对。使用passkey entry方式时输入/显示passkey,删除绑定设备密钥