introduced command message base and
command message IF
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
#include <framework/ipc/CommandMessage.h>
|
||||
|
||||
#include <framework/devicehandlers/DeviceHandlerMessage.h>
|
||||
#include <framework/health/HealthMessage.h>
|
||||
#include <framework/ipc/CommandMessage.h>
|
||||
#include <framework/memory/MemoryMessage.h>
|
||||
#include <framework/modes/ModeMessage.h>
|
||||
#include <framework/monitoring/MonitoringMessage.h>
|
||||
@ -8,82 +9,86 @@
|
||||
#include <framework/tmstorage/TmStoreMessage.h>
|
||||
#include <framework/parameters/ParameterMessage.h>
|
||||
|
||||
namespace messagetypes {
|
||||
// Implemented in config.
|
||||
void clearMissionMessage(CommandMessage* message);
|
||||
}
|
||||
|
||||
|
||||
CommandMessage::CommandMessage(MessageQueueMessage* receiverMessage):
|
||||
internalMessage(receiverMessage) {
|
||||
CommandMessageBase(receiverMessage) {
|
||||
if(receiverMessage == nullptr) {
|
||||
sif::error << "CommandMessage::CommandMessage: Don't pass a nullptr"
|
||||
" as the message queue message, pass the address of an actual"
|
||||
" message!" << std::endl;
|
||||
}
|
||||
internalMessage->messageSize = COMMAND_MESSAGE_SIZE;
|
||||
internalMessage->setMessageSize(COMMAND_MESSAGE_SIZE);
|
||||
setCommand(CMD_NONE);
|
||||
}
|
||||
|
||||
CommandMessage::CommandMessage(MessageQueueMessage* messageToSet,
|
||||
Command_t command, uint32_t parameter1, uint32_t parameter2):
|
||||
internalMessage(messageToSet) {
|
||||
CommandMessageBase(messageToSet) {
|
||||
if(messageToSet == nullptr) {
|
||||
sif::error << "CommandMessage::CommandMessage: Don't pass a nullptr"
|
||||
" as the message queue message, pass the address of an actual"
|
||||
" message!" << std::endl;
|
||||
}
|
||||
internalMessage->messageSize = COMMAND_MESSAGE_SIZE;
|
||||
internalMessage->setMessageSize(COMMAND_MESSAGE_SIZE);
|
||||
setCommand(command);
|
||||
setParameter(parameter1);
|
||||
setParameter2(parameter2);
|
||||
}
|
||||
|
||||
Command_t CommandMessage::getCommand() const {
|
||||
Command_t command;
|
||||
memcpy(&command, internalMessage->getData(), sizeof(Command_t));
|
||||
return command;
|
||||
}
|
||||
|
||||
uint8_t CommandMessage::getMessageType() const {
|
||||
return getCommand() >> 8 & 0xff;
|
||||
}
|
||||
|
||||
void CommandMessage::setCommand(Command_t command) {
|
||||
memcpy(internalMessage->getData(), &command, sizeof(command));
|
||||
}
|
||||
|
||||
uint32_t CommandMessage::getParameter() const {
|
||||
uint32_t parameter1;
|
||||
memcpy(¶meter1, internalMessage->getData() + sizeof(Command_t),
|
||||
sizeof(parameter1));
|
||||
memcpy(¶meter1, CommandMessageBase::getData(), sizeof(parameter1));
|
||||
return parameter1;
|
||||
}
|
||||
|
||||
void CommandMessage::setParameter(uint32_t parameter1) {
|
||||
memcpy(internalMessage->getData() + sizeof(Command_t),
|
||||
¶meter1, sizeof(parameter1));
|
||||
memcpy(CommandMessageBase::getData(), ¶meter1, sizeof(parameter1));
|
||||
}
|
||||
|
||||
uint32_t CommandMessage::getParameter2() const {
|
||||
uint32_t parameter2;
|
||||
memcpy(¶meter2, internalMessage->getData() + sizeof(Command_t)
|
||||
+ sizeof(uint32_t), sizeof(parameter2));
|
||||
memcpy(¶meter2, CommandMessageBase::getData() + sizeof(uint32_t),
|
||||
sizeof(parameter2));
|
||||
return parameter2;
|
||||
}
|
||||
|
||||
void CommandMessage::setParameter2(uint32_t parameter2) {
|
||||
memcpy(internalMessage-> getData() + sizeof(Command_t) + sizeof(uint32_t),
|
||||
¶meter2, sizeof(parameter2));
|
||||
memcpy(CommandMessageBase::getData() + sizeof(uint32_t), ¶meter2,
|
||||
sizeof(parameter2));
|
||||
}
|
||||
|
||||
size_t CommandMessage::getMinimumMessageSize() const {
|
||||
return COMMAND_MESSAGE_SIZE;
|
||||
}
|
||||
|
||||
size_t CommandMessage::getMaximumMessageSize() const {
|
||||
return MessageQueueMessage::MAX_MESSAGE_SIZE;
|
||||
}
|
||||
|
||||
bool CommandMessage::isClearedCommandMessage() {
|
||||
return getCommand() == CMD_NONE;
|
||||
}
|
||||
|
||||
void CommandMessage::setToUnknownCommand() {
|
||||
Command_t initialCommand = getCommand();
|
||||
clearCommandMessage();
|
||||
setReplyRejected(UNKNOWN_COMMAND, initialCommand);
|
||||
}
|
||||
|
||||
void CommandMessage::setReplyRejected(ReturnValue_t reason,
|
||||
Command_t initialCommand) {
|
||||
setCommand(REPLY_REJECTED);
|
||||
setParameter(reason);
|
||||
setParameter2(initialCommand);
|
||||
}
|
||||
|
||||
|
||||
void CommandMessage::clear() {
|
||||
clearCommandMessage();
|
||||
}
|
||||
|
||||
void CommandMessage::clearCommandMessage() {
|
||||
switch(getMessageType()){
|
||||
case messagetypes::MODE_COMMAND:
|
||||
switch(this->getMessageType()){
|
||||
case messagetypes::MODE_COMMAND:
|
||||
ModeMessage::clear(this);
|
||||
break;
|
||||
case messagetypes::HEALTH_COMMAND:
|
||||
@ -115,56 +120,3 @@ void CommandMessage::clearCommandMessage() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool CommandMessage::isClearedCommandMessage() {
|
||||
return getCommand() == CMD_NONE;
|
||||
}
|
||||
|
||||
size_t CommandMessage::getMinimumMessageSize() const {
|
||||
return COMMAND_MESSAGE_SIZE;
|
||||
}
|
||||
|
||||
void CommandMessage::setToUnknownCommand() {
|
||||
Command_t initialCommand = getCommand();
|
||||
clearCommandMessage();
|
||||
setReplyRejected(UNKNOWN_COMMAND, initialCommand);
|
||||
}
|
||||
|
||||
void CommandMessage::setReplyRejected(ReturnValue_t reason,
|
||||
Command_t initialCommand) {
|
||||
setCommand(REPLY_REJECTED);
|
||||
setParameter(reason);
|
||||
setParameter2(initialCommand);
|
||||
}
|
||||
|
||||
MessageQueueId_t CommandMessage::getSender() const {
|
||||
return internalMessage->getSender();
|
||||
}
|
||||
|
||||
uint8_t* CommandMessage::getBuffer() {
|
||||
return internalMessage->getBuffer();
|
||||
}
|
||||
|
||||
void CommandMessage::setSender(MessageQueueId_t setId) {
|
||||
internalMessage->setSender(setId);
|
||||
}
|
||||
|
||||
const uint8_t* CommandMessage::getBuffer() const {
|
||||
return internalMessage->getBuffer();
|
||||
}
|
||||
|
||||
uint8_t* CommandMessage::getData() {
|
||||
return internalMessage->getData();
|
||||
}
|
||||
|
||||
const uint8_t* CommandMessage::getData() const {
|
||||
return internalMessage->getData();
|
||||
}
|
||||
|
||||
size_t CommandMessage::getMessageSize() const {
|
||||
return COMMAND_MESSAGE_SIZE;
|
||||
}
|
||||
|
||||
size_t CommandMessage::getMaximumMessageSize() const {
|
||||
return MessageQueueMessage::MAX_MESSAGE_SIZE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user