当前位置: 首页 > news >正文

Windows 蓝牙驱动开发-蓝牙设备栈

蓝牙设备栈

蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈,已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中,设备可以通过各种应用程序交换数据并彼此交互。

下图显示了蓝牙驱动程序堆栈中的模块,以及 Windows Vista 及更高版本中不包含的可能的自定义用户模式和内核模式驱动程序。 这些自定义驱动程序称为配置文件驱动程序。

用户模式

用户模式应用程序:通过已发布的 API 访问蓝牙驱动程序堆栈的用户模式应用程序。 

用户模式应用程序应链接到 BthProps.lib 而非 IrProps.lib,以便使用 BluetoothSetLocalServiceInfo 等 API。

配置文件驱动程序示例

WAP 内核模式驱动程序 - 无线应用程序协议 (WAP) 组件是配置文件驱动程序的一个示例,该驱动程序可在 Windows 网络堆栈和 BthPort 之间通信,并访问 L2CAP 接口以及包含在 L2CAP 中的 SDP 接口。 其他可能的配置文件包括高级音频分发配置文件 (A2DP)、A/V 远程控制配置文件 (AVRCP)、通用 A/V 分发配置文件 (GAVDP) 和公共 ISDN 接入 (CIP) 配置文件。

音频内核模式驱动程序 - 配置文件驱动程序的一个示例,该驱动程序可在 Windows 音频堆栈和 BthPort 之间通信,访问后者中包含的 SCO 接口。 可能的配置文件包括免提配置文件 (HFP)、耳机配置文件 (HSP)、无绳电话配置文件 (CTP) 和 Intercom 配置文件 (ICP)。 此配置文件驱动程序包含在从 Windows 8 开始的 Windows 版本中。

蓝牙 LE 心率监视器配置文件 - 与蓝牙低功耗 (BLE) API 通信的蓝牙 LE 配置文件驱动程序的示例。

蓝牙驱动程序堆栈组件

IrProps:用于与为蓝牙驱动程序堆栈的第一个版本创建的配置文件驱动程序实现向后兼容性的组件。 IrProps 的目的只是为了实现后向兼容性。 使用 BthProps 组件进行新开发。

BthProps: 一个组件,其中包含蓝牙用户界面的实现以及用户模式应用程序访问的蓝牙 API 的实现。 此组件通过远程过程调用 (RPC) 将查询发送到 BthServ。 此外,BthProps 会通过专用 IOCTL 与 BthPort 执行引脚交换。 请注意,BthProps 可在有启用了蓝牙的无线电的任何系统上运行。

BthServ:负责将查询数据缓存和转发到 Bthport 的服务。

BthCi : 蓝牙类安装程序。

WshBth:蓝牙 Windows 套接字帮助程序组件。 WshBth 由 Windows 套接字层调用以执行套接字操作。 WshBth 主要通过 TDI 接口调用 RfComm。 WshBth 还会调用 BthServ 以执行远程设备查询,以及调用 BthPort 以执行本地无线电查询。

FSquirt:一个不可扩展的对象交换 (OBEX) 组件,该组件允许用户通过打开的蓝牙连接发送和接收文件。 OBEX 通过使用 WshBth 组件的 RFCOMM 与远程设备通信。

BthPrint - 实现硬复制电缆更换配置文件 (HCRP) 的组件。 该组件允许打印系统向启用蓝牙的打印机发送数据和从中接收数据。 BthPrint 与 BthPort 中的 SDP 接口通信,以查询远程打印机和 BthPort 中的 L2CAP 接口来发送和接收数据。

HidBth :实现人机接口设备 (HID) 配置文件的组件。 HidBth 还与 BthPort 中的 L2CAP 和 SDP 接口通信。 HidBth 连接到 HID 堆栈的方式非常类似于 USB HID 模块。

BthPan :实现个人区域网 (PAN) 配置文件的组件,并通过开放蓝牙连接提供 TCP 连接。 在 Windows Vista 和 Windows XP 中,BthPan 仅支持传出连接。 BthPan 也是 BthPort 组件的客户端,同时使用 L2CAP 和 SDP 接口。

