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
版权声明:本文标题:GATT(一) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727247066a1104754.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论