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