MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/processing/failure/FailureDiagnostics.hh

67 lines
1.6 KiB
C++

/*
* FailureDiagnostics.h
*
* Created on: 8 îêò. 2019 ã.
* Author: titov
*/
#ifndef SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_
#define SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_
#include "../../systemic/IProcess.hh"
#include "../../systemic/IStatus.hh"
#include "../../systemic/IFunctor.hh"
#include "FailureInterface.hh"
#include "FailureManagerInterface.hh"
#include <memory_resource>
#include <deque>
#include <mutex>
namespace processing { namespace failure {
class FailureDiagnostics : public systemic::IProcess {
public:
typedef systemic::IFunctor<bool> IFailureReset;
typedef systemic::IValue<bool> IFailureCheck;
FailureDiagnostics( FailureManagerInterface &, std::pmr::memory_resource * memory );
const FaliureInterface & addFailure( IFailureCheck & failure, FailureId id, IFailureReset & reset = getDefaultReset() );
void process();
private:
struct Failure : public FaliureInterface {
IFailureCheck * failure = nullptr;
IFailureReset * reset = nullptr;
bool failure_stored;
bool failure_actual;
bool failure_ticket;
Failure( systemic::IStatus *, IFailureReset * );
bool check();
bool stored() const;
bool actual() const;
bool acknowledge();
bool ticket();
};
typedef std::deque<Failure, std::pmr::polymorphic_allocator<Failure> > Failures;
FailureManagerInterface & manager;
Failures failures;
std::mutex failures_lock;
static IFailureReset & getDefaultReset();
};
}}
#endif /* SOURCE_PROCESSING_FAILURE_FAILUREDIAGNOSTICS_H_ */