|
|
@ -6,8 +6,11 @@
|
|
|
|
#include <fsfw/subsystem/Subsystem.h>
|
|
|
|
#include <fsfw/subsystem/Subsystem.h>
|
|
|
|
#include <fsfw/subsystem/modes/ModeDefinitions.h>
|
|
|
|
#include <fsfw/subsystem/modes/ModeDefinitions.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <optional>
|
|
|
|
|
|
|
|
|
|
|
|
#include "eive/objects.h"
|
|
|
|
#include "eive/objects.h"
|
|
|
|
#include "mission/acsDefs.h"
|
|
|
|
#include "mission/acsDefs.h"
|
|
|
|
|
|
|
|
#include "mission/system/objects/definitions.h"
|
|
|
|
#include "util.h"
|
|
|
|
#include "util.h"
|
|
|
|
|
|
|
|
|
|
|
|
AcsSubsystem satsystem::acs::ACS_SUBSYSTEM(objects::ACS_SUBSYSTEM, 12, 24);
|
|
|
|
AcsSubsystem satsystem::acs::ACS_SUBSYSTEM(objects::ACS_SUBSYSTEM, 12, 24);
|
|
|
@ -100,16 +103,20 @@ Subsystem& satsystem::acs::init() {
|
|
|
|
ModeListEntry entry;
|
|
|
|
ModeListEntry entry;
|
|
|
|
const char* ctxc = "satsystem::acs::init: generic target";
|
|
|
|
const char* ctxc = "satsystem::acs::init: generic target";
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode, ArrayList<ModeListEntry>& table) {
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode, ArrayList<ModeListEntry>& table,
|
|
|
|
|
|
|
|
bool allowAllSubmodes = false) {
|
|
|
|
entry.setObject(obj);
|
|
|
|
entry.setObject(obj);
|
|
|
|
entry.setMode(mode);
|
|
|
|
entry.setMode(mode);
|
|
|
|
entry.setSubmode(submode);
|
|
|
|
entry.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
entry.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(table.insert(entry), "satsystem::acs::init: generic target");
|
|
|
|
check(table.insert(entry), "satsystem::acs::init: generic target");
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Build TARGET PT transition 0
|
|
|
|
// Build TARGET PT transition 0
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_PTG_TRANS_0.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_PTG_TRANS_0.second, true);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TRANS_0.second);
|
|
|
|
check(ACS_SUBSYSTEM.addTable(
|
|
|
|
check(ACS_SUBSYSTEM.addTable(
|
|
|
@ -117,7 +124,7 @@ Subsystem& satsystem::acs::init() {
|
|
|
|
ctxc);
|
|
|
|
ctxc);
|
|
|
|
|
|
|
|
|
|
|
|
// Build SUS board transition
|
|
|
|
// Build SUS board transition
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, SUS_BOARD_NML_TRANS.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, duallane::A_SIDE, SUS_BOARD_NML_TRANS.second, true);
|
|
|
|
check(ACS_SUBSYSTEM.addTable(TableEntry(SUS_BOARD_NML_TRANS.first, &SUS_BOARD_NML_TRANS.second)),
|
|
|
|
check(ACS_SUBSYSTEM.addTable(TableEntry(SUS_BOARD_NML_TRANS.first, &SUS_BOARD_NML_TRANS.second)),
|
|
|
|
ctxc);
|
|
|
|
ctxc);
|
|
|
|
|
|
|
|
|
|
|
@ -182,10 +189,13 @@ void buildSafeSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -199,13 +209,14 @@ void buildSafeSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
// Build SAFE target
|
|
|
|
// Build SAFE target
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::SAFE, ACS_TABLE_SAFE_TGT.second);
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::SAFE, ACS_TABLE_SAFE_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_SAFE_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_SAFE_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_SAFE_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_SAFE_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_SAFE_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_SAFE_TGT.second, true);
|
|
|
|
check(ss.addTable(&ACS_TABLE_SAFE_TGT.second, ACS_TABLE_SAFE_TGT.first, false, true), ctxc);
|
|
|
|
check(ss.addTable(&ACS_TABLE_SAFE_TGT.second, ACS_TABLE_SAFE_TGT.first, false, true), ctxc);
|
|
|
|
|
|
|
|
|
|
|
|
// Build SAFE transition 0
|
|
|
|
// Build SAFE transition 0
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_SAFE_TRANS_0.second, true);
|
|
|
|
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_SAFE_TRANS_0.second, true);
|
|
|
|
iht(objects::STAR_TRACKER, OFF, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
iht(objects::STAR_TRACKER, OFF, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
iht(objects::RW_ASSY, OFF, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
iht(objects::RW_ASSY, OFF, 0, ACS_TABLE_SAFE_TRANS_0.second);
|
|
|
|
check(ss.addTable(&ACS_TABLE_SAFE_TRANS_0.second, ACS_TABLE_SAFE_TRANS_0.first, false, true),
|
|
|
|
check(ss.addTable(&ACS_TABLE_SAFE_TRANS_0.second, ACS_TABLE_SAFE_TRANS_0.first, false, true),
|
|
|
@ -220,7 +231,6 @@ void buildSafeSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
|
|
|
|
|
|
|
|
// Build SAFE sequence
|
|
|
|
// Build SAFE sequence
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, ACS_TABLE_SAFE_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, ACS_TABLE_SAFE_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, SUS_BOARD_NML_TRANS.first, 0, false);
|
|
|
|
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, ACS_TABLE_SAFE_TRANS_0.first, 0, false);
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, ACS_TABLE_SAFE_TRANS_0.first, 0, false);
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, ACS_TABLE_SAFE_TRANS_1.first, 0, false);
|
|
|
|
ihs(ACS_SEQUENCE_SAFE.second, ACS_TABLE_SAFE_TRANS_1.first, 0, false);
|
|
|
|
check(ss.addSequence(&ACS_SEQUENCE_SAFE.second, ACS_SEQUENCE_SAFE.first, ACS_SEQUENCE_SAFE.first,
|
|
|
|
check(ss.addSequence(&ACS_SEQUENCE_SAFE.second, ACS_SEQUENCE_SAFE.first, ACS_SEQUENCE_SAFE.first,
|
|
|
@ -233,10 +243,13 @@ void buildDetumbleSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -250,17 +263,15 @@ void buildDetumbleSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
// Build DETUMBLE target
|
|
|
|
// Build DETUMBLE target
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::DETUMBLE, ACS_TABLE_DETUMBLE_TGT.second);
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::DETUMBLE, ACS_TABLE_DETUMBLE_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_DETUMBLE_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_DETUMBLE_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_DETUMBLE_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_DETUMBLE_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_DETUMBLE_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_DETUMBLE_TGT.second, true);
|
|
|
|
check(ss.addTable(&ACS_TABLE_DETUMBLE_TGT.second, ACS_TABLE_DETUMBLE_TGT.first, false, true),
|
|
|
|
check(ss.addTable(&ACS_TABLE_DETUMBLE_TGT.second, ACS_TABLE_DETUMBLE_TGT.first, false, true),
|
|
|
|
ctxc);
|
|
|
|
ctxc);
|
|
|
|
|
|
|
|
|
|
|
|
// SUS board transition table is defined above
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Build DETUMBLE transition 0
|
|
|
|
// Build DETUMBLE transition 0
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_DETUMBLE_TRANS_0.second, true);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_DETUMBLE_TRANS_0.second, true);
|
|
|
|
iht(objects::STAR_TRACKER, OFF, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::STAR_TRACKER, OFF, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::RW_ASSY, OFF, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
iht(objects::RW_ASSY, OFF, 0, ACS_TABLE_DETUMBLE_TRANS_0.second);
|
|
|
|
check(ss.addTable(&ACS_TABLE_DETUMBLE_TRANS_0.second, ACS_TABLE_DETUMBLE_TRANS_0.first, false,
|
|
|
|
check(ss.addTable(&ACS_TABLE_DETUMBLE_TRANS_0.second, ACS_TABLE_DETUMBLE_TRANS_0.first, false,
|
|
|
@ -275,7 +286,6 @@ void buildDetumbleSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
|
|
|
|
|
|
|
|
// Build DETUMBLE sequence
|
|
|
|
// Build DETUMBLE sequence
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, ACS_TABLE_DETUMBLE_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, ACS_TABLE_DETUMBLE_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, SUS_BOARD_NML_TRANS.first, 0, false);
|
|
|
|
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, ACS_TABLE_DETUMBLE_TRANS_0.first, 0, false);
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, ACS_TABLE_DETUMBLE_TRANS_0.first, 0, false);
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, ACS_TABLE_DETUMBLE_TRANS_1.first, 0, false);
|
|
|
|
ihs(ACS_SEQUENCE_DETUMBLE.second, ACS_TABLE_DETUMBLE_TRANS_1.first, 0, false);
|
|
|
|
check(ss.addSequence(&ACS_SEQUENCE_DETUMBLE.second, ACS_SEQUENCE_DETUMBLE.first,
|
|
|
|
check(ss.addSequence(&ACS_SEQUENCE_DETUMBLE.second, ACS_SEQUENCE_DETUMBLE.first,
|
|
|
@ -288,10 +298,13 @@ void buildIdleSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -306,16 +319,14 @@ void buildIdleSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_IDLE, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_IDLE, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_IDLE_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_IDLE_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_IDLE_TGT.second, true);
|
|
|
|
ss.addTable(&ACS_TABLE_IDLE_TGT.second, ACS_TABLE_IDLE_TGT.first, false, true);
|
|
|
|
ss.addTable(&ACS_TABLE_IDLE_TGT.second, ACS_TABLE_IDLE_TGT.first, false, true);
|
|
|
|
|
|
|
|
|
|
|
|
// SUS board transition table is built above
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Build IDLE transition 0
|
|
|
|
// Build IDLE transition 0
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_IDLE_TRANS_0.second, true);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, duallane::A_SIDE, ACS_TABLE_IDLE_TRANS_0.second, true);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_IDLE_TRANS_0.second);
|
|
|
|
ss.addTable(&ACS_TABLE_IDLE_TRANS_0.second, ACS_TABLE_IDLE_TRANS_0.first, false, true);
|
|
|
|
ss.addTable(&ACS_TABLE_IDLE_TRANS_0.second, ACS_TABLE_IDLE_TRANS_0.first, false, true);
|
|
|
@ -326,7 +337,6 @@ void buildIdleSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
|
|
|
|
|
|
|
|
// Build IDLE sequence
|
|
|
|
// Build IDLE sequence
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, ACS_TABLE_IDLE_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, ACS_TABLE_IDLE_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, SUS_BOARD_NML_TRANS.first, 0, true);
|
|
|
|
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, ACS_TABLE_IDLE_TRANS_0.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, ACS_TABLE_IDLE_TRANS_0.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, ACS_TABLE_IDLE_TRANS_1.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_IDLE.second, ACS_TABLE_IDLE_TRANS_1.first, 0, true);
|
|
|
|
ss.addSequence(&ACS_SEQUENCE_IDLE.second, ACS_SEQUENCE_IDLE.first, ACS_SEQUENCE_SAFE.first, false,
|
|
|
|
ss.addSequence(&ACS_SEQUENCE_IDLE.second, ACS_SEQUENCE_IDLE.first, ACS_SEQUENCE_SAFE.first, false,
|
|
|
@ -338,10 +348,13 @@ void buildTargetPtSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -356,14 +369,13 @@ void buildTargetPtSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
// Build TARGET PT table
|
|
|
|
// Build TARGET PT table
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second, true);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_TGT.second);
|
|
|
|
check(ss.addTable(&ACS_TABLE_PTG_TARGET_TGT.second, ACS_TABLE_PTG_TARGET_TGT.first, false, true),
|
|
|
|
check(ss.addTable(&ACS_TABLE_PTG_TARGET_TGT.second, ACS_TABLE_PTG_TARGET_TGT.first, false, true),
|
|
|
|
ctxc);
|
|
|
|
ctxc);
|
|
|
|
|
|
|
|
|
|
|
|
// SUS board transition table is built above
|
|
|
|
|
|
|
|
// Transition 0 already built
|
|
|
|
// Transition 0 already built
|
|
|
|
// Build TARGET PT transition 1
|
|
|
|
// Build TARGET PT transition 1
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET, ACS_TABLE_PTG_TARGET_TRANS_1.second);
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET, ACS_TABLE_PTG_TARGET_TRANS_1.second);
|
|
|
@ -373,7 +385,6 @@ void buildTargetPtSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
|
|
|
|
|
|
|
|
// Build IDLE sequence
|
|
|
|
// Build IDLE sequence
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, ACS_TABLE_PTG_TARGET_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, ACS_TABLE_PTG_TARGET_TGT.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, SUS_BOARD_NML_TRANS.first, 0, true);
|
|
|
|
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, ACS_TABLE_PTG_TRANS_0.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, ACS_TABLE_PTG_TRANS_0.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, ACS_TABLE_PTG_TARGET_TRANS_1.first, 0, true);
|
|
|
|
ihs(ACS_SEQUENCE_PTG_TARGET.second, ACS_TABLE_PTG_TARGET_TRANS_1.first, 0, true);
|
|
|
|
check(ss.addSequence(&ACS_SEQUENCE_PTG_TARGET.second, ACS_SEQUENCE_PTG_TARGET.first,
|
|
|
|
check(ss.addSequence(&ACS_SEQUENCE_PTG_TARGET.second, ACS_SEQUENCE_PTG_TARGET.first,
|
|
|
@ -386,10 +397,13 @@ void buildTargetPtNadirSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -405,8 +419,8 @@ void buildTargetPtNadirSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET,
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET,
|
|
|
|
ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second, true);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_NADIR_TGT.second);
|
|
|
|
check(ss.addTable(TableEntry(ACS_TABLE_PTG_TARGET_NADIR_TGT.first,
|
|
|
|
check(ss.addTable(TableEntry(ACS_TABLE_PTG_TARGET_NADIR_TGT.first,
|
|
|
@ -437,10 +451,13 @@ void buildTargetPtGsSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -456,8 +473,8 @@ void buildTargetPtGsSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET_GS,
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_TARGET_GS,
|
|
|
|
ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second, true);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_GS_TGT.second);
|
|
|
|
check(ss.addTable(
|
|
|
|
check(ss.addTable(
|
|
|
@ -487,10 +504,13 @@ void buildTargetPtInertialSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
auto ctxc = context.c_str();
|
|
|
|
// Insert Helper Table
|
|
|
|
// Insert Helper Table
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
auto iht = [&](object_id_t obj, Mode_t mode, Submode_t submode,
|
|
|
|
ArrayList<ModeListEntry>& sequence) {
|
|
|
|
ArrayList<ModeListEntry>& sequence, bool allowAllSubmodes = false) {
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setObject(obj);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setMode(mode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
eh.setSubmode(submode);
|
|
|
|
|
|
|
|
if (allowAllSubmodes) {
|
|
|
|
|
|
|
|
eh.allowAllSubmodes();
|
|
|
|
|
|
|
|
}
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
check(sequence.insert(eh), ctxc);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
// Insert Helper Sequence
|
|
|
|
// Insert Helper Sequence
|
|
|
@ -506,8 +526,8 @@ void buildTargetPtInertialSequence(Subsystem& ss, ModeListEntry& eh) {
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_INERTIAL,
|
|
|
|
iht(objects::ACS_CONTROLLER, NML, acs::AcsMode::PTG_INERTIAL,
|
|
|
|
ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::IMTQ_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::SUS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second, true);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::ACS_BOARD_ASS, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second, true);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::RW_ASSY, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
iht(objects::STAR_TRACKER, NML, 0, ACS_TABLE_PTG_TARGET_INERTIAL_TGT.second);
|
|
|
|
check(ss.addTable(TableEntry(ACS_TABLE_PTG_TARGET_INERTIAL_TGT.first,
|
|
|
|
check(ss.addTable(TableEntry(ACS_TABLE_PTG_TARGET_INERTIAL_TGT.first,
|
|
|
|