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

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”属性。

相关文章:

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

邻近感应检测是蓝牙低功耗 (LE) 的常见用途。 本部分提供了创建可用于开发 UWP 设备应用的邻近感应配置文件的设备实现的指南。 在开发此应用之前,应熟悉蓝牙 LE 函数和蓝牙 LE 邻近感应配置文件规范。 示例服务声明 蓝牙低功耗引入了一个新的物理层,…...

【截图】selenium自动通过浏览器截取指定元素div的图片

【截图】selenium自动通过浏览器截取指定元素div的图片 思路 截取完整网页截图 通过元素的坐标 截图到指定位置的图片 前提是已经获取到 driver 了 # 定位目标divtarget_div driver.find_element(By.CLASS_NAME, headlines-right)# 获取div的位置和大小location target_div…...

【算法】动态规划专题⑨ —— 二维费用背包问题 python

目录 前置知识进入正题实战演练 前置知识 【算法】动态规划专题⑤ —— 0-1背包问题 滚动数组优化 python 进入正题 二维费用背包问题 方法思路 二维费用背包问题在传统背包问题的基础上增加了第二个维度的限制(如重量)。 每个物品具有两种费用&#x…...

免费windows pdf编辑工具Epdf

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

MVCC机制深度解析

在数据库管理系统中,多版本并发控制(MVCC,Multi-Version Concurrency Control)是一种用于提高数据库并发性能的技术。它通过在同一数据项上存储多个版本,允许事务在读取数据时不必等待其他事务的完成,从而提…...

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),它负责管理整个集群中所有分区和副本的状态。…...

element-plus el-tree-select 修改 value 字段

element-plus el-tree-select 修改 value 字段 &#xff0c;不显示label 需要注意两个地方&#xff1a; <el-tree-select v-model"value" :data"data" multiple :render-after-expand"false" show-checkbox style"width: 240px" …...

SQL最佳实践(笔记)

写在前面&#xff1a; 之前baeldung的Java Weekly &#xfeff;Reviews里面推荐了一篇关于SQL优化的文章&#xff0c;正好最近在学习数据库相关知识&#xff0c;记一些学习笔记 原文地址&#xff1a;SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…...

在 Java 中执行一个复杂的 SQL 查询(包含多表连接、子查询和聚合函数),如何确保查询的性能?请列举至少三条措施。请简要描述其工作原理?

在Java中执行复杂的SQL查询时&#xff0c;确保查询性能是非常重要的。 以下是三条关键措施&#xff0c;以及它们的详细解释、代码示例和实际开发中的注意事项。 1. 使用索引 索引是提高数据库查询性能的最基本手段之一。通过在查询条件中使用的列上创建索引&#xff0c;可以…...

java将list转成树结构

首先是实体类 public class DwdCusPtlSelectDto {//idprivate String key;//值private String value;//中文名private String title;private List<DwdCusPtlSelectDto> children;private String parentId;public void addChild(DwdCusPtlSelectDto child) {if(this.chil…...

【R语言】数据分析

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

传输层协议 UDP 与 TCP

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

Linux 调用可执行程序

Linux 调用可执行程序 1. system() 函数1.1 system() 函数的声明1.2 system() 函数的不同场景返回值1.3 system() 函数的代码示例 2. exec() 函数族2.1 exec() 函数族的声明2.2 exec() 函数族执行失败的情况2.3 exec() 函数族的代码示例 3. exec() 与 system() 的区别以及使用注…...

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

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

剪辑学习整理

文章目录 1. 剪辑介绍 1. 剪辑介绍 剪辑可以干什么&#xff1f;剪辑分为哪些种类&#xff1f; 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的问题

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

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

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

Java中的继承及相关概念

在 Java 中&#xff0c;继承是一种允许一个类继承另一个类的特性。通过继承&#xff0c;子类可以获取父类的属性和方法&#xff0c;这有助于减少代码冗余并提高代码的可维护性。以下是关于文件内容的相关分析和知识点总结&#xff1a; 一、继承的核心概念 1.继承的语法 Java …...

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

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

DNS攻击方式有哪些,应该采取哪些应对措施?

在当今数字化时代&#xff0c;网络已成为人们生活和工作不可或缺的一部分。而 DNS&#xff08;域名系统&#xff09;作为互联网的关键基础设施&#xff0c;如同电话簿一般&#xff0c;将人们易于记忆的域名转换为计算机能够识别的 IP 地址&#xff0c;让我们能够轻松访问各类网…...

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

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

如何优化爬虫以提高搜索效率

在数据采集和网络爬虫领域&#xff0c;优化爬虫性能是提升数据采集效率的关键。随着网页结构的日益复杂和数据量的不断增长&#xff0c;高效的爬虫能够显著降低运行时间和资源成本。本文将详细介绍如何优化爬虫以提高搜索效率&#xff0c;包括选择合适的工具、优化代码逻辑、使…...

Node.js中http模块(二)

一、http模块 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块提供的 http.createServer0) 方法&#xff0c;就能方便的把一台普通的电脑&#xff0c;变成一台 Web 服务器&#xff0c;从而对外提供 Web 资源服务。 二、域名和域名服务器 尽管 I…...

android selinux 问题

参考 Android Selinux介绍&#xff0c;如何添加selinux 权限SELinux权限-总结添加Selinux 权限/常见的Selinux 权限问题为何Android普通APP可以执行私有数据中的so文件&#xff0c;而system app却不可以&#xff1f;Android SELinux权限概念和配置说明Selinux中的APP分类Andro…...

递增三元组(蓝桥杯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、离开草图...