Commit 6ddffeeb authored by Don Gagne's avatar Don Gagne

Show PX4 beta version info for flash

parent 32724477
......@@ -111,7 +111,7 @@ QGCView {
// We end up here when we detect a board plugged in after we've started upgrade
statusTextArea.append(highlightPrefix + qsTr("Found device") + highlightSuffix + ": " + controller.boardType)
if (controller.boardType == "Pixhawk" || controller.boardType == "AeroCore" || controller.boardType == "PX4 Flow" || controller.boardType == "PX4 FMU V1" || controller.boardType == "MindPX") {
showDialog(pixhawkFirmwareSelectDialog, title, qgcView.showDialogDefaultWidth, StandardButton.Ok | StandardButton.Cancel)
showDialog(pixhawkFirmwareSelectDialogComponent, title, qgcView.showDialogDefaultWidth, StandardButton.Ok | StandardButton.Cancel)
}
}
}
......@@ -130,13 +130,33 @@ QGCView {
}
Component {
id: pixhawkFirmwareSelectDialog
id: pixhawkFirmwareSelectDialogComponent
QGCViewDialog {
anchors.fill: parent
id: pixhawkFirmwareSelectDialog
anchors.fill: parent
property bool showFirmwareTypeSelection: _advanced.checked
property bool px4Flow: controller.boardType == "PX4 Flow"
function updatePX4VersionDisplay() {
var versionString = ""
if (_advanced.checked) {
switch (controller.selectedFirmwareType) {
case FirmwareUpgradeController.StableFirmware:
versionString = controller.px4StableVersion
break
case FirmwareUpgradeController.BetaFirmware:
versionString = controller.px4BetaVersion
break
}
} else {
versionString = controller.px4StableVersion
}
px4FlightStack.text = qsTr("PX4 Flight Stack ") + versionString
}
property bool showFirmwareTypeSelection: _advanced.checked
property bool px4Flow: controller.boardType == "PX4 Flow"
Component.onCompleted: updatePX4VersionDisplay()
function accept() {
hideDialog()
......@@ -221,7 +241,7 @@ QGCView {
id: px4FlightStack
checked: true
exclusiveGroup: firmwareGroup
text: qsTr("PX4 Flight Stack ") + controller.px4StableVersion
text: qsTr("PX4 Flight Stack ")
visible: !px4Flow
onClicked: parent.firmwareVersionChanged(firmwareTypeList)
......@@ -263,6 +283,7 @@ QGCView {
onClicked: {
firmwareVersionCombo.currentIndex = 0
firmwareVersionWarningLabel.visible = false
updatePX4VersionDisplay()
}
}
......@@ -307,6 +328,7 @@ QGCView {
} else {
firmwareVersionWarningLabel.visible = false
}
updatePX4VersionDisplay()
}
}
......@@ -318,8 +340,7 @@ QGCView {
}
} // Column
} // QGCViewDialog
} // Component - pixhawkFirmwareSelectDialog
} // Component - pixhawkFirmwareSelectDialogComponent
Component {
id: firmwareWarningDialog
......
......@@ -35,6 +35,7 @@
#include <QRegularExpression>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
struct FirmwareToUrlElement_t {
FirmwareUpgradeController::AutoPilotStackType_t stackType;
......@@ -834,18 +835,18 @@ FirmwareUpgradeController::FirmwareVehicleType_t FirmwareUpgradeController::vehi
void FirmwareUpgradeController::_determinePX4StableVersion(void)
{
QGCFileDownload* downloader = new QGCFileDownload(this);
connect(downloader, &QGCFileDownload::downloadFinished, this, &FirmwareUpgradeController::_px4StableGithubDownloadFinished);
connect(downloader, &QGCFileDownload::error, this, &FirmwareUpgradeController::_px4StableGithubDownloadError);
downloader->download(QStringLiteral("https://api.github.com/repos/PX4/Firmware/releases/latest"));
connect(downloader, &QGCFileDownload::downloadFinished, this, &FirmwareUpgradeController::_px4ReleasesGithubDownloadFinished);
connect(downloader, &QGCFileDownload::error, this, &FirmwareUpgradeController::_px4ReleasesGithubDownloadError);
downloader->download(QStringLiteral("https://api.github.com/repos/PX4/Firmware/releases"));
}
void FirmwareUpgradeController::_px4StableGithubDownloadFinished(QString remoteFile, QString localFile)
void FirmwareUpgradeController::_px4ReleasesGithubDownloadFinished(QString remoteFile, QString localFile)
{
Q_UNUSED(remoteFile);
QFile jsonFile(localFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Unable to open github json file" << localFile << jsonFile.errorString();
qCWarning(FirmwareUpgradeLog) << "Unable to open github px4 releases json file" << localFile << jsonFile.errorString();
return;
}
QByteArray bytes = jsonFile.readAll();
......@@ -854,16 +855,45 @@ void FirmwareUpgradeController::_px4StableGithubDownloadFinished(QString remoteF
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qWarning() << "Unable to open json document" << localFile << jsonParseError.errorString();
qCWarning(FirmwareUpgradeLog) << "Unable to open px4 releases json document" << localFile << jsonParseError.errorString();
return;
}
QJsonObject json = doc.object();
_px4StableVersion = json["name"].toString();
emit px4StableVersionChanged(_px4StableVersion);
// Json should be an array of release objects
if (!doc.isArray()) {
qCWarning(FirmwareUpgradeLog) << "px4 releases json document is not an array" << localFile;
return;
}
QJsonArray releases = doc.array();
// The first release marked prerelease=false is stable
// The first release marked prerelease=true is beta
bool foundStable = false;
bool foundBeta = false;
for (int i=0; i<releases.count() && (!foundStable || !foundBeta); i++) {
QJsonObject release = releases[i].toObject();
if (!foundStable && !release["prerelease"].toBool()) {
_px4StableVersion = release["name"].toString();
emit px4StableVersionChanged(_px4StableVersion);
qCDebug(FirmwareUpgradeLog()) << "Found px4 stable version" << _px4StableVersion;
foundStable = true;
} else if (!foundBeta && release["prerelease"].toBool()) {
_px4BetaVersion = release["name"].toString();
emit px4StableVersionChanged(_px4BetaVersion);
qCDebug(FirmwareUpgradeLog()) << "Found px4 beta version" << _px4BetaVersion;
foundBeta = true;
}
}
if (!foundStable) {
qCDebug(FirmwareUpgradeLog()) << "Unable to find px4 stable version" << localFile;
}
if (!foundBeta) {
qCDebug(FirmwareUpgradeLog()) << "Unable to find px4 beta version" << localFile;
}
}
void FirmwareUpgradeController::_px4StableGithubDownloadError(QString errorMsg)
void FirmwareUpgradeController::_px4ReleasesGithubDownloadError(QString errorMsg)
{
qWarning() << "PX4 stable github download failed" << errorMsg;
qCWarning(FirmwareUpgradeLog) << "PX4 releases github download failed" << errorMsg;
}
......@@ -112,6 +112,7 @@ public:
Q_PROPERTY(FirmwareType_t selectedFirmwareType READ selectedFirmwareType WRITE setSelectedFirmwareType NOTIFY selectedFirmwareTypeChanged)
Q_PROPERTY(QStringList apmAvailableVersions READ apmAvailableVersions NOTIFY apmAvailableVersionsChanged)
Q_PROPERTY(QString px4StableVersion READ px4StableVersion NOTIFY px4StableVersionChanged)
Q_PROPERTY(QString px4BetaVersion READ px4BetaVersion NOTIFY px4BetaVersionChanged)
/// TextArea for log output
Q_PROPERTY(QQuickItem* statusLog READ statusLog WRITE setStatusLog)
......@@ -152,6 +153,7 @@ public:
QStringList apmAvailableVersions(void);
QString px4StableVersion(void) { return _px4StableVersion; }
QString px4BetaVersion(void) { return _px4BetaVersion; }
signals:
void boardFound(void);
......@@ -163,7 +165,8 @@ signals:
void selectedFirmwareTypeChanged(FirmwareType_t firmwareType);
void apmAvailableVersionsChanged(void);
void px4StableVersionChanged(const QString& px4StableVersion);
void px4BetaVersionChanged(const QString& px4BetaVersion);
private slots:
void _downloadProgress(qint64 curr, qint64 total);
void _downloadFinished(void);
......@@ -181,8 +184,8 @@ private slots:
void _eraseComplete(void);
void _eraseProgressTick(void);
void _apmVersionDownloadFinished(QString remoteFile, QString localFile);
void _px4StableGithubDownloadFinished(QString remoteFile, QString localFile);
void _px4StableGithubDownloadError(QString errorMsg);
void _px4ReleasesGithubDownloadFinished(QString remoteFile, QString localFile);
void _px4ReleasesGithubDownloadError(QString errorMsg);
private:
void _getFirmwareFile(FirmwareIdentifier firmwareId);
......@@ -251,6 +254,7 @@ private:
FirmwareImage* _image;
QString _px4StableVersion; // Version strange for latest PX4 stable
QString _px4BetaVersion; // Version strange for latest PX4 beta
};
// global hashing function
......
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