首页 > 其他分享 >蓝牙BLE上位机工具开发理论线索梳理_3.WINRT Devices设备相关

蓝牙BLE上位机工具开发理论线索梳理_3.WINRT Devices设备相关

时间:2024-06-13 22:03:28浏览次数:25  
标签:Aep Windows 提供 Devices API WINRT BLE 设备

1.WINRT关于Devices设备相关的命名空间

        关于WINRT科以参考下面这篇博文学习理解。以下列出Devices设备相关的API命名空间。

理解WinRT - 厚积薄发 - C++博客

Windows.Devices此命名空间提供对低级别设备提供程序的访问,包括 ADC、GPIO、I2 C、PWM 和 SPI。
Windows.Devices.AdcAnalog-Digital 转换器(ADC)是一种电气组件,用于将模拟电信号 (通常为电压) 转换为数字表示形式。 ADC 通常与处理来自模拟世界信号的数字线路相连接。
Windows.Devices.Adc.Provider此 API 公开供用户为特定控制器实现的提供程序接口。 ADC API 需要 ADC 提供程序实现才能与 ADC 控制器通信。
Windows.Devices.AllJoyn
Windows.Devices.Background使设备后台任务能够获取触发任务的应用提供的信息,并将进度报告回应用。
Windows.Devices.BluetoothWindows.Devices.Bluetooth 命名空间定义一组允许 UWP 应用和桌面应用与蓝牙设备交互的Windows 运行时 API。 有关详细信息,请参阅 蓝牙
Windows.Devices.Bluetooth.Advertisement允许应用发送和接收蓝牙低功耗 (LE) 广告。
Windows.Devices.Bluetooth.Background提供描述蓝牙触发器的触发器详细信息的类。
Windows.Devices.Bluetooth.GenericAttributeProfileWindows.Devices.Bluetooth.GenericAttributeProfile 命名空间定义 UWP 应用或桌面应用程序可用于与蓝牙 LE 设备通信的Windows 运行时类。
Windows.Devices.Bluetooth.RfcommWindows.Devices.Bluetooth.Rfcomm 命名空间定义了 UWP 应用和桌面应用程序可用于与蓝牙设备通信的Windows 运行时类。 有关详细信息,请参阅 蓝牙若要详细了解如何使用 Windows.Devices.Bluetooth.Rfcomm,请参阅 蓝牙 Rfcomm 聊天示例
Windows.Devices.Custom以异步方式打开自定义设备,并使用从打开操作返回的对象将异步 IOCTL 发送到设备。
Windows.Devices.Display包含用于确定物理显示方面的组件。
Windows.Devices.Display.Core为自定义合成器软件提供管理和向硬件显示管道显示内容的方法。
Windows.Devices.Enumeration提供用于枚举设备的类。
Windows.Devices.Enumeration.Pnp
Windows.Devices.Geolocation提供 API,用于 获取当前位置 或跟踪设备随时间推移的位置。 位置信息可能来自来自信标(如 Wi-Fi 接入点和手机塔)的位置、设备的 IP 地址的估计位置,也可能来自其他来源(如 GNSS 或 GPS 设备)。 Windows.Devices.Geolocation API 提供来自所有可用源的最合适的地理位置数据。
Windows.Devices.Geolocation.Geofencing地理围栏是地理点周围的虚拟区域。 地理围栏 API 使应用程序能够及时提供地理上下文体验,而无需应用持续运行和使用设备资源。 地理围栏支持以下方案:当用户离开工作或回家时弹出提醒,或者在用户到达商店范围内时显示优惠券。
Windows.Devices.Geolocation.Provider在某些情况下,设备的物理位置不够-要么它不代表用户的实际位置,要么设备的当前定位功能不够好,无法满足特定方案。 在这些情况下,远程位置源需要 替代 当前设备位置,而不仅仅是最后的解决方法。 此命名空间中的类型提供这些设施。
Windows.Devices.Gpio包含用于在用户模式下使用常规用途 I/O (GPIO) 引脚的类型。
Windows.Devices.Gpio.Provider此 API 公开提供程序接口和关联类,供你为特定控制器实现。 GPIO API 需要 GPIO 提供程序实现才能与 GPIO 控制器通信。
Windows.Devices.Haptics支持基本的非方向触觉反馈,例如点击、嗡嗡声和隆隆声,这些反馈可通过强度和时间等特征进行优化。
Windows.Devices.HumanInterfaceDevice此命名空间允许 UWP 应用访问支持 人机接口设备 (HID) 协议的设备。
Windows.Devices.I2c包含可用于与通过应用程序间集成电路 (I2 C) 总线连接的外围设备进行通信的类型。
Windows.Devices.I2c.Provider此 API 公开供用户为特定控制器实现的提供程序接口和关联的类。 I2C API 需要 I2 C 提供程序实现才能与 I2 C 控制器通信。
Windows.Devices.Input支持识别可用的输入设备 (指针、触摸、鼠标和键盘) 以及检索有关这些设备的信息。
Windows.Devices.Input.Preview根据用户眼睛和头部的位置和移动,为跟踪用户的凝视、注意力和状态提供支持。
Windows.Devices.Lights提供用于访问和控制 LampArrays 和旧版 Lamp 设备的 API。
Windows.Devices.Lights.Effects为常见 LampArray 方案提供简单效果。
Windows.Devices.Midi此命名空间提供用于在 Windows 运行时 (WinRT) 应用中使用 MIDI 设备的类型。
Windows.Devices.Perception提供用于处理彩色相机、深度传感器和红外相机中的图像帧的类。
Windows.Devices.Perception.Provider包含用于实现感知帧提供程序的类型。
Windows.Devices.PointOfService使应用程序开发人员能够访问服务点 (POS) 外围设备。 命名空间提供与供应商无关的接口,用于从 UWP 应用访问来自各种制造商的 POS 设备。
Windows.Devices.PointOfService.Provider使服务器能够向客户端应用程序提供条形码扫描功能。
Windows.Devices.Portablewindows Portable Devices (WPD) 使计算机能够与附加的媒体和存储设备通信。 此命名空间提供用于标识 Windows 便携设备 (WPD) 服务和存储的方法。
Windows.Devices.Power提供用于详细电池信息的 API。 有关详细信息,请参阅 获取电池信息
Windows.Devices.Printers提供用于处理 3D 打印机的 API。
Windows.Devices.Printers.Extensions包含提供对打印任务配置和打印通知Windows 运行时组件的访问的类和接口。
Windows.Devices.PwmPWM 代表脉冲宽度调制,描述了创建用户定义的长度和占空比的重复方波的基本技术。 最常见的用途包括驱动电机、调光 LED 等。此 API 使用户能够使用连接到系统的 PWM 控制器生成 PWM 波形式。
Windows.Devices.Pwm.Provider此 API 公开供用户为特定控制器实现的提供程序接口。 PWM API 需要 PWM 提供程序实现才能与 PWM 控制器通信。
Windows.Devices.Radios此命名空间的成员允许应用在运行应用的设备上查找和控制无线电适配器(如 Wi-Fi 和蓝牙),并查询这些无线电的某些属性。
Windows.Devices.Scanners包含基于 Windows 映像采集 (WIA 构建的类、接口、结构和其他组件) COM API,为 UWP 应用和桌面应用提供扫描功能。
Windows.Devices.Sensors提供对支持的传感器类型和相关运动数据的访问。
Windows.Devices.Sensors.Custom提供对自定义传感器及其相关数据的访问权限。
Windows.Devices.SerialCommunication命名空间Windows.Devices.SerialCommunication定义Windows 运行时类,UWP 应用可以使用这些类与公开串行端口或串行端口的某些抽象的设备进行通信。 这些类提供发现此类串行设备、读取和写入数据的功能,以及控制流控制的特定于串行的属性,例如设置波特率、信号状态。
Windows.Devices.SmartCards获取有关智能卡读取器和智能卡的信息;配置物理智能卡;以及创建、配置和删除受信任的平台模块 (TPM) 虚拟智能卡。
Windows.Devices.Sms提供发送和接收短信服务 (短信) 消息、筛选传入消息、以静默方式发送消息的功能,以及查询有关移动宽带短信设备的属性的功能。 使用此 API 实现移动运营商 (MO) 应用程序,这些应用程序使用应用定向短信来实现 MO 功能,例如视觉语音邮件应用。
Windows.Devices.Spi串行外设接口 (SPI) 是一种高速接口,用于在同一板上的集成组件之间进行通信。
Windows.Devices.Spi.Provider此 API 公开供用户为特定控制器实现的提供程序接口和关联的类。 SPI API 需要 SPI 提供程序实现才能与 SPI 控制器通信。
Windows.Devices.Usb此命名空间定义 UWP 应用可用于与 WinUSB 设备通信的Windows 运行时类。 这些设备由收件箱 winusb.sys 驱动程序处理,并由特定的 Microsoft OS 描述符标识。
Windows.Devices.WiFi
Windows.Devices.WiFiDirect包含支持连接到关联的 Wi-Fi Direct 设备和电脑、平板电脑和手机的关联终结点的类。
Windows.Devices.WiFiDirect.Services为实现你自己的 Wi-Fi Direct Services 提供支持。

