summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-11-16 08:26:29 +0100
committerLiang Qi <liang.qi@qt.io>2016-11-16 08:27:51 +0100
commit498b1424ce273beed02c5e1c93ed0ffd610624b8 (patch)
tree7be9bf206d6153296fd09680e8bcbf5997dc0a26
parentdc210f2f4904eb244250d94c37a38e2b57700044 (diff)
parent20adfdf12e29149c589310a065b0259130ac51f0 (diff)
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts: tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp Change-Id: Id97e8ef6a6c176add1eda3738888c69c33f5378c
-rw-r--r--src/serialbus/qmodbuspdu.cpp8
-rw-r--r--sync.profile5
-rw-r--r--tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp19
3 files changed, 23 insertions, 9 deletions
diff --git a/src/serialbus/qmodbuspdu.cpp b/src/serialbus/qmodbuspdu.cpp
index d6e1ef9..5b1a940 100644
--- a/src/serialbus/qmodbuspdu.cpp
+++ b/src/serialbus/qmodbuspdu.cpp
@@ -555,18 +555,18 @@ int QModbusRequest::calculateDataSize(const QModbusRequest &request)
case QModbusPdu::WriteMultipleCoils:
minimum -= 1; // first payload payload byte
if (request.dataSize() >= minimum)
- size = minimum + request.data()[minimum - 1] /*byte count*/;
+ size = minimum + quint8(request.data()[minimum - 1]) /*byte count*/;
break;
case QModbusPdu::WriteMultipleRegisters:
case QModbusPdu::ReadWriteMultipleRegisters:
minimum -= 2; // first 2 payload payload bytes
if (request.dataSize() >= minimum)
- size = minimum + request.data()[minimum - 1] /*byte count*/;
+ size = minimum + quint8(request.data()[minimum - 1]) /*byte count*/;
break;
case QModbusPdu::ReadFileRecord:
case QModbusPdu::WriteFileRecord:
if (request.dataSize() >= 1)
- size = 1 /*byte count*/ + request.data()[0] /*actual bytes*/;
+ size = 1 /*byte count*/ + quint8(request.data()[0]) /*actual bytes*/;
break;
case QModbusPdu::EncapsulatedInterfaceTransport: {
if (request.dataSize() < minimum)
@@ -710,7 +710,7 @@ int QModbusResponse::calculateDataSize(const QModbusResponse &response)
case QModbusResponse::ReadWriteMultipleRegisters:
case QModbusResponse::ReportServerId:
if (response.dataSize() >= 1)
- size = 1 /*byte count*/ + response.data()[0] /*actual bytes*/;
+ size = 1 /*byte count*/ + quint8(response.data()[0]) /*actual bytes*/;
break;
case QModbusResponse::ReadFifoQueue: {
if (response.dataSize() >= 2) {
diff --git a/sync.profile b/sync.profile
index 57da4d8..e7125c6 100644
--- a/sync.profile
+++ b/sync.profile
@@ -1,8 +1,3 @@
%modules = (
"QtSerialBus" => "$basedir/src/serialbus",
);
-
-%dependencies = (
- "qtbase" => "",
- "qtserialport" => "",
-);
diff --git a/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp b/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp
index 592a14e..f442344 100644
--- a/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp
+++ b/tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp
@@ -844,6 +844,25 @@ private slots:
});
QCOMPARE(QModbusRequest::calculateDataSize(request), 27);
}
+
+ void testCalculateLongDataSize()
+ {
+ QByteArray longData = QByteArray(128, ' ');
+ longData[0] = longData.size();
+ const QModbusResponse response(QModbusResponse::ReadCoils, longData);
+ QCOMPARE(QModbusResponse::calculateDataSize(response), 1 + longData.size());
+
+ const QModbusRequest wfrRequest(QModbusPdu::WriteFileRecord, longData);
+ QCOMPARE(QModbusRequest::calculateDataSize(wfrRequest), 1 + longData.size());
+
+ longData = QByteArray(4 + 128, ' ');
+ longData[4] = 128;
+ const QModbusRequest wmcRequest(QModbusPdu::WriteMultipleCoils, longData);
+ QCOMPARE(QModbusRequest::calculateDataSize(wmcRequest), 1 + longData.size());
+
+ const QModbusRequest wmrRequest(QModbusPdu::WriteMultipleRegisters, longData);
+ QCOMPARE(QModbusRequest::calculateDataSize(wmrRequest), 1 + longData.size());
+ }
};
QTEST_MAIN(tst_QModbusPdu)