eive-obsw/mission/system/objects/ComSubsystem.h

93 lines
3.2 KiB
C
Raw Normal View History

#ifndef MISSION_SYSTEM_COMSUBSYSTEM_H_
#define MISSION_SYSTEM_COMSUBSYSTEM_H_
2023-02-28 19:14:15 +01:00
#include <common/config/eive/eventSubsystemIds.h>
2023-02-22 19:45:41 +01:00
#include <fsfw/events/EventMessage.h>
#include <fsfw/parameters/HasParametersIF.h>
#include <fsfw/parameters/ParameterHelper.h>
2022-04-14 09:54:07 +02:00
#include <fsfw/subsystem/Subsystem.h>
#include "mission/comDefs.h"
class ComSubsystem : public Subsystem, public ReceivesParameterMessagesIF {
2022-04-14 09:54:07 +02:00
public:
2023-02-28 19:14:15 +01:00
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::COM_SUBSYSTEM;
2023-02-28 19:14:15 +01:00
//! [EXPORT] : [COMMENT] The transmit timer to protect the Syrlinks expired
//! P1: The current timer value
static const Event TX_TIMER_EXPIRED = MAKE_EVENT(1, severity::INFO);
//! [EXPORT] : [COMMENT] Transmitter will be turned on due to detection of bitlock
static const Event BIT_LOCK_TX_ON = MAKE_EVENT(2, severity::INFO);
2023-02-22 19:45:41 +01:00
/**
* @brief Constructor
*
* @param setObjectId
* @param maxNumberOfSequences
* @param maxNumberOfTables
* @param transmitterTimeout Maximum time the transmitter of the syrlinks
2023-02-28 19:14:15 +01:00
* will
* be enabled
2023-02-22 19:45:41 +01:00
*/
ComSubsystem(object_id_t setObjectId, uint32_t maxNumberOfSequences, uint32_t maxNumberOfTables,
uint32_t transmitterTimeout);
2023-01-28 14:49:28 +01:00
virtual ~ComSubsystem() = default;
2022-04-14 09:54:07 +02:00
MessageQueueId_t getCommandQueue() const override;
ReturnValue_t getParameter(uint8_t domainId, uint8_t uniqueIdentifier,
ParameterWrapper *parameterWrapper, const ParameterWrapper *newValues,
uint16_t startAtIndex) override;
virtual void performChildOperation() override;
2022-04-14 09:54:07 +02:00
private:
2023-02-22 13:02:40 +01:00
static const Mode_t INITIAL_MODE = 0;
2023-01-28 14:49:28 +01:00
ReturnValue_t handleCommandMessage(CommandMessage *message) override;
ReturnValue_t initialize() override;
void startTransition(Mode_t mode, Submode_t submode) override;
void readEventQueue();
2023-02-22 19:45:41 +01:00
void handleEventMessage(EventMessage *eventMessage);
void handleBitLockEvent();
void handleCarrierLockEvent();
void checkTransmitterCountdown();
/**
2023-02-22 13:02:40 +01:00
* @brief Enables transmitter in low rate mode
*/
void startRxAndTxLowRateSeq();
2023-03-16 18:05:23 +01:00
void startRxOnlyRecovery(bool forced);
2023-02-22 13:02:40 +01:00
/**
* @brief Returns true if mode is a mode where the transmitter is on
*/
2023-02-22 13:02:40 +01:00
bool isTxMode(Mode_t mode);
uint8_t datarateCfg = static_cast<uint8_t>(com::Datarate::LOW_RATE_MODULATION_BPSK);
2023-02-13 11:28:27 +01:00
// Maximum time after which the transmitter will be turned of. This is a
2023-02-22 19:45:41 +01:00
// protection mechanism due prevent the syrlinks from overheating
uint32_t transmitterTimeout = 0;
ParameterHelper paramHelper;
2023-02-22 19:45:41 +01:00
MessageQueueIF *eventQueue = nullptr;
bool enableTxWhenCarrierLock = false;
2023-03-16 18:05:23 +01:00
bool performRecoveryToRxOnly = false;
// Countdown will be started as soon as the transmitter was enabled
Countdown transmitterCountdown;
2023-02-22 09:53:09 +01:00
// Transmitter countdown only active when sysrlinks transmitter is on (modes:
// rx and tx low rate, rx and tx high rate, rx and tx default rate)
bool countdownActive = false;
2023-02-22 13:02:40 +01:00
// True when bit lock occurred while COM subsystem is in a transition. This
// variable is used to remember the bit lock and execute the default rate
// sequence after the active transition has been completed
bool rememberBitLock = false;
2022-04-14 09:54:07 +02:00
};
#endif /* MISSION_SYSTEM_COMSUBSYSTEM_H_ */