BluetoothPairingStateProvider: getUuids () возвращает нуль для устройства - PullRequest
0 голосов
/ 25 февраля 2019

Контекст:

Я работаю над аутентификатором FIDO-U2F Bluetooth с SoC nRF52 BLE.и хочу, чтобы он протестировал пример google .

До сих пор я реализовал *1000* спецификацию Bluetooth FIDO , и у меня есть устройство, которое рекламируется как FIDO-совместимое устройство.

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

Проблема:

Когда приложение сканирует подходящее устройство 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Режим"и" LE General Discoverable Mode"безуспешно.

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

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

1 Ответ

0 голосов
/ 27 мая 2019

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

enter image description here

Возможно, нам понадобится добавить поле служебных данных (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)

Вот скриншот рекламного пакета enter image description here

Красное поле - Сервисные данные

...