2.Windows.Devices.Enumeration 命名空间

        提供用于枚举设备的类。 以下是 Windows.Devices.Enumeration API 的典型用法。

  • 生成用于选择要由应用程序使用的设备的用户界面。 例如,语音聊天应用程序可能会提供麦克风或网络摄像头列表供用户选择,或者照片导入应用程序可能提供可移动存储设备的列表,供用户从中导入照片。
  • 获取有关连接到系统或可由系统发现的设备的常规信息。
  • 设备发现和使用它们的应用的设备相关通知。
DeviceAccessChangedEventArgs
DeviceAccessInformation

包含有关访问设备的信息。

DeviceConnectionChangeTriggerDetails

提供有关导致此触发器触发的设备的信息。

DeviceDisconnectButtonClickedEventArgs

为 DevicePicker 对象上的 DisconnectButtonClicked 事件提供数据。

DeviceInformation

表示设备。 此类允许访问已知的设备属性,以及设备枚举期间指定的其他属性。

DeviceInformationCollection

表示 DeviceInformation 对象的集合。

DeviceInformationCustomPairing

表示 DeviceInformation 对象的自定义配对。

DeviceInformationPairing

包含信息并启用设备的配对。

DeviceInformationUpdate

包含 DeviceInformation 对象的更新属性。

