windows蓝牙驱动开发-调试及支持的HCI和事件
调试蓝牙配置文件驱动程序
开发蓝牙配置文件驱动程序时,可以使用驱动程序验证程序来协助其调试。
若要启用验证检查,必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作,将禁用验证检查。
若要完全利用验证检查,请确保使用蓝牙请求块 (BRB) 分配例程,例如 BthAllocateBrb 和 BthInitializeBrb,这些例程由蓝牙驱动程序堆栈提供来生成和发送 BRB。 这些例程包括帮助调试配置文件驱动程序的其他功能。
验证检查有助于捕获以下类型的错误:
- 尝试在 BRB 完成之前重新提交 BRB
- 尝试分配或初始化无效的 BRB 类型
- 尝试提交大小无效的 BRB
调试配置文件驱动程序时,可以在 BC_BLUETOOTH_VERIFIER_FAULT 后使用 !analyze-v 调试器命令来获取故障的说明。
HCI支持
蓝牙主机控制器接口 (HCI) 指定主机和蓝牙无线电控制器之间的所有交互。 蓝牙规范允许供应商定义的 HCI 命令和事件在主机和控制器之间启用非标准化交互。 Microsoft 定义了 Windows 使用的特定于供应商的 HCI 命令和事件。 蓝牙控制器实现者可以使用这些扩展来实现特殊功能。
要求
蓝牙 HCI 命令由 16 位命令代码标识。 蓝牙组织定义 0x0000 到 0xFBFF 范围内的值。 供应商定义范围 0xFC00 至 0xFFFF 中的值,允许 1024 个不同的供应商分配的命令代码。
供应商必须选择 Microsoft 定义的命令代码的值。 Microsoft 无法选择命令代码,并假定没有其他供应商将代码用于冲突目的。 发出特定于供应商的命令是不安全的,如果控制器不了解该命令,则由它拒绝该命令。 控制器可以将命令解释为破坏性操作,例如更新控制器的固件。
供应商必须通过控制器以外的方法传达所选值。 Microsoft 未指定如何获取所选代码。
通知 Windows 蓝牙堆栈供应商特定的命令代码
Windows 蓝牙堆栈从注册表项 VsMsftOpCode 中读取供应商特定的命令代码。
VsMsftOpCode 注册表项具有 REG_DWORD 类型,键数据是供应商特定的操作码。
若要指定供应商特定的操作码,请使用驱动程序 INF 中 DDInstall.HW 节下的 AddReg 指令。 add registry 节应包含:
HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>例如:
[radio.NTamd64.HW]
AddReg=radio.NTamd64.HW.AddReg
[radio.NTamd64.HW.AddReg]
HKR,,"VsMsftOpCode",0x00010001,<Vendor Specific Opcode>
Microsoft 定义的 HCI 命令

