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

73 lines
2.2 KiB
C++

/*
* AddGpioOverrideTermination.h
*
* Created on: 8 îêò. 2019 ã.
* Author: titov
*/
#ifndef SOURCE_APPLICATION_SAFETY_ADDGPIOOVERRIDETERMINATION_H_
#define SOURCE_APPLICATION_SAFETY_ADDGPIOOVERRIDETERMINATION_H_
#include "../ISetupStep.hh"
#include "../../driver/safety/FailureTermination.hh"
#include "../../peripheral/IGpioOverride.hh"
namespace application { namespace safety {
//!Äîáàâèòü âûâîä äëÿ ïåðåçàïèñè.
struct AddGpioOverrideTermination : public ISetupStep {
typedef driver::safety::FailureTermination FT;
FT * terminator = nullptr;
peripheral::IGpioOverride * gpio_override = nullptr;
struct Links {
Environment::Id failure_term_id; //!<Èäåíòèôèêàòîð ïðåðûâàòåëÿ ðàáîòû ïî îòêàçó.
Environment::GpioId gpio_override_id; //!<Âûâîä, êîòîðûé íåîáõîäèìî ïåðåçàïèñàòü ïðè îòêàçå.
};
struct Setting {
uint16_t gpio_state; //!<Ñîñòîÿíèå gpio äëÿ ïåðåçàïèñè.
};
bool input( Environment & env );
void build( Environment & env );
const Links & links;
const Setting & setting;
AddGpioOverrideTermination( const Links & links, const Setting & setting ) : links(links), setting(setting) {}
};
}
}
inline bool application::safety::AddGpioOverrideTermination::input(
Environment & env ) {
return grab( terminator, env.rholder.getShared<FT>(links.failure_term_id) )
and grab( gpio_override, env.rholder.getShared<peripheral::IGpioOverride>(links.gpio_override_id) );
}
inline void application::safety::AddGpioOverrideTermination::build(
Environment & env ) {
Local<FT> term( terminator, *env.rholder.getShared<FT>(links.failure_term_id) );
Local<peripheral::IGpioOverride> gpio( gpio_override, *env.rholder.getShared<peripheral::IGpioOverride>(links.gpio_override_id) );
peripheral::IGpioOverride::TOutValue value =
setting.gpio_state == 0 ? peripheral::IGpioOverride::hi_z :
setting.gpio_state == 1 ? peripheral::IGpioOverride::high :
peripheral::IGpioOverride::low;
term->addTerminate( gpio_override, value );
}
#endif /* SOURCE_APPLICATION_SAFETY_ADDGPIOOVERRIDETERMINATION_H_ */