From 6ddffeeb7c7f7543d015b4e8c38cadddf31470bf Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Sun, 29 May 2016 11:24:33 -0700 Subject: [PATCH] Show PX4 beta version info for flash --- src/VehicleSetup/FirmwareUpgrade.qml | 37 ++++++++++--- src/VehicleSetup/FirmwareUpgradeController.cc | 52 +++++++++++++++---- src/VehicleSetup/FirmwareUpgradeController.h | 10 ++-- 3 files changed, 77 insertions(+), 22 deletions(-) diff --git a/src/VehicleSetup/FirmwareUpgrade.qml b/src/VehicleSetup/FirmwareUpgrade.qml index 0e5758d10..c78bb0351 100644 --- a/src/VehicleSetup/FirmwareUpgrade.qml +++ b/src/VehicleSetup/FirmwareUpgrade.qml @@ -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 diff --git a/src/VehicleSetup/FirmwareUpgradeController.cc b/src/VehicleSetup/FirmwareUpgradeController.cc index 1b4abbfc3..b19594fab 100644 --- a/src/VehicleSetup/FirmwareUpgradeController.cc +++ b/src/VehicleSetup/FirmwareUpgradeController.cc @@ -35,6 +35,7 @@ #include #include #include +#include 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