白话BLE技术 第七篇 GATT

从这一篇开始,我们具体来说一下GATT的内容。

GATT也就是Generic Attribute Profile 一般属性规格,用来规定如何交换所有其他的规格和用户数据换句话说,GATT的主要功能就是解析数据。把GAP和GATT放在一起对比的话,GAP定义了设备间的交互方式,GATT只处理数据的传输和格式。

所有的BLE规格都是基于GATT,而且必须遵循GATT的操作要求。这使得GATT成为BLE规格的一个关键内容,因为所有的数据都要经过GATT。

GATT使用了ATT Attribute Protocol来在设备之间交换数据。这个数据是有层级结构的。最外层叫做服务,服务中包含特性。

角色

在任何协议和规格中,都有角色 。同样的,在GATT中也有角色的概念。GATT使用了服务器客户端的架构。

客户端

GATT客户端会响应ATT的客户端,他发送请求给服务器端,并且收到服务器发来的响应包。GATT客户端不会知道服务的属性,所以首先需要做的事情就是要先查询服务器上服务的内容通过执行服务发现的功能。在找到服务以后,GATT客户端会开始读取和写入属性值到服务器端。

服务器端

GATT服务器端对应的ATT的服务器端,它接收客户端发来的请求,并且发出响应。需要配置参数的时候,服务器端会发出更新。服务器端同时还会服务存储和管理用户的数据。每一个BLE设备都至少应该包含一个GATT服务器,因为BLE设备上都有数据,需要发出给客户端。

需要注意的是GATT的角色是完全独立于GAP的角色。一个GAP的中心设备可以同时是GATT的客户端或者服务器。

UUID

UUID,也就是universally unique identifier,是一个128位的数字串。UUID的作用是为了确保唯一性。UUID被使用在很多的协议和应用程序中。

128位,也就是16个字节,16个字节刚好可以占用一个链路层上发出的包的31个字节的空间,31个字节中有27个字节用来携带数据。

 

属性

属性是GATT中的最小数据单位。他们可以被解析,并且携带了用户的数据并且以固定的数据结构被整合起来。属性总是位于服务器上,并且被客户端访问。

句柄 handle

属性句柄是一个唯一的16位的识别符。他是属性的一部分,用来解析属性,并且这个句柄在传输中是不会改变的。在一个服务中,句柄的数量一共是65535个,这个数字就是2的16次方。

在一个GATT服务器上,句柄的递增决定了客户端访问属性时的顺序,句柄之间的间隔是被允许的,因此客户端不能靠着序列来猜测下一个属性的位置,因为下一个位置可能是空。

类型

属性的类型就是UUID,可以是16位,32位,或者128位的UUID,占据了2个,4个, 或者16个字节。可以根据类型来查询属性。

权限

权限是ATT操作的原始数据。

ATT和GATT定义了一些权限

访问权限

            类似于文件权限,访问权限决定了客户端是否可以读取或者是否可以写入属性数据。每个属性都可以有一个权限。

            None,就是不能被读取和写入

            Readable,可以被读取

            Writable,可以被写入

            Readable and writable,可以被读取和写入

加密

            属性需要一个特定的加密等级来控制是否可以被客户端访问。

            No encryption required(Security Mode 1, Level1), 以明文,不加密的方式来访问

            Unauthenticated encryption required(Security Mode 1, Level 2),连接必须要被加密,秘钥不需要被授权

            Authenticated encryption required(Security Mode 1, Level 3),连接必须要被加密,并且秘钥需要被授权。

 

授权

            在访问属性的时候,用户的权限是否被要求就叫做授权。

            No authorization required

            访问属性的时候不要求授权

            Authorization required

            访问属性的时候要求授权

 

属性里都包含真是的数据。对于可以包含些什么数据是没有要求的,也就是说包含的值的类型是没有要求的。但是蓝牙规格规定最大的长度是512个字节。

根据不同的属性类型,值可以包含额外的信息。如果有合适的权限,属性值可以被客户端随意访问,读取和写入。属性的结构是不可以被客户端修改的。

可以把GATT服务器考虑成一张表,每一个行代表一个单独的属性,每一个列代表组成属性的不同部分。

在这个GATT服务器上,有6个属性。可以看到每个属性都有5个部分组成,分别是句柄,类型,权限,数值和长度。有的属性的句柄是16位的,有的是128位的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值