Bluetooth Spec【0】蓝牙核心架构
- 蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成
- 蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件(GAP)中指定。BR/EDR核心系统包括对备用MAC/PHYs(AMPs)的支持,包括一个AMP管理器协议和支持外部引用的MAP/PHYs的协议适配层(PALs)。
- 蓝牙LE核心系统的最小实现涵盖了由蓝牙规范定义的四底层和相关协议以及两个公共服务层协议;安全管理器(SM)和属性协议(ATT)以及总体配置文件要求在通用属性配置文件(GATT)和GAT配置文件(GAP)中指定。结合蓝牙BR/EDR和LE的实现包括上面描述的两个最小实现。
- 一个完整的蓝牙应用程序需要许多额外的服务和更高级层次的协议,这些协议在蓝牙规范中定义,但这里没有描述。核心系统架构如图2.1所示。
- 链路管理(Link Manager),链路控制(Link Controller),经典蓝牙无线射频模块(BR/EDR Radio blocks)构成了经典蓝牙控制器(BR/EDR Controller)。
- (AMP PAL),(AMP MAC),(AMP PHY)构成了(AMP Controller)。
- 链路管理(Link Manager),链路控制(Link Controller),低功耗射频模块(LE Radio)构成了低功耗控制器(LE Controller)。
- L2CAP, SDP and GAP 模块构成了BR/EDR主机。
- L2CAP, SMP, ATT(Attribute protocol), GAP and GAP(Generic Attribute Profile)/ (GATT) 模块构成了LE主机。
2.1.1 Host architectural blocks
2.1.1.1 Channel manager
通道管理器负责创建、管理和关闭用于传输服务协议和应用程序数据流的L2CAP通道。通道管理器使用L2CAP协议与远程(对等)设备上的通道管理器进行交互,以创建这些L2CAP通道,并将其端点连接到适当的实体。通道管理器与其本地链路管理器或AMP PAL进行交互,以创建新的逻辑链路(如有必要),并配置这些链路,以为正在传输的数据类型提供所需的服务质量。
2.1.1.2 L2CAP resource manager
L2CAP资源管理器块负责管理向基带提交PDU(协议数据单元)片段的顺序以及通道之间的一些相对调度,以确保具有QoS承诺的L2CAP通道不会由于控制器资源耗尽而被拒绝对物理通道的访问。这是必需的,因为架构模型并不假定一个控制器具有无限的缓冲空间,或者假设HCI是一个具有无限带宽的管道。
L2CAP资源管理器还可以执行流量一致性监管,以确保应用程序在其协商的QoS设置的范围内提交L2CAPsdu。一般的蓝牙数据传输模型假定行为良好的应用程序,并没有定义期望实现如何处理这个问题。
2.1.1.3 Security Manager Protocol
安全管理器协议(SMP)是用于生成加密密钥和身份密钥的点对点协议。该协议在一个专用的固定的L2CAP通道上运行。SMP块还管理加密密钥和身份密钥的存储,并负责生成随机地址,并将随机地址解析为已知的设备身份。SMP块直接与控制器进行接口,以提供在加密或配对过程中用于加密和身份验证的存储密钥。此块仅在LE系统中使用。BR/EDR系统中的类似功能也包含在控制器中的链接管理器块中。SMP功能在LE系统上的主机中,以降低仅LE控制器的实现成本。
2.1.1.4 Attribute Protocol
属性协议(ATT)块实现了属性服务器和属性客户端之间的点对点协议。ATT客户端通过专用的固定L2CAP通道与远程设备上的ATT服务器进行通信。ATT客户端向ATT服务器发送命令、请求和确认。ATT服务器发送响应、通知和向客户指示。这些ATT客户端命令和请求提供了一种在具有ATT服务器的对等设备上读取和写属性值的方法。
2.1.1.5 AMP Manager protocol
AMP管理器是使用L2CAP与远程设备上的对等AMP管理器进行通信的一个层。它还直接与AMP PAL接口,用于AMP控制的目的。AMP经理负责发现远程AMP)并确定其可用性。它还收集有关远程AMP)的信息。此信息用于设置和管理AMP物理链接。AMP管理器使用一个专用的L2CAP信令通道与远程AMP管理器(s)通信。
2.1.1.6 Generic Attribute Profile
通用属性配置文件(GATT)块表示属性服务器的功能,以及可选择的属性客户端的功能。该配置文件描述了在属性服务器中使用的服务、特征和属性的层次结构。该块提供了用于发现、读取、写入和指示服务特性和属性的接口。GATT用于LE设备上的LE配置文件服务发现。
2.1.1.7 Generic Access Profile
2.1.2 BR/EDR/LE Controller architectural blocks
2.1.2.1 Device manager
设备管理器是基带中用来控制蓝牙设备的一般行为的功能块。它负责蓝牙系统中与数据传输没有直接关系的所有操作,如查询附近是否存在的蓝牙设备,连接到蓝牙设备,或使本地蓝牙设备可被其他设备发现或连接。
设备管理器请求从基带资源控制器访问传输介质,以执行其功能。设备管理器还控制由许多HCI命令所暗示的本地设备行为,例如管理设备本地名称、任何存储的链接键和其他功能。
2.1.2.2 Link manager
链接管理器负责创建、修改和发布逻辑链接(如果需要,还有它们相关的逻辑传输),以及更新与设备之间的物理链接相关的参数。链路管理器通过使用BR/EDR中的链路管理器协议(LMP)和LE中的链路层协议(LL)与远程蓝牙设备中的链路管理器进行通信来实现这一点。
LM或LL协议允许在需要时创建新的逻辑链路和逻辑传输,以及链路和传输属性的一般控制,如逻辑传输启用加密,适应物理链路的传输功率,或调整逻辑链路BR/EDR中的QoS设置。
2.1.2.3 Baseband resource manager
基带资源管理器负责对无线电媒体的所有访问。它有两个主要功能。它的核心是一个调度器,它将物理通道上的时间授予所有已经协商了访问合同的实体。另一个主要功能是与这些实体协商访问合同。访问合同实际上是一种对提供为用户应用程序提供预期性能所需的特定QoS的承诺。
访问合同和调度函数必须考虑到需要使用主控制器的任何行为。这包括(例如)通过逻辑链路和逻辑传输的连接设备之间的正常交换数据,以及使用无线电介质进行查询、进行连接、可发现或可连接,或在使用自适应跳频模式期间从未使用的载波中获取读数。
在BR/EDR系统中的某些情况下,逻辑链路的调度会导致将逻辑链路更改为与以前使用的物理通道不同的物理信道。这可能是(例如)由于参与散点网,一个定期查询功能,或页面扫描。当物理通道没有与时间槽对齐时,资源管理器还会考虑原始物理通道上的插槽和新物理通道上的插槽之间的重新排列时间。在某些情况下,由于两个物理通道被用作相同的设备时钟,插槽将自然对齐。
2.1.2.4 Link Controller
链路控制器负责对数据有效负载和与物理通道、逻辑传输和逻辑链路相关的参数对蓝牙数据包进行编码和解码。链路控制器执行BR/EDR中的链路控制协议信令和LE中的链路层协议(与资源管理器的调度功能紧密结合),用于通信流控制和确认和重传请求信号。对这些信号的解释是与基带数据包相关联的逻辑传输的一个特征。链路控制信令的解释和控制通常与资源管理器的调度器相关联。
2.1.2.5 PHY
PHY块负责传输和接收物理信道上的信息包。基带和PHY块之间的控制路径允许基带块控制PHY块的定时和频率载波。PHY块将数据流从物理通道和基带转换为所需的格式。
2.1.2.6 Isochronous Adaptation Layer
等时自适应层(ISOAL)使上层能够以灵活的方式向链路层发送或接收等时数据,使得上层中的数据包的大小和间隔可以与链路层中的数据包的大小和间隔不同。ISOAL使用碎片/重组或分割/重组操作将上层数据单元转换为底层数据单元(或相反)。
2.1.3 AMP Controller architectural blocks
。。。
相关文章:

