由于还没有看具体的代码,难免会有理解错误的地方,本着共同学习的态度和大家交流探讨;

在BLE中;GATT是焦点;

在链路层(LL),可以把设备分为主机和从机,从机广播,主机发起连接;

在GAP层,      可以把设备分为中心设备和外围设备;

在GATT层,    可以把设备分为服务端和客户端;

我们需要记住一点就是,这些划分相互是不受影响的;

在说GATT之前先说下ATT;

ATT的Client/Server架构:

服务设备提供数据,客户端使用这些数据;服务端通过操作属性的方式,提供数据访问服务设备的服务/客户角色,不依赖于GAP层中心设备/外围设备角色,和LL层的master/slave角色定义。一个设备可能同时做为一个客户端和服务端,而两个设备上的属性不会相互影响。

ATT的Attribute Table Example (属性表示例)

Handle:属性在列表中的地址

Type  :说明代表什么数据,可以是BluetoothSIG分配或者客户自定义的UUID(统一识别码,具有唯一性和通用性)

Permissions:权限,定义了client是否可以访问属性的值,以及特定的访问方式。

GATT的Client/Server架构:

GATT指定了profile数据交换所在的结构。

除了数据的封装方式不同,client/server和Attribute协议结构相同,数据封装在“Services”里,用“Characteristic”(特征)表示。

GATT的Services 中的Characteristic结构和ATT的Attribute 协议结构相同

GATT的Profile 层次结构:

为了实现用户的应用,profile通常有一个或者多个“Services”组成。

一个service或许包含某个特征值“characteristicvalues”(例如,在一个温度采集设备中,通常会包含一个温度的特征值)。

每一个特征值必须有占用一个特征声明结构,其中包括他的其他特性,它是服务端和客户端共享的读写空间,这个特征值可以包含一个可选的描述(descriptor字串),来指示这个特征值的含义。

GATT 的Characteristic Declaration(声明):

Handle 40 是一个特征值的声明,用0x2803来指示,这个0x2803 同样也是Bluetooth SIG的相关数据手册定义的,作为GATT

Characteristic Declaration的UUID

特征值的属性值包含5个字节的长度10:29:00:E1:FF

*0xFFE1,表明特征值的属类型(0xFFE1:客户自定义特征值的UUID)

*0x0029,是这个值所保存的位置handle(0x0029=41)

*0x10,表明这个特征值的操作权限0x10:notifyonly

GATT 的Characteristic  Configuration:

另外作为特征值声明,可以有一个可选的描述信息。

这个例子中,handle 42包含了特征值的配置信息,0x2902,这个值同样也是BluetoothSIG的相关数据手册定义的,作为GATTClient Characteristic Configuration的UUID。

这个配置值有读写权限,意味着,GATT客户端可以改变这个值。如果把这个值(通知开关使能)从0x0000 Notificationoff改为0x0001 notificationon,GATT服务器将开始发送这个特征值的通知到GATT客户端。

GATT Service Example:(这个是重点)

△Handle句柄——属性在表中的地址,每个属性有唯一的句柄。

△type 类型——表示数据代表的事务,通常是蓝牙技术联盟规定的或由用户自定义UUID。

△权限——对顶了GATT客户端设备对属性的访问权限,包括是否能访问和怎样访问。

首选我们来看一下GATT属性表中有一些特殊的属性类型,其值是由蓝牙技术联盟(SIG)定义:

△GATT_PRIMARY_SERVICE_UUID——表示新服务的起始和提供的服务类型;

△GATT_CHARACTER_UUID——称为“特征声明”紧随其后的是GATT特征值;

△GATT_CLIENT_CHAR_CFG_UUID——这一属性代表特征描述符,它与属性表中它前面最近的特征值有关,他允许GATT客户端设备使能特征值通知。

△GATT_CHAR_USER_DESC_UUID——这一属性代表特征值描述符,他与属性表中他前面最近的句柄处的特征值相关,包含一个ASCCI字符串,是对相关的特征的描述。

在Handle为39的一行中,0x2800表示新服务的起始,profile通常有一个或者多个“Services”组成。

在Handle为40的一行中,这个是特征声明;它的特征值的属性值包含5个字节的长度10:29:00:E1:FF

*0xFFE1,表明特征值的属类型(0xFFE1:客户自定义特征值的UUID)

*0x0029,是这个值所保存的位置handle(0x0029=41)

*0x10,表明这个特征值的操作权限0x10:notifyonly

个人感觉这个地方类似于C语言中的变量的定义:这个一行就相当于定义了一个整型变量a;

int a;0xFFE1就相当于a;0x0029类似于a在内存中的地址;

