windows蓝牙驱动开发-蓝牙 LE 邻近感应配置文件

邻近感应检测是蓝牙低功耗 (LE) 的常见用途。 本部分提供了创建可用于开发 UWP 设备应用的邻近感应配置文件的设备实现的指南。

在开发此应用之前,应熟悉蓝牙 LE 函数和蓝牙 LE 邻近感应配置文件规范。

示例服务声明

蓝牙低功耗引入了一个新的物理层,该层与蓝牙基本速率共享相同的频率空间。 低功耗配置文件整理成所谓的泛型属性配置文件(或 GATT)。

GATT 配置文件声明了定义用例或场景的一个或多个服务。 若要开发合规的服务实现,必须对特征进行整理,使其符合在蓝牙特别兴趣组 (SIG) 开发人员网站上定义的已建立架构。

下图演示了特征在典型 GATT 服务内的结构方式。

蓝牙邻近感应配置文件

邻近感应配置文件定义了两个角色,旨在允许设备检测其邻近度。

这两个角色称为:

  • 邻近报告器
  • 邻近监视器

邻近报告器

邻近报告器必须是通用 ATTribute (GATT) 服务器。

邻近报告器支持以下 GATT 服务:

  • 链接中断服务(必需)
  • 即时警报服务(可选)
  • Tx 电源服务(可选)
邻近监视器

邻近监视器是 GATT 客户端。 它应创建和维护与邻近报告器的连接,并监视连接的无线电信号强度信息(或 RSSI),以计算信号的路径损失。 如果邻近报告器上提供了可选的 Tx 电源服务,它还可以通过从 Tx 电源级别减去 RSSI 来规范化 RSSI 值。

Windows 中对 GATT 的支持

当 GATT 设备与 Windows 配对时,该设备将成为系统的一部分。 Windows 提供设备对象来表示设备所报告的设备和主要服务。

Windows.Devices.Bluetooth.GenericAttributeProfile 命名空间描述了应用开发人员可在 Windows 中使用的通用属性配置文件 API。

开发设备应用时的第一步是确定该应用需要哪些蓝牙服务才能完成用户关心的场景。 对于邻近配置文件,设备应用需要使用链接中断服务,并根据需要使用即时警报服务和 Tx 电源服务。

设备应用应使用 Windows.Devices.Enumeration 命名空间中可用的 API 来确定与 Windows 配对的所有设备是否实现链接中断服务。 具体而言,请使用 DeviceInformation.FindAllAsync 方法。

DeviceInformation.FindAllAsync 方法采用 AQS(高级查询语法)设备选择器作为参数,以便仅筛选包含链接中断服务的设备。 设备应用开发人员还可以使用 GattDeviceService 类的 GetDeviceSelectorFromUuid 或 GetDeviceSelectorFromShortId 方法,因此无需手动构造 AQS 筛选器。

链接中断服务是由蓝牙 SIG 定义的蓝牙 GATT 服务,因此可以使用短 ID 而非完全限定的 UUID。

为邻近配置文件服务分配的短 ID 服务 ID 为:

服务名称短 ID
链接中断0x1803
即时警报0x1802
Tx 电源0x1804

蓝牙 SIG 会维护分配号码文档中服务的最新列表。

确定要使用的服务后,调用 GattDeviceService.FromIdAsync 以获取该服务的实例。

获取有效的 GattDeviceService 对象后,使用该对象通过 Windows.Devices.Bluetooth.GenericAttributeProfile API 与设备通信。

这些 API 允许访问特定服务及其对象(例如包含的服务、特征和描述符),以及读取和写入功能。

高效使用电源

Windows 中对蓝牙低功耗的支持非常注重高效地使用电源。 这包括减少本地蓝牙无线电适配器的功耗,以及尽可能降低 CPU 使用率。

因此,若要建立蓝牙 LE 连接,应用需要为 GattCharacteristic.ValueChanged 事件注册处理程序。 或者,应用必须调用 GattCharacteristic.ReadValueAsync、GattCharacteristic.WriteValueAsync 或 GattCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync 中的任何方法,而无需指定 BluetoothCacheMode.Cached 选项。

为了最大程度地减少能耗,Windows 不会通过轮询本地蓝牙无线电控制器来主动监视链接的 RSSI 值。

配置文件实现详细信息

若要实现节能设计,设备实现必须遵守特定要求,以确保它们与 Windows 保持兼容。

以下子主题介绍了可高效使用电源的设备端要求,并描述一种可以监视连接状态的技术。

建立连接

当应用程序具有为 GattCharacteristic.ValueChanged 事件注册的处理程序时,Windows 会自动连接到设备。 但是,邻近感应配置文件中所含服务的基本定义不包含任何指示性或可识别的特征。 设备可以将包含指示性或可识别特征的服务添加到邻近感应配置文件中包含的服务。 这意味着邻近设备必须至少支持一个指示性或可识别的特征值,并且应用程序必须将至少一个处理程序注册到 GattCharacteristic.ValueChanged 事件,以便自动建立连接。

检测连接中断

与蓝牙邻近感应配置文件中的提及一样,Windows 8.1 不会公开蓝牙连接的 RSSI 值。 因此,应用无法使用 RSSI 值来计算连接路径损失。 相反,我们建议设备将其邻近感应绑定到链接中断事件。

监视连接状态

应用可以使用 PnpObjectWatcher 监视 GATT 设备的连接状态,以及监视服务设备对象的 PnP“Connected”属性。

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

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

相关文章

逻辑回归:Sigmoid函数在分类问题中的应用

