У меня есть датчик BLE, который отправляет данные с частотой 100 Гц, и я разработал приложение UWP для получения этих данных. У меня странная проблема, когда через пару секунд все работает нормально, я прекращаю получать уведомления о новых данных.
Теперь я говорю, что это странно, потому что это происходит, когда я использую внутренний Bluetooth ноутбука но не при использовании Bluetooth-ключа. При использовании ключа он работает нормально и никогда не останавливается. Как внутренние драйверы Bluetooth, так и драйверы ключей обновляются до последней версии, которую Windows может найти.
Как только уведомление прекращается, датчик отключается.
Датчик основан на Nordi c nRF52832 Итак C.
Теперь немного информации о моем коде:
- У меня есть класс Sensor.cs, в котором я обрабатываю соединение и потоковую передачу данных.
- Я использую
BluetoothLEAdvertisementWatcher
, чтобы найти датчик. - *
GattCharacteristic
являются частными членами класса Sensor. - Я подписываюсь на уведомления по телефону:
await _gattDataSensorsCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(
GattClientCharacteristicConfigurationDescriptorValue.Notify);
Приложение не делает ничего особенного. Просто подключается к датчику, запускает потоковую передачу и распечатывает данные.
Я провел достаточно исследование и не смог найти ничего подобного. Я нашел сообщения об остановке уведомлений, потому что объект был забран G C, характеристики были локальными переменными вместо членов класса, или не ожидались вызовы.
Почему это происходит?
1-е редактирование
@ Эмиль Извините, я виноват в том, что не упомянул, что, как только прекращаются уведомления, датчик отключается. Я редактирую вопрос, чтобы упомянуть это, а также что-то актуальное. Во всяком случае, я пытаюсь, что вы упоминаете как можно скорее.
@ GrooverFromHolland Эта опция была отмечена. Я пытался снять этот флажок на нескольких компьютерах, но, к сожалению, снятие флажка делает его продолжительностью всего несколько секунд.
@ Нико Чжу - MSFT Я перешел по ссылке, которую вы разместили, и прочитал документацию. c также обратился к руководству по эксплуатации моего датчика, чтобы дважды проверить, позволяет ли характеристика c уведомлять, и она разрешает чтение и уведомление. Я также делаю то же самое characteristic.ValueChanged += Characteristic_ValueChanged;
, как упомянуто в do c.
Об отключении датчика при прекращении уведомлений / прекращении срабатывания измененного значения. Я должен добавить, что в моем MainWindow сенсорный объект является классом-членом, и он никогда не удаляется. Так что не имеет смысла, что G C забирает объект, верно?
2-е редактирование
Я пробовал код, который я использую как с подключенным ноутбуком, так и отключен от источника питания, и он всегда настроен на максимальную производительность. Код, который я использую, можно найти здесь: ссылка
3-е редактирование
Следуя рекомендациям @Emil, я наконец смог отсканировать трафик c. Пытался понять, что такое файл pcap, сгенерированный USBPcap, но я просто не понимаю. Я пробовал проблему с 2 датчиками, и шаблон остановки отключения / уведомления выглядит по-разному для каждого датчика. Я сделал папку Dropbox, содержащую два файла pcap: ссылка
Из того, что я понял, в файле "ble-FE592382586F.pcap" интересная строка No: 12647 и 12681 Он говорит, что источником является контроллер, а местом назначения является хост. Является ли контроллер драйвером Bluetooth для ноутбука?