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

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