
#ifndef __ipdev_manager_COMMON_H
#define __ipdev_manager_COMMON_H

/***************HEADER FILES****************/
#include <string.h>
#include <syslog.h>
#include "ipc_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 "modbus/modbus.h"
#include "dy_utils/period_service.h"
/******************************************/

#define IPDEV_MANAGER_NODE_STATUS_BAK_FILE "/app/ipdev_manager_status.bak"
/******************************************/

/*************ENUM*************************/
typedef enum
{
    ipdev_manager_DATA_TYPE_CMD,        //实时命令
    ipdev_manager_DATA_TYPE_PERIOD_CMD, //周期命令
    ipdev_manager_DATA_TYPE_CMD_CNT,
} ipdev_manager_data_type_e;
/******************************************/

/*******************STRUCTURE**************/

typedef struct _device_config_s 
{
	char sn[SN_MAX_LEN];
	char topic[TOPIC_MAX_LEN];
	char *payload;
	int server_period;
} device_config_t;

typedef struct _ip_device_config_s 
{
	struct list_head list;
	device_config_t dev_cfg;
	time_t last_push;
} ip_device_config_t;

typedef struct _ipdev_manager_var_t
{
    ipc_session_t *session;            //内部broker的MQTT client，用于进程间通信
    nodes_cfg_table_t *nodes_cfg_table; //节点信息
    template_table_t *template_table;   //模板信息
    struct list_head config_list;
    char sn_str[SN_MAX_LEN];
    char proc_name[PROGRAM_NAME_LEN];
    int period_poll_timer;
    bool upgrading;
} ipdev_manager_var_t;

/******************************************/

/******************FUNCTION****************/

#endif /* __ipdev_manager_COMMON_H */
