MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/application/safety/AddPwmOverrideTermination.hh

62 lines
1.7 KiB
C++

/*
* AddPwmOverrideTermination.h
*
* Created on: 8 îêò. 2019 ã.
* Author: titov
*/
#ifndef SOURCE_APPLICATION_SAFETY_ADDPWMOVERRIDETERMINATION_H_
#define SOURCE_APPLICATION_SAFETY_ADDPWMOVERRIDETERMINATION_H_
#include "../ISetupStep.hh"
#include "../../driver/safety/FailureTermination.hh"
#include "../../peripheral/IPwmOverride.hh"
namespace application { namespace safety {
//!Äîáàâèòü âûõîä ØÈÌ äëÿ ïåðåçàïèñè.
struct AddPwmOverrideTermination : public ISetupStep {
typedef driver::safety::FailureTermination FT;
FT * terminator = nullptr;
peripheral::IPwmOverride * pwm_override = nullptr;
struct Links {
Environment::Id failure_term_id; //!<Èäåíòèôèêàòîð ïðåðûâàòåëÿ ðàáîòû ïî îòêàçó.
Environment::Id pwm_override_id; //!<Êàíàë øèì, êîòîðûé íåîáõîäèìî ïåðåçàïèñàòü ïðè îòêàçå.
};
bool input( Environment & env );
void build( Environment & env );
const Links & links;
AddPwmOverrideTermination( const Links & links ) : links(links) {}
};
}
}
inline bool application::safety::AddPwmOverrideTermination::input(
Environment & env ) {
return grab( terminator, env.rholder.getShared<FT>(links.failure_term_id) )
and grab( pwm_override, env.rholder.getShared<peripheral::IPwmOverride>(links.pwm_override_id) );
}
inline void application::safety::AddPwmOverrideTermination::build(
Environment & env ) {
Local<FT> term( terminator, *env.rholder.getShared<FT>(links.failure_term_id) );
Local<peripheral::IPwmOverride> pwm( pwm_override, *env.rholder.getShared<peripheral::IPwmOverride>(links.pwm_override_id) );
term->addTerminate( pwm_override );
}
#endif /* SOURCE_APPLICATION_SAFETY_ADDPWMOVERRIDETERMINATION_H_ */