DevicePairingRequestedEventArgs

为 PairingRequested 事件提供数据。

DevicePairingResult

包含有关尝试配对设备的结果的信息。

DevicePairingSetMembersRequestedEventArgs

传递给 DeviceInformationCustomPairing.PairingSetMembersRequested 事件的处理程序的事件参数,该事件在请求配对集的成员 () 时引发。

DevicePairingSetMembersRequestedEventArgs 包含:指示成功或失败的状态;已添加到集或未能添加到集中的设备/终结点的向量,具体取决于该状态;和有关父设备的信息。

有关详细信息和代码示例,请参阅 将集与 DeviceInformationPairing.Custom 属性配对

DevicePicker

表示一个选取器浮出控件,其中包含供用户选择的设备列表。

在桌面应用中,在以显示 UI 的方式使用此类实例之前,需要将 对象与其所有者的窗口句柄相关联。 有关详细信息和代码示例,请参阅 显示依赖于 CoreWindow 的 WinRT UI 对象

DevicePickerAppearance

表示设备选取器的外观。

DevicePickerFilter

表示用于确定要显示在设备选取器中的设备的筛选器。 将筛选器参数 OR 组合在一起,以生成生成的筛选器。

DeviceSelectedEventArgs

为 DevicePicker 对象上的 DeviceSelected 事件提供数据。

DeviceThumbnail

表示设备的缩略图。

DeviceUnpairingResult

包含有关尝试取消设备配对的结果的信息。

DeviceWatcher

动态枚举设备,以便应用在初始枚举完成后添加、删除或更改设备时接收通知。

DeviceWatcherEvent

在完成初始枚举后更新设备列表时触发。

DeviceWatcherTriggerDetails

提供有关调用触发器的设备更新的详细信息。

EnclosureLocation

描述设备在其机箱中的物理位置。

3.设备信息(  DeviceInformation )属性        

          每个设备均有关联的 DeviceInformation 属性;当需要特定信息或生成设备选择器时,可使用这些属性。 高级查询语法 (AQS) 筛选器可用于指定这些属性,并限制具有指定特征的枚举设备。 此外,还可使用这些属性来指示要为每个设备返回的信息。 这样,便可指定返回到应用程序的设备信息。 如下图为蓝牙设备类中的DeviceInformation属性。

        DeviceInformation类如下图:

         其中常用的方法和属性如下,如标识 (DeviceInformation.Id)、种类 (DeviceInformation.Kind) 和属性包 (DeviceInformation.Properties) 。 DeviceInformation 对象的其他所有属性均派生自 Properties 属性包。 例如,Name 派生自 System.ItemNameDisplay。 这意味着,该属性包始终包含用于确定其他属性所需的信息。

        public static DeviceWatcher CreateWatcher(string aqsFilter, IEnumerable<string> additionalProperties, DeviceInformationKind kind);

        public string Id { get; }
        public DeviceInformationKind Kind { get; }
        public string Name { get; }
        public IReadOnlyDictionary<string, object> Properties { get; }

         在C#中对应的枚举类DeviceInformationKind:可以看到DeviceInformation的种类。

