2018-07-12 16:29:32 +02:00
# ifndef FRAMEWORK_FDIR_FAILUREISOLATIONBASE_H_
# define FRAMEWORK_FDIR_FAILUREISOLATIONBASE_H_
2016-06-15 23:48:41 +02:00
# include <framework/events/EventMessage.h>
# include <framework/fdir/ConfirmsFailuresIF.h>
# include <framework/fdir/FaultCounter.h>
# include <framework/health/HealthMessage.h>
# include <framework/parameters/HasParametersIF.h>
# include <framework/returnvalues/HasReturnvaluesIF.h>
2018-07-12 16:29:32 +02:00
# include <framework/ipc/MessageQueueIF.h>
class FailureIsolationBase : public HasReturnvaluesIF ,
public ConfirmsFailuresIF ,
public HasParametersIF {
2016-06-15 23:48:41 +02:00
public :
static const uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID : : FDIR_1 ;
static const Event FDIR_CHANGED_STATE = MAKE_EVENT ( 1 , SEVERITY : : INFO ) ; //!< FDIR has an internal state, which changed from par2 (oldState) to par1 (newState).
static const Event FDIR_STARTS_RECOVERY = MAKE_EVENT ( 2 , SEVERITY : : MEDIUM ) ; //!< FDIR tries to restart device. Par1: event that caused recovery.
static const Event FDIR_TURNS_OFF_DEVICE = MAKE_EVENT ( 3 , SEVERITY : : MEDIUM ) ; //!< FDIR turns off device. Par1: event that caused recovery.
2018-07-12 16:29:32 +02:00
FailureIsolationBase ( object_id_t owner , object_id_t parent = 0 ,
uint8_t messageDepth = 10 , uint8_t parameterDomainBase = 0xF0 ) ;
virtual ~ FailureIsolationBase ( ) ;
2016-06-15 23:48:41 +02:00
virtual ReturnValue_t initialize ( ) ;
2019-10-28 12:48:41 +01:00
/**
* This is called by the DHB in performOperation ( )
*/
2016-06-15 23:48:41 +02:00
void checkForFailures ( ) ;
MessageQueueId_t getEventReceptionQueue ( ) ;
2018-07-12 16:29:32 +02:00
virtual void triggerEvent ( Event event , uint32_t parameter1 = 0 ,
uint32_t parameter2 = 0 ) ;
2016-06-15 23:48:41 +02:00
protected :
2018-07-12 16:29:32 +02:00
MessageQueueIF * eventQueue ;
2016-06-15 23:48:41 +02:00
object_id_t ownerId ;
HasHealthIF * owner ;
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 ;
2018-07-12 16:29:32 +02:00
ReturnValue_t sendConfirmationRequest ( EventMessage * event ,
MessageQueueId_t destination = 0 ) ;
void throwFdirEvent ( Event event , uint32_t parameter1 = 0 ,
uint32_t parameter2 = 0 ) ;
2016-06-15 23:48:41 +02:00
private :
2018-07-12 16:29:32 +02:00
void doConfirmFault ( EventMessage * event ) ; bool isFdirDisabledForSeverity (
EventSeverity_t severity ) ;
2016-06-15 23:48:41 +02:00
} ;
2018-07-12 16:29:32 +02:00
# endif /* FRAMEWORK_FDIR_FAILUREISOLATIONBASE_H_ */