#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
|