26#ifndef CAFFEINE_HAL_CFN_HAL_UTIL_H
27#define CAFFEINE_HAL_CFN_HAL_UTIL_H
40static inline int16_t cfn_util_bytes_to_int16_le(uint8_t msb, uint8_t lsb)
43 const uint32_t COMBINED = ((uint32_t) msb << 8U) | (uint32_t) lsb;
44 return (int16_t) COMBINED;
55static inline uint32_t cfn_util_bytes_to_uint32_le(uint8_t b3, uint8_t b2, uint8_t b1, uint8_t b0)
57 return ((uint32_t) b3 << 24U) | ((uint32_t) b2 << 16U) | ((uint32_t) b1 << 8U) | (uint32_t) b0;
68static inline int32_t cfn_util_bytes_to_int32_be(uint8_t b0, uint8_t b1, uint8_t b2, uint8_t b3)
70 const uint32_t COMBINED = ((uint32_t) b0 << 24U) | ((uint32_t) b1 << 16U) | ((uint32_t) b2 << 8U) | (uint32_t) b3;
71 return (int32_t) COMBINED;
83static inline uint32_t cfn_util_extract_field(uint32_t val, uint32_t mask, uint32_t shift)
86 return (uint32_t) ((val & mask) >> shift);
95static inline bool cfn_util_bit_is_set(uint8_t reg_val, uint8_t bit_mask)
97 return (
bool) ((reg_val & bit_mask) != 0U);
109static inline int16_t cfn_util_sat_add_s16(int16_t a, int16_t b)
111 const int32_t RESULT = (int32_t) a + (int32_t) b;
117 else if (RESULT < -32768)
123 out = (int16_t) RESULT;
135static inline float cfn_util_clamp_f32(
float val,
float min,
float max)
158static inline bool cfn_util_f32_is_equal(
float a,
float b,
float epsilon)
165 return (
bool) (diff <= epsilon);
176static inline int16_t cfn_util_f32_to_q15(
float val)
178 const float SCALED = val * 32767.0F;
179 return (int16_t) SCALED;
187static inline uint8_t cfn_util_get_msb16(uint16_t val)
189 return (uint8_t) (((uint32_t) val >> 8U) & 0xFFU);
197static inline uint8_t cfn_util_get_lsb16(uint16_t val)
199 return (uint8_t) ((uint32_t) val & 0xFFU);