diff options
-rw-r--r-- | src/serialbus/qcanbusframe.cpp | 4 | ||||
-rw-r--r-- | src/serialbus/qcanbusframe.h | 5 | ||||
-rw-r--r-- | tests/auto/qcanbusframe/tst_qcanbusframe.cpp | 19 |
3 files changed, 22 insertions, 6 deletions
diff --git a/src/serialbus/qcanbusframe.cpp b/src/serialbus/qcanbusframe.cpp index 6ffae5f..a71a0b6 100644 --- a/src/serialbus/qcanbusframe.cpp +++ b/src/serialbus/qcanbusframe.cpp @@ -76,9 +76,9 @@ QT_BEGIN_NAMESPACE Sets the identifier of the CAN frame to \a newFrameId. The maximum size of a CAN frame identifier is 11 bits, which can be extended up to 29 bits by supporting the \e {CAN extended frame - format}. + format}. The \e {CAN extended frame format} setting is automatically adapted to match \a newFrameId. - \sa frameId() + \sa frameId(), hasExtendedFrameFormat() */ /*! diff --git a/src/serialbus/qcanbusframe.h b/src/serialbus/qcanbusframe.h index 5fbe65d..66d8e81 100644 --- a/src/serialbus/qcanbusframe.h +++ b/src/serialbus/qcanbusframe.h @@ -73,7 +73,7 @@ public: explicit QCanBusFrame(QCanBusFrame::FrameType type) : canId(0x0), - isExtendedFrame(0x1), + isExtendedFrame(0x0), version(0x0) { setFrameType(type); @@ -100,7 +100,7 @@ public: explicit QCanBusFrame(quint32 identifier = 0, const QByteArray &data = QByteArray()) : canId(identifier & 0x1FFFFFFFU), format(DataFrame), - isExtendedFrame(0x1), + isExtendedFrame((identifier & 0x1FFFF800U) ? 0x1 : 0x0), version(0x0), load(data) { @@ -157,6 +157,7 @@ public: inline void setFrameId(quint32 newFrameId) { canId = (newFrameId & 0x1FFFFFFFU); + setExtendedFrameFormat(newFrameId & 0x1FFFF800U); } inline void setPayload(const QByteArray &data) { load = data; } diff --git a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp index 61748a7..899dd98 100644 --- a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp +++ b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp @@ -66,6 +66,7 @@ void tst_QCanBusFrame::constructors() { QCanBusFrame frame1; QCanBusFrame frame2(123, "tst"); + QCanBusFrame frame3(123456, "tst"); QCanBusFrame::TimeStamp timeStamp1; QCanBusFrame::TimeStamp timeStamp2(5, 5); @@ -75,25 +76,39 @@ void tst_QCanBusFrame::constructors() QVERIFY(!frame2.payload().isEmpty()); QVERIFY(frame2.frameId()); + QVERIFY(!frame3.payload().isEmpty()); + QVERIFY(frame3.frameId()); + QVERIFY(!timeStamp1.seconds()); QVERIFY(!timeStamp1.microSeconds()); QVERIFY(timeStamp2.seconds()); QVERIFY(timeStamp2.microSeconds()); - QVERIFY(frame1.hasExtendedFrameFormat() == true); - QVERIFY(frame2.hasExtendedFrameFormat() == true); + QVERIFY(frame1.hasExtendedFrameFormat() == false); + QVERIFY(frame2.hasExtendedFrameFormat() == false); + QVERIFY(frame3.hasExtendedFrameFormat() == true); QCOMPARE(frame1.frameType(), QCanBusFrame::DataFrame); QCOMPARE(frame2.frameType(), QCanBusFrame::DataFrame); + QCOMPARE(frame3.frameType(), QCanBusFrame::DataFrame); } void tst_QCanBusFrame::id() { QCanBusFrame frame; QVERIFY(!frame.frameId()); + frame.setFrameId(2047u); + QCOMPARE(frame.frameId(), 2047u); + QVERIFY(frame.hasExtendedFrameFormat() == false); + // id > 2^11 -> extended format + frame.setFrameId(2048u); + QCOMPARE(frame.frameId(), 2048u); + QVERIFY(frame.hasExtendedFrameFormat() == true); + // id < 2^11 -> no extended format frame.setFrameId(512u); QCOMPARE(frame.frameId(), 512u); + QVERIFY(frame.hasExtendedFrameFormat() == false); } void tst_QCanBusFrame::payload() |