diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2016-09-07 21:03:44 +0200 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2016-09-19 06:35:59 +0000 |
commit | a6691ac17232863b063d6e6dd4fd7da3bab9f908 (patch) | |
tree | 08f05bd85c71614fc8698312bd43873b4291bb70 | |
parent | 0def912c140ff23b107bf1ba93d9f0b1487033b2 (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.cpp | 3 | ||||
-rw-r--r-- | src/serialbus/qcanbusframe.cpp | 13 | ||||
-rw-r--r-- | src/serialbus/qcanbusframe.h | 4 | ||||
-rw-r--r-- | tests/auto/qcanbusframe/tst_qcanbusframe.cpp | 15 |
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() |