45 lines
892 B
C++
45 lines
892 B
C++
/*
|
||
* ModbusDiscreteOutput.cpp
|
||
*
|
||
* Created on: 18 мар. 2021 г.
|
||
* Author: titov
|
||
*/
|
||
|
||
#include "ModbusDiscreteOutput.hh"
|
||
|
||
driver::modbus::ModbusDiscreteOutput::ModbusDiscreteOutput( bool initial_state, bool inversion ) : coil_state(initial_state), inversion(inversion) {}
|
||
|
||
const bool & driver::modbus::ModbusDiscreteOutput::status() const {
|
||
|
||
return coil_state;
|
||
|
||
}
|
||
|
||
driver::modbus::ModbusDiscreteOutput::Status driver::modbus::ModbusDiscreteOutput::read( uint16_t & reg ) {
|
||
|
||
reg = ( coil_state == inversion ? 0x0000u : 0xFF00u );
|
||
|
||
return Done;
|
||
|
||
}
|
||
|
||
driver::modbus::ModbusDiscreteOutput::Status driver::modbus::ModbusDiscreteOutput::write( uint16_t reg ) {
|
||
|
||
switch(reg) {
|
||
case 0x0000u:
|
||
|
||
coil_state = off_state();
|
||
|
||
return Done;
|
||
case 0xFF00u:
|
||
|
||
coil_state = on_state();
|
||
|
||
return Done;
|
||
default:
|
||
return Failure;
|
||
|
||
}
|
||
|
||
}
|