fsfw/src/fsfw/ipc/MessageQueueMessage.cpp

82 lines
2.6 KiB
C++
Raw Normal View History

2021-07-13 20:22:54 +02:00
#include "fsfw/ipc/MessageQueueMessage.h"
2020-09-04 14:59:59 +02:00
#include <cstring>
2022-02-02 10:29:30 +01:00
#include "fsfw/globalfunctions/arrayprinter.h"
#include "fsfw/serviceinterface/ServiceInterface.h"
MessageQueueMessage::MessageQueueMessage() : messageSize(getMinimumMessageSize()) {
memset(this->internalBuffer, 0, sizeof(this->internalBuffer));
2020-09-04 14:59:59 +02:00
}
2022-02-02 10:29:30 +01:00
MessageQueueMessage::MessageQueueMessage(uint8_t* data, size_t size)
: messageSize(MessageQueueMessage::HEADER_SIZE + size) {
if (size <= MessageQueueMessage::MAX_DATA_SIZE) {
std::memcpy(internalBuffer + MessageQueueMessage::HEADER_SIZE, data, size);
this->messageSize = MessageQueueMessage::HEADER_SIZE + size;
2022-02-02 10:29:30 +01:00
} else {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::warning << "MessageQueueMessage: Passed size larger than maximum"
"allowed size! Setting content to 0"
<< std::endl;
#endif
2022-02-02 10:29:30 +01:00
memset(this->internalBuffer, 0, sizeof(this->internalBuffer));
this->messageSize = MessageQueueMessage::HEADER_SIZE;
2022-02-02 10:29:30 +01:00
}
2020-09-04 14:59:59 +02:00
}
MessageQueueMessage::~MessageQueueMessage() = default;
2020-09-04 14:59:59 +02:00
2022-02-02 10:29:30 +01:00
const uint8_t* MessageQueueMessage::getBuffer() const { return this->internalBuffer; }
2020-09-04 14:59:59 +02:00
2022-02-02 10:29:30 +01:00
uint8_t* MessageQueueMessage::getBuffer() { return this->internalBuffer; }
2020-09-04 14:59:59 +02:00
const uint8_t* MessageQueueMessage::getData() const {
return this->internalBuffer + MessageQueueMessage::HEADER_SIZE;
2020-09-04 14:59:59 +02:00
}
uint8_t* MessageQueueMessage::getData() {
return this->internalBuffer + MessageQueueMessage::HEADER_SIZE;
}
2020-09-04 14:59:59 +02:00
MessageQueueId_t MessageQueueMessage::getSender() const {
2022-02-02 10:29:30 +01:00
MessageQueueId_t temp_id;
memcpy(&temp_id, this->internalBuffer, sizeof(MessageQueueId_t));
return temp_id;
2020-09-04 14:59:59 +02:00
}
void MessageQueueMessage::setSender(MessageQueueId_t setId) {
2022-02-02 10:29:30 +01:00
memcpy(this->internalBuffer, &setId, sizeof(MessageQueueId_t));
2020-09-04 14:59:59 +02:00
}
void MessageQueueMessage::print(bool printWholeMessage) {
2021-01-03 14:16:52 +01:00
#if FSFW_CPP_OSTREAM_ENABLED == 1
2022-02-02 10:29:30 +01:00
sif::debug << "MessageQueueMessage content: " << std::endl;
#endif
2022-02-02 10:29:30 +01:00
if (printWholeMessage) {
arrayprinter::print(getData(), getMaximumMessageSize());
} else {
arrayprinter::print(getData(), getMessageSize());
}
2020-09-04 14:59:59 +02:00
}
void MessageQueueMessage::clear() {
memset(this->getBuffer(), 0, MessageQueueMessage::MAX_MESSAGE_SIZE);
}
2020-09-04 14:59:59 +02:00
2022-02-02 10:29:30 +01:00
size_t MessageQueueMessage::getMessageSize() const { return this->messageSize; }
2020-09-04 14:59:59 +02:00
void MessageQueueMessage::setMessageSize(size_t messageSize_) { this->messageSize = messageSize_; }
2020-09-04 14:59:59 +02:00
size_t MessageQueueMessage::getMinimumMessageSize() const {
return MessageQueueMessage::MIN_MESSAGE_SIZE;
}
2020-09-04 14:59:59 +02:00
size_t MessageQueueMessage::getMaximumMessageSize() const {
return MessageQueueMessage::MAX_MESSAGE_SIZE;
}
2021-04-08 15:39:23 +02:00
size_t MessageQueueMessage::getMaximumDataSize() const {
return MessageQueueMessage::MAX_DATA_SIZE;
}