Ошибка Web-Bluetooth Операция GATT не разрешена только в Windows

Последние несколько месяцев я без проблем работаю с web-bluetooth на iOS и ChromeOS. Но сегодня я впервые попытался запустить некоторые из моих примеров в Windows, и, к моему удивлению, большинство вещей, которые я реализовал, не работали с Windows. Я могу успешно подключиться к своему периферийному устройству, но всякий раз, когда я пытаюсь прочитать или записать что-либо в настраиваемую службу с настраиваемыми характеристиками, я получаю сообщение об ошибке «Операция GATT не разрешена». Я попытался осмотреться, но нигде информации об этом нет.

Ниже я привожу простейший пример, который у меня есть, он предназначен только для включения / выключения светодиодов на плате nrf52832. Реализована только одна настраиваемая услуга и одна настраиваемая характеристика, значение которой контролирует состояния светодиодов. Это работает без проблем на Chromebook и Mac, но не работает в Windows. Вот ссылка на этот простой проект, включая встроенный код и веб-приложение. https://github.com/shtarbanov/WebBluetooth-Feather-nRF52832/tree/master/LED%20Control

Я сделал две реализации одного и того же: одну на основе обещаний, а другую на основе async-await, расположенных в папках «WebApp (Async)» и «WebApp (Promises)» соответственно. Обе эти реализации отлично работают на Mac и Cromebook, но не на Windows.


person Albert    schedule 13.06.2020    source источник
comment
Ваша характеристика требует авторизации? Если да - попробуйте удалить и попробуйте еще раз. Кстати, в репо отсутствует встроенный код, поэтому я не мог убедиться.   -  person bavaza    schedule 14.06.2020
comment
Встроенный код находится в другой папке, которую вы видите, когда открываете ссылку. Я смог решить эту проблему, изменив разрешение во встроенном коде с SECMODE_ENC_NO_MITM на SECMODE_OPEN. Однако я до сих пор не понимаю, почему эта проблема возникает только в Windows? Mac и Linux просто игнорируют этот параметр? Я также не нашел никаких объяснений того, что такое разрешения BLE и как они используются протоколом под капотом.   -  person Albert    schedule 15.06.2020
comment
Я подозреваю, что ChromeOs и iOS автоматически соединяются с устройством (т.е. шифруют соединение и обмениваются ключами), тогда как Windows требует, чтобы вы сделали это явно. Не уверен, что это так, но это объяснит то, что вы видите. У Nordic есть хороший учебник по CCCD: devzone.nordicsemi.com/nordic/short-range-guides/b/   -  person bavaza    schedule 15.06.2020


Ответы (2)


Это известная проблема, что характеристики безопасности недоступны при использовании Web Bluetooth в Windows. На других платформах соединение происходит автоматически, но не в Windows. Это проблема с отслеживанием:

https://bugs.chromium.org/p/chromium/issues/detail?id=960258

person Reilly Grant    schedule 16.06.2020
comment
Я думаю, что может происходить еще больше. Эта ошибка может быть связана, но это не совсем то же самое. Эта конкретная ошибка связана с безопасными характеристиками, ожидающими ответа ПИН-кода. Я вижу что-то похожее на описание проблемы, и это может быть совершенно новая ошибка, о которой нужно сообщить людям, занимающимся хромом. - person spekary; 16.06.2020
comment
Если вы можете сообщить о проблеме на crbug.com, это будет очень полезно для нас, особенно если вы включите код для платы nRF, который воспроизводит проблему. Я знаю, что некоторые из них есть в офисе (в настоящее время закрыты из-за COVID-19, который замедлит работу). - person Reilly Grant; 16.06.2020

Застрял в этом тоже, и что касается обходного пути, я могу порекомендовать для платформы Windows выполнить сопряжение устройства сначала с помощью самого Windows, а затем связать его через браузер (в качестве обходного пути). Немного, но надеюсь, что это немного поможет. P.S. он должен быть сопряжен через Windows только один раз, чтобы ПК запомнил устройство, а затем вы можете выполнить сопряжение через браузер, пока ПК запомнит устройство.

person mr.Deepwest    schedule 16.06.2020
comment
Я пробовал это, но не смог увидеть наше устройство BLE с помощью сканера Bluetooth в Windows, хотя оно отображается в сканере Chrome. - person spekary; 17.06.2020