From 9b68c43fb2c3deed4d8b83d5fcf415f8b4b183d5 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Tue, 21 Jul 2015 10:38:20 -0700 Subject: [PATCH] Parameter load errors shown to user --- src/AutoPilotPlugins/AutoPilotPlugin.cc | 4 ++-- src/AutoPilotPlugins/AutoPilotPlugin.h | 3 ++- src/FactSystem/ParameterLoader.cc | 16 ++++++++++++++-- src/FactSystem/ParameterLoader.h | 4 +++- src/QmlControls/ParameterEditor.qml | 9 ++++++++- src/QmlControls/ParameterEditorController.cc | 8 +++++++- src/QmlControls/ParameterEditorController.h | 3 +++ 7 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/AutoPilotPlugins/AutoPilotPlugin.cc b/src/AutoPilotPlugins/AutoPilotPlugin.cc index f2b09e692..9973d0595 100644 --- a/src/AutoPilotPlugins/AutoPilotPlugin.cc +++ b/src/AutoPilotPlugins/AutoPilotPlugin.cc @@ -163,9 +163,9 @@ void AutoPilotPlugin::writeParametersToStream(QTextStream &stream) _getParameterLoader()->writeParametersToStream(stream, _uas->getUASName()); } -void AutoPilotPlugin::readParametersFromStream(QTextStream &stream) +QString AutoPilotPlugin::readParametersFromStream(QTextStream &stream) { - _getParameterLoader()->readParametersFromStream(stream); + return _getParameterLoader()->readParametersFromStream(stream); } bool AutoPilotPlugin::armed(void) diff --git a/src/AutoPilotPlugins/AutoPilotPlugin.h b/src/AutoPilotPlugins/AutoPilotPlugin.h index f5367d6ca..fa50da7d3 100644 --- a/src/AutoPilotPlugins/AutoPilotPlugin.h +++ b/src/AutoPilotPlugins/AutoPilotPlugin.h @@ -89,7 +89,8 @@ public: void writeParametersToStream(QTextStream &stream); /// Reads the parameters from the stream and updates values - void readParametersFromStream(QTextStream &stream); + /// @return Errors during load. Empty string for no errors + QString readParametersFromStream(QTextStream &stream); /// Returns true if the specifed fact exists Q_INVOKABLE bool factExists(FactSystem::Provider_t provider, ///< fact provider diff --git a/src/FactSystem/ParameterLoader.cc b/src/FactSystem/ParameterLoader.cc index df44ae8ec..654b15bcd 100644 --- a/src/FactSystem/ParameterLoader.cc +++ b/src/FactSystem/ParameterLoader.cc @@ -579,8 +579,9 @@ void ParameterLoader::_saveToEEPROM(void) qCDebug(ParameterLoaderLog) << "_saveToEEPROM"; } -void ParameterLoader::readParametersFromStream(QTextStream& stream) +QString ParameterLoader::readParametersFromStream(QTextStream& stream) { + QString errors; bool userWarned = false; while (!stream.atEnd()) { @@ -597,7 +598,7 @@ void ParameterLoader::readParametersFromStream(QTextStream& stream) QGCMessageBox::Ok | QGCMessageBox::Cancel, QGCMessageBox::Cancel); if (button == QGCMessageBox::Cancel) { - return; + return QString(); } } @@ -607,18 +608,29 @@ void ParameterLoader::readParametersFromStream(QTextStream& stream) uint mavType = wpParams.at(4).toUInt(); if (!_autopilot->factExists(FactSystem::ParameterProvider, componentId, paramName)) { + QString error; + error = QString("Skipped parameter %1:%2 - does not exist on this vehicle\n").arg(componentId).arg(paramName); + errors += error; + qCDebug(ParameterLoaderLog) << error; continue; } Fact* fact = _autopilot->getFact(FactSystem::ParameterProvider, componentId, paramName); if (fact->type() != _mavTypeToFactType((MAV_PARAM_TYPE)mavType)) { + QString error; + error = QString("Skipped parameter %1:%2 - type mismatch %3:%4\n").arg(componentId).arg(paramName).arg(fact->type()).arg(_mavTypeToFactType((MAV_PARAM_TYPE)mavType)); + errors += error; + qCDebug(ParameterLoaderLog) << error; continue; } + qCDebug(ParameterLoaderLog) << "Updating parameter" << componentId << paramName << valStr; fact->setValue(valStr); } } } + + return errors; } void ParameterLoader::writeParametersToStream(QTextStream &stream, const QString& name) diff --git a/src/FactSystem/ParameterLoader.h b/src/FactSystem/ParameterLoader.h index df64e2f4d..92008eaf1 100644 --- a/src/FactSystem/ParameterLoader.h +++ b/src/FactSystem/ParameterLoader.h @@ -80,7 +80,9 @@ public: const QMap >& getGroupMap(void); - void readParametersFromStream(QTextStream& stream); + /// Returns error messages from loading + QString readParametersFromStream(QTextStream& stream); + void writeParametersToStream(QTextStream &stream, const QString& name); /// Return the parameter for which the default component id is derived from. Return an empty diff --git a/src/QmlControls/ParameterEditor.qml b/src/QmlControls/ParameterEditor.qml index 6c9522f38..7ef9dfdcb 100644 --- a/src/QmlControls/ParameterEditor.qml +++ b/src/QmlControls/ParameterEditor.qml @@ -49,7 +49,14 @@ QGCView { readonly property real __rightMargin: 20 readonly property int __maxParamChars: 16 - ParameterEditorController { id: controller; factPanel: panel } + ParameterEditorController { + id: controller; + factPanel: panel + + onShowErrorMessage: { + showMessage("Parameter Load Errors", errorMsg, StandardButton.Ok) + } + } Component { id: editorDialogComponent diff --git a/src/QmlControls/ParameterEditorController.cc b/src/QmlControls/ParameterEditorController.cc index 2ba5f61c7..3741821d0 100644 --- a/src/QmlControls/ParameterEditorController.cc +++ b/src/QmlControls/ParameterEditorController.cc @@ -95,6 +95,8 @@ void ParameterEditorController::saveToFile(void) void ParameterEditorController::loadFromFile(void) { + QString errors; + Q_ASSERT(_autopilot); QString msgTitle("Load Parameters"); @@ -112,8 +114,12 @@ void ParameterEditorController::loadFromFile(void) } QTextStream stream(&file); - _autopilot->readParametersFromStream(stream); + errors = _autopilot->readParametersFromStream(stream); file.close(); + + if (!errors.isEmpty()) { + emit showErrorMessage(errors); + } } } diff --git a/src/QmlControls/ParameterEditorController.h b/src/QmlControls/ParameterEditorController.h index 0f556a309..41599efe8 100644 --- a/src/QmlControls/ParameterEditorController.h +++ b/src/QmlControls/ParameterEditorController.h @@ -54,6 +54,9 @@ public: Q_INVOKABLE void setRCToParam(const QString& paramName); QList model(void); + +signals: + void showErrorMessage(const QString& errorMsg); private: QStringList _componentIds; -- 2.22.0