BLE--GATT服务构成

GATT基本构成

最上层协议为profile,profile 中由多个 Server 组成,而 Server 由0 或多个《Include》和至少一个《Characteristic》 组成。
服务是指一系列由数据和相关行为组成的集合,为了去完成某个特定的功能或者特性。而一个服务可以包含引用服务即《Include》、强制性和可选的特征即《Characteristic》。服务是一种或多种特性的组合;特性则是由一种或多种属性组成。
下图为summary of GATT Profile Attribute types:
BLE--GATT服务构成_第1张图片
上图中可以看到有主要服务和次要服务,次要服务只能被首要服务引用,也就是只能被首要服务用《Include》进行包含来引用。次要服务不会被对端设备发现。

1、server 服务的声明格式:

server的格式更名如下:
BLE--GATT服务构成_第2张图片

2、Include 包含服务

同样当一个服务需要用到别的服务里面的某些值的时候,也可以通过«Include»来完成。
然而, «Include»一定是在服务声明之后才能使用的,那么服务声明有两种方式,首要服务可以引用另一个首要服务。首要服务也可以引用一个次要服务,从而使用次要服务公开行为。次要服务可以引用一个次要服务或者首要服务。不过次要服务引用次要服务情况很少,次要引用首要服务就更少了。

«Include»的声明格式:
BLE--GATT服务构成_第3张图片
从图中可以知道包含服务«Include»本身的 UUID=0x2802。它的属性值共有 3 个部分组成:需要包含的服务的句柄、组结束的句柄和需要包含的服务的 UUID。

上面有提到包含服务«Include»中包含有组结束的句柄,那么什么是组呢? 怎么定义的?

在 GATT Profile 中将属性类型分为 3 组:«首要服务»«Primary Service»,«次要服务» «Secondary Service»和«特性»«Characteristic»。 一个组开始于一个声明, 服务分组结束于下一个服务声明,特性分组结束于下一个特性的声明或者是下一个服务的声明。也就是服务声明对服务进行分组,特性声明对特性进行分组。

3、特性 Characteristic

应用时用的是属性的值,而应用中使用的属性值是特性分组中的,所以特性说明白真的很难。特性包含 3 个基本的要素:

  1. 特性声明
  2. 属性的值的声明
  3. 特性描述符

截取书中的例子
BLE--GATT服务构成_第4张图片

特性声明:特性声明本身的 UUID 值是 0x2803,特性声明中需要声明的特性是在属性值中的,属性值包含有 3 个字段:特性性质、属性句柄和属性类型, 且仅为只读。

如下图为特性声明格式:
BLE--GATT服务构成_第5张图片
特性声明中的属性值的 3 个字段中特性性质占 1 个字节,属性句柄占 2 个字节,属性类型要么是 2 字节 16bits 的 UUID 或者是 16 字节 128bits 的 UUID。

你可能感兴趣的:(蓝牙)