#ifndef __CHARGE_STATION_H__
#define __CHARGE_STATION_H__
#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"

#define CHARGE_STATION_DEV_FILE "/app/config/ems/chstation.json"
#define CH_STATION_TOPIC_PREFIX "/hzaoneng/charging/station/"
#define CH_STATION_TOPIC_GET "/get"
#define CH_STATION_TOPIC_SET "/set"
#define CH_STATION_TOPIC_REPLY "/reply"

typedef struct charge_station_info_s
{
    USHORT expectpower;
    USHORT realpower;
    USHORT setpower;
} CHARGE_STATION_INFO_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];
    USHORT period;
    TAG_NODE_INFO tagNode;
} SERVICE_INFO_T;

typedef struct dev_node_cfg_s
{
    CHAR devSn[SN_MAX_LEN];
    CHAR type[DEV_NODE_NAME_LEN];
    CHARGE_STATION_INFO_T chargeStation;
} 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;
    SERVICE_INFO_T *pserviceInfoTodev;
    BYTE serviceupcont;
    BYTE servicedowncont;
    BYTE servicetodevcont;
    BYTE devcont;
    DWORD extsendcnt;
    DWORD extreceivecnt;
} DEV_NODE_INFO_T;

typedef struct chargestation_mng_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];
    WORD second_period_timer;
    E_RUN_MODE runMode;
    MQTT_INFO_T mqttBroker;
    SERVICE_PACK_T servInfo;
    DEV_NODE_INFO_T devNodeInfo;
} chargestation_mng_var_t;

#define SECOND_TIME 1000
#define EMS_TIMER_CONFIRM(timer)          \
    do                                \
    {                                 \
        if (my_timer_read(timer) < 0) \
            continue;                \
    } while (0)




static void charge_station_info_report(chargestation_mng_var_t *var, int i, int j);
#endif
