fsfw/src/fsfw/fdir/FaultCounter.cpp

80 lines
2.1 KiB
C++
Raw Normal View History

2021-07-13 20:22:54 +02:00
#include "fsfw/fdir/FaultCounter.h"
FaultCounter::FaultCounter(uint32_t failureThreshold, uint32_t decrementAfterMs,
2022-02-02 10:29:30 +01:00
uint8_t setParameterDomain)
: parameterDomain(setParameterDomain),
timer(),
faultCount(0),
failureThreshold(failureThreshold) {
timer.setTimeout(decrementAfterMs);
}
2022-02-02 10:29:30 +01:00
FaultCounter::~FaultCounter() {}
void FaultCounter::increment(uint32_t amount) {
2022-02-02 10:29:30 +01:00
if (faultCount == 0) {
timer.resetTimer();
}
faultCount += amount;
}
bool FaultCounter::checkForDecrement() {
2022-02-02 10:29:30 +01:00
if (timer.hasTimedOut()) {
timer.resetTimer();
if (faultCount > 0) {
faultCount--;
return true;
}
}
return false;
}
bool FaultCounter::incrementAndCheck(uint32_t amount) {
2022-02-02 10:29:30 +01:00
increment(amount);
return aboveThreshold();
}
bool FaultCounter::aboveThreshold() {
2022-02-02 10:29:30 +01:00
if (faultCount > failureThreshold) {
faultCount = 0;
return true;
} else {
return false;
}
}
2022-02-02 10:29:30 +01:00
void FaultCounter::clear() { faultCount = 0; }
void FaultCounter::setFailureThreshold(uint32_t failureThreshold) {
2022-02-02 10:29:30 +01:00
this->failureThreshold = failureThreshold;
}
2022-02-02 10:29:30 +01:00
void FaultCounter::setFaultDecrementTimeMs(uint32_t timeMs) { timer.setTimeout(timeMs); }
2022-02-02 10:29:30 +01:00
FaultCounter::FaultCounter() : parameterDomain(0), timer(), faultCount(0), failureThreshold(0) {}
ReturnValue_t FaultCounter::getParameter(uint8_t domainId, uint8_t uniqueId,
2022-02-02 10:29:30 +01:00
ParameterWrapper* parameterWrapper,
const ParameterWrapper* newValues, uint16_t startAtIndex) {
if (domainId != parameterDomain) {
return INVALID_DOMAIN_ID;
}
2022-06-05 12:52:55 +02:00
switch (static_cast<ParameterIds>(uniqueId)) {
case ParameterIds::FAILURE_THRESHOLD:
2022-02-02 10:29:30 +01:00
parameterWrapper->set(failureThreshold);
break;
2022-06-05 12:52:55 +02:00
case ParameterIds::FAULT_COUNT:
2022-02-02 10:29:30 +01:00
parameterWrapper->set(faultCount);
break;
2022-06-05 12:52:55 +02:00
case ParameterIds::TIMEOUT:
2023-03-03 14:30:35 +01:00
parameterWrapper->set(timer.getTimeoutMs());
2022-02-02 10:29:30 +01:00
break;
default:
return INVALID_IDENTIFIER_ID;
}
2022-08-16 01:08:26 +02:00
return returnvalue::OK;
}
2022-02-02 10:29:30 +01:00
void FaultCounter::setParameterDomain(uint8_t domain) { parameterDomain = domain; }