From 24d41e78632623d29daefcc9d6417b171f08bf82 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 19 Mar 2024 17:38:35 +0100 Subject: [PATCH 1/4] just a small form fix --- src/fsfw/container/SharedRingBuffer.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/fsfw/container/SharedRingBuffer.cpp b/src/fsfw/container/SharedRingBuffer.cpp index 111019e0..10a2d828 100644 --- a/src/fsfw/container/SharedRingBuffer.cpp +++ b/src/fsfw/container/SharedRingBuffer.cpp @@ -15,7 +15,12 @@ SharedRingBuffer::SharedRingBuffer(object_id_t objectId, uint8_t* buffer, const mutex = MutexFactory::instance()->createMutex(); } -SharedRingBuffer::~SharedRingBuffer() { MutexFactory::instance()->deleteMutex(mutex); } +SharedRingBuffer::~SharedRingBuffer() { + MutexFactory::instance()->deleteMutex(mutex); + if(receiveSizesFIFO != nullptr) { + delete(receiveSizesFIFO); + } +} void SharedRingBuffer::setToUseReceiveSizeFIFO(size_t fifoDepth) { this->fifoDepth = fifoDepth; } From a3eb81f1defa6d1631d0dab4acbb4d3d945e4715 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 19 Mar 2024 18:55:13 +0100 Subject: [PATCH 2/4] added locked write helper method --- src/fsfw/container/SharedRingBuffer.cpp | 24 +++++++++++++++++-- src/fsfw/container/SharedRingBuffer.h | 3 +++ src/fsfw/osal/host/FixedTimeslotTask.h | 2 +- src/fsfw/osal/host/PeriodicTask.h | 2 +- src/fsfw/osal/host/taskHelpers.h | 2 +- .../pus/Service11TelecommandScheduling.tpp | 2 +- 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/fsfw/container/SharedRingBuffer.cpp b/src/fsfw/container/SharedRingBuffer.cpp index 10a2d828..d226a829 100644 --- a/src/fsfw/container/SharedRingBuffer.cpp +++ b/src/fsfw/container/SharedRingBuffer.cpp @@ -1,5 +1,6 @@ #include "fsfw/container/SharedRingBuffer.h" +#include "SharedRingBuffer.h" #include "fsfw/ipc/MutexFactory.h" #include "fsfw/ipc/MutexGuard.h" @@ -17,8 +18,8 @@ SharedRingBuffer::SharedRingBuffer(object_id_t objectId, uint8_t* buffer, const SharedRingBuffer::~SharedRingBuffer() { MutexFactory::instance()->deleteMutex(mutex); - if(receiveSizesFIFO != nullptr) { - delete(receiveSizesFIFO); + if (receiveSizesFIFO != nullptr) { + delete (receiveSizesFIFO); } } @@ -50,3 +51,22 @@ DynamicFIFO* SharedRingBuffer::getReceiveSizesFIFO() { } return receiveSizesFIFO; } +ReturnValue_t SharedRingBuffer::lockedWrite(const uint8_t* data, size_t dataLen, + MutexIF::TimeoutType lockType, uint32_t waitTimeMs) { + MutexGuard mg(mutex, lockType, waitTimeMs); + if (availableWriteSpace() < dataLen || + (receiveSizesFIFO != nullptr && receiveSizesFIFO->full())) { + return returnvalue::FAILED; + } + // The following two operation should not fail.. + ReturnValue_t result = writeData(data, dataLen); + if (result != returnvalue::OK) { + return result; + } + if (receiveSizesFIFO != nullptr) { + result = receiveSizesFIFO->insert(dataLen); + if (result != returnvalue::OK) { + return result; + } + } +} diff --git a/src/fsfw/container/SharedRingBuffer.h b/src/fsfw/container/SharedRingBuffer.h index 6ae36432..2ac7ee6e 100644 --- a/src/fsfw/container/SharedRingBuffer.h +++ b/src/fsfw/container/SharedRingBuffer.h @@ -80,6 +80,9 @@ class SharedRingBuffer : public SystemObject, public SimpleRingBuffer { */ DynamicFIFO* getReceiveSizesFIFO(); + ReturnValue_t lockedWrite(const uint8_t* data, size_t dataLen, MutexIF::TimeoutType lockType, + uint32_t waitTimeMs); + private: MutexIF* mutex = nullptr; diff --git a/src/fsfw/osal/host/FixedTimeslotTask.h b/src/fsfw/osal/host/FixedTimeslotTask.h index 95159ab8..6bf4091b 100644 --- a/src/fsfw/osal/host/FixedTimeslotTask.h +++ b/src/fsfw/osal/host/FixedTimeslotTask.h @@ -3,9 +3,9 @@ #include #include +#include #include #include -#include #include "fsfw/objectmanager/ObjectManagerIF.h" #include "fsfw/tasks/FixedSlotSequence.h" diff --git a/src/fsfw/osal/host/PeriodicTask.h b/src/fsfw/osal/host/PeriodicTask.h index 82ec70c0..b6366d87 100644 --- a/src/fsfw/osal/host/PeriodicTask.h +++ b/src/fsfw/osal/host/PeriodicTask.h @@ -3,9 +3,9 @@ #include #include +#include #include #include -#include #include "fsfw/objectmanager/ObjectManagerIF.h" #include "fsfw/tasks/PeriodicTaskBase.h" diff --git a/src/fsfw/osal/host/taskHelpers.h b/src/fsfw/osal/host/taskHelpers.h index 35988332..ed61b6d7 100644 --- a/src/fsfw/osal/host/taskHelpers.h +++ b/src/fsfw/osal/host/taskHelpers.h @@ -3,8 +3,8 @@ #include -#include #include +#include namespace tasks { diff --git a/src/fsfw/pus/Service11TelecommandScheduling.tpp b/src/fsfw/pus/Service11TelecommandScheduling.tpp index 21852b63..38f6c501 100644 --- a/src/fsfw/pus/Service11TelecommandScheduling.tpp +++ b/src/fsfw/pus/Service11TelecommandScheduling.tpp @@ -150,7 +150,7 @@ inline ReturnValue_t Service11TelecommandScheduling::handleResetCom template inline ReturnValue_t Service11TelecommandScheduling::doInsertActivity( const uint8_t *data, size_t size) { - if(telecommandMap.full()) { + if (telecommandMap.full()) { return MAP_IS_FULL; } uint32_t timestamp = 0; From 0bd88a268972e8ea32332f6d70efa9551e3d66d5 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 21 Mar 2024 16:10:45 +0100 Subject: [PATCH 3/4] I hate C++, this is awful --- src/fsfw/container/SharedRingBuffer.cpp | 40 ++++++++++--------------- src/fsfw/container/SharedRingBuffer.h | 9 +++--- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/src/fsfw/container/SharedRingBuffer.cpp b/src/fsfw/container/SharedRingBuffer.cpp index d226a829..bfc04ce1 100644 --- a/src/fsfw/container/SharedRingBuffer.cpp +++ b/src/fsfw/container/SharedRingBuffer.cpp @@ -18,8 +18,8 @@ SharedRingBuffer::SharedRingBuffer(object_id_t objectId, uint8_t* buffer, const SharedRingBuffer::~SharedRingBuffer() { MutexFactory::instance()->deleteMutex(mutex); - if (receiveSizesFIFO != nullptr) { - delete (receiveSizesFIFO); + if (receiveSizesFifo != nullptr) { + delete (receiveSizesFifo); } } @@ -36,37 +36,29 @@ MutexIF* SharedRingBuffer::getMutexHandle() const { return mutex; } ReturnValue_t SharedRingBuffer::initialize() { if (fifoDepth > 0) { - receiveSizesFIFO = new DynamicFIFO(fifoDepth); + receiveSizesFifo = new DynamicFIFO(fifoDepth); } return SystemObject::initialize(); } -DynamicFIFO* SharedRingBuffer::getReceiveSizesFIFO() { - if (receiveSizesFIFO == nullptr) { +DynamicFIFO* SharedRingBuffer::getReceiveSizesFifo() { + if (receiveSizesFifo == nullptr) { // Configuration error. #if FSFW_CPP_OSTREAM_ENABLED == 1 sif::warning << "SharedRingBuffer::getReceiveSizesFIFO: Ring buffer" << " was not configured to have sizes FIFO, returning nullptr!" << std::endl; #endif } - return receiveSizesFIFO; + return receiveSizesFifo; } -ReturnValue_t SharedRingBuffer::lockedWrite(const uint8_t* data, size_t dataLen, - MutexIF::TimeoutType lockType, uint32_t waitTimeMs) { - MutexGuard mg(mutex, lockType, waitTimeMs); - if (availableWriteSpace() < dataLen || - (receiveSizesFIFO != nullptr && receiveSizesFIFO->full())) { - return returnvalue::FAILED; - } - // The following two operation should not fail.. - ReturnValue_t result = writeData(data, dataLen); - if (result != returnvalue::OK) { - return result; - } - if (receiveSizesFIFO != nullptr) { - result = receiveSizesFIFO->insert(dataLen); - if (result != returnvalue::OK) { - return result; + + ReturnValue_t SharedRingBuffer::fifoEmpty(bool& empty, MutexIF::TimeoutType timeoutType, uint32_t timeoutMs) { + if(receiveSizesFifo == nullptr) { + return returnvalue::FAILED; } - } -} + MutexGuard mg(mutex, timeoutType, timeoutMs); + if(mg.getLockResult() != returnvalue::OK) { + return mg.getLockResult(); + } + return receiveSizesFifo->empty(); + } \ No newline at end of file diff --git a/src/fsfw/container/SharedRingBuffer.h b/src/fsfw/container/SharedRingBuffer.h index 2ac7ee6e..828d58ad 100644 --- a/src/fsfw/container/SharedRingBuffer.h +++ b/src/fsfw/container/SharedRingBuffer.h @@ -78,16 +78,15 @@ class SharedRingBuffer : public SystemObject, public SimpleRingBuffer { * Do not forget to protect access with a lock if required! * @return */ - DynamicFIFO* getReceiveSizesFIFO(); + DynamicFIFO* getReceiveSizesFifo(); - ReturnValue_t lockedWrite(const uint8_t* data, size_t dataLen, MutexIF::TimeoutType lockType, - uint32_t waitTimeMs); + ReturnValue_t fifoEmpty(bool& empty, MutexIF::TimeoutType timeoutType, uint32_t timeoutMs); private: MutexIF* mutex = nullptr; size_t fifoDepth = 0; - DynamicFIFO* receiveSizesFIFO = nullptr; + DynamicFIFO* receiveSizesFifo = nullptr; }; -#endif /* FSFW_CONTAINER_SHAREDRINGBUFFER_H_ */ +#endif /* FSFW_CONTAINER_SHAREDRINGBUFFER_H_ */ \ No newline at end of file From a8f8c1496c16c98b5b0e8b6dcc525964a5d75583 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 26 Mar 2024 15:27:33 +0100 Subject: [PATCH 4/4] yeah, that's why i hate c++ --- src/fsfw/container/SharedRingBuffer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fsfw/container/SharedRingBuffer.cpp b/src/fsfw/container/SharedRingBuffer.cpp index bfc04ce1..4be9c09f 100644 --- a/src/fsfw/container/SharedRingBuffer.cpp +++ b/src/fsfw/container/SharedRingBuffer.cpp @@ -60,5 +60,6 @@ DynamicFIFO* SharedRingBuffer::getReceiveSizesFifo() { if(mg.getLockResult() != returnvalue::OK) { return mg.getLockResult(); } - return receiveSizesFifo->empty(); + empty = receiveSizesFifo->empty(); + return returnvalue::OK; } \ No newline at end of file