BluetoothPairingStateProvider: getUuids () возвращает значение null для устройства

Контекст:

Я работаю над аутентификатором Bluetooth FIDO-U2F с nRF52 BLE SoC. и хотите протестировать его с помощью примера Google.

Пока что я реализовал Спецификация FIDO Bluetooth, и у меня есть устройство, которое рекламируется как FIDO-совместимое устройство.

Благодаря nRF Connect у меня есть гарантировал, что все службы и характеристики правильно представлены и что я могу взаимодействовать с ним только тогда, когда мое устройство надежно сопряжено (с LTK): Снимок экрана nRF Connect

Проблема:

Когда приложение выполняет поиск подходящего устройства FIDO, оно не находит мое.

Я застрял на экране, который просит нажать кнопку на 5 секунд, что мне не нужно, поскольку мое устройство отвечает на запрос на сопряжение без взаимодействия с пользователем и уже сопряжено с моим SAMSUNG A8.

I/BluetoothDevicePreference: onDeviceAttributesChanged :: Device = (N) D8BE86, isBonded = 12 , mIsOnProgressAddVI = false
I/Fido: [BleScanner] startScan()
E/Fido: [BluetoothPairingStateProvider] getUuids() returns null for device: D8:BE:86:4A:E5:65
I/Fido: [PreferredTransportProvider] BLE enabled but no device is paired
I/Fido: [AuthenticateBaseChimeraActivity] User selected transport ble
I/Fido: [ViewController] Accepting proposed view {"viewName":"ble_instructions","anyU2fDevicesPaired":false}: outranks current (2 > 0)
I/Fido: [ViewPresenter] viewSelected(...) ble_instructions
I/Fido: [U2fRequestController] onResultReceived(null, ErrorResponseData{errorCode=5})
I/Fido: [BleScanner] stopScan()

Я попытался удалить данные сопряжения, и все, что у меня есть, это:

I/BluetoothDevicePreference: onDeviceAttributesChanged :: Device = (N) D8BE86, isBonded = 10 , mIsOnProgressAddVI = false

Рекламные флаги в настоящее время установлены на «BR / EDR не поддерживается», но я также пробовал «LE Limited Discoverable Mode» и «LE General Discoverable Mode "безуспешно.

Я просмотрел источники android-fido, но сканирование BLE кажется импортированным из другого места, я не могу отладить его в этом проекте.

Любой указатель приветствуется


person n0p    schedule 25.02.2019    source источник


Ответы (1)


Вы попали на этот экран?

введите описание изображения здесь

Возможно, нам понадобится добавить поле Service Data (0x16) в рекламный пакет. Это упоминается в спецификации FIDO здесь

Фрагмент кода Android для рекламы с добавленным полем Service Data:

AdvertiseData data = new AdvertiseData.Builder()
                        .addServiceUuid(new ParcelUuid(fido2GattService.getUuid()))
                        .setIncludeDeviceName(true)
                        .addServiceData(new ParcelUuid(fido2GattService.getUuid()), new byte[] {(byte)192, (byte)192, (byte)192})
                        .build();

Если вы хотите захватывать пакеты Bluetooth, чтобы узнать, какой у вас рекламный пакет, вы можете использовать PacketLogger (для MacOS)

Вот скриншот рекламного пакета  введите описание изображения здесь

Красное поле - это служебные данные.

person Bao Hoa    schedule 27.05.2019
comment
У меня нет именно этого экрана, но что-то похожее. Спасибо за ваше предложение. Я перешел в другой проект, но я дам вам отзыв, когда вернусь к этой проблеме! - person n0p; 13.06.2019