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
200
201
202
203
204
205
206
207
208
209
#ifndef _MASTER_SLAVE_RECV_API_H_
#define _MASTER_SLAVE_RECV_API_H_
 
#include "define_all.h" 
#include "system_parameter.h"
 
#define RECV_TABLE_NUM (sizeof(read_recv_tab_func) / sizeof(SLAVE_RECV_TABLE_DRIVE_T))
#define SEND_TABLE_NUM 9
 
#define INTER_RECV_LEN_MAX 2048 // ½»»¥½ÓÊÕ×î´ó³¤¶È
 
#define FLOW_DATA_LENGTH sizeof(SLAVE_FLOW_DATA_T)
#define FLOW_DATA_FLOAT_LENGTH (SIZEOF_OF(SLAVE_FLOW_DATA_T, temperature) +  \
                                   SIZEOF_OF(SLAVE_FLOW_DATA_T, pressure) + \
                                   SIZEOF_OF(SLAVE_FLOW_DATA_T, instant_wc))
 
// ´Ó»úÃüÁSlave Command£©
#define SC_DATA_WR 0x52 // Ð´
#define SC_DATA_RD 0x42 // ¶Á
 
#define SC_SYS_RST 0x2A    // ´Ó»úÖØÆô
#define SC_SYS_UPDATA 0x2B // ´Ó»ú¸üÐÂ
 
#define SC_RO_RESULT 0x3A     // ´Ó»úÕý³£Êý¾Ý½á¹û£¨Read Only£©
#define SC_RO_CAL_RESULT 0x3B // ´Ó»ú±ê¶¨Êý¾Ý½á¹û£¨½öÔڱ궨ģʽÏÂÓÐЧ£©
 
#define SC_RO_TP 0x30       // ´Ó»úÎÂѹ
#define SC_RO_STATUS 0x31   // ´Ó»ú״̬×Ö
#define SC_RO_ALARM 0x32    // ´Ó»ú±¨¾¯×Ö
#define SC_RO_SOFTWARE 0x33 // ´Ó»úÈí¼þÐÅÏ¢
 
#define SC_RW_HARDWARE 0x34 // ´Ó»úÓ²¼þÐÅÏ¢£¨Read Write£©
#define SC_RW_TIME 1        // ´Ó»úʱ¼ä
 
// Ì½Í·ÃüÁUltrasonic Transducer£©£¨½öÔÚ²ÎÊýÉèÖÃģʽÏÂÓÐЧ£©
#define UT_RW_CAL 0x60    // Ì½Í·Ð£×¼²ÎÊý
#define UT_RO_STA 0x61    // Ì½Í·×´Ì¬
#define UT_RO_FHL 0x62    // Ì½Í·´¥·¢Ïߣ¨First Hit Level£©
#define UT_RW_ERR_TH 0x63 // Ì½Í·´íÎóãÐÖµ£¨Error Threshold£©
 
// ¼ì¶¨ÃüÁî
#define CAL_MODE_ENTER 0x9A // ¼ì¶¨Ä£Ê½½øÈë
#define CAL_MODE_EXIT 0x9B  // ¼ì¶¨Ä£Ê½Í˳ö£¨Ä¬Èϻص½Õý³£Ä£Ê½£©
// ¹¤³Ì£¨²ÎÊýÉèÖã©Ä£Ê½
#define PARA_MODE_ENTER 0x9C // ¹¤³Ìģʽ½øÈë
#define PARA_MODE_EXIT 0x9D  // ¹¤³ÌģʽÍ˳ö
 
// UART²ÎÊý
#define UART_RW_PARA 0xA0 // UART²ÎÊý
 
// ÐÂÔöµÄ²ÎÊý
#define PIPE_RW_PARA 0x64
#define UT_RW_PARA 0x65
#define CORR_RW_SET 0x66
#define CORR_RO_REAL 0x67
#define RAW_RO_DATA 0x68
#define DATA_RO_REAL_TIME 0x69 // ÊµÊ±²âÁ¿²ÎÊý
#define DATA_RO_TEMP_TIME_DIFF 0x6A //ζȺÍʱ¼ä²î²ÎÊý
#define CORR_RW_FIXED 0x6B //¶¨µãÐÞÕý
#define CORR_RW_DELAY 0x6C //ÐÞÕýÑÓʱ£¬ÓÃÓÚÁãÆ¯ÐÞÕý
#define CORR_SEC_PARA 0x6D //¶þ´ÎÐÞÕý£¨¸øÖ÷°åµÄ¶þ´ÎÐÞÕýҲҪϷ¢µ½Ð¡°åÖУ©
 
#define UT_RO_REAL_PARA_1 0x35
#define UT_RW_REAL_PARA_2 0x36
 
 
#define SC_ZERO_2_ZERO 0x24
#define SC_RES_PARA 0x25
#define CAL_DATA_PARA 0x26 //±ê¶¨µÄһЩ²ÎÊý
 
typedef enum
{
  INTER_DATA_READ = 0U,
  INTER_DATA_WRITE = !INTER_DATA_READ
} INTER_RW_STATUS;
 
