From 2462679de35b4d7b4c333876b9d372ac4bb2712a Mon Sep 17 00:00:00 2001 From: Paolo Angelelli Date: Sun, 3 Jun 2018 17:22:06 +0200 Subject: Combine NMEA sentences - Live mode This patch combines multiple nmea sentences related to the same update, preventing the push of multiple separate updates with the same timestamp. Task-number: QTBUG-64699 Change-Id: I082cd46924afe0f00e510dc059ff8594373b1e67 Reviewed-by: Alex Blasche --- .../qgeopositioninfosource/testqgeopositioninfosource.cpp | 4 ++-- .../tst_qnmeapositioninfosource.cpp | 15 ++++++--------- .../qnmeapositioninfosource/tst_qnmeapositioninfosource.h | 8 ++++++-- 3 files changed, 14 insertions(+), 13 deletions(-) (limited to 'tests') diff --git a/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp b/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp index fa073308..ce7b4d66 100644 --- a/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp +++ b/tests/auto/qgeopositioninfosource/testqgeopositioninfosource.cpp @@ -482,12 +482,12 @@ void TestQGeoPositionInfoSource::startUpdates_testIntervalChangesWhileRunning() m_source->setUpdateInterval(0); - QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 1) && (timeout.count() == 0), 7000); + QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000); spy.clear(); m_source->setUpdateInterval(0); - QTRY_VERIFY_WITH_TIMEOUT((spy.count() == 1) && (timeout.count() == 0), 7000); + QTRY_VERIFY_WITH_TIMEOUT((spy.count() > 0) && (timeout.count() == 0), 7000); spy.clear(); m_source->stopUpdates(); diff --git a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp index 886d7009..37fe7abc 100644 --- a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp +++ b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.cpp @@ -147,13 +147,14 @@ void tst_QNmeaPositionInfoSource::lastKnownPosition() QList dateTimes = createDateTimes(5); for (int i=0; isource()->requestUpdate(); + proxy->source()->requestUpdate(); // Irrelevant for this test proxy->feedUpdate(dateTimes[i]); QTRY_COMPARE(proxy->source()->lastKnownPosition().timestamp(), dateTimes[i]); } proxy->source()->startUpdates(); - dateTimes = createDateTimes(5); + // if dateTimes are older than before, they will be ignored. + dateTimes = createDateTimes(dateTimes.last().addMSecs(100), 5); for (int i=0; ifeedUpdate(dateTimes[i]); QTRY_COMPARE(proxy->source()->lastKnownPosition().timestamp(), dateTimes[i]); @@ -358,8 +359,10 @@ void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime() QObject::connect(proxy->source(), &QNmeaPositionInfoSource::positionUpdated, [](const QGeoPositionInfo &info) { qDebug() << info.timestamp(); }); + proxy->source()->startUpdates(); proxy->feedBytes(bytes); + QTest::qWait(1000); // default push delay is 20ms QTRY_COMPARE(spy.count(), dateTimes.count()); for (int i=0; i() << dt.addMSecs(200) << dt.addMSecs(300)) << (QList() << true << true) // accuracies are currently cached and injected in QGeoPositionInfos that do not have it @@ -424,13 +428,6 @@ void tst_QNmeaPositionInfoSource::startUpdates_waitForValidDateTime_data() << bytes << (QList() << dt.addMSecs(200) << dt.addMSecs(300)) << (QList() << true << true) << (QList() << true << true); // First GGA gets VDOP from GSA bundled into previous, as it has no timestamp, second GGA gets the cached value. - } else { - // FixMe: remove else block once NMEA realtime mode supports timestamp-based combination of nmea sentences - QTest::newRow("Feed ZDA,GGA,GSA,GGA; expect vertical accuracy from second GGA") - << bytes << (QList() << dt.addMSecs(200) << dt.addMSecs(300)) - << (QList() << true << true) - << (QList() << false << true); - } if (m_mode == QNmeaPositionInfoSource::SimulationMode) { diff --git a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h index 60a4093c..073a4aac 100644 --- a/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h +++ b/tests/auto/qnmeapositioninfosource/tst_qnmeapositioninfosource.h @@ -61,10 +61,9 @@ public: tst_QNmeaPositionInfoSource(QNmeaPositionInfoSource::UpdateMode mode, QObject *parent = 0); private: - QList createDateTimes(int count) const + QList createDateTimes(const QDateTime &dt, int count) const { QList dateTimes; - QDateTime dt = QDateTime::currentDateTime().toUTC(); int interval = 100; for (int i=0; i createDateTimes(int count) const + { + return createDateTimes(QDateTime::currentDateTime().toUTC(), count); + } + private slots: void initTestCase(); -- cgit v1.2.1