admin管理员组

文章数量:1550527

目录

GATT  OverView

service 定义

include 定义

characteristic 定义

HCI log 分析: GATT discover service flow


GATT 是ble 的另一个 基本协议,总结了gatt 一些定义,最后通过一份hci log,说明一下GATT在实际应用中如何运作。

两年前初次接触ble 就是从GATT spec 开始入手学习,工作中更多的是下沉到bludroid stack 维护工作中,GATT基础知识通过整理blog,加深了自己的理解。凭着自己的工作经验,总结了GATT部分核心内容,可能仍有些许遗漏。

欢迎有兴趣的朋友留言,有描述不清或者有错误的地方,也欢迎指正

GATT  OverView

Gatt 是在ATT基础上的封装,定义了一些服务发现的框架。

整体框架图如上, GATT DataBase主要分为三个部分,service,include,characteristic,首先围绕这三个分别作介绍

service 定义

 

类型: 服务有两种类型,primary service 和secondary service,

primary service可以被其他service 所包含,可以通过discover 流程发现。

secondary service只能被primary service 或者其他secondary service 所包含,不能独立存在。

一个服务的类型,会在申明中注明。

组成:gatt 数据框架都是有一个或者多个service 并列组成的。

用户通过定义不同的service,实现不同的功能。

一系列ATT数据组成一个group,表示一个service。

所有的service都必须满足相同的数据要求,具体分为三个部分

1. 服务申明(必须)service 

2. 包含其他服务(可选)

3. 必须的特征和可选择的特征、

红色部分为一个服务必须包含的部分,蓝色为可选择的部分。

服务申明: 每个定义的service第一条就是服务申明, 因此以服务申明可以分隔开所有不同的服务。

服务声明的数据结构,ATT类型(仅有两种)+ ATT value(服务的具体类型,比如电量服务,GAP服务等等)

服务声明为read only,不可以被修改,有server 端在自定义数据表格的时候确定。

 

申明之后,紧跟include 和 characteristic部分。

 

include 定义

include 是解释服务之间的关系,secondary service只能被primary service 或者其他secondary service 所包含,不能独立存在。

include 是service 中可选择的部分,不强制要求必须有这一部分。

同服务一个样,include 也是从declaration 开始。

一条ATT仅包含一个include 信息。

include 申明格式:

ATT value: 包含的服务handle 是该服务对应的申明,  service UUID 是指该服务的类型

通过include 申明,可以查到包含服务的 开始handle和结束handle,及服务类型 三个信息

该申明也是read only,不可以被修改

 

characteristic 定义

特征必须要有申明和值申明,可能含有特征描述申明。

同服务一样,相邻的所有特征都是通过申明ATT 间隔开的。一个特征的结束handle 一定是下一个特征的申明handle

特征申明:

同服务申明格式一致,指出实际value对应的handle,及类型(uuid),方便解析

每一个申明都有属性,决定value 可以被操作的方法。

特征属性详解:

本文标签: 详解协议BLEGATT