55 lines
2.3 KiB
C++
55 lines
2.3 KiB
C++
/*
|
|
* 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<driver::IEncoder>( 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<EncoderMultiturnWraperLogic>( env.static_data_ma, *singleturn, config.max_error );
|
|
|
|
encoder_multiturn_logic->configure(conf);
|
|
|
|
|
|
env.rholder.share<driver::IEncoder>( *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<bool, EncoderMultiturnWraperLogic, &EncoderMultiturnWraperLogic::isFailure> Failure;
|
|
env.statuses.add( links.failure, memories::instance_object<Failure>( env.static_setup_ma, *encoder_multiturn_logic ) );
|
|
typedef systemic::detail::ValueLazyFast<bool, EncoderMultiturnWraperLogic, &EncoderMultiturnWraperLogic::isValidData> ValidData;
|
|
env.statuses.add( links.valid_data, memories::instance_object<ValidData>( env.static_setup_ma, *encoder_multiturn_logic ) );
|
|
|
|
typedef systemic::detail::MemberFuntion<EncoderMultiturnWraperLogic, void, &EncoderMultiturnWraperLogic::reset > ActionReset;
|
|
ActionReset * action_reset = memories::instance_object<ActionReset>( env.static_setup_ma, *encoder_multiturn_logic );
|
|
env.rholder.share<Action>( *action_reset, links.reset );
|
|
|
|
|
|
}
|
|
|
|
application::board::EncoderMultiturnWraper::EncoderMultiturnWraper( const Links & links, const Setting & setting, const configuration::ProcessConfig & params) :
|
|
links(links), config(setting), params(params) {}
|
|
|
|
|