From 0114a391b751bf29107e73467a0bce29a5541a2b Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Thu, 3 May 2018 14:12:32 -0700 Subject: [PATCH] Slightly better Log Replay --- src/FactSystem/ParameterManager.cc | 8 ++++++-- src/FactSystem/ParameterManager.h | 30 +++++++++--------------------- src/comm/LogReplayLink.cc | 6 ++++++ src/comm/LogReplayLink.h | 1 + src/ui/QGCMAVLinkLogPlayer.cc | 30 ++++++++++++++++++++---------- src/ui/QGCMAVLinkLogPlayer.h | 2 ++ src/ui/QGCMAVLinkLogPlayer.ui | 9 ++++++++- 7 files changed, 52 insertions(+), 34 deletions(-) diff --git a/src/FactSystem/ParameterManager.cc b/src/FactSystem/ParameterManager.cc index ec1cd1384..78fe43f0c 100644 --- a/src/FactSystem/ParameterManager.cc +++ b/src/FactSystem/ParameterManager.cc @@ -86,7 +86,7 @@ ParameterManager::ParameterManager(Vehicle* vehicle) _waitingForDefaultComponent = false; emit parametersReadyChanged(_parametersReady); emit missingParametersChanged(_missingParameters); - } else { + } else if (!_logReplay){ refreshAllParameters(); } } @@ -358,7 +358,7 @@ void ParameterManager::_parameterUpdate(int vehicleId, int componentId, QString // Update param cache. The param cache is only used on PX4 Firmware since ArduPilot and Solo have volatile params // which invalidate the cache. The Solo also streams param updates in flight for things like gimbal values // which in turn causes a perf problem with all the param cache updates. - if (_vehicle->px4Firmware()) { + if (!_logReplay && _vehicle->px4Firmware()) { if (_prevWaitingReadParamIndexCount + _prevWaitingReadParamNameCount != 0 && readWaitingParamCount == 0) { // All reads just finished, update the cache _writeLocalParamCache(vehicleId, componentId); @@ -604,6 +604,10 @@ bool ParameterManager::_fillIndexBatchQueue(bool waitingParamTimeout) void ParameterManager::_waitingParamTimeout(void) { + if (_logReplay) { + return; + } + bool paramsRequested = false; const int maxBatchSize = 10; int batchCount = 0; diff --git a/src/FactSystem/ParameterManager.h b/src/FactSystem/ParameterManager.h index 33d14ff8a..30dd672b9 100644 --- a/src/FactSystem/ParameterManager.h +++ b/src/FactSystem/ParameterManager.h @@ -7,9 +7,7 @@ * ****************************************************************************/ - -#ifndef ParameterManager_H -#define ParameterManager_H +#pragma once #include #include @@ -25,33 +23,26 @@ #include "QGCMAVLink.h" #include "Vehicle.h" -/// @file -/// @author Don Gagne - Q_DECLARE_LOGGING_CATEGORY(ParameterManagerVerbose1Log) Q_DECLARE_LOGGING_CATEGORY(ParameterManagerVerbose2Log) Q_DECLARE_LOGGING_CATEGORY(ParameterManagerDebugCacheFailureLog) -/// Connects to Parameter Manager to load/update Facts class ParameterManager : public QObject { Q_OBJECT public: /// @param uas Uas which this set of facts is associated with - ParameterManager(Vehicle* vehicle); - ~ParameterManager(); - - /// true: Parameters are ready for use - Q_PROPERTY(bool parametersReady READ parametersReady NOTIFY parametersReadyChanged) - bool parametersReady(void) { return _parametersReady; } + ParameterManager (Vehicle* vehicle); + ~ParameterManager (); - /// true: Parameters are missing from firmware response, false: all parameters received from firmware - Q_PROPERTY(bool missingParameters READ missingParameters NOTIFY missingParametersChanged) - bool missingParameters(void) { return _missingParameters; } + Q_PROPERTY(bool parametersReady READ parametersReady NOTIFY parametersReadyChanged) ///< true: Parameters are ready for use + Q_PROPERTY(bool missingParameters READ missingParameters NOTIFY missingParametersChanged) ///< true: Parameters are missing from firmware response, false: all parameters received from firmware + Q_PROPERTY(double loadProgress READ loadProgress NOTIFY loadProgressChanged) - Q_PROPERTY(double loadProgress READ loadProgress NOTIFY loadProgressChanged) - double loadProgress(void) const { return _loadProgress; } + bool parametersReady (void) const { return _parametersReady; } + bool missingParameters (void) const { return _missingParameters; } + double loadProgress (void) const { return _loadProgress; } /// @return Directory of parameter caches static QDir parameterCacheDir(); @@ -59,7 +50,6 @@ public: /// @return Location of parameter cache file static QString parameterCacheFile(int vehicleId, int componentId); - /// Re-request the full set of parameters from the autopilot void refreshAllParameters(uint8_t componentID = MAV_COMP_ID_ALL); @@ -217,5 +207,3 @@ private: static const char* _jsonParamNameKey; static const char* _jsonParamValueKey; }; - -#endif diff --git a/src/comm/LogReplayLink.cc b/src/comm/LogReplayLink.cc index 32756a8c0..18c04c8a2 100644 --- a/src/comm/LogReplayLink.cc +++ b/src/comm/LogReplayLink.cc @@ -367,6 +367,12 @@ void LogReplayLink::_readNextLogEntry(void) quint64 currentTimeMSecs = (quint64)QDateTime::currentMSecsSinceEpoch(); timeToNextExecutionMSecs = desiredPacedTimeMSecs - currentTimeMSecs; } + + emit currentLogTimeSecs((_logCurrentTimeUSecs - _logStartTimeUSecs) / 1000000); + + if (timeToNextExecutionMSecs == 0 || timeToNextExecutionMSecs > 100) { + qDebug() << timeToNextExecutionMSecs << _logCurrentTimeUSecs; + } // And schedule the next execution of this function. _readTickTimer.start(timeToNextExecutionMSecs); diff --git a/src/comm/LogReplayLink.h b/src/comm/LogReplayLink.h index d5d863d5a..1ae85d5c9 100644 --- a/src/comm/LogReplayLink.h +++ b/src/comm/LogReplayLink.h @@ -94,6 +94,7 @@ signals: void playbackAtEnd(void); void playbackError(void); void playbackPercentCompleteChanged(int percentComplete); + void currentLogTimeSecs(int secs); // Internal signals void _playOnThread(void); diff --git a/src/ui/QGCMAVLinkLogPlayer.cc b/src/ui/QGCMAVLinkLogPlayer.cc index cc79b222f..1f31e862e 100644 --- a/src/ui/QGCMAVLinkLogPlayer.cc +++ b/src/ui/QGCMAVLinkLogPlayer.cc @@ -15,10 +15,11 @@ #include "QGCQFileDialog.h" #include "QGCMessageBox.h" -QGCMAVLinkLogPlayer::QGCMAVLinkLogPlayer(QWidget *parent) : - QWidget(parent), - _replayLink(NULL), - _ui(new Ui::QGCMAVLinkLogPlayer) +QGCMAVLinkLogPlayer::QGCMAVLinkLogPlayer(QWidget *parent) + : QWidget (parent) + , _replayLink (NULL) + , _lastCurrentTime (0) + , _ui (new Ui::QGCMAVLinkLogPlayer) { _ui->setupUi(this); _ui->horizontalLayout->setAlignment(Qt::AlignTop); @@ -92,11 +93,12 @@ void QGCMAVLinkLogPlayer::_selectLogFileForPlayback(void) SharedLinkConfigurationPointer sharedConfig = linkMgr->addConfiguration(linkConfig); _replayLink = (LogReplayLink*)qgcApp()->toolbox()->linkManager()->createConnectedLink(sharedConfig); - connect(_replayLink, &LogReplayLink::logFileStats, this, &QGCMAVLinkLogPlayer::_logFileStats); - connect(_replayLink, &LogReplayLink::playbackStarted, this, &QGCMAVLinkLogPlayer::_playbackStarted); - connect(_replayLink, &LogReplayLink::playbackPaused, this, &QGCMAVLinkLogPlayer::_playbackPaused); - connect(_replayLink, &LogReplayLink::playbackPercentCompleteChanged, this, &QGCMAVLinkLogPlayer::_playbackPercentCompleteChanged); - connect(_replayLink, &LogReplayLink::disconnected, this, &QGCMAVLinkLogPlayer::_replayLinkDisconnected); + connect(_replayLink, &LogReplayLink::logFileStats, this, &QGCMAVLinkLogPlayer::_logFileStats); + connect(_replayLink, &LogReplayLink::playbackStarted, this, &QGCMAVLinkLogPlayer::_playbackStarted); + connect(_replayLink, &LogReplayLink::playbackPaused, this, &QGCMAVLinkLogPlayer::_playbackPaused); + connect(_replayLink, &LogReplayLink::playbackPercentCompleteChanged, this, &QGCMAVLinkLogPlayer::_playbackPercentCompleteChanged); + connect(_replayLink, &LogReplayLink::currentLogTimeSecs, this, &QGCMAVLinkLogPlayer::_setCurrentLogTime); + connect(_replayLink, &LogReplayLink::disconnected, this, &QGCMAVLinkLogPlayer::_replayLinkDisconnected); _ui->positionSlider->setValue(0); #if 0 @@ -133,7 +135,7 @@ void QGCMAVLinkLogPlayer::_logFileStats(bool logTimestamped, ///< tru _logDurationSeconds = logDurationSeconds; - _ui->logStatsLabel->setText(_secondsToHMS(logDurationSeconds)); + _ui->logLengthTime->setText(_secondsToHMS(logDurationSeconds)); } /// Signalled from LogReplayLink when replay starts @@ -208,3 +210,11 @@ void QGCMAVLinkLogPlayer::_replayLinkDisconnected(void) _enablePlaybackControls(false); _replayLink = NULL; } + +void QGCMAVLinkLogPlayer::_setCurrentLogTime(int secs) +{ + if (secs != _lastCurrentTime) { + _lastCurrentTime = secs; + _ui->logCurrentTime->setText(_secondsToHMS(secs)); + } +} diff --git a/src/ui/QGCMAVLinkLogPlayer.h b/src/ui/QGCMAVLinkLogPlayer.h index da63a27e5..f83d26834 100644 --- a/src/ui/QGCMAVLinkLogPlayer.h +++ b/src/ui/QGCMAVLinkLogPlayer.h @@ -42,6 +42,7 @@ private slots: void _playbackPercentCompleteChanged(int percentComplete); void _playbackError(void); void _replayLinkDisconnected(void); + void _setCurrentLogTime(int secs); private: void _finishPlayback(void); @@ -50,6 +51,7 @@ private: LogReplayLink* _replayLink; int _logDurationSeconds; + int _lastCurrentTime; Ui::QGCMAVLinkLogPlayer* _ui; }; diff --git a/src/ui/QGCMAVLinkLogPlayer.ui b/src/ui/QGCMAVLinkLogPlayer.ui index 6693ac336..f80f6ac95 100644 --- a/src/ui/QGCMAVLinkLogPlayer.ui +++ b/src/ui/QGCMAVLinkLogPlayer.ui @@ -27,7 +27,7 @@ 0 - + @@ -89,6 +89,13 @@ + + + + + + + -- 2.22.0