diff --git a/subsys/mgmt/updatehub/shell.c b/subsys/mgmt/updatehub/shell.c index bab01d300ac..fd1049a3e8b 100644 --- a/subsys/mgmt/updatehub/shell.c +++ b/subsys/mgmt/updatehub/shell.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 O.S.Systems + * Copyright (c) 2018-2023 O.S.Systems * * SPDX-License-Identifier: Apache-2.0 */ @@ -56,10 +56,12 @@ static int cmd_info(const struct shell *shell, size_t argc, char **argv) ARG_UNUSED(argv); char *device_id = k_malloc(DEVICE_ID_HEX_MAX_SIZE); - char *firmware_version = k_malloc(BOOT_IMG_VER_STRLEN_MAX); + char *firmware_version = k_malloc(FIRMWARE_IMG_VER_STRLEN_MAX); updatehub_get_device_identity(device_id, DEVICE_ID_HEX_MAX_SIZE); - updatehub_get_firmware_version(firmware_version, BOOT_IMG_VER_STRLEN_MAX); + updatehub_get_firmware_version(FIXED_PARTITION_ID(slot0_partition), + firmware_version, + FIRMWARE_IMG_VER_STRLEN_MAX); shell_fprintf(shell, SHELL_NORMAL, "Unique device id: %s\n", device_id); diff --git a/subsys/mgmt/updatehub/updatehub.c b/subsys/mgmt/updatehub/updatehub.c index 63083b04763..aecba382d49 100644 --- a/subsys/mgmt/updatehub/updatehub.c +++ b/subsys/mgmt/updatehub/updatehub.c @@ -620,7 +620,7 @@ static int report(enum updatehub_state state) int ret = -1; const char *exec = state_name(state); char *device_id = k_malloc(DEVICE_ID_HEX_MAX_SIZE); - char *firmware_version = k_malloc(BOOT_IMG_VER_STRLEN_MAX); + char *firmware_version = k_malloc(FIRMWARE_IMG_VER_STRLEN_MAX); if (device_id == NULL || firmware_version == NULL) { LOG_ERR("Could not alloc device_id or firmware_version memory"); @@ -631,7 +631,9 @@ static int report(enum updatehub_state state) goto error; } - if (!updatehub_get_firmware_version(firmware_version, BOOT_IMG_VER_STRLEN_MAX)) { + if (!updatehub_get_firmware_version(FIXED_PARTITION_ID(slot0_partition), + firmware_version, + FIRMWARE_IMG_VER_STRLEN_MAX)) { goto error; } @@ -769,7 +771,7 @@ enum updatehub_response updatehub_probe(void) char *metadata = k_malloc(MAX_DOWNLOAD_DATA); char *metadata_copy = k_malloc(MAX_DOWNLOAD_DATA); char *device_id = k_malloc(DEVICE_ID_HEX_MAX_SIZE); - char *firmware_version = k_malloc(BOOT_IMG_VER_STRLEN_MAX); + char *firmware_version = k_malloc(FIRMWARE_IMG_VER_STRLEN_MAX); size_t sha256size; @@ -786,7 +788,9 @@ enum updatehub_response updatehub_probe(void) goto error; } - if (!updatehub_get_firmware_version(firmware_version, BOOT_IMG_VER_STRLEN_MAX)) { + if (!updatehub_get_firmware_version(FIXED_PARTITION_ID(slot0_partition), + firmware_version, + FIRMWARE_IMG_VER_STRLEN_MAX)) { ctx.code_status = UPDATEHUB_METADATA_ERROR; goto error; } diff --git a/subsys/mgmt/updatehub/updatehub_firmware.c b/subsys/mgmt/updatehub/updatehub_firmware.c index e6b8906e1af..5de7c960a5f 100644 --- a/subsys/mgmt/updatehub/updatehub_firmware.c +++ b/subsys/mgmt/updatehub/updatehub_firmware.c @@ -1,20 +1,31 @@ /* - * Copyright (c) 2018 O.S.Systems + * Copyright (c) 2018-2023 O.S.Systems * * SPDX-License-Identifier: Apache-2.0 */ -#include +#include +LOG_MODULE_DECLARE(updatehub, CONFIG_UPDATEHUB_LOG_LEVEL); + +#include #include +#include #include "updatehub_firmware.h" -bool updatehub_get_firmware_version(char *version, int version_len) +bool updatehub_get_firmware_version(const uint32_t partition_id, + char *version, int version_len) { struct mcuboot_img_header header; - if (boot_read_bank_header(FIXED_PARTITION_ID(slot0_partition), &header, - version_len) != 0) { + if (boot_read_bank_header(partition_id, &header, + sizeof(struct mcuboot_img_header)) != 0) { + LOG_DBG("Error when executing boot_read_bank_header function"); + return false; + } + + if (header.mcuboot_version != 1) { + LOG_DBG("MCUboot header version not supported!"); return false; } diff --git a/subsys/mgmt/updatehub/updatehub_firmware.h b/subsys/mgmt/updatehub/updatehub_firmware.h index 169aa78f145..f10b5af06b8 100644 --- a/subsys/mgmt/updatehub/updatehub_firmware.h +++ b/subsys/mgmt/updatehub/updatehub_firmware.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 O.S.Systems + * Copyright (c) 2018-2023 O.S.Systems * * SPDX-License-Identifier: Apache-2.0 */ @@ -7,10 +7,10 @@ #ifndef __UPDATEHUB_FIRMWARE_H__ #define __UPDATEHUB_FIRMWARE_H__ -#include -#include -#include +/* 255.255.65535\0 */ +#define FIRMWARE_IMG_VER_STRLEN_MAX 14 -bool updatehub_get_firmware_version(char *version, int version_len); +bool updatehub_get_firmware_version(const uint32_t partition_id, + char *version, int version_len); #endif /* __UPDATEHUB_FIRMWARE_H__ */