Robin Mueller
e06c457743
- Architecturally, this makes a lot more sense because each ComIF should be responsible for one SPI bus
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#include "fsfw/timemanager/Countdown.h"
|
|
|
|
Countdown::Countdown(uint32_t initialTimeout, bool startImmediately) : timeout(initialTimeout) {
|
|
if (startImmediately) {
|
|
setTimeout(initialTimeout);
|
|
} else {
|
|
timeout = initialTimeout;
|
|
}
|
|
}
|
|
|
|
Countdown::~Countdown() {}
|
|
|
|
ReturnValue_t Countdown::setTimeout(uint32_t milliseconds) {
|
|
ReturnValue_t returnValue = Clock::getUptime(&startTime);
|
|
timeout = milliseconds;
|
|
return returnValue;
|
|
}
|
|
|
|
bool Countdown::hasTimedOut() const {
|
|
if (uint32_t(this->getCurrentTime() - startTime) >= timeout) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool Countdown::isBusy() const { return !hasTimedOut(); }
|
|
|
|
ReturnValue_t Countdown::resetTimer() { return setTimeout(timeout); }
|
|
|
|
void Countdown::timeOut() { startTime = this->getCurrentTime() - timeout; }
|
|
|
|
uint32_t Countdown::getRemainingMillis() const {
|
|
// 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;
|
|
}
|
|
}
|
|
|
|
uint32_t Countdown::getCurrentTime() const {
|
|
uint32_t currentTime;
|
|
Clock::getUptime(¤tTime);
|
|
return currentTime;
|
|
}
|