You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
1.7 KiB
C++

/*
* WarningDecrease.cpp
*
* Author: Aleksey Gerasimenko
* gerasimenko.aleksey.n@gmail.com
*/
#include "Alert/WarningDecrease.h"
namespace ALERT
{
//CONSTRUCTOR
WarningDecrease::WarningDecrease():
ALERT::AlertBase(),
m_warning(false),
warning(false),
_execute(&ALERT::WarningDecrease::_execute_undef)
{}//CONSTRUCTOR
//
void WarningDecrease::setup(float time_sample)
{
m_time_sample = time_sample;
//
}//setup()
//
void WarningDecrease::configure(const AlertBaseConfiguration& config)
{
m_level = config.level;
m_period = config.period;
//
m_warning = false;
//
if((m_time_sample > FP_ZERO) && (m_period >= m_time_sample) && (m_level > FP_ZERO))
{
_execute = &ALERT::WarningDecrease::_execute_operational;
//
}//if
//
}//configure()
//
#pragma CODE_SECTION("ramfuncs");
void WarningDecrease::reset()
{
m_warning = false;
warning = false;
m_timer = FP_ZERO;
//
}//reset()
//
void WarningDecrease::execute(float reference)
{
(this->*_execute)(reference);
//
}//execute()
//
void WarningDecrease::_execute_undef(float reference)
{}//
//
#pragma CODE_SECTION("ramfuncs");
void WarningDecrease::_execute_operational(float reference)
{
//
if(reference <= m_level)
{
if(m_timer >= m_period)
{
m_warning = true;
warning = true;
}
else
{
m_timer += m_time_sample;
m_warning = false;
warning = false;
//
}//if else
}
else
{
m_warning = false;
warning = false;
m_timer = FP_ZERO;
//
}//else if
//
}//_execute_operational()
//
} /* namespace ALERT */