#ifndef __AUXILIARY_H__
#define __AUXILIARY_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 DI_VALUE_ON 0xFF00
#define DI_VALUE_OFF 0x00
#define DI_VAL_TIME 2

typedef struct di_recode_info_s{
    BYTE surgeIn[DI_VAL_TIME];
    BYTE surgeSatation[DI_VAL_TIME];
    BYTE doorState[DI_VAL_TIME];
    BYTE cutoutLoad[DI_VAL_TIME];
    BYTE cutoutGrid[DI_VAL_TIME];
    BYTE cutoutTrans[DI_VAL_TIME];
    BYTE tiaoji[DI_VAL_TIME];
    BYTE tempSen[DI_VAL_TIME];
    BYTE gasSen[DI_VAL_TIME];
    BYTE emerStop[DI_VAL_TIME];
    BYTE fire[DI_VAL_TIME];
    BYTE waterImmersion[DI_VAL_TIME];
    BYTE smog[DI_VAL_TIME];
    BYTE pcserr[DI_VAL_TIME];
}DI_RECODE_INFO_T;

typedef struct auxiliary_s
{
    BYTE surgeIn;
    BYTE surgeSatation;
    BYTE doorState;
    BYTE cutoutLoad;
    BYTE cutoutGrid;
    BYTE cutoutTrans;
    BYTE tiaoji;
    BYTE tempSen;
    BYTE gasSen;
    BYTE emerStop;
    BYTE fire;
    BYTE waterImmersion;
    BYTE smog;
    BYTE pcserr;
    BYTE recodeindex;
    DI_RECODE_INFO_T *precodeinfo;
} AUXILIARY_T;

typedef struct tag_node_s
{
    CHAR name[DEV_NODE_NAME_LEN];
    CHAR tag[DEV_NODE_NAME_LEN];
    CHAR type;
} 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 devOut[SN_MAX_LEN];
    CHAR rmGwSn[SN_MAX_LEN];
    CHAR type[DEV_NODE_NAME_LEN];
    AUXILIARY_T auxiliaryInfo;
} 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 servicetodevcont;
    BYTE serviceupcont;
    BYTE servicedowncont;
    BYTE devcont;
} DEV_NODE_INFO_T;

typedef struct auxiliary_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;
    AUXILIARY_T auxiliaryInfo;
    AUXILIARY_T auxiliaryInfoall;
    CHAR desSn[SN_MAX_LEN];
    CHAR vir_sn_str[SN_MAX_LEN];
    CHAR sn_str[SN_MAX_LEN];
    E_RUN_MODE runMode;
    BYTE linkageflag;
    BYTE pcserr;
    MQTT_INFO_T mqttBroker;
    SERVICE_PACK_T servInfo;
    DEV_NODE_INFO_T devNodeInfo;
    DEV_NODE_INFO_T subdevNodeInfo;
} auxiliary_var_t;

#endif