#region 程序集 Windows.Foundation.UniversalApiContract, Version=19.0.0.0, Culture=neutral, PublicKeyToken=null, ContentType=WindowsRuntime
// C:\Users\XXXXXX\.nuget\packages\microsoft.windows.sdk.contracts\10.0.26100.1\ref\netstandard2.0\Windows.Foundation.UniversalApiContract.winmd
#endregion

using Windows.Foundation;
using Windows.Foundation.Metadata;

namespace Windows.Devices.Enumeration
{
    [ContractVersion(typeof(UniversalApiContract), 65536)]
    public enum DeviceInformationKind
    {
        Unknown = 0,
        DeviceInterface = 1,
        DeviceContainer = 2,
        Device = 3,
        DeviceInterfaceClass = 4,
        AssociationEndpoint = 5,
        AssociationEndpointContainer = 6,
        AssociationEndpointService = 7,
        DevicePanel = 8,
        AssociationEndpointProtocol = 9
    }
}

        关于CreateWatcher的用法解释如下:
        public static DeviceWatcher CreateWatcher(string aqsFilter, IEnumerable<string> additionalProperties, DeviceInformationKind kind);
        这个方法的主要作用是根据提供的参数,创建一个设备监视器对象,用于监听和检索满足指定条件的设备信息。具体解释如下:

  • aqsFilter:通过这个参数可以指定一个 AQS 过滤条件,例如可以筛选特定类型的设备(如打印机、摄像头等),或者特定属性(如设备名称包含某个关键字)。
  • additionalProperties:允许指定额外需要获取的设备属性。如果希望除了默认提供的设备信息外,还需要某些额外的特定信息,可以通过这个参数传递。
  • kind:确定要监视的设备信息类型。根据指定的 DeviceInformationKind 类型,可以选择监视基本设备信息、设备容量信息等不同种类的设备信息。

         举例:

        /// <summary>
        /// 搜索蓝牙设备
        /// </summary>
        public void StartBleDeviceWatcher()
        {
            string[] requestedProperties = { "System.Devices.Aep.DeviceAddress", "System.Devices.Aep.IsConnected", "System.Devices.Aep.Bluetooth.Le.IsConnectable" };
            string aqsAllBluetoothLEDevices = "(System.Devices.Aep.ProtocolId:=\"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}\")";

            this.deviceWatcher =
                    DeviceInformation.CreateWatcher(
                        aqsAllBluetoothLEDevices,
                        requestedProperties,
                        DeviceInformationKind.AssociationEndpoint);

            // Register event handlers before starting the watcher.
            this.deviceWatcher.Added += this.DeviceWatcher_Added;
            this.deviceWatcher.Stopped += this.DeviceWatcher_Stopped;
            this.deviceWatcher.Start();
            string msg = "自动发现设备中..";

            this.MessAgeChanged(MsgType.NotifyTxt, msg);

          
        }

 

4. DeviceInformationKind 枚举 

AssociationEndpointProtocol

对于 AssociationEndpointProtocol 常量,AQS 选择器字符串示例为:

System.Devices.Aep.ProtocolId:="{e0cbf06c-cd8b-4647-bb8a-263b43f0f974}" 适用于蓝牙经典) 的 (或 System.Devices.Aep.ProtocolId:=:"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}" 蓝牙 LE) 的 (。

System.Devices.Aep.ProtocolId 是 propsys 中的协议名称;DEVPKEY_Aep_ProtocolId是 Win32 DEVPKEY。

 下面是枚举协议的代表性示例,以及它如何匹配 AEP 属性, (方括号内带有注释) 。

> pairtool /enum-protocols
...
Protocol ID:                Bluetooth [DEVPKEY_Aep_ProviderName]
Protocol Provider Name:     Bluetooth
Protocol Name:              Bluetooth Classic
Universal Protocol ID:      {e0cbf06c-cd8b-4647-bb8a-263b43f0f974} [DEVPKEY_Aep_ProtocolId // <propertyDescription name="System.Devices.Aep.ProtocolId" formatID="{3B2CE006-5E61-4FDE-BAB8-9B8AAC9B26DF}" propID="5">]
Protocol Provider Class ID: {4aa383d6-337a-43d3-a3fa-c14b26004130}

Protocol ID:                BluetoothLE [DEVPKEY_Aep_ProviderName]
Protocol Provider Name:     BluetoothLE
Protocol Name:              Bluetooth Low Energy
Universal Protocol ID:      {bb7bb05e-5972-42b5-94fc-76eaa7084d49} [DEVPKEY_Aep_ProtocolId]
Protocol Provider Class ID: {0829c308-d361-49f4-828b-506d552029ef} 
...
> pairtool /enum-endpoints

BluetoothLE#BluetoothLEdc:46:28:6a:16:01-20:4c:03:45:07:ca
  1)DEVPKEY_Aep_ContainerId [SYS] (null) DEVPROP_TYPE_GUID 16 {72888bff-567a-54f9-861a-73a3f2df469c} 
...
  30)DEVPKEY_Aep_ProviderName [SYS] (null) DEVPROP_TYPE_STRING 24 "BluetoothLE"
  33)DEVPKEY_Aep_ProtocolId [SYS] (null) DEVPROP_TYPE_GUID 16 {bb7bb05e-5972-42b5-94fc-76eaa7084d49}