Microsoft 定义的 HCI 命令和子命令
控制器了解只有一个特定于 Microsoft 的 HCI 命令。 特定于 Microsoft 的命令集是使用操作码扩展的。 Microsoft 定义的 HCI 命令的第一个命令参数是指定子命令的操作码。
控制器必须支持 HCI_VS_MSFT_Read_Supported_Features 才能支持任何其他 Microsoft HCI 子命令。 对其他命令的支持是可选的,取决于 HCI_VS_MSFT_Read_Supported_Features 返回的值。 除非控制器通过响应 HCI_VS_MSFT_Read_Supported_Features 指示对 Microsoft 定义的子命令的支持,否则 Windows 不会发送任何子命令。
主要HCI命令
HCI_VS_MSFT_Read_Supported_Features
功能:此命令提供一个位图,描述控制器支持哪些Microsoft定义的功能,并指定控制器返回的Microsoft定义的事件的前缀。
重要性:控制器必须支持此命令,才能支持任何其他Microsoft HCI子命令。对其他命令的支持是可选的,并取决于此命令返回的值。
HCI_VS_MSFT_Monitor_Rssi
功能:请求控制器开始监视指定连接的测量链接RSSI(Received Signal Strength Indication,接收信号强度指示),并在连接的测量链接RSSI超出指定限制时生成事件。
应用场景:用于监控蓝牙连接的信号强度,以确保连接的稳定性和质量。
HCI_VS_MSFT_Cancel_Monitor_Rssi
功能:取消先前发出的HCI_VS_MSFT_Monitor_Rssi命令。
应用场景:当不再需要监控特定连接的RSSI时,可以使用此命令停止监控。
HCI_VS_MSFT_LE_Monitor_Advertisement
功能:请求控制器开始监视落入指定RSSI范围并满足其他要求的广告。
应用场景:用于监控蓝牙LE(Low Energy,低功耗)设备的广告,以便发现新设备或连接已知设备。
HCI_VS_MSFT_LE_Cancel_Monitor_Advertisement
功能:取消先前发出的HCI_VS_MSFT_LE_Monitor_Advertisement命令。
应用场景:当不再需要监控特定广告时,可以使用此命令停止监控。
HCI_VS_MSFT_LE_Set_Advertisement_Filter_Enable
功能:设置广告过滤器的状态。
应用场景:用于控制是否允许特定类型的广告被接收和处理。
HCI_VS_MSFT_Read_Absolute_RSSI
功能:从控制器读取BR/EDR(Basic Rate/Enhanced Data Rate,基本速率/增强数据速率)连接的绝对RSSI值。
应用场景:用于获取蓝牙BR/EDR连接的精确信号强度信息。
子命令与操作码
Microsoft定义的HCI命令通常包含一个指定子命令的操作码作为第一个命令参数。控制器通过识别这个操作码来确定要执行的具体子命令。例如,在HCI_VS_MSFT_Read_Supported_Features命令中,子命令操作码为0x00用于请求读取支持的功能位图。
需要注意的是,Microsoft定义的HCI命令和子命令可能随着Windows系统的更新而发生变化。因此,在开发或调试涉及这些命令的应用程序时,建议参考最新的Microsoft官方文档或蓝牙核心规范以获取最准确的信息。
总的来说,Microsoft定义的HCI命令和子命令为Windows系统提供了与蓝牙控制器进行非标准化交互的能力,从而实现了更多特定于Microsoft的功能和特性。
相关文章:
windows蓝牙驱动开发-调试及支持的HCI和事件
调试蓝牙配置文件驱动程序 开发蓝牙配置文件驱动程序时,可以使用驱动程序验证程序来协助其调试。 若要启用验证检查,必须为 Bthusb.sys 启用驱动程序验证程序。 如果不执行此操作,将禁用验证检查。 若要完全利用验证检查,请确保…...
Excel大数据量导入导出
github源码 地址(更详细) : https://github.com/alibaba/easyexcel 文档:读Excel(文档已经迁移) B 站视频 : https://www.bilibili.com/video/BV1Ff4y1U7Qc 一、JAVA解析EXCEL工具EasyExcel Java解析、生成Excel比较…...
Linux系统命令无法使用(glib库相关问题)
1.背景描述 Yum强制安装了一些软件,安装软件成功无报错,完成后不久突然发现系统出问题了,所有的命令无法使用了,如ls、mv、cat等基本命令报错。 relocation error: /lib64/libpthread.so.0: symbol_libc_dl_error_tsd …...
Qt修仙之路2-1 仿QQ登入 法宝初成
widget.cpp #include "widget.h" #include<QDebug> //实现槽函数 void Widget::login1() {QString userusername_input->text();QString passpassword_input->text();//如果不勾选无法登入if(!check->isChecked()){qDebug()<<"xxx"&…...
DeepSeek-V3 论文解读:大语言模型领域的创新先锋与性能强者
论文链接:DeepSeek-V3 Technical Report 目录 一、引言二、模型架构:创新驱动性能提升(一)基本架构(Basic Architecture)(二)多令牌预测(Multi-Token Prediction…...
配置#include “nlohmann/json.hpp“,用于处理json文件
#include “nlohmann/json.hpp” // 需要安装 nlohmann/json.hpp 头文件 using json = nlohmann::json; 下载链接:https://github.com/nlohmann/json/tree/develop 1.下载并解压:首先,需要从nlohmann/json的GitHub仓库下载源代码,并解压得到的文件。 地址: nlohmann/json…...
索引失效的14种常见场景
在 MySQL 中,索引有时可能会失效,导致查询性能下降。以下是常见的 14 种场景,在这些场景下,索引可能会失效 1. 使用 OR 连接多个条件 场景: 当查询中包含 OR 时,如果 OR 连接的多个条件中有一个没有使用索引࿰…...
解决com.kingbase8.util.KSQLException: This _connection has been closed.
问题描述 一个消息管理系统,系统采用kingbase8数据库,数据库采用单体模式,后台应用也采用springboot单体模式。系统正式上线后,出现几个JDBC响应的异常信息: com.kingbase8.util.KSQLException: An I/O error occurred while sending to the backend.java.net.SocketTime…...
openAI官方prompt技巧(二)
1. 赋予 ChatGPT 角色 为 ChatGPT 指定一个角色,让其从特定的身份或视角回答问题。这有助于生成针对特定受众或场景的定制化回答。 例如: 你是一名数据分析师,负责我们的市场营销团队。请总结上个季度的营销活动表现,并强调与未…...
【非 root 用户下全局使用静态编译的 FFmpeg】
在非 root 用户下全局使用静态编译的 FFmpeg,可以按照以下方法操作: 1. 下载静态编译的 FFmpeg 如果你还没有下载静态编译的 FFmpeg,可以从官方网站获取: wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd6…...
【嵌入式 Linux 音视频+ AI 实战项目】瑞芯微 Rockchip 系列 RK3588-基于深度学习的人脸门禁+ IPC 智能安防监控系统
前言 本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁 IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前…...
前端布局与交互实现技巧
前端布局与交互实现技巧 1. 保持盒子在中间位置 在网页设计中,经常需要将某个元素居中显示。以下是一种常见的实现方式: HTML 结构 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><m…...
idea 找不到或者无法加载主类
idea项目,之前一直是正常运行的,放假了之后再回来就遇到启动不了的问题。 WebApplication这个类右键运行的时候,也提示找不到主类。 对于这种之前运行没有问题,突然出问题的项目。 我的点是没有改动代码和数据的情况下项目就跑不起…...
Flink 调用海豚调度器 SQL 脚本实现1份SQL流批一体化的方案和可运行的代码实例
目录 一、流批一体化概述 二、Flink 与海豚调度器结合实现流批一体化的好处 2.1 代码复用性增强 2.2 开发和维护成本降低 2.3 数据一致性保证 2.4 提高系统的灵活性和可扩展性 三、实现思路步骤 3.1 环境准备 3.2 编写 SQL 脚本并上传到海豚调度器 3.3 实现资源下载功…...
ES6 Map 数据结构是用总结
1. Map 基本概念 Map 是 ES6 提供的新的数据结构,它类似于对象,但是"键"的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map 也可以跟踪键值对的原始插入顺序。 1.1 基本用法 // 创建一个空Map…...
go结构体详解
结构体简介 Golang 中没有“类”的概念,Golang 中的结构体和其他语言中的类有点相似。和其他面向对象语言中的类相比,Golang 中的结构体具有更高的扩展性和灵活性。 Golang 中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一…...
机器学习-关于线性回归的表示方式和矩阵的基本运算规则
最近在学习机器学习的过程中,发现关于线性回归的表示和矩阵的运算容易费解,而且随着学习的深入容易搞混,因此特意做了一些研究,并且记录下来和大家分享。 一、线性模型有哪些表示方式? 器学习中,线性模型…...
kafka 3.5.0 raft协议安装
前言 最近做项目,需要使用kafka进行通信,且只能使用kafka,笔者没有测试集群,就自己搭建了kafka集群,实际上笔者在很早之前就搭建了,因为当时还是zookeeper(简称ZK)注册元数据&#…...
后台管理系统网页开发
CSS样式代码 /* 后台管理系统样式文件 */ #container{ width:100%; height:100%; /* background-color:antiquewhite;*/ display:flex;} /* 左侧导航区域:宽度300px*/ .left{ width:300px; height: 100%; background-color:#203453; display:flex; flex-direction:column; jus…...
使用一个大语言模型对另一个大语言模型进行“调教”
使用一个大语言模型对另一个大语言模型进行“调教”(通常称为微调或适配),是一种常见的技术手段,用于让目标模型更好地适应特定的任务、领域或风格。以下是基于搜索结果整理的详细步骤和方法: 1.准备工作 安装必要的…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...
