Android и устройство Bluetooth с двойным режимом: настраиваемая служба BLE не найдена при сопряжении с BR / EDR (классический)

Я создал двухрежимное устройство Bluetooth, используя BT 121 от Silicon Labs. Устройство реализует SPP по классическому подключению. Имя устройства классического узла - «XYZ Classic». Он также реализует специальный сервис (128-битный UUID) в BLE. Имя устройства узла BLE - «XYZ_BLE». Оба узла имеют одинаковый MAC-адрес.

При сопряжении в настройках «Bluetooth» иногда я вижу «XYZ Classic», а иногда - «XYZ_BLE». Кажется случайным, к какому из них он будет подключаться, но многие устройства Android, которые я тестировал, имеют тенденцию хотеть подключаться к классическому узлу. После сопряжения соединение через классический / SPP ВСЕГДА работает. Однако я могу подключиться к настраиваемой службе только в паре с узлом BLE. В паре с классической версией я могу видеть нестандартные службы BLE, но не свои настраиваемые службы. Обобщить:

Function     Classic Pairing     BLE Pairing
Spp          Works               Works
Cust BLE     Doesn't Work        Works 

Когда я выполняю сопряжение в коде (Android), проблема также возникает, несмотря на то, что я ищу устройства с именем «XYZ_BLE», а затем подключаюсь к возвращенному устройству. Я посмотрел, но не вижу способа заставить Android подключиться к узлу BLE.

Единственным обходным решением было изменить прошивку BT 121, чтобы запретить связывание в классическом режиме. Это не идеальное решение, поскольку какие-либо устройства только с Bluetooth Classic не смогут подключиться к моему устройству (на самом деле это может быть не слишком большой проблемой, но у меня есть один планшет, на котором есть только Bluetooth Classic).

Следует отметить, что я использовал «BLE Scanner» из магазина воспроизведения, чтобы убедиться, что моя настраиваемая служба работает / не работает в зависимости от режима сопряжения. Другими словами, это не только мой код. :)

Итак, есть ли у кого-нибудь идеи, как заставить Android подключиться к узлу BLE?


person ejwipp    schedule 01.03.2018    source источник


Ответы (1)


Я вижу похожие проблемы. Некоторые подсказки:

Поведение Android различается в зависимости от битовых флагов, которые вы установили в рекламе BLE. Например, есть фраза "no br / edr support" или что-то в этом роде. Есть также биты, явно указывающие, что поддерживается двойная роль br / edr.

Также может быть принудительно выполнено сопряжение, если вы обращаетесь к характеристике, которая возвращает "ошибку не аутентификации" из приложения ble. По крайней мере, на iohone, операционная система автоматически инициирует сопряжение.

person maze    schedule 17.05.2018