From 4d473315feecfb45c0dc9af18990e4962518d99d Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Dec 2022 13:19:14 +0100 Subject: [PATCH] allow sending TC requests to funnels --- mission/core/GenericFactory.cpp | 4 ++-- mission/tmtc/CfdpTmFunnel.cpp | 4 ++-- mission/tmtc/CfdpTmFunnel.h | 2 +- mission/tmtc/PusTmFunnel.cpp | 4 ++-- mission/tmtc/PusTmFunnel.h | 2 +- mission/tmtc/Service15TmStorage.cpp | 12 ++++++------ mission/tmtc/Service15TmStorage.h | 5 +---- mission/tmtc/TmFunnelBase.cpp | 6 +++++- mission/tmtc/TmFunnelBase.h | 11 +++++++++-- 9 files changed, 29 insertions(+), 21 deletions(-) diff --git a/mission/core/GenericFactory.cpp b/mission/core/GenericFactory.cpp index c0e1eb43..0e58e1ec 100644 --- a/mission/core/GenericFactory.cpp +++ b/mission/core/GenericFactory.cpp @@ -121,8 +121,8 @@ void ObjectFactory::produceGenericObjects(HealthTableIF** healthTable_, PusTmFun new CcsdsDistributor(config::EIVE_PUS_APID, objects::CCSDS_PACKET_DISTRIBUTOR); new PusDistributor(config::EIVE_PUS_APID, objects::PUS_PACKET_DISTRIBUTOR, ccsdsDistrib); - *cfdpFunnel = new CfdpTmFunnel(objects::CFDP_TM_FUNNEL, config::EIVE_CFDP_APID, *tmStore, 50); - *pusFunnel = new PusTmFunnel(objects::PUS_TM_FUNNEL, *timeStamper, *tmStore, sdcMan, 80); + *cfdpFunnel = new CfdpTmFunnel(objects::CFDP_TM_FUNNEL, config::EIVE_CFDP_APID, *tmStore, 50, 15); + *pusFunnel = new PusTmFunnel(objects::PUS_TM_FUNNEL, *timeStamper, *tmStore, sdcMan, 80, 15); #if OBSW_ADD_TCPIP_SERVERS == 1 #if OBSW_ADD_TMTC_UDP_SERVER == 1 (*cfdpFunnel)->addDestination(*udpBridge, 0); diff --git a/mission/tmtc/CfdpTmFunnel.cpp b/mission/tmtc/CfdpTmFunnel.cpp index aff7c95d..e5080b71 100644 --- a/mission/tmtc/CfdpTmFunnel.cpp +++ b/mission/tmtc/CfdpTmFunnel.cpp @@ -5,8 +5,8 @@ #include "fsfw/tmtcservices/TmTcMessage.h" CfdpTmFunnel::CfdpTmFunnel(object_id_t objectId, uint16_t cfdpInCcsdsApid, - StorageManagerIF& tmStore, uint32_t messageDepth) - : TmFunnelBase(objectId, tmStore, messageDepth), cfdpInCcsdsApid(cfdpInCcsdsApid) {} + StorageManagerIF& tmStore, uint32_t tmMsgDepth, uint32_t tcMsgDepth) + : TmFunnelBase(objectId, tmStore, tmMsgDepth, tcMsgDepth), cfdpInCcsdsApid(cfdpInCcsdsApid) {} const char* CfdpTmFunnel::getName() const { return "CFDP TM Funnel"; } diff --git a/mission/tmtc/CfdpTmFunnel.h b/mission/tmtc/CfdpTmFunnel.h index e294956a..32d16975 100644 --- a/mission/tmtc/CfdpTmFunnel.h +++ b/mission/tmtc/CfdpTmFunnel.h @@ -13,7 +13,7 @@ class CfdpTmFunnel : public TmFunnelBase { public: CfdpTmFunnel(object_id_t objectId, uint16_t cfdpInCcsdsApid, StorageManagerIF& tmStore, - uint32_t messageDepth); + uint32_t tmMsgDepth, uint32_t tcMsgDepth); [[nodiscard]] const char* getName() const override; ReturnValue_t performOperation(uint8_t opCode); ReturnValue_t initialize() override; diff --git a/mission/tmtc/PusTmFunnel.cpp b/mission/tmtc/PusTmFunnel.cpp index 5c4c8ead..ff66f3c9 100644 --- a/mission/tmtc/PusTmFunnel.cpp +++ b/mission/tmtc/PusTmFunnel.cpp @@ -7,8 +7,8 @@ #include "fsfw/tmtcpacket/pus/tm/PusTmZcWriter.h" PusTmFunnel::PusTmFunnel(object_id_t objectId, TimeReaderIF &timeReader, StorageManagerIF &tmStore, - SdCardMountedIF &sdcMan, uint32_t messageDepth) - : TmFunnelBase(objectId, tmStore, messageDepth), + SdCardMountedIF &sdcMan, uint32_t tmMsgDepth, uint32_t tcMsgDepth) + : TmFunnelBase(objectId, tmStore, tmMsgDepth, tcMsgDepth), timeReader(timeReader), miscStore(objects::MISC_TM_STORE, "tm", "misc", RolloverInterval::HOURLY, 2, currentTv, sdcMan), diff --git a/mission/tmtc/PusTmFunnel.h b/mission/tmtc/PusTmFunnel.h index b380ec79..a54093c2 100644 --- a/mission/tmtc/PusTmFunnel.h +++ b/mission/tmtc/PusTmFunnel.h @@ -23,7 +23,7 @@ class PusTmFunnel : public TmFunnelBase { public: explicit PusTmFunnel(object_id_t objectId, TimeReaderIF &timeReader, StorageManagerIF &tmStore, - SdCardMountedIF &sdcMan, uint32_t messageDepth = 10); + SdCardMountedIF &sdcMan, uint32_t tmMsgDepth, uint32_t tcMsgDepth); [[nodiscard]] const char *getName() const override; ~PusTmFunnel() override; diff --git a/mission/tmtc/Service15TmStorage.cpp b/mission/tmtc/Service15TmStorage.cpp index ae2400b5..5bdec8e1 100644 --- a/mission/tmtc/Service15TmStorage.cpp +++ b/mission/tmtc/Service15TmStorage.cpp @@ -10,12 +10,12 @@ Service15TmStorage::Service15TmStorage(object_id_t objectId, uint16_t apid, ReturnValue_t Service15TmStorage::isValidSubservice(uint8_t subservice) { switch (subservice) { - case(Subservices::START_BY_TIME_RANGE_RETRIEVAL): { - return OK; - } - case(Subservices::DELETE_UP_TO): { - return OK; - } + case (Subservices::START_BY_TIME_RANGE_RETRIEVAL): { + return OK; + } + case (Subservices::DELETE_UP_TO): { + return OK; + } } return FAILED; } diff --git a/mission/tmtc/Service15TmStorage.h b/mission/tmtc/Service15TmStorage.h index 92cab52a..2074754a 100644 --- a/mission/tmtc/Service15TmStorage.h +++ b/mission/tmtc/Service15TmStorage.h @@ -5,10 +5,7 @@ class Service15TmStorage : public CommandingServiceBase { public: - enum Subservices: uint8_t { - START_BY_TIME_RANGE_RETRIEVAL = 9, - DELETE_UP_TO = 11 - }; + enum Subservices : uint8_t { START_BY_TIME_RANGE_RETRIEVAL = 9, DELETE_UP_TO = 11 }; explicit Service15TmStorage(object_id_t objectId, uint16_t apid, uint8_t numParallelCommands, uint16_t commandTimeoutSecs, size_t queueDepth); diff --git a/mission/tmtc/TmFunnelBase.cpp b/mission/tmtc/TmFunnelBase.cpp index fa0062e6..156e4664 100644 --- a/mission/tmtc/TmFunnelBase.cpp +++ b/mission/tmtc/TmFunnelBase.cpp @@ -2,11 +2,15 @@ #include "fsfw/ipc/QueueFactory.h" -TmFunnelBase::TmFunnelBase(object_id_t objectId, StorageManagerIF &tmStore, uint32_t tmMsgDepth) +TmFunnelBase::TmFunnelBase(object_id_t objectId, StorageManagerIF &tmStore, uint32_t tmMsgDepth, + uint32_t tcMsgDepth) : SystemObject(objectId), tmStore(tmStore) { tmQueue = QueueFactory::instance()->createMessageQueue(tmMsgDepth); + tcQueue = QueueFactory::instance()->createMessageQueue(tcMsgDepth); } +MessageQueueId_t TmFunnelBase::getCommandQueue() const { return tcQueue->getId(); } + TmFunnelBase::~TmFunnelBase() { QueueFactory::instance()->deleteMessageQueue(tmQueue); } MessageQueueId_t TmFunnelBase::getReportReceptionQueue(uint8_t virtualChannel) const { diff --git a/mission/tmtc/TmFunnelBase.h b/mission/tmtc/TmFunnelBase.h index c630fefd..271c17c0 100644 --- a/mission/tmtc/TmFunnelBase.h +++ b/mission/tmtc/TmFunnelBase.h @@ -3,14 +3,20 @@ #include #include +#include #include #include -class TmFunnelBase : public AcceptsTelemetryIF, public SystemObject { +class TmFunnelBase : public TmStoreFrontendSimpleIF, + public AcceptsTelemetryIF, + public SystemObject { public: - TmFunnelBase(object_id_t objectId, StorageManagerIF& tmStore, uint32_t tmMsgDepth); + TmFunnelBase(object_id_t objectId, StorageManagerIF& tmStore, uint32_t tmMsgDepth, + uint32_t tcMsgDepth); void addDestination(const AcceptsTelemetryIF& downlinkDestination, uint8_t vcid = 0); + + [[nodiscard]] MessageQueueId_t getCommandQueue() const override; [[nodiscard]] MessageQueueId_t getReportReceptionQueue(uint8_t virtualChannel) const override; virtual ~TmFunnelBase(); @@ -18,6 +24,7 @@ class TmFunnelBase : public AcceptsTelemetryIF, public SystemObject { protected: StorageManagerIF& tmStore; std::vector> destinations; + MessageQueueIF* tcQueue = nullptr; MessageQueueIF* tmQueue = nullptr; };