boot_serial: Upgrade from cddl-gen 0.1.0 to zcbor 0.4.0
cddl-gen has been renamed to zcbor.
Update regenerate_serial_recovery_cbor.sh and regenerate/recopy all
files.
Remove the submodule in ext/ since it is no longer necessary when
the zcbor package is installed (only needed for regeneration, not
for building).
Signed-off-by: Øyvind Rønningstad <oyvind.ronningstad@nordicsemi.no>
diff --git a/boot/boot_serial/src/boot_serial.c b/boot/boot_serial/src/boot_serial.c
index a11284f..4a4a63d 100644
--- a/boot/boot_serial/src/boot_serial.c
+++ b/boot/boot_serial/src/boot_serial.c
@@ -25,7 +25,7 @@
#include "sysflash/sysflash.h"
#include "bootutil/bootutil_log.h"
-#include "cbor_encode.h"
+#include "zcbor_encode.h"
#ifdef __ZEPHYR__
#include <sys/reboot.h>
@@ -99,17 +99,12 @@
static void boot_serial_output(void);
-static cbor_state_backups_t dummy_backups;
-static cbor_state_t cbor_state = {
- .backups = &dummy_backups
-};
+static zcbor_state_t cbor_state[2];
void reset_cbor_state(void)
{
- cbor_state.payload_mut = (uint8_t *)bs_obuf;
- cbor_state.payload_end = (const uint8_t *)bs_obuf
- + sizeof(bs_obuf);
- cbor_state.elem_count = 0;
+ zcbor_new_encode_state(cbor_state, 2, (uint8_t *)bs_obuf,
+ (size_t)bs_obuf + sizeof(bs_obuf), 0);
}
/**
@@ -126,7 +121,7 @@
*/
extern int bs_peruser_system_specific(const struct nmgr_hdr *hdr,
const char *buffer,
- int len, cbor_state_t *cs);
+ int len, zcbor_state_t *cs);
/*
* Convert version into string without use of snprintf().
@@ -157,6 +152,9 @@
return dst - tgt;
}
+#define zcbor_tstr_put_lit_cast(state, string) \
+ zcbor_tstr_encode_ptr(state, (uint8_t *)string, sizeof(string) - 1)
+
/*
* dst has to be able to fit "255.255.65535.4294967295" (25 characters).
*/
@@ -186,9 +184,9 @@
const struct flash_area *fap;
uint8_t image_index;
- map_start_encode(&cbor_state, 1);
- tstrx_put(&cbor_state, "images");
- list_start_encode(&cbor_state, 5);
+ zcbor_map_start_encode(cbor_state, 1);
+ zcbor_tstr_put_lit_cast(cbor_state, "images");
+ zcbor_list_start_encode(cbor_state, 5);
image_index = 0;
IMAGES_ITER(image_index) {
for (slot = 0; slot < 2; slot++) {
@@ -235,24 +233,24 @@
continue;
}
- map_start_encode(&cbor_state, 20);
+ zcbor_map_start_encode(cbor_state, 20);
#if (BOOT_IMAGE_NUMBER > 1)
- tstrx_put(&cbor_state, "image");
- uintx32_put(&cbor_state, image_index);
+ zcbor_tstr_put_lit_cast(cbor_state, "image");
+ zcbor_uint32_put(cbor_state, image_index);
#endif
- tstrx_put(&cbor_state, "slot");
- uintx32_put(&cbor_state, slot);
- tstrx_put(&cbor_state, "version");
+ zcbor_tstr_put_lit_cast(cbor_state, "slot");
+ zcbor_uint32_put(cbor_state, slot);
+ zcbor_tstr_put_lit_cast(cbor_state, "version");
bs_list_img_ver((char *)tmpbuf, sizeof(tmpbuf), &hdr.ih_ver);
- tstrx_put_term(&cbor_state, (char *)tmpbuf);
- map_end_encode(&cbor_state, 20);
+ zcbor_tstr_encode_ptr(cbor_state, tmpbuf, strlen((char *)tmpbuf));
+ zcbor_map_end_encode(cbor_state, 20);
}
}
- list_end_encode(&cbor_state, 5);
- map_end_encode(&cbor_state, 1);
+ zcbor_list_end_encode(cbor_state, 5);
+ zcbor_map_end_encode(cbor_state, 1);
boot_serial_output();
}
@@ -289,15 +287,15 @@
*/
struct Upload upload;
- uint32_t decoded_len;
- bool result = cbor_decode_Upload((const uint8_t *)buf, len, &upload, &decoded_len);
+ size_t decoded_len;
+ uint_fast8_t result = cbor_decode_Upload((const uint8_t *)buf, len, &upload, &decoded_len);
- if (!result || (len != decoded_len)) {
+ if ((result != ZCBOR_SUCCESS) || (len != decoded_len)) {
goto out_invalid_data;
}
for (int i = 0; i < upload._Upload_members_count; i++) {
- struct Member_ *member = &upload._Upload_members[i];
+ struct Member_ *member = &upload._Upload_members[i]._Upload_members;
switch(member->_Member_choice) {
case _Member_image:
img_num = member->_Member_image;
@@ -458,14 +456,14 @@
out:
BOOT_LOG_INF("RX: 0x%x", rc);
- map_start_encode(&cbor_state, 10);
- tstrx_put(&cbor_state, "rc");
- uintx32_put(&cbor_state, rc);
+ zcbor_map_start_encode(cbor_state, 10);
+ zcbor_tstr_put_lit_cast(cbor_state, "rc");
+ zcbor_uint32_put(cbor_state, rc);
if (rc == 0) {
- tstrx_put(&cbor_state, "off");
- uintx32_put(&cbor_state, curr_off);
+ zcbor_tstr_put_lit_cast(cbor_state, "off");
+ zcbor_uint32_put(cbor_state, curr_off);
}
- map_end_encode(&cbor_state, 10);
+ zcbor_map_end_encode(cbor_state, 10);
boot_serial_output();
flash_area_close(fap);
@@ -484,10 +482,10 @@
static void
bs_rc_rsp(int rc_code)
{
- map_start_encode(&cbor_state, 10);
- tstrx_put(&cbor_state, "rc");
- uintx32_put(&cbor_state, rc_code);
- map_end_encode(&cbor_state, 10);
+ zcbor_map_start_encode(cbor_state, 10);
+ zcbor_tstr_put_lit_cast(cbor_state, "rc");
+ zcbor_uint32_put(cbor_state, rc_code);
+ zcbor_map_end_encode(cbor_state, 10);
boot_serial_output();
}
@@ -605,7 +603,7 @@
break;
}
} else if (MCUBOOT_PERUSER_MGMT_GROUP_ENABLED == 1) {
- if (bs_peruser_system_specific(hdr, buf, len, &cbor_state) == 0) {
+ if (bs_peruser_system_specific(hdr, buf, len, cbor_state) == 0) {
boot_serial_output();
}
} else {
@@ -628,7 +626,7 @@
char encoded_buf[BASE64_ENCODE_SIZE(sizeof(buf))];
data = bs_obuf;
- len = (uint32_t)cbor_state.payload_mut - (uint32_t)bs_obuf;
+ len = (uint32_t)cbor_state->payload_mut - (uint32_t)bs_obuf;
bs_hdr->nh_op++;
bs_hdr->nh_flags = 0;