欢迎来到我的主页:【Echo-Nie】 本篇文章收录于专栏【机器学习】 1 什么是Sigmoid函数? Sigmoid函数(Logistic函数)是机器学习中最经典的激活函数之一,是一个在生物学中常见的S型函数,也称为S型生长曲线。…

如何在Windows中配置MySQL?

MySQL是一个广泛使用的开源关系型数据库管理系统,它支持多种操作系统平台,其中包括Windows。无论是开发者进行本地开发,还是管理员为应用程序配置数据库,MySQL都是一个非常流行的选择。本篇文章将详细介绍如何在Windows操作系统中…

MySQL的操作

一.数据库的操作 1.创建数据库 create database (if not exists) 数据库名称 (character set/charset 字符集名称); SQL中有特定含义的单词(create database)也就是关键字 在创建数据库名 表名 列名的时候都可以和关键字重复 。 if not exists&#xff1…

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的? MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…

响应式编程_05 Project Reactor 框架

文章目录 概述响应式流的主流实现框架RxJavaReactor Project Reactor 框架Reactor 异步数据序列Flux 和 Mono 组件FluxMono 操作符背压处理 小结 概述 响应式编程_02基本概念:背压机制 Backpressure介绍了响应式流规范以及 Spring 框架中的响应式编程技术&#xff…

免费windows pdf编辑工具Epdf

Epdf(完全免费) 作者:不染心 时间:2025/2/6 Github: https://github.com/dog-tired/Epdf Epdf Epdf 是一款使用 Rust 编写的 PDF 编辑器,目前仍在开发中。它提供了一系列实用的命令行选项,方便用户对 PDF …

计算机组成原理(3)

计算机组成原理(3) 存储器层次结构存储器概述存储器分类存储器性能指标 半导体随机存储SRAM和DRAM 存储器层次结构 主存-辅存:实现了虚拟存储系统,解决了主存容量不足的问题; Cache-主存:解决了主存于CPU速…

html 列动态布局

样式说明: /* 列动态布局,列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }

25/2/8 <机器人基础> 阻抗控制

1. 什么是阻抗控制? 阻抗控制旨在通过调节机器人与环境的相互作用,控制其动态行为。阻抗可以理解为一个力和位移之间的关系,涉及力、速度和位置的协同控制。 2. 阻抗控制的基本概念 力控制:根据感测的外力调节机械手的动作。位置…

Redis03 - 高可用

Redis高可用 文章目录 Redis高可用一:主从复制 & 读写分离1:主从复制的作用2:主从复制原理2.1:全量复制2.2:增量复制(环形缓冲区) 3:主从复制实际演示3.1:基本流程准…

蓝桥杯C语言组:图论问题

蓝桥杯C语言组图论问题研究 摘要 图论是计算机科学中的一个重要分支,在蓝桥杯C语言组竞赛中,图论问题频繁出现,对参赛选手的算法设计和编程能力提出了较高要求。本文系统地介绍了图论的基本概念、常见算法及其在蓝桥杯C语言组中的应用&#…

在阿里云ECS上一键部署DeepSeek-R1

DeepSeek-R1 是一款开源模型,也提供了 API(接口)调用方式。据 DeepSeek介绍,DeepSeek-R1 后训练阶段大规模使用了强化学习技术,在只有极少标注数据的情况下提升了模型推理能力,该模型性能对标 OpenAl o1 正式版。DeepSeek-R1 推出…

Ollama + AnythingLLM + Deepseek r1 实现本地知识库

1、Ollama:‌是一个开源的大型语言模型 (LLM)服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛‌。 2、AnythingLLM:是由Mintplex Labs Inc. 开发的一款全栈应用程序,旨在构建一个高效、可定制、…

(Arxiv-2023)HiPA: 通过高频增强自适应实现一步文本到图像扩散模型

HiPA: 通过高频增强自适应实现一步文本到图像扩散模型 paper是NUS发布在Arxiv 2023的工作 paper title:HiPA: Enabling One-Step Text-to-Image Diffusion Models via High-Frequency-Promoting Adaptation Code:等待开源 Abstract 扩散模型已彻底改变了文本到图像…

Java版本与JDK版本

两者关联 Java版本指的Java语言和平台的版本,例如Java8、Java11、Java17等,每个版本会引入新特性、改进和修复。 JDK(Java Development Kit)版本则是开发工具包,包含编译器、调试器等工具,通常与Java版本对应,例如JDK…

【C语言标准库函数】三角函数

目录 一、头文件 二、函数简介 2.1. 正弦函数:sin(double angle) 2.2. 余弦函数:cos(double angle) 2.3. 正切函数:tan(double angle) 2.4. 反正弦函数:asin(double value) 2.5. 反余弦函数:acos(double value)…

活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…

MySQL第五次作业

根据图片内容完成作业 1.建表 (1)建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…

Breakout靶场小试牛刀

1.首先经典两件套 nmap -A 扫描 发现开放很多端口(80,10000,20000为重点关注) 问题不大,先dirsearch扫一下目录再说 结果能看的manual里啥也没有,之后再查看80端口界面源代码 发现有一串字符 但是问了ai…

Vue el-tree 加载过滤出的父节点以及其包含的子节点

由于el-tree提供的过滤函数&#xff0c;过滤出来的目录节点不包含子节点&#xff0c;因此需要改造过滤函数&#xff0c;使其过滤出的目录节点包含子节点。 <template><div><el-input placeholder"请输入内容" v-model"filterText" clearab…