RfComm :实现蓝牙串行电缆仿真协议的组件。 RfComm 还使用在 BthPort 中找到的 L2CAP 和 SDP 接口。 RfComm 的上边缘会公开 TDI 接口,允许此组件显示为网络传输。 WshBth 通过这种方式连接到蓝牙以向用户模式 API 发送数据和从其接收数据。

用户模式应用程序可以使用 Windows SDK 中所述的 Winsock 接口访问 RfComm。

BthModem:实现虚拟 COM 端口和拨号网络 (DUN) 的组件。 BthModem 通过 TDI 接口将所有 I/O 和控制操作定向到 RfComm。 BthModem 的上边缘与 Serial.sys 通信,以呈现无线 COM 端口的外观。

BthEnum :蓝牙总线驱动程序。 BthEnum 与即插即用 (PnP) 管理器通信,以创建和销毁用于启用蓝牙服务的设备对象。 BthEnum 为已连接的远程设备支持的每个服务创建 PDO。 例如,当用户连接启用了蓝牙的鼠标时,Windows 将发现鼠标支持蓝牙 HID 服务,并为 HID 服务创建 PDO,以使 PnP 管理器加载 HidBth。
BthEnum 不会为显示在 Bth.inf 所指定的 UnsupportedServices 注册表项中的服务创建 PDO。

BthLEEnum:蓝牙低功耗 (LE) 总线驱动程序。 BthLEEnum 会实现 ATT 协议和 GATT 配置文件。 它还负责创建 PDO 来表示远程设备及其主要服务。

BthPort : BthUsb 微型端口加载的微型驱动程序。 BthPort 提供了四个组件:

HCI 组件通过蓝牙规范中定义的主机控制器接口 (HCI) 与启用了蓝牙的本地无线电通信。 由于所有启用了蓝牙的无线电都会实现 HCI 规范,因此无论制造商或型号如何,BthPort 都能够与任何已启用蓝牙的无线电通信。
SCO 组件会实现面向同步连接 (SCO) 协议。 此协议支持创建到远程设备的点到点连接。 SCO 客户端通过生成和发送蓝牙请求块 (BRB) 来与 SCO 接口通信。
L2CAP 会实现蓝牙逻辑链接控制和适应协议。 此协议支持创建远程设备的无损通道。 L2CAP 客户端通过生成和发送蓝牙请求块 (BRB) 来与 L2CAP 接口通信。
SDP 实现蓝牙服务发现协议。
BthUsb.sys:从 BthPort 提取总线接口的微型端口。

相关文章:

Windows 蓝牙驱动开发-蓝牙设备栈

蓝牙设备栈 蓝牙驱动程序堆栈包含 Microsoft 为蓝牙协议提供支持的核心部分。 有了这个堆栈,已启用蓝牙的设备可以彼此定位并建立连接。 在此类连接中,设备可以通过各种应用程序交换数据并彼此交互。 下图显示了蓝牙驱动程序堆栈中的模块,以…...

docker一张图理解

1、push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库。参数说明: –disable-content-trust : 忽略镜像的校验,默认开启 # 上传本地镜像myapache:v1到镜像仓库中。 docker push myapache:v1 1.2、search 从Docker Hub查找镜像。参数说明: –…...

RocketMQ、Kafka、RabbitMQ,如何选型?

如何根据应用场景选择合适的消息中间件? 分布式、微服务、高并发架构中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色。 消息队列用于实现系统间的异步通信、解耦、削峰填谷等功能。 目前常见的MQ实现包括RabbitMQ、Rock…...

RabbitMQ故障全解析:消费、消息及日常报错处理与集群修复

