diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index eaa63c72..195d0e15 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "OBSWConfig.h" @@ -903,6 +904,8 @@ void ObjectFactory::createTestComponents(LinuxLibgpioIF* gpioComIF) { } void ObjectFactory::createStrComponents(PowerSwitchIF* pwrSwitcher) { + auto* strAssy = new StrAssembly(objects::STAR_TRACKER); + strAssy->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM); auto* starTrackerCookie = new SerialCookie(objects::STAR_TRACKER, q7s::UART_STAR_TRACKER_DEV, uart::STAR_TRACKER_BAUD, startracker::MAX_FRAME_SIZE * 2 + 2, UartModes::NON_CANONICAL); @@ -912,7 +915,7 @@ void ObjectFactory::createStrComponents(PowerSwitchIF* pwrSwitcher) { new StarTrackerHandler(objects::STAR_TRACKER, objects::UART_COM_IF, starTrackerCookie, strHelper, pcdu::PDU1_CH2_STAR_TRACKER_5V); starTracker->setPowerSwitcher(pwrSwitcher); - starTracker->connectModeTreeParent(satsystem::acs::ACS_SUBSYSTEM); + starTracker->connectModeTreeParent(*strAssy); } void ObjectFactory::createImtqComponents(PowerSwitchIF* pwrSwitcher) { diff --git a/bsp_q7s/core/scheduling.cpp b/bsp_q7s/core/scheduling.cpp index f1837333..3917535b 100644 --- a/bsp_q7s/core/scheduling.cpp +++ b/bsp_q7s/core/scheduling.cpp @@ -240,30 +240,26 @@ void scheduling::initTasks() { if (result != returnvalue::OK) { scheduling::printAddObjectError("ACS_SUBSYSTEM", objects::ACS_SUBSYSTEM); } -#if OBSW_ADD_MGT == 1 result = acsSysTask->addComponent(objects::IMTQ_ASSY); if (result != returnvalue::OK) { scheduling::printAddObjectError("IMTQ_ASSY", objects::IMTQ_ASSY); } -#endif -#if OBSW_ADD_ACS_BOARD == 1 result = acsSysTask->addComponent(objects::ACS_BOARD_ASS); if (result != returnvalue::OK) { scheduling::printAddObjectError("ACS_BOARD_ASS", objects::ACS_BOARD_ASS); } -#endif /* OBSW_ADD_ACS_HANDLERS */ -#if OBSW_ADD_RW == 1 result = acsSysTask->addComponent(objects::RW_ASSY); if (result != returnvalue::OK) { scheduling::printAddObjectError("RW_ASS", objects::RW_ASSY); } -#endif -#if OBSW_ADD_SUS_BOARD_ASS == 1 result = acsSysTask->addComponent(objects::SUS_BOARD_ASS); if (result != returnvalue::OK) { scheduling::printAddObjectError("SUS_BOARD_ASS", objects::SUS_BOARD_ASS); } -#endif + result = acsSysTask->addComponent(objects::STR_ASSY); + if (result != returnvalue::OK) { + scheduling::printAddObjectError("STR_ASSY", objects::STR_ASSY); + } PeriodicTaskIF* tcsSystemTask = factory->createPeriodicTask( "TCS_TASK", 55, PeriodicTaskIF::MINIMUM_STACK_SIZE, 0.5, missedDeadlineFunc); diff --git a/common/config/eive/objects.h b/common/config/eive/objects.h index 28f65400..cb468ef2 100644 --- a/common/config/eive/objects.h +++ b/common/config/eive/objects.h @@ -146,6 +146,7 @@ enum commonObjects : uint32_t { CAM_SWITCHER = 0x73000006, SYRLINKS_ASSY = 0x73000007, IMTQ_ASSY = 0x73000008, + STR_ASSY = 0x73000009, EIVE_SYSTEM = 0x73010000, ACS_SUBSYSTEM = 0x73010001, PL_SUBSYSTEM = 0x73010002, diff --git a/mission/system/objects/CMakeLists.txt b/mission/system/objects/CMakeLists.txt index 2da755c8..dc4cd80c 100644 --- a/mission/system/objects/CMakeLists.txt +++ b/mission/system/objects/CMakeLists.txt @@ -13,6 +13,7 @@ target_sources( SusAssembly.cpp RwAssembly.cpp DualLanePowerStateMachine.cpp + StrAssembly.cpp PowerStateMachineBase.cpp DualLaneAssemblyBase.cpp TcsBoardAssembly.cpp) diff --git a/mission/system/objects/StrAssembly.cpp b/mission/system/objects/StrAssembly.cpp new file mode 100644 index 00000000..6e0da2ea --- /dev/null +++ b/mission/system/objects/StrAssembly.cpp @@ -0,0 +1,30 @@ +#include "StrAssembly.h" + +#include + +StrAssembly::StrAssembly(object_id_t objectId) { + ModeListEntry entry; + entry.setObject(objects::STAR_TRACKER); + entry.setMode(MODE_OFF); + entry.setSubmode(SUBMODE_NONE); + commandTable.insert(entry); +} + +ReturnValue_t StrAssembly::commandChildren(Mode_t mode, Submode_t submode) { + commandTable[0].setMode(mode); + commandTable[0].setSubmode(submode); + HybridIterator iter(commandTable.begin(), commandTable.end()); + executeTable(iter); + return returnvalue::OK; +} + +ReturnValue_t StrAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wantedSubmode) { + if (childrenMap[objects::STAR_TRACKER].mode != wantedMode) { + return NOT_ENOUGH_CHILDREN_IN_CORRECT_STATE; + } + return returnvalue::OK; +} + +ReturnValue_t StrAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) { + return returnvalue::OK; +} diff --git a/mission/system/objects/StrAssembly.h b/mission/system/objects/StrAssembly.h new file mode 100644 index 00000000..417a2432 --- /dev/null +++ b/mission/system/objects/StrAssembly.h @@ -0,0 +1,18 @@ +#ifndef MISSION_SYSTEM_OBJECTS_STRASSEMBLY_H_ +#define MISSION_SYSTEM_OBJECTS_STRASSEMBLY_H_ + +#include "fsfw/devicehandlers/AssemblyBase.h" + +class StrAssembly : public AssemblyBase { + public: + StrAssembly(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; +}; + +#endif /* MISSION_SYSTEM_OBJECTS_STRASSEMBLY_H_ */