Bluetooth Profile 蓝牙协议栈总结

GAP-Generic Access Profile

控制设备广播和连接

GAP profile 的目的是描述:

  • Profile roles
  • Discoverability modes and procedures
  • Connection modes and procedures
  • Security modes and procedures
    在这里插入图片描述在这里插入图片描述
    设备连接过程
    在这里插入图片描述
    LE中GAP有4种角色:
  • Broadcaster
  • Observer
  • Peripheral - 数据源,如手环;连接后是slave模式
  • Central - 中心设备,如手机,PC;连接后是master模式

在这里插入图片描述

ATT-Attribute Profile

ATT协议定义了一些角色,每个角色都有它特定的功能。这些角色都是基于Client-Server架构的。

  • 服务器(Server):作为一个数据库,存储可被客户端读写的数据
  • 客户端(Client):请求服务器上的数据

但有一个误区:Central设备将作为ATT的客户端,Peripheral设备将作为ATT的服务端。但实际上Central和Peripheral都既可以做服务端,也可以做客户端。比如,一个可以记录步数、心率等信息的蓝牙智能手环。当手环想向手机传输这些信息的时候,它作为服务端,而手机作为客户端;手环上可以显示当前的时间,这是由手机传过去的,此时手机作为服务端,而手环作为客户端
ATT协议负责为服务端设备提供客户端能读写的指定格式化的数据,以及客户端访问、写入和读取数据的机制。
1. Attribute
ATT协议定义了一个叫attribute的数据结构,该数据结构由下列四个字段组成:
在这里插入图片描述

  • Attribute Handle :用于给客户端查找一个服务端attribute的uint16_t类型的唯一标识符,也就是给attribute一个“地址”
  • Attribute Type (UUID) :全局唯一的2或16字节的UUID标识符,定义储存于Attribute Value中的数值的具体类型和含义
  • Attribute Value:属性值
  • Attribute Permissions:它表示访问Attribute Value的权限,或者说设置一个属性的安全等级

在服务端,数据以如下Attribute表格形式存储:
在这里插入图片描述
2. Attribute访问方式
ATT协议还定义了读写属性的方式。具体的方式取决于发起属性访问过程的是客户端还是服务端。
1 客户端发起属性访问,有两种操作——WriteRead

  • 客户端使用Read从服务器读取属性的值,服务器响应属性的值
  • 客户端使用Write将一个属性的值写入服务器,服务器响应写操作是否成功

2 服务端发起属性访问,有两种操作——NotificationIndication

  • Notification:当Attribute发生改变时,服务端使用该种方式向客户端发送更新后的属性值,客户端收到后不响应此操作
  • Indication:与Notification类似,但是客户端必须发送是否正确收到该Attribute的响应、
    在这里插入图片描述

3 Attribute访问权限
访问权限决定客户端是否可以读、写或读写其中某个属性值,可选权限如下:

  • None:没有读写权限
  • Readable:可读
  • Writable:可写
  • Readable and writable:可读写

注意:Attribute handle和Attribute type是公共信息,而Attribute Value和Attribute Permissions是私有信息。为了让客户端可以访问这两个私有信息,服务端需要进行如下操作:

  • 读或写的身份验证
  • 读或写的授权
  • 读或写的加密和配对

总结

  • ATT协议负责管理设备之间的数据存储。它为服务端提供了一种客户端可以进行读写的Attribute数据结构,并为客户端提供了访问、写入和读取数据的机制(访问方法和权限)。
  • GATT层定义了一个层次化的数据结构,它有助于理解存储在服务端中数据(GATT Profile)之间的关系。

原文链接:https://blog.csdn.net/tilblackout/article/details/127944589

GATT-Generic Attribute Profile

GATT层负责定义分层数据结构,该结构演示了ATT服务器中存储的数据之间的关系或连接。(类似文件夹和文件)
GATT协议层定义了一个框架,在该框架中,服务端数据库上的Attribute可以被组织起来而有一定的层次关系。GATT层定义了一个4层树形框架,其中根节点为Profile(配置),它有不同的Services(服务),不同的服务有不同的Characteristics(特征),不同的特征通过一个具体的Value(值)或者Descriptor(描述符)来定义,如下图所示。
在这里插入图片描述
在这里插入图片描述

