GATT两个角色 服务器与客户端

原创 2016年08月29日 16:11:42

两个设备应用数据的通信是通过协议栈的GATT层实现的。

从GATT角度来看,当两个设备建立连接后,他们处于以下两种角色之一:

GATT服务器: 它是为GATT客户端提供数据服务的设备

GATT客户端: 它是从GATT服务器读写应用数据的设备

 

GATT角色中的客户端和服务器的概念与链路层的主机和从机的概念完全独立,与GAP角色中的外设和集中器的概念也是完全独立的。主机既可以是GATT客户端,也可以是GATT服务器;从机既可以是GATT客户端,也可以是GATT服务器。

一个GATT服务器中可包含一个或多个GATT服务,GATT服务是完成特定功能的一系列数据的集合。在SimpleBLEPeripheral应用中有三个GATT服务。

1、强制的GAP服务。这一服务包含了设备的访问信息,如设备名,设备供应商和产品标识。它是协议栈的一部分,是BLE规范对每一个BLE设备的强制要求。

2、强制的GATT服务。这一服务包含了GATT服务器的信息,是协议栈的一部分,是BLE规范对每一个BLE设备的要求。

3、SimpleGATTProfile服务。这个服务包含了应用数据的信息,与应用数据的传递密切相关,可按照特定的格式编写自己的GATT服务

 

特性Characetristics是服务用到的值,以及其内容和配置信息。GATT定义了在BLE连接中发现、读取和写入属性的子过程。GATT服务器上的特性值极其内容和配置信息(称为描述符)存储在属性表中。属性表是一个数据库,包含了成为属性的小块数据,除了值本身,每个属性都包含了下列属性:

         1、句柄。属性表中的地址,每个属性有唯一的句柄;

2、类型。表示数据代表的事物,通常是SIG规定或由用户自定义的UUID(UniversallyUnique Identifier);

3、权限。规定了GATT客户端设备对属性的访问权限,包括是否能访问和怎样访问。

 

         GATT定义了若干GATT服务器和客户端之间通信的子过程:

1、读特性值。客户端设备请求读取句柄处的特性值,服务器将此值回应给客户端(假定属性有读取权限)。

2、使用特性的UUID读。客户端请求读基于一个特定类型的所有特征值,服务器将所有与指定类型匹配的特性的句柄和值返回给客户端设备(假定属性有读权限)。

3、读多个特性值。客户端一次请求中读取几个句柄的特性值,服务器将这些特性值回应给客户端(假定属性有读权限)。客户端需要知道如何解析这些不同的特性值数据。

4、读特性描述符。客户端请求读特定句柄处的特性描述符,服务器将特性描述符的值回应给客户端设备(假定属性有读权限)。

5、使用UUID发现特性。客户端通过特性的类型(UUID)来请求发现这个特性的句柄。服务器将这个特性的声明回应给客户端设别,其中包括特性值的句柄以及特性的权限。

6、写特性值。客户端设备请求向服务器特定的句柄处写入特性值,服务器将数据是否写入成功的信息返回给客户端。

7、写特性描述符。客户端设备请求向服务器特定的句柄处写入特性描述符,服务器将特性描述符是否写入成功的信息反馈给客户端。

8、特性值通知。服务器将一个特性值通知给客户端。客户端设备不需要向服务器请求这个数据,当客户端收到这个数据时,也不需要回应服务器,但需要注意的是,要想使能服务器通知,首先要配置好特性,profile中定义了什么时候服务器应该发送这个数据。

 

每个profile初始化其相应的服务并内在地通过设备的GATT服务器来注册服务。GATT服务器将整个服务加到属性表中,并为每个属性分配唯一句柄。

GATT属性表中有一些特殊的属性类型,由SIG定义:

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

GATT_CHARACTER_UUID 特性声明,紧随其后的是GATT特性值

GATT_CLIENT_CHAR_CFG_UUID 代表特性描述符,与属性表中它前面最精的句柄处的特性值相关,允许GATT客户端设备使能特性值通知

GATT_CHAR_DESC_UUIS 代表特性描述符,与属性表中它前面最精句柄处的特性值相关,包含一个ASCII字符串,是对相关的特性的描述。

 

总结:GATT包含若干个Profile,一个Profile包含若干个Services,一个Service包含若干个Characteristics,一个Characteristic包含Properties字段和若干个Descriptor(可选)。

GATT调用下层的ATT,ATT的attirbute在GATT中表现为Characteristic。

 

GATT协议及蓝牙核心系统结构

本文内容是阅读自以下链接后整理的笔记,理解还不深:https://www.bluetooth.com/specifications/bluetooth-core-specificationhttps:...

android ble 蓝牙4.0多机通讯客户端实现

自从进入软件开发行业,都是一直在CSDN上索取无数资料,一直没有贡献过,今天突然想写点什么,第一次写,写点简单的吧,不知道有没有人看。 蓝牙从4.0开始,支持了多设备通讯,android 4.3开始...

Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

Android BLE与终端通信(三)——客户端与服务端通信过程以及实现过几天更新...

Android BLE与终端通信(四)——实现服务器与客户端即时通讯功能

标签: androidsocket即时通讯服务器通信 2016-01-27 22:19 2891人阅读 评论(21) 收藏 举报  分类: Android(110)  ...

TI-BLE协议栈的GATT学习笔记-1

由于还没有看具体的代码,难免会有理解错误的地方,本着共同学习的态度和大家交流探讨; 在BLE中;GATT是焦点; 在链路层(LL),可以把设备分为主机和从机,从机广播,主机发起连接; 在GA...

蓝牙【GATT】协议介绍

在这之前我们得先了解一下一些专业词汇: 1、profile profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER G...

BLE 协议栈 之串口收发

曾经曾经的一篇关于串口收发的博客,是直接使用串口中断收发的,虽然这样实现了收发功能,但是对于大量数据传送的时候,就会出现数据收发不及时的情况,无意间发现了一种更为简单的方式,十分方便快捷~     ...

TI-BLE协议栈的GATT学习笔记-1

由于还没有看具体的代码,难免会有理解错误的地方,本着共同学习的态度和大家交流探讨; 在BLE中;GATT是焦点; 在链路层(LL),可以把设备分为主机和从机,从机广播,主机发起连接; 在GA...

Exchange Server 2013系列六:客户端访问服务器角色高可用性概述

原文地址:http://dufei.blog.51cto.com/382644/1408651 作者:dufei 作者声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和...
  • Dancen
  • Dancen
  • 2015年05月06日 21:52
  • 825

完成端口服务器中转两个客户端之间的通信(二)

先前整的完成端口服务器在进行客户端之间的通信时有些bug.在通过网上和人交流后,采用了逻辑线程、消息队列来进行服务器中转操作。大体上只是用了这个理念,自己夏琢磨这写的。真正的消息队列和逻辑线程可能认识...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GATT两个角色 服务器与客户端
举报原因:
原因补充:

(最多只允许输入30个字)