文章目录 前言:1 消费慢2 消息丢失3 消息重复消费4 日常报错及解决4.1 报错“error in config file “/etc/rabbitmq/rabbitmq.config” (none): no ending found”4.2 生产者发送消息报错4.3 浏览器打开IP地址,无法访问 RabbitMQ(白屏没有结…...

无公网IP 实现外网访问本地 Docker 部署 Navidrome

Navidrome 是一款可以在 macOS、Linux、Windows以及 Docker 等平台上运行的跨平台开源音乐服务器应用,它支持传输常见的 MP3、FLAC、WAV等音频格式。允许用户通过 Web 界面或 API 进行音乐库的管理和访问。本文就介绍如何快速在 Linux 系统使用 Docker 进行本地部署…...

pnpm add 和 pnpm install 的区别?

文章目录 1. pnpm add2. pnpm install3. 总结应用场景示例 在使用 pnpm 管理项目依赖时, pnpm add 和 pnpm install 是两个常用的命令,但它们的功能和使用场景有所不同。以下是详细的解释: 1. pnpm add 功能:用于向项目的 pack…...

Linux:文件描述符fd、系统调用open

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档&#xff0…...

CPU负载与CPU使用率之区别

在日常的性能测试与系统监控中,CPU负载和CPU使用率是两个常见的指标,它们经常被提及,但也经常被混淆。本文将为你深入解析两者的区别,以及它们各自的意义和应用场景,让你更清楚地掌握这些关键性能指标。 存储、内存和 …...

C++实现设计模式---外观模式 (Facade)

外观模式 (Facade) 外观模式 是一种结构型设计模式,为子系统中的一组接口提供一个一致的界面。外观模式定义了一个更高层次的接口,使得子系统更容易使用。 意图 简化复杂子系统的接口。为客户端提供一个统一的入口,屏蔽子系统的内部细节。 …...

仿射密码实验——Python实现(完整解析版)

文章目录 前言实验内容实验操作步骤1.编写主程序2.编写加密模块3.编写解密模块4.编写文件加解密模块 实验结果实验心得实验源码scirpt.pyusefile.py 前言 实验目的 1)初步了解古典密码 2)掌握仿射密码的实现 实验方法 根据下图仿射密码(变换…...

【Qt 常用控件】按钮类(QPushButton、QRadioButton、QCheckBox)

按钮控件继承自抽象类QAbstractButton。 抽象类不允许实例化对象,内部定义纯虚函数。只能通过子类继承,重写纯虚函数的方式使用。 1. QPushButton 1.1 QAbstractButton中和QPushButton相关的属性 text按钮显示文本icon按钮图标iconSize按钮图标尺寸s…...

Amazon Relational Database Service (RDS)

Amazon Relational Database Service (RDS) 是 AWS 提供的一项完全托管的关系数据库服务,旨在简化部署、管理和扩展关系型数据库应用程序。通过 RDS,用户可以使用多种流行的关系数据库引擎,如 MySQL、PostgreSQL、MariaDB、Oracle 和 Microso…...

linux分配磁盘空间命令

使用命令lsblk查询linux磁盘空间时,发现空间并没有被分配完 如图,600G,但实际分配了一共199G,剩余500G,我们需要通过命令进行剩余存储的分配。 思路:创建新的分区->更新内核分区表->初始化新分区作…...

21_Spring Boot缓存注解介绍

前面我们通过使用@EnableCaching、@Cacheable注解实现了Spring Boot默认的基于注解的缓存管理,除此之外,还有更多的缓存注解以及注解属性可以配置优化缓存管理。下面我们针对Spring Boot中的缓存注解及相关属性进行详细讲解。 1.@EnableCaching注解 @EnableCaching是由Spri…...

【linux】grep、awk、sed实战练习(1)-template

一、grep常见用法 1.1.从文件中查找关键字符串 # 比如:查找/etc/nginx/nginx.conf文件包含"listen"的行 [rootecs_server test]# grep "listen" -n /etc/nginx/nginx.conf 52: listen 8088; 87: listen 8096; # 比如:查…...

UDP报文格式

UDP是传输层的一个重要协议,他的特性有面向数据报、无连接、不可靠传输、全双工。 下面是UDP报文格式: 1,报头 UDP的报头长度位8个字节,包含源端口、目的端口、长度和校验和,其中每个属性均为两个字节。报头格式为二…...

联想Android面试题及参考答案

请介绍一下 Android 的架构,并谈谈对 Linux 的了解。 Android 架构主要分为四层,从下往上依次是 Linux 内核层、系统运行库层、应用框架层和应用层。 Linux 内核层是 Android 系统的基础。它提供了底层的硬件驱动程序,包括显示驱动、摄像头驱动、音频驱动等多种硬件设备的驱…...

Android CustomTextField

在 Compose 中开发用户界面时,需要处理输入框和键盘的交互,例如在键盘弹出时调整布局位置,避免遮挡重要内容。本篇博客将通过一个完整的示例展示如何实现这一功能。 功能概述 本例实现了一个简单的输入框。当输入框获得焦点或输入文字时&…...

网络设备安全保证计划 (NESAS) - 供应商视角 笔记

NESAS 对供应商的意义 提升产品安全性: NESAS 为供应商提供了一套全球认可的安全评估标准,帮助其识别和解决产品中的安全漏洞。通过 NESAS 评估,供应商可以证明其产品符合行业最高安全标准,增强客户信任。增强市场竞争力: 通过 NESAS 认证的…...

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …...

简单几步,让AI帮你画瑜伽女孩:雯雯的后宫-造相Z-Image-瑜伽女孩模型使用教程

简单几步,让AI帮你画瑜伽女孩:雯雯的后宫-造相Z-Image-瑜伽女孩模型使用教程 1. 模型介绍:你的专属AI瑜伽画师 想象一下,你只需要用文字描述,就能让AI为你创作出专业级的瑜伽女孩图片。这就是"雯雯的后宫-造相Z…...

【OFDM通信】室内NOMA-OFDM-VLC系统仿真【含Matlab源码 15240期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...

OpenClaw硬件控制实验:ollama-QwQ-32B通过串口操控智能家居

OpenClaw硬件控制实验:ollama-QwQ-32B通过串口操控智能家居 1. 为什么选择OpenClaw做硬件控制 去年冬天的一个深夜,我被空调定时关闭后冻醒的经历,让我开始思考如何让AI真正理解物理世界。传统智能家居App的固定场景模式已经不能满足我的需…...

SQL注入的分类靶场实践

SQL注入的分类靶场实践 前言 SQL 注入(SQL Injection)是一种常见且危险的 Web 安全漏洞,攻击者通过在输入字段中插入恶意 SQL 代码,能够绕过应用程序的验证机制,直接操纵数据库。本文将介绍 SQL 注入的分类&#xff…...

嵌入式多线程与多进程技术详解

嵌入式软件编程之多线程与多进程技术解析1. 操作系统任务调度基础1.1 时间片轮转调度机制现代操作系统(如Windows、Linux)普遍采用时间片轮转的抢占式调度方式。在这种机制下:每个任务执行固定长度的时间片后被强制暂停被暂停的任务进入就绪状…...

旧Mac焕新指南:使用OpenCore Legacy Patcher打造启动盘

旧Mac焕新指南:使用OpenCore Legacy Patcher打造启动盘 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac设备因硬件限制无法升级到最新macOS系统时&am…...

写作压力小了!2026最新AI论文写作工具测评与推荐

2026年真正好用的AI论文写作工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

Acode:重新定义Android移动代码编辑体验

Acode:重新定义Android移动代码编辑体验 【免费下载链接】Acode Acode - powerful text/code editor for android 项目地址: https://gitcode.com/gh_mirrors/ac/Acode 在移动开发日益普及的今天,拥有一款高效的移动代码编辑器成为开发者的迫切需…...

构建智能体协作网络:从 MCP 资源连接到 A2A 通信的 Agentic AI 工程实践

1. 智能体协作网络的基础架构 想象一下,你正在指挥一支由不同专家组成的团队完成市场报告。数据分析师负责整理数据,文案专员负责撰写内容,而行政助理则负责最终分发。在AI领域,这样的分工协作正是通过MCP协议和A2A协议实现的。前…...

告别重复劳动:OpenClaw+nanobot批量重命名与整理照片实战

告别重复劳动:OpenClawnanobot批量重命名与整理照片实战 1. 为什么需要自动化照片整理 每次旅行回来,面对相机和手机里混杂的几百张照片,整理工作总是让人头疼。手动创建文件夹、按日期地点分类、重命名文件——这些重复劳动不仅耗时&#…...