From: Gerhard Sittig Date: Tue, 12 May 2020 21:16:05 +0000 (+0200) Subject: libsigrok-internal.h: add 24bit little endian reader helper X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=080b6bcf095745725a2909a26943fca53c66d362;p=libsigrok.git libsigrok-internal.h: add 24bit little endian reader helper Add another endianess conversion helper which reads 24bit values in little endian format. --- diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index 465a16e9..8925cbff 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -142,6 +142,23 @@ static inline int16_t read_i16le(const uint8_t *p) } #define RL16S(x) read_i16le((const uint8_t *)(x)) +/** + * Read a 24 bits little endian unsigned integer out of memory. + * @param x a pointer to the input memory + * @return the corresponding unsigned integer + */ +static inline uint32_t read_u24le(const uint8_t *p) +{ + uint32_t u; + + u = 0; + u <<= 8; u |= p[2]; + u <<= 8; u |= p[1]; + u <<= 8; u |= p[0]; + + return u; +} + /** * Read a 32 bits big endian unsigned integer out of memory. * @param x a pointer to the input memory @@ -499,6 +516,23 @@ static inline uint32_t read_u32be_inc(const uint8_t **p) return v; } +/** + * Read unsigned 24bit integer from raw memory (little endian format), increment read position. + * @param[in, out] p Pointer into byte stream. + * @return Retrieved integer value, unsigned. + */ +static inline uint32_t read_u24le_inc(const uint8_t **p) +{ + uint32_t v; + + if (!p || !*p) + return 0; + v = read_u24le(*p); + *p += 3 * sizeof(uint8_t); + + return v; +} + /** * Read unsigned 32bit integer from raw memory (little endian format), increment read position. * @param[in, out] p Pointer into byte stream.