/********************************* (C) РОТЕК ***********************************
 * @module  ups_monitor
 * @file    ups_monitor.h
 * @version 1.0.0
 * @date    XX.XX.XXXX
 * $brief   ups_monitor
 *******************************************************************************
 * @history     Version  Author         Comment
 * XX.XX.XXXX   1.0.0    Telenkov D.A.  First release.
 *******************************************************************************
 */

/* Define to prevent recursive  ----------------------------------------------*/
#ifndef UPS_MONITOR_H
#define UPS_MONITOR_H
   
#include "common_config.h"

/**
  * @brief  Состояния для реализации алгоритма гистерезиса
  */
typedef enum
{
  HYST_IDLE = 0,
  HYST_UP,
  HYST_DOWN,
  
} HYST_STATE_t;

/**
  * @brief  Мониторинг бита Test in progress
  */
void UPS_TestFinishMonitor(void);

/**
  * @brief  Мониторинг бита DI0 state
  */
void UPS_DI0Monitor(void);

#ifdef TYPE_CRITICAL_ALARM_MONITOR
/**
  * @brief  Мониторинг бита NonCriticalAlarm
  */
void UPS_CriticalAlarmMonitor(void);
/**
  * @brief  Мониторинг бита NonCriticalAlarm
  */
void UPS_NonCriticalAlarmMonitor(void);
#endif
/**
  * @brief  Мониторинг LainFail бита 
  */
void UPS_LineFailMonitor(void);

#ifdef VAC_OUT_MONITOR
/**
  * @brief  Мониторинг аварии выходного напряжения по нижней границе
  */
void UPS_VACoutputLowRangeMonitor(void);

/**
  * @brief  Мониторинг аварии выходного напряжения по верхней границе
  */
void UPS_VACoutputHighRangeMonitor(void);
#endif

/**
  * @brief  Мониторинг бита LowBat 
  */
void UPS_LowBatMonitor(void);

/**
  * @brief  Задача мониторинга параметров UPS
  */
void UPS_Monitor(void *params);

/**
  * @brief  Мониторинг нагрузки 
  */
void UPS_PowerMonitor(void);

#ifdef SENSOR_TEMP_MONITOR
/**
  * @brief  Мониторинг аварии датчика температуры
  */
void sensorTemperatureMonitor(void);
#endif

#ifdef TEMP_AKB_MONITOR
/**
  * @brief  Мониторинг температуры по верхней границе
  */
void UPS_TemperatureHighRangeMonitor(void);

/**
  * @brief  Мониторинг температуры по нижней границе
  */
void UPS_TemperatureLowRangeMonitor(void);
#endif

#ifdef TEMP_CABINET_MONITOR
/**
  * @brief  Мониторинг температуры шкафа по верхней границе
  */
void Cabinet_TemperatureHighRangeMonitor(void);

/**
  * @brief  Мониторинг температуры шкафа по нижней границе
  */
void Cabinet_TemperatureLowRangeMonitor(void);
#endif

/**
  * @brief  Мониторинг параметра upsParams.connect
  */
void UPS_ConnectMonitor(void);

/**
  * @brief  Мониторинг параметра upsParams.connect
  */
void UPS_BatteryConnectMonitor(void);

#ifdef AKB_CHANGE_MONITOR
/**
  * @brief  Мониторинг параметра замены АКБ
  */
void AKB_Change_Monitor(void);
#endif

#ifdef UPS_FAILED_MONITOR
void UPS_Failed_Monitor(void);
#endif

#endif /* #ifndef UPS_MONITOR_H */

/********************************* (C) РОТЕК **********************************/
