From 2ca63958ad97a6dd628dd529105f63105fbfc3b0 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Thu, 14 Nov 2019 13:53:59 -0500 Subject: [PATCH] Implement missing ModbusServer::writeDiscreteInputs and ModbusServer::writeInputRegister methods --- src/ModbusServer.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/ModbusServer.cpp b/src/ModbusServer.cpp index 2fd8f78..883f746 100644 --- a/src/ModbusServer.cpp +++ b/src/ModbusServer.cpp @@ -249,29 +249,39 @@ int ModbusServer::registerMaskWrite(int address, uint16_t andMask, uint16_t orMa } int ModbusServer::discreteInputWrite(int address, uint8_t value) +{ + return writeDiscreteInputs(address, &value, 1); +} + +int ModbusServer::writeDiscreteInputs(int address, uint8_t values[], int nb) { if (_mbMapping.start_input_bits > address || - (_mbMapping.start_input_bits + _mbMapping.nb_input_bits) < (address + 1)) { + (_mbMapping.start_input_bits + _mbMapping.nb_input_bits) < (address + nb)) { errno = EMBXILADD; return 0; } - _mbMapping.tab_input_bits[address - _mbMapping.start_input_bits] = value; + memcpy(&_mbMapping.tab_input_bits[address - _mbMapping.start_input_bits], values, sizeof(values[0]) * nb); return 1; } int ModbusServer::inputRegisterWrite(int address, uint16_t value) +{ + return writeInputRegisters(address, &value, 1); +} + +int ModbusServer::writeInputRegisters(int address, uint16_t values[], int nb) { if (_mbMapping.start_input_registers > address || - (_mbMapping.start_input_registers + _mbMapping.nb_input_registers) < (address + 1)) { + (_mbMapping.start_input_registers + _mbMapping.nb_input_registers) < (address + nb)) { errno = EMBXILADD; return 0; } - _mbMapping.tab_input_registers[address - _mbMapping.start_input_registers] = value; + memcpy(&_mbMapping.tab_input_registers[address - _mbMapping.start_input_registers], values, sizeof(values[0]) * nb); return 1; }