diff --git a/src/fsfw/container/SharedRingBuffer.cpp b/src/fsfw/container/SharedRingBuffer.cpp index 111019e0..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" @@ -15,7 +16,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; } @@ -45,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;