FirmwareUpgradeCallback onUpgradeFailed called even if firmware upgrade is successful

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

Related