fsfw/src/fsfw/cfdp/FaultHandlerBase.cpp

43 lines
1.2 KiB
C++
Raw Normal View History

2022-08-09 14:05:43 +02:00
#include "FaultHandlerBase.h"
2022-08-09 14:55:08 +02:00
namespace cfdp {
2022-08-09 14:39:03 +02:00
2022-08-09 14:55:08 +02:00
FaultHandlerBase::FaultHandlerBase() = default;
FaultHandlerBase::~FaultHandlerBase() = default;
bool FaultHandlerBase::getFaultHandler(cfdp::ConditionCode code,
cfdp::FaultHandlerCodes& handler) const {
2022-08-09 14:39:03 +02:00
auto iter = faultHandlerMap.find(code);
2022-08-09 14:55:08 +02:00
if (iter == faultHandlerMap.end()) {
2022-08-09 14:39:03 +02:00
return false;
}
handler = iter->second;
return true;
}
2022-08-09 14:55:08 +02:00
bool FaultHandlerBase::setFaultHandler(cfdp::ConditionCode code, cfdp::FaultHandlerCodes handler) {
2022-08-09 14:39:03 +02:00
if (not faultHandlerMap.contains(code)) {
return false;
}
faultHandlerMap[code] = handler;
return true;
}
2022-08-09 15:09:43 +02:00
bool FaultHandlerBase::reportFault(cfdp::ConditionCode code) {
2022-08-09 14:39:03 +02:00
if (not faultHandlerMap.contains(code)) {
return false;
}
cfdp::FaultHandlerCodes fh = faultHandlerMap[code];
if (fh == cfdp::FaultHandlerCodes::IGNORE_ERROR) {
ignoreCb(code);
2022-08-09 14:55:08 +02:00
} else if (fh == cfdp::FaultHandlerCodes::ABANDON_TRANSACTION) {
2022-08-09 14:39:03 +02:00
abandonCb(code);
2022-08-09 14:55:08 +02:00
} else if (fh == cfdp::FaultHandlerCodes::NOTICE_OF_CANCELLATION) {
2022-08-09 14:39:03 +02:00
noticeOfCancellationCb(code);
} else {
noticeOfSuspensionCb(code);
}
return true;
}
2022-08-09 14:55:08 +02:00
} // namespace cfdp