fsfw/src/fsfw/timemanager/Countdown.cpp

42 lines
1.1 KiB
C++
Raw Normal View History

2021-07-13 20:22:54 +02:00
#include "fsfw/timemanager/Countdown.h"
2022-03-08 11:52:33 +01:00
Countdown::Countdown(uint32_t initialTimeout) : timeout(initialTimeout) {
setTimeout(initialTimeout);
}
2022-02-02 10:29:30 +01:00
Countdown::~Countdown() {}
2021-09-27 19:57:42 +02:00
ReturnValue_t Countdown::setTimeout(uint32_t milliseconds) {
2023-01-26 11:33:40 +01:00
startTime = Clock::getUptime_ms();
2022-02-02 10:29:30 +01:00
timeout = milliseconds;
2023-01-26 11:33:40 +01:00
return returnvalue::OK;
}
bool Countdown::hasTimedOut() const {
2022-02-02 10:29:30 +01:00
if (uint32_t(this->getCurrentTime() - startTime) >= timeout) {
return true;
} else {
return false;
}
}
2022-02-02 10:29:30 +01:00
bool Countdown::isBusy() const { return !hasTimedOut(); }
2022-02-02 10:29:30 +01:00
ReturnValue_t Countdown::resetTimer() { return setTimeout(timeout); }
2022-02-02 10:29:30 +01:00
void Countdown::timeOut() { startTime = this->getCurrentTime() - timeout; }
2021-09-27 19:57:42 +02:00
uint32_t Countdown::getRemainingMillis() const {
2022-02-02 10:29:30 +01:00
// We fetch the time before the if-statement
// to be sure that the return is in
// range 0 <= number <= timeout
uint32_t currentTime = this->getCurrentTime();
if (this->hasTimedOut()) {
return 0;
} else {
return (startTime + timeout) - currentTime;
}
2021-09-27 19:57:42 +02:00
}
2023-01-26 13:40:44 +01:00
uint32_t Countdown::getCurrentTime() const { return Clock::getUptime_ms(); }