Service结构
在这里插入图片描述
在这里插入图片描述

Characteristic结构

Characteristic有一个特殊的descriptor——Client Configuration Characteristic descriptor(CCCD)
一般而言,都是cilent来访问server的characteristic,我们把这种操作称作为读或写,另外,server可以直接把自己的charactertis的值告诉client,我们称作为notify或者indicate,跟read操作相比,只有需要传输数据的时候或者说数据有效时,server才开始notify或者indicate数据到client,因此这种操作方式可以大大节省server的功耗,有时候client不想监听characteristic notify或者indicate过来的数据,那么就可以使用CCCD来关闭characteristic 的notify或者indicate功能,如果client又需要监听characteristic 的notify或者indicate,俺么它可以重新使能CCCD来打开相关操作,总结一下,当characteristic 具有notify或者indicate操作功能时,那么必须添加CCCD,以方便cilent来使能或者禁止notify功能

GATT通过ATT传输数据
在这里插入图片描述

总结

  • ATT协议负责管理设备之间的数据存储。它为服务端提供了一种客户端可以进行读写的Attribute数据结构,并为客户端提供了访问、写入和读取数据的机制(访问方法和权限)。
  • GATT层定义了一个层次化的数据结构,它有助于理解存储在服务端中数据(GATT Profile)之间的关系。

SDP-Service Discovery Protocol

SDP的全称是Service Discovery Protocol,中文是服务发现协议。SDP(服务发现协议)是蓝牙协议体系中的核心协议,是蓝牙系统重要组成部分,是所有用户模式的基础。在蓝牙系统中.客户端只有通过服务发现协议才能获得设备信息、服务信息及服务特征,才能在此基础上建立相互间的连接。通过这个协议,应用程序可以发现哪些服务可用以及服务的特性是什么。
SDP服务器-客户端模型:
在这里插入图片描述

客户端通过发送SDP请求给服务器查询服务以及服务的属性。SERVICE RECORD包含了SDP Server的所有信息,它由一系列的service attributes组成,如图:
在这里插入图片描述

service attribute描述了服务的特性。它由属性ID和属性值组成。属性ID 是一个16位无符号整数,以便区别于服务记录中的其他服务属性。服务类属性由属性ID和属性值组成。属性值是一千长度可变的字段。它的含义由属性记录中枢应的属性ID和服务类确定。

SPP-Serial Port Profile

在这里插入图片描述
在这里插入图片描述

Device A是发起连接的主动方,所以Device A要至少支持Establish link and set up virtual serial connection.,Device B是被连接的乙方,所以要至少支持Accept link and establish virtual serial connection和Register Service record for application in local SDP database.以便Device A查询服务并且连接,但是此协议漏掉最主要的两个功能,发送数据,接收数据,或者SIG是觉得rfcomm做到了这个功能,所以不写在SPP协议中吧
1 Establish link and set up virtual serial connection.
This procedure refers to performing the steps necessary to establish a connection to an emulated serial port (or equivalent) in a remote device. The steps in this procedure are:

  1. Submit a query using SDP to find out the RFCOMM Server channel number of the desired application in the remote device. This might include a browsing capability to let the user select among available ports (or services) in the peer device. Alternatively, if it is known exactly which service to contact, it is sufficient look up the necessary parameters using the Service Class ID associated with the desired service.
  2. Optionally, require authentication of the remote device to be performed. Also optionally, require encryption to be turned on.
  3. Request a new L2CAP channel to the remote RFCOMM entity.
  4. Initiate an RFCOMM session on the L2CAP channel.
  5. Start a new data link connection on the RFCOMM session, using the aforementioned server channel number.After step 5, the virtual serial cable connection is ready to be used for communication between applications on both sides.

