Определение уровня сигнала Bluetooth по RSSI в Windows

Я пытаюсь понять, как я могу получить доступ к RSSI соединения Bluetooth (не LE) на С# или С++ в Windows.

Насколько я понимаю, нет простой команды типа «GetRSSI()», но есть ли какой-либо косвенный способ получить к ней доступ?

Все, что я нашел до сих пор, похоже, нацелено на соединения LE.

Изменить: я просмотрел AEP и попытался получить AEP SignalStrength с подключенного устройства BT.

    foreach (var key in deviceInformation.Properties.Keys)
    {
        Debug.WriteLine($"{key}: {deviceInformation.Properties.GetValueOrDefault(key)}");
    }

Дает:

System.ItemNameDisplay: <ommitted>

System.Devices.DeviceInstanceId: 
System.Devices.Icon: C:\Windows\System32\DDORes.dll,-2001
System.Devices.GlyphIcon: C:\Windows\System32\DDORes.dll,-3001
System.Devices.InterfaceEnabled: 
System.Devices.IsDefault: 
System.Devices.PhysicalDeviceLocation: 
System.Devices.ContainerId: 

Название предмета мною опущено.

Так что, похоже, AEP нет, если я что-то не упустил?


person DTynewydd    schedule 27.02.2020    source источник
comment
Существует способ получить RSSI для классического устройства Bluetooth на платформе Windows 10 с помощью WinRT API. Тем не менее, устройство должно быть подключено в любом случае. Так что смотрите на WinRT API или используйте стороннюю библиотеку.   -  person Mike Petrichenko    schedule 27.02.2020
comment
У вас есть конкретные примеры? Я могу найти класс BluetoothSignalStrengthFilter в API, но не вижу никаких объяснений того, как он используется, кроме как в составе класса BluetoothLEAdvertisementWatcher.   -  person DTynewydd    schedule 27.02.2020
comment
К сожалению, у меня нет кода, которым я мог бы поделиться, поскольку он является частью нашего коммерческого продукта. Однако вы можете поискать в Google эту строку System.Devices.Aep.SignalStrength. Это должно дать вам некоторые идеи.   -  person Mike Petrichenko    schedule 27.02.2020
comment
Я провел некоторое исследование, и, похоже, у меня нет списка AEP для моего подключенного устройства Bluetooth. Не могли бы вы взглянуть на мое редактирование выше? @МайкПетриченко   -  person DTynewydd    schedule 27.02.2020
comment
Это не ключ, это свойство DeviceInformation.   -  person Mike Petrichenko    schedule 27.02.2020
comment
Как мне получить к нему доступ? Свойства DeviceInformation, похоже, хранятся в словаре, поэтому наверняка у него будет соответствующий ключ?   -  person DTynewydd    schedule 28.02.2020
comment
Вы должны использовать свойство Property (или метод get_Property в случае C++).   -  person Mike Petrichenko    schedule 28.02.2020
comment
Я не уверен, что вы подразумеваете под свойством Property. В классе DeviceInformation нет свойства (статического или иного) с именем Property. Чтение документации MSDN: объект DeviceInformation имеет некоторые основные свойства, такие как Id и Kind, но большинство свойств хранятся в пакете свойств в разделе Properties.   -  person DTynewydd    schedule 28.02.2020
comment
Используйте CreateFromIdAsync(String, IIterable‹String›) (docs.microsoft.com/en-us/uwp/api/) Затем вызовите DeviceInformation.Properties (docs.microsoft.com/en-us/uwp/api/). Именно поэтому мы просим деньги за наш продукт. К сожалению, это все, чем я могу с вами поделиться.   -  person Mike Petrichenko    schedule 28.02.2020
comment
Не забывайте, что устройство должно быть подключено! Невозможно получить RSSI с неподключенного устройства.   -  person Mike Petrichenko    schedule 28.02.2020


Ответы (1)


Я знаю, что уже поздно, но я только что начал новый проект, в котором мне также нужна информация о SignalStrength для устройств Bluetooth (не LE).

@ Майк-Петриченко давал тебе хорошие подсказки. Следуя его совету по поиску System.Devices.Aep.SignalStrength, я нашел этот пост

После того, как я выкинул код OP и немного отладил, я пришел к следующему решению:

private const string SignalStrengthProperty = "System.Devices.Aep.SignalStrength";
var additionalProperties = new[] { SignalStrengthProperty };

DeviceWatcher mWatcher = DeviceInformation.CreateWatcher(BluetoothDevice.GetDeviceSelector(), additionalProperties);
var rssi = Convert.ToInt16(deviceInformation.Properties[SignalStrengthProperty]);
person Devi    schedule 06.03.2021