2020-07-25 01:24:49 +08:00
|
|
|
/*
|
|
|
|
* Copyright (c) 2020 Linumiz
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
2022-05-06 17:12:04 +08:00
|
|
|
#include <zephyr/shell/shell.h>
|
|
|
|
#include <zephyr/drivers/flash.h>
|
|
|
|
#include <zephyr/dfu/mcuboot.h>
|
|
|
|
#include <zephyr/dfu/flash_img.h>
|
|
|
|
#include <zephyr/sys/reboot.h>
|
2022-05-25 23:31:28 +08:00
|
|
|
#include <zephyr/mgmt/hawkbit.h>
|
2020-07-25 01:24:49 +08:00
|
|
|
#include "hawkbit_firmware.h"
|
|
|
|
#include "hawkbit_device.h"
|
|
|
|
|
|
|
|
static void cmd_run(const struct shell *shell, size_t argc, char **argv)
|
|
|
|
{
|
|
|
|
ARG_UNUSED(argc);
|
|
|
|
ARG_UNUSED(argv);
|
|
|
|
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "Starting Hawkbit run...\n");
|
|
|
|
switch (hawkbit_probe()) {
|
|
|
|
case HAWKBIT_UNCONFIRMED_IMAGE:
|
|
|
|
shell_fprintf(
|
|
|
|
shell, SHELL_ERROR,
|
|
|
|
"Image is unconfirmed."
|
|
|
|
"Rebooting to revert back to previous confirmed image\n");
|
|
|
|
sys_reboot(SYS_REBOOT_WARM);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_CANCEL_UPDATE:
|
|
|
|
shell_fprintf(shell, SHELL_INFO,
|
|
|
|
"Hawkbit update Cancelled from server\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_NO_UPDATE:
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "No update found\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_OK:
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "Image Already updated\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_UPDATE_INSTALLED:
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "Update Installed\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_DOWNLOAD_ERROR:
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "Download Error\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_NETWORKING_ERROR:
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "Networking Error\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case HAWKBIT_METADATA_ERROR:
|
|
|
|
shell_fprintf(shell, SHELL_INFO, "Metadata Error\n");
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
shell_fprintf(shell, SHELL_ERROR, "Invalid response\n");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
k_sleep(K_MSEC(1));
|
|
|
|
}
|
|
|
|
|
|
|
|
static int cmd_info(const struct shell *shell, size_t argc, char *argv)
|
|
|
|
{
|
|
|
|
ARG_UNUSED(argc);
|
|
|
|
ARG_UNUSED(argv);
|
|
|
|
|
|
|
|
char device_id[DEVICE_ID_HEX_MAX_SIZE] = {0},
|
|
|
|
firmware_version[BOOT_IMG_VER_STRLEN_MAX] = {0};
|
|
|
|
|
|
|
|
hawkbit_get_firmware_version(firmware_version, BOOT_IMG_VER_STRLEN_MAX);
|
|
|
|
hawkbit_get_device_identity(device_id, DEVICE_ID_HEX_MAX_SIZE);
|
|
|
|
|
|
|
|
shell_fprintf(shell, SHELL_NORMAL, "Unique device id: %s\n", device_id);
|
|
|
|
shell_fprintf(shell, SHELL_NORMAL, "Firmware Version: %s\n",
|
|
|
|
firmware_version);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
SHELL_STATIC_SUBCMD_SET_CREATE(
|
|
|
|
sub_hawkbit,
|
|
|
|
SHELL_CMD(info, NULL, "Dump Hawkbit information", cmd_info),
|
|
|
|
SHELL_CMD(run, NULL, "Trigger an Hawkbit update run", cmd_run),
|
|
|
|
SHELL_SUBCMD_SET_END);
|
|
|
|
|
|
|
|
SHELL_CMD_REGISTER(hawkbit, &sub_hawkbit, "Hawkbit commands", NULL);
|