40 lines
1013 B
C++
40 lines
1013 B
C++
/*
|
|
* ModbusAction.cpp
|
|
*
|
|
* Created on: 18 ìàð. 2021 ã.
|
|
* Author: titov
|
|
*/
|
|
|
|
#include "ModbusAction.hh"
|
|
|
|
driver::modbus::ModbusAction::ModbusAction( systemic::IFunctor<void> & action_on,
|
|
systemic::IFunctor<void> & 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;
|
|
|
|
}
|