summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/serialbus/qcanbusframe.cpp4
-rw-r--r--src/serialbus/qcanbusframe.h5
-rw-r--r--tests/auto/qcanbusframe/tst_qcanbusframe.cpp19
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()