2021-07-13 20:22:54 +02:00
|
|
|
#include "fsfw/container/SharedRingBuffer.h"
|
2022-02-02 10:29:30 +01:00
|
|
|
|
2021-07-13 20:22:54 +02:00
|
|
|
#include "fsfw/ipc/MutexFactory.h"
|
|
|
|
#include "fsfw/ipc/MutexGuard.h"
|
2020-08-18 11:25:57 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
SharedRingBuffer::SharedRingBuffer(object_id_t objectId, const size_t size, bool overwriteOld,
|
|
|
|
size_t maxExcessBytes)
|
|
|
|
: SystemObject(objectId), SimpleRingBuffer(size, overwriteOld, maxExcessBytes) {
|
|
|
|
mutex = MutexFactory::instance()->createMutex();
|
2020-08-18 11:25:57 +02:00
|
|
|
}
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
SharedRingBuffer::SharedRingBuffer(object_id_t objectId, uint8_t* buffer, const size_t size,
|
|
|
|
bool overwriteOld, size_t maxExcessBytes)
|
|
|
|
: SystemObject(objectId), SimpleRingBuffer(buffer, size, overwriteOld, maxExcessBytes) {
|
|
|
|
mutex = MutexFactory::instance()->createMutex();
|
2021-04-11 21:54:48 +02:00
|
|
|
}
|
2020-09-22 16:22:37 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
SharedRingBuffer::~SharedRingBuffer() { MutexFactory::instance()->deleteMutex(mutex); }
|
2020-09-22 16:22:37 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
void SharedRingBuffer::setToUseReceiveSizeFIFO(size_t fifoDepth) { this->fifoDepth = fifoDepth; }
|
2020-08-18 11:25:57 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t SharedRingBuffer::lockRingBufferMutex(MutexIF::TimeoutType timeoutType,
|
|
|
|
dur_millis_t timeout) {
|
|
|
|
return mutex->lockMutex(timeoutType, timeout);
|
2020-08-18 11:25:57 +02:00
|
|
|
}
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t SharedRingBuffer::unlockRingBufferMutex() { return mutex->unlockMutex(); }
|
2020-09-22 16:22:37 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
MutexIF* SharedRingBuffer::getMutexHandle() const { return mutex; }
|
2020-09-22 16:22:37 +02:00
|
|
|
|
|
|
|
ReturnValue_t SharedRingBuffer::initialize() {
|
2022-02-02 10:29:30 +01:00
|
|
|
if (fifoDepth > 0) {
|
|
|
|
receiveSizesFIFO = new DynamicFIFO<size_t>(fifoDepth);
|
|
|
|
}
|
|
|
|
return SystemObject::initialize();
|
2020-09-22 16:22:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
DynamicFIFO<size_t>* SharedRingBuffer::getReceiveSizesFIFO() {
|
2022-02-02 10:29:30 +01:00
|
|
|
if (receiveSizesFIFO == nullptr) {
|
|
|
|
// Configuration error.
|
2021-01-03 14:16:52 +01:00
|
|
|
#if FSFW_CPP_OSTREAM_ENABLED == 1
|
2022-02-02 10:29:30 +01:00
|
|
|
sif::warning << "SharedRingBuffer::getReceiveSizesFIFO: Ring buffer"
|
|
|
|
<< " was not configured to have sizes FIFO, returning nullptr!" << std::endl;
|
2021-01-03 13:58:18 +01:00
|
|
|
#endif
|
2022-02-02 10:29:30 +01:00
|
|
|
}
|
|
|
|
return receiveSizesFIFO;
|
2020-09-22 16:22:37 +02:00
|
|
|
}
|