fsfw/src/fsfw/cfdp/handler/FaultHandlerBase.cpp

52 lines
1.6 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;
2022-09-15 18:41:15 +02:00
bool FaultHandlerBase::getFaultHandler(cfdp::ConditionCode code,
cfdp::FaultHandlerCode& 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-09-15 18:41:15 +02:00
bool FaultHandlerBase::setFaultHandler(cfdp::ConditionCode code, cfdp::FaultHandlerCode handler) {
2022-08-09 14:39:03 +02:00
if (not faultHandlerMap.contains(code)) {
return false;
}
2022-09-15 18:41:15 +02:00
if (handler != FaultHandlerCode::NOTICE_OF_SUSPENSION and
handler != FaultHandlerCode::ABANDON_TRANSACTION and
handler != FaultHandlerCode::NOTICE_OF_CANCELLATION and
handler != FaultHandlerCode::IGNORE_ERROR) {
2022-08-09 15:29:22 +02:00
return false;
}
2022-08-09 14:39:03 +02:00
faultHandlerMap[code] = handler;
return true;
}
2022-09-15 18:41:15 +02:00
bool FaultHandlerBase::reportFault(cfdp::TransactionId& id, cfdp::ConditionCode code) {
2022-08-09 14:39:03 +02:00
if (not faultHandlerMap.contains(code)) {
return false;
}
2022-09-15 18:41:15 +02:00
cfdp::FaultHandlerCode fh = faultHandlerMap[code];
if (fh == cfdp::FaultHandlerCode::IGNORE_ERROR) {
ignoreCb(id, code);
2022-09-15 18:41:15 +02:00
} else if (fh == cfdp::FaultHandlerCode::ABANDON_TRANSACTION) {
abandonCb(id, code);
2022-09-15 18:41:15 +02:00
} else if (fh == cfdp::FaultHandlerCode::NOTICE_OF_CANCELLATION) {
noticeOfCancellationCb(id, code);
2022-09-15 18:41:15 +02:00
} else if (fh == cfdp::FaultHandlerCode::NOTICE_OF_SUSPENSION) {
noticeOfSuspensionCb(id, code);
2022-08-09 15:29:22 +02:00
} else {
// Should never happen, but use defensive programming
return false;
2022-08-09 14:39:03 +02:00
}
return true;
}
2022-08-09 14:55:08 +02:00
} // namespace cfdp