/* * AlarmTimer.cpp * * Created on: 26 мая 2021 г. * Author: sozonov */ #include "../../systemic/MemberFuntion.hpp" #include "../../systemic/ValueLazyFast.hpp" #include "AlarmTimer.hh" bool application::schematic::AlarmTimer::input( Environment & env ) { return grab( alarm, env.rholder.getShared( links.alarm) ); } void application::schematic::AlarmTimer::build( Environment & env ) { typedef ::schematic::AlarmTimerCallback AlarmTimer; AlarmTimer * alarm_timer = memories::instance_object(env.static_data_ma, *alarm, setting.time_out); typedef systemic::detail::ValueLazyFast< float, AlarmTimerLogic, &AlarmTimerLogic::getCurrentTime > GetCurentTime; env.signals.add( links.time, memories::instance_object( env.static_setup_ma, *alarm_timer ) ); typedef systemic::detail::MemberFuntion ActionStart; ActionStart * action_start = memories::instance_object( env.static_setup_ma, *alarm_timer ); env.rholder.share( *action_start, links.start ); typedef systemic::detail::MemberFuntion ActionStop; ActionStop * action_stop = memories::instance_object( env.static_setup_ma, *alarm_timer ); env.rholder.share( *action_stop, links.stop ); typedef systemic::detail::MemberFuntion ActionReset; ActionReset * action_reset = memories::instance_object( env.static_setup_ma, *alarm_timer ); env.rholder.share( *action_reset, links.reset ); env.statuses.create(links.state, alarm_timer->state()); systemic::ProcScheduler::ProcessParameter proc = { .priority = params.priority, .period = params.period, .phase = params.phase, .controlled = false }; env.scheduler.registerProcess( params.processor_id, *alarm_timer, proc ); }