diff --git a/mission/cfdp/CMakeLists.txt b/mission/cfdp/CMakeLists.txt index 71d62ce8..418b66eb 100644 --- a/mission/cfdp/CMakeLists.txt +++ b/mission/cfdp/CMakeLists.txt @@ -1 +1 @@ -target_sources(${LIB_EIVE_MISSION} PRIVATE CfdpHandler.cpp) +target_sources(${LIB_EIVE_MISSION} PRIVATE CfdpHandler.cpp CfdpUser.cpp) diff --git a/mission/cfdp/CfdpFaultHandler.h b/mission/cfdp/CfdpFaultHandler.h new file mode 100644 index 00000000..565606c6 --- /dev/null +++ b/mission/cfdp/CfdpFaultHandler.h @@ -0,0 +1,31 @@ +#ifndef MISSION_CFDP_CFDPFAULTHANDLER_H_ +#define MISSION_CFDP_CFDPFAULTHANDLER_H_ + +#include "fsfw/cfdp.h" + +namespace cfdp { + +class EiveFaultHandler : public cfdp::FaultHandlerBase { + public: + void noticeOfSuspensionCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { + sif::warning << "Notice of suspension detected for transaction " << id + << " with condition code: " << cfdp::getConditionCodeString(code) << std::endl; + } + void noticeOfCancellationCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { + sif::warning << "Notice of suspension detected for transaction " << id + << " with condition code: " << cfdp::getConditionCodeString(code) << std::endl; + } + void abandonCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { + sif::warning << "Transaction " << id + << " was abandoned, condition code : " << cfdp::getConditionCodeString(code) + << std::endl; + } + void ignoreCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { + sif::warning << "Fault ignored for transaction " << id + << ", condition code: " << cfdp::getConditionCodeString(code) << std::endl; + } +}; + +} // namespace cfdp + +#endif /* MISSION_CFDP_CFDPFAULTHANDLER_H_ */ diff --git a/mission/cfdp/CfdpUser.cpp b/mission/cfdp/CfdpUser.cpp new file mode 100644 index 00000000..65c1f456 --- /dev/null +++ b/mission/cfdp/CfdpUser.cpp @@ -0,0 +1,42 @@ +#include "CfdpUser.h" + +#include + +namespace cfdp { + +EiveUserHandler::EiveUserHandler(HasFileSystemIF& vfs, MessageQueueId_t cfdpRequestId) + : cfdp::UserBase(vfs) { + userQueue = QueueFactory::instance()->createMessageQueue(10); + userQueue->setDefaultDestination(cfdpRequestId); +} + +EiveUserHandler::~EiveUserHandler() { + QueueFactory::instance()->deleteMessageQueue(userQueue); +} + +void EiveUserHandler::transactionIndication(const cfdp::TransactionId& id) {} +void EiveUserHandler::eofSentIndication(const cfdp::TransactionId& id) {} +void EiveUserHandler::transactionFinishedIndication( + const cfdp::TransactionFinishedParams& params) { + sif::info << "File transaction finished for transaction with " << params.id << std::endl; +} +void EiveUserHandler::metadataRecvdIndication(const cfdp::MetadataRecvdParams& params) { + // TODO: Parse user messages and convert them into put requests where applicable. + sif::info << "Metadata received for transaction with " << params.id << std::endl; +} +void EiveUserHandler::fileSegmentRecvdIndication( + const cfdp::FileSegmentRecvdParams& params) {} +void EiveUserHandler::reportIndication(const cfdp::TransactionId& id, + cfdp::StatusReportIF& report) {} +void EiveUserHandler::suspendedIndication(const cfdp::TransactionId& id, + cfdp::ConditionCode code) {} +void EiveUserHandler::resumedIndication(const cfdp::TransactionId& id, size_t progress) {} +void EiveUserHandler::faultIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, + size_t progress) {} +void EiveUserHandler::abandonedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, + size_t progress) {} +void EiveUserHandler::eofRecvIndication(const cfdp::TransactionId& id) { + sif::info << "EOF PDU received for transaction with " << id << std::endl; +} + +} // namespace cfdp diff --git a/mission/cfdp/CfdpUser.h b/mission/cfdp/CfdpUser.h new file mode 100644 index 00000000..fa4d0485 --- /dev/null +++ b/mission/cfdp/CfdpUser.h @@ -0,0 +1,34 @@ +#ifndef MISSION_CFDP_CFDPUSER_H_ +#define MISSION_CFDP_CFDPUSER_H_ + +#include + +namespace cfdp { + +class EiveUserHandler : public cfdp::UserBase { + public: + explicit EiveUserHandler(HasFileSystemIF& vfs, MessageQueueId_t cfdpRequestId); + + virtual ~EiveUserHandler(); + + void transactionIndication(const cfdp::TransactionId& id) override; + void eofSentIndication(const cfdp::TransactionId& id) override; + void transactionFinishedIndication(const cfdp::TransactionFinishedParams& params) override; + void metadataRecvdIndication(const cfdp::MetadataRecvdParams& params) override; + void fileSegmentRecvdIndication(const cfdp::FileSegmentRecvdParams& params) override; + void reportIndication(const cfdp::TransactionId& id, cfdp::StatusReportIF& report) override; + void suspendedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code); + void resumedIndication(const cfdp::TransactionId& id, size_t progress) override; + void faultIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, + size_t progress) override; + void abandonedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, + size_t progress) override; + void eofRecvIndication(const cfdp::TransactionId& id) override; + + private: + MessageQueueIF* userQueue; +}; + +} // namespace cfdp + +#endif /* MISSION_CFDP_CFDPUSER_H_ */ diff --git a/mission/cfdp/Config.h b/mission/cfdp/Config.h deleted file mode 100644 index 89a3cdd1..00000000 --- a/mission/cfdp/Config.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef MISSION_CFDP_CONFIG_H_ -#define MISSION_CFDP_CONFIG_H_ - -#include "fsfw/cfdp.h" - -namespace cfdp { - -class EiveUserHandler : public cfdp::UserBase { - public: - explicit EiveUserHandler(HasFileSystemIF& vfs, MessageQueueId_t cfdpRequestId) - : cfdp::UserBase(vfs) { - userQueue = QueueFactory::instance()->createMessageQueue(10); - userQueue->setDefaultDestination(cfdpRequestId); - } - - virtual ~EiveUserHandler() { QueueFactory::instance()->deleteMessageQueue(userQueue); } - - void transactionIndication(const cfdp::TransactionId& id) override {} - void eofSentIndication(const cfdp::TransactionId& id) override {} - void transactionFinishedIndication(const cfdp::TransactionFinishedParams& params) override { - sif::info << "File transaction finished for transaction with " << params.id << std::endl; - } - void metadataRecvdIndication(const cfdp::MetadataRecvdParams& params) override { - // TODO: Parse user messages and convert them into put requests where applicable. - sif::info << "Metadata received for transaction with " << params.id << std::endl; - } - void fileSegmentRecvdIndication(const cfdp::FileSegmentRecvdParams& params) override {} - void reportIndication(const cfdp::TransactionId& id, cfdp::StatusReportIF& report) override {} - void suspendedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code) override {} - void resumedIndication(const cfdp::TransactionId& id, size_t progress) override {} - void faultIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, - size_t progress) override {} - void abandonedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, - size_t progress) override {} - void eofRecvIndication(const cfdp::TransactionId& id) override { - sif::info << "EOF PDU received for transaction with " << id << std::endl; - } - - private: - MessageQueueIF* userQueue; -}; - -class EiveFaultHandler : public cfdp::FaultHandlerBase { - public: - void noticeOfSuspensionCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { - sif::warning << "Notice of suspension detected for transaction " << id - << " with condition code: " << cfdp::getConditionCodeString(code) << std::endl; - } - void noticeOfCancellationCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { - sif::warning << "Notice of suspension detected for transaction " << id - << " with condition code: " << cfdp::getConditionCodeString(code) << std::endl; - } - void abandonCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { - sif::warning << "Transaction " << id - << " was abandoned, condition code : " << cfdp::getConditionCodeString(code) - << std::endl; - } - void ignoreCb(cfdp::TransactionId& id, cfdp::ConditionCode code) override { - sif::warning << "Fault ignored for transaction " << id - << ", condition code: " << cfdp::getConditionCodeString(code) << std::endl; - } -}; - -} // namespace cfdp - -#endif /* MISSION_CFDP_CONFIG_H_ */ diff --git a/mission/genericFactory.cpp b/mission/genericFactory.cpp index 79035f9c..9bd000c7 100644 --- a/mission/genericFactory.cpp +++ b/mission/genericFactory.cpp @@ -22,7 +22,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -44,7 +46,6 @@ #include "devices/gpioIds.h" #include "eive/definitions.h" #include "fsfw/pus/Service11TelecommandScheduling.h" -#include "mission/cfdp/Config.h" #include "mission/system/acs/RwAssembly.h" #include "mission/system/acs/acsModeTree.h" #include "mission/system/tcs/tcsModeTree.h" @@ -276,7 +277,7 @@ void ObjectFactory::produceGenericObjects(HealthTableIF** healthTable_, PusTmFun auto* tmtcQueue = QueueFactory::instance()->createMessageQueue(32); auto* cfdpQueue = QueueFactory::instance()->createMessageQueue(16); - auto eiveUserHandler = new EiveUserHandler(HOST_FS, cfdpQueue->getId()); + auto eiveUserHandler = new cfdp::EiveUserHandler(HOST_FS, cfdpQueue->getId()); FsfwHandlerParams params(objects::CFDP_HANDLER, HOST_FS, **cfdpFunnel, *tcStore, **tmStore, *tmtcQueue, *cfdpQueue); cfdp::IndicationCfg indicationCfg; diff --git a/tmtc b/tmtc index fd3a7990..b50c75c1 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit fd3a799019f6910cbbb4447cc9605340d66c2703 +Subproject commit b50c75c13cdbbc3d34d2f072d2bf1cb2fbe734b5