标签:Aep,Windows,提供,Devices,API,WINRT,BLE,设备
From: https://blog.csdn.net/huaqianzkh/article/details/139651786

相关文章

  • 基于jeecgboot-vue3的Flowable流程-流程处理(一)
    因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。这部分修正一些流程处理中VForm3线上的一些bug问题1、初始化流程提交与现实的前端页面代码<!--初始化流程加载默认VForm3表单信息--><el-col:span="16":offset="4"v-if="formConfOpen">......
  • 【Java】InetAddress.isReachable()失效的底层原因探究
    文章目录背景现象问题原因总结背景在某些场景下,我们可能需要在Java中判断到某个主机的网络是否连通,比如我们的系统中可能有业务需要录入一些主机信息,此时为了更好的用户体验,我们可能会在前端页面上提供一个拨测按钮,让用户可以在输入主机地址之后进行连通性检验,来判......
  • lvgl table的使用(重绘,事件,行选中,点击,蒙版)
     ////验证//密码//人脸//刷卡#include"baseapp.h"staticlv_group_t*appGroupBtn;staticlv_obj_t*infoMeterLVGLBrushCard=NULL;staticlv_obj_t*infoTextareaMeterPasswdValue;staticlv_obj_t*appObjCamera;staticlv_obj_t*appObjCameraAiFaceImg;stat......
  • 【限免】Stable Diffusion一键部署 开箱即用!
    参加AI写真快闪活动时,教学视频只有几分钟,但您可能自己实操时,仅准备环境、上传下载文件就要花几个小时,甚至一两天,苦不堪言!近期好易智算重磅上线,完美解决了stablediffusion模型、Lora等大文件下载慢的问题,下载速度能稳定达到500M/s,5G左右的文件10秒内搞定,加上其一键部署、开箱即......
  • multipass创建虚拟launch failed: Remote "" is unknown or unreachable的错误
    安装multipass后,选择的windows自带的hyperv执行命令:multipasslaunch-nznxs01报错:launchfailed:Remote""isunknownorunreachable网上找了个解决办法,全是安装virturalbox,各种操作,试过没有一个能行后面我自己找到原因了无法从远程服务器活动基础镜像,但网络是通的我对......
  • stable-diffusion-webui 环境配置
    链接:AUTOMATIC1111/stable-diffusion-webui:StableDiffusionwebUI(github.com)查看python版本:   安装完python之后,打开工程,配置虚拟环境 下载安装对应的依赖库,其中的torch相关三个库选择与自己cuda相关的版本安装,我的pytorch选的是2.1.2,下载网址:download.pytorch.o......
  • Windows Server 2012 R2部署网站后IIS,只要访问网址应用程序池就自动停止,浏览器页面提
     解决方案:1.查看windows日志通过文件资源管理器查看:打开文件资源管理器,找到“我的电脑”。右键点击“管理”。在弹出的窗口中,点击“事件查看器”。在事件查看器中,点击“Windows日志”即可查看各种日志信息 2.找到错误信息......
  • element ui 封装Table组件
    1.首先npmielement-ui-S安装element-ui2.引入Element在main.js中写入以下内容:importVuefrom'vue';importElementUIfrom'element-ui';import'element-ui/lib/theme-chalk/index.css';importAppfrom'./App.vue';Vue.use(Ele......
  • mptcp inside lxc container can't access /proc/sys/net/mptcp_enabled
    https://github.com/multipath-tcp/mptcp/issues/470 VenkateswaranJ commented onMar20,2022 • edited Hi,Ihavecreatedanlxccontainer(ubuntu20.04)withprivilegedmodeandmyhostmachinehasmptcpkernelinstalledubuntu20.04.For......
  • 【JUC】7-CompletableFutrue的应用 大厂案例分析 -电商比价
    1.需求说明1.1同一款产品,同时搜索出同款产品在各大电商平台的售价;1.2同一款产品,同时搜索出本产品在同一个电商平台下,各个入驻卖家售价是多少;2.输出返回:出来结果希望是同款产品的在不同地方的价格清单列表,返回一个List<String>《Mysql》injdpriceis88.05《Mysql》in......