Bluetooth Spec【0】蓝牙核心架构
蓝牙核心系统由一个主机、一个主控制器和零个或多个辅助控制器组成蓝牙BR/ EDR核心系统的最小实现包括了由蓝牙规范定义的四个最低层和相关协议,以及一个公共服务层协议;服务发现协议(SDP)和总体配置文件要求在通用访问配置文件&a…...

AppInventor2 ClientSocketAI2Ext 拓展加强版 - 为App提供TCP客户端接入,可发送二进制数据
本文介绍App Inventor 2利用拓展实现TCP/IP协议接入功能,作为网络客户端连接TCP服务器,进行数据通信(发送/接收)。 // ClientSocketAI2Ext 拓展现状 // 原版拓展名称为:com.gmail.at.moicjarod.aix,是能用…...

Opencv之对图片的处理和运算
Opencv实现对图片的处理和修改 目录 Opencv实现对图片的处理和修改灰度图读取灰度图转换灰度图 RBG图单通道图方法一方法二 单通道图显色合并单通道图 图片截取图片打码图片组合缩放格式1格式2 图像运算图像ma[m:n,x:y]b[m1:n1,x1:y1] add加权运算 灰度图 读取灰度图 imread(‘…...

使用Excel制作通达信自定义“序列数据“
序列数据的视频教程演示 Excel制作通达信自定义序列数据 1.序列数据的制作方法:删掉没有用的数据(行与列)和股代码格式处理,是和外部数据的制作方法是相同,自己上面看历史博文。只需要判断一下,股代码跟随的…...
Qt工作总结02 <设置工具栏ToolBar>
相关博文 1. 代码 QToolBar * toolbar new QToolBar(this);QAction * btn1 new QAction("btn1"); btn1->setIcon(QIcon(":/images/btn1.png")); value->setCheckable(true); //按钮按下弹起 toolbar ->addAction(btn1);QAction * btn2 new …...

解决Springboot整合Shiro自定义SessionDAO+Redis管理会话,登录后不跳转首页
解决Springboot整合Shiro自定义SessionDAORedis管理会话,登录后不跳转首页 问题发现问题解决 问题发现 在Shiro框架中,SessionDAO的默认实现是MemorySessionDAO。它内部维护了一个ConcurrentMap来保存session数据,即将session数据缓存在内存…...
Day56 图论part06
108.冗余连接 并查集应用类题目,关键是如何把题意转化成并查集问题 代码随想录 import java.util.Scanner;public class Main{public static void main (String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();DisJoint disjoint = new DisJo…...
[python SQLAlchemy数据库操作入门]-04.连接数据库:增删改查
哈喽,大家好,我是木头左! 通过使用 SQLAlchemy,开发者可以在 Python 中以更直观的方式操作数据库,而无需编写大量的 SQL 代码。 创建数据库引擎 在 SQLAlchemy 中,数据库引擎是用于与数据库交互的核心组件。它负责管理数据库连接,并执行 SQL 语句。 示例:连接到 SQLi…...

黑马点评——基于Redis
目录 1.短信登录 1.1基于Session登录(已被Redis代替) 1.2cookie和session 2.添加Redis缓存 2.1根据id查询商户信息 2.2缓存穿透 2.3缓存雪崩 《黑马点评》Redis高并发项目实战笔记【完结】P1~P72_黑马点评笔记-CSDN博客 1.短信登录 1.1基于Sess…...

RocketMQ的集群架构是怎样的?
大家好,我是锋哥。今天分享关于【RocketMQ的集群架构是怎样的?】面试题。希望对大家有帮助; RocketMQ的集群架构是怎样的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 是阿里巴巴开源的分布式消息中间件,广泛用于处…...

VS2022+QT6.7 窗口置灰(遮罩)
本文章使用QWidget来使窗口置灰,使用按钮控制置灰功能的开启和关闭,同时被置灰的控件自动禁用交互功能。 connect(ui.pushButton_open, &QPushButton::clicked, this, []() { //创建无边框窗口,大小是父的大小QWidget* parentWidget new QWidget…...
如何通过HTTP API插入或更新Doc
本文介绍如何通过HTTP API向Collection中插入或更新Doc。 说明 若调用本接口时Doc Id已存在,则等同于更新Doc;Doc Id不存在,则等同于插入Doc。 若调用本接口时不指定Doc Id,则等同于插入Doc,DashVector会自动生成Doc …...
C++ STM32 F4xx USART LL库 DMA + IDLE ISR 驱动裸机 +FreeRTOS 任务通知
写的一般,大佬可以帮我看看 头文件 /********************************************************************************* file : usart_driver.hpp* brief : usart_driver program head**************************************************…...

RK3588在Android13/14如何查看GPU,NPU,DDR,RGA数据
由于Android13上selinux的权限管控加强,原来android12的方法已经无法获取到性能相关数据了,故单独介绍Android13上的性能数据获取 首先需要保障能过获取到root权限,adb root能够生效,adb shell进入shell命令行 mount -t debugfs…...

sentinel学习笔记6-限流降级(上)
本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏,写的好值得推荐,我整理的有所删减,推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…...
【Rust自学】6.4. 简单的控制流-if let
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 6.4.1. 什么是if let if let语法允许将if和let组合成一种不太冗长的方式来处理与一种模式匹配的值,同时忽略其余模式。 可以…...

【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下
【HarmonyOS】鸿蒙将资源文件夹Resource-RawFile下的文件存放到沙箱目录下 一、问题背景 应用开发中,我们经常会遇到一些文件原先是放在资源文件夹 rawfile下,但是逻辑处理时,需要转移到本地沙箱才能操作。这种情况下,就需要将将…...

Vue项目中env文件的作用和配置
在实际项目的开发中,我们一般会经历项目的开发阶段、测试阶段和最终上线阶段,每一个阶段对于项目代码的要求可能都不尽相同,那么我们如何能够游刃有余的在不同阶段下使我们的项目呈现不同的效果,使用不同的功能呢?这里…...

在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)
一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置,ViteVue 项目的创建,Element Plus 插件的使用,以及计时器组件的创建和使用。 想要直接实现计时器组件,查看文章的第四部分。…...

机器人C++开源库The Robotics Library (RL)使用手册(三)
进入VS工程,我们先看看这些功能函数及其依赖库的分布关系: rl命名空间下,主要有八大模块。 搞定VS后将逐个拆解。 1、编译运行 根据报错提示,配置相应错误的库(根据每个人安装位置不同而不同,我的路径如下:) 编译所有,Release版本耗时大约10分钟。 以rlPlan运动…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...