summaryrefslogtreecommitdiffstats
path: root/src/serialbus/qmodbusserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/serialbus/qmodbusserver.cpp')
-rw-r--r--src/serialbus/qmodbusserver.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/serialbus/qmodbusserver.cpp b/src/serialbus/qmodbusserver.cpp
index 5c0f8dd..929ac9a 100644
--- a/src/serialbus/qmodbusserver.cpp
+++ b/src/serialbus/qmodbusserver.cpp
@@ -502,10 +502,11 @@ bool QModbusServer::writeData(const QModbusDataUnit &newData)
return false;
bool changeRequired = false;
- for (int i = newData.startAddress(); i <= rangeEndAddress; i++) {
- quint16 newValue = newData.value(i - newData.startAddress());
- changeRequired |= (current.value(i) != newValue);
- current.setValue(i, newValue);
+ for (uint i = 0; i < newData.valueCount(); i++) {
+ const quint16 newValue = newData.value(i);
+ const int translatedIndex = newData.startAddress() - current.startAddress() + i;
+ changeRequired |= (current.value(translatedIndex) != newValue);
+ current.setValue(translatedIndex, newValue);
}
if (changeRequired)
@@ -553,7 +554,7 @@ bool QModbusServer::readData(QModbusDataUnit *newData) const
if (rangeEndAddress < current.startAddress() || rangeEndAddress > internalRangeEndAddress)
return false;
- newData->setValues(current.values().mid(newData->startAddress(), newData->valueCount()));
+ newData->setValues(current.values().mid(newData->startAddress() - current.startAddress(), newData->valueCount()));
return true;
}