1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-18 03:52:11 +01:00

Added a menu entry in the Tools menu to erase all settings.

Note: on CopterControl, this fails if all settings are at default value sometimes, due to something going on flight-side, not quite sure what.
Please test & report how it is working on your board, be sure to save your settings somewhere first!
This commit is contained in:
elafargue 2011-04-26 00:45:08 +02:00
parent 207e6f93b1
commit ce6987ffab
3 changed files with 133 additions and 9 deletions

View File

@ -28,8 +28,10 @@
#include "configgadgetfactory.h" #include "configgadgetfactory.h"
#include <QtPlugin> #include <QtPlugin>
#include <QStringList> #include <QStringList>
#include <QTimer>
#include <extensionsystem/pluginmanager.h> #include <extensionsystem/pluginmanager.h>
ConfigPlugin::ConfigPlugin() ConfigPlugin::ConfigPlugin()
{ {
// Do nothing // Do nothing
@ -47,16 +49,113 @@ bool ConfigPlugin::initialize(const QStringList& args, QString *errMsg)
cf = new ConfigGadgetFactory(this); cf = new ConfigGadgetFactory(this);
addAutoReleasedObject(cf); addAutoReleasedObject(cf);
// Add Menu entry to erase all settings
Core::ActionManager* am = Core::ICore::instance()->actionManager();
Core::ActionContainer* ac = am->actionContainer(Core::Constants::M_TOOLS);
// Command to erase all settings from the board
cmd = am->registerAction(new QAction(this),
"ConfigPlugin.EraseAll",
QList<int>() <<
Core::Constants::C_GLOBAL_ID);
cmd->action()->setText("Erase all settings from board...");
ac->menu()->addSeparator();
ac->appendGroup("Utilities");
ac->addAction(cmd, "Utilities");
connect(cmd->action(), SIGNAL(triggered(bool)), this, SLOT(eraseAllSettings()));
// *********************
// Listen to autopilot connection events
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
TelemetryManager* telMngr = pm->getObject<TelemetryManager>();
connect(telMngr, SIGNAL(connected()), this, SLOT(onAutopilotConnect()));
connect(telMngr, SIGNAL(disconnected()), this, SLOT(onAutopilotDisconnect()));
// And check whether by any chance we are not already connected
if (telMngr->isConnected())
onAutopilotConnect();
return true; return true;
} }
void ConfigPlugin::extensionsInitialized() void ConfigPlugin::extensionsInitialized()
{ {
// Do nothing cmd->action()->setEnabled(false);
} }
void ConfigPlugin::shutdown() void ConfigPlugin::shutdown()
{ {
// Do nothing // Do nothing
} }
/**
* Enable the menu entry when the autopilot connects
*/
void ConfigPlugin::onAutopilotConnect()
{
cmd->action()->setEnabled(true);
}
/**
* Enable the menu entry when the autopilot connects
*/
void ConfigPlugin::onAutopilotDisconnect()
{
cmd->action()->setEnabled(false);
}
/**
* 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;
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
UAVObjectManager * objMngr = pm->getObject<UAVObjectManager>();
Q_ASSERT(objMngr);
ObjectPersistence* objper = dynamic_cast<ObjectPersistence*>( objMngr->getObject(ObjectPersistence::NAME) );
Q_ASSERT(objper);
connect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *)));
ObjectPersistence::DataFields data;
data.Operation = ObjectPersistence::OPERATION_DELETE;
data.Selection = ObjectPersistence::SELECTION_ALLSETTINGS;
objper->setData(data);
objper->updated();
}
void ConfigPlugin::eraseDone(UAVObject * obj)
{
QMessageBox msgBox;
ObjectPersistence* objper = dynamic_cast<ObjectPersistence*>(sender());
Q_ASSERT(obj->getName().compare("ObjectPersistence") == 0);
QString tmp = obj->getField("Operation")->getValue().toString();
if (obj->getField("Operation")->getValue().toString().compare(QString("Delete")) == 0 ) {
return;
}
disconnect(objper, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(eraseDone(UAVObject *)));
if (obj->getField("Operation")->getValue().toString().compare(QString("Completed")) == 0) {
msgBox.setText(tr("Settings erased."));
msgBox.setInformativeText(tr("Please now power-cycle your board to complete reset."));
} else {
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();
}
Q_EXPORT_PLUGIN(ConfigPlugin) Q_EXPORT_PLUGIN(ConfigPlugin)

View File

@ -28,11 +28,22 @@
#define CONFIGPLUGIN_H #define CONFIGPLUGIN_H
#include <extensionsystem/iplugin.h> #include <extensionsystem/iplugin.h>
#include <coreplugin/icore.h>
#include <coreplugin/coreconstants.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include "uavtalk/telemetrymanager.h"
#include "objectpersistence.h"
#include <QMessageBox>
class ConfigGadgetFactory; class ConfigGadgetFactory;
class ConfigPlugin : public ExtensionSystem::IPlugin class ConfigPlugin : public ExtensionSystem::IPlugin
{ {
Q_OBJECT
public: public:
ConfigPlugin(); ConfigPlugin();
~ConfigPlugin(); ~ConfigPlugin();
@ -40,8 +51,17 @@ public:
void extensionsInitialized(); void extensionsInitialized();
bool initialize(const QStringList & arguments, QString * errorString); bool initialize(const QStringList & arguments, QString * errorString);
void shutdown(); void shutdown();
private slots:
void eraseAllSettings();
void onAutopilotConnect();
void onAutopilotDisconnect();
void eraseDone(UAVObject *);
private: private:
ConfigGadgetFactory *cf; ConfigGadgetFactory *cf;
Core::Command* cmd;
}; };
#endif // CONFIGPLUGIN_H #endif // CONFIGPLUGIN_H

View File

@ -38,9 +38,21 @@ UAVTalkPlugin::~UAVTalkPlugin()
{ {
} }
/**
* Called once all the plugins which depend on us have been loaded
*/
void UAVTalkPlugin::extensionsInitialized() void UAVTalkPlugin::extensionsInitialized()
{ {
}
/**
* Called at startup, before any plugin which depends on us is initialized
*/
bool UAVTalkPlugin::initialize(const QStringList & arguments, QString * errorString)
{
// Done
Q_UNUSED(arguments);
Q_UNUSED(errorString);
// Get UAVObjectManager instance // Get UAVObjectManager instance
ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance(); ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance();
objMngr = pm->getObject<UAVObjectManager>(); objMngr = pm->getObject<UAVObjectManager>();
@ -55,13 +67,6 @@ void UAVTalkPlugin::extensionsInitialized()
this, SLOT(onDeviceConnect(QIODevice *))); this, SLOT(onDeviceConnect(QIODevice *)));
QObject::connect(cm, SIGNAL(deviceAboutToDisconnect()), QObject::connect(cm, SIGNAL(deviceAboutToDisconnect()),
this, SLOT(onDeviceDisconnect())); this, SLOT(onDeviceDisconnect()));
}
bool UAVTalkPlugin::initialize(const QStringList & arguments, QString * errorString)
{
// Done
Q_UNUSED(arguments);
Q_UNUSED(errorString);
return true; return true;
} }