cn-cbor
cn-cbor copied to clipboard
Consider indicating the size of floats in the API in the cb->length field
case AI_2:
#ifndef CBOR_NO_FLOAT
cb->type = CN_CBOR_DOUBLE;
cb->v.dbl = decode_half(val);
cb->length = 2; // Tiny Float, especially nice for serializing binary fractions
#else /* CBOR_NO_FLOAT */
CN_CBOR_FAIL(CN_CBOR_ERR_FLOAT_NOT_SUPPORTED);
#endif /* CBOR_NO_FLOAT */
break;
case AI_4:
#ifndef CBOR_NO_FLOAT
cb->type = CN_CBOR_DOUBLE;
u32.u = val;
cb->v.dbl = u32.f;
cb->length = 4; // Short Float, good enough for most constrained network purposes
#else /* CBOR_NO_FLOAT */
CN_CBOR_FAIL(CN_CBOR_ERR_FLOAT_NOT_SUPPORTED);
#endif /* CBOR_NO_FLOAT */
break;
case AI_8:
#ifndef CBOR_NO_FLOAT
cb->type = CN_CBOR_DOUBLE;
u64.u = val;
cb->v.dbl = u64.d;
cb->length = 8; // Long Float, no excuses
#else /* CBOR_NO_FLOAT */
CN_CBOR_FAIL(CN_CBOR_ERR_FLOAT_NOT_SUPPORTED);
#endif /* CBOR_NO_FLOAT */
break;
default: cb->v.uint = val;