Skip to content

Commit c49d7ab

Browse files
authored
Merge pull request arduino-libraries#20 from sandeepmistry/writeDiscreteInputs-writeInputRegisters
Implement missing ModbusServer::writeDiscreteInputs and ModbusServer::writeInputRegister methods
2 parents 2825911 + 2ca6395 commit c49d7ab

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/ModbusServer.cpp

+14-4
Original file line numberDiff line numberDiff line change
@@ -249,29 +249,39 @@ int ModbusServer::registerMaskWrite(int address, uint16_t andMask, uint16_t orMa
249249
}
250250

251251
int ModbusServer::discreteInputWrite(int address, uint8_t value)
252+
{
253+
return writeDiscreteInputs(address, &value, 1);
254+
}
255+
256+
int ModbusServer::writeDiscreteInputs(int address, uint8_t values[], int nb)
252257
{
253258
if (_mbMapping.start_input_bits > address ||
254-
(_mbMapping.start_input_bits + _mbMapping.nb_input_bits) < (address + 1)) {
259+
(_mbMapping.start_input_bits + _mbMapping.nb_input_bits) < (address + nb)) {
255260
errno = EMBXILADD;
256261

257262
return 0;
258263
}
259264

260-
_mbMapping.tab_input_bits[address - _mbMapping.start_input_bits] = value;
265+
memcpy(&_mbMapping.tab_input_bits[address - _mbMapping.start_input_bits], values, sizeof(values[0]) * nb);
261266

262267
return 1;
263268
}
264269

265270
int ModbusServer::inputRegisterWrite(int address, uint16_t value)
271+
{
272+
return writeInputRegisters(address, &value, 1);
273+
}
274+
275+
int ModbusServer::writeInputRegisters(int address, uint16_t values[], int nb)
266276
{
267277
if (_mbMapping.start_input_registers > address ||
268-
(_mbMapping.start_input_registers + _mbMapping.nb_input_registers) < (address + 1)) {
278+
(_mbMapping.start_input_registers + _mbMapping.nb_input_registers) < (address + nb)) {
269279
errno = EMBXILADD;
270280

271281
return 0;
272282
}
273283

274-
_mbMapping.tab_input_registers[address - _mbMapping.start_input_registers] = value;
284+
memcpy(&_mbMapping.tab_input_registers[address - _mbMapping.start_input_registers], values, sizeof(values[0]) * nb);
275285

276286
return 1;
277287
}

0 commit comments

Comments
 (0)