forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-13 72def895431ad7a08e635b11f3da738e2b2c4618
Soft/sundry.h
New file
@@ -0,0 +1,199 @@
#ifndef _SUNDRY_H_
#define _SUNDRY_H_
#include "define_all.h"
#include "extern_rtc.h"
#include "time.h"
/*»·ÐÎÊý×é´óС*/
#define FLOW_RING_BUFFER_SIZE 20
#define TEMP_RING_BUFFER_SIZE 10
#define PRESS_RING_BUFFER_SIZE 10
#define INSTANT_WC_RING_BUFFER_SIZE 20
// ´óС¶Ëת»»
#define BSWAP_16(x) ((x & 0x00ff) << 8) | \
                        ((x & 0xff00) >> 8)
#define BSWAP_32(x) ((x & 0xff000000) >> 24) |    \
                        ((x & 0x00ff0000) >> 8) | \
                        ((x & 0x0000ff00) << 8) | \
                        ((x & 0x000000ff) << 24)
// #define BSWAP_64(x) ((BSWAP_32(x) << 32) | BSWAP_32((x) >> 32))
#define BSWAP_64(x) ((x & 0xff00000000000000) >> 56) |     \
                        ((x & 0x00ff000000000000) >> 40) | \
                        ((x & 0x0000ff0000000000) >> 24) | \
                        ((x & 0x000000ff00000000) >> 8) |  \
                        ((x & 0x00000000ff000000) << 8) |  \
                        ((x & 0x0000000000ff0000) << 24) | \
                        ((x & 0x000000000000ff00) << 40) | \
                        ((x & 0x00000000000000ff) << 56)
// ÏµÍ³Í¨ÓÃÑÓ³Ùʱ¼äÉèÖÃ
#define __SYS_DELAY_SEC_TIME_SET_(__HANDLE__, __NUMBER__) ((&sys_delay_sec_para_g)->__HANDLE__.delay_time = __NUMBER__)
// ÏµÍ³Í¨ÓÃÑÓ³Ùʱ¼ä»ñÈ¡
#define __SYS_DELAY_SEC_TIME_GET_(__HANDLE__)   ((&sys_delay_sec_para_g)->__HANDLE__.delay_time)
// ÏµÍ³Í¨ÓÃÑÓ³Ù±ê־λget
#define __SYS_DELAY_SEC_FLAG_GET(__HANDLE__) ((&sys_delay_sec_para_g)->__HANDLE__.delay_flag)
// ÏµÍ³Í¨ÓÃÑÓ³Ù±ê־λÉèÖÃ
#define __SYS_DELAY_SEC_FLAG_SET_(__HANDLE__) ((&sys_delay_sec_para_g)->__HANDLE__.delay_flag = SET)
// ÏµÍ³Í¨ÓÃÑÓ³Ù±ê־λÇå³ý
#define __SYS_DELAY_SEC_FLAG_CLEAR_(__HANDLE__) ((&sys_delay_sec_para_g)->__HANDLE__.delay_flag = RESET)
// ÖÜÆÚÊ״μÆËã±ê־λÉèÖÃ
#define __PERIOD_FIRST_CALC_FLAG_SET(__HANDLE__) ((&period_para_g)->__HANDLE__.period_flag = SET)
/*µÃ³ö½á¹¹Ìå³ÉÔ±Æ«ÒÆÁ¿ºÍ´óС*/
#define OFFSET_OF(type, member) ((size_t) & (((type *)0))->member)
#define SIZEOF_OF(type, member) (sizeof(((type *)0))->member)
/*Ê®Áù½øÖƺÍBCD¸ñʽ»¥Ïàת»»£¨ÏÞÖÆ·¶Î§0~99£©*/
#define BCD_2_HEX_U8(__BCD_DATA__) (((__BCD_DATA__) / 16) * 10 + (__BCD_DATA__) % 16)
#define HEX_2_BCD_U8(__HEX_DATA__) (((__HEX_DATA__) / 10) * 16 + (__HEX_DATA__) % 10)
/*ÿÈÕ0µã*/
#define DAILY_ZERO ((&calendar_g)->Hour == 0 && (&calendar_g)->Minute == 0 && (&calendar_g)->Second == 0 ? SET : RESET)
/**
 * @brief ¼ì²é½á¹¹Ìå´óСÊÇ·ñ·ûºÏ
 *        ÔÚ±àÒëʱ»á½øÐмì²é
 * @param type ½á¹¹ÌåÀàÐÍ
 * @param size ½á¹¹Ìå¼ì²é´óС
 */
