【0x0006】HCI_Disconnect命令详解
目录
一、命令概述
二、命令格式和参数说明
2.1. HCI_Disconnect 命令格式
2.2. Connection_Handle
2.3. Reason
三、返回事件说明
3.1. HCI_Command_Status 事件
3.2. HCI_Disconnection_Complete事件
3.3. HCI_LE_CIS_Established事件(针对CIS)
四、事件执行流程
4.1. 命令准备阶段
4.2. 命令发送阶段
4.3. 命令接收与初步反馈阶段
4.4. 连接断开阶段
4.5. 连接断开完成反馈阶段
4.6. 主机处理阶段
五、应用场景
5.1. 用户主动断开连接
5.2. 设备异常或不兼容时断开连接
5.3. 连接资源管理
5.4. 蓝牙设备的安全管理
5.5. 蓝牙设备的维护和调试
5.6. 示例代码
六、注意事项
6.1. 命令参数准确性
6.2. 连接管理与顺序
6.3. 事件处理与反馈
6.4. 其他注意事项
HCI_Disconnect 命令主要用于终止一个已经存在的蓝牙连接。在蓝牙通信的各类场景中,当需要结束特定连接时,就会使用到该命令,它起到了主动断开连接、释放相关资源的重要作用。
一、命令概述
HCI_Disconnect 命令用于终止现有的蓝牙连接。它接收两个参数:Connection_Handle(连接句柄),用于指示要断开的连接;以及Reason(原因),用于指示结束连接的原因。
- 连接断开顺序:在断开ACL连接之前,必须确保在同一物理链路上的所有SCO(同步连接)、eSCO(增强同步连接)和CIS(连接导向同步)连接都已先被断开。这如果不遵循此顺序,这些连接将在ACL断开过程中被隐式断开,可能导致资源释放不当或通信混乱。
- 中央设备(Central)的限制:
- 命令顺序:在为同一个CIS发出HCI_LE_Create_CIS命令之前,不能发出HCI_Disconnect命令。否则,控制器将返回错误码“Command Disallowed (0x0C)”,表示不允许执行此命令。
- 待处理命令:若存在待处理的HCI_LE_Create_CIS命令(即CIS尚未创建),此时发出HCI_Disconnect命令将成功执行,但CIS将不会被创建。
- 外围设备(Peripheral)的限制:在控制器生成HCI_LE_CIS_Established事件之前,不能发出HCI_Disconnect命令。否则,控制器同样将返回错误码“Command Disallowed (0x0C)”。
- 连接句柄的特殊性:在中央设备上,CIS的连接句柄在断开后仍然保持有效。意味着主机可以使用相同的连接句柄在后续时间点重新创建之前断开过的CIS,为蓝牙设备间的灵活连接提供了便利。
HCI_Disconnect命令虽然功能简单,但在实际使用中需严格遵循蓝牙通信协议规定的条件、顺序和限制。这些规定目的在确保蓝牙通信系统的稳定、有序运行,避免混乱和错误状态的出现。主机和控制器应根据实际情况灵活处理不同命令的执行顺序和结果,以满足蓝牙设备间灵活建立、断开和重新建立特定连接的需求。同时,在实际设计和实现蓝牙通信系统时,应充分考虑这些限制和特殊要求,以确保系统的正确性和可靠性。
二、命令格式和参数说明
2.1. HCI_Disconnect 命令格式
HCI_Disconnect命令的格式通常包括以下几个关键部分:
-
Packet Type:表示数据包类型。对于HCI命令,其值通常为0x01。
-
Opcode:操作码,由OGF(操作码组字段)和OCF(操作码命令字段)组成。
- OGF:表示HCI命令的种类,如Link Control、Link Policy、Controller & BaseBand以及Information等。对于HCI_Disconnect命令,OGF的值为0x01,表示Link Control Command。
- OCF:表示具体的HCI命令。对于HCI_Disconnect命令,OCF的值是固定的,用于区分不同的Link Control命令。
-
Parameter Length:参数长度字段,表示后续参数的长度。对于HCI_Disconnect命令,该字段的值通常为2(或根据具体实现有所不同),表示后续有两个字节的参数。
-
Parameters:参数部分,用于提供执行命令所需的具体信息。
2.2. Connection_Handle
Connection_Handle用于标识要断开连接的句柄。在蓝牙系统中,每个建立起来的连接都会被分配一个唯一的连接句柄,通过这个句柄就能精准地指定要断开的是哪一个具体连接,就如同通过房间号来确定要关闭哪一间屋子的门一样。
主机(Host)借助 Connection_Handle 参数,明确告诉蓝牙控制器(Controller)具体需要断开的连接对象,使得控制器能够准确无误地执行断开操作,避免误断其他正在使用的连接。
2.3. Reason
Reason参数表示结束连接的原因,会被复制到对应协议数据单元(PDU)的错误码字段中。在BR/EDR连接中,会被复制到 LMP_DETACH PDU 的错误码字段;而在BLE连接里,则会被复制到 LL_TERMINATE_IND 或 LL_CIS_TERMINATE_IND PDU 的错误码字段。
- 0x05 - Authentication Failure
- 认证失败。意味着在尝试建立蓝牙连接时,认证过程未成功完成。可能是由于密码或密钥不匹配、设备不支持所需的认证方法或其他安全相关的问题导致的。
- 0x13 - Other End Terminated Connection (User Ended)
- 另一端终止了连接(用户结束)。表示远程设备或用户主动断开了蓝牙连接。可能是由于用户操作、设备故障或远程设备上的策略导致的。
- 0x14 - Other End Terminated Connection (Low Resources)
- 另一端因资源不足而终止了连接。通常意味着远程设备由于资源限制(如内存、处理能力或带宽)而无法继续维持连接。
- 0x15 - Other End Terminated Connection (About to Power Off)
- 另一端即将关机而终止了连接。表示远程设备即将关闭电源,因此主动断开了蓝牙连接。
- 0x1A - Unsupported Remote Feature
- 不支持远程功能。表示尝试使用的蓝牙功能或特性在远程设备上不受支持。
- 0x29 - Pairing with Unit Key Not Supported
- 不支持与密钥配对。意味着在尝试建立蓝牙连接时,所需的配对方法(特别是使用单元密钥的方法)在远程设备上不受支持。
- 0x3B - Unacceptable Connect
相关文章:
【0x0006】HCI_Disconnect命令详解
目录 一、命令概述 二、命令格式和参数说明 2.1. HCI_Disconnect 命令格式 2.2. Connection_Handle 2.3. Reason 三、返回事件说明 3.1. HCI_Command_Status 事件 3.2. HCI_Disconnection_Complete事件 3.3. HCI_LE_CIS_Established事件(针对CIS) 四、事件执行流程…...
【C语言练习(5)—回文数判断】
C语言练习(5) 文章目录 C语言练习(5)前言问题问题解析结果总结 前言 通过回文数练习,巩固数字取余和取商如何写代码 问题 输入一个五位数判断是否为回文数? 问题解析 回文数是指正读反读都一样的整数。…...
【全连接神经网络】核心步骤及其缺陷
前向传播 计算公式(其中一种) x1/x2:输入值,一般是神经网络上一层的输出或者输入数据本身,上图中表示两个节点w11 w13:权重,在神经网络中,权重是学习的参数,表示每个输入…...
【Vulkan入门】11-CreateCommandBuffer
[TOC]目录 先叨叨 先叠个甲,我个人都觉得本篇有点灌水的嫌疑。 到上篇为止,已经创建好了Pipeline。接下来就是要给Pipeline发指令进行渲染了。 从一开始就不断强调,发给Vulkan的指令要通过Queue发送给Device。命令不是一条一条推到Queue中的…...
Redis原理—4.核心原理摘要
大纲(9870字) 1.Redis服务器的Socket网络连接建立 2.Redis多路复用监听与文件事件模型 3.基于队列串行化的文件事件处理机制 4.完整的Redis Server网络通信流程 5.Redis串行化单线程模型为什么能高并发 6.Redis内核级请求处理流程与原理 7.Redis通信协议与内核级请求数据…...
面向对象系统的分析和设计
来源:《设计模式精解-GOF23种设计模式解析》 作者:k_eckel k_eckels mindview - 博客园 (cnblogs.com) --------- 面向对象系统的分析和设计实际上追求的就是两点: (1)高内聚 (2)低耦合 …...
单片机:实现交通信号灯(附带源码)
使用单片机实现交通信号灯控制系统是一个经典的嵌入式系统应用。这个项目可以帮助你理解如何通过单片机控制不同颜色的LED灯、处理时间控制、以及输入输出的基本操作。通过这个项目,你将掌握如何设计交通信号灯的时序控制、如何实现定时控制交通灯的切换、以及如何与…...
小白如何学习看懂CAD图纸?
首先,你需要了解CAD图纸的基本构成,包括图例、尺寸标注、比例等等。接着,你可以通过一些专业的书籍、在线课程或视频教程来逐步学习如何识别和理解这些元素。但建议不要学的太复杂了。 掌握基本概念: 坐标系:了解CAD…...
HarmonyOS-高级(一)
文章目录 一次开发、多端部署自由流转 🏡作者主页:点击! 🤖HarmonyOS专栏:点击! ⏰️创作时间:2024年12月09日12点19分 一次开发、多端部署 布局能力 自适应布局 拉伸能力均分能力占比能力缩放…...
Datawhale AI 冬令营(第一期)定制你的第一个专属模型-学习笔记
最近我报名参加了Datawhale组织的主题为“动手学系列,人人都能应用的AI”的Datawhale AI冬令营(第一期)。 本次学习一共12天,从12月10日-12月21日,学习会包含【跑通速通手册】,【学习大模型微调&数据集…...
群控系统服务端开发模式-应用开发-登录退出发送邮件
一、登录成功发送邮件 在根目录下app文件夹下controller文件夹下common文件夹下,修改Login.php,代码如下 <?php /*** 登录退出操作* User: 龙哥三年风水* Date: 2024/10/29* Time: 15:53*/ namespace app\controller\common; use app\controller\Em…...
app-2 App 应用抓包之 Postern+Charles
一、前言 本篇是基于 Postern Charles 方式对安卓应用数据包进行抓取。可以抓取到市面上大多数的app数据包。 二、环境准备 postern:postern下载地址 charles:Charles 4.5.6 中文版(便携免安装).rar 提取码:6d8f 三、配置及抓包测试 3.…...
cnocr配置及训练测试
cnocr配置及训练测试 1,相关链接2,已有模型调用测试(1)下载相关模型(2)Cnstd文本检测模型(3)模型调用解析脚本 3,自定义数据集训练测试(1)标签转换…...
【优选算法 前缀和】前缀和算法模板详解:一维前缀 & 与二维前缀和
一维前缀和 题目解析 算法原理 解法一:暴力解法 简单模拟,读完题意有 q 次询问,给哪两个数,就求哪段区间的和并且返回,这样的做法,时间复杂度为O(N*q),这个时间复杂度会超时…...
【记录】用JUnit 4的@Test注解时报错java.lang.NullPointerException的原因与解决方法
项目场景: 在练习黑马点评的逻辑过期解决缓存击穿时,编写了一个预热缓存数据的单元测试 SpringBootTest public class HmDianPingApplicationTests {Resourceprivate ShopServiceImpl shopService;Testpublic void testSaveShop() throws InterruptedE…...
Transformer入门(6)Transformer编码器的前馈网络、加法和归一化模块
文章目录 7.前馈网络8.加法和归一化组件9.组合所有编码器组件构成完整编码器 7.前馈网络 编码器块中的前馈网络子层如下图所示: 图1.32 – 编码器块 前馈网络由两个带有ReLU激活函数的全连接层组成。全连接层(Fully Connected Layer)有时也…...
(七)腾讯cloudstudio+Stable-Diffusion-webui AI绘画教程-安装Stable-Diffusion-WebUI
一、说明 本文选择安装stable-diffusion-webui最新版本 cloud studio 免费版最大的问题是空间不足,我晚上上传时超过了硬盘大小,直接不能启动,没办法,删除,又建了一个工作空间 二、安装 1、打开终端 2、配置Git代理…...
算法基础Day7(动态规划)
文章目录 1.题目2.题目解答1.第N个泰波那契数题目及题目解析动态规划算法学习1.状态表示2.状态转移方程3.初始化4.填表顺序5.空间优化 代码提交空间优化 2.三步问题题目及题目解析算法学习代码提交 1.题目 1137. 第 N 个泰波那契数 - 力扣(LeetCode)面试…...
代理IP地址和端口是什么?怎么进行设置?
保护个人隐私、突破地域限制、提升网络安全性是我们不断追求的目标。IP地址与端口一种实现这些目标的重要工具。但是,你可能对它是什么,以及如何设置感到困惑。别担心,本文将为你揭开这些神秘的面纱,让你轻松掌握这项技能。 1.IP…...
一文详解TCP协议 [图文并茂, 明了易懂]
欢迎来到啊妮莫的学习小屋! 目录 什么是TCP协议 TCP协议特点✨ TCP报文格式 三次握手和四次挥手✨ 可靠性 效率性 基于字节流✨ 基于TCP的应用层协议 什么是TCP协议 TCP(传输控制协议, Transmission Control Protocol) 是一种面向连接的, 可靠的, 基于字节流的传输层通…...
js后端开发之Next.js、Nuxt.js 与 Express.js
后端js之Next.js、Nuxt.js 与 Express.js 在现代 Web 开发中,JavaScript 已经成为前后端通用的编程语言,而选择合适的后端框架则是构建高效、可扩展应用程序的关键。本文将带你深入了解三个流行的 JavaScript 后端框架:Next.js、Nuxt.js 和 …...
人工智能概要
目录 前言1.什么是人工智能(Artificial Intelligence, AI)2.人工智能发展的三次浪潮2.1 人工智能发展的第一次浪潮2.2 人工智能发展的第二次浪潮2.3 人工智能发展的第三次浪潮 3.人工智能发展的必备三要素3.1 数据3.2 算法(algorithm…...
spring boot 3集成swagger
Spring Boot 3 集成 Swagger 的过程与之前版本相比有一些变化,主要是因为 springfox 库已经停止更新,并且不再支持新的 Spring Boot 版本。因此,对于 Spring Boot 3 来说,推荐使用 springdoc-openapi 作为集成 Swagger 的解决方案…...
【PlantUML系列】状态图(六)
一、状态图的组成部分 状态:对象在其生命周期内可能处于的条件或情形,使用 state "State Name" as Statename 表示。初始状态:表示对象生命周期的开始,使用 [*] 表示。最终状态:表示对象生命周期的结束&…...
前端缓存页面处理方法
当前一个前端应用新发布时,重新编译后,原来引用的资源文件名都会有变化。如果这个应用的页面在前端浏览器中有缓存,则会导致加载资源失败。怎样去除这种缓存,同时也能尽可能的保证前端访问的性能 ChatGPT said: ChatGPT 这是一个经…...
每日一题 284. 窥视迭代器
284. 窥视迭代器 想要提前知道下一个内容,就需要缓存 class PeekingIterator : public Iterator { public:PeekingIterator(const vector<int>& nums) : Iterator(nums) {// Initialize any member here.// **DO NOT** save a copy of nums and manipula…...
Cesium-(Primitive)-(BoxGeometry)
含实现代码 GISer世界 效果: 以下是 BoxGeometry 类的构造函数属性,以表格形式展示: 属性名类型默认值描述minimumCartesian3盒子的最小 x, y, 和 z 坐标。maximumCartesian3盒子的最大 x, y, 和 z 坐标。vertexFormatVertexFormatVertexFormat.DEFAULT要计算的顶点属性。以下…...
CSS元素宽高特点、类型转化、显式和隐藏(display)
元素的宽高特点 块级元素 可以设置宽高,不可以和其他元素在一行设置宽高时,元素的宽高为设置的值没有设置宽高时,宽度和父级宽高一样,高度由元素内容决定 行级元素 不可以设置宽高,可以和其他元素在一行元素的宽高…...
上市公司投资效率Biddle模型数据(包括最终数据、原始数据及构造说明)2003-2022年
一、计算方式:参考《Journal of accounting and economics》Biddle G C,构建Biddle模型使用企业投资对成长机会的回归模型来估计企业的投资效率,这里成长机会用销售增长率来衡量。回归模型如下图所示: 二、资料范围:包括原始数据…...
矩阵的乘(包括乘方)和除
矩阵的乘分为两种: 一种是高等代数中对矩阵的乘的定义:可以去这里看看包含矩阵的乘。总的来说,若矩阵 A s ∗ n A_{s*n} As∗n列数和矩阵 B n ∗ t B_{n*t} Bn∗t的行数相等,则 A A A和 B B B可相乘,得到一个矩阵 …...
Spring Security6.3 自定义AuthorizationManager问题
项目环境: Springboot3.3.5, 对应的SpringFrameWork6.1,Security为6.3 问题:我想自定义AuthorizationManager接口实现类,在里面判断如果角色为amdin则放行请求; 在AdminAuthorizationManager类的check()方法中pass变量…...
第一部分:基础知识 9 . 视图 --[MySQL轻松入门教程]
在MySQL中,视图(View)是一个命名的SQL查询,它被存储在数据库目录中。视图可以包含来自一个或多个表的数据,并且可以像真实表一样被查询。下面是对MySQL视图的详细讲解: 创建视图 使用 CREATE VIEW 语句来创建视图。语法如下: CREATE [OR REPLACE] [ALGORITHM = {UNDEFIN…...
用GPT零负担学单片机之点亮一颗cpu 第3节 训练or特征匹配?用GPT开发嵌入式
用GPT零负担学单片机之点亮一颗cpu 第3节 训练or特征匹配?AI写代码 大家好,我是小杰学长 如果你是大学生 遇到电子技术 学习 成长 入行难题 我曾经通过大学比赛赚钱 从事嵌入式AI 航天军工 用特别的学习和求职方法线下半年带50+学弟学妹入行开发 主页佳喔威信,给你提供一定资…...
2.6、vue2中侦听属性的变化
2.6.1、侦听属性作用侦听属性的变化其实就是监视某个属性的变化。当被监视的属性一旦发生改变时,执行某段代码。2.6.2、watch配置项监视属性变化时需要使用watch配置项 可以监视多个属性,监视哪个属性,请把这个属性的名字拿过来即可。 i.可以监视Vue的原有属性 ii.如果监视的…...
enable_shared_from_this
用途 struct S {shared_ptr<S> dangerous(){return shared_ptr<S>(this); // dont do this!} };int main() {shared_ptr<S> sp1(new S);shared_ptr<S> sp2 sp1->dangerous();return 0; }考虑以上代码,从一个被shared_ptr管理的struc…...
重生之我在异世界学智力题(2)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言智力题:逃离孤岛智力题&a…...
深入解析下oracle的number底层存储格式
oracle数据库中,number数据类型用来存储数值数据,它既可以存储负数数值,也可以存储正数数值。相对于其他类型数据,number格式的数据底层存储格式要复杂得多。今天我们就详细探究下oracle的number底层存储格式。 一、环境搭建 1.…...
prometheus
1.安装,tar包,解压即用 tar xf prometheus-2.33.3.linux-amd64.tar.gz -C /app/tools/ 2.创建软链接 ln -s prometheus-2.33.3.linux-amd64/ /app/tools/prometheus 3.进入目录 cd /app/tools/prometheus 4.运行 ./prometheus 5.此时࿰…...
C# 23种设计模式(1)单例模式(单件模式)
一、单例模式介绍 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这个模式在需要一个对象被共享且全局唯一的情况下非常有用,比如配置对象、日志对象、数据库连接…...
Javaweb:HTML、CSS
学习 资源1 学习资源 2 黑马javaweb HTML 1、基础标签、样式 图片标签:<img> src:绝对路径、相对路径(绝对磁盘路径,网络路径;./当前目录)width:宽度(百分比)height:高度(百分比&…...
SmartDV将SDIO系列IP授权给RANiX开发车联网(V2X)产品
双方的合作将增强符合ISO 26262标准的车联网(V2X)系统的通信和连接能力,加速实现更安全、更智能的汽车系统和车辆创新 加利福尼亚州圣何塞市,2024年12月——灵活、高度可配置、可定制化的半导体设计知识产权(IP&#…...
【Android】创建型设计模式—单例模式、工厂模式、建造者模式
单例模式 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点。 单例模式类图: #mermaid-svg-kzf6IdXdYeNOHtP0 {font-family:"trebuchet ms",verdana,arial,sa…...
ida9pro压缩包
资源类型的博客大部分都是为了自己某天换新机了用 下载链接2:ida9.zip 下载链接1:https://mega.nz/folder/yiAiVDAa#T0kogEE7ufqy0x0EpCuOLQ 主目录下该文件为证书文件 ida9中选择它,就可以了...
前端入门之VUE--vue组件化编程
前言 VUE是前端用的最多的框架;这篇文章是本人大一上学习前端的笔记;欢迎点赞 收藏 关注,本人将会持续更新。 文章目录 2、Vue组件化编程2.1、组件2.2、基本使用2.2.1、VueComponent 2、Vue组件化编程 2.1、组件 组件:用来实现…...
C++是如何工作的?
首先来看一个最基本的C程序段。 #include <iostream>int main() {std::cout << "HelloWorld" << std::endl;std::cin.get(); } 第一行 #include 的含义是预处理的意思,这条语句的作用是将一个名为iostream的文件拷贝到源代码中这个…...
JavaScript中的this, 究竟指向什么?
在JavaScript代码的不同位置中,this所指向的数据是不一样的。比如大部分同学都知道,在对象的函数属性方法中,this指向对象本身;在构造函数中,this指向要生成的新对象。事实上,this指向的逻辑不止这几种&…...
JavaWeb学习(3)(Servlet详细、Servlet的三种实现方式(面试)、Servlet的生命周期、传统web.xml配置Servlet(了解))
目录 一、Servlet详细。 (1)基本介绍。 (2)基本作用。 1、接收客户端请求数据。 2、处理请求。 3、完成响应结果。 二、Servlet的三种实现方式。 (1)实现javax.servlet.Servlet接口。 1、基本介绍。 2、代码…...
【图像去雾数据集】URHI数据集介绍
URHI数据集对应论文:RESIDE: A Benchmark for Single Image Dehazing(2017) URHI数据集下载链接:https://sites.google.com/site/boyilics/website-builder/reside 为便于下载,将上述官方提供的链接中百度云链接粘贴如…...
Playwright中Page类的方法
导航和页面操作 goto(url: str, **kwargs: Any): 导航到一个URL。 reload(**kwargs: Any): 重新加载当前页面。 go_back(**kwargs: Any): 导航到会话历史记录中的前一个页面。 go_forward(**kwargs: Any): 导航到会话历史记录中的下一个页面。 set_default_navigation_tim…...
算力介绍与解析
算力(Computing Power)是指计算机系统在单位时间内处理数据和执行计算任务的能力。算力是衡量计算机性能的重要指标,直接影响计算任务的速度和效率。 算力的分类和单位 a. 基础算力:以CPU的计算能力为主。适用于各个领域的计算。…...