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