From 24d41e78632623d29daefcc9d6417b171f08bf82 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 19 Mar 2024 17:38:35 +0100 Subject: [PATCH 1/2] 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/2] 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;