#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