TI-BLE协议栈的GATT学习笔记-1
来源:互联网 发布:人力资源数据分析表 编辑:程序博客网 时间:2024/05/22 16:55
由于还没有看具体的代码,难免会有理解错误的地方,本着共同学习的态度和大家交流探讨;
在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为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协议栈的GATT
- TI-BLE协议栈的GAP
- TI-BLE协议栈的GAP
- BLE协议栈的学习笔记
- TI BLE协议栈简介
- BLE 协议栈之GAP与GATT层小小一瞥
- TI BLE 1.4.1 协议栈 定义128位UUID的方法
- TI BLE 协议栈 初始化流程图
- TI BLE协议栈软件框架分析
- TI BLE研究---- 蓝牙协议栈(GAP)
- TI BLE协议栈软件框架分析
- TI BLE协议栈 按键流程分析
- TI BLE协议栈中使用UART
- ble学习笔记八---------ble协议栈之简介
- ble学习笔记十一-----------ble协议栈之led试验
- ble学习笔记十四---------ble协议栈之按键事件
- TI 蓝牙协议栈视频学习笔记
- Keil C51 的printf sprintf
- spark-eclipse开发环境搭建
- 关于kindle无法联网(连wifi)解决方案
- 图结构练习——BFSDFS——判断可达性 SDUT 2138
- 九度oj 1098
- TI-BLE协议栈的GATT学习笔记-1
- 斩断一切看价值
- Centos安装ddd
- unity摄像机投影
- Maven学习总结(一)——Maven入门
- 如何察看显卡OpenGL的版本
- 网络流建模的一般方法
- 《Spring in Action 4》阅读札记
- 2015.08.20 联合更新数据库表(类似分组后取第一条数据的功能)