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

news2025/2/11 9:00:30

邻近感应检测是蓝牙低功耗 (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.coloradmin.cn/o/2295514.html

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

相关文章

免费windows pdf编辑工具Epdf

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

C++:类和对象初识

C:类和对象初识 前言类的引入与定义引入定义类的两种定义方法1. 声明和定义全部放在类体中2. 声明和定义分离式 类的成员变量命名规则 类的访问限定符及封装访问限定符封装 类的作用域与实例化类的作用域类实例化实例化方式: 类对象模型类对象的大小存储…

伪分布式Spark3.4.4安装

参考:Spark2.1.0入门:Spark的安装和使用_厦大数据库实验室博客 我的版本: hadoop 3.1.3 hbase 2.2.2 java openjdk version "1.8.0_432" 问了chatgpt,建议下载Spark3.4.4,不适合下载Spark 2.1.0: step1 Spark下载…

kafka服务端之控制器

文章目录 概述控制器的选举与故障恢复控制器的选举故障恢复 优雅关闭分区leader的选举 概述 在Kafka集群中会有一个或多个broker,其中有一个broker会被选举为控制器(Kafka Controler),它负责管理整个集群中所有分区和副本的状态。…

【R语言】数据分析

一、描述性统计量 借助R语言内置的airquality数据集进行简单地演示: 1、集中趋势:均值和中位数 head(airquality) # 求集中趋势 mean(airquality$Ozone, na.rmT) # 求均值 median(airquality$Ozone, na.rmT) # 求中位数 2、众数 众数(mod…

传输层协议 UDP 与 TCP

🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 前置复盘🦋 传输层🦋 再谈端口号🦋 端口号范围划分🦋 认识知名端口号 (Well-Know Port Number) 二&#xf…

Java/Kotlin双语革命性ORM框架Jimmer(一)——介绍与简单使用

概览 Jimmer是一个Java/Kotlin双语框架 包含一个革命性的ORM 以此ORM为基础打造了一套综合性方案解决方案,包括 DTO语言 更全面更强大的缓存机制,以及高度自动化的缓存一致性 更强大客户端文档和代码生成能力,包括Jimmer独创的远程异常 …

剪辑学习整理

文章目录 1. 剪辑介绍 1. 剪辑介绍 剪辑可以干什么?剪辑分为哪些种类? https://www.bilibili.com/video/BV15r421p7aF/?spm_id_from333.337.search-card.all.click&vd_source5534adbd427e3b01c725714cd93961af 学完剪辑之后如何找工作or兼职&#…

IDEA查看项目依赖包及其版本

一.IDEA将现有项目转换为Maven项目 在IntelliJ IDEA中,将现有项目转换为Maven项目是一个常见的需求,可以通过几种不同的方法来实现。Maven是一个强大的构建工具,它可以帮助自动化项目的构建过程,管理依赖关系,以及其他许多方面。 添加Maven支持 如果你的项目还没有pom.xm…

centos虚拟机迁移没有ip的问题

故事背景,我们的centos虚拟机本来是好好的,但是拷贝到其他电脑上就不能分配ip,我个人觉得这个vmware他们软件应该搞定这个啊,因为这个问题是每次都会出现的。 网络选桥接 网络启动失败 service network restart Restarting netw…

Java 大视界 -- Java 大数据在智能供应链中的应用与优化(76)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

赛博算命之 ”梅花易数“ 的 “JAVA“ 实现 ——从玄学到科学的探索

hello~朋友们!好久不见! 今天给大家带来赛博算命第三期——梅花易数的java实现 赛博算命系列文章: 周易六十四卦 掐指一算——小六壬 更多优质文章:个人主页 JAVA系列:JAVA 大佬们互三哦~互三必回!&#xf…

即梦(Dreamina)技术浅析(六):多模态生成模型

多模态生成模型是即梦(Dreamina)的核心技术之一,旨在结合文本和图像信息,生成更符合用户需求的视觉内容。多模态生成模型通过整合不同类型的数据(如文本和图像),能够实现更丰富、更精准的生成效果。 1. 基本原理 1.1 多模态生成模型概述 多模态生成模型的目标是结合不…

递增三元组(蓝桥杯18F)

暴力求解&#xff1a; #include<iostream> using namespace std; int main() {int N;cin >> N;int* A new int[N];int* B new int[N];int* C new int[N];for (int i 0; i < N;i) {cin >> A[i];}for (int i 0; i < N; i) {cin >> B[i];}for…

计算机毕业设计SparkStreaming+Kafka广告推荐系统 广告预测 广告数据分析可视化 广告爬虫 大数据毕业设计 深度学习 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

FreeCAD创建零件(系列1)

1、新建草图绘制1个矩形 2、画1个半圆弧 3、增加一个约束点 4、标注距离 5、将线段转为辅助线 将图中的线段切换为辅助线,线条颜色之后转为蓝色线。 6、离开草图

韶音科技:消费电子行业售后服务实现数字化转型,重塑客户服务体系

韶音科技&#xff1a;消费电子行业售后服务实现数字化转型&#xff0c;重塑客户服务体系 在当今这个科技日新月异的时代&#xff0c;企业之间的竞争早已超越了单纯的产品质量比拼&#xff0c;**售后服务成为了衡量消费电子行业各品牌实力与客户满意度的关键一环。**深圳市韶音…

mes系统对工业数字化转型起到重要作用,它的实际应用有哪些

一、生产计划与调度 在工业数字化转型中&#xff0c;MES 系统能够对生产计划进行高效的管理和调度。通过与企业资源计划&#xff08;ERP&#xff09;系统的集成&#xff0c;MES 可以获取生产订单信息&#xff0c;并根据生产设备的状态、人员安排以及物料供应情况等因素&#x…

网络安全:挑战、技术与未来发展

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着互联网的普及和信息技术的高速发展&#xff0c;网络攻击的…

从零开始玩转Docker:轻松开启容器化之旅

一、什么是 Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。简单来说&#xff0c;Docker 就像是一个超级 “快递箱”&#xff0c…