diff --git a/src/fsfw/controller/ControllerBase.cpp b/src/fsfw/controller/ControllerBase.cpp index 2c6f61e4a..dba76e0ac 100644 --- a/src/fsfw/controller/ControllerBase.cpp +++ b/src/fsfw/controller/ControllerBase.cpp @@ -12,7 +12,10 @@ ControllerBase::ControllerBase(object_id_t setObjectId, object_id_t parentId, mode(MODE_OFF), submode(SUBMODE_NONE), modeHelper(this), - healthHelper(this, setObjectId), actionHelper(this, commandQueue), datapoolHelper(this), housekeepingHelper(this) { + healthHelper(this, setObjectId), + actionHelper(this, commandQueue), + datapoolHelper(this), + housekeepingHelper(this) { commandQueue = QueueFactory::instance()->createMessageQueue(commandQueueDepth); } @@ -45,7 +48,7 @@ ReturnValue_t ControllerBase::initialize() { return result; } - result = actionHelper.initialize(); + result = actionHelper.initialize(commandQueue); if (result != returnvalue::OK) { return result; } @@ -120,9 +123,14 @@ ReturnValue_t ControllerBase::performOperation(uint8_t opCode) { return returnvalue::OK; } -const ModeHelper * ControllerBase::getModeHelper() const { - return &modeHelper; -} +const ModeHelper* ControllerBase::getModeHelper() const { return &modeHelper; } + +ActionHelper* ControllerBase::getActionHelper() { return &actionHelper; } + +ReturnValue_t ControllerBase::executeAction(Action* action) { return action->handle(); } + +DatapoolHelper* ControllerBase::getDatapoolHelper() { return &datapoolHelper; } +HousekeepingHelper* ControllerBase::getHousekeepingHelper() { return &housekeepingHelper; } void ControllerBase::modeChanged(Mode_t mode_, Submode_t submode_) {} diff --git a/src/fsfw/datapool/Dataset.cpp b/src/fsfw/datapool/Dataset.cpp index 725332ff6..9d8d9cf09 100644 --- a/src/fsfw/datapool/Dataset.cpp +++ b/src/fsfw/datapool/Dataset.cpp @@ -12,6 +12,7 @@ Dataset::Dataset(HasDatapoolIF* owner, const EnumIF &id, bool allowUserCommit) : HousekeepingSet(owner, id), allocated(true), allowUserCommit(allowUserCommit) { this->owner.pointer = owner; + owner->getDatapoolHelper()->registerSet(this); mutex = MutexFactory::instance()->createMutex(); } @@ -23,6 +24,7 @@ Dataset::Dataset(uint32_t owner_id, const EnumIF &id) Dataset::Dataset(HasDatapoolIF* owner, HousekeepingSetId_t id, bool allowUserCommit) : HousekeepingSet(owner, id), allocated(true), allowUserCommit(allowUserCommit) { this->owner.pointer = owner; + owner->getDatapoolHelper()->registerSet(this); mutex = MutexFactory::instance()->createMutex(); } @@ -92,10 +94,12 @@ ReturnValue_t Dataset::initialize() { } HasDatapoolIF* actualOwner = ObjectManager::instance()->get(owner.id); if (actualOwner == nullptr) { + puts("owner type"); return returnvalue::FAILED; } const Dataset* theOtherSet = actualOwner->getDatapoolHelper()->getDataSet(this->id); if (theOtherSet == nullptr) { + puts("no set"); return returnvalue::FAILED; } diff --git a/src/fsfw/datapool/DatasetEntry.h b/src/fsfw/datapool/DatasetEntry.h index 29a3d59d6..2f3ee433e 100644 --- a/src/fsfw/datapool/DatasetEntry.h +++ b/src/fsfw/datapool/DatasetEntry.h @@ -48,15 +48,15 @@ class DatasetEntry : public Parameter, public DatasetEntryIF { virtual bool getValid() { return valid; } - T value; //TODO can this be private? + //T value; //TODO can this be private? protected: virtual void commit() { - *storedValue = value; + *storedValue = Parameter::value; *storedValid = valid; } virtual void read() { - value = *storedValue; + Parameter::value = *storedValue; valid = *storedValid; } @@ -70,7 +70,7 @@ class DatasetEntry : public Parameter, public DatasetEntryIF { this->storedValid = theOther->storedValid; } - virtual bool changed() { return ((value != *storedValue) || (valid != *storedValid)); } + virtual bool changed() { return ((Parameter::value != *storedValue) || (valid != *storedValid)); } private: diff --git a/src/fsfw/introspection/Parameter.h b/src/fsfw/introspection/Parameter.h index 5a5eb85f0..b19b4d1ca 100644 --- a/src/fsfw/introspection/Parameter.h +++ b/src/fsfw/introspection/Parameter.h @@ -1,15 +1,13 @@ #pragma once +#include +#include #include #include "HasTmTcParametersIF.h" -#include -#include #include "ParameterIF.h" // TODO: ifdef introspection stuff - - template class Parameter : public ParameterIF { protected: @@ -36,11 +34,9 @@ class Parameter : public ParameterIF { return enumHelper::value>::isValueValid(&value); } - operator T(){ - return value; - } + operator T() { return value; } - Parameter& operator =(const T& newValue){ + Parameter &operator=(const T &newValue) { value = newValue; return *this; } @@ -62,7 +58,8 @@ class Parameter : public ParameterIF { ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size, Endianness streamEndianness) override { - return SerializeAdapter::deSerialize(&value, buffer, size, streamEndianness); + ReturnValue_t result = SerializeAdapter::deSerialize(&value, buffer, size, streamEndianness); + return result; } #ifdef FSFW_INTROSPECTION diff --git a/src/fsfw/modes/ModeHelper.cpp b/src/fsfw/modes/ModeHelper.cpp index e98b8b574..fa6b9abff 100644 --- a/src/fsfw/modes/ModeHelper.cpp +++ b/src/fsfw/modes/ModeHelper.cpp @@ -110,29 +110,29 @@ void ModeHelper::setForced(bool forced) { this->forced = forced; } #ifdef FSFW_INTROSPECTION 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(); + // 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 { - auto modeDefinitionHelper = owner->getModeDefinitionHelper(); - EnumIF *submode = modeDefinitionHelper.submode; + // 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) == - returnvalue::OK) { - submodeVector.push_back(std::pair(submode->getElements()[i], - submode->getDescriptions()[i])); - } - } - modeDefinitionHelper.free(); + // for (size_t i = 0; i < submode->getSize(); i++) { + // uint32_t ignored; + // if (owner->checkModeCommand(mode, submode->getElements()[i], &ignored) == + // returnvalue::OK) { + // submodeVector.push_back(std::pair(submode->getElements()[i], + // submode->getDescriptions()[i])); + // } + // } + // modeDefinitionHelper.free(); return submodeVector; } #endif \ No newline at end of file