0 Preface/Foreword
references: Bluetooth core specification V5.4
definition:定义
declaration:声明
1 service definition(服务定义)
服务定义(definition):必须包含服务声明(declaration),可能包含include定义(definitions)和characteristic定义(definitions)。
服务定义在下一个服务声明前结束,或者达到了最大的Attribute Handle之后,服务定义以Attribute Handle的顺序出现在服务器(server)上。
包含在service里面的Include 定义和Characteristic定义被认为是service的组成部分。所有的Include定义需要(shall)紧接着service声明,而且需要在任何的Characteristic定义之前。一个service定义可能(may)含有0个或者多个Include定义,所有的characteristic定义需要紧接着最后一个Include定义,或者如果没有Include定义,那么就需要紧接着在service声明后面。一个service定义可以包含0个或者多个characteristic定义。一个service里面的Include定义和characteristic定义的个数没有上限(upper limit)。
1.1 service declaration
服务声明格式如下:
- Attribute Handle
- Attribute Type, 表面服务类型,0x2800(Primary Service)还是0x2801 (Secondary Service),
- Attribute Value,该值代表的是Sevice UUID,可以是16-bit的Bluetooth UUID,也可以是128-bit的UUID。GATT client必须支持16-bit和128-bit的UUID。Unknown service UUID是一个unsupported service UUID,GATT client可能会忽略任何一个unknown service UUID。
- Attribute Permission,service 声明属性必须是只读,并且不需要鉴权或者授权。
当包含多个services,16-bit Bluetooth UUID服务需要放在一个组(grouped together),128-bit UUID服务需要放在一个组(grouped together)。
注意事项:
- 一个设备或者一个更高级别的规范可能会有多个服务定义,并且包含的多个服务定义使用同一个service UUID
- 所有在GATT server的Attributesb必须或者包含一个service declaration或者存在于一个service definition
- 包含在GATT server上的service definitions可能会以任何顺序(in any order)出现(appear),GATT client不需要呈现(assume)在GATT server端的service definitions顺序。
2 include definiton
一个include definition必须包含只有一个include declaration。
格式如下:
- Attribute Handle
- Attribute Type, 0x2802, UUID for Include
- Attribute Value,包含3部分组成
- Attribute Permission, 只读,不需要authentication 或者authorization
注意事项如下:
3 Characteristic definition
一个特性定义(characteristic definition)包含的部分如下:
- 一个characteristic declaration, mandatory(shall)
- 一个characteristic value declaration, mandatory (shall)
- characteristic descriptor declarations, optional (may)
以上的每个declaration,都是独立的attribute。 特性value的声明必须紧接着特性声明,所有的特性描述符声明放在特性值描述符后面,描述符的顺序没有特殊含义。
一个特殊作用的特性定义如下:
3.1 属性声明 (characteristic declaration)
格式说明如下:
- Attribute Handle
- Attribute Types, 0x2803,该UUID表示characteristic
- Attribute Value,包含三个部分,properties, value attribute handle, UUID
- Attribute Permissions, 只读,不需要鉴权和授权
3.1.1 value介绍
一个服务可能包含多个特性定义使用同一个特性UUID。
在一个服务里面,一些特性是强制包含,强制包含的特性需要放在(locate)Include声明后和可选特性之前。
与service UUID类型,16-bit Bluetooth的特性UUID放在一组,128-bit Bluetooth的特性UUID放在一个组(grouped together)。
3.1.2 properties
对应的位设置为1,标明有对应的功能。 property field的字段可以决定以下内容:
- 特性值
- 特性描述符
3.1.3 Value attribute Handle
这个attribute handle是包含了Characteristic Value的Attribute的Attribute Handle.
3.1.4 characteristic UUID
该UUID是16-bit Bluetooth UUID或者128-bit UUID。
3.2 Characteristic Value declaration
该数据格式包含的内容如下:
- Attribute Hanble
- Attribute Type, 16-bit Bluetooth或者128-bit UUID,该UUID与Characteristic declaration中的UUID相同。
- Attribute Value,该值为对应characteristic value的值
- Attribute Permissions, 权限被service指定或者被详细实施
3.3 Characteristic descriptor declarations
CD: Characteristic Descriptor
CV:Characteristic Value
CD用来包含CV相关的信息。GATT profile定义了一个标准的可以被更高层profiles使用的CD集(高层profiles也可能(may)会定义专有的(higher layer profiles specific)的CD)。每一个CD通过CD UUID识别,同样该UUID包括16-bit Bluetooth和 128-bit UUID。
3.3.1 Characteristic Extended Properties
CEP:Characteristic Extended Properties
CP:Charateristic Property
CEP declaration是一个定义附加CP的描述符。是否包含取决于Extended properties bit。该CD可能(may)出现(occur)在任何在CD(characteristic definition)定义内的CV位置后。在一个特性定义中,只能存在一个CEP。
该数据格式包含的内容:
- Attribute Hanble
- Attribute Type, 固定的UUID,0x2900
- Attribute Value,包含2 octets 长度(length)
- Attribute Permissions,可读(readable),不包含(without)鉴权和授权需求(required)。
3.3.2 characteristic user description