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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU 硬件原理架构(一)

这张费米管线架构图能看懂了,整个GPU的架构基本就熟了。市面上有很多GPU厂家,他们产品的架构各不相同,但是核心往往差不多,整明白一了个基本上就可以触类旁通了。下面这张图信息量很大,可以结合博客GPU 英伟达GPU架构回…

CSS布局与响应式

学习链接 Grid网格布局 前端五大主流网页布局 flex布局看这一篇就够了 grid布局看这一篇就够了 用六个案例学会响应式布局 伸缩盒响应式页面布局实战 实现响应式布局的五种方式 - csdn 如何完成响应式布局,有几种方法?看这个就够了 响应式布局总…

mysql 如何快速删除表数据

在数据库管理中, 经常会遇到需要删除大量数据的情况. 对于 MySQL 数据库而言, 如何高效快速地删除数据是一个值得深入探讨的问题. 本文将详细介绍几种在 MySQL 中快速删除数据的方法及相关注意事项. delete 语句 delete 语句可以删除符合条件的指定数据, 但是在删除大量数据…

大疆最新款无人机发布,可照亮百米之外目标

近日,DJI 大疆发布全新小型智能多光旗舰 DJI Matrice 4 系列,包含 Matrice 4T 和 Matrice 4E 两款机型。DJI Matrice 4E 价格为27888 元起,DJI Matrice 4T价格为38888元起。 图片来源:大疆官网 DJI Matrice 4E DJI Matrice 4T D…

Haskell语言的网络编程

Haskell语言的网络编程 引言 随着互联网技术的迅猛发展,网络编程已经成为计算机科学和软件开发领域的重要组成部分。网络编程可以让我们构建各种各样的应用程序,从简单的网页到复杂的分布式系统。而在众多编程语言中,Haskell以其独特的函数…

Nmap入门

- 在已有的参数上加上哄骗或是使用文件 nmap -iL data.txt ------- nmap -PS -PA -O -ttl 200 -F -D dcay1, dcay2,dcay3... -vv -P 3306 1.1.1.0/24 -oN data.txtNmap端口的6个状态 open 应用程序正在该端口接收TCP或UDP报文 closed 关闭的端口对于Nmap也是可访问的(它接受…

ubuntu18.04开发环境下samba服务器的搭建

嵌入式linux的发展很快,最近准备在一个新项目上采用新一代的linux核心板,发现linux内核的版本已经更新到5.4以上甚至6.0以上;之前常用的linux内核版本是2.6.4,虽然在某些项目上还能用但是明显跟不上时代的步伐了,所以要…

Android-V lmkd 中的那些属性值

源码基于:Android V 相关博文: Android lmkd 机制详解(一) Android lmkd 机制详解(二) Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式,会打印一…

消息中间件的基础概念入门

目录 一、什么是消息中间件 1.1、简介 1.2、消息中间件的主要作用 解耦合 异步通信 负载均衡 可靠性与持久性 消息路由与调度 削峰 事务支持 监控与审计 跨平台和跨语言支持 二、常用消息中间件对比 2.1、 RabbitMQ 2.1.1、特点 2.1.2、适用场景 2.2、Apache K…

计算机网络速成

前言:最近在做一些动态的crypto,但是配置总搞不好,正好也有学web的想法,就先学学web再回去做密码,速成视频推荐b站建模老哥 目录 计算机网络概述网络的范围分级电路交换网络(电路交换)报文交换网…

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件: 组件第一次渲染完毕后,无法基于内部的某些操作让组件更新「无法实现自更新」;但是,如果调用它的父组…

Qt/C++ 基于 QGraphicsView 的绘图软件 (附源码下载链接)

基于 Qt 的 QGraphicsView 绘图软件项目进行深入讲解,分析其核心代码与功能实现,帮助开发者理解 QGraphicsView 的用法。 项目概览 该项目实现了一个简单的绘图应用,用户可以在界面中创建和编辑矩形、椭圆、直线、多边形和文本等图形对象。功…

Vue2+OpenLayers给2个标点Feature分别添加独立的点击事件(提供Gitee源码)

前言:之前开发都是将所有的点位存放在一个图层上面,并统一赋予它们相同的点击事件,如果其中某些点的点击事件不一样呢,这种问题如何解决呢,本篇博客就是解决这个通点。 目录 一、案例截图 二、安装OpenLayers库 三…

山石防火墙命令行配置示例

现网1台山石SG6000防火墙,配置都可以通过GUI实现。 但有一些配置在命令行下配置效率更高,比如在1个已有策略中添加1个host或端口。 下面的双引号可以不加 1 创建服务 1.1 单个端口 service "tcp-901"tcp dst-port 901 1.2 端口范围 servi…

李宏毅机器学习课程笔记03 | 类神经网络优化技巧

文章目录 类神经网络优化技巧局部最小值local minima 与 鞍点saddle pointSaddle Point 的情况更常见 Tips for training:Batch and MomentumSmall Batch vs Large Batch回顾:optimization优化 找到参数使L最小问题:为什么要用Batch&#xff…

K8s 集群 IP 地址管理指南(K8s Cluster IP Address Management Guide)

K8s 集群 IP 地址管理指南 概述 你是否在小型初创公司或大型企业工作,并正在为公司评估 Kubernetes?你可能正在考虑运行十几个或更多的 Kubernetes (K8s) 集群。你期望每个集群支持几百个 K8s 节点,每个节点可能有 50 到 100 个 K8s Pod。这…

鸿蒙-点击Notification通知并打开App的具体页面

意图通知 获取router事件中传递参数并跳转 目前点击通知消息打开应用的指定页面,通过为通知添加行为意图的方式。也就是在wants的parameters中设置自定义参数,然后在UIAbility的onNewWant或者onCreate方法中 解析配置的自定义参数信息判断跳转不同页面&a…

go语言实现UTF8与GB2312内码转换

使用Go语言做个UTF-8转GB2312的代码,输入utf-8编码的文本,输出转换后的国标编码的hex内码 package mainimport ("fmt""os""strings""golang.org/x/text/encoding/simplifiedchinese""golang.org/x/text/transform&quo…

使用AKTools本地部署AKShare财经数据接口库

使用AKTools部署AKShare财经数据接口库,AKShare的介绍见:基于 Python 的财经数据接口库:AKShare-CSDN博客 AKTools 是一款用于快速搭建 AKShare HTTP API 的工具,通过 AKTools 可以利用一行命令来启动 HTTP 服务,从而…

FreeType 介绍及 C# 示例

FreeType 是一个开源的字体渲染引擎,用于将字体文件(如 TrueType、OpenType、Type 1 等)转换为位图或矢量图形。它广泛应用于操作系统、图形库、游戏引擎等领域,支持高质量的字体渲染和复杂的文本布局。 FreeType 的核心功能 字体…