45 lines
888 B
C++
45 lines
888 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;
|
|
|
|
}
|
|
|
|
}
|