started SUS assembly
Some checks failed
EIVE/eive-obsw/pipeline/head There was a failure building this commit

fixes for PCDU code and switcher list handling
This commit is contained in:
2022-03-03 15:37:36 +01:00
parent 1586c3e69a
commit ff0da65662
11 changed files with 418 additions and 309 deletions

View File

@ -1,6 +1,7 @@
#ifndef MISSION_SYSTEM_ACSBOARDASSEMBLY_H_
#define MISSION_SYSTEM_ACSBOARDASSEMBLY_H_
#include <devices/powerSwitcherList.h>
#include <fsfw/devicehandlers/AssemblyBase.h>
#include <fsfw/objectmanager/frameworkObjects.h>
@ -52,37 +53,40 @@ enum ModeTableIdx : uint8_t {
GPS = 8
};
static constexpr uint8_t NUMBER_DEVICES_MODE_TABLE = 9;
class PowerSwitchIF;
class AcsBoardAssembly : public AssemblyBase {
public:
AcsBoardAssembly(object_id_t objectId, object_id_t parentId, PowerSwitchIF* switcher,
AcsBoardHelper helper);
private:
enum class States { IDLE, SWITCHING_POWER, MODE_COMMANDING };
States state = States::IDLE;
Mode_t currentMode = MODE_OFF;
Submode_t currentSubmode = A_SIDE;
PowerSwitchIF* switcher = nullptr;
AcsBoardHelper helper;
void initModeTableEntry(object_id_t id, ModeListEntry& entry);
ReturnValue_t initialize() override;
FixedArrayList<ModeListEntry, NUMBER_DEVICES_MODE_TABLE> modeTable;
static constexpr uint8_t NUMBER_DEVICES_MODE_TABLE = 9;
static constexpr Submode_t A_SIDE = 0;
static constexpr Submode_t B_SIDE = 1;
static constexpr Submode_t DUAL_MODE = 2;
AcsBoardAssembly(object_id_t objectId, object_id_t parentId, PowerSwitchIF* pwrSwitcher,
AcsBoardHelper helper);
private:
static constexpr pcduSwitches::Switches SWITCH_A =
pcduSwitches::Switches::PDU1_CH7_ACS_A_SIDE_3V3;
static constexpr pcduSwitches::Switches SWITCH_B =
pcduSwitches::Switches::PDU2_CH7_ACS_BOARD_SIDE_B_3V3;
enum class States { IDLE, SWITCHING_POWER, MODE_COMMANDING } state = States::IDLE;
PowerSwitchIF* pwrSwitcher = nullptr;
AcsBoardHelper helper;
FixedArrayList<ModeListEntry, NUMBER_DEVICES_MODE_TABLE> modeTable;
void initModeTableEntry(object_id_t id, ModeListEntry& entry);
ReturnValue_t initialize() override;
// AssemblyBase overrides
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 handleModeReached() override;
/**
* Check whether it makes sense to send mode commands to the device
@ -92,7 +96,7 @@ class AcsBoardAssembly : public AssemblyBase {
*/
bool isUseable(object_id_t object, Mode_t mode);
ReturnValue_t handleNormalOrOnModeCmd(Mode_t mode, Submode_t submode);
void powerStateMachine(Submode_t submode);
void powerStateMachine(Mode_t mode, Submode_t submode);
void refreshHelperModes();
};