蓝牙协议栈之gatt(chapter 5)

一、概要

ATT 属性协议规定了在 BLE 中的最⼩数据存储单位,⽽ GATT 规范则定义了如何⽤特性值
和描述符表示⼀个数据,如何把相似的数据聚合成服务 (Service),以及如何发现对端设备
拥有哪些服务和数据。。
gatt规程可分为三种基本类型
1、发现规程
2、客户端发起规程
3、服务器发起规程,
4、MTU规程

GATT 连接需要特别注意的是:GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播

1.1、发现服务

发现服务有三种方式、
1、发现首要服务
2、按服务UUID发现首要服务
3、查找包含服务

1.1.1、发现首要服务

当客户端连接上后(GAP),首要需要获得首要服务上的设备功能,于是客户端使用handler递增的方式进行服务查找,当服务器把客户端设定的首要服务查找到并且回复给客户端后,那么这个handler对应的服务就位客户端设定的首要服务。

1.1.2、按照服务UUID发现首要服务

客户端将UUID对应的handler服务发送给服务器后,服务器回应客户端的首要服务请求的过程。

1.1.3、查找包含服务

一旦发现了首要服务后,并可以得到次要服务以及其他的引用服务,

主意:并不是所有的profile都是有client发起的,对于通知,指示profile是有server发起的。
客户端发起profile:读/写属性,读/写特征属性描述符
服务端发起profile:notify and indicate

二、gatt结构

在这里插入图片描述
PROFILE: profile并不是蓝牙协议栈上的东西,它只是一个被SIG通过预先设定的server的一个集合,比如心率profile就结合了heart rate server和device information server。
SERVER: server是将数据拆分为多个独立的逻辑项,它包含一个或者多个characteristic,没一个server有一个UUID唯一表示,UUID可为16bit或者32bit,16bit是官方经过认证的,需要花钱购买,32bit的为自定义的。
CHARACTERISTIC: characteristic是描述最小逻辑数据单元,它包含一组关联数据,比如温度值,三轴值等。

举个栗子:当然这里只是假设,纯粹猜测举的栗子
profile = 心率计
server0 = 心跳服务
characteristic0 = 13;//当前心率
characteristic1 = 25;//xxx

charactersticn =
server1 = 设备信息服务
。。。。。
servern = 设备名服务

总结:
1、gatt是定义众多profile的实现层,它的实现基础为att。
2、gatt通过查询att的属性数据库(以遍历式,uuid专项查找等方式)查找到相关的服务。
3、profile由一个或者多个不同UUID的server组成,一个server由一个或者多个characterstic(信息项)组成。

/***********************理论部分结束 **********************************/
推荐协议栈:btstack
或者android正在使用的bluedroid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值