/** 
* @file      rs485_comm.h 
* @brief     description about rs485
* @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 __RS485_COMMON_H
#define __RS485_COMMON_H

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

#include "uart.h"
/******************************************/

/*************ENUM*************************/
typedef enum
{
    MASTER = 0, // 主机模式
    SLAVE,      // 从机模式
    SNIFFER,    // 观察者模式
} ble_mode_t;
/******************************************/

/******************MACRO********************/
#define DEFAULT_BAUD_RATE 115200
#define DEFAULT_TTY_DEV "/dev/ttyUSB0"
#define DEFAULT_SCAN_INTV 100
#define DEFAULT_SCAN_WIND 80
#define BLE_NODE_STATUS_BAK_FILE "/app/ble_status.bak"
#define BLE_CFG "/app/config/e104bt52.json"
#define BLE_DATA_BUF_SIZE (16 * 1024)
/******************************************/

/*******************STRUCTURE**************/
typedef struct _ble_cfg_s
{
    int tty_fd;
    char dev[32];
    int baudrate;
    ble_mode_t mode;
    int scan_intv;
    int scan_wind;
} ble_cfg_t;

typedef struct _ble_var_t
{
    mqtt_session_t *session; //内部broker的MQTT client，用于进程间通信
    ble_cfg_t ble_cfg;
    nodes_cfg_table_t *nodes_cfg_table; //节点信息
    template_table_t *template_table;   //模板信息
    const char *board_name;
    char sn_str[SN_MAX_LEN];
    dev_status_table_t *ds; //下挂节点的状态信息
    time_t nodes_status_sync_date;
    int node_status_timer;
    int period_poll_timer;
    period_service_t *period;
    kv_array_t identifier_backup;
} ble_var_t;
/******************************************/

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

int ble_send_data(int fd, char *buf, int len);
void *recv_loop(void *param);
int ble_get_cur_role(int fd);
/******************************************/

#endif /* __RS485_COMMON_H */
