forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-13 72def895431ad7a08e635b11f3da738e2b2c4618
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
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