#ifndef __MODBUS_PARAMS_H
#define __MODBUS_PARAMS_H

#include "mb.h"
#include "mbport.h"
#include "modbus.h"
#include <stdbool.h>


#ifdef __cplusplus
extern "C" {
#endif

#if defined (MDIO_88)  
#define  MB_PARAM_MAX			96
#endif

#if defined (MAI_12)  
#define MB_PARAM_MAX			172
#endif

#if defined (MAO_4)
#define MB_PARAM_MAX			87
#endif


//
typedef struct {

	uint16_t reg;
	uint16_t size;
	uint8_t *param;
	bool f_activity;	
	mb_delay_action_t (*set)(void);
    void (*get)(uint8_t* buf, uint8_t size);
    void (*check_handler)(void);

} mb_param_t;


//
void mb_init_params(void);

// Возвращает размер параметра в регистрах
bool mb_find_param(uint16_t reg, uint16_t *index, uint16_t *size);

//
mb_delay_action_t mb_set_param(uint8_t *buf, uint16_t index);

//
void mb_get_param(uint8_t *buf, uint16_t index);


// Установка адреса. Запрос без параметров.
bool mb_set_addr(uint8_t *buf, uint8_t *addr);

// Установка адреса по ID
bool mb_set_addr_id(uint8_t *buf, uint8_t *addr);

// Установка адреса по серийному номеру
bool mb_set_addr_serial(uint8_t *buf, uint8_t *addr);


// -------------------------------------------------------------------------- //
//                          Установка параметров
// -------------------------------------------------------------------------- //

//
mb_delay_action_t mb_set_time(void);

//
mb_delay_action_t mb_password(void);

//
mb_delay_action_t mb_sys_settings_save(void);

//
mb_delay_action_t mb_control(void);

//
mb_delay_action_t mb_set_rtc(void);

// -------------------------------------------------------------------------- //
//                      Проверка параметров                                   //
// -------------------------------------------------------------------------- //

//
void mb_check_dummy(void);

//
void mb_check_archiv_per(void);



extern uint16_t save_sys_cmd;  // Команда сохранения системных настроек

#ifdef __cplusplus
}
#endif

#endif // __MODBUS_PARAMS_H