TI-BLE协议栈的GATT
由于还没有看具体的代码,难免会有理解错误的地方,本着共同学习的态度和大家交流探讨;
在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相关推荐
- TI BLE协议栈 按键流程分析
之前在蓝牙技术群看到好多网友不知道按键流程到底是什么情况,平时也没时间,在群里也一两句说不明白,也就说了下可以去看下zigbee按键流程过程,其实都是相通的,现在特意发帖分享下,希望能起到一个抛砖引玉 ...
- 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)
目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...
- BLE协议栈学习2——OSAL
OSAL简介 BLE 协议栈包含了 BLE 协议所规定的基本功能,这些功能是以函数的形式实现的,为了便于管理 这些函数集,BLE 协议栈内加入了实时操作系统(并非真正意义上的操作系统),称为 OSAL ...
- CC2541的BLE协议栈构成
协议定义的是一系列的通信标准, 通信双方需要共同按照这一标准进行正常的数据收发: 协议栈是协议的具体实现形式, 就是用代码实现的函数库, 以便于开发人员调用. BLE 协议栈将各个层定义的协议 ...
- java 协议栈_深入浅出讲解低功耗蓝牙(BLE)协议栈
详解BLE连接建立过程 https://www.cnblogs.com/iini/p/8972635.html 详解BLE 空中包格式-兼BLE Link layer协议解析 https://www. ...
- 蓝牙:深入浅出低功耗蓝牙(BLE)协议栈
深入浅出低功耗蓝牙(BLE)协议栈 BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 协议栈框架 一般而言,我们把某个协议的实 ...
- 深入浅出低功耗蓝牙(BLE)协议栈,使用Ubertooth one扫描嗅探低功耗蓝牙
BLE协议栈为什么要分层?怎么理解BLE"连接"?如果BLE协议只有ATT层没有GATT层会发生什么? 深入浅出低功耗蓝牙BLE协议栈 1. 协议栈框架 2. 如何通过无线发送一个 ...
- BLE 协议栈(Master,Slave;Standby,Advertiser,Scanner,Initiator;连接流程,连接参数)
文章目录 1.BLE 协议栈的结构和配置(应用层,Host 主协议层,Controller 控制层) 2.BLE 物理层(PHY) 3.拓扑结构(星型拓扑) 4.设备状态(Master,Slave:S ...
- 蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍
原文链接:蓝牙协议分析(3)_蓝牙低功耗(BLE)协议栈介绍 系列索引:蓝牙协议分析(1)_基本概念 蓝牙协议分析(2)_协议架构 目录 1. 前言 2. Why 3. How和What 4. Phy ...
- 从ESP32 BLE应用理解GATT
目录 1.背景 1.1参考资料 1.2 GATT是什么玩意 2.ESP32 例程分析 2.1 GATT 服务器的架构组织 2.2 从GATT回调函数注册程序esp_ble_gatts_register ...
最新文章
- Python基础知识(第四天)
- 绝地求生大逃杀最新服务器,《绝地求生大逃杀》将建立该国家或地区玩家的专有服务器!...
- SPOJ-OPTM Optimal Marks ★★(按位建图 最小割)
- python socket编程_Python学习记录-socket编程
- 传三星Galaxy S10将推出Lite版本 搭载骁龙855处理器
- python csv合并单元格_python中合并表格的两种方法
- SpringBoot实战教程(6)| 整合Druid
- 创业团队如何与兼职做饭的阿姨结算工资比较好?
- 我真是个懒人,。。。
- 我的cocos2d-x集成sharesdk之旅(转)
- rk1808交叉编译opencv_我用AI视觉模组DIY了一个驾驶疲劳监测仪
- 麒麟系统常见问题详解
- SpringBoot整合CAS服务
- 《软件过程管理》 第七章 软件过程的质量管理
- css 3d环形,CSS3 飞行的3D圆环
- Mac下启动nacos
- 卧槽,泪目了!二哥被读者的深情告白了感动哭了!!!!
- 浅谈C/C++ 开发Excel插件之操作excel
- Elasticsearch是什么?
- python决策树分类案例_python实现决策树分类算法
热门文章
- 干货:阅读跟踪 Java 源码的几个小技巧!
- 动态规划:连续子数组的最大和
- 【Scratch】青少年蓝桥杯_每日一题_5.01_画三五七边型
- 鸿蒙发布的意义,华为鸿蒙正式发布!“鸿蒙”是什么意思?
- 无限级菜单 mysql设计_无限级菜单简单的设计
- 弱电工程计算机网络系统基础知识
- eclipse 提交git失败_简单10步教你使用eclipse整合gitee码云实现共享开发
- 数据传输完整性_生产系统数据完整性事件常见指标(下)
- 快速学python爬虫_Python爬虫丨应当如何快速高效学习
- 成功解决Module Not Found Error : No module named mglearn