/***************************************************************************** * @copyright Copyright (c) 2025-2055 Gary. All rights reserved. * @file kit_math.h * @brief xx功能 * @author Gary * @date 2024-09-03 * @remark *****************************************************************************/ #ifndef INCLUDE_KIT_MARH_H_ #define INCLUDE_KIT_MARH_H_ #include #include #include #include #include #include #include "kit_data.h" #include "kit_log.h" // #define EPSILON 0.000001 #define msleep(n) usleep(n * 1000) #define KIT_ABS(a) (((a) < 0) ? (-(a)) : (a)) #define KIT_ABS_DIFF(a, b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a))) #define KIT_MAX(a, b) (((a) > (b)) ? (a) : (b)) #define KIT_MIN(a, b) (((a) < (b)) ? (a) : (b)) #define KIT_UPPER_LIMIT(data, limit) (((data) > (limit)) ? (limit) : (data)) #define KIT_LOWER_LIMIT(data, limit) (((data) < (limit)) ? (limit) : (data)) #define KIT_CREAT_BIT(pos) ((uint32_t)0x01u << (pos)) #define KIT_GET_BIT(val, pos) ((val >> pos) & KIT_CREAT_BIT(0)) #define EQUAL_SECTION 1/1000 // 定义一个容差值用于浮点数比较 #define EPSILON 1e-6 // 宏定义,根据输入的浮点数返回相应的小数位数 #define GET_PRECISION(value) \ (fabs((value) - 0.01) < EPSILON ? 2 : \ fabs((value) - 0.1) < EPSILON ? 1 : \ fabs((value) - 0.001) < EPSILON ? 3 : \ fabs((value) - 1.0) < EPSILON ? 0 : 0) int float_equal(float a, float b); int double_equal(double a, double b); float float_max(float a, float b); float float_min(float a, float b); bool float_diff(float a, float b); uint8_t kit_check_sum8(uint8_t *buf, uint16_t len); void kit_append_crc16(uint8_t *buf, uint32_t len); uint16_t kit_check_crc16(const uint8_t *buf, uint32_t len); void kit_set_buf(void *buf, uint32_t len, uint8_t value); void kit_copy_buf(void *dest, const void *const src, uint32_t len); bool kit_is_buf_same(const void *const dest, const void *const src, uint32_t len); uint32_t kit_lt_read_buf(const uint8_t *const buf, uint32_t idx, uint32_t len); uint32_t kit_bt_read_buf(const uint8_t *const buf, uint32_t idx, uint32_t len); uint32_t kit_lt_add_read_buf(const uint8_t *const buf, uint32_t *idx, uint32_t len); uint32_t kit_bt_add_read_buf(const uint8_t *const buf, uint32_t *idx, uint32_t len); void kit_lt_write_buf(uint8_t *const buf, uint32_t idx, uint32_t value, uint32_t len); void kit_add_lt_write_buf(uint8_t *buf, uint32_t *idx, uint32_t value, uint32_t len); void kit_add_bt_write_buf(uint8_t *buf, uint32_t *idx, uint32_t value, uint32_t len); void kit_add_lt_8u_write_buf(uint8_t *const buf, uint32_t *idx, uint8_t value); void kit_add_lt_16u_write_buf(uint8_t *const buf, uint32_t *idx, uint16_t value); void kit_add_lt_32u_write_buf(uint8_t *const buf, uint32_t *idx, uint32_t value); int32_t kit_get_avg_filter_max_min(const int16_t *buf, uint32_t len); int32_t kit_get_int32_avg_filter_max_min(const int32_t *buf, uint32_t len); int32_t kit_get_avg_filter_max_min_diff(const int16_t *buf, uint32_t len, uint16_t *diff); uint32_t kit_get_unsign_avg_filter_max_min(const uint16_t *buf, uint32_t len); int32_t kit_get_dma_avg_filter_min_max(uint16_t *buf, uint32_t data_cnt, uint32_t idx, uint32_t sample_cnt); uint32_t unsigned_add_signed_with_limit(uint32_t u_num, int32_t s_num, uint32_t upper_limit, uint32_t lower_limit); void kit_bit_fill(uint8_t *buffer, uint8_t start_bit, uint8_t len, uint8_t data); void kit_bit_fill_u16(uint16_t *buffer, uint8_t start_bit, uint8_t len, uint16_t data); uint8_t kit_dec_to_bcd(uint8_t data); uint8_t kit_dcb_to_dec(uint8_t data); uint16_t kit_get_u16(uint8_t *data, data_endian_e type); int16_t kit_get_s16(uint8_t *data, data_endian_e type); uint32_t kit_get_u32(uint8_t *data, data_endian_e type); int32_t kit_get_s32(uint8_t *data, data_endian_e type); int64_t kit_get_s64(uint8_t *data, data_endian_e type); uint64_t kit_get_u64(uint8_t *data, data_endian_e type); float kit_get_float(uint8_t *data, data_endian_e type); double kit_get_double(uint8_t *data, data_endian_e type); uint8_t kit_byte_pos_bit(uint8_t *data, uint16_t index, uint16_t sizeLen); // 是否存在变位 uint8_t kit_diff_change(float old_value, float new_value, float threshold); uint8_t kit_fill_byte(uint8_t* data,data_type_e dataType, data_endian_e endian,double value); /********************************************************************* * @brief 取出word中bit位bitpos开始取bitlen长度的bit数据 * @param[in] bitPos bit开始位置从1开始。1表示bit0 * @param[in] bitLen bit取出的长度 * @param[in] word 原数据 * @return 超出阈值 1 未超 0 *********************************************************************/ uint8_t get_bit_word(uint8_t bitPos, uint8_t bitLen, uint32_t word); #endif // INCLUDE_KIT_MARH_H_