在Handle为41的一行中,其特征值就相当于a的值;这也是用户自定义的有效数据;

在Handle为42的一行中,这个是特征描述符,

在Handle为43的一行中,0x2800表示又一个新服务的起始

TI-BLE协议栈的GATT相关推荐

  1. TI BLE协议栈 按键流程分析

    之前在蓝牙技术群看到好多网友不知道按键流程到底是什么情况,平时也没时间,在群里也一两句说不明白,也就说了下可以去看下zigbee按键流程过程,其实都是相通的,现在特意发帖分享下,希望能起到一个抛砖引玉 ...

  2. 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

    目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...

  3. BLE协议栈学习2——OSAL

    OSAL简介 BLE 协议栈包含了 BLE 协议所规定的基本功能,这些功能是以函数的形式实现的,为了便于管理 这些函数集,BLE 协议栈内加入了实时操作系统(并非真正意义上的操作系统),称为 OSAL ...

  4. CC2541的BLE协议栈构成

      协议定义的是一系列的通信标准, 通信双方需要共同按照这一标准进行正常的数据收发: 协议栈是协议的具体实现形式, 就是用代码实现的函数库, 以便于开发人员调用.   BLE 协议栈将各个层定义的协议 ...

  5. java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈

    详解BLE连接建立过程 https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式-兼BLE Link layer协议解析 https://www. ...

  6. 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈

    深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实 ...

  7. 深入浅出低功耗蓝牙(BLE)协议栈,使用Ubertooth one扫描嗅探低功耗蓝牙

    BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 深入浅出低功耗蓝牙BLE协议栈 1. 协议栈框架 2. 如何通过无线发送一个 ...

  8. BLE 协议栈(Master,Slave;Standby,Advertiser,Scanner,Initiator;连接流程,连接参数)

    文章目录 1.BLE 协议栈的结构和配置(应用层,Host 主协议层,Controller 控制层) 2.BLE 物理层(PHY) 3.拓扑结构(星型拓扑) 4.设备状态(Master,Slave:S ...

  9. 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍

    原文链接:蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍 系列索引:蓝牙协议分析(1)_基本概念 蓝牙协议分析(2)_协议架构 目录 1. 前言 2. Why 3. How和What 4. Phy ...

  10. 从ESP32 BLE应用理解GATT

    目录 1.背景 1.1参考资料 1.2 GATT是什么玩意 2.ESP32 例程分析 2.1 GATT 服务器的架构组织 2.2 从GATT回调函数注册程序esp_ble_gatts_register ...

最新文章

  1. Python基础知识(第四天)
  2. 绝地求生大逃杀最新服务器,《绝地求生大逃杀》将建立该国家或地区玩家的专有服务器!...
  3. SPOJ-OPTM Optimal Marks ★★(按位建图 最小割)
  4. python socket编程_Python学习记录-socket编程
  5. 传三星Galaxy S10将推出Lite版本 搭载骁龙855处理器
  6. python csv合并单元格_python中合并表格的两种方法
  7. SpringBoot实战教程(6)| 整合Druid
  8. 创业团队如何与兼职做饭的阿姨结算工资比较好?
  9. 我真是个懒人,。。。
  10. 我的cocos2d-x集成sharesdk之旅(转)
  11. rk1808交叉编译opencv_我用AI视觉模组DIY了一个驾驶疲劳监测仪
  12. 麒麟系统常见问题详解
  13. SpringBoot整合CAS服务
  14. 《软件过程管理》 第七章 软件过程的质量管理
  15. css 3d环形,CSS3 飞行的3D圆环
  16. Mac下启动nacos
  17. 卧槽,泪目了!二哥被读者的深情告白了感动哭了!!!!
  18. 浅谈C/C++ 开发Excel插件之操作excel
  19. Elasticsearch是什么?
  20. python决策树分类案例_python实现决策树分类算法

热门文章

  1. 干货:阅读跟踪 Java 源码的几个小技巧!
  2. 动态规划:连续子数组的最大和
  3. 【Scratch】青少年蓝桥杯_每日一题_5.01_画三五七边型
  4. 鸿蒙发布的意义,华为鸿蒙正式发布!“鸿蒙”是什么意思?
  5. 无限级菜单 mysql设计_无限级菜单简单的设计
  6. 弱电工程计算机网络系统基础知识
  7. eclipse 提交git失败_简单10步教你使用eclipse整合gitee码云实现共享开发
  8. 数据传输完整性_生产系统数据完整性事件常见指标(下)
  9. 快速学python爬虫_Python爬虫丨应当如何快速高效学习
  10. 成功解决Module Not Found Error : No module named mglearn