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_ */
|