Bluetooth в режиме DFU: соединение всегда не удается для некоторых устройств

Я использую Android-DFU-библиотеку Nordic Semiconductor для обновления прошивки устройства Bluetooth с низким энергопотреблением (BLE). Я уже обращался за помощью на github, но я подумал, что больше людей могут увидеть проблему здесь (либо помочь, либо, в конечном итоге, найти и ответить).

Итак, вот мое описание проблемы github:


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

У меня 4 устройства:

  • Безымянный планшет под андроид 6.0
  • Самсунг галакси таб 4 под андроид 5.1
  • Zuk z2 pro под андроид 7.1
  • Xiaomi mi5s под андроид 7.0

После того, как я подключаюсь к устройству Bluetooth для обновления, я отправляю несколько определенных команд, чтобы перейти в режим DFU, затем через несколько секунд он отключается. Все в порядке до этого шага.

Затем я использую Android-DFU-Library для запуска процесса обновления прошивки. Он отлично работает с устройством Samsung Android 5.1, но не может подключиться [статус 133] к другим 3 устройствам. Любая идея, что происходит?

Большое спасибо за Вашу помощь.


Это работает, когда я делаю это вручную в nRF Connect. Это даже работает, когда я использую свое приложение, чтобы сначала включить режим DFU, а затем nRF Connect для подключения к устройству сразу после небольшого сканирования, чтобы найти устройство.

Я делаю это в своем приложении следующим образом: после включения режима DFU я сканирую в течение 10 секунд, чтобы найти новый MAC-адрес и убедиться, что в режиме DFU одновременно находится только одно устройство. Затем я использую эту библиотеку для фактического обновления прошивки.

Для выдачи ошибки status=133 требуется около 30 секунд, так что похоже, что это из-за тайм-аута.

07-26 10:49:47.525 ... D/BluetoothGatt: connect() - device: ... , auto: false

07-26 10:50:17.543 ... D/BluetoothGatt: onClientConnectionState() - status=133 clientIf=5...

Еще немного логов:

07-26 10:49:46.590 ... I/DfuBaseService: DFU service created. Version: 1.6.1

07-26 10:49:47.524 ... I/DfuBaseService: Connecting to the device...

07-26 10:50:17.543 ... E/DfuBaseService: Connection state change error: 133 newState: 0

07-26 10:50:17.544 ... E/DfuBaseService: Device not reachable. Check if the device with address [MAC] is in range, is advertising and is connectable

07-26 10:50:17.549 ... I/DfuBaseService: Refreshing result: true

07-26 10:50:17.549 ... I/DfuBaseService: Cleaning up...

07-26 10:50:18.186 ... I/DfuBaseService: DFU service destroyed

person Ariles    schedule 06.08.2018    source источник


Ответы (1)


Наконец-то мне удалось заставить его работать благодаря philips77.

Я использовал BluetoothLeScanner с отложенным пакетным отчетом через ScanSettings.

   ScanSettings scanSettings = new ScanSettings.Builder()
       ...
       .setReportDelay(delay)
       .build();

Итак, избавившись от задержанного отчета, я смог успешно подключиться к устройству в режиме DFU.

На данный момент я не совсем понимаю основную причину, но вы можете найти больше информации об этом в проблема с github.

person Ariles    schedule 26.10.2018