If you for example have an application that reads Modbus registers, you would like to efficiently encode register number and register value to the CBOR/JSON.
To get the smallest overhead you can use TSP (Time Series Period) encoding which also adds timestamp
to the each value, but it has practically no data overhead and you can ignore this timestamp
item.
So for the JSON output
You would need to define this in your CBOR YAML file:
- registers:
- tsp:
- register:
- value:
And then in your CBOR encoder use
zcbor_uint32_put(zs, MSG_KEY_REGISTERS);
{
zcbor_list_start_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
/* Dummy TSO values - timestamp and offset */
zcbor_uint32_put(zs, 0);
zcbor_uint32_put(zs, 0);
for (int i = 0; i < 4; i++) {
zcbor_uint32_put(zs, i);
zcbor_uint64_put(zs, i * 100);
}
zcbor_list_end_encode(zs, ZCBOR_VALUE_IS_INDEFINITE_LENGTH);
}
The overhead is only those two zeroes, then with each key-value there I no overhead and numerical values are encoded the most efficiently.