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