diff --git a/src/FactSystem/ParameterManager.cc b/src/FactSystem/ParameterManager.cc index ec1cd138437424c3cd39d5cf922375d3b680bf52..78fe43f0c55e5b250c0388f381946a6be8d49b50 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 33d14ff8a3aa64a8fcd868f5a327bcfd44089227..30dd672b92af317a7043affea7d4b6e5bd88f331 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 32756a8c055e1d98eed977aa51d9e5e8236a194f..18c04c8a26075d8896865fa95985fe20ddf6e28f 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 d5d863d5a750f31c7af3e7757d3a104a677b8adf..1ae85d5c9ea878ac55d7df99cb53e709f4ef791a 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 cc79b222fafc41998f102479f7b41c5dbb600cca..1f31e862ec2da2ac6c89a0622eb11ca682be0c9b 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 da63a27e5bf0e060ff9f28453a996742ba3c881d..f83d268347b3a765d180372caa99d411f13a81f2 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 6693ac3366b171efa74c07c2a03296c90f86f714..f80f6ac95533a8a71b45360e7c7eedfea3560d73 100644 --- a/src/ui/QGCMAVLinkLogPlayer.ui +++ b/src/ui/QGCMAVLinkLogPlayer.ui @@ -27,7 +27,7 @@ 0 - + @@ -89,6 +89,13 @@ + + + + + + +