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的功能和特性。

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

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

相关文章

深度求索(DeepSeek)的AI革命:NLP、CV与智能应用的技术跃迁

Deepseek官网&#xff1a;DeepSeek 引言&#xff1a;AI技术浪潮中的深度求索 近年来&#xff0c;人工智能技术以指数级速度重塑全球产业格局。在这场技术革命中&#xff0c;深度求索&#xff08;DeepSeek&#xff09;凭借其前沿的算法研究、高效的工程化能力以及对垂直场景的…

xxl-job使用nginx代理https后,访问出现403异常问题解决

在nginx代理为https之前&#xff0c;xxl-job使用http访问是没有问题的&#xff0c;但是换为https后&#xff0c;访问就有以下报错&#xff1a; 很多接口都出现了403异常 DataTables warning: table idjob_list - Ajax error. For more information about this error, please s…

kafka 3.5.0 raft协议安装

前言 最近做项目&#xff0c;需要使用kafka进行通信&#xff0c;且只能使用kafka&#xff0c;笔者没有测试集群&#xff0c;就自己搭建了kafka集群&#xff0c;实际上笔者在很早之前就搭建了&#xff0c;因为当时还是zookeeper&#xff08;简称ZK&#xff09;注册元数据&#…

Python 鼠标轨迹 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

爬虫技巧汇总

一、UA大列表 USER_AGENT_LIST 是一个包含多个用户代理字符串的列表&#xff0c;用于模拟不同浏览器和设备的请求。以下是一些常见的用户代理字符串&#xff1a; USER_AGENT_LIST [Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0),Mozilla…

Microsoft Word xml 字符非法解决

如图&#xff0c;word能正常打开&#xff0c;复制内容到另外一个word时候出错&#xff0c;显示&#xff1a; Microsoft Word很抱歉,无法打开文档,因为内容有问题。确定详细信息(D)详细信息xml 字符非法。位置&#xff1a;行&#xff1a;3&#xff0c;列&#xff1a;2439 解决…

现代神经网络QA(LeNet/AlexNet/VGG/NiN/GooleNet/ResNet)-----一篇搞懂

现代神经网络Q&A-----一篇搞懂 LeNet核心架构 经典卷积神经网络的包括&#xff1a; 带填充以保持分辨率的卷积层&#xff1b;非线性激活函数&#xff0c;如ReLU&#xff1b;汇聚层&#xff0c;如最大汇聚层。 pooling时&#xff0c;使用avg还是max&#xff1f; max&…

数据结构与算法(test2)

五、串 1. 串是由___零___个或___多____个字符组成的有限序列, 又称为___字符串________。 一般记为 S“a1a2.....an” (n > 0), 串中的字符数目n称为串的__长度_____&#xff0c;零个字符的串称为___空串_____. 定义中谈到的"有限"是指长度 n 是一个有限的数值…

Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)

Matplotlib基础 Matplotlib是一个用于绘制静态、动态和交互式图表的Python库&#xff0c;广泛应用于数据可视化领域。它是Python中最常用的绘图库之一&#xff0c;提供了多种功能&#xff0c;可以生成高质量的图表。 Matplotlib是数据分析、机器学习等领域数据可视化的重要工…

六种负载均衡算法

六种负载均衡算法对比&#xff1a;原理、优缺点及适用场景 负载均衡是分布式系统的核心技术之一&#xff0c;通过合理分配请求流量&#xff0c;确保服务器资源高效利用&#xff0c;提升系统的可用性和响应速度。不同的负载均衡算法适用于不同的场景&#xff0c;以下是六种常见…

公司配置内网穿透方法笔记

一、目的 公司内部有局域网&#xff0c;局域网上有ftp服务器&#xff0c;有windows桌面服务器&#xff1b; 在内网环境下&#xff0c;是可以访问ftp服务器以及用远程桌面登录windows桌面服务器的&#xff1b; 现在想居家办公时&#xff0c;也能访问到公司内网的ftp服务器和win…

Citespace之关键词爆发检测分析(进阶分析)

在开始citespace进行关键词爆发检测分析之前&#xff0c;如果不会使用citespace的&#xff0c;可以参考我之前这一篇博客&#xff1a; https://blog.csdn.net/m0_56184997/article/details/145536095?spm1001.2014.3001.5501 一、创建工程后进行设置 在创建好工程后&#xf…

【文献讲解】《Non-local Neural Networks》

一、引言 传统的深度学习方法(如卷积神经网络CNN和循环神经网络RNN)在捕捉长距离依赖关系时存在局限性。CNN主要关注局部邻域的特征,而RNN则依赖于序列的递归计算,无法直接捕捉全局信息。为了解决这一问题,本文提出了一种非局部神经网络(Non-local Neural Networks),通…

基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题

前言&#xff08;一些废话&#xff09; 在看这篇文章的各位大佬&#xff0c;感谢你们留出几分钟时间&#xff0c;来看这个产品介绍&#xff0c;其实重点说实话&#xff0c;不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题&#xff0c;希望大佬们能给出一些建议。万…

IDEA安装离线插件(目前提供了MavenHelper安装包)

目录 1、离线安装方式2、Maven Helper 1、离线安装方式 首先访问 IDEA插件网站 下载离线插件安装包&#xff0c;操作如下&#xff1a; 然后打开IDEA的Settings配置&#xff0c;点击Plugins&#xff0c;点击右侧设置按钮&#xff08;齿轮&#xff09;&#xff0c;选择Install P…

JVM的性能优化

1.方法内联 方法内联,是指 JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身 ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 注: C++的inline属于编译后内联,但是java是运行时内联 简单通俗的讲就是把方法内部调…

蓝桥杯小白打卡第四天

1221. 四平方和 问题描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a;每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 例如&#xff1a; (5 0^2 0^2 1^2 2^2)(7 1^2 1^2 1^2 2^2) …

【kafka系列】Topic 与 Partition

Kafka 的 Topic&#xff08;主题&#xff09; 和 Partition&#xff08;分区&#xff09; 是数据组织的核心概念&#xff0c;它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析&#xff1a; 一、Topic 与 Partition 的映射关系 Top…

哈佛大学“零点项目”(Project Zero)简介

哈佛大学“零点项目”&#xff08;Project Zero&#xff09;简介 起源与背景 “零点项目”&#xff08;Project Zero&#xff09;由美国哲学家纳尔逊古德曼&#xff08;Nelson Goodman&#xff09;于1967年在哈佛大学教育研究院创立。名称源于“从零开始研究艺术教育”的理念&…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Java基础面经 &#x1f4da;本系列文章为个…