Bluetooth в режиме DFU: для некоторых устройств соединение всегда прерывается
Я использую Android-DFU-библиотеку Nordic Semiconductor для обновления прошивки устройства Bluetooth с низким энергопотреблением (BLE). Я уже обратился за помощью на github, но я подумал, что больше людей могут увидеть проблему здесь (либо помочь, и в конечном итоге найти и ответить).
Итак, вот мое описание проблемы GitHub:
Я боролся с этим последние два дня, и я не могу найти никакой подсказки. Я надеюсь, что кто-то здесь может дать мне подсказку, я был бы очень признателен.
У меня есть 4 устройства:
- Безымянный планшет под андроид 6.0
- Samsung Galaxy Tab 4 под Android 5.1
- Zuk z2 pro под андроид 7.1
- Xiaomi mi5s под андроид 7.0
После подключения к устройству Bluetooth для обновления я отправляю несколько конкретных команд для перехода в режим DFU, а затем он отключается через несколько секунд. Все хорошо до этого шага.
Затем я использую Android-DFU-Library для запуска процесса обновления fw. Он отлично работает с устройством 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
1 ответ
Мне наконец удалось заставить это работать благодаря philips77.
Я использовал BluetoothLeScanner
с отложенным отчетом партии, через ScanSettings
,
ScanSettings scanSettings = new ScanSettings.Builder()
...
.setReportDelay(delay)
.build();
Итак, избавившись от отложенного отчета, я смог успешно подключиться к устройству в режиме DFU.
На данный момент я не до конца понимаю основную причину, но вы можете узнать больше об этом в проблеме с github.