void QNmeaPositionInfoSourcePrivate::notifyNewUpdate(QGeoPositionInfo *update, bool hasFix) { // include <QDebug> before uncommenting //qDebug() << "QNmeaPositionInfoSourcePrivate::notifyNewUpdate()" << update->timestamp() << hasFix << m_invokedStart << (m_requestTimer && m_requestTimer->isActive()); QDate date = update->timestamp().date(); if (date.isValid()) { m_currentDate = date; } else { // some sentence have time but no date QTime time = update->timestamp().time(); if (time.isValid() && m_currentDate.isValid()) update->setTimestamp(QDateTime(m_currentDate, time, Qt::UTC)); } if (hasFix && update->isValid()) { if (m_requestTimer && m_requestTimer->isActive()) { m_requestTimer->stop(); emitUpdated(*update); } else if (m_invokedStart) { if (m_updateTimer && m_updateTimer->isActive()) { // for periodic updates, only want the most recent update m_pendingUpdate = *update; if (m_noUpdateLastInterval) { emitPendingUpdate(); m_noUpdateLastInterval = false; } } else { emitUpdated(*update); } } m_lastUpdate = *update; } }
void QNmeaPositionInfoSourcePrivate::notifyNewUpdate(QGeoPositionInfo *update, bool hasFix) { // include <QDebug> before uncommenting //qDebug() << "QNmeaPositionInfoSourcePrivate::notifyNewUpdate()" << update->timestamp() << hasFix << m_invokedStart << (m_requestTimer && m_requestTimer->isActive()); QDate date = update->timestamp().date(); if (date.isValid()) { m_currentDate = date; } else { // some sentence have time but no date QTime time = update->timestamp().time(); if (time.isValid() && m_currentDate.isValid()) update->setTimestamp(QDateTime(m_currentDate, time, Qt::UTC)); } // Some attributes are sent in separate NMEA sentences. Save and restore the accuracy // measurements. if (update->hasAttribute(QGeoPositionInfo::HorizontalAccuracy)) m_horizontalAccuracy = update->attribute(QGeoPositionInfo::HorizontalAccuracy); else if (!qIsNaN(m_horizontalAccuracy)) update->setAttribute(QGeoPositionInfo::HorizontalAccuracy, m_horizontalAccuracy); if (update->hasAttribute(QGeoPositionInfo::VerticalAccuracy)) m_verticalAccuracy = update->attribute(QGeoPositionInfo::VerticalAccuracy); else if (!qIsNaN(m_verticalAccuracy)) update->setAttribute(QGeoPositionInfo::VerticalAccuracy, m_verticalAccuracy); if (hasFix && update->isValid()) { if (m_requestTimer && m_requestTimer->isActive()) { m_requestTimer->stop(); emitUpdated(*update); } else if (m_invokedStart) { if (m_updateTimer && m_updateTimer->isActive()) { // for periodic updates, only want the most recent update m_pendingUpdate = *update; if (m_noUpdateLastInterval) { emitPendingUpdate(); m_noUpdateLastInterval = false; } } else { emitUpdated(*update); } } m_lastUpdate = *update; } }
void QNmeaPositionInfoSourcePrivate::timerEvent(QTimerEvent *) { emitPendingUpdate(); }