typedef enum
{
  INTER_OK = 0U,
  INTER_UNKNOWN,
 
  SLAVE_CMD_ERR, // ÓÉ´Ó»úÅжϵĴíÎó״̬
  SLAVE_TABLE_ERR,
  SLAVE_ACCESS_ERR,
  SLAVE_DATA_LOSE_ERR,
  SLAVE_RECVDATA_CRC_ERR,
 
  MASTER_DATA_LOSE_ERR, // ÓÉÖ÷»úÅжϵĴíÎó״̬
  MASTER_RECVDATA_CRC_ERR,
  MASTER_TIMEOUT
} INTER_STATUS; // ½»»¥×´Ì¬
 
#pragma pack(1)
 
typedef union
{
    uint16_t slave_status_alarmbytes_union[2];
    struct
    {
        uint16_t slave_media_status : 1;
        uint16_t slave_work_state : 2;
        uint16_t slave_press_err : 1;
        uint16_t slave_temp_err : 1;
        uint16_t : 11;
        
        uint16_t : 8;
        uint16_t slave_input_water : 1;
        uint16_t slave_media_other : 1;
        uint16_t slave_dismantle : 1;
        uint16_t slave_pipe_err : 1;
        uint16_t slave_measure_err : 1;
        uint16_t : 3;
    }slave_status_alarmbytes_s;
}SLAVE_STATUS_ALARMBYTES_UNION_T;
 
 
typedef union
{
  uint8_t inter_recv_buf[INTER_RECV_LEN_MAX];
  struct slave_flow_data
  {
    uint8_t null_data[2]; // ÎÞЧÊý¾Ý
    SLAVE_STATUS_ALARMBYTES_UNION_T status_alarmbytes;
    float temperature;
    float pressure;
        float tof_up;
    float tof_down;
    float tof_diff;
    uint8_t signal_intensity_up;
    uint8_t signal_intensity_down;
    uint8_t signal_gain_up;
    uint8_t signal_gain_down;
        uint8_t snr_up; // ÐÅÔë±È_ÉÏͨµÀ
    uint8_t snr_down;
    uint16_t real_line_a; //ÕæÊµ´¥·¢Ïß
    uint16_t real_line_b;
    float sound_vel; //µ¥Î» m/s
    float flow_vel;
    uint8_t num_wc;
    float instant_wc[20];   //µ¥Î» m^3/s
  } slave_flow_data_s; // ´Ó»ú·µ»ØµÄÁ÷Á¿Ö¡Êý¾Ý
  struct salve_cal_data
  {
    uint8_t null_data[2]; // ÎÞЧÊý¾Ý
    double flow_data;
  } slave_cal_data_s;
} SLAVE_INTER_RECV_UNION_T;
 
// ÔÚSlave_FlowDataRecvº¯ÊýÖÐʹÓÃÖ¸ÕëÖ¸Ïò¸Ã½á¹¹Ì壬Èç¹û°Ñ¸Ã½á¹¹Ìå°´1×Ö½Ú¶ÔÆë£¬³ÌÐòÅÜ·É
//  typedef struct
//{
//   uint16_t status_byte;
//   uint16_t alarm_byte;
//   float temperature;
//   float pressure;
//   uint8_t num_wc;
//   float instant_wc[20];
// } SLAVE_FLOW_DATA_T;//´Ó»ú·µ»ØµÄÁ÷Á¿Ö¡Êý¾Ý
 
typedef struct
{
    /*ÕâÑùÅÅÐòÊÇΪÁË×Ö½Ú¶ÔÆë£¬buffÊý¾ÝÒª4µÄ±¶ÊýÅäºÏ__attribute__ ((aligned (4)))ʹÓÃ*/
  SLAVE_INTER_RECV_UNION_T inter_recv_union;
    uint16_t inter_recv_length;
  FlagStatus inter_recv_flag;
} INTER_RECV_PARA_T;
 
typedef INTER_STATUS (*pSlave_RecvFuncHandler)(uint8_t *pData, uint16_t data_len);
 
typedef struct
{
  const uint8_t data_table;
  pSlave_RecvFuncHandler RecvFuncHandler;
} SLAVE_RECV_TABLE_DRIVE_T; // ´Ó»ú½ÓÊÕ±íÇý¶¯
 
#pragma pack()
 
 
extern INTER_RECV_PARA_T inter_recv_para_g;
// extern SLAVE_FLOW_DATA_T slave_flow_data_g;
extern double temp_data_g;
extern double cal_display_exit_data_g;
 
void Measure_DMA_CH1_Reload(void);
ErrorStatus_STM32 Measure_Uart3_Rx_DMA_CH1_Check(uint8_t timeout_max);
 
void Slave_Status_AlarmBytesHandler(SLAVE_STATUS_ALARMBYTES_UNION_T state_alarmbytes);
float Slave_RawFlowDataSecondHandler(float Q2,SECOND_ORDER_CORR_T * real_corr_data_p);
 
INTER_STATUS Slave_Result_Handler(INTER_RW_STATUS data_state, INTER_RECV_PARA_T *inter_recv_para_p);
 
INTER_STATUS Slave_TempPressRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_FlowDataRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_CalFlowData_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_HardwareRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_PipeParaRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_UtParaRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_CorrSetReal_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_RawDataRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_MeasureRealTimeData_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_StateBytesRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_AlarmBytesRecv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_UtRealPara_1_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_UtRealPara_2_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_ResPara_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_Temp_TimeDiff_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_CalData_Recv(uint8_t *pData, uint16_t data_len);
INTER_STATUS Slave_CorrFixed_Recv(uint8_t *pData, uint16_t data_len);
#endif