С#, БЛЕ. Почему GetGattServicesAsync зависает навсегда? Есть ли обходной путь, например выключение/включение BLE?C#

Место общения программистов C#
Ответить
Anonymous
 С#, БЛЕ. Почему GetGattServicesAsync зависает навсегда? Есть ли обходной путь, например выключение/включение BLE?

Сообщение Anonymous »

Я подумывал о перекрестной публикации на сайте Super User или аналогичном сайте, но не знаю, как это сделать. Как вы увидите, это не просто вопрос программирования.
Я разработал код C# для связи с термометром Onset InTemp через Bluetooth Low Energy (BLE). Работает нормально долгое время. Я могу получить маяки (которые содержат данные термометра), а также подключиться, получить услуги и характеристики на случай, если мне понадобится получить пропущенные данные или установить параметры термометра. Однако примерно через 8 часов (может быть и 24 часа) непрерывного получения маяков и подключения, получения исторических данных и т. д. мое приложение зависает на этой строке:

Код: Выделить всё

var gatt = await device.GetGattServicesAsync();
Я поместил строки до и после этой строки и убедился, что она явно висит на этой строке. Опять же, это может быть через 8 часов или 24 часа использования. Конечно, он прекрасно работает довольно долгое время. Убийство и перезапуск программы не помогают. Он зависает при первом вызове:

Код: Выделить всё

device = await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);
Проблему решает только перезагрузка компьютера. Это неудивительно, учитывая сообщения в журналах событий Windows перед зависанием:

Драйвер Bluetooth ожидал события HCI определенного размера, но не получил его. .

Именно по этой причине я заявил, что это может быть вопрос для доски SuperUser. Независимо от того, насколько плохо я запрограммировал свой код :), закрытие программы должно снова заставить BLE работать. Кстати, я пытался отключить/повторно включить BLE в настройках перед перезагрузкой.
Я нашел несколько ссылок на эту проблему, но ничего определенного.

Я Я также работаю над написанием полной программы меньшего размера, чтобы показать проблему. До сих пор я не могу добиться сбоя примера программы, из чего я делаю вывод, что либо (1) я не позволил ей работать достаточно долго, либо (2) я не полностью дублирую то, что происходит, с моей полной программой. Возможно, я не оказываю такого большого давления на драйверы BLE или не слушаю маяки и не пытаюсь подключиться с теми же соотношениями или с той же синхронизацией.
Я должен сказать, что Я вижу много нареканий по поводу реализации в Windows уровня хоста BLE и драйверов BLE. К сожалению, я застрял на Windows. Nordic также предположил, что все, о чем я сообщаю, является «известной проблемой», и использование их ключа Nordic решит проблему. См., например: https://devzone.nordicsemi.com/f/nordic ... hermometer.

Это может быть ну, это правда, но это потребует много работы, поскольку у них есть библиотеки на C++ и Node.JS, но нет на C#.
Любая помощь очень важна. ценю.

Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/638 ... round-such
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»