2 Accept link and establish virtual serial connection.
This procedure refers to taking part in the following steps:

  1. If requested by the remote device, take part in authentication procedure and, upon further request, turn on encryption.
  2. Accept a new channel establishment indication from L2CAP.
  3. Accept an RFCOMM session establishment on that channel.
  4. Accept a new data link connection on the RFCOMM session. This may trigger a local request to authenticate the remote device and turn on encryption, if the user has required that for the emulated serial port being connected to (and authentication/encryption procedures have not already been carried out).

3 Register Service record for application in local SDP database.
This procedure refers to registration of a service record for an emulated serial port (or equivalent) in the SDP database. This implies the existence of a Service Database, and the ability to respond to SDP queries.

需要注意的是,SPP只有安卓手机支持,并且部分安卓手机必须有SPP APP才可以连接,iphone手机不能直接SPP,但是又一个替代协议IAP,此协议需要买MFI chip才能用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/585252.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用groovy+spock优雅的进行单测

使用groovyspock优雅的进行单测 1. groovyspock示例1.1 简单示例1.2 增加where块的示例1.3 实际应用的示例 2. 单测相关问题2.1 与SpringBoot融合2.2 单测数据与测试数据隔离2.3 SQL自动转换(MySQL -> H2) 参考 Groovy是一种基于JVM的动态语言&#x…

LVGL自定义滑动

触摸和编码器都可以操作 typedef struct {lv_obj_t* obj;int16_t x;int16_t y;int16_t width;int16_t height; }pos_and_size_t;typedef struct {lv_obj_t* obj;lv_coord_t height;lv_coord_t width;lv_coord_t width_pad;lv_coord_t height_pad;lv_coord_t child_widget;lv_co…

2024王炸组合!基于Mamba的遥感图像处理引爆顶会!

对比传统方法,基于Mamba的遥感图像处理在计算效率和分析精度方面遥遥领先,Mamba遥感也成为了论文研究的新方向。 具体来说,在融合高分辨率的空间图像和低分辨率的光谱图像获取综合信息方面,Mamba可以提升性能,同时保持…

【Harmony3.1/4.0】笔记七-选项卡布局

概念 当页面信息较多时,为了让用户能够聚焦于当前显示的内容,需要对页面内容进行分类,提高页面空间利用率。Tabs组件可以在一个页面内快速实现视图内容的切换,一方面提升查找信息的效率,另一方面精简用户单次获取到的…

MySQL CRUD操作

前言👀~ 上一章我们介绍了数据库的一些基础操作,关于如何去创建一个数据库,还有使用数据库,删 除数据库以及对表进行的一些基础操作,今天我们学习CRUD操作 俗称(增删改查) 如果各位对文章的内…

Objenesis 底层

Objenesis 简介 Objenesis 是一个 Java 库,用于在不调用构造方法的情况下创建对象。由于绕过了构造方法,所以无法调用构造方法中的初始化逻辑。相应的,Objenesis 无法创建抽象类、枚举、接口的实例对象。 起源 与其称之为起源,…

基于ST的STM32F407ZGT6嵌入式uCOS-III V3.08 操作系统工程实验

1.基于的开发板 2.原理图截图: 3.主控芯片框图与性能特点: High-performance foundation line, Arm Cortex-M4 core with DSP and FPU, 1 Mbyte of Flash memory, 168 MHz CPU, ART Accelerator, Ethernet, FSMC The STM32F405xx and STM32F407xx family is based on the high…

多家企业机密数据遭Lockbit3.0窃取,亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件87起,与上周相比勒索事件大幅下降。美国依旧为受勒索攻击最严重的国家,占比45%。 本周Cactus是影响最严重的勒索家族,Lockbit3.0和Bianlian恶意家族紧随其后,从整体上看Lockbit3.0依旧…

Meltdown 以及Linux KPTI技术简介

文章目录 前言一、Introduction二、 Background2.1 Out-of-order execution2.2 Address Spaces2.3 Cache Attacks 三、A Toy Example四、Building Blocks of the Attack4.1 Executing Transient Instructions4.2 Building a Covert Channel 五、Meltdown5.1 Attack Description…

深度学习之视觉特征提取器——LeNet

LeNet 引入 LeNet是是由深度学习巨头Yann LeCun在1998年提出,可以算作多层卷积网络在图像识别领域的首次成功应用。我们现在通常说的LeNet是指LeNet-5,最早的LeNet-1在1988年即开始研究,前后持续十年之久。但是,受限于当时计算机…

c++初阶——类和对象(下)

大家好,我是小锋,今天我们来学习我们类和对象的最后一个章节,我们本期的内容主要是类和对象的一些细节进行讲解 再谈构造函数 我们在初始化时有两种方式一种是函数体内初始化,一种是初始化列表 我们先来看看日期类的初始化 构造…

[机缘参悟-166] :周期论:万物的周期现象是这个世界有序性和稳定性保障;超越周期:在轮回中,把握周期节奏。

目录 前言:超越周期 一、周期是大自然和宇宙的规律,是天道 1.1 概述 1.2 万物的周期规律的现象 1.3 电磁波的周期 二、计算机世界中的周期性 三、佛家的生命轮回规律 四、人类社会发展的周期规律 五、经济活动的周期规律 5.1 概述 5.2 股市的…

Ieetcode——21.合并两个有序链表

21. 合并两个有序链表 - 力扣(LeetCode) 合并两个有序链表我们的思路是创建一个新链表,然后遍历已知的两个有序链表,并比较其节点的val值,将小的尾插到新链表中,然后继续遍历,直到将该两个链表…

C语言实验-函数与模块化程序设计

一: 编写函数fun,其功能是:输入一个正整数,将其每一位上为偶数的数取出重新构成一个新数并输出。主函数负责输入输出,如输入87653142,则输出8642。(main函数->fun函数) #define _…

【代码问题】【Pytorch】训练模型时Loss为NaN或INF

解决方法或者问题排查: 加归一化层: 我的问题是我新增的一个模块与原来的模块得到的张量相加,原张量是归一化后的,我的没有: class Module(nn.Module):def __init__(self,dim,):super().__init__()# 新增一个LayerNo…

节假日如何快速回应客户消息?

在宝贵的休闲时光或者特殊的节日期间,有时候由于工作、家庭等原因,我们很难及时回应客户的消息。那么如何在忙碌之时,如何确保与他人的交流畅通无阻呢?答案就是使用微信私域流量管理系统。 01 机器人自动回复设置 机器人自动回…

酷我音乐车机版+v6.0.1.0车机共存会员版【附带安装包下载地址】

简介 很多车机的酷我音乐app有限制,不能完全使用酷我音乐的所有功能。我这里分享一个可以使用全部功能的酷我音乐app,大家可以自行下载。 界面预览 软件下载地址【转存到自己的网盘后即可下载】 网盘地址:https://pan.xunlei.com/s/VNwgzNV…

Redis的事务机制能保证ACID属性吗?

目录 事务 ACID 属性 用户如何开启Redis的事务? 使用redis-cli客户端来展示 ​Go语言编码使用事务 Redis 的事务机制能保证哪些属性? 1. 原子性 语法错误 运行错误 执行EXEC时,Redis发生故障 Redis对事务原子性属性的保证情况 2. 一…

idm下载速度慢解决办法 idm批量下载怎么用 idm优化下载速度 Internet Download Manager解决下载速度慢的方法教程

IDM (Internet Download Manager)是一款兼容性大,支持多种语言的下载管理软件,它可以自动检测并下载网页上的内容,这正是这一优点,使得它受到了广大用户的喜爱。但是在下载的过程中,我们会遇到idm下载速度慢怎么回事&a…

深度学习系列66:试穿模型IDM-VTON上手

1. 模型概述 如图,总体流程为: 输入为:衣服的编码xg;人物noise的编码xt;人物身上衣物的mask和人体pose分割(densepose);衣服部分经过两部分网络:1)高级语义网络IP-Adapter&#xff…
最新文章