From db22fb7aa789d610c91678db6a9e11bc4730b89b Mon Sep 17 00:00:00 2001 From: m_thread Date: Tue, 9 Dec 2014 01:15:49 +0100 Subject: [PATCH] OP-1628 Added support for 'old' style auto update if board not connected. --- .../setupwizard/pages/autoupdatepage.cpp | 2 +- .../uploader/uploadergadgetfactory.cpp | 2 +- .../plugins/uploader/uploadergadgetfactory.h | 2 +- .../plugins/uploader/uploadergadgetwidget.cpp | 26 +++++++++++++------ 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/setupwizard/pages/autoupdatepage.cpp b/ground/openpilotgcs/src/plugins/setupwizard/pages/autoupdatepage.cpp index 56a8c80f1..c119c9e55 100644 --- a/ground/openpilotgcs/src/plugins/setupwizard/pages/autoupdatepage.cpp +++ b/ground/openpilotgcs/src/plugins/setupwizard/pages/autoupdatepage.cpp @@ -17,7 +17,7 @@ AutoUpdatePage::AutoUpdatePage(SetupWizard *wizard, QWidget *parent) : Q_ASSERT(uploader); connect(ui->startUpdate, SIGNAL(clicked()), this, SLOT(disableButtons())); connect(ui->startUpdate, SIGNAL(clicked()), this, SLOT(autoUpdate())); - connect(uploader, SIGNAL(autoUpdateSignal(uploader::ProgressStep, QVariant)), this, SLOT(updateStatus(uploader::ProgressStep, QVariant))); + connect(uploader, SIGNAL(progressUpdate(uploader::ProgressStep, QVariant)), this, SLOT(updateStatus(uploader::ProgressStep, QVariant))); } AutoUpdatePage::~AutoUpdatePage() diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.cpp b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.cpp index e3b29b522..f913e7932 100644 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.cpp @@ -46,7 +46,7 @@ Core::IUAVGadget *UploaderGadgetFactory::createGadget(QWidget *parent) isautocapable = gadgetWidget->autoUpdateCapable(); connect(this, SIGNAL(autoUpdate(bool)), gadgetWidget, SLOT(autoUpdate(bool))); connect(this, SIGNAL(reboot()), gadgetWidget, SLOT(systemReset())); - connect(gadgetWidget, SIGNAL(autoUpdateSignal(uploader::ProgressStep, QVariant)), this, SIGNAL(autoUpdateSignal(uploader::ProgressStep, QVariant))); + connect(gadgetWidget, SIGNAL(progressUpdate(uploader::ProgressStep,QVariant)), this, SIGNAL(progressUpdate(uploader::ProgressStep, QVariant))); return new UploaderGadget(QString("Uploader"), gadgetWidget, parent); } diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.h b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.h index 7ba38e0d5..03bfdab9b 100644 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.h +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetfactory.h @@ -51,7 +51,7 @@ private: bool isautocapable; signals: - void autoUpdateSignal(uploader::ProgressStep, QVariant); + void progressUpdate(uploader::ProgressStep, QVariant); void autoUpdate(bool erase); void reboot(); }; diff --git a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp index f7e245a15..51b29080c 100644 --- a/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp +++ b/ground/openpilotgcs/src/plugins/uploader/uploadergadgetwidget.cpp @@ -618,17 +618,27 @@ bool UploaderGadgetWidget::autoUpdateCapable() bool UploaderGadgetWidget::autoUpdate(bool erase) { - ResultEventLoop eventLoop; + if (USBMonitor::instance()->availableDevices(0x20a0, -1, -1, -1).length() == 0) { + ConnectionWaiter waiter(1, BOARD_EVENT_TIMEOUT); + connect(&waiter, SIGNAL(timeChanged(int)), this, SLOT(autoUpdateConnectProgress(int))); + if (waiter.exec() == ConnectionWaiter::TimedOut) { + emit progressUpdate(FAILURE, QVariant(tr("Timed out while waiting for a board to be connected!"))); + emit autoUpdateFailed(); + return false; + } + } else { + ResultEventLoop eventLoop; - connect(this, SIGNAL(bootloaderSuccess()), &eventLoop, SLOT(success())); - connect(this, SIGNAL(bootloaderFailed()), &eventLoop, SLOT(fail())); + connect(this, SIGNAL(bootloaderSuccess()), &eventLoop, SLOT(success())); + connect(this, SIGNAL(bootloaderFailed()), &eventLoop, SLOT(fail())); - goToBootloader(); + goToBootloader(); - if (eventLoop.run(AUTOUPDATE_TIMEOUT) != 0) { - emit progressUpdate(FAILURE, QVariant()); - emit autoUpdateFailed(); - return false; + if (eventLoop.run(AUTOUPDATE_TIMEOUT) != 0) { + emit progressUpdate(FAILURE, QVariant()); + emit autoUpdateFailed(); + return false; + } } if (dfu) {