62 lines
1.8 KiB
C++
62 lines
1.8 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_ */
|