@@ -249,29 +249,39 @@ int ModbusServer::registerMaskWrite(int address, uint16_t andMask, uint16_t orMa
249
249
}
250
250
251
251
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)
252
257
{
253
258
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 )) {
255
260
errno = EMBXILADD;
256
261
257
262
return 0 ;
258
263
}
259
264
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) ;
261
266
262
267
return 1 ;
263
268
}
264
269
265
270
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)
266
276
{
267
277
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 )) {
269
279
errno = EMBXILADD;
270
280
271
281
return 0 ;
272
282
}
273
283
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) ;
275
285
276
286
return 1 ;
277
287
}
0 commit comments