通用属性配置文件(GATT)
正如GAP层负责连接相关的功能,GATT主要是负责在两个已经连接的设备交互数据,GAP层把BLE设备区分为主机Master(Central)和从机Slave(Perpherial),在GATT层则区分为Server和Client。客户端读取和写入存储在服务端的特征值(Characteristics )。
Server
该设备包含由GATT客户端读取或写入的characteristic。
Client
从GATT服务器读取或写入数据的蓝牙设备。
注意:对于GATT分层的Server/Client角色和GAP分层的Master(Central)/Slave(Perpherial)并没有直接关系。如上图,手机作为Central/Client,CC2640R2开发板作为 Peripheral/Server。
GATT的Profile、Service、Characteristics、Attributes
对于GATT层的Profile、Service、Characteristics、Attributes概念,我们一定要深入理解,因为一旦建立连接后,不管是嵌入式端还是应用端进行数据交互的都是这些概念。为了帮助理解,我们抽象以下包含关系:
一个或者多个Characteristic组成一个Service,一个多个Service组成Profile,Characteristic又由多个Attributes组成,每个Attribute由包含 Handle、Type、Permissions三个属性。
以下我们着重理解Characteristic,也是我们数据交互的最终实体,每个特征包含以下4个Attributes。
-
Characteristic Value(特征值)
用于characteristic的值 -
Characteristic Declaration(特征声明)
存储特征值的属性,位置和类型的描述符 -
Client Characteristic Configuration(客户端特征配置)
允许GATT服务器配置要通知的特性(异步发送消息)或指示的配置(与确认异步发送消息) -
Characteristic User Description(特征用户描述)
描述特征的ASCII字符串
这些属性存储在属性表中的GATT服务器中。除了该值之外,以下属性与每个属性相关联。
以上的每个Attributes 又由以下元素组成。
-
Handle(句柄)
表中属性的索引(每个属性都有一个唯一的句柄)