Windows 10 BLE C #: подписка на уведомления от периферийного устройства с использованием cccd впервые не выполняется для несвязанных устройств - PullRequest
1 голос
/ 06 апреля 2019

Я пытаюсь разработать приложение WPF для Windows 10 для связи с устройством BLE.Я использую класс наблюдателя рекламы для сканирования новых устройств.Я должен пройти аутентификацию (проприетарную) на устройстве перед чтением данных.Чтение данных происходит путем подписки на дескриптор конфигурации характеристики клиента определенной характеристики.

Когда я впервые обнаруживаю устройство (которое, конечно, не связано / не спарено), аутентификация работает
Двусторонняя аутентификацияпроисходит путем обмена данными через cccd определенной характеристики, которая всегда работает.

GattCommunicationStatus status = await **authenticationCharacteristic**.WriteClientCharacteristicConfigurationDescriptorAsync(
                        GattClientCharacteristicConfigurationDescriptorValue.Notify);
if(status == GattCommunicationStatus.Success)
{
//always success
} 

Второй шаг - выполнить соединение, используя

DevicePairingResult result = await customPairing.PairAsync(ceremoniesSelected, protectionLevel);

, что успешно.После успешного связывания следующим шагом будет подписка на cccd для получения данных.

GattCommunicationStatus status = await **dataCharacteristic**.WriteClientCharacteristicConfigurationDescriptorAsync(
                        GattClientCharacteristicConfigurationDescriptorValue.Notify);
if(status == GattCommunicationStatus.Success)
{
}

Это всегда вызывает исключение

** Исключение: Брошено: "Атрибут не может быть записан. (Исключение из HRESULT: 0x80650003)" **

Нов последующих соединениях, когда устройства уже связаны, я могу записать в дескриптор конфигурации характеристик клиента и получать уведомления о данных.

Проблема заключается только в том, что новое устройство найдено и оно не связано,запись в данные cccd всегда завершается неудачей.

Есть ли известная проблема?

Заранее спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...