#define TYPE_CHECK_SIZE(type, size) extern char sizeof_##type##_is_##size##_error[!!(sizeof(type) == (size_t)(size)) - 1]
/**
 * @brief ½á¹¹Ìå³ÉÔ±
 * @param type   ½á¹¹ÌåÀàÐÍ
 * @param member ³ÉÔ±±äÁ¿
 */
#define TYPE_MEMBER(type, member) (((type *)0)->member)
/**
 * @brief ¼ì²é½á¹¹Ìå³ÉÔ±´óСÊÇ·ñ·ûºÏ
 *        ÔÚ±àÒëʱ»á½øÐмì²é
 * @param type ½á¹¹ÌåÀàÐÍ
 * @param member ½á¹¹ÌåÀàÐÍ
 * @param size ½á¹¹Ìå¼ì²é´óС
 */
#define TYPE_MEMBER_CHECK_SIZE(type, member, size) extern int sizeof_##type##_##member##_is_error \
    [!!(sizeof(TYPE_MEMBER(type, member)) == (size_t)(size)) - 1]
/**
 * @brief ¼ì²é½á¹¹ÌåÖнṹÌå³ÉÔ±´óСÊÇ·ñ·ûºÏ
 *        ÔÚ±àÒëʱ»á½øÐмì²é
 * @param type ½á¹¹ÌåÀàÐÍ
 * @param member ½á¹¹ÌåÀàÐÍ
 * @param size ½á¹¹Ìå¼ì²é´óС
 */
#define TYPE_CHILDTYPE_MEMBER_CHECK_SIZE(type, childtype, member, size) extern int sizeof_##type##_##childtype##_##member##_is_error \
    [!!(sizeof(TYPE_MEMBER(type, childtype.member)) == (size_t)(size)) - 1]
/**
 * @brief ¼ì²é½á¹¹Ìå³ÉÔ±Æ«ÒÆÎ»ÖÃÊÇ·ñ·ûºÏ
 *        ÔÚ±àÒëʱ»á½øÐмì²é
 * @param type ½á¹¹ÌåÀàÐÍ
 * @param member ½á¹¹Ìå³ÉÔ±
 * @param value ³ÉÔ±Æ«ÒÆ
 */
#define TYPE_MEMBER_CHECK_OFFSET(type, member, value)  \
  extern int offset_of_##member##_in_##type##_is_error \
      [!!(__builtin_offsetof(type, member) == ((size_t)(value))) - 1]
/**
 * @brief ¼ì²é½á¹¹Ìå³ÉÔ±Æ«ÒÆÎ»ÖÃÊÇ·ñ·ûºÏ
 *        ÔÚ±àÒëʱ»á½øÐмì²é
 * @param type ½á¹¹ÌåÀàÐÍ
 * @param member ½á¹¹Ìå³ÉÔ±
 * @param value ³ÉÔ±Æ«ÒÆ
 */
#define TYPE_CHILDTYPE_MEMBER_CHECK_OFFSET(type, childtype, member, value) \
  extern int offset_of_##member##_in_##type##_##childtype##_is_error       \
      [!!(__builtin_offsetof(type, childtype.member) == ((size_t)(value))) - 1]
