#ifndef _PROTO_MODBUS_MASTER_LEAKAGE_H_
#define _PROTO_MODBUS_MASTER_LEAKAGE_H_
#include "main.h"
#include "app_com.h"

#define COMM_SENSOR_NUM_MAX      (32)                        /*最大的通讯数量*/


/*通讯状态*/
#define PROTO_LEAKAGE_COMM_STATE_INIT                   (0U)    /*初始化      */
#define PROTO_LEAKAGE_COMM_STATE_CURR_DATA_GET          (1U)    /*获取实时数据*/

#define PROTO_LEAKAGE_COMM_STATE_DEFAULT                PROTO_LEAKAGE_COMM_STATE_CURR_DATA_GET

#define PROTO_LEAKAGE_STATE_CODE_TIME_OUT              (0x8000)   /*通讯超时*/

typedef struct
{
    struct  /*通讯相关参数*/
    {
        u8 id;                                             /*modbus通讯id*/
        u8 state;                                          /*传感器当前的通讯状态*/
        u8 leakage_data_index;                             /*漏液子控索引*/
        u16 state_send_time;                               /*当前通讯状态发送次数*/
        u16 tx_time_out_count;                             /*协议指令发送次数*/
        u32 sensor_state_code;                             /*传感器状态码，为对应位为1代表异常*/
    }comm;    

}proto_sensor_class_t;

typedef struct proto_leakage_t proto_leakage_t; 

struct proto_leakage_t
{
    u16 sensor_index;                                       /*当前与哪个传感器通讯*/
    u16 sensor_num;                                         /*总共通讯的传感器数量*/
    
    proto_sensor_class_t sensor[APP_LEAKAGE_SUB_DEVICE_NUM];                /*传感器状态*/

    void (*init)(proto_leakage_t *);
    void (*tx_task)(proto_leakage_t *);
    void (*uart_send)(u8 *,u16);
};

extern proto_leakage_t modbus_leakage[APP_COM_NUM];

#endif
