MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/schematic/AlarmTimerLogic.hh
2024-06-07 11:12:56 +03:00

71 lines
2.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* AlarmTimer.hh
*
* Created on: 26 мая 2021 г.
* Author: sozonov
*/
#ifndef UMLIBRARY_SCHEMATIC_ALARMTIMERLOGIC_HH_
#define UMLIBRARY_SCHEMATIC_ALARMTIMER_HH_
#include "../systemic/Timer.hh"
//! Класс таймера с тайм-аутом.
class AlarmTimerLogic {
protected:
//Настройки
const time_t time_out; //!<Тайм-аут в секундах. При достижении, заданного тайм-аута вызывается функция alarm и таймер останавливается.
time_t time_start; //!<Время старта таймера (необходимо для расчета промежутка времени, который таймер работал).
time_t current_time; //!<Текущее значение таймера в секундах.
bool otf_alarm; //!<Флаг того, что достигнут тайм-аут.
bool otf_pause; //!<Флаг паузы. 1-пауза/0-нет.
bool current_state; //!<Статус, запущен/остановлен.
public:
const bool & state() { return current_state; }
AlarmTimerLogic(float _ti_out):time_out(systemic::seconds2time(_ti_out)),current_state(false), current_time(systemic::seconds2time(0.0)),
otf_alarm(false), otf_pause(false){}
//!Метод запуска таймера.
void start();
//!Метод остановки таймера.
void stop();
//!Метод сброса таймера.
void reset();
//!Фоновая функция счёта.
void process();
//!Получение значения текущего времени.
float getCurrentTime() const {return systemic::time2seconds(current_time);}
//!Метод достижения значение тайм-аута.
virtual void alarm(){}
};
#include "../systemic/IFunctor.hh"
#include "../systemic/IProcess.hh"
namespace schematic {
class AlarmTimerCallback : public AlarmTimerLogic, public systemic::IProcess {
systemic::IFunctor<void> & alarmCalback; //! колбэк о пересечении счётчиком границы
virtual void alarm() {
alarmCalback();
}
public:
void process() override {
AlarmTimerLogic::process();
}
AlarmTimerCallback(systemic::IFunctor<void> & _alarm, float _ti_out):alarmCalback(_alarm), AlarmTimerLogic(_ti_out){}
};
}
#endif /* UMLIBRARY_SCHEMATIC_ALARMTIMERLOGIC_HH_ */