From b252299bdb9627b4319b94b186be31f6165278f2 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Tue, 21 Apr 2020 14:51:26 +0200 Subject: [PATCH 1/6] U. Mohr suggestions worked in Furthermore, some enhancements added: delay between sent tm and max number of sent tm per cycle can be specified --- tmtcservices/TmTcBridge.cpp | 58 ++++++++++++++++++++++++--------- tmtcservices/TmTcBridge.h | 65 +++++++++++++++++++------------------ 2 files changed, 77 insertions(+), 46 deletions(-) diff --git a/tmtcservices/TmTcBridge.cpp b/tmtcservices/TmTcBridge.cpp index 3ba00ba2..d63d4405 100644 --- a/tmtcservices/TmTcBridge.cpp +++ b/tmtcservices/TmTcBridge.cpp @@ -1,19 +1,16 @@ -/** - * @file TmTcBridge.cpp - * - * @date 26.12.2019 - * @author R. Mueller - */ - #include #include +#include +#include #include #include +#include TmTcBridge::TmTcBridge(object_id_t objectId_, object_id_t ccsdsPacketDistributor_): SystemObject(objectId_), - ccsdsPacketDistributor(ccsdsPacketDistributor_) + ccsdsPacketDistributor(ccsdsPacketDistributor_), + sentPacketsPerCycle(5), delayBetweenSentPacketsMs(0) { TmTcReceptionQueue = QueueFactory::instance()-> createMessageQueue(TMTC_RECEPTION_QUEUE_DEPTH); @@ -21,6 +18,21 @@ TmTcBridge::TmTcBridge(object_id_t objectId_, TmTcBridge::~TmTcBridge() {} +void TmTcBridge::setDelayBetweenSentPackets(uint32_t delayBetweenSentPackets) { + this->delayBetweenSentPacketsMs = delayBetweenSentPackets; +} + +ReturnValue_t TmTcBridge::setNumberOfSentPacketsPerCycle( + uint8_t sentPacketsPerCycle) { + if(sentPacketsPerCycle <= MAX_STORED_DATA_SENT_PER_CYCLE) { + this->sentPacketsPerCycle = sentPacketsPerCycle; + return RETURN_OK; + } + else { + return RETURN_FAILED; + } +} + ReturnValue_t TmTcBridge::initialize() { tcStore = objectManager->get(objects::TC_STORE); if (tcStore == NULL) { @@ -53,7 +65,21 @@ ReturnValue_t TmTcBridge::performOperation(uint8_t operationCode) { } ReturnValue_t TmTcBridge::handleTc() { - ReturnValue_t result = receiveTc(&recvBuffer, &size); + uint8_t * recvBuffer = nullptr; + size_t recvLen = 0; + ReturnValue_t result = receiveTc(&recvBuffer, &recvLen); + if(result == RETURN_OK and recvLen > 0 and recvBuffer != nullptr) { + store_address_t storeId = 0; + ReturnValue_t result = tcStore->addData(&storeId, + recvBuffer, (uint32_t)recvLen); + if(result != RETURN_OK) { + return result; + } + TmTcMessage message(storeId); + if (TmTcReceptionQueue->sendToDefault(&message) != RETURN_OK) { + tcStore->deleteData(storeId); + } + } return result; } @@ -106,8 +132,8 @@ ReturnValue_t TmTcBridge::storeDownlinkData(TmTcMessage *message) { store_address_t storeId = 0; if(fifo.full()) { - info << "TMTC Bridge: TM downlink max. number of stored packet IDs reached." - " Overwriting old data" << std::endl; + error << "TMTC Bridge: TM downlink max. number of stored packet IDs " + "reached! Overwriting old data" << std::endl; fifo.retrieve(&storeId); tmStore->deleteData(storeId); } @@ -120,14 +146,16 @@ ReturnValue_t TmTcBridge::storeDownlinkData(TmTcMessage *message) { ReturnValue_t TmTcBridge::sendStoredTm() { uint8_t counter = 0; ReturnValue_t result = RETURN_OK; - while(!fifo.empty() && counter < MAX_STORED_DATA_SENT_PER_CYCLE) { - info << "TMTC Bridge: Sending stored TM data. There are " - << (int) fifo.size() << " left to send\r\n" << std::flush; + while(!fifo.empty() && counter < sentPacketsPerCycle) { + //info << "TMTC Bridge: Sending stored TM data. There are " + // << (int) fifo.size() << " left to send\r\n" << std::flush; store_address_t storeId; const uint8_t* data = NULL; uint32_t size = 0; fifo.retrieve(&storeId); result = tmStore->getData(storeId, &data, &size); + // This does not work yet: is not static function + //PeriodicTaskIF::sleepFor(delayBetweenSentPacketsMs); sendTm(data,size); if(result != RETURN_OK) { error << "TMTC Bridge: Could not send stored downlink data" @@ -162,7 +190,7 @@ MessageQueueId_t TmTcBridge::getReportReceptionQueue(uint8_t virtualChannel) { return TmTcReceptionQueue->getId(); } -void TmTcBridge::printData(uint8_t * data, uint32_t dataLen) { +void TmTcBridge::printData(uint8_t * data, size_t dataLen) { info << "TMTC Bridge: Printing data: ["; for(uint32_t i=0;i fifo; - uint8_t * recvBuffer = nullptr; - uint32_t size = 0; + uint8_t sentPacketsPerCycle = 10; + uint32_t delayBetweenSentPacketsMs = 0; }; From fdbc5d5c570ee4017dd482c18b2309515db12067 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Tue, 21 Apr 2020 14:54:04 +0200 Subject: [PATCH 2/6] com downlink message now debug and commented out --- tmtcservices/TmTcBridge.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmtcservices/TmTcBridge.cpp b/tmtcservices/TmTcBridge.cpp index d63d4405..0040b163 100644 --- a/tmtcservices/TmTcBridge.cpp +++ b/tmtcservices/TmTcBridge.cpp @@ -127,8 +127,8 @@ ReturnValue_t TmTcBridge::readTmQueue() { } ReturnValue_t TmTcBridge::storeDownlinkData(TmTcMessage *message) { - info << "TMTC Bridge: Comm Link down. " - "Saving packet ID to be sent later\r\n" << std::flush; + //debug << "TMTC Bridge: Comm Link down. " + // "Saving packet ID to be sent later\r\n" << std::flush; store_address_t storeId = 0; if(fifo.full()) { From 7a79fab52aef5e0fad3c54c991977a96d436bec6 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Tue, 21 Apr 2020 21:48:47 +0200 Subject: [PATCH 3/6] receiveTc (almost) empty now --- tmtcservices/TmTcBridge.cpp | 12 ------------ tmtcservices/TmTcBridge.h | 7 ++++++- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/tmtcservices/TmTcBridge.cpp b/tmtcservices/TmTcBridge.cpp index 0040b163..471fe828 100644 --- a/tmtcservices/TmTcBridge.cpp +++ b/tmtcservices/TmTcBridge.cpp @@ -68,18 +68,6 @@ ReturnValue_t TmTcBridge::handleTc() { uint8_t * recvBuffer = nullptr; size_t recvLen = 0; ReturnValue_t result = receiveTc(&recvBuffer, &recvLen); - if(result == RETURN_OK and recvLen > 0 and recvBuffer != nullptr) { - store_address_t storeId = 0; - ReturnValue_t result = tcStore->addData(&storeId, - recvBuffer, (uint32_t)recvLen); - if(result != RETURN_OK) { - return result; - } - TmTcMessage message(storeId); - if (TmTcReceptionQueue->sendToDefault(&message) != RETURN_OK) { - tcStore->deleteData(storeId); - } - } return result; } diff --git a/tmtcservices/TmTcBridge.h b/tmtcservices/TmTcBridge.h index 865cd001..ef160257 100644 --- a/tmtcservices/TmTcBridge.h +++ b/tmtcservices/TmTcBridge.h @@ -65,7 +65,12 @@ protected: bool tmStored = false; /** - * Handle TC reception. Default implementation provided + * @brief Handle TC reception + * @details + * Default implementation provided, but is empty. + * Child handler should override this in most cases orsend TC to the + * TC distributor directly with the address of the reception queue by + * calling getReportRecptionQueue() * @return */ virtual ReturnValue_t handleTc(); From 57c225d4fcf9978796b58cf76c5e42f434ca8640 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Wed, 22 Apr 2020 18:15:45 +0200 Subject: [PATCH 4/6] faulty includes removed --- tmtcservices/TmTcBridge.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tmtcservices/TmTcBridge.cpp b/tmtcservices/TmTcBridge.cpp index 471fe828..827e855e 100644 --- a/tmtcservices/TmTcBridge.cpp +++ b/tmtcservices/TmTcBridge.cpp @@ -2,10 +2,8 @@ #include #include -#include #include #include -#include TmTcBridge::TmTcBridge(object_id_t objectId_, object_id_t ccsdsPacketDistributor_): SystemObject(objectId_), From 04835587a7d31487d0707ebfdfdbbd076ebf7175 Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Wed, 22 Apr 2020 18:20:04 +0200 Subject: [PATCH 5/6] delay variable removed --- tmtcservices/TmTcBridge.cpp | 7 +------ tmtcservices/TmTcBridge.h | 3 +-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/tmtcservices/TmTcBridge.cpp b/tmtcservices/TmTcBridge.cpp index 827e855e..f24b2561 100644 --- a/tmtcservices/TmTcBridge.cpp +++ b/tmtcservices/TmTcBridge.cpp @@ -8,18 +8,13 @@ TmTcBridge::TmTcBridge(object_id_t objectId_, object_id_t ccsdsPacketDistributor_): SystemObject(objectId_), ccsdsPacketDistributor(ccsdsPacketDistributor_), - sentPacketsPerCycle(5), delayBetweenSentPacketsMs(0) -{ + sentPacketsPerCycle(5) { TmTcReceptionQueue = QueueFactory::instance()-> createMessageQueue(TMTC_RECEPTION_QUEUE_DEPTH); } TmTcBridge::~TmTcBridge() {} -void TmTcBridge::setDelayBetweenSentPackets(uint32_t delayBetweenSentPackets) { - this->delayBetweenSentPacketsMs = delayBetweenSentPackets; -} - ReturnValue_t TmTcBridge::setNumberOfSentPacketsPerCycle( uint8_t sentPacketsPerCycle) { if(sentPacketsPerCycle <= MAX_STORED_DATA_SENT_PER_CYCLE) { diff --git a/tmtcservices/TmTcBridge.h b/tmtcservices/TmTcBridge.h index ef160257..b3a58329 100644 --- a/tmtcservices/TmTcBridge.h +++ b/tmtcservices/TmTcBridge.h @@ -112,7 +112,7 @@ protected: * @param message * @return */ - ReturnValue_t storeDownlinkData(TmTcMessage * message); + virtual ReturnValue_t storeDownlinkData(TmTcMessage * message); /** * Send stored data if communication link is active @@ -130,7 +130,6 @@ protected: private: FIFO fifo; uint8_t sentPacketsPerCycle = 10; - uint32_t delayBetweenSentPacketsMs = 0; }; From d0ce075e0d70332a1cee51d777338b3808a689cc Mon Sep 17 00:00:00 2001 From: "Robin.Mueller" Date: Wed, 22 Apr 2020 18:21:50 +0200 Subject: [PATCH 6/6] added old comment --- tmtcservices/TmTcBridge.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmtcservices/TmTcBridge.cpp b/tmtcservices/TmTcBridge.cpp index f24b2561..9408df2f 100644 --- a/tmtcservices/TmTcBridge.cpp +++ b/tmtcservices/TmTcBridge.cpp @@ -135,9 +135,9 @@ ReturnValue_t TmTcBridge::sendStoredTm() { uint32_t size = 0; fifo.retrieve(&storeId); result = tmStore->getData(storeId, &data, &size); - // This does not work yet: is not static function - //PeriodicTaskIF::sleepFor(delayBetweenSentPacketsMs); + sendTm(data,size); + if(result != RETURN_OK) { error << "TMTC Bridge: Could not send stored downlink data" << std::endl;