Commit a39c7aab authored by Don Gagne's avatar Don Gagne

Removed more unused firmware flashing code

parent b7935afb
......@@ -267,8 +267,6 @@ FORMS += \
src/ui/watchdog/WatchdogControl.ui \
src/ui/watchdog/WatchdogProcessView.ui \
src/ui/watchdog/WatchdogView.ui \
src/ui/QGCFirmwareUpdate.ui \
src/ui/QGCPxImuFirmwareUpdate.ui \
src/ui/QGCDataPlot2D.ui \
src/ui/QGCRemoteControlView.ui \
src/ui/QMap3D.ui \
......@@ -295,9 +293,7 @@ FORMS += \
src/ui/WaypointViewOnlyView.ui \
src/ui/WaypointEditableView.ui \
src/ui/mavlink/QGCMAVLinkMessageSender.ui \
src/ui/firmwareupdate/QGCFirmwareUpdateWidget.ui \
src/ui/QGCPluginHost.ui \
src/ui/firmwareupdate/QGCPX4FirmwareUpdate.ui \
src/ui/mission/QGCMissionOther.ui \
src/ui/mission/QGCMissionNavWaypoint.ui \
src/ui/mission/QGCMissionDoJump.ui \
......@@ -419,8 +415,6 @@ HEADERS += \
src/uas/UASWaypointManager.h \
src/ui/HSIDisplay.h \
src/QGC.h \
src/ui/QGCFirmwareUpdate.h \
src/ui/QGCPxImuFirmwareUpdate.h \
src/ui/QGCDataPlot2D.h \
src/ui/linechart/IncrementalPlot.h \
src/ui/QGCRemoteControlView.h \
......@@ -470,9 +464,7 @@ HEADERS += \
src/ui/WaypointEditableView.h \
src/ui/QGCRGBDView.h \
src/ui/mavlink/QGCMAVLinkMessageSender.h \
src/ui/firmwareupdate/QGCFirmwareUpdateWidget.h \
src/ui/QGCPluginHost.h \
src/ui/firmwareupdate/QGCPX4FirmwareUpdate.h \
src/ui/mission/QGCMissionOther.h \
src/ui/mission/QGCMissionNavWaypoint.h \
src/ui/mission/QGCMissionDoJump.h \
......@@ -611,8 +603,6 @@ SOURCES += \
src/uas/UASWaypointManager.cc \
src/ui/HSIDisplay.cc \
src/QGC.cc \
src/ui/QGCFirmwareUpdate.cc \
src/ui/QGCPxImuFirmwareUpdate.cc \
src/ui/QGCDataPlot2D.cc \
src/ui/linechart/IncrementalPlot.cc \
src/ui/QGCRemoteControlView.cc \
......@@ -660,9 +650,7 @@ SOURCES += \
src/ui/WaypointEditableView.cc \
src/ui/QGCRGBDView.cc \
src/ui/mavlink/QGCMAVLinkMessageSender.cc \
src/ui/firmwareupdate/QGCFirmwareUpdateWidget.cc \
src/ui/QGCPluginHost.cc \
src/ui/firmwareupdate/QGCPX4FirmwareUpdate.cc \
src/ui/mission/QGCMissionOther.cc \
src/ui/mission/QGCMissionNavWaypoint.cc \
src/ui/mission/QGCMissionDoJump.cc \
......
//#include <QJsonDocument>
#include <QFile>
#include "PX4FirmwareUpgradeWorker.h"
#include <SerialLink.h>
#include <QGC.h>
#include "uploader.h"
#include <QDebug>
#define PROTO_GET_SYNC 0x21
#define PROTO_EOC 0x20
#define PROTO_NOP 0x00
#define PROTO_OK 0x10
#define PROTO_FAILED 0x11
#define PROTO_INSYNC 0x12
PX4FirmwareUpgradeWorker::PX4FirmwareUpgradeWorker(QObject *parent) :
QObject(parent),
link(NULL)
{
}
PX4FirmwareUpgradeWorker* PX4FirmwareUpgradeWorker::putWorkerInThread(QObject *parent)
{
PX4FirmwareUpgradeWorker *worker = new PX4FirmwareUpgradeWorker;
QThread *workerThread = new QThread(parent);
connect(workerThread, SIGNAL(started()), worker, SLOT(startContinousScan()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
worker->moveToThread(workerThread);
// Starts an event loop, and emits workerThread->started()
workerThread->start();
return worker;
}
void PX4FirmwareUpgradeWorker::startContinousScan()
{
exitThread = false;
while (!exitThread) {
// if (detect()) {
// break;
// }
QGC::SLEEP::msleep(20);
}
if (exitThread) {
link->disconnect();
delete link;
exit(0);
}
}
void PX4FirmwareUpgradeWorker::detect()
{
if (!link)
{
link = new SerialLink("", 921600);
connect(link, SIGNAL(bytesReceived(LinkInterface*,QByteArray)), this, SLOT(receiveBytes(LinkInterface*,QByteArray)));
}
// Get a list of ports
QVector<QString>* ports = link->getCurrentPorts();
// Scan
for (int i = 0; i < ports->size(); i++)
{
// Ignore known wrong link names
if (ports->at(i).contains("Bluetooth")) {
//continue;
}
link->setPortName(ports->at(i));
// Open port and talk to it
link->connect();
char buf[2] = { PROTO_GET_SYNC, PROTO_EOC };
if (!link->isConnected()) {
continue;
}
// Send sync request
insync = false;
link->writeBytes(buf, 2);
// Wait for response
QGC::SLEEP::msleep(20);
if (insync)
emit validPortFound(ports->at(i));
break;
}
//ui.portName->setCurrentIndex(ui.baudRate->findText(QString("%1").arg(this->link->getPortName())));
// Set port
// Load current link config
}
void PX4FirmwareUpgradeWorker::receiveBytes(LinkInterface* link, QByteArray b)
{
for (int position = 0; position < b.size(); position++) {
qDebug() << "BYTES";
qDebug() << (char)(b[position]);
if (((const char)b[position]) == PROTO_INSYNC)
{
qDebug() << "SYNC";
insync = true;
}
if (insync && ((const char)b[position]) == PROTO_OK)
{
emit detectionStatusChanged("Found PX4 board");
}
}
printf("\n");
}
void PX4FirmwareUpgradeWorker::loadFirmware(const QString &filename)
{
qDebug() << __FILE__ << __LINE__ << "LOADING FW" << filename;
PX4_Uploader uploader;
const char* filenames[2];
filenames[0] = filename.toStdString().c_str();
filenames[1] = NULL;
uploader.upload(filenames, "/dev/tty.usbmodem1");
// QFile f(filename);
// if (f.open(QIODevice::ReadOnly))
// {
// QByteArray buf = f.readAll();
// f.close();
// firmware = QJsonDocument::fromBinaryData(buf);
// if (firmware.isNull()) {
// emit upgradeStatusChanged(tr("Failed decoding file %1").arg(filename));
// } else {
// emit upgradeStatusChanged(tr("Ready to flash %1").arg(filename));
// }
// } else {
// emit upgradeStatusChanged(tr("Failed opening file %1").arg(filename));
// }
}
void PX4FirmwareUpgradeWorker::upgrade()
{
emit upgradeStatusChanged(tr("Starting firmware upgrade.."));
}
void PX4FirmwareUpgradeWorker::abort()
{
exitThread = true;
}
#ifndef PX4FIRMWAREUPGRADEWORKER_H
#define PX4FIRMWAREUPGRADEWORKER_H
#include <QObject>
//#include <QJsonDocument>
#include <SerialLink.h>
class PX4FirmwareUpgradeWorker : public QObject
{
Q_OBJECT
public:
explicit PX4FirmwareUpgradeWorker(QObject *parent = 0);
static PX4FirmwareUpgradeWorker* putWorkerInThread(QObject *parent);
signals:
void detectionStatusChanged(const QString& status);
void upgradeStatusChanged(const QString& status);
void upgradeProgressChanged(int percent);
void validPortFound(const QString& portName);
public slots:
/**
* @brief Continously scan for bootloaders
* @return
*/
void startContinousScan();
/**
* @brief Detect connected PX4 bootloaders
*
* If a bootloader was found, the link will be opened to this
* bootloader and ready for flashing when returning from the call.
*
* @return true if found on one link, false else
*/
void detect();
/**
* @brief Upgrade the firmware using the currently connected link
* @param filename file name / path of the firmware file
*/
void upgrade();
/**
* @brief Load firmware from disk into memory
* @param filename
*/
void loadFirmware(const QString &filename);
/**
* @brief Receive bytes from a link
* @param link
* @param b
*/
void receiveBytes(LinkInterface* link, QByteArray b);
/**
* @brief Abort upgrade worker
*/
void abort();
protected:
bool exitThread;
private:
SerialLink *link;
bool insync;
//QJsonDocument firmware;
};
#endif // PX4FIRMWAREUPGRADEWORKER_H
#include <QFileDialog>
#include <QStandardPaths>
#include <QSettings>
#include "PX4FirmwareUpgrader.h"
#include "ui_PX4FirmwareUpgrader.h"
#include <QGC.h>
#include <QDebug>
PX4FirmwareUpgrader::PX4FirmwareUpgrader(QWidget *parent) :
QWidget(parent),
ui(new Ui::PX4FirmwareUpgrader)
{
ui->setupUi(this);
connect(ui->selectFileButton, SIGNAL(clicked()), this, SLOT(selectFirmwareFile()));
connect(ui->flashButton, SIGNAL(clicked()), this, SIGNAL(upgrade()));
}
PX4FirmwareUpgrader::~PX4FirmwareUpgrader()
{
delete ui;
}
void PX4FirmwareUpgrader::selectFirmwareFile()
{
QSettings settings;
QString path = settings.value("PX4_FIRMWARE_PATH",
QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)).toString();
const QString widgetFileExtension(".px4");
QString fileName = QFileDialog::getOpenFileName(this, tr("Specify File Name"),
path,
tr("PX4 Firmware (*%1);;").arg(widgetFileExtension));
settings.setValue("PX4_FIRMWARE_PATH", fileName);
qDebug() << "EMITTING SIGNAL";
emit firmwareFileNameSet(fileName);
}
void PX4FirmwareUpgrader::setDetectionStatusText(const QString &text)
{
ui->detectionStatusLabel->setText(text);
}
void PX4FirmwareUpgrader::setFlashStatusText(const QString &text)
{
ui->flashProgressLabel->setText(text);
qDebug() << __FILE__ << __LINE__ << "LABEL" << text;
}
void PX4FirmwareUpgrader::setFlashProgress(int percent)
{
ui->flashProgressBar->setValue(percent);
}
void PX4FirmwareUpgrader::setPortName(const QString &portname)
{
// Prepend newly found port to the list
if (ui->serialPortComboBox->findText(portname) == -1)
{
ui->serialPortComboBox->insertItem(0, portname);
ui->serialPortComboBox->setEditText(portname);
}
}
#ifndef PX4FIRMWAREUPGRADER_H
#define PX4FIRMWAREUPGRADER_H
#include <QWidget>
#include <QTimer>
#include <SerialLink.h>
namespace Ui {
class PX4FirmwareUpgrader;
}
class PX4FirmwareUpgrader : public QWidget
{
Q_OBJECT
public:
PX4FirmwareUpgrader(QWidget *parent = 0);
~PX4FirmwareUpgrader();
public slots:
void setDetectionStatusText(const QString &text);
void setFlashStatusText(const QString &text);
void setFlashProgress(int percent);
void selectFirmwareFile();
void setPortName(const QString &portname);
signals:
void firmwareFileNameSet(const QString &fileName);
void upgrade();
private:
Ui::PX4FirmwareUpgrader *ui;
};
#endif // PX4FIRMWAREUPGRADER_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PX4FirmwareUpgrader</class>
<widget class="QWidget" name="PX4FirmwareUpgrader">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>428</width>
<height>331</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0" colspan="3">
<widget class="QTextBrowser" name="descriptionTextBrowser"/>
</item>
<item row="4" column="0" colspan="3">
<widget class="QProgressBar" name="flashProgressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QLabel" name="flashProgressLabel">
<property name="text">
<string>No update in progress.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QComboBox" name="versionComboBox"/>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="selectFileButton">
<property name="text">
<string>Select File..</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="versionButton">
<property name="text">
<string>Check Online</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="serialPortButton">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Set Serial Port</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QPushButton" name="flashButton">
<property name="text">
<string>Flash Firmware</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="detectionStatusLabel">
<property name="text">
<string>No PX4 board detected..</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="detectionAutoCheckBox">
<property name="text">
<string>Auto Detect Port</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="serialPortComboBox">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief Implementation of QGCFirmwareUpdate
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
#include "QGCFirmwareUpdate.h"
#include "ui_QGCFirmwareUpdate.h"
QGCFirmwareUpdate::QGCFirmwareUpdate(QWidget *parent) :
QWidget(parent),
ui(new Ui::QGCFirmwareUpdate)
{
ui->setupUi(this);
}
QGCFirmwareUpdate::~QGCFirmwareUpdate()
{
delete ui;
}
void QGCFirmwareUpdate::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
#ifndef QGCFIRMWAREUPDATE_H
#define QGCFIRMWAREUPDATE_H
#include <QWidget>
namespace Ui
{
class QGCFirmwareUpdate;
}
class QGCFirmwareUpdate : public QWidget
{
Q_OBJECT
public:
QGCFirmwareUpdate(QWidget *parent = 0);
~QGCFirmwareUpdate();
protected:
void changeEvent(QEvent *e);
void showEvent(QShowEvent* event)
{
QWidget::showEvent(event);
emit visibilityChanged(true);
}
void hideEvent(QHideEvent* event)
{
QWidget::hideEvent(event);
emit visibilityChanged(false);
}
private:
Ui::QGCFirmwareUpdate *ui;
signals:
void visibilityChanged(bool visible);
};
#endif // QGCFIRMWAREUPDATE_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCFirmwareUpdate</class>
<widget class="QWidget" name="QGCFirmwareUpdate">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>596</width>
<height>343</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QComboBox" name="autopilotComboBox"/>
</item>
<item row="1" column="0">
<widget class="QWidget" name="widget" native="true"/>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief Implementation of QGCPxImuFirmwareUpdate
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
#include "QGCPxImuFirmwareUpdate.h"
#include "ui_QGCPxImuFirmwareUpdate.h"
QGCPxImuFirmwareUpdate::QGCPxImuFirmwareUpdate(QWidget *parent) :
QWidget(parent),
ui(new Ui::QGCPxImuFirmwareUpdate)
{
ui->setupUi(this);
}
QGCPxImuFirmwareUpdate::~QGCPxImuFirmwareUpdate()
{
delete ui;
}
void QGCPxImuFirmwareUpdate::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
This file is part of the QGROUNDCONTROL project
QGROUNDCONTROL is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
QGROUNDCONTROL is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with QGROUNDCONTROL. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief Declaration of class QGCPxImuFirmwareUpdate
* @author Lorenz Meier <mail@qgroundcontrol.org>
*/
#ifndef QGCPXIMUFIRMWAREUPDATE_H
#define QGCPXIMUFIRMWAREUPDATE_H
#include <QWidget>
namespace Ui
{
class QGCPxImuFirmwareUpdate;
}
class QGCPxImuFirmwareUpdate : public QWidget
{
Q_OBJECT
public:
QGCPxImuFirmwareUpdate(QWidget *parent = 0);
~QGCPxImuFirmwareUpdate();
protected:
void changeEvent(QEvent *e);
private:
Ui::QGCPxImuFirmwareUpdate *ui;
};
#endif // QGCPXIMUFIRMWAREUPDATE_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCPxImuFirmwareUpdate</class>
<widget class="QWidget" name="QGCPxImuFirmwareUpdate">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="5">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Instructions</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="margin">
<number>2</number>
</property>
<item>
<widget class="QPlainTextEdit" name="plainTextEdit">
<property name="plainText">
<string>&lt;h1&gt;pxIMU Firmware Update&lt;/h1&gt;
&lt;li&gt;
&lt;item&gt;Item 1&lt;/item&gt;
&lt;/li&gt;
</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QRadioButton" name="radioButton">
<property name="text">
<string>From File</string>
</property>
</widget>
</item>
<item row="1" column="2" colspan="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Choose file..</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Choose File</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QRadioButton" name="radioButton_2">
<property name="text">
<string>From Internet</string>
</property>
</widget>
</item>
<item row="2" column="2" colspan="2">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Firmware v.0.2.1</string>
</property>
</widget>
</item>
<item row="2" column="4">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Download</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="1" colspan="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Waiting for first user action</string>
</property>
</widget>
</item>
<item row="3" column="3" colspan="2">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Flash Firmware</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
#include "QGCFirmwareUpdateWidget.h"
#include "ui_QGCFirmwareUpdateWidget.h"
QGCFirmwareUpdateWidget::QGCFirmwareUpdateWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::QGCFirmwareUpdateWidget)
{
ui->setupUi(this);
}
QGCFirmwareUpdateWidget::~QGCFirmwareUpdateWidget()
{
delete ui;
}
#ifndef QGCFIRMWAREUPDATEWIDGET_H
#define QGCFIRMWAREUPDATEWIDGET_H
#include <QWidget>
namespace Ui {
class QGCFirmwareUpdateWidget;
}
class QGCFirmwareUpdateWidget : public QWidget
{
Q_OBJECT
public:
explicit QGCFirmwareUpdateWidget(QWidget *parent = 0);
~QGCFirmwareUpdateWidget();
private:
Ui::QGCFirmwareUpdateWidget *ui;
};
#endif // QGCFIRMWAREUPDATEWIDGET_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCFirmwareUpdateWidget</class>
<widget class="QWidget" name="QGCFirmwareUpdateWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>638</width>
<height>412</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>1) Select Autopilot</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QListWidget" name="autopilotListWidget"/>
</item>
<item row="1" column="2">
<widget class="QTextEdit" name="textEdit">
<property name="readOnly">
<bool>true</bool>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;Autopilot Selection&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Select one of the connected autopilots from the list on the left.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="1" column="3" rowspan="4" colspan="2">
<widget class="QTextEdit" name="firmwareInfo">
<property name="readOnly">
<bool>true</bool>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;AP Firmware v0.9.1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;This software update...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;FIXES:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;- Fix1&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;FEATURES:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;- New feature 1&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QLabel" name="label_3">
<property name="text">
<string>2) Select Software Version</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QListWidget" name="firmwareListWidget"/>
</item>
<item row="3" column="2" rowspan="2">
<widget class="QTextEdit" name="textEdit_2">
<property name="readOnly">
<bool>true</bool>
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;Software Version Selection&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:10pt;&quot;&gt;Select the software version from the online repository on the left or choose the select file button to load a file from the harddisk. Detail information is shown on the right.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="selectFileButton">
<property name="text">
<string>Select File..</string>
</property>
</widget>
</item>
<item row="5" column="0" rowspan="2" colspan="5">
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item row="6" column="4" rowspan="2">
<widget class="QPushButton" name="flashFirmwareButton">
<property name="text">
<string>Flash Firmware</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
#include "QGCPX4FirmwareUpdate.h"
#include "ui_QGCPX4FirmwareUpdate.h"
QGCPX4FirmwareUpdate::QGCPX4FirmwareUpdate(QWidget *parent) :
QWidget(parent),
ui(new Ui::QGCPX4FirmwareUpdate)
{
ui->setupUi(this);
}
QGCPX4FirmwareUpdate::~QGCPX4FirmwareUpdate()
{
delete ui;
}
#ifndef QGCPX4FIRMWAREUPDATE_H
#define QGCPX4FIRMWAREUPDATE_H
#include <QWidget>
namespace Ui {
class QGCPX4FirmwareUpdate;
}
class QGCPX4FirmwareUpdate : public QWidget
{
Q_OBJECT
public:
explicit QGCPX4FirmwareUpdate(QWidget *parent = 0);
~QGCPX4FirmwareUpdate();
private:
Ui::QGCPX4FirmwareUpdate *ui;
};
#endif // QGCPX4FIRMWAREUPDATE_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QGCPX4FirmwareUpdate</class>
<widget class="QWidget" name="QGCPX4FirmwareUpdate">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="4">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>2</number>
</property>
<widget class="QWidget" name="firmwareSelectTab">
<attribute name="title">
<string>Firmware</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item row="0" column="0" colspan="2">
<widget class="QListWidget" name="fileList"/>
</item>
<item row="1" column="0">
<widget class="QLineEdit" name="fileLineEdit"/>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="selectFileButton">
<property name="text">
<string>Select File</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="settingsBackupTab">
<attribute name="title">
<string>Settings</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="settingsStoreButton">
<property name="text">
<string>Select File</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="flashTab">
<attribute name="title">
<string>Flash Firmware</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QLabel" name="fileLabel">
<property name="text">
<string>Filename</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QProgressBar" name="progressBar">
<property name="value">
<number>24</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="statusLabel">
<property name="text">
<string>Status</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QPushButton" name="flashButton">
<property name="text">
<string>Flash Firmware</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>Prev</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>Next</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>Flash</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment