#ifndef __ESS_BMS__
#define __ESS_BMS__
#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 ess_bms_s{
    USHORT soc;
    BYTE alarm;
    BYTE chawarn;
    BYTE dischwarn;
    BYTE mastSwitch;
}ESS_BMS_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 type[DEV_NODE_NAME_LEN];
    ESS_BMS_T   essBms;
}DEV_NODE_CFG_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 service_pack_s{
    WORD mi;
    WORD timestamp;
    CHAR devSn[SN_MAX_LEN];
    CHAR identifier[IDENTIFIER_LEN];
}SERVICE_PACK_T;


typedef struct ess_bms_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;
    CHAR  desSn[SN_MAX_LEN];
    CHAR  vir_sn_str[SN_MAX_LEN];          
    CHAR  sn_str[SN_MAX_LEN];
    E_RUN_MODE  runMode;
    MQTT_INFO_T mqttBroker;
    SERVICE_PACK_T servInfo;
    DEV_NODE_INFO_T devNodeInfo;
    BYTE socAverage;
}ess_bms_var_t;

#endif