/**
 * @file      modbus_shmem_comm.h
 * @brief     description about xieneng car BMS
 * @details  e.g. xieneng CAR BMS
 * @author   xianpeng.zhao@lnxall.com
 * @date     2020.03.25
 * @version  A001
 * @par Copyright (c):
 *       LNXALL
 * @par History:
 *   version: draft\n
 */
#ifndef __modbus_shmem_COMMON_H
#define __modbus_shmem_COMMON_H

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


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

/******************MACRO********************/
#define NB_CONNECTION 5



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

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

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

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


typedef struct
{
    modbus_mapping_t *mb_mapping;
    unsigned short *data;
} reg_data_t;


typedef struct
{
    char sn_str[SN_MAX_LEN];
    int period_poll_timer;
    reg_data_t *reg_data;
    int port;
    int slave_addr;
    int shmem_addr;
    int reg_start;
    int reg_number;
    modbus_t *ctx;
} modbus_shmem_var_t;


/******************************************/
int modbus_shmem_init_modbus_tcp_slave(modbus_shmem_var_t *var);
int can_start_thread(modbus_shmem_var_t *var);
void *share_mem_init(char *file,int id,size_t length);
#endif /* __modbus_shmem_COMMON_H */
