@@ -249,29 +249,39 @@ int ModbusServer::registerMaskWrite(int address, uint16_t andMask, uint16_t orMa
249249}
250250
251251int 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
265270int 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