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

73 lines
1.7 KiB
C++

/*
* ModbusAdapter.hpp
*
* Created on: 17 Aug 2022
* Author: malyarenko
*/
#ifndef UMLIBRARY_DRIVER_MODBUSADAPTER_HPP_
#define UMLIBRARY_DRIVER_MODBUSADAPTER_HPP_
#include <cstddef>
#include "../systemic/IValueAsync.hpp"
#include "../systemic/IFunctor.hh"
#include "../peripheral/IUartPort.hh"
#include "../peripheral/IGpio.hh"
namespace driver {
class ModbusAdapter : public peripheral::IUartPort {
public:
typedef systemic::IFunctor<void, bool> TranceiverHandler;
typedef systemic::IValueTypeSet<TranceiverHandler *> Callback;
ModbusAdapter( peripheral::IUartPort * uart,
Callback * uart_callback,
peripheral::IGpio * de_pin,
bool de_active_level,
peripheral::IGpio * re_pin,
bool re_active_level );
bool send( const char * data, std::size_t data_bytes ) override;
bool receive( char * buffer, std::size_t data_bytes ) override;
bool isDataSent() const override;
bool isRecieptionError() const override;
void reset() override;
std::size_t transmitBuffCapacity() const override;
std::size_t receiveBuffCapacity() const override;
private:
struct TranceiverControl : public TranceiverHandler {
ModbusAdapter & super;
void operator ()(bool tx_nrx) override;
TranceiverControl( ModbusAdapter & super )
: super(super) {};
};
peripheral::IUartPort & uart;
TranceiverControl txrx_control;
peripheral::IGpio & de_pin;
bool de_active_level;
peripheral::IGpio & re_pin;
bool re_active_level;
inline void setTxMode();
inline void setRxMode();
};
} /* namespace driver */
#endif /* UMLIBRARY_DRIVER_MODBUSADAPTER_HPP_ */