Skip to content

Commit d8ca58d

Browse files
SeppoTakalorlubos
authored andcommitted
dfu: dfu_target: Modem delta needs to deinitialize before reset
If the dfu_target_write is called at least once for the modem delta, it sets the modem into some kind of download mode which must be stopped before we call dfu_target_reset(). This is not how dfu_target.h is documenting the process, so handle this extra call to dfu_target_done() internally. Signed-off-by: Seppo Takalo <[email protected]>
1 parent 78ce959 commit d8ca58d

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

subsys/dfu/dfu_target/src/dfu_target_modem_delta.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ struct modem_delta_header {
2323
};
2424

2525
static dfu_target_callback_t callback;
26+
static bool write_initialized;
2627

2728
#define SLEEP_TIME 1
2829
static int delete_banked_modem_delta_fw(void)
@@ -141,6 +142,7 @@ int dfu_target_modem_delta_write(const void *const buf, size_t len)
141142
LOG_ERR("Failed to ready modem for firmware update receival, error %d", err);
142143
return -EFAULT;
143144
}
145+
write_initialized = true;
144146

145147
err = nrf_modem_delta_dfu_write(buf, len);
146148
if (err < 0) {
@@ -185,6 +187,7 @@ int dfu_target_modem_delta_done(bool successful)
185187
LOG_ERR("Failed to stop MFU and release resources, error %d", err);
186188
return -EFAULT;
187189
}
190+
write_initialized = false;
188191

189192
return 0;
190193
}
@@ -211,5 +214,13 @@ int dfu_target_modem_delta_schedule_update(int img_num)
211214

212215
int dfu_target_modem_delta_reset(void)
213216
{
217+
int err;
218+
219+
if (write_initialized) {
220+
err = dfu_target_modem_delta_done(false);
221+
if (err != 0) {
222+
return -EFAULT;
223+
}
224+
}
214225
return nrf_modem_delta_dfu_erase();
215226
}

0 commit comments

Comments
 (0)