MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/application/basic/PrivateParametrsProviderInitializer.cpp
2024-06-07 11:12:56 +03:00

66 lines
2.5 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.

/*
* PrivateParametrsProviderInitializer.cpp
*
* Created on: 30 авг. 2021 г.
* Author: sozonov
*/
#include "PrivateParamProvider.hh"
#include "../../systemic/MemberFuntion.hpp"
#include "../../systemic/CustomParameters.hpp"
#include "../../systemic/TransferSettingToIParameterProvider.hh"
#include <cstring>
application::basic::PrivateParamProvider::PrivateParamProvider( const Links & links , const Setting & setting) :
links(links), setting(setting) {}
bool application::basic::PrivateParamProvider::input( Environment & env ) {
return ( provider = env.rholder.getShared<systemic::IParameterProvider>( links.param_provider ) )
and systemic::getStringView( platform_string,
env.cparams,
const_prov,
links.params )
and platform_string.try_lock();
}
bool application::basic::PrivateParamProvider::prepare() {
return provider_interface = provider->grab();
}
void application::basic::PrivateParamProvider::build( Environment & env ) {
if(links.params) {
//берем данные из поставщика настраиваемых данных и передаем их в строковом представлении, для записи в настройки
std::pair<char *, std::size_t> param_provider_data = provider_interface->getParameterBuff(setting.parameter_id).get();
std::pair<char *, std::size_t> setting_data = platform_string.get();
if(setting_data.second == param_provider_data.second)
std::memcpy( setting_data.first, param_provider_data.first, param_provider_data.second);
typedef systemic::TransferSettingToIParameterProvider TransferSetting;
TransferSetting * transfer_sett = memories::instance_object<TransferSetting>( env.static_data_ma,
*provider, setting.parameter_id,
platform_string, links.params );
platform_string.unlock();
provider->release(provider_interface);
if(links.transfer) {
typedef systemic::detail::MemberFuntion<TransferSetting,void, &TransferSetting::transfer_setting> TransferAction;
TransferAction * transfer_action = memories::instance_object<TransferAction>( env.static_setup_ma, *transfer_sett );
env.rholder.share<Action>( *transfer_action, links.transfer );
}
}
}