#ifndef __GRID_METER__
#define __GRID_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 grid_meter_s{
    double p1;
    double v1;
}GRID_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 rmGwSn[SN_MAX_LEN];
    CHAR type[DEV_NODE_NAME_LEN];
    GRID_METER_T gridMeter;
}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 struct grid_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_RUN_MODE runMode;
    MQTT_INFO_T mqttBroker;
    BYTE Distribution;
    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;
}grid_meter_var_t;
#endif