diff options
-rw-r--r-- | src/serialbus/qmodbuspdu.cpp | 8 | ||||
-rw-r--r-- | sync.profile | 5 | ||||
-rw-r--r-- | tests/auto/qmodbuspdu/tst_qmodbuspdu.cpp | 19 |
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) |