MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/application/safety/AddFailureInitializer.cpp

70 lines
2.0 KiB
C++

/*
* AddFailureInitializer.cpp
*
* Created on: 19 àâã. 2021 ã.
* Author: titov
*/
#include "AddFailure.hh"
#include "../../systemic/StatusLazyFast.hpp"
bool application::safety::AddFailure::input(
Environment & env ) {
return ( failure_status = env.statuses.get( links.condition ) )
and grab( diagnostic, env.rholder.getShared<FD>( links.diagnostic ) );
}
void application::safety::AddFailure::build(
Environment & env ) {
Local<FD> fd( diagnostic, *env.rholder.getShared<FD>( links.diagnostic ) );
const processing::failure::FaliureInterface & fi = fd->addFailure( *failure_status, setting.failure_id );
if( links.stored ) {
typedef systemic::detail::StatusLazyFast<
processing::failure::FaliureInterface,
&processing::failure::FaliureInterface::stored> StoredStatus;
StoredStatus * stored = memories::instance_object<StoredStatus>(env.static_object_ma, fi);
env.statuses.add(links.stored, stored);
}
}
bool application::safety::AddFailureWithReset::input(
Environment & env ) {
return ( failure_status = env.statuses.get( links.condition ) )
and grab( reset, env.rholder.getShared< ResetFunction >( links.reset ) )
and grab( diagnostic, env.rholder.getShared< FD >( links.diagnostic ) );
}
void application::safety::AddFailureWithReset::build(
Environment & env ) {
Local<FD> fd( diagnostic, *env.rholder.getShared<FD>( links.diagnostic ) );
const processing::failure::FaliureInterface & fi = fd->addFailure( *failure_status, setting.failure_id, *reset );
if( links.stored ) {
typedef systemic::detail::StatusLazyFast<
processing::failure::FaliureInterface,
&processing::failure::FaliureInterface::stored> StoredStatus;
StoredStatus * stored = memories::instance_object<StoredStatus>(env.static_object_ma, fi);
env.statuses.add(links.stored, stored);
}
}