From d367baa42c372a40c0c38bf35994a980a0400d2b Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Wed, 24 Aug 2022 18:47:25 +0200 Subject: [PATCH 1/4] stupid idea --- src/fsfw/devicehandlers/DeviceHandlerBase.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fsfw/devicehandlers/DeviceHandlerBase.h b/src/fsfw/devicehandlers/DeviceHandlerBase.h index 83dd4245..bb93a7db 100644 --- a/src/fsfw/devicehandlers/DeviceHandlerBase.h +++ b/src/fsfw/devicehandlers/DeviceHandlerBase.h @@ -339,7 +339,7 @@ class DeviceHandlerBase : public DeviceHandlerIF, */ virtual ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData, - size_t commandDataLen) {exit(0);} + size_t commandDataLen) {return HasReturnvaluesIF::RETURN_FAILED;} /* Reply handling */ /** From 3ffdc0d31f2ac9a3674857b62892d4e5d69ce12c Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Thu, 25 Aug 2022 22:29:20 +0200 Subject: [PATCH 2/4] Mode introspection --- src/fsfw/introspection/EnumIF.h | 3 ++- src/fsfw/modes/HasModesIF.h | 2 ++ src/fsfw/modes/ModeDefinitionHelper.h | 33 +++++++++++++++++++++++++++ src/fsfw/modes/ModeHelper.cpp | 30 ++++++++++++++++++++++++ src/fsfw/modes/ModeHelper.h | 6 +++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/fsfw/modes/ModeDefinitionHelper.h diff --git a/src/fsfw/introspection/EnumIF.h b/src/fsfw/introspection/EnumIF.h index 64040415..07f54258 100644 --- a/src/fsfw/introspection/EnumIF.h +++ b/src/fsfw/introspection/EnumIF.h @@ -1,10 +1,11 @@ #pragma once -#include #include +#include class EnumIF { public: + virtual ~EnumIF() {} virtual int64_t getValue() const = 0; virtual bool isValid() const = 0; virtual size_t getSize() const = 0; diff --git a/src/fsfw/modes/HasModesIF.h b/src/fsfw/modes/HasModesIF.h index 0ebe77d8..56adc1e1 100644 --- a/src/fsfw/modes/HasModesIF.h +++ b/src/fsfw/modes/HasModesIF.h @@ -6,6 +6,7 @@ #include "../events/Event.h" #include "../returnvalues/HasReturnvaluesIF.h" #include "ModeHelper.h" +#include "ModeDefinitionHelper.h" #include "ModeMessage.h" class HasModesIF { @@ -48,6 +49,7 @@ class HasModesIF { virtual ~HasModesIF() {} virtual MessageQueueId_t getCommandQueue() const = 0; + virtual ModeDefinitionHelper getModeDefinitionHelper()= 0; virtual void getMode(Mode_t *mode, Submode_t *submode) = 0; protected: diff --git a/src/fsfw/modes/ModeDefinitionHelper.h b/src/fsfw/modes/ModeDefinitionHelper.h new file mode 100644 index 00000000..2548dff5 --- /dev/null +++ b/src/fsfw/modes/ModeDefinitionHelper.h @@ -0,0 +1,33 @@ +#pragma once + +#include + +class ModeDefinitionHelper { + public: +#ifdef FSFW_INTROSPECTION + ModeDefinitionHelper(EnumIF *mode, EnumIF *submode) : mode(mode), submode(submode) {} +#else + ModeDefinitionHelper(void *mode, void *submode) {}; +#endif + template + static ModeDefinitionHelper create() { +#ifdef FSFW_INTROSPECTION + EnumIF *mode = new Mode(); + EnumIF *submode = new Submode(); + return ModeDefinitionHelper(mode, submode); +#else + return ModeDefinitionHelper(nullptr, nullptr); +#endif + } + + void free() { +#ifdef FSFW_INTROSPECTION + delete mode; + delete submode; +#endif + } +#ifdef FSFW_INTROSPECTION + EnumIF *mode; + EnumIF *submode; +#endif +}; \ No newline at end of file diff --git a/src/fsfw/modes/ModeHelper.cpp b/src/fsfw/modes/ModeHelper.cpp index 2ea392ab..ea5926c8 100644 --- a/src/fsfw/modes/ModeHelper.cpp +++ b/src/fsfw/modes/ModeHelper.cpp @@ -106,3 +106,33 @@ bool ModeHelper::isTimedOut() { return countdown.hasTimedOut(); } bool ModeHelper::isForced() { return forced; } void ModeHelper::setForced(bool forced) { this->forced = forced; } + +#ifdef FSFW_INTROSPECTION + std::vector> ModeHelper::getModes() const override { + std::vector> modeVector; + auto modeDefinitionHelper = owner->getModeDefinitionHelper(); + EnumIF *mode = modeDefinitionHelper.mode; + for (size_t i = 0; i < mode->getSize(); i++) { + modeVector.push_back( + std::pair(mode->getElements()[i], mode->getDescriptions()[i])); + } + modeDefinitionHelper.free(); + return modeVector; + } + + std::vector> ModeHelper::getSubmodes(Mode_t mode) const override { + auto modeDefinitionHelper = owner->getModeDefinitionHelper(); + EnumIF *submode = modeDefinitionHelper.submode; + std::vector> submodeVector; + for (size_t i = 0; i < submode->getSize(); i++) { + uint32_t ignored; + if (owner->checkModeCommand(mode, submode->getElements()[i], &ignored) == + HasReturnvaluesIF::RETURN_OK) { + submodeVector.push_back(std::pair(submode->getElements()[i], + submode->getDescriptions()[i])); + } + } + modeDefinitionHelper.free(); + return submodeVector; + } +#endif \ No newline at end of file diff --git a/src/fsfw/modes/ModeHelper.h b/src/fsfw/modes/ModeHelper.h index 4d0479db..63583366 100644 --- a/src/fsfw/modes/ModeHelper.h +++ b/src/fsfw/modes/ModeHelper.h @@ -39,6 +39,12 @@ class ModeHelper { void setForced(bool forced); + #ifdef FSFW_INTROSPECTION + std::vector> getModes() const; + + std::vector> getSubmodes(Mode_t mode) const; +#endif + protected: HasModesIF *owner; MessageQueueId_t parentQueueId = MessageQueueIF::NO_QUEUE; From 3260a0354464a92eec22645d9ef508aa0b07b7d4 Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Thu, 25 Aug 2022 22:37:41 +0200 Subject: [PATCH 3/4] forgot include --- src/fsfw/modes/ModeHelper.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/fsfw/modes/ModeHelper.h b/src/fsfw/modes/ModeHelper.h index 63583366..579498ae 100644 --- a/src/fsfw/modes/ModeHelper.h +++ b/src/fsfw/modes/ModeHelper.h @@ -1,6 +1,8 @@ #ifndef FSFW_MODES_MODEHELPER_H_ #define FSFW_MODES_MODEHELPER_H_ +#include + #include "ModeMessage.h" #include "fsfw/ipc/MessageQueueIF.h" #include "fsfw/returnvalues/HasReturnvaluesIF.h" @@ -39,7 +41,7 @@ class ModeHelper { void setForced(bool forced); - #ifdef FSFW_INTROSPECTION +#ifdef FSFW_INTROSPECTION std::vector> getModes() const; std::vector> getSubmodes(Mode_t mode) const; From 3f8f17a66ef1e0b72ade4ad899a708aa31e094e5 Mon Sep 17 00:00:00 2001 From: Ulrich Mohr Date: Thu, 25 Aug 2022 22:39:21 +0200 Subject: [PATCH 4/4] copy paste fail --- src/fsfw/modes/ModeHelper.cpp | 50 +++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/fsfw/modes/ModeHelper.cpp b/src/fsfw/modes/ModeHelper.cpp index ea5926c8..10f64ee1 100644 --- a/src/fsfw/modes/ModeHelper.cpp +++ b/src/fsfw/modes/ModeHelper.cpp @@ -4,7 +4,7 @@ #include "fsfw/modes/HasModesIF.h" #include "fsfw/serviceinterface/ServiceInterface.h" -ModeHelper::ModeHelper(HasModesIF* owner) +ModeHelper::ModeHelper(HasModesIF *owner) : commandedMode(HasModesIF::MODE_OFF), commandedSubmode(HasModesIF::SUBMODE_NONE), owner(owner), @@ -12,7 +12,7 @@ ModeHelper::ModeHelper(HasModesIF* owner) ModeHelper::~ModeHelper() {} -ReturnValue_t ModeHelper::handleModeCommand(CommandMessage* command) { +ReturnValue_t ModeHelper::handleModeCommand(CommandMessage *command) { CommandMessage reply; Mode_t mode; Submode_t submode; @@ -108,31 +108,31 @@ bool ModeHelper::isForced() { return forced; } void ModeHelper::setForced(bool forced) { this->forced = forced; } #ifdef FSFW_INTROSPECTION - std::vector> ModeHelper::getModes() const override { - std::vector> modeVector; - auto modeDefinitionHelper = owner->getModeDefinitionHelper(); - EnumIF *mode = modeDefinitionHelper.mode; - for (size_t i = 0; i < mode->getSize(); i++) { - modeVector.push_back( - std::pair(mode->getElements()[i], mode->getDescriptions()[i])); - } - modeDefinitionHelper.free(); - return modeVector; +std::vector> ModeHelper::getModes() const { + std::vector> modeVector; + auto modeDefinitionHelper = owner->getModeDefinitionHelper(); + EnumIF *mode = modeDefinitionHelper.mode; + for (size_t i = 0; i < mode->getSize(); i++) { + modeVector.push_back( + std::pair(mode->getElements()[i], mode->getDescriptions()[i])); } + modeDefinitionHelper.free(); + return modeVector; +} - std::vector> ModeHelper::getSubmodes(Mode_t mode) const override { - auto modeDefinitionHelper = owner->getModeDefinitionHelper(); - EnumIF *submode = modeDefinitionHelper.submode; - std::vector> submodeVector; - for (size_t i = 0; i < submode->getSize(); i++) { - uint32_t ignored; - if (owner->checkModeCommand(mode, submode->getElements()[i], &ignored) == - HasReturnvaluesIF::RETURN_OK) { - submodeVector.push_back(std::pair(submode->getElements()[i], - submode->getDescriptions()[i])); - } +std::vector> ModeHelper::getSubmodes(Mode_t mode) const { + auto modeDefinitionHelper = owner->getModeDefinitionHelper(); + EnumIF *submode = modeDefinitionHelper.submode; + std::vector> submodeVector; + for (size_t i = 0; i < submode->getSize(); i++) { + uint32_t ignored; + if (owner->checkModeCommand(mode, submode->getElements()[i], &ignored) == + HasReturnvaluesIF::RETURN_OK) { + submodeVector.push_back(std::pair(submode->getElements()[i], + submode->getDescriptions()[i])); } - modeDefinitionHelper.free(); - return submodeVector; } + modeDefinitionHelper.free(); + return submodeVector; +} #endif \ No newline at end of file