前言
上一篇《BLE基础知识(一)》聊到GAP,接下来继续来聊聊ATT, GATT等内容,这些在BLE中应用还是比较多的。
ATT
**ATT(Attribute protocol)**协议是为了允许设备读写保存在Server上的数据值。每个存储值就是一个属性。
ATT定义了属性的内容,规定了访问属性的方法和权限。平时我们的BLE设备就是通过属性进行数据收发的。
ATT定义了两种角色:Client和Server。
- Server:存储属性,接收Client的ATT请求,命令和确认。
- Client:接收Server的应答,指示和通知。
GATT
GATT(Generic Attribute Profile) 是建立在ATT之上的。为传输数据建立通用操作和框架。
GATT也定义了两种角色: Server和Client。GATT Client也是一个ATT Client,GATT Server也是一个ATT Server,所以GATT角色不需要去专门绑定ATT角色。
- Server:一般就是进行广播,被连接的设备。
- Client:一般就是进行扫描,然后主动去连接的设备。
GATT还指定了GATT Server上包含的数据格式。由属性协议传输的属性被格式化为服务和特征。来看看下图:
上图定义了一些概念及它们之间的包含关系,这些概念还是很重要的,接下来我们来一一解释。
1. Service — 服务
简单理解就是提供某项服务或功能。比如心率,电池监测等都可以定义为一个服务。
系统可以有两种service:主要(primary)和次要(secondary)
primary: 提供设备的主要功能
secondary:提供设备的附加功能
2. Included services — 包含服务
类似于包含头文件,就是将其他共用的服务包含进来。
3. Characteristic — 特征
可以理解为服务中的某个特性,比如心率服务,就会有个心率值,心率值就可以定义为一个Characteristic 。
4. Properties — 属性
这里的属性和上面的Attribute不一样。这里的属性定义的是Read / Write / Notify / Indicate等,用于声明Characteristic是否可读可写等属性。
5. Value — 值
用来保存数值的。
6. Descriptor — 描述符
用于描述Characteristic,让用户更能理解该Characteristic的作用和如何使用。
通过上图,我们可以看出Service的数据结构定义。