diff --git a/linux/devices/devicedefinitions/PlocMemDumpActions.h b/linux/devices/devicedefinitions/PlocMemDumpActions.h new file mode 100644 index 00000000..d6aa7cfd --- /dev/null +++ b/linux/devices/devicedefinitions/PlocMemDumpActions.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include +#include + +class PlocMemoryDumper; + +FSFW_ENUM(PlocMemoryDumperCommands, DeviceCommandId_t, + ((DUMP_MRAM, 1 ,"Dump Memory"))) + +class DumpMemoryAction : public TemplateAction { + public: + DumpMemoryAction(PlocMemoryDumper * owner): TemplateAction(owner, PlocMemoryDumperCommands::DUMP_MRAM) {} + + //Memory is 512KiB + MinMaxParameter startAddress = MinMaxParameter::createMinMaxParameter(this, "Start Address", 0 , 0x80000); + MinMaxParameter endAddress = MinMaxParameter::createMinMaxParameter(this, "End Address", 0 , 0x80000); +}; diff --git a/linux/devices/ploc/PlocMemoryDumper.cpp b/linux/devices/ploc/PlocMemoryDumper.cpp index 568c6152..dc4ea160 100644 --- a/linux/devices/ploc/PlocMemoryDumper.cpp +++ b/linux/devices/ploc/PlocMemoryDumper.cpp @@ -40,34 +40,19 @@ ReturnValue_t PlocMemoryDumper::performOperation(uint8_t operationCode) { return HasReturnvaluesIF::RETURN_OK; } -ReturnValue_t PlocMemoryDumper::executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, - const uint8_t* data, size_t size) { +ReturnValue_t PlocMemoryDumper::executeAction(Action* action) { return action->handle(); } + +ReturnValue_t PlocMemoryDumper::handleAction(DumpMemoryAction* action) { if (state != State::IDLE) { return IS_BUSY; } - switch (actionId) { - case DUMP_MRAM: { - size_t deserializeSize = sizeof(mram.startAddress) + sizeof(mram.endAddress); - SerializeAdapter::deSerialize(&mram.startAddress, &data, &deserializeSize, - SerializeIF::Endianness::BIG); - SerializeAdapter::deSerialize(&mram.endAddress, &data, &deserializeSize, - SerializeIF::Endianness::BIG); - if (mram.endAddress > MAX_MRAM_ADDRESS) { - return MRAM_ADDRESS_TOO_HIGH; - } - if (mram.endAddress <= mram.startAddress) { - return MRAM_INVALID_ADDRESS_COMBINATION; - } - state = State::COMMAND_FIRST_MRAM_DUMP; - break; - } - default: { - sif::warning << "PlocMemoryDumper::executeAction: Received command with invalid action id" - << std::endl; - return INVALID_ACTION_ID; - } + if (action->endAddress <= action->startAddress) { + return MRAM_INVALID_ADDRESS_COMBINATION; } + mram.startAddress = action->startAddress; + mram.endAddress = action->endAddress; + state = State::COMMAND_FIRST_MRAM_DUMP; return EXECUTION_FINISHED; } diff --git a/linux/devices/ploc/PlocMemoryDumper.h b/linux/devices/ploc/PlocMemoryDumper.h index 559e7ec8..aa5f3617 100644 --- a/linux/devices/ploc/PlocMemoryDumper.h +++ b/linux/devices/ploc/PlocMemoryDumper.h @@ -2,6 +2,7 @@ #define MISSION_DEVICES_PLOCMEMORYDUMPER_H_ #include +#include #include #include "OBSWConfig.h" @@ -37,8 +38,9 @@ class PlocMemoryDumper : public SystemObject, virtual ~PlocMemoryDumper(); ReturnValue_t performOperation(uint8_t operationCode = 0) override; - ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, - const uint8_t* data, size_t size); + ReturnValue_t executeAction(Action* action) override; + ReturnValue_t handleAction(DumpMemoryAction* action); + ActionHelper *getActionHelper() override; MessageQueueId_t getCommandQueue() const; ReturnValue_t initialize() override; MessageQueueIF* getCommandQueuePtr() override; @@ -53,9 +55,6 @@ class PlocMemoryDumper : public SystemObject, static const uint8_t INTERFACE_ID = CLASS_ID::PLOC_MEMORY_DUMPER; - //! [EXPORT] : [COMMENT] The capacity of the MRAM amounts to 512 kB. Thus the maximum address must - //! not be higher than 0x7d000. - static const ReturnValue_t MRAM_ADDRESS_TOO_HIGH = MAKE_RETURN_CODE(0xA0); //! [EXPORT] : [COMMENT] The specified end address is lower than the start address static const ReturnValue_t MRAM_INVALID_ADDRESS_COMBINATION = MAKE_RETURN_CODE(0xA1); @@ -73,7 +72,6 @@ class PlocMemoryDumper : public SystemObject, // Maximum size of mram dump which can be retrieved with one command static const uint32_t MAX_MRAM_DUMP_SIZE = 100000; - static const uint32_t MAX_MRAM_ADDRESS = 0x7d000; MessageQueueIF* commandQueue = nullptr;