#pragma once #include #include #include #include #include #include #include #include #include #include class PowerSwitchIF; /** * @brief Allows to create an power switch object with its own mode and health * @details * This basic component allows to create an object which is solely responsible for managing a * switch. It also has a mode and a health by implementing the respective interface components * which allows integrating this component into a system mode tree. * * Commanding this component to MODE_OFF will cause the switcher to turn the switch off while * commanding in to MODE_ON will cause the switcher to turn the switch on. */ class PowerSwitcherComponent : public SystemObject, public ExecutableObjectIF, public ModeTreeChildIF, public ModeTreeConnectionIF, public HasModesIF, public HasHealthIF { public: PowerSwitcherComponent(object_id_t objectId, PowerSwitchIF *pwrSwitcher, power::Switch_t pwrSwitch); ReturnValue_t connectModeTreeParent(HasModeTreeChildrenIF &parent) override; ModeTreeChildIF &getModeTreeChildIF() override; protected: PowerSwitcher switcher; private: MessageQueueIF *queue = nullptr; Mode_t mode = MODE_OFF; Submode_t submode = 0; ModeHelper modeHelper; HealthHelper healthHelper; void setMode(Mode_t newMode, Submode_t newSubmode); ReturnValue_t performOperation(uint8_t opCode) override; ReturnValue_t initialize() override; [[nodiscard]] MessageQueueId_t getCommandQueue() const override; void getMode(Mode_t *mode, Submode_t *submode) override; ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode, uint32_t *msToReachTheMode) override; void startTransition(Mode_t mode, Submode_t submode) override; virtual void performFaultyOperation(); void setToExternalControl() override; void announceMode(bool recursive) override; ReturnValue_t setHealth(HealthState health) override; HasHealthIF::HealthState getHealth() override; [[nodiscard]] object_id_t getObjectId() const override; [[nodiscard]] const HasHealthIF *getOptHealthIF() const override; [[nodiscard]] const HasModesIF &getModeIF() const override; };