71 lines
2.5 KiB
C++
71 lines
2.5 KiB
C++
/*
|
||
* 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_ */
|