boot_serial: Add optional processing of PERUSER group
The commit adds optional processing of MGMT_GROUP_ID_PERUSER,
as defined by mcumgr library, and above; the processing requires
systems to provide own functions as these groups are system
specific.
Signed-off-by: Dominik Ermel <dominik.ermel@nordicsemi.no>
diff --git a/boot/boot_serial/src/boot_serial.c b/boot/boot_serial/src/boot_serial.c
index 7d15ce1..baff764 100644
--- a/boot/boot_serial/src/boot_serial.c
+++ b/boot/boot_serial/src/boot_serial.c
@@ -102,6 +102,20 @@
.backups = &dummy_backups
};
+/**
+ * Function that processes MGMT_GROUP_ID_PERUSER mcumgr commands.
+ * The function is system specific as the PERUSER commands are system specific.
+ *
+ * @param[in] hdr -- the decoded header of mcumgr message;
+ * @param[in] buffer -- buffer with first mcumgr message;
+ * @param[in] len -- length of of data in buffer;
+ * @param[out] *cs -- object with encoded response.
+ *
+ * @return 0 on success; non-0 error code otherwise.
+ */
+extern int bs_peruser_system_specific(const struct nmgr_hdr *hdr,
+ const char *buffer,
+ int len, cbor_state_t *cs);
/*
* Convert version into string without use of snprintf().
@@ -486,6 +500,11 @@
default:
break;
}
+ } else if (MCUBOOT_PERUSER_MGMT_GROUP_ENABLED == 1 &&
+ hdr->nh_group >= MGMT_GROUP_ID_PERUSER) {
+ if (bs_peruser_system_specific(hdr, buf, len, &cbor_state) == 0) {
+ boot_serial_output();
+ }
}
}
diff --git a/boot/boot_serial/src/boot_serial_priv.h b/boot/boot_serial/src/boot_serial_priv.h
index 9275f3f..f17a2fc 100644
--- a/boot/boot_serial/src/boot_serial_priv.h
+++ b/boot/boot_serial/src/boot_serial_priv.h
@@ -36,13 +36,17 @@
/*
* From newtmgr.h
*/
+#define MGMT_ERR_OK 0
+#define MGMT_ERR_EUNKNOWN 2
#define MGMT_ERR_EINVAL 3
+#define MGMT_ERR_ENOTSUP 8
#define NMGR_OP_READ 0
#define NMGR_OP_WRITE 2
#define MGMT_GROUP_ID_DEFAULT 0
#define MGMT_GROUP_ID_IMAGE 1
+#define MGMT_GROUP_ID_PERUSER 64
#define NMGR_ID_CONS_ECHO_CTRL 1
#define NMGR_ID_RESET 5