服务和特征
如前所述,ATT层定义了属性以及客户端和服务器之间如何暴露数据。因此,GATT的主要功能之一就是将GATT服务器中存储的属性按层次结构组织为标准化实体(服务和特征),以实现不同蓝牙LE设备之间的无缝互操作。
属性(Attributes)
ATT层规定了如何在服务器的数据库中存储和访问数据。所有数据都以“属性(Attribute)”形式存储,属性是ATT和GATT的核心数据单位。属性包含用户数据,也有描述该属性本身的元数据,如类型、安全权限等。ATT和GATT之间的数据交换,实质上传输的就是属性。当只讨论属性时,它们存储于ATT服务器;当进一步对属性进行服务/特征分类后,便被称为GATT服务器的数据结构。
一个属性由以下四部分组成:
-
句柄(Handle):16位唯一编号,由协议栈分配,用于定位某一属性。类似于属性表的行号(但不保证连续)。
-
类型(Type, UUID):全球唯一标识(UUID),标识该属性的数据类型。例如,如果属性用于声明特征,则其Type字段就是用于声明特征的专用UUID。
-
权限(Permissions):标明读/写权限及安全等级(如需加密/鉴权)。
-
值(Value):该属性持有的实际数据,可是用户数据(如心率、温度、字符串等)或其它属性的元信息(如声明另一个Attribute)。

全球唯一标识 UUID
[UUID(Universally Unique ID)是Bluetooth LE中用于标识属性的号码,有两种类型:
-
16位SIG标准UUID。如心率服务UUID为0x180D,心率测量特征UUID为0x2A37。
-
128位UUID(厂商自定义UUID)。自定义服务/特征时使用,如4A98-xxxx-1CC4-E7C1-C757-F1267DD021E8,xxxx处填自己定义的16位ID。存储/编码时仅需记录Base UUID,然后用不同16位ID区分不同服务或特征。](pplx://action/translate)
服务(Service)
一个服务由多个属性按GATT标准格式排布而成,便于不同蓝牙LE设备间的标准化数据交换。
-
服务声明属性(Service declaration attribute):用于声明服务的起始,句柄由协议栈分配,Type字段为UUID 0x2800(SIG唯一),Permission通常设为只读Value字段填具体服务UUID(如心率服务UUID 0x180D)。


特征(Characteristic)
每个服务可拥有零个或多个特征。特征定义由至少两个属性组成:
-
特征声明属性(declaration attribute,Type=0x2803)
-
特征值属性(value attribute,实际用户数据封装其中)
-
可选:特征描述符属性(descriptor attributes),持有特征的更多元信息
-
特征声明属性:描述特征值的属性,Type字段为0x2803,只读。Value字段包含三段信息:特征权限(Properties)、特征值句柄(handle)、特征UUID。
-
特征值属性:存储实际用户数据,Permission决定属性是否可读写。
-
特征描述符:可选,提供特征的元数据。包括GATT定义和自定义类型。




客户端特征配置描述符(CCCD)
如心率服务中的心率测量特征,手机客户端通过CCCD使能通知或指示以获取状态更新,这样传感器设备(GATT服务器)会主动推送数据而不需要手机轮询。

您的资助是我最大的动力!
金额随意,欢迎来赏!

浙公网安备 33010602011771号