/** * Erase all settings from the board */ void ConfigPlugin::eraseAllSettings() { QMessageBox msgBox; msgBox.setText(tr("Are you sure you want to erase all board settings?.")); msgBox.setInformativeText(tr("All settings stored in your board flash will be deleted.")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); if (msgBox.exec() != QMessageBox::Ok) return; settingsErased = false; ObjectPersistence* objper = ObjectPersistence::GetInstance(getObjectManager()); Q_ASSERT(objper); connect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *))); ObjectPersistence::DataFields data = objper->getData(); data.Operation = ObjectPersistence::OPERATION_FULLERASE; // No need for manual updated event, this is triggered by setData // based on UAVO meta data objper->setData(data); objper->updated(); QTimer::singleShot(FLASH_ERASE_TIMEOUT_MS,this,SLOT(eraseFailed())); }
void ConfigPlugin::eraseFailed() { if (settingsErased) return; ObjectPersistence* objper = ObjectPersistence::GetInstance(getObjectManager()); ObjectPersistence::DataFields data = objper->getData(); if(data.Operation == ObjectPersistence::OPERATION_FULLERASE) { // First attempt via flash erase failed. Fall back on erase all settings data.Operation = ObjectPersistence::OPERATION_DELETE; data.Selection = ObjectPersistence::SELECTION_ALLSETTINGS; objper->setData(data); objper->updated(); QTimer::singleShot(FLASH_ERASE_TIMEOUT_MS,this,SLOT(eraseFailed())); } else { 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 after removing all blades. Settings might be inconsistent.")); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); } }
/** * Erase all settings from the board */ void ConfigPlugin::eraseAllSettings() { QMessageBox msgBox; msgBox.setText(tr("Are you sure you want to erase all board settings?.")); msgBox.setInformativeText(tr("All settings stored in your board flash will be deleted.")); msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); msgBox.setDefaultButton(QMessageBox::Ok); if (msgBox.exec() != QMessageBox::Ok) return; settingsErased = false; //TODO: Replace the second and third [in eraseDone()] pop-up dialogs with a progress indicator, // counter, or infinite chain of `......` tied to the original dialog box msgBox.setText(tr("Settings will now erase.")); msgBox.setInformativeText(tr("Press <OK> and then please wait until a completion box appears. This can take up to 90 seconds.")); msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); ObjectPersistence* objper = ObjectPersistence::GetInstance(getObjectManager()); Q_ASSERT(objper); connect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *))); ObjectPersistence::DataFields data = objper->getData(); data.Operation = ObjectPersistence::OPERATION_FULLERASE; // No need for manual updated event, this is triggered by setData // based on UAVO meta data objper->setData(data); objper->updated(); QTimer::singleShot(FLASH_ERASE_TIMEOUT_MS,this,SLOT(eraseFailed())); }
void ConfigPlugin::eraseDone(UAVObject * obj) { QMessageBox msgBox; ObjectPersistence* objper = ObjectPersistence::GetInstance(getObjectManager()); ObjectPersistence::DataFields data = objper->getData(); Q_ASSERT(obj->getInstID() == objper->getInstID()); if(data.Operation != ObjectPersistence::OPERATION_COMPLETED) { return; } disconnect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *))); if (data.Operation == ObjectPersistence::OPERATION_COMPLETED) { settingsErased = true; msgBox.setText(tr("Settings are now erased.")); msgBox.setInformativeText(tr("Please wait for the status LED to begin flashing regularly (up to a minute) then power-cycle your board to complete reset.")); } else { msgBox.setText(tr("Error trying to erase settings.")); msgBox.setInformativeText(tr("Power-cycle your board after removing all blades. Settings might be inconsistent.")); } msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setDefaultButton(QMessageBox::Ok); msgBox.exec(); }