/* * Copyright (c) 2018-2023 O.S.Systems * * SPDX-License-Identifier: Apache-2.0 */ #include LOG_MODULE_DECLARE(updatehub, CONFIG_UPDATEHUB_LOG_LEVEL); #include #include #include "updatehub_firmware.h" #include "updatehub_device.h" #include "updatehub_storage.h" #if defined(CONFIG_UPDATEHUB_CE) #define UPDATEHUB_SERVER CONFIG_UPDATEHUB_SERVER #else #define UPDATEHUB_SERVER "coap.updatehub.io" #endif static int cmd_run(const struct shell *sh, size_t argc, char **argv) { int ret = -1; shell_fprintf(sh, SHELL_INFO, "Starting UpdateHub run...\n"); switch (updatehub_probe()) { case UPDATEHUB_HAS_UPDATE: switch (updatehub_update()) { case UPDATEHUB_OK: ret = 0; break; default: shell_fprintf(sh, SHELL_ERROR, "Error installing update.\n"); break; } break; case UPDATEHUB_NO_UPDATE: shell_fprintf(sh, SHELL_INFO, "No update found\n"); ret = 0; break; default: shell_fprintf(sh, SHELL_ERROR, "Invalid response\n"); break; } return ret; } static int cmd_info(const struct shell *sh, size_t argc, char **argv) { ARG_UNUSED(argc); ARG_UNUSED(argv); char *device_id = k_malloc(DEVICE_ID_HEX_MAX_SIZE); char *firmware_version = k_malloc(FIRMWARE_IMG_VER_STRLEN_MAX); int ret = 0; if (device_id == NULL || firmware_version == NULL) { LOG_ERR("Could not alloc device_id or firmware_version memory"); ret = -ENOMEM; goto updatehub_shell_error; } updatehub_get_device_identity(device_id, DEVICE_ID_HEX_MAX_SIZE); updatehub_get_firmware_version(UPDATEHUB_SLOT_PARTITION_0, firmware_version, FIRMWARE_IMG_VER_STRLEN_MAX); shell_fprintf(sh, SHELL_NORMAL, "Unique device id: %s\n", device_id); shell_fprintf(sh, SHELL_NORMAL, "Firmware Version: %s\n", firmware_version); shell_fprintf(sh, SHELL_NORMAL, "Product uid: %s\n", CONFIG_UPDATEHUB_PRODUCT_UID); shell_fprintf(sh, SHELL_NORMAL, "UpdateHub Server: %s\n", UPDATEHUB_SERVER); updatehub_shell_error: if (device_id) { k_free(device_id); } if (firmware_version) { k_free(firmware_version); } return ret; } SHELL_STATIC_SUBCMD_SET_CREATE(sub_updatehub, SHELL_CMD(info, NULL, "Dump UpdateHub information", cmd_info), SHELL_CMD(run, NULL, "Trigger an UpdateHub update run", cmd_run), SHELL_SUBCMD_SET_END); SHELL_CMD_REGISTER(updatehub, &sub_updatehub, "UpdateHub commands", NULL);