fsfw/src/fsfw/fdir/FailureIsolationBase.h

57 lines
2.3 KiB
C
Raw Normal View History

#ifndef FRAMEWORK_FDIR_FAILUREISOLATIONBASE_H_
#define FRAMEWORK_FDIR_FAILUREISOLATIONBASE_H_
2020-08-13 20:53:35 +02:00
#include "../events/EventMessage.h"
#include "../health/HealthMessage.h"
2022-02-02 10:29:30 +01:00
#include "../ipc/MessageQueueIF.h"
2020-08-13 20:53:35 +02:00
#include "../parameters/HasParametersIF.h"
2022-08-16 12:48:22 +02:00
#include "../returnvalues/returnvalue.h"
2022-02-02 10:29:30 +01:00
#include "ConfirmsFailuresIF.h"
#include "FaultCounter.h"
2022-08-22 15:02:16 +02:00
class FailureIsolationBase : public ConfirmsFailuresIF, public HasParametersIF {
2022-02-02 10:29:30 +01:00
public:
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::FDIR_1;
2022-02-03 17:08:30 +01:00
//! FDIR has an internal state, which changed from par2 (oldState) to par1 (newState).
2022-02-03 17:09:58 +01:00
static const Event FDIR_CHANGED_STATE = MAKE_EVENT(1, severity::INFO);
2022-02-03 17:08:30 +01:00
//! FDIR tries to restart device. Par1: event that caused recovery.
2022-02-03 17:09:58 +01:00
static const Event FDIR_STARTS_RECOVERY = MAKE_EVENT(2, severity::MEDIUM);
2022-02-03 17:08:30 +01:00
//! FDIR turns off device. Par1: event that caused recovery.
2022-02-03 17:09:58 +01:00
static const Event FDIR_TURNS_OFF_DEVICE = MAKE_EVENT(3, severity::MEDIUM);
2022-02-02 10:29:30 +01:00
FailureIsolationBase(object_id_t owner, object_id_t parent = objects::NO_OBJECT,
uint8_t messageDepth = 10, uint8_t parameterDomainBase = 0xF0);
virtual ~FailureIsolationBase();
virtual ReturnValue_t initialize();
/**
* This is called by the DHB in performOperation()
*/
void checkForFailures();
MessageQueueId_t getEventReceptionQueue() override;
virtual void triggerEvent(Event event, uint32_t parameter1 = 0, uint32_t parameter2 = 0);
protected:
MessageQueueIF* eventQueue = nullptr;
object_id_t ownerId;
HasHealthIF* owner = nullptr;
object_id_t faultTreeParent;
uint8_t parameterDomainBase;
void setOwnerHealth(HasHealthIF::HealthState health);
virtual ReturnValue_t eventReceived(EventMessage* event) = 0;
virtual void eventConfirmed(EventMessage* event);
virtual void wasParentsFault(EventMessage* event);
virtual ReturnValue_t confirmFault(EventMessage* event);
virtual void decrementFaultCounters() = 0;
2024-04-03 12:47:11 +02:00
virtual bool isFdirDisabledForSeverity(EventSeverity_t severity);
2022-02-02 10:29:30 +01:00
ReturnValue_t sendConfirmationRequest(EventMessage* event,
MessageQueueId_t destination = MessageQueueIF::NO_QUEUE);
void throwFdirEvent(Event event, uint32_t parameter1 = 0, uint32_t parameter2 = 0);
2022-02-02 10:29:30 +01:00
private:
void doConfirmFault(EventMessage* event);
};
2024-04-03 12:52:32 +02:00
#endif /* FRAMEWORK_FDIR */