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 提取总线接口的微型端口。

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

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

相关文章

C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。…

第十三章:数据库技术

文章目录: 一:基础 1.概念 2.特点 3.常见数据库品牌 4.数据库应⽤系统 4.1 C/S 4.2 B/S 5.数据模型的分类 6.名词解析 7.关系运算 二:Access 1.基础 2.操作 2.1 建立表 2.2 维护表 2.3 创建查询 2.4 创建窗体 2.5 创建报表…

目标检测新视野 | YOLO、SSD与Faster R-CNN三大目标检测模型深度对比分析

目录 引言 YOLO系列 网络结构 多尺度检测 损失函数 关键特性 SSD 锚框设计 损失函数 关键特性 Faster R-CNN 区域建议网络(RPN) 两阶段检测器 损失函数 差异分析 共同特点 基于深度学习 目标框预测 损失函数优化 支持多类别检测 应…

浏览器输入http形式网址后自动跳转https解决方法

一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况: 在浏览器中输入“http域名”后会自动变成“https 域名”的形式,此时“https 域名”的网站可能已停止对外提供服务了,这时会出现如下不友好的网页提示: 二、处理方法&#x…

Unity2017 控制.abc格式的三维动画播放

首先需要导入插件Alembic,否则导入abc动画,Unity是不会识别的。 Unity2017版本及以下直接从我这儿下载:https://download.csdn.net/download/qq_41603955/90272382 高版本Unity,请移步AssetStore商店搜找。 导入abc之后&#x…

python管理工具:conda部署+使用

python管理工具:conda部署使用 一、安装部署 1、 下载 - 官网下载: https://repo.anaconda.com/archive/index.html - wget方式: wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…

挖掘机检测数据集,准确识别率91.0%,4327张原始图片,支持YOLO,COCO JSON,PASICAL VOC XML等多种格式标注

挖掘机检测数据集,准确识别率91.0%,4327张图片,支持YOLO,COCO JSON,PASICAL VOC XML等多种格式标注 数据集详情 数据集分割 训练组70% 3022图片 有效集20% 870图片 测试集10&…

vue 学习笔记 - 创建第一个项目 idea

1、安装Vue CLI 查看npm版本号 (可跳过) % npm -v 11.0.0安装Vue CLI % npm install -g vue/cli2、创建项目 进入工程文件目录 % cd /Users/ruizhifeng/work/aina-client查看vue 版本号 (可跳过) % vue --version vue/cli 5…

BIO、NIO、AIO

第一章 BIO、NIO、AIO课程介绍 1.1 课程说明 ​ 在Java的软件设计开发中,通信架构是不可避免的,我们在进行不同系统或者不同进程之间的数据交互,或者在高并发下的通信场景下都需要用到网络通信相关的技术,对于一些经验丰富的程序员来说,Java早期的网络通信架构存在一些缺…

SpringMVC复习笔记

文章目录 SpringMVC 概念和基本使用SpringMVC 简介SpringMVC 核心组件和调用流程SpringMVC 基本使用第一步:导入依赖第二步:Controller 层开发第三步:SpringMVC 配置类配置核心组件第四步:SpringMVC 环境搭建第五步:部…

NEC纪实 :2024全国机器人大赛 Robocon 常州工学院团队首战国三

全国机器人大赛 Robocon 常州工学院团队首战国三 通宵7天7夜,常州工学院RC团队,首次闯入全国机器人大赛国赛,并成功得分! 不同于老牌强队,常州工学院(下面用"常工"代替)的这只队伍&…

Golang结合MySQL和DuckDB提高查询性能

要在Golang中组合MySQL和DuckDB以提高查询性能,请考虑使用混合查询执行方法。这种方法利用了MySQL强大的事务管理和DuckDB闪电般的分析处理能力。本文介绍如何充分利用两者的方法。 各取所长 用MySQL处理事务,用DuckDB处理分析 MySQL应该处理常规的INS…

数据结构-单向不带头不循环链表

链表知识总结 逻辑结构:线性结构(元素之间存在一对一关系) 存储结构(物理结构):链式存储(存储顺序和逻辑顺序不在乎是否一致) 1.链表的特点:擅长进行动态删除和增加操作&…

28:CAN总线入门一:CAN的基本介绍

CAN总线入门 1、CAN总线简介和硬件电路1.1、CAN简要介绍1.2、硬件电路1.3、CAN总线的电平标准 2、帧格式2.1、数据帧(掌握)2.2、遥控帧(掌握)2.3、错误帧(了解)2.4、过载帧(了解)2.5…

2018年西部数学奥林匹克几何试题

2018G1 在 △ A B C \triangle ABC △ABC 中, O O O 为外心, M M M 为边 B C BC BC 的中点, 延长 A B AB AB 交 ( A O M ) (AOM) (AOM) 于点 D D D, ( A O M ) (AOM) (AOM) 交 A C AC AC 于点 E E E. 求证: E C D M ECDM ECDM. 证明: 设点 G G G 为 △ A B C …

知识图谱抽取分析中,如何做好实体对齐?

在知识图谱抽取分析中,实体对齐是将不同知识图谱中的相同实体映射到同一表示空间的关键步骤。为了做好实体对齐,可以参考以下方法和策略: 基于表示学习的方法: 使用知识图谱嵌入技术,如TransE、GCN等,将实体…

UnityXR Interaction Toolkit 如何检测HandGestures

前言 随着VR设备的不断发展,从最初的手柄操作,逐渐演变出了手部交互,即头显可以直接识别玩家的手部动作,来完成手柄的交互功能。我们今天就来介绍下如何使用Unity的XR Interaction Toolkit 来检测手势Hand Gesture。 环境配置 1.使用Unity 2021或者更高版本,创建一个项…

Maven在Win10上的安装教程

诸神缄默不语-个人CSDN博文目录 这个文件可以跟我要,也可以从官网下载: 第一步:解压文件 第二步:设置环境变量 在系统变量处点击新建,输入变量名MAVEN_HOME,变量值为解压路径: 在系统变…

高等数学学习笔记 ☞ 不定积分与积分公式

1. 不定积分的定义 1. 原函数与导函数的定义: 若函数可导,且,则称函数是函数的一个原函数,函数是函数的导函数。 备注: ①:若函数是连续的,则函数一定存在原函数,反之不对。 ②&…

KHOJ的安装部署

KHOJ的部署记录 KHOJ是一个开源的AI对话平台(github标星超2w),有免费版本(https://app.khoj.dev/)。但本地部署,可以保证自己的文件安全,另外一方面,有数据库能随时查询过去自己的所…