fsfw/src/fsfw/action/ActionMessage.cpp

77 lines
2.2 KiB
C++
Raw Normal View History

2021-07-13 20:22:54 +02:00
#include "fsfw/action.h"
#include "fsfw/objectmanager/ObjectManager.h"
#include "fsfw/storagemanager/StorageManagerIF.h"
2022-07-04 11:44:26 +02:00
ActionMessage::ActionMessage() = default;
2022-07-04 11:44:26 +02:00
ActionMessage::~ActionMessage() = default;
void ActionMessage::setCommand(CommandMessage* message, ActionId_t fid,
2022-02-02 10:29:30 +01:00
store_address_t parameters) {
message->setCommand(EXECUTE_ACTION);
message->setParameter(fid);
message->setParameter2(parameters.raw);
}
ActionId_t ActionMessage::getActionId(const CommandMessage* message) {
2022-02-02 10:29:30 +01:00
return ActionId_t(message->getParameter());
}
store_address_t ActionMessage::getStoreId(const CommandMessage* message) {
2022-02-02 10:29:30 +01:00
store_address_t temp;
temp.raw = message->getParameter2();
return temp;
}
void ActionMessage::setStepReply(CommandMessage* message, ActionId_t fid, uint8_t step,
2022-02-02 10:29:30 +01:00
ReturnValue_t result) {
2022-08-16 01:08:26 +02:00
if (result == returnvalue::OK) {
2022-02-02 10:29:30 +01:00
message->setCommand(STEP_SUCCESS);
} else {
message->setCommand(STEP_FAILED);
}
message->setParameter(fid);
message->setParameter2((step << 16) + result);
}
uint8_t ActionMessage::getStep(const CommandMessage* message) {
2022-02-02 10:29:30 +01:00
return uint8_t((message->getParameter2() >> 16) & 0xFF);
}
ReturnValue_t ActionMessage::getReturnCode(const CommandMessage* message) {
2022-02-02 10:29:30 +01:00
return message->getParameter2() & 0xFFFF;
}
void ActionMessage::setDataReply(CommandMessage* message, ActionId_t actionId,
2022-02-02 10:29:30 +01:00
store_address_t data) {
message->setCommand(DATA_REPLY);
message->setParameter(actionId);
message->setParameter2(data.raw);
}
2022-02-02 10:29:30 +01:00
void ActionMessage::setCompletionReply(CommandMessage* message, ActionId_t fid, bool success,
ReturnValue_t result) {
if (success) {
message->setCommand(COMPLETION_SUCCESS);
} else {
message->setCommand(COMPLETION_FAILED);
}
message->setParameter(fid);
message->setParameter2(result);
}
void ActionMessage::clear(CommandMessage* message) {
2022-02-02 10:29:30 +01:00
switch (message->getCommand()) {
case EXECUTE_ACTION:
case DATA_REPLY: {
2022-07-04 11:44:26 +02:00
auto* ipcStore = ObjectManager::instance()->get<StorageManagerIF>(objects::IPC_STORE);
if (ipcStore != nullptr) {
2022-02-02 10:29:30 +01:00
ipcStore->deleteData(getStoreId(message));
}
break;
}
default:
2022-02-02 10:29:30 +01:00
break;
}
}