#ifndef __LOAD_METER__
#define __LOAD_METER__
#include <syslog.h>
#include "ipc_session.h"
#include "mqtt_session.h"
#include "lnxall_list.h"
#include "dy_utils/dy_common.h"
#include "dy_utils/dy_ds.h"
#include "dy_utils/kv_array.h"
#include "dy_utils/dy_ipc.h"
#include "dy_utils/dy_can.h"
#include "dy_utils/modbus_utils.h"
#include "dy_utils/period_service.h"
#include "modbus/modbus.h"
#include "dy_utils/bitmap.h"

#include "my_public.h"
typedef struct load_meter_s{
    double p3;
    double p2;
    double p1;
    double av1;
    double av2;
    BYTE   number; //电压测量次数
    BYTE   flag;
}LOAD_METER_T;

typedef struct tag_node_s
{
    CHAR name[DEV_NODE_NAME_LEN];
    CHAR tag[DEV_NODE_NAME_LEN];
} TAG_NODE_T;

typedef struct tag_node_info_s
{
    BYTE nodecont;
    TAG_NODE_T *ptagNode;
} TAG_NODE_INFO;

typedef struct service_info_s{
    CHAR    identifier[IDENTIFIER_LEN];
    CHAR    inidentifier[IDENTIFIER_LEN];
    CHAR    name[DEV_NODE_NAME_LEN];
    TAG_NODE_INFO tagNode;
}SERVICE_INFO_T;

typedef struct dev_node_cfg_s{
    CHAR devSn[SN_MAX_LEN];
    CHAR devGwSn[SN_MAX_LEN];
    CHAR rmGwSn[SN_MAX_LEN];
    CHAR type[DEV_NODE_NAME_LEN];
    CHAR avcheck;
    LOAD_METER_T loadMeter;
}DEV_NODE_CFG_T;

typedef struct service_pack_s{
    WORD mi;
    WORD timestamp;
    CHAR devSn[SN_MAX_LEN];
    CHAR identifier[IDENTIFIER_LEN];
}SERVICE_PACK_T;

typedef struct dev_node_info_s{
    DEV_NODE_CFG_T *pdevnodecfg;
    SERVICE_INFO_T *pserviceInfoUP;
    SERVICE_INFO_T *pserviceInfoDOWN;
    BYTE serviceupcont;
    BYTE servicedowncont;
    BYTE devcont;
}DEV_NODE_INFO_T;

typedef enum load_mode_e{
    E_LOAD_ALONE,
    E_LOAD_GRID
}E_LOAD_MODE;

typedef struct load_meter_var_s
{
    ipc_session_t *session;  
    ipc_session_t *insession;
    nodes_cfg_table_t *nodes_cfg_table; //节点信息
    template_table_t *template_table;   //模板信息
    object_table_t  *object_table;
    E_LOAD_MODE loadMode;
    E_RUN_MODE runMode;
    MQTT_INFO_T mqttBroker;
    BYTE Distribution;
    BYTE ContNum;//电压异常有效次数
    CHAR desSn[SN_MAX_LEN];
    CHAR  vir_sn_str[SN_MAX_LEN];          
    CHAR  sn_str[SN_MAX_LEN];
    SERVICE_PACK_T servInfo;
    DEV_NODE_INFO_T devNodeInfo;
}load_meter_var_t;
#endif