/** 
**************************************************************************
* @file   modbus_data.h
* @brief    Заголовочный файл с описанием даты MODBUS.
* @details  Данный файл необходимо подключается в rs_message.h. После rs_message.h 
* подключается к основному проекту.
* 
* @defgroup MODBUS_DATA
* @ingroup  MODBUS
* @brief    Modbus data description
*
*************************************************************************/

#ifndef _MODBUS_DATA_H_
#define _MODBUS_DATA_H_

#include "stdint.h"
#include "ds18b20_driver.h"
//--------------DEFINES FOR REGISTERS---------------
// DEFINES FOR ARRAYS
/** 
  * @addtogroup MODBUS_DATA_RERISTERS_DEFINES
  * @ingroup    MODBUS_DATA
  * @brief      Defines for registers
  Структура дефайна адресов
  @verbatim    
  Для массивов регистров:
    R_<NAME_ARRAY>_ADDR   -  модбас адресс первого регистра в массиве
    R_<NAME_ARRAY>_QNT    -  количество регистров в массиве
  
  @endverbatim
  * @{
  */

//typedef struct
//{
//  uint16_t ROM[4];
//  uint16_t Location;
//  uint16_t Resolution;
//  uint16_t Losted;
//}MB_SensorResponseTypeDef;

typedef struct
{
  uint16_t Location;
  uint16_t ROM[4];
  uint16_t Resolution;
  uint16_t Enable;
}MB_SensorParamsTypeDef;
/** 
  * @brief Регистры хранения
  */
typedef struct //MB_DataInRegsTypeDef
{
  uint16_t                  SensTemperature[DS18B20_DEVICE_AMOUNT];
  MB_SensorParamsTypeDef    Response;
}MB_DataInRegsTypeDef;


/** 
  * @brief Входные регистры 
  */
typedef struct //MB_DataInRegsTypeDef
{
  MB_SensorParamsTypeDef InitStruct;
}MB_DataHoldRegsTypeDef;


// DEFINES FOR INPUT REGISTERS ARRAYS
#define   R_TEMPERATURE_ADDR                (0)
#define   R_TEMPERATURE_QNT                 (DS18B20_DEVICE_AMOUNT)
#define   R_SENS_PARAMS_ADDR                (DS18B20_DEVICE_AMOUNT+1)
#define   R_SENS_PARAMS_QNT                 (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t))

// DEFINES FOR HOLDING REGISTERS ARRAYS
#define   R_SENS_INIT_ADDR                  (0)
#define   R_SENS_INIT_QNT                   (sizeof(MB_SensorParamsTypeDef)/sizeof(uint16_t))


// DEFINES FOR REGISTERS LOCAL ADDRESSES
//#define R_SET_ERROR(_te_num_)          0

 
/** MODBUS_DATA_RERISTERS_DEFINES
  * @} 
  */

//----------------DEFINES FOR COILS-----------------
/** 
  * @addtogroup MODBUS_DATA_COILS_DEFINES
  * @ingroup    MODBUS_DATA
  * @brief      Defines for coils
  @verbatim    
  Структура дефайна
  Для массивов коилов:
    C_<NAME_ARRAY>_ADDR   - модбас адресс первого коила в массиве
    C_<NAME_ARRAY>_QNT    - количество коилов в массиве (минимум 16)

  @endverbatim
  * @{
  */
  
  
  
/** 
  * @brief     Коилы
  */
typedef struct //MB_DataCoilsTypeDef
{
  /* reg 1 - control */
  unsigned RunConvertions:1;
  unsigned InitSensor:1;
  unsigned DenitSensor:1;
  
  unsigned reserved:13;
  
  /* reg 2 - settings */
  unsigned ConvertionDone:1;
  unsigned LostedSensors:1;
}MB_DataCoilsTypeDef;

// DEFINES FOR COIL ARRAYS
#define C_CONTROL_ADDR                0
#define C_CONTROL_QNT                 3

#define C_FLAGS_ADDR                  16
#define C_FLAGS_QNT                   5

/** MODBUS_DATA_COILS_DEFINES
  * @} 
  */
  
  
//-----------MODBUS DEVICE DATA SETTING-------------
// MODBUS DATA STRUCTTURE
/** 
  * @brief Структура со всеми регистрами и коилами модбас 
  * @ingroup  MODBUS_DATA
  */
typedef struct // tester modbus data
{
  MB_DataInRegsTypeDef      InRegs;     ///< Modbus input registers @ref MB_DataInRegsTypeDef

  MB_DataCoilsTypeDef       Coils;      ///< Modbus coils @ref MB_DataCoilsTypeDef
  
  MB_DataHoldRegsTypeDef    HoldRegs;   ///< Modbus holding registers @ref MB_DataHoldRegsTypeDef
}MB_DataStructureTypeDef;
extern MB_DataStructureTypeDef MB_DATA;


typedef struct
{
  unsigned  length;
  char      *name;
}MB_DeviceObjectTypeDef;
typedef struct
{
  MB_DeviceObjectTypeDef VendorName;
  MB_DeviceObjectTypeDef ProductCode;
  MB_DeviceObjectTypeDef Revision;
  MB_DeviceObjectTypeDef VendorUrl;
  MB_DeviceObjectTypeDef ProductName;
  MB_DeviceObjectTypeDef ModelName;
  MB_DeviceObjectTypeDef UserApplicationName;
}MB_DeviceIdentificationTypeDef;
void MB_DevoceInentificationInit(void);


#endif //_MODBUS_DATA_H_

/////////////////////////////////////////////////////////////
///////////////////////TEMP/OUTDATE/OTHER////////////////////