/**
 * @file      entrance_guard_comm.h
 * @brief     description about entrance_guard
 * @details  e.g. 485 port config, period polling
 * @author   wangleilei@zjdyiot.com
 * @date     2019.06.20
 * @version  A001
 * @par Copyright (c):
 *       DYIOT
 * @par History:
 *   version: draft\n
 */
#ifndef __ENTRANCE_GUARD_COMMON_H
#define __ENTRANCE_GUARD_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"
/******************************************/

/******************MACRO********************/
#define ENTRANCE_GUARD_APP_KEY "rO1TAj7Z0CQEi9Ws"
#define ENTRANCE_GUARD_COUNT_ID "/app/entrance_guard_count_id.sh"
#define ENTRANCE_GUARD_INQUIRE_ID "/app/entrance_guard_inquire_id.sh"
/******************************************/

/*************ENUM*************************/
/******************************************/

/*******************STRUCTURE**************/
typedef struct open_door_node_s
{
    struct list_head list;
    long ID;
    char TokenId[32];
    char TcmId[64];
    char StaffId[64];
    char StaffNo[32];
    char StaffName[128];
    long long DevNo;
    long long DoorNo;
    char DevName[64];
    char OpenDate[64];
    char OperateDate[64];
} open_door_node_t;

typedef struct entrance_guard_var_s
{
    ipc_session_t *session;       //内部broker的MQTT client，用于进程间通信
    nodes_cfg_table_t *nodes_cfg_table; //节点信息
    template_table_t *template_table;   //模板信息
    object_table_t *object_table;       //物模型信息
    char sn_str[SN_MAX_LEN];
    char proc_name[PROGRAM_NAME_LEN];
    pthread_mutex_t open_door_lock;
    pthread_cond_t open_door_cond;
    struct list_head open_door_list;
    int received;
    long last_id;
    int inquire_timer;
    int poll_timer;
} entrance_guard_var_t;
/******************************************/

/******************FUNCTION****************/
int get_new_entrance_guard_data_count(entrance_guard_var_t *var);
int entrance_guard_start_thread(entrance_guard_var_t *var);
/******************************************/

#endif /* __ENTRANCE_GUARD_COMMON_H */
