diff --git a/ground/openpilotgcs/src/plugins/config/configplugin.cpp b/ground/openpilotgcs/src/plugins/config/configplugin.cpp index 7caf5d994..8db70979c 100644 --- a/ground/openpilotgcs/src/plugins/config/configplugin.cpp +++ b/ground/openpilotgcs/src/plugins/config/configplugin.cpp @@ -121,6 +121,7 @@ void ConfigPlugin::eraseAllSettings() if (msgBox.exec() != QMessageBox::Ok) return; + settingsErased = false; ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); UAVObjectManager * objMngr = pm->getObject(); Q_ASSERT(objMngr); @@ -132,9 +133,27 @@ void ConfigPlugin::eraseAllSettings() data.Selection = ObjectPersistence::SELECTION_ALLSETTINGS; objper->setData(data); objper->updated(); + QTimer::singleShot(1500,this,SLOT(eraseFailed())); } +void ConfigPlugin::eraseFailed() +{ + if (settingsErased) + return; + ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); + UAVObjectManager * objMngr = pm->getObject(); + Q_ASSERT(objMngr); + ObjectPersistence* objper = dynamic_cast( objMngr->getObject(ObjectPersistence::NAME)); + disconnect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *))); + QMessageBox msgBox; + msgBox.setText(tr("Error trying to erase settings.")); + msgBox.setInformativeText(tr("Power-cycle your board. Settings might be inconsistent.")); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setDefaultButton(QMessageBox::Ok); + msgBox.exec(); +} + void ConfigPlugin::eraseDone(UAVObject * obj) { QMessageBox msgBox; @@ -147,6 +166,7 @@ void ConfigPlugin::eraseDone(UAVObject * obj) disconnect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *))); if (obj->getField("Operation")->getValue().toString().compare(QString("Completed")) == 0) { + settingsErased = true; msgBox.setText(tr("Settings erased.")); msgBox.setInformativeText(tr("Please now power-cycle your board to complete reset.")); } else { diff --git a/ground/openpilotgcs/src/plugins/config/configplugin.h b/ground/openpilotgcs/src/plugins/config/configplugin.h index 6c074d57e..f4fa677de 100644 --- a/ground/openpilotgcs/src/plugins/config/configplugin.h +++ b/ground/openpilotgcs/src/plugins/config/configplugin.h @@ -57,10 +57,12 @@ private slots: void onAutopilotConnect(); void onAutopilotDisconnect(); void eraseDone(UAVObject *); + void eraseFailed(); private: ConfigGadgetFactory *cf; Core::Command* cmd; + bool settingsErased; };