#ifndef FSFW_MODES_MODEHELPER_H_ #define FSFW_MODES_MODEHELPER_H_ #include "ModeMessage.h" #include "../ipc/MessageQueueIF.h" #include "../returnvalues/HasReturnvaluesIF.h" #include "../timemanager/Countdown.h" class HasModesIF; class ModeHelper { public: MessageQueueId_t theOneWhoCommandedAMode = MessageQueueIF::NO_QUEUE; Mode_t commandedMode; Submode_t commandedSubmode; ModeHelper(HasModesIF *owner); virtual ~ModeHelper(); ReturnValue_t handleModeCommand(CommandMessage *message); /** * @param parentQueue the Queue id of the parent object. * Set to 0 if no parent present */ void setParentQueue(MessageQueueId_t parentQueueId); ReturnValue_t initialize(MessageQueueId_t parentQueueId); ReturnValue_t initialize(void); void modeChanged(Mode_t mode, Submode_t submode); void startTimer(uint32_t timeoutMs); bool isTimedOut(); bool isForced(); void setForced(bool forced); protected: HasModesIF *owner; MessageQueueId_t parentQueueId = MessageQueueIF::NO_QUEUE; Countdown countdown; bool forced; private: void sendModeReplyMessage(Mode_t ownerMode, Submode_t ownerSubmode); void sendModeInfoMessage(Mode_t ownerMode, Submode_t ownerSubmode); }; #endif /* FSFW_MODES_MODEHELPER_H_ */