blob: abbb6517322880c8f9b8f4d4a062c66635536937 [file] [log] [blame]
Dominik Ermel3d51e432021-06-25 17:29:50 +00001/*
Jamie McCrae268433e2023-08-29 15:37:15 +01002 * Copyright (c) 2021-2023 Nordic Semiconductor ASA
Dominik Ermel3d51e432021-06-25 17:29:50 +00003 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
Gerard Marull-Paretas34dd9e72022-05-09 12:13:12 +02007#include <zephyr/kernel.h>
Dominik Ermel3d51e432021-06-25 17:29:50 +00008
9#include "bootutil/bootutil_log.h"
10#include "../boot_serial/src/boot_serial_priv.h"
Dominik Ermele6e48012023-06-19 11:37:20 +000011#include <zcbor_encode.h>
Jamie McCrae268433e2023-08-29 15:37:15 +010012#include <boot_serial/boot_serial_extensions.h>
Andrzej Puzdrowski1b62cf22021-07-28 17:21:19 +020013
Andrzej Puzdrowskid16598f2022-01-10 10:49:09 +010014BOOT_LOG_MODULE_DECLARE(mcuboot);
Dominik Ermel3d51e432021-06-25 17:29:50 +000015
Andrzej Puzdrowski1b62cf22021-07-28 17:21:19 +020016int bs_peruser_system_specific(const struct nmgr_hdr *hdr, const char *buffer,
Dominik Ermel864d1042022-07-12 12:41:39 +000017 int len, zcbor_state_t *cs)
Andrzej Puzdrowski1b62cf22021-07-28 17:21:19 +020018{
19 int mgmt_rc = MGMT_ERR_ENOTSUP;
20
Jamie McCrae268433e2023-08-29 15:37:15 +010021 STRUCT_SECTION_FOREACH(mcuboot_bs_custom_handlers, function) {
22 if (function->handler) {
23 mgmt_rc = function->handler(hdr, buffer, len, cs);
24
25 if (mgmt_rc != MGMT_ERR_ENOTSUP) {
26 break;
Andrzej Puzdrowski1b62cf22021-07-28 17:21:19 +020027 }
Andrzej Puzdrowski1b62cf22021-07-28 17:21:19 +020028 }
29 }
30
31 if (mgmt_rc == MGMT_ERR_ENOTSUP) {
Dominik Ermel864d1042022-07-12 12:41:39 +000032 zcbor_map_start_encode(cs, 10);
33 zcbor_tstr_put_lit(cs, "rc");
34 zcbor_uint32_put(cs, mgmt_rc);
35 zcbor_map_end_encode(cs, 10);
Andrzej Puzdrowski1b62cf22021-07-28 17:21:19 +020036 }
37
38 return MGMT_ERR_OK;
39}