From ee5c9b2629611ccf232148f2d12eb4e3e70e40cb Mon Sep 17 00:00:00 2001 From: Jamie McCrae Date: Mon, 12 Jun 2023 13:06:22 +0100 Subject: [PATCH] mgmt: mcumgr: grp: img_mgmt: Add image data written callback Adds an optional callback upon image data being written, can be used for syncing or timeout purposes. Signed-off-by: Jamie McCrae --- include/zephyr/mgmt/mcumgr/mgmt/callbacks.h | 15 +++++++++------ subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c | 4 ++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/include/zephyr/mgmt/mcumgr/mgmt/callbacks.h b/include/zephyr/mgmt/mcumgr/mgmt/callbacks.h index ec462ec2454..6796059453d 100644 --- a/include/zephyr/mgmt/mcumgr/mgmt/callbacks.h +++ b/include/zephyr/mgmt/mcumgr/mgmt/callbacks.h @@ -151,22 +151,25 @@ enum fs_mgmt_group_events { */ enum img_mgmt_group_events { /** Callback when a client sends a file upload chunk, data is img_mgmt_upload_check(). */ - MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 0), + MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 0), /** Callback when a DFU operation is stopped. */ - MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 1), + MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 1), /** Callback when a DFU operation is started. */ - MGMT_EVT_OP_IMG_MGMT_DFU_STARTED = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 2), + MGMT_EVT_OP_IMG_MGMT_DFU_STARTED = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 2), /** Callback when a DFU operation has finished being transferred. */ - MGMT_EVT_OP_IMG_MGMT_DFU_PENDING = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 3), + MGMT_EVT_OP_IMG_MGMT_DFU_PENDING = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 3), /** Callback when an image has been confirmed. */ - MGMT_EVT_OP_IMG_MGMT_DFU_CONFIRMED = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 4), + MGMT_EVT_OP_IMG_MGMT_DFU_CONFIRMED = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 4), + + /** Callback when an image write command has finished writing to flash. */ + MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK_WRITE_COMPLETE = MGMT_DEF_EVT_OP_ID(MGMT_EVT_GRP_IMG, 5), /** Used to enable all img_mgmt_group events. */ - MGMT_EVT_OP_IMG_MGMT_ALL = MGMT_DEF_EVT_OP_ALL(MGMT_EVT_GRP_IMG), + MGMT_EVT_OP_IMG_MGMT_ALL = MGMT_DEF_EVT_OP_ALL(MGMT_EVT_GRP_IMG), }; /** diff --git a/subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c b/subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c index 85d62acfb6a..42f3bf76c8e 100644 --- a/subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c +++ b/subsys/mgmt/mcumgr/grp/img_mgmt/src/img_mgmt.c @@ -701,6 +701,10 @@ defined(CONFIG_MCUMGR_SMP_COMMAND_STATUS_HOOKS) #if defined(CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS) (void)mgmt_callback_notify(MGMT_EVT_OP_IMG_MGMT_DFU_PENDING, NULL, 0, &ret_rc, &ret_group); + } else { + /* Notify that the write has completed */ + (void)mgmt_callback_notify(MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK_WRITE_COMPLETE, + NULL, 0, &ret_rc, &ret_group); #endif } }