GAP(Generic Access Profile)通用访问规范层算是BLE协议栈中最顶部的一层,它定义了设备如何广播、扫描、发现和建立连接,以及配置工作角色(Role)、可发现性、广播数据内容和安全相关的参数。从编程视角来看,GAP中的内容就像是一个config文件,BLE协议栈其他层的工作,都要从GAP中获取初始化参数和配置信息。GAP中定义了一系列模式(Mode)和规程(Procedure),二者相互配合,完成广播和连接的工作。
GAP角色(Role)
有以下几种种GAP角色:
Central:中央设备
Peripheral:外围设备
Broadcaster:广播者
Observer:观察者
Central & Peripheral
第五种Central&Peripheral,在内部是两种角色进行按需转换,并非一种独立的角色。中央设备是向外围发起连接的设备,连接起来后就称为主设备(Master)。Peripheral是向外部广播的设备,连接起来后称为从设备(Slave)。因为建立连接需要进行数据收发,所以无论是Central还是Peripheral,他们都必须具有数据接收和发送的能力。
广播者是一个纯广播设备,观察者是一个纯扫描设备。假如功能需求极其简单,这两种角色可以是只接收或只发送的设备。iBeacon设备就可以设置为一个广播者角色。
与GAP角色相似的还有一个GATT角色概念。GATT角色包括以下三种:
GATT Server
GATT Client
GATT Server & Client
GATT Server是指数据服务器,有发送数据的需求,GATT Client指数据客户端,有接收数据的需求。GATT Server的特征值有Read/Write/Indicate等属性,配置后可以收发处理数据;而GATT Client的特征值是没有这些属性的,仅能够扫描读取GATT Server的特征值,针对Server的特征值进行读写。所以大多数情况下,Central扮演着GATT Client的角色,而Peripheral扮演着GATT Server的角色。不过这并不绝对,理论上无论Central还是Peripheral设备,它都可以是GATT Server,或者GATT Client。比如Alert Notification Profile,它是一个主机,提供扫描功能,但是连接后它是数据源,向外部提供数据,承担Server责任,因而它是GAP Central + GATT Server。总而言之,GAP角色决定了谁广播谁扫描,GATT角色决定了数据从哪里出发。
基本信息
设备地址
BLE设备地址为6字节,分两部分,前半部分为公司部分,后半部分为设备部分。一个典型的BLE设备地址为:00A050-123456,00A050表示Cypress,123456表示设备序号。BLE广播时候会携带设备地址,扫描时候也会记录设备地址,如果两个设备使用相同的地址,则会产生冲突,所以BLE的设备地址应该保证唯一。后半部分3个字节总共6个字符空间&