MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/application/safety/AddGpioOverrideTermination.hh
2024-06-07 11:12:56 +03:00

73 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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_ */