/* * EncoderMultiturnWraperInitializer.cpp * * Created on: 22 сент. 2021 г. * Author: sozonov */ #include "EncoderMultiturnWraper.hh" #include "../../systemic/ValueLazyFast.hpp" #include "../../systemic/MemberFuntion.hpp" #include "../../driver/EncoderMultiturnWraper.hh" bool application::board::EncoderMultiturnWraper::input( Environment & env ) { return grab( singleturn, env.rholder.getShared( links.singleturn ) ); } void application::board::EncoderMultiturnWraper::build( Environment & env ) { typedef ::driver::detail::EncoderMultiturnWraper EncoderMultiturnWraperLogic; ::driver::detail::EncoderMultiturnWraper::Setting conf = { .max_angle_delta = config.max_angle_delta, .num_turn = config.num_turn }; EncoderMultiturnWraperLogic * encoder_multiturn_logic = memories::instance_object( env.static_data_ma, *singleturn, config.max_error ); encoder_multiturn_logic->configure(conf); env.rholder.share( *encoder_multiturn_logic, links.multiturn ); systemic::ProcScheduler::ProcessParameter proc = { .priority = params.priority, .period = params.period, .phase = params.phase, .controlled = false }; env.scheduler.registerProcess( params.processor_id, *encoder_multiturn_logic, proc ); typedef systemic::detail::ValueLazyFast Failure; env.statuses.add( links.failure, memories::instance_object( env.static_setup_ma, *encoder_multiturn_logic ) ); typedef systemic::detail::ValueLazyFast ValidData; env.statuses.add( links.valid_data, memories::instance_object( env.static_setup_ma, *encoder_multiturn_logic ) ); typedef systemic::detail::MemberFuntion ActionReset; ActionReset * action_reset = memories::instance_object( env.static_setup_ma, *encoder_multiturn_logic ); env.rholder.share( *action_reset, links.reset ); } application::board::EncoderMultiturnWraper::EncoderMultiturnWraper( const Links & links, const Setting & setting, const configuration::ProcessConfig & params) : links(links), config(setting), params(params) {}