summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2016-09-07 21:03:44 +0200
committerAndré Hartmann <aha_1980@gmx.de>2016-09-19 06:35:59 +0000
commita6691ac17232863b063d6e6dd4fd7da3bab9f908 (patch)
tree08f05bd85c71614fc8698312bd43873b4291bb70
parent0def912c140ff23b107bf1ba93d9f0b1487033b2 (diff)
QCanBusFrame: Easier TimeStamp creation from microseconds only
The new function fromMicroSeconds() automatically converts overflow microseconds to seconds. [ChangeLog][QtSerialBus][QCanBusFrame::TimeStamp] TimeStamp::fromMicroSeconds() creates time stamps with normalized microseconds and the overflow added to seconds. Change-Id: I55aab33c1bcf444c50b09415e038a3c8929caeab Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--src/plugins/canbus/vectorcan/vectorcanbackend.cpp3
-rw-r--r--src/serialbus/qcanbusframe.cpp13
-rw-r--r--src/serialbus/qcanbusframe.h4
-rw-r--r--tests/auto/qcanbusframe/tst_qcanbusframe.cpp15
4 files changed, 33 insertions, 2 deletions
diff --git a/src/plugins/canbus/vectorcan/vectorcanbackend.cpp b/src/plugins/canbus/vectorcan/vectorcanbackend.cpp
index c178b50..d06f124 100644
--- a/src/plugins/canbus/vectorcan/vectorcanbackend.cpp
+++ b/src/plugins/canbus/vectorcan/vectorcanbackend.cpp
@@ -324,8 +324,7 @@ void VectorCanBackendPrivate::startRead()
QCanBusFrame frame(msg.id, QByteArray(reinterpret_cast<const char *>(msg.data),
int(msg.dlc)));
- const quint64 usecs = event.timeStamp / 1000;
- frame.setTimeStamp(QCanBusFrame::TimeStamp(usecs / 1000000, usecs % 1000000));
+ frame.setTimeStamp(QCanBusFrame::TimeStamp::fromMicroSeconds(event.timeStamp / 1000));
frame.setExtendedFrameFormat(msg.id & XL_CAN_EXT_MSG_ID);
frame.setFrameType((msg.flags & XL_CAN_MSG_FLAG_REMOTE_FRAME)
? QCanBusFrame::RemoteRequestFrame
diff --git a/src/serialbus/qcanbusframe.cpp b/src/serialbus/qcanbusframe.cpp
index da8a595..d963f51 100644
--- a/src/serialbus/qcanbusframe.cpp
+++ b/src/serialbus/qcanbusframe.cpp
@@ -243,6 +243,19 @@ QT_BEGIN_NAMESPACE
\fn TimeStamp::TimeStamp(qint64 s, qint64 usec)
Constructs a TimeStamp in seconds, \a s, and microseconds, \a usec.
+
+ \note The TimeStamp is not normalized, i.e. microseconds greater 1000000 are not
+ converted to seconds.
+*/
+
+/*!
+ \fn static TimeStamp TimeStamp::fromMicroSeconds(qint64 usec)
+ \since 5.8
+
+ Constructs a normalized TimeStamp from microseconds \a usec.
+
+ The created TimeStamp is normalized, i.e. microsconds greater 1000000 are converted
+ to seconds.
*/
/*!
diff --git a/src/serialbus/qcanbusframe.h b/src/serialbus/qcanbusframe.h
index 5658f94..131236d 100644
--- a/src/serialbus/qcanbusframe.h
+++ b/src/serialbus/qcanbusframe.h
@@ -52,6 +52,10 @@ public:
public:
Q_DECL_CONSTEXPR TimeStamp(qint64 s = 0, qint64 usec = 0) Q_DECL_NOTHROW
: secs(s), usecs(usec) {}
+
+ Q_DECL_CONSTEXPR static TimeStamp fromMicroSeconds(qint64 usec) Q_DECL_NOTHROW
+ { return TimeStamp(usec / 1000000, usec % 1000000); }
+
Q_DECL_CONSTEXPR qint64 seconds() const Q_DECL_NOTHROW { return secs; }
Q_DECL_CONSTEXPR qint64 microSeconds() const Q_DECL_NOTHROW { return usecs; }
diff --git a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp
index 763d116..e647a55 100644
--- a/tests/auto/qcanbusframe/tst_qcanbusframe.cpp
+++ b/tests/auto/qcanbusframe/tst_qcanbusframe.cpp
@@ -140,6 +140,21 @@ void tst_QCanBusFrame::timeStamp()
timeStamp.setSeconds(4);
QCOMPARE(timeStamp.seconds(), 4);
QCOMPARE(timeStamp.microSeconds(), 5);
+
+ // fromMicroSeconds: no microsecond overflow
+ timeStamp = QCanBusFrame::TimeStamp::fromMicroSeconds(999999);
+ QCOMPARE(timeStamp.seconds(), 0);
+ QCOMPARE(timeStamp.microSeconds(), 999999);
+
+ // fromMicroSeconds: microsecond overflow
+ timeStamp = QCanBusFrame::TimeStamp::fromMicroSeconds(1000000);
+ QCOMPARE(timeStamp.seconds(), 1);
+ QCOMPARE(timeStamp.microSeconds(), 0);
+
+ // fromMicroSeconds: microsecond overflow
+ timeStamp = QCanBusFrame::TimeStamp::fromMicroSeconds(2000001);
+ QCOMPARE(timeStamp.seconds(), 2);
+ QCOMPARE(timeStamp.microSeconds(), 1);
}
void tst_QCanBusFrame::tst_isValid_data()