zcbor map of empty string not returning what i expect.

This question relates to using zcbor.

Basically I have the following.

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void smp_req_image_state() {
uint8_t payload[128];
ZCBOR_STATE_E(encoding_state, 0, payload, sizeof(payload), 0);
// int err;
bool r = true;
smp_frm_t smp_msg = {0};
smp_msg.hdr.smp_cmd_id = GRP_IMG_STATE;
smp_msg.hdr.smp_grp = ntohs(MGMT_GRP_ID_IMAGE);
smp_msg.hdr.smp_op = SMP_OP_RD;
smp_msg.hdr.smp_seq = 1; // because...why not.
r = r && zcbor_map_start_encode(encoding_state, 1);
r = r && zcbor_map_end_encode(encoding_state, 1);
// smp_msg.hdr.smp_len = ntohs(512);
smp_msg.hdr.smp_len = ntohs(encoding_state->payload - payload);
uint8_t encoded_lenth = encoding_state->payload - payload;
printf("Encoded length is %i\n", encoded_lenth);
smp_msg.data = malloc(/*sizeof(uint8_t) * */ encoded_lenth);
memcpy(smp_msg.data, payload, encoded_lenth);
uint8_t total_size = sizeof(smp_msg.hdr) + encoded_lenth;
uint8_t *my_ptr = (uint8_t *)&smp_msg;
printf("Size of smp 'FRAME' = %i\n", total_size);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

I got 
The contents of FRAME - 00, 00, 00, 02, 00, 01, 01, 00, b0, 06, 

But I was expecting 00, 00, 00, 01, 00, 01, 01, 00, a0.

I've played arround with -DZCBOR_CANONICAL, but that just fails with if (!zcbor_new_backup(state, 0)).

I'm basing the expected on what I've seen come out of mcumgr and smpmgr when i had debug handles on the cli scripts.

The reason I'm using and wraping my messages is because I'm using a zync fpga with FREERTOS app to control the mcuboot on a nordic device.