Hello,
I'm implementing the Nordic firmware upgrade using FirmwareUpgradeManager from the Android SDK (https://github.com/NordicSemiconductor/Android-nRF-Connect-Device-Manager)
private fun performNordicDfu(transport: CustomMcuMgrBleTransport, images: ImageSet) { transport.requestConnPriority(ConnectionPriorityRequest.CONNECTION_PRIORITY_HIGH) dfuManager = FirmwareUpgradeManager(transport, dfuCallback) dfuManager.apply { setMode(FirmwareUpgradeManager.Mode.TEST_AND_CONFIRM) setCallbackOnUiThread(false) } try { val advancedSettings = FirmwareUpgradeManager.Settings.Builder() // 10 secondi per nRF52840 come nella sample app. .setEstimatedSwapTime(10_000) // Pipelining per migliorare la velocità. .setWindowCapacity(3) // Allineamento memoria per Nordic devices. .setMemoryAlignment(4) // Non cancellare le impostazioni app. .setEraseAppSettings(false) .build() dfuManager.start(images, advancedSettings) } catch (e: Exception) { Timber.e(e, "Error during Nordic DFU start") _data.update { FirmwareUpdateStatus.Error } } }
The upgrade proceeds correctly but at the end I always get the callback onUpgradeFailed invoked
Firmware upgrade failed, state: RESET io.runtime.mcumgr.ble.exception.McuMgrDisconnectedException at io.runtime.mcumgr.ble.McuMgrBleTransport.onServicesInvalidated(McuMgrBleTransport.java:756) at no.nordicsemi.android.ble.BleManagerHandler.notifyDeviceDisconnected(BleManagerHandler.java:2034) at no.nordicsemi.android.ble.BleManagerHandler$4.onConnectionStateChange(BleManagerHandler.java:2312) at android.bluetooth.BluetoothGatt$GattCallback.lambda$onClientConnectionState$3(BluetoothGatt.java:426) at android.bluetooth.BluetoothGatt$GattCallback.$r8$lambda$g0wdVhK6mBSTzAIOY21zUwHI--c(Unknown Source:0) at android.bluetooth.BluetoothGatt$GattCallback$$ExternalSyntheticLambda10.run(D8$$SyntheticClass:0) at android.bluetooth.BluetoothUtils.lambda$executeFromBinder$0(BluetoothUtils.java:343) at android.bluetooth.BluetoothUtils$$ExternalSyntheticLambda1.run(D8$$SyntheticClass:0) at android.os.Handler.handleCallback(Handler.java:1041) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.dispatchMessage(Looper.java:315) at android.os.Looper.loopOnce(Looper.java:251) at android.os.Looper.loop(Looper.java:349) at android.os.HandlerThread.run(HandlerThread.java:100)
If I try with your official app I got the same result and if I check the version it was updated correctly.
I tried to increment the setEstimatedSwapTime but nothing changed.
Version used 2.6.0