X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibsigrok-internal.h;h=d6f6933a2f8db1695bec02ba0c2e82c83a9fea3c;hb=395ac73eadfdb7a8e03107172dcdbf5d9176a1fa;hp=8147fe57427183f42c94e393cd905743f810347b;hpb=dae34e302180a8c884f730b2587f6f9482984f42;p=libsigrok.git diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 8147fe57..d6f6933a 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -172,6 +172,23 @@ static inline uint32_t read_u24le(const uint8_t *p) return u; } +/** + * Read a 24 bits big endian unsigned integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding unsigned integer + */ +static inline uint32_t read_u24be(const uint8_t *p) +{ + uint32_t u; + + u = 0; + u <<= 8; u |= p[0]; + u <<= 8; u |= p[1]; + u <<= 8; u |= p[2]; + + return u; +} + /** * Read a 32 bits big endian unsigned integer out of memory. * @param x a pointer to the input memory @@ -1621,6 +1638,7 @@ struct sr_serial_dev_inst { SER_BT_CONN_NRF51, /**!< BLE, Nordic nRF51, notifications */ SER_BT_CONN_CC254x, /**!< BLE, TI CC254x, notifications */ SER_BT_CONN_AC6328, /**!< BLE, JL AC6328B, notifications */ + SER_BT_CONN_DIALOG, /**!< BLE, dialog DA14580, notifications */ SER_BT_CONN_NOTIFY, /**!< BLE, generic notifications */ SER_BT_CONN_MAX, /**!< sentinel */ } bt_conn_type; @@ -2199,29 +2217,25 @@ enum binary_value_type { BVT_INVALID, BVT_UINT8, - BVT_BE_UINT8 = BVT_UINT8, - BVT_LE_UINT8 = BVT_UINT8, BVT_BE_UINT16, + BVT_BE_UINT24, BVT_BE_UINT32, - BVT_BE_UINT64, - BVT_BE_FLOAT, BVT_LE_UINT16, + BVT_LE_UINT24, BVT_LE_UINT32, - BVT_LE_UINT64, - BVT_LE_FLOAT, }; /** Binary value specification */ struct binary_value_spec { size_t offset; /**!< Offset into binary image */ enum binary_value_type type; /**!< Data type to decode */ - float scale; /**!< Scale factor to native units */ }; /** - * Read extract a value from a binary data image. + * Read extract a value from a binary data image, ensuring no out-of-bounds + * read happens. * * @param[out] out Pointer to output buffer (conversion result) * @param[in] spec Binary value specification @@ -2230,8 +2244,20 @@ struct binary_value_spec { * * @return SR_OK on success, SR_ERR_* error code on failure. */ +SR_PRIV int bv_get_value_len(float *out, const struct binary_value_spec *spec, + const uint8_t *data, size_t length); + +/** + * Read extract a value from a binary data image, without bound check. + * + * @param[out] out Pointer to output buffer (conversion result) + * @param[in] spec Binary value specification + * @param[in] data Pointer to binary input data + * + * @return SR_OK on success, SR_ERR_* error code on failure. + */ SR_PRIV int bv_get_value(float *out, const struct binary_value_spec *spec, - const void *data, size_t length); + const uint8_t *data); /*--- crc.c -----------------------------------------------------------------*/