MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/driver/ModbusAdapter.cpp

79 lines
2.0 KiB
C++

/*
* ModbusAdapterInitializer.cpp
*
* Created on: 17 Aug 2022
* Author: malyarenko
*/
#include "ModbusAdapter.hpp"
driver::ModbusAdapter::ModbusAdapter( peripheral::IUartPort * uart,
Callback * uart_callback,
peripheral::IGpio * de_pin,
bool de_active_level,
peripheral::IGpio * re_pin,
bool re_active_level )
: uart(*uart),
txrx_control(*this),
de_pin(*de_pin),
de_active_level(de_active_level),
re_pin(*re_pin),
re_active_level(re_active_level)
{
/* Set initial Rx mode */
setRxMode();
uart_callback->set(&txrx_control);
}
bool driver::ModbusAdapter::send( const char * data, std::size_t data_bytes ) {
if (!uart.isDataSent()) {
return false;
}
setTxMode();
/* After frame is sent transceiver is reset to receive mode */
return uart.send(data, data_bytes);
}
bool driver::ModbusAdapter::receive( char * buffer, std::size_t data_bytes ) {
return uart.receive(buffer, data_bytes);
}
bool driver::ModbusAdapter::isDataSent() const {
return uart.isDataSent();
}
bool driver::ModbusAdapter::isRecieptionError() const {
return uart.isRecieptionError();
}
void driver::ModbusAdapter::reset() {
setRxMode();
uart.reset();
}
std::size_t driver::ModbusAdapter::transmitBuffCapacity() const {
return uart.transmitBuffCapacity();
}
std::size_t driver::ModbusAdapter::receiveBuffCapacity() const {
return uart.receiveBuffCapacity();
}
inline void driver::ModbusAdapter::setTxMode() {
de_pin.write(de_active_level);
re_pin.write(!re_active_level);
}
inline void driver::ModbusAdapter::setRxMode() {
de_pin.write(!de_active_level);
re_pin.write(re_active_level);
}
void driver::ModbusAdapter::TranceiverControl::operator ()(bool tx_nrx) {
if (tx_nrx) {
/* Transmitter callback */
super.setRxMode();
}
}