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 协议结构相同

GATTProfile层次结构:

为了实现用户的应用,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表示又一个新服务的起始




        

0 0