diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2017-01-11 22:03:34 +0100 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2017-01-17 14:26:38 +0000 |
commit | d4bbdb83b26f8219b6c64bcff3967aa15db07d9c (patch) | |
tree | cd95d46d532298757ac6b3620953cb3a2e792c4d /tests | |
parent | 52967158da2c02efceea610e83786bbd6b5a888a (diff) |
CAN: Introduce CAN FD Bitrate Switch (BRS)
QCanBusFrame:
Added hasBitrateSwitch and setBitrateSwitch to QCanBusFrame
and therefore, increased the QCanBusFrame version number.
* Setting QCanBusFrame::setBitrateSwitch(true)
also sets QCanBusFrame::setFlexibleDataRateFormat(true)
* Setting QCanBusFrame::setFlexibleDataRateFormat(false)
also sets QCanBusFrame::setBitrateSwitch(false)
QCanBusDevice:
Reference implementation and documentation are done for
the SocketCAN plugin. The CAN Example allows to send
frames with Bitrate Switch enabled and visualize received
frames with Bitrate Switch set.
Unfortunately, the SocketCAN plugin does not allow to change
any bitrate yet, so the newly added data bitrate selection
box in ConnectDialog seems a bit useless. This box is
however needed once other plugins become CAN FD capable and
implement bitrate switching.
[ChangeLog][QCanBusFrame] Introduced flag to allow data
bitrate switching for CAN FD frames. Reference
implementation is done for the SocketCAN plugin.
Task-number: QTBUG-56720
Change-Id: Ieab04020f4750c8b0085624d2250ad7cd982cd96
Reviewed-by: Rolf Eike Beer <eb@emlix.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qcanbusframe/tst_qcanbusframe.cpp | 66 |
1 files changed, 58 insertions, 8 deletions
diff --git a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp index 78f35da..4decffa 100644 --- a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp +++ b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp @@ -48,6 +48,7 @@ private slots: void id(); void payload(); void timeStamp(); + void bitRateSwitch(); void tst_isValid_data(); void tst_isValid(); @@ -180,6 +181,47 @@ void tst_QCanBusFrame::timeStamp() QCOMPARE(timeStamp.microSeconds(), 1); } +void tst_QCanBusFrame::bitRateSwitch() +{ + QCanBusFrame frame(QCanBusFrame::DataFrame); + QVERIFY(!frame.hasBitrateSwitch()); + + // set CAN FD does not set BRS + frame.setFlexibleDataRateFormat(true); + QVERIFY(frame.hasFlexibleDataRateFormat()); + QVERIFY(!frame.hasBitrateSwitch()); + + // set BRS keeps CAN FD + frame.setBitrateSwitch(true); + QVERIFY(frame.hasFlexibleDataRateFormat()); + QVERIFY(frame.hasBitrateSwitch()); + + // clear BRS keeps CAN FD + frame.setBitrateSwitch(false); + QVERIFY(frame.hasFlexibleDataRateFormat()); + QVERIFY(!frame.hasBitrateSwitch()); + + // clear CAN FD + frame.setFlexibleDataRateFormat(false); + QVERIFY(!frame.hasFlexibleDataRateFormat()); + QVERIFY(!frame.hasBitrateSwitch()); + + // set BRS sets CAN FD + frame.setBitrateSwitch(true); + QVERIFY(frame.hasFlexibleDataRateFormat()); + QVERIFY(frame.hasBitrateSwitch()); + + // clear CAN FD clears BRS + frame.setFlexibleDataRateFormat(false); + QVERIFY(!frame.hasFlexibleDataRateFormat()); + QVERIFY(!frame.hasBitrateSwitch()); + + // default constructed CAN FD frame has no BRS + const QCanBusFrame frame2(0x123, QByteArray(10, 0x55)); + QVERIFY(frame2.hasFlexibleDataRateFormat()); + QVERIFY(!frame2.hasBitrateSwitch()); +} + void tst_QCanBusFrame::tst_isValid_data() { QTest::addColumn<QCanBusFrame::FrameType>("frameType"); @@ -346,33 +388,37 @@ void tst_QCanBusFrame::streaming_data() QTest::addColumn<qint64>("microSeconds"); QTest::addColumn<bool>("isExtended"); QTest::addColumn<bool>("isFlexibleDataRate"); + QTest::addColumn<bool>("isBitrateSwitch"); QTest::addColumn<QCanBusFrame::FrameType>("frameType"); QTest::newRow("emptyFrame") << quint32(0) << QByteArray() << qint64(0) << qint64(0) - << false << false << QCanBusFrame::DataFrame; + << false << false << false << QCanBusFrame::DataFrame; QTest::newRow("fullFrame1") << quint32(123) << QByteArray("abcde1") << qint64(456) << qint64(784) - << true << false << QCanBusFrame::DataFrame; + << true << false << false << QCanBusFrame::DataFrame; QTest::newRow("fullFrame2") << quint32(123) << QByteArray("abcde2") << qint64(457) << qint64(785) - << false << false << QCanBusFrame::DataFrame; + << false << false << false << QCanBusFrame::DataFrame; QTest::newRow("fullFrameFD") << quint32(123) << QByteArray("abcdfd") << qint64(457) << qint64(785) - << false << true << QCanBusFrame::DataFrame; + << false << true << false << QCanBusFrame::DataFrame; + QTest::newRow("fullFrameBRS") << quint32(123) << QByteArray("abcdfd") + << qint64(457) << qint64(785) + << false << true << true << QCanBusFrame::DataFrame; QTest::newRow("fullFrame3") << quint32(123) << QByteArray("abcde3") << qint64(458) << qint64(786) - << true << false << QCanBusFrame::RemoteRequestFrame; + << true << false << false << QCanBusFrame::RemoteRequestFrame; QTest::newRow("fullFrame4") << quint32(123) << QByteArray("abcde4") << qint64(459) << qint64(787) - << false << false << QCanBusFrame::RemoteRequestFrame; + << false << false << false << QCanBusFrame::RemoteRequestFrame; QTest::newRow("fullFrame5") << quint32(123) << QByteArray("abcde5") << qint64(460) << qint64(789) - << true << false << QCanBusFrame::ErrorFrame; + << true << false << false << QCanBusFrame::ErrorFrame; QTest::newRow("fullFrame6") << quint32(123) << QByteArray("abcde6") << qint64(453) << qint64(788) - << false << false << QCanBusFrame::ErrorFrame; + << false << false << false << QCanBusFrame::ErrorFrame; } void tst_QCanBusFrame::streaming() @@ -383,6 +429,7 @@ void tst_QCanBusFrame::streaming() QFETCH(qint64, microSeconds); QFETCH(bool, isExtended); QFETCH(bool, isFlexibleDataRate); + QFETCH(bool, isBitrateSwitch); QFETCH(QCanBusFrame::FrameType, frameType); QCanBusFrame originalFrame(frameId, payload); @@ -391,6 +438,7 @@ void tst_QCanBusFrame::streaming() originalFrame.setExtendedFrameFormat(isExtended); originalFrame.setFlexibleDataRateFormat(isFlexibleDataRate); + originalFrame.setBitrateSwitch(isBitrateSwitch); originalFrame.setFrameType(frameType); QByteArray buffer; @@ -413,6 +461,8 @@ void tst_QCanBusFrame::streaming() originalFrame.hasExtendedFrameFormat()); QCOMPARE(restoredFrame.hasFlexibleDataRateFormat(), originalFrame.hasFlexibleDataRateFormat()); + QCOMPARE(restoredFrame.hasBitrateSwitch(), + originalFrame.hasBitrateSwitch()); } void tst_QCanBusFrame::tst_error() |