2021-07-14 10:50:44 +02:00
|
|
|
#include "fsfw/ipc/QueueFactory.h"
|
2020-10-30 13:31:07 +01:00
|
|
|
|
2020-09-05 20:18:52 +02:00
|
|
|
#include <cstring>
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
#include "fsfw/ipc/MessageQueueMessageIF.h"
|
|
|
|
#include "fsfw/ipc/MessageQueueSenderIF.h"
|
|
|
|
#include "fsfw/osal/host/MessageQueue.h"
|
|
|
|
#include "fsfw/serviceinterface/ServiceInterface.h"
|
2020-09-05 20:18:52 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
QueueFactory* QueueFactory::factoryInstance = nullptr;
|
2020-09-05 20:18:52 +02:00
|
|
|
|
|
|
|
ReturnValue_t MessageQueueSenderIF::sendMessage(MessageQueueId_t sendTo,
|
2022-02-02 10:29:30 +01:00
|
|
|
MessageQueueMessageIF* message,
|
|
|
|
MessageQueueId_t sentFrom, bool ignoreFault) {
|
|
|
|
return MessageQueue::sendMessageFromMessageQueue(sendTo, message, sentFrom, ignoreFault);
|
2020-09-05 20:18:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
QueueFactory* QueueFactory::instance() {
|
2022-02-02 10:29:30 +01:00
|
|
|
if (factoryInstance == nullptr) {
|
|
|
|
factoryInstance = new QueueFactory;
|
|
|
|
}
|
|
|
|
return factoryInstance;
|
2020-09-05 20:18:52 +02:00
|
|
|
}
|
|
|
|
|
2022-07-25 14:04:06 +02:00
|
|
|
QueueFactory::QueueFactory() = default;
|
2020-09-05 20:18:52 +02:00
|
|
|
|
2022-07-25 14:04:06 +02:00
|
|
|
QueueFactory::~QueueFactory() = default;
|
2020-09-05 20:18:52 +02:00
|
|
|
|
2022-03-22 17:49:22 +01:00
|
|
|
MessageQueueIF* QueueFactory::createMessageQueue(uint32_t messageDepth, size_t maxMessageSize,
|
|
|
|
MqArgs* args) {
|
2022-02-02 10:29:30 +01:00
|
|
|
// A thread-safe queue can be implemented by using a combination
|
|
|
|
// of std::queue and std::mutex. This uses dynamic memory allocation
|
|
|
|
// which could be alleviated by using a custom allocator, external library
|
|
|
|
// (etl::queue) or simply using std::queue, we're on a host machine anyway.
|
2022-03-22 17:49:22 +01:00
|
|
|
return new MessageQueue(messageDepth, maxMessageSize, args);
|
2020-09-05 20:18:52 +02:00
|
|
|
}
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
void QueueFactory::deleteMessageQueue(MessageQueueIF* queue) { delete queue; }
|