如何配置DeviceInformation.createWatcher()以对BTLE服务进行过滤?

时间:2019-04-25 15:39:05

标签: uwp bluetooth-lowenergy c++-winrt

尝试使用C ++ / winRT UWP发现低功耗蓝牙设备并应用合理的过滤器。在git hub示例中,代码如下:

    hstring aqsAllBluetoothLEDevices = L"(System.Devices.Aep.ProtocolId:=\"{bb7bb05e-5972-42b5-94fc-76eaa7084d49}\")";

    auto requestedProperties = single_threaded_vector<hstring>
        ({ L"System.Devices.Aep.DeviceAddress", L"System.Devices.Aep.Bluetooth.Le.IsConnectable",
            L"System.Devices.Aep.IsPresent" });

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

只要使用上面的内容,我就会发现所有活动的BTLE设备;我还发现有些设备没有积极宣传,因此使用

时会出现一些错误
System.Devices.Aep.IsPresent

但是,我只想过滤遵循某些BTLE健康状况配置文件的BTLE设备。这些个人资料具有类似

的服务
GATT - Blood pressure   18100000-0000-1000-8000-00805F9B34FB
GATT - Body composition 181B0000-0000-1000-8000-00805F9B34FB
GATT - Glucose  18080000-0000-1000-8000-00805F9B34FB
GATT - Health thermometer   18090000-0000-1000-8000-00805F9B34FB
GATT - Heart rate   180D0000-0000-1000-8000-00805F9B34FB
GATT - Pulse oximeter   18220000-0000-1000-8000-00805F9B34FB
GATT - Weight scale 181D0000-0000-1000-8000-00805F9B34FB

任何人都知道如何配置deviceWatcher()以仅报告那些宣传上述服务UUID之一的设备吗?

我尝试在protocolId中使用它们,但是什么也没发现。

1 个答案:

答案 0 :(得分:0)

从您对DeviceInformation::CreateWatcher的使用中可以看出,您拥有可能的最简单的AQS字符串:它仅区分BLE设备,并且存在这种情况的原因是您需要比这更精确的东西。我还看到您要在阵列中列出许多属性。到目前为止,无论您要查找的是哪种配置文件,您都可以收回每台BLE设备。

您的问题有两个主要组成部分:

  1. 了解列出的各种运行状况配置文件的正确AQS字符串。如果没有,则无法调用CreateWatcher或使用其他方法列出通过AQS支持这些配置文件的当前可用设备。为此,如果您使用的是16位ID,则需要调用GattDeviceService。GetDeviceSelectorFromShortId,或者使用GUID调用GattDeviceService。GetDeviceSelectorFromUuid来获取字符串。
  2. 在代码示例中,尚不清楚#1是否是阻止您的唯一问题,还是不清楚是否充分了解AQS语法来指定所需的问题。如果您不知道需要通过AQS搜索的名称,则AQS的语法将阻止您。在页面底部,有一个提示的正确示例,以获取正确的字符串:https://docs.microsoft.com/en-us/windows/uwp/devices-sensors/aep-service-class-ids在您的情况下,您需要做的是在AND处添加所需的OR条件,并始终在其中BLE协议ID与您希望过滤的任何适用的System.Devices.AepService.ServiceClassId值组合。请密切注意AQS的语法。有关AQS的更详细的文档位于:https://docs.microsoft.com/en-us/windows/desktop/search/-search-3x-advancedquerysyntax