/* * 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(links.failure_term_id) ) and grab( pwm_override, env.rholder.getShared(links.pwm_override_id) ); } inline void application::safety::AddPwmOverrideTermination::build( Environment & env ) { Local term( terminator, *env.rholder.getShared(links.failure_term_id) ); Local pwm( pwm_override, *env.rholder.getShared(links.pwm_override_id) ); term->addTerminate( pwm_override ); } #endif /* SOURCE_APPLICATION_SAFETY_ADDPWMOVERRIDETERMINATION_H_ */