MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/schematic/AlarmTimerLogic.hh

71 lines
2.5 KiB
C++
Raw Normal View History

2024-06-07 11:12:56 +03:00
/*
* 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_ */