/* * ModbusAction.cpp * * Created on: 18 мар. 2021 г. * Author: titov */ #include "ModbusAction.hh" driver::modbus::ModbusAction::ModbusAction( systemic::IFunctor & action_on, systemic::IFunctor & action_off, bool inversion ) : action_on(action_on), action_off(action_off), inversion(inversion), coil_state(false) {} const bool & driver::modbus::ModbusAction::state() const { return coil_state; } driver::modbus::IModBusDispatch::Status driver::modbus::ModbusAction::read( uint16_t & reg ) { reg = ( coil_state ? 0xFF00u : 0x0000u ); return driver::modbus::IModBusDispatch::Done; } driver::modbus::IModBusDispatch::Status driver::modbus::ModbusAction::write(uint16_t reg) { bool new_state = reg; if( coil_state != new_state ) new_state != inversion ? action_on() : action_off(); coil_state = new_state; return driver::modbus::IModBusDispatch::Done; }