您的当前位置:首页正文

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

2024-11-30 来源:个人技术集锦

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

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

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

2.Windows.Devices.Enumeration 命名空间

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

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

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

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

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

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

表示  对象的集合。

表示  对象的自定义配对。

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

包含  对象的更新属性。

为  事件提供数据。

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

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

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

有关详细信息和代码示例,请参阅 。

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

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

表示设备选取器的外观。

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

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

表示设备的缩略图。

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

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

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

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

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

3.设备信息(   )属性        

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

        DeviceInformation类如下图:

         其中常用的方法和属性如下,如标识 ()、种类 () 和属性包 () 。 DeviceInformation 对象的其他所有属性均派生自 Properties 属性包。 例如, 派生自 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}

显示全文