admin管理员组

文章数量:1550527

GATT

一、介绍

GATT主要定义了service及其characteristic的格式,以及如何discover、read、Write、notify、indicate以及如何配置广播characteristics

二、概述

2.1 协议模型

2.2 GATT中定义了2种角色:

Client:向Server发起command和request并从Server接收response、indications和notifications的设备

Server:接收来自Client的command和request,并向Client发送response、indications和notifications的设备

注意:一个设备可以同时是client和server

使用案例:

Computer是client,sensor是server,computer可以配置或者读取sensor中值,Sensor提供service和characteristics的信息、响应computer的read request及部分characteristics的write

2.4 ATTRIBUTE PROTOCOL(ATT)

2.4.1 概述

1、GATT使用ATT的commands、requests、responses、indications、notifications和 confirmations来发送数据,数据包含在Attribute Protocol PDUs里面,ATT PDU格式如下图所示:

(1)Attribute Opcode由3个字段组成:Authentication Signature Flag、Command Flag和Method;

(a)Authentication Signature Flag:表示PDU中是否包含Authentication Signature

(b)Command Flag:表示这个PDU是否是command

(c)Method:用来决定Attribute Parameters的格式和含义

(2)Attribute Parameters:具体的数据

(3)Authentication Signature:这个字段值是根据Security Manager协议计算出来的,这个字段是对Attribute Opcode和Attribute Parameters的校验

2、Attribute由4部分组成:Attribute Handle、Attribute Type、Attribute Value、Attribute Permissions

Attribute Handle:是Attribute的索引,Attributes是按照Attribute Handle的升序排列的,Attribute Handle可以从0x0001到0xFFFF中的任何一个值开始,但是两个连续的attribute handle之间可能相差不止1;

Attribute Type:是一个UUID用来描述Attribute Value的含义;

Attribute Value:是具体的attribute数据

Attribute Permissions:是Attribute的一部分,但是不能被读写,server使用这个参数设置attribute的权限,server端自己定义就可以,client不知道,所以没有说明占用多少个字节

2.4.2 Attribute Caching(attribute缓存)

1、Attribute caching是一种优化措施,允许client只需要discover Server的Attribute information(例如:Attribute Handles等)一次,以后再连接使用相同的attribute information时就不用再次discover Server,如果没有这种优化措施,那么client每次连接上都需要重新discover server

2、client需要缓存的Attribute information有:server的所有attributes的handle、GATT service characteristics values

3、server使用的Attribute Handles是不能随着时间修改的,意味着只要client discover一次就可以

4、一些特殊情况可能导致server的attribute handle被修改(例如:恢复出厂设置、固件升级等),如果server端发生service的增加、修改、删除,需要:

(1)如果基于GATT的service在server端的可用生命周期内无法更改,则Service Changed characteristic将不存在于server上,并且client在第一次discover Service之后不需要执行discover

(2)如果server的基于GATT的service支持修改,那么当service被增加、删除、修改时,server需要发送indication给client。

5、如果client和server之间有trusted relationship (i.e. bond),则attribute缓存在多次连接之间都是有效的,这种情况下,如果server端的service发生修改且client没有连接server时,当client再次连接server时,server需要发送一个indication给client。

6、如果client和server之间没有trusted relationship,则attribute缓存只在当次连接有效,在连接过程中如果server端的service发生变化会发送indication给client,client下一次连接server的时候,需要再次执行discovery

7、server端service发生变化时,应该发送Handle Value Indication给client,其中包含受影响的Attribute Handles的范围。Handle Value Indication中的value参数应该设备未两个16bit的Attribute Handles,分别是start Attribute Handle 和end Attribute Handle。

注意:server可能设置受影响的Attribute Handle的范围是0x0001到0xFFFF,这时候client需要重新discovery Server端的Attribute Handles

8、当client收到Handle Value Indication时,应该认为Handle Value Indication中包含的受影响的attribute handle范围内的attribute handle都是无效的,client必须要停止使用这些attribute handle并重新discovery

9、一旦server收到Handle Value Confirmation,就表示client已经知道需要更新Attribute Handles了

2.4.3 Attribute Grouping

GATT定义了三种类型的group attribute:«Primary Service»、«Secondary Service»、«Characteristic»;不是所有group attribute都是用ATT Read By Group Type Request读取,«Primary Service»和«Secondary Service»可能使用Read By Group Type Request读取,«Characteristic»不使用Read By Group Type Request读取

2.4.4 UUIDs

所有的16bit UUID都应该包含在2byte的字节内,所有的128bit UUID应该包含在16byte的字节内,所有的32bit的UUID都必须转化成128bit的UUID

2.5 GATT PROFILE HIERARCHY(GATT层次结构)

2.5.1 最上面一层是profile(可以理解成一个设备),一个profile由一个或者多个services组成,一个service由characteristics或者对其他service的引用(include)组成,每个characteristic包含一个value,也可能包含其他可选信息

2.5.2 Service

一个service是被service definition定义的,service definition可能包含其他services的引用、必须的characteristics和可选的characteristics

有两种类型的service:primary service和secondary service;primary service揭露设备的主要功能,primary service可包含其他service,primary service可用使用Primary Service Discovery程序搜索;secondary service是被primary service或者其他secondary service或者其他上层协议引用的服务

2.5.3 Included Services

included service是一种在当前service定义中引用其他service的方法,要包含其他service,首先在service定义的开始首先要使用一个include definition,当service定义时使用include service,被包含的service会成功新service的一部分,包含service的数量和层数没有限制

2.5.4 Characteristic

一个Characteristic由characteristic definition定义,一个characteristic definition包括一个characteristic declaration、一个characteristic value declaration、可能包含描述value的characteristic descriptors declaration(描述characteristic value或者权限配置)

2.7 CONFIGURED BROADCAST

对于LE physical links,Configured Broadcast是client告知server哪些Characteristic Value需要放入广播数据进行广播,对于BR/EDR physical links,Configured Broadcast不支持

注意:CONFIGURED BROADCAST就是client可以通过write characteristic definition里面的Client Characteristic Configuration descriptor设置characteristic value的Notification和Indication,前提是characteristic definition里面的characteristic declaration的characteristic property支持Notification或者Indication

本文标签: GATT