首页
学习
活动
专区
工具
TVP
发布

低功耗蓝牙属性实例说明

一、属性(Attribute)

用过BLE的同学都知道“属性” (简称ATT),那么什么是属性呢?宽泛的讲,属性是一条带有标签的、可以被寻址的数据。

属性由3部分组成:属性句柄、属性类型、属性值,如图1所示。

图1 属性结构

1、属性句柄(Attribute Handle)

有效的ATT句柄范围是0x0001 ~ 0xFFFF。如图2所示,最左侧一列就是ATT句柄,从0x0001开始。

图2 通用属性

2、属性类型(Attribute Type)

128位通用唯一识别码(UUID)用来标识ATT的类型。为了提高传输效率,蓝牙技术联盟(SIG)定义了一个128位的“蓝牙UUID基数”(00000000-0000-1000-8000-00805F9B34FB),结合一个16位的数使用。

低功耗蓝牙使用的UUID被分为5组:

0x1800 ~ 0x26FF:服务类型;

0x2700 ~ 0x27FF:计量单位;

0x2800 ~ 0x28FF:属性类型;

0x2900 ~ 0x29FF:特性描述;

0x2A00 ~ 0x7FFF:特性类型;

下面是SIG官网对各组UUID定义的链接地址:

服务类型:https://www.bluetooth.com/specifications/gatt/services

属性类型:https://www.bluetooth.com/specifications/gatt/declarations

特性描述:https://www.bluetooth.com/specifications/gatt/descriptors

特性类型:https://www.bluetooth.com/specifications/gatt/characteristics

例如,在图3中

ATT句柄为0x0022的属性,第2列UUID “0x2800”表示ATT类型是“主服务”,第4列值为“0x1812”表示服务类型是“HID服务”;

ATT句柄为0x0023的属性,第2列UUID “0x2803”表示ATT类型是“特性声明”;

ATT句柄为0x0024的属性,第2列UUID “0x2A4D”表示ATT类型是“报告”;

ATT句柄为0x0025的属性,第2列UUID “0x2902”表示特性描述是“客户端特性配置”;

图3 HID服务

如果自定义一个服务,一般会指定一个128位的UUID,这个UUID不能和SIG已经定义的服务类型相同。

例如,图4展示了一个未知服务,包含1个主服务,UUID为“AB5E0001-5A21-4F05-BC7D-AF01F617B664”。

还包含3个特性,第1个特性声明了UUID为“AB5E0002-5A21-4F05-BC7D-AF01F617B664”的属性用于接收客户端发来的数据,支持写入操作(ATT句柄为0x0036的属性,属性值的第1个字节为0x08,即Bit3为1,所以支持写入操作。参考后面的“特性声明”部分);

第2个特性声明了UUID为“AB5E0003-5A21-4F05-BC7D-AF01F617B664”的属性用于发送数据给客户端,支持读取和通知操作(ATT句柄为0x0038的属性,属性值的第1个字节为0x12。Bit1为1,所以支持读取操作;Bit4为1,所以支持通知操作。参考后面的“特性声明”部分),从图中蓝色部分可以看出数据长度为20字节;

第3个特性声明了UUID为“AB5E0004-5A21-4F05-BC7D-AF01F617B664”的属性用于发送数据给客户端,支持读取和通知操作(ATT句柄为0x003B的属性,属性值的第1个字节为0x12。Bit1为1,所以支持读取操作;Bit4为1,所以支持通知操作。参考后面的“特性声明”部分),从图中蓝色部分可以看出数据长度为1字节;

图4 未知服务

3、属性值(Attribute Value)

ATT值长度从0字节到最长512字节,但某些类型的ATT值长度是固定的。例如,图4中ATT句柄为0x003A的属性,UUID“0x2902”表示ATT类型是“客户端特性配置”,该属性的ATT值就是固定的2个字节长度(参考后面的“特性描述”部分)。

二、特性(Characteristic)

特性就是把一些属性组合在一起,归为一类。例如,图3中ATT句柄从0x002B到0x002E的4个属性就组成了一个特性,其行为就是要发送数据给客户端。

特性包含3个要素:

声明;

数值;

描述;

1、特性声明(Characteristic Declaration)

特性声明的UUID为0x2803,即ATT类型为特性声明(0x2803)。

图5 特性声明

(1)性质(Properties)

长度为8位,确定了特性数值属性对操作的支持情况,包括:读取、写入、通知、指示、广播、命令、签名认证。每一位表示一种操作,Bit位为1表示支持该项操作,为0表示不支持,如表1所示。

表1 特性的性质

(2)数值句柄(Value Handle)

与客户端进行数据交互的属性句柄,即实际用来传输数据的属性句柄。

(3)特性UUID(Characteristic UUID)

标识特性数值的类型的UUID。

例如,图3中ATT句柄为0x002B的属性就是一个“特性声明”,第4列ATT值为“1A:2C:00:4D:2A”。其中第1个字节0x1A(0b00011010),表示性质支持读取、写入和通知;第2和3字节组合后即0x002C,表示用来传递数据的ATT句柄为“0x002C”;第4和5字节组合后即0x2A4D,表示该特性数值的类型为“0x2A4D”(Report)。

2、特性数值

也是一个属性,属性类型必须与特性声明的特性UUID字段一致。

例如,图3中ATT句柄为0x002C的属性就是一个“特性数值”,ATT类型UUID为“0x2A4D”,就是在ATT句柄为0x002B的“特性声明”的ATT值中指定的。

3、特性描述

“特性描述”的UUID范围0x2900-0x290F,如表2所示。一个特性可以包含任意多的描述。

表2 特性描述

例如,客户端特性配置的ATT值长度2个字节,Bit0表示通知是否使能,Bit1表示指示是否使能,其它14个Bit未定义。在图3中,ATT句柄为0x002D的属性就是一个“客户端特性配置”,其ATT值为“0x0001”,就表示通知操作已打开。

三、服务

一个服务就描述了一种数值。例如,电池服务就描述了电量值是如何传给客户端的;设备信息服务描述了设备相关信息。HID服务描述了人机交互设备是如何交互数据的。从图2、3、4,我们也可以看出服务包含了一个或多个特性,可以简单的认为服务就是多个特性的集合。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180519G0KYG100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券