40 lines
1017 B
C++
40 lines
1017 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;
|
||
|
||
}
|