#pragma pack(1)
typedef struct
{
  float *pRing_buffer;
  uint8_t front_index;     // ¶ÓÁÐÍ·£¨¶ÁÒ»¸öÊý¾Ý+1£©
  uint8_t rear_index;      // ¶ÓÁÐβ(дһ¸öÊý¾Ý+1)
} ANALOGOUS_RING_BUFFER_T; // ÀàËÆ»·ÐÎÊý×飨ֻÐèҪд£¬²»ÐèÒª¶Á£©
typedef struct
{
  __IO uint8_t delay_flag;  // ÑÓʱʱ¼äµ½±ê־λ
  __IO uint16_t delay_time; // ÑÓʱ¾ßÌåʱ¼ä
} DELAY_SEC_TYPE_T;         // ÑÓʱʱ¼äÀàÐͽṹÌå
typedef struct
{
  DELAY_SEC_TYPE_T gprs_delay_para;       // GPRSÑÓ³Ùʱ¼ä
  DELAY_SEC_TYPE_T gprs_timeout_para;     // GPRS³¬Ê±Ê±¼ä
  DELAY_SEC_TYPE_T flow_data_period_para; // Á÷Á¿Êý¾Ý»ñÈ¡ÖÜÆÚʱ¼ä
  DELAY_SEC_TYPE_T sys_active_time;       // ÏµÍ³¼¤»îʱ¼ä
  DELAY_SEC_TYPE_T mode_flag_active_time; // Çл»Ä£Ê½±ê־λ¼¤»îʱ¼ä
   DELAY_SEC_TYPE_T sys_restart_delay_time;// ÏµÍ³ÖØÆôµÄÑÓ³Ùʱ¼ä
} SYS_DELAY_SEC_PARA_T;
typedef struct
{
   uint16_t  period_flag ;    // Ê״μÆËãÉÏÒ»´ÎÖÜÆÚµÄ±ê־λ
  __IO uint16_t last_time_m; // ÉÏÒ»´ÎµÄʱ¼ä
} PERIOD_TYPE_T ;
typedef struct
{
  PERIOD_TYPE_T gprs_send_period;
  PERIOD_TYPE_T alka_get_power_period;
  PERIOD_TYPE_T lith_get_power_period;
  PERIOD_TYPE_T mcu_get_temperature_period;
} PERIOD_PARA_T ;
#pragma pack()
extern uint8_t restart_alarm_flag;
extern SYS_DELAY_SEC_PARA_T sys_delay_sec_para_g;
extern PERIOD_PARA_T period_para_g;
extern ANALOGOUS_RING_BUFFER_T flow_ring;
extern ANALOGOUS_RING_BUFFER_T temp_ring;
extern ANALOGOUS_RING_BUFFER_T press_ring;
extern ANALOGOUS_RING_BUFFER_T instant_wc_ring;
uint8_t Bcd_2_Hex(uint8_t bcd_data);
uint8_t Hex_2_Bcd(uint8_t hex_data);
void Hex_2_Ascii(uint8_t *Hex, uint8_t *Ascii, int Len); //   HEX_TO_ASCII
void Ascii_2_Hex(uint8_t *Ascii, uint8_t *Hex, int Len); //   ASCII_TO_HEX
void Float_To_Byte4(float flo, uint8_t *pData);
float Byte4_To_Float(uint8_t *pData);
void Sys_Delay_Sec(SYS_DELAY_SEC_PARA_T *sys_delay_sec_para_p);
FlagStatus Func_PeriodStartHandler(uint16_t ref_time_m, uint16_t period_min_set,
                                   uint16_t *pPeriod_flag, __IO uint16_t *pLast_time_m, __IO RTC_TimeDateTypeDef *calendar_p);
uint16_t get_one_in_data_3(uint16_t data);
int Datecmp(const uint8_t *pDate1, const uint8_t *pDate2);
int16_t Date_DaysDifference(uint8_t yearst_bcd, uint8_t monthst_bcd, uint8_t dayst_bcd,
                            uint8_t yearend_bcd, uint8_t monthend_bcd, uint8_t dayend_bcd);
int16_t Data_MonthsDifference(uint8_t yearst_bcd, uint8_t monthst_bcd,
                              uint8_t yearend_bcd, uint8_t monthend_bcd);
uint8_t ring_write_array(ANALOGOUS_RING_BUFFER_T *ring_buffer_p, const float *pData, uint8_t write_cnt, uint8_t buffer_len_max);
uint8_t ring_read_1_data(ANALOGOUS_RING_BUFFER_T *ring_buffer_p, float *pData, uint8_t buffer_len_max);
float LowPassFilter_Ring_Average(ANALOGOUS_RING_BUFFER_T *ring_buffer_p, const float *pData, uint8_t write_cnt, uint8_t buffer_len_max);
float LowPassFilter_MaxMin_Ring_Average(ANALOGOUS_RING_BUFFER_T *ring_buffer_p, const float *pData, uint8_t write_cnt, uint8_t buffer_len_max);
float Wc_2_Sc(float wc_flow, float real_press, float real_temp);
float BLEndianFloat(float fValue);
double BLEndianDouble(double ffValue);
uint8_t CalcCheckSum(const uint8_t *pData, uint16_t Len);
int8_t my_memcmp(const void * pData_1,const void * pData_2,size_t n);
#endif