49 lines
1.9 KiB
C++
49 lines
1.9 KiB
C++
/*
|
|
* ModbusAdapterInitializer.cpp
|
|
*
|
|
* Created on: 17 Aug 2022
|
|
* Author: malyarenko
|
|
*/
|
|
|
|
#include "../../driver/ModbusAdapter.hpp"
|
|
|
|
#include "ModbusAdapter.hh"
|
|
|
|
application::board::ModbusAdapter::ModbusAdapter( const Links & links, const Setting & setting )
|
|
: links(links),
|
|
setting(setting),
|
|
uart_in(nullptr),
|
|
uart_callback(nullptr),
|
|
de_pin(nullptr),
|
|
re_pin(nullptr) {}
|
|
|
|
bool application::board::ModbusAdapter::input( Environment & env ) {
|
|
|
|
typedef systemic::IValueTypeSet< systemic::IFunctor<void, bool> * > ModbusAdapterCallback;
|
|
|
|
return grab(uart_in, env.rholder.getShared<peripheral::IUartPort>(links.uart_in))
|
|
&& grab(uart_callback, env.rholder.getShared<ModbusAdapterCallback>(links.uart_callback))
|
|
&& grab(de_pin, env.rholder.getShared<peripheral::IGpio>(links.de_pin))
|
|
&& grab(re_pin, env.rholder.getShared<peripheral::IGpio>(links.re_pin));
|
|
}
|
|
|
|
void application::board::ModbusAdapter::build( Environment & env ) {
|
|
typedef driver::ModbusAdapter ModbusAdapterDriver;
|
|
|
|
const bool active_level_de = setting.active_level_de != 0;
|
|
const bool active_level_re = setting.active_level_re != 0;
|
|
|
|
ModbusAdapterDriver* modbus_adapter_driver
|
|
= memories::instance_object<ModbusAdapterDriver>(env.static_object_ma,
|
|
|
|
/* ModbusAdapter ctor */
|
|
uart_in,
|
|
uart_callback,
|
|
de_pin,
|
|
active_level_de,
|
|
re_pin,
|
|
active_level_re );
|
|
|
|
env.rholder.share<peripheral::IUartPort>(*modbus_adapter_driver, links.uart_out);
|
|
}
|