Good day!
There is now way to restart dfu_mcuboot with
CONFIG_DFU_TARGET_STREAM_SAVE_PROGRESS
Checkout:
dfu_target.c
int dfu_target_reset(void)
{
if (current_target != NULL) {
int err = current_target->done(false);
if (err != 0) {
LOG_ERR("Unable to clean up dfu_target");
return err;
}
}
current_target = NULL;
return 0;
}
next dfu_target_mcu_boot.c
int dfu_target_mcuboot_done(bool successful)
{
int err = 0;
err = dfu_target_stream_done(successful);
if (err != 0) {
LOG_ERR("dfu_target_stream_done error %d", err);
return err;
}
if (successful) {
err = stream_flash_erase_page(dfu_target_stream_get_stream(),
MCUBOOT_SECONDARY_LAST_PAGE_ADDR);
if (err != 0) {
LOG_ERR("Unable to delete last page: %d", err);
return err;
}
err = boot_request_upgrade(BOOT_UPGRADE_TEST);
if (err != 0) {
LOG_ERR("boot_request_upgrade error %d", err);
return err;
}
LOG_INF("MCUBoot image upgrade scheduled. "
"Reset device to apply");
} else {
LOG_INF("MCUBoot image upgrade aborted.");
}
return err;
}
and finally we appear here in dfu_target_stream_flash.c
int dfu_target_stream_done(bool successful)
{
int err = 0;
if (successful) {
err = stream_flash_buffered_write(&stream, NULL, 0, true);
if (err != 0) {
LOG_ERR("stream_flash_buffered_write error %d", err);
}
#ifdef CONFIG_DFU_TARGET_STREAM_SAVE_PROGRESS
/* Delete state so that a new call to 'init' will
* start with offset 0.
*/
err = settings_delete(current_name_key);
if (err != 0) {
LOG_ERR("setting_delete error %d", err);
}
} else {
/* The stream has not completed, store the progress so that
* a new call to 'init' will pick up where we left off.
*/
err = store_progress();
if (err != 0) {
LOG_ERR("Unable to reset write progress: %d", err);
}
#endif
}
current_id = NULL;
return err;
}
It will be useful to have same interface to restart selected dfu type