#ifndef __MODBUS_PARAMS_H
#define __MODBUS_PARAMS_H

#include "mb.h"
#include "mbport.h"
#include "modbus.h"
//#include "settings_sys.h"

#include <stdbool.h>


#define MB_PARAM_MAX			16


//
typedef struct {

	uint16_t reg;
	uint16_t size;
	uint8_t *param;
	bool f_activity;	
	mb_delay_action_t (*set_handler)(void);
    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);

//
uint8_t mb_get_info(uint8_t *buf);

// Установка адреса. Запрос без параметров.
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_pwm_freq_1(void);

//
mb_delay_action_t mb_set_pwm_freq_2(void);

//
mb_delay_action_t mb_set_pwm_freq_3(void);

//
mb_delay_action_t mb_set_duty(void);

//
mb_delay_action_t mb_set_port(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_relay(void);

//
mb_delay_action_t mb_led(void);


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

//
void mb_check_dummy(void);

// ---------------------------------------------------------------------- //
// Каналы управления вентиляторами

//
void mb_check_pwm_freq_1(void);

//
void mb_check_pwm_freq_2(void);

//
void mb_check_pwm_freq_3(void);

//
void mb_check_tacho_speed_1(void);

//
void mb_check_tacho_speed_2(void);

//
void mb_check_tacho_speed_3(void);

//
void mb_check_noise_limit_1(void);

//
void mb_check_noise_limit_2(void);

//
void mb_check_noise_limit_3(void);

//
void mb_check_crash_val_1(void);

//
void mb_check_crash_val_2(void);

//
void mb_check_crash_val_3(void);

//
void mb_check_pulse_number_1(void);

//
void mb_check_pulse_number_2(void);

//
void mb_check_pulse_number_3(void);

//
void mb_check_duty_1(void);

//
void mb_check_duty_2(void);

//
void mb_check_duty_3(void);

// 
void mb_check_pwm_type_1(void);

// 
void mb_check_pwm_type_2(void);

// 
void mb_check_pwm_type_3(void);

// ---------------------------------------------------------------------- //
// Конфигурация подключений

//
void mb_check_output_cnt(void);

//
void mb_check_input_4(void);

//
void mb_check_input_5(void);

//
void mb_check_input_6(void);

// ---------------------------------------------------------------------- //
// Температура

//
void mb_check_temp_alg(void);

//
void mb_check_temp_low_limit(void);

//
void mb_check_temp_low_hyst(void);

// ---------------------------------------------------------------------- //
// Алгоритм управления вентиляторами

//
void mb_check_temp_limit(void);

//
void mb_check_alg_max_limit(void);

//
void mb_check_alg_max_hyst(void);

//
void mb_check_con_timeout(void);

//
void mb_check_max_limit_hyst(void);

// ---------------------------------------------------------------------- //
// PID регулятор

//
void mb_check_p_factor(void);

//
void mb_check_i_factor(void);

//
void mb_check_d_factor(void);

// ---------------------------------------------------------------------- //
// Дискретные входы

//
void mb_check_input_1(void);

//
void mb_check_input_2(void);

// ---------------------------------------------------------------------- //
// Реле

//
void mb_check_relay(void);

// ---------------------------------------------------------------------- //
// Время

void mb_check_time(void);

// ---------------------------------------------------------------------- //
// Системные переменные

//
void mb_check_model(void);

//
void mb_check_proddate(void);

//
void mb_check_serial(void);

//
void mb_check_fw_version(void);

//
void mb_check_state(void);

//
void mb_check_reley(void);


/*
extern bool psw_ok;
extern bool set_sys_settings_flag;
extern sys_settings_t temp_sys_settings;
extern uint16_t temp_modbus_port;
*/

#endif // __MODBUS_PARAMS_H