diff --git a/mission/CMakeLists.txt b/mission/CMakeLists.txt index 7d858415..e23af51f 100644 --- a/mission/CMakeLists.txt +++ b/mission/CMakeLists.txt @@ -6,6 +6,7 @@ add_subdirectory(memory) add_subdirectory(tmtc) add_subdirectory(system) add_subdirectory(com) +add_subdirectory(acs) add_subdirectory(csp) add_subdirectory(cfdp) add_subdirectory(config) diff --git a/mission/acs/CMakeLists.txt b/mission/acs/CMakeLists.txt new file mode 100644 index 00000000..e69de29b diff --git a/mission/com/CMakeLists.txt b/mission/com/CMakeLists.txt index 1eb05a6f..14a45987 100644 --- a/mission/com/CMakeLists.txt +++ b/mission/com/CMakeLists.txt @@ -1,4 +1,4 @@ target_sources( ${LIB_EIVE_MISSION} PRIVATE SyrlinksHandler.cpp ComSubsystem.cpp SyrlinksFdir.cpp comModeTree.cpp - CcsdsIpCoreHandler.cpp) + CcsdsIpCoreHandler.cpp SyrlinksAssembly.cpp) diff --git a/mission/com/SyrlinksAssembly.cpp b/mission/com/SyrlinksAssembly.cpp new file mode 100644 index 00000000..b5e50924 --- /dev/null +++ b/mission/com/SyrlinksAssembly.cpp @@ -0,0 +1,57 @@ +#include "SyrlinksAssembly.h" + +#include + +using namespace returnvalue; + +SyrlinksAssembly::SyrlinksAssembly(object_id_t objectId) : AssemblyBase(objectId) { + ModeListEntry entry; + entry.setObject(objects::SYRLINKS_HANDLER); + entry.setMode(MODE_OFF); + entry.setSubmode(SUBMODE_NONE); + commandTable.insert(entry); +} + +ReturnValue_t SyrlinksAssembly::commandChildren(Mode_t mode, Submode_t submode) { + commandTable[0].setMode(mode); + commandTable[0].setSubmode(submode); + HybridIterator iter(commandTable.begin(), commandTable.end()); + if (recoveryState == RECOVERY_IDLE) { + ReturnValue_t result = checkAndHandleHealthState(mode, submode); + if (result == NEED_TO_CHANGE_HEALTH) { + return OK; + } + } + executeTable(iter); + return returnvalue::OK; +} + +ReturnValue_t SyrlinksAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wantedSubmode) { + if (childrenMap[objects::SYRLINKS_HANDLER].mode != wantedMode) { + return NOT_ENOUGH_CHILDREN_IN_CORRECT_STATE; + } + return returnvalue::OK; +} + +ReturnValue_t SyrlinksAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) { + if (mode == MODE_ON or mode == DeviceHandlerIF::MODE_NORMAL or mode == MODE_OFF) { + return returnvalue::OK; + } + return returnvalue::FAILED; +} + +ReturnValue_t SyrlinksAssembly::checkAndHandleHealthState(Mode_t deviceMode, + Submode_t deviceSubmode) { + HealthState health = healthHelper.healthTable->getHealth(objects::SYRLINKS_HANDLER); + if (health == FAULTY or health == PERMANENT_FAULTY) { + overwriteDeviceHealth(objects::SYRLINKS_HANDLER, health); + return NEED_TO_CHANGE_HEALTH; + } else if (health == EXTERNAL_CONTROL) { + modeHelper.setForced(true); + } + return OK; +} + +void SyrlinksAssembly::handleChildrenLostMode(ReturnValue_t result) { + startTransition(mode, submode); +} diff --git a/mission/com/SyrlinksAssembly.h b/mission/com/SyrlinksAssembly.h new file mode 100644 index 00000000..314474d3 --- /dev/null +++ b/mission/com/SyrlinksAssembly.h @@ -0,0 +1,20 @@ +#ifndef MISSION_SYSTEM_OBJECTS_SYRLINKSASSEMBLY_H_ +#define MISSION_SYSTEM_OBJECTS_SYRLINKSASSEMBLY_H_ +#include + +class SyrlinksAssembly : public AssemblyBase { + public: + SyrlinksAssembly(object_id_t objectId); + + private: + FixedArrayList commandTable; + + ReturnValue_t commandChildren(Mode_t mode, Submode_t submode) override; + ReturnValue_t checkChildrenStateOn(Mode_t wantedMode, Submode_t wantedSubmode) override; + ReturnValue_t isModeCombinationValid(Mode_t mode, Submode_t submode) override; + void handleChildrenLostMode(ReturnValue_t result) override; + + ReturnValue_t checkAndHandleHealthState(Mode_t deviceMode, Submode_t deviceSubmode); +}; + +#endif /* MISSION_SYSTEM_OBJECTS_SYRLINKSASSEMBLY_H_ */ diff --git a/mission/mission.mk b/mission/mission.mk deleted file mode 100644 index 028b9c13..00000000 --- a/mission/mission.mk +++ /dev/null @@ -1,17 +0,0 @@ -# add main and others -CXXSRC += $(wildcard $(CURRENTPATH)/*.cpp) -CSRC += $(wildcard $(CURRENTPATH)/*.c) - -CSRC += $(wildcard $(CURRENTPATH)/core/*.c) -CXXSRC += $(wildcard $(CURRENTPATH)/core/*.cpp) - -CXXSRC += $(wildcard $(CURRENTPATH)/devices/*.cpp) -CSRC += $(wildcard $(CURRENTPATH)/devices/*.c) - -CXXSRC += $(wildcard $(CURRENTPATH)/utility/*.cpp) -CSRC += $(wildcard $(CURRENTPATH)/utility/*.c) - -CXXSRC += $(wildcard $(CURRENTPATH)/test/*.cpp) -CSRC += $(wildcard $(CURRENTPATH)/test/*.c) - - diff --git a/mission/system/objects/CMakeLists.txt b/mission/system/objects/CMakeLists.txt index 544522f9..bc53b600 100644 --- a/mission/system/objects/CMakeLists.txt +++ b/mission/system/objects/CMakeLists.txt @@ -7,7 +7,6 @@ target_sources( PayloadSubsystem.cpp AcsBoardAssembly.cpp ImtqAssembly.cpp - SyrlinksAssembly.cpp Stack5VHandler.cpp SusAssembly.cpp RwAssembly.cpp