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.mzph.cn/news/831012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RTMP 直播推流 Demo(二)—— 音频推流与视频推流

音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…

暴雨服务器引领信创算力新潮流

去年大模型的空前发展,人工智能也终于迎来了属于自己的“文艺复兴”,众多的模型相继发布,继而催生了整个行业对于智能算力需求的激增。 市场需求与技术驱动仿佛现实世界的左右脚,催动着世界文明的齿轮向前滚动。在全球经济角逐日…

力扣:61. 旋转链表(Java,双指针)

目录 题目描述:输入:输出:代码描述: 题目描述: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 输入: head [1,2,3,4,5], k 2 输出: [4,5,1,…

leetcode-滑动窗口的最大值-95

题目要求 思路 1.这个题是可以暴力求解的,但是时间复杂度比较高,因此,这里说一个时间复杂度为O(n)的方法 2.因为这个代码是优化后的结果,第一次写如果直接写成这样着实不容易,因此,我直接讲每一行的含义。…

【网络基础】深入理解TCP协议:协议段、可靠性、各种机制

文章目录 1. TCP协议段格式1.1. 如何解包 / 向上交付1.1.1. 交付1.1.2. 解包 1.2. 如何理解可靠性1.2.1. 确认应答机制(ACK)1.2.2. 序号 与 确认序号 2. TCP做到全双工的原因2.1. 16位窗口大小2.2. 6个标记位 3. 如何理解连接3.1 连接管理机制3.1.1. 三次…

44. UE5 RPG 初始化敌人的属性

在正常的游戏中,我们应该考虑如何去初始化角色属性,并且要给角色分好类型。比如,在我们游戏中,我们如何去初始化小兵的属性,并且还要实现小兵随着等级的增长而增加属性。而且就是小兵也有类型的区分,比如我…

PhpAdmin-getshell

PhpAdmin-getshell 通过未授权成功写入,然后getshell 路径:C:\phpstudy_pro\Extensions\MySQL5.7.26\ 写入木马: into写入文件: 使用需看要secure_file_priv的值。 当value为“null”时,不允许读取任意文件 当value为…

Android 文件传输

经常写adb命令传文件,结果发现Android studio有自带的文件管理器,可以上传下载文件。

高扬程消防水泵在火灾中的关键作用/恒峰智慧科技

在火灾这一无情的灾难面前,每一秒都至关重要。而在这一分一秒的较量中,高扬程消防水泵无疑扮演着举足轻重的角色。它不仅是灭火战斗的得力助手,更是保障人民生命财产安全的守护神。 高扬程消防水泵,顾名思义,其扬程远超…

通过自然语言处理执行特定任务的AI Agents;大模型控制NPC执行一系列的动作;个人化的电子邮件助手Panza

✨ 1: OpenAgents 通过自然语言处理执行特定任务的AI代理 OpenAgents是一个开放平台,旨在使语言代理(即通过自然语言处理执行特定任务的AI代理)的使用和托管变得更加便捷和实用。它特别适合于日常生活中对数据分析、工具插件获取和网络浏览…

vue2编写主体页面

目录 一. 导入两张图片 二. 新建主体vue 三. 修改路由 1. 新增主体界面Main.vue的路由 2. 完整router/index.js代码如下: 在Vue 2中编写一个主体页面通常意味着创建一个包含导航栏、侧边栏、内容区域等的布局。以下是使用Vue 2和Element UI框架来构建一个简单的主体页面的…

2024年第二十一届 五一杯 (B题)大学生数学建模挑战赛 | 最大流问题,深度学习分析 | 数学建模完整代码解析

DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享,与你一起了解前沿科技知识! 本次DeepVisionary带来的是五一杯的详细解读: 完整内容可以在文章末尾全文免费领取&阅读! 第一个问题…

张大哥笔记:学什么都不如学赚钱

很多人总是这样认为:好好读书,考上好学校,将来可以找到一份不错的工作,这样的思想观念,可能会导致你一辈子都无法实现财富自由。 财富的多少,和你的努力程度没有直接关系。我们可以清楚看到那些每天辛苦劳动…

Leetcode—2739. 总行驶距离【简单】

2024每日刷题(121) Leetcode—2739. 总行驶距离 实现代码 class Solution { public:int distanceTraveled(int mainTank, int additionalTank) {int consume 0;int ans 0;while(mainTank ! 0) {mainTank--;consume;if(consume 5 && additio…

【20】JAVASE-网络编程【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture:波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。…

python u是什么意思

u:表示unicode字符串,默认模式,里边的特殊字符会被识别。 作用:后面字符串以unicode格式进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。 用法&#xff…

人脸识别 人脸识别insightFace项目使用详解

人脸识别 人脸识别insightFace项目使用详解 recognition人脸识别模型Arcface(mxnet)训练项目地址 recognition人脸识别模型 注意:该模块是有深度学习框架mxnet实现,为了加速训练,需要GPU支持, Arcface(mxnet)训练 1、安装gpu版的MXNet,我的cuda版本是10.2 pip in…

【精选文献】JAG|基于时序Sentinel-1 SAR影像小农耕作区烟草空间分布制图

目录 文章简介 01 文章摘要 02 研究背景、目标及创新点 03 研究区域与数据集 04 研究方法 05 研究结果 06 研究讨论 07 研究结论 08 文章引用 文章简介 论文名称:Mapping tobacco planting areas in smallholder farmlands using Phenological-Spatial-Te…

《深入解析WIndows操作系统》第9章读书笔记

1、闪存类型:常见的闪存类型有NOR和NAND。NOR闪存在操作上最接近RAM,它的每个字节都可以被独立地寻址,而NAND闪存则被组织成以块为单位,就像磁盘一样。NOR类型的闪存用来设计保存计算机主板上的BIOS,而NAND类型的闪存被…

笔记本上打造专属的LLama3聊天机器人

1. 引言 万众期待的 Meta 第三代 Llama 发布了,我想确保你知道如何以最佳方式部署这个最先进的LLM。在本教程中,我们将在笔记本上部署该模型,并指导大家一步步具体操作步骤。 闲话少说,我们直接开始吧! 2. LLama3 …