2020-09-26 14:58:53 +02:00
|
|
|
#ifndef FSFW_MODES_MODEHELPER_H_
|
|
|
|
#define FSFW_MODES_MODEHELPER_H_
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-08-25 22:37:41 +02:00
|
|
|
#include <vector>
|
|
|
|
|
2020-09-26 14:58:53 +02:00
|
|
|
#include "ModeMessage.h"
|
2021-07-13 20:22:54 +02:00
|
|
|
#include "fsfw/ipc/MessageQueueIF.h"
|
2022-08-16 12:48:22 +02:00
|
|
|
#include "fsfw/returnvalues/returnvalue.h"
|
2021-07-13 20:22:54 +02:00
|
|
|
#include "fsfw/timemanager/Countdown.h"
|
2016-06-15 23:48:41 +02:00
|
|
|
|
|
|
|
class HasModesIF;
|
|
|
|
|
|
|
|
class ModeHelper {
|
2022-02-02 10:29:30 +01:00
|
|
|
public:
|
|
|
|
MessageQueueId_t theOneWhoCommandedAMode = MessageQueueIF::NO_QUEUE;
|
|
|
|
Mode_t commandedMode;
|
|
|
|
Submode_t commandedSubmode;
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ModeHelper(HasModesIF *owner);
|
|
|
|
virtual ~ModeHelper();
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t handleModeCommand(CommandMessage *message);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
/**
|
|
|
|
* @param parentQueue the Queue id of the parent object.
|
|
|
|
* Set to 0 if no parent present
|
|
|
|
*/
|
|
|
|
void setParentQueue(MessageQueueId_t parentQueueId);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t initialize(MessageQueueId_t parentQueueId);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t initialize(void);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
void modeChanged(Mode_t mode, Submode_t submode);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
void startTimer(uint32_t timeoutMs);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
bool isTimedOut();
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
bool isForced();
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
void setForced(bool forced);
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-08-25 22:37:41 +02:00
|
|
|
#ifdef FSFW_INTROSPECTION
|
2022-08-25 22:29:20 +02:00
|
|
|
std::vector<std::pair<Mode_t, const char *>> getModes() const;
|
|
|
|
|
|
|
|
std::vector<std::pair<Submode_t, const char *>> getSubmodes(Mode_t mode) const;
|
|
|
|
#endif
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
protected:
|
|
|
|
HasModesIF *owner;
|
|
|
|
MessageQueueId_t parentQueueId = MessageQueueIF::NO_QUEUE;
|
2016-06-15 23:48:41 +02:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
Countdown countdown;
|
|
|
|
|
|
|
|
bool forced;
|
|
|
|
|
|
|
|
private:
|
|
|
|
void sendModeReplyMessage(Mode_t ownerMode, Submode_t ownerSubmode);
|
|
|
|
void sendModeInfoMessage(Mode_t ownerMode, Submode_t ownerSubmode);
|
2016-06-15 23:48:41 +02:00
|
|
|
};
|
|
|
|
|
2020-09-26 14:58:53 +02:00
|
|
|
#endif /* FSFW_MODES_MODEHELPER_H_ */
|