Commit ce5ad726 authored by Don Gagne's avatar Don Gagne

Merge pull request #3432 from DonLakeFlyer/PX4FlashVersion

Show PX4 Stable version for flashing
parents 8eebbd6f d72f86d8
...@@ -221,7 +221,7 @@ QGCView { ...@@ -221,7 +221,7 @@ QGCView {
id: px4FlightStack id: px4FlightStack
checked: true checked: true
exclusiveGroup: firmwareGroup exclusiveGroup: firmwareGroup
text: qsTr("PX4 Flight Stack") text: qsTr("PX4 Flight Stack ") + controller.px4StableVersion
visible: !px4Flow visible: !px4Flow
onClicked: parent.firmwareVersionChanged(firmwareTypeList) onClicked: parent.firmwareVersionChanged(firmwareTypeList)
......
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#include <QStandardPaths> #include <QStandardPaths>
#include <QRegularExpression> #include <QRegularExpression>
#include <QJsonDocument>
#include <QJsonObject>
struct FirmwareToUrlElement_t { struct FirmwareToUrlElement_t {
FirmwareUpgradeController::AutoPilotStackType_t stackType; FirmwareUpgradeController::AutoPilotStackType_t stackType;
...@@ -75,6 +77,7 @@ FirmwareUpgradeController::FirmwareUpgradeController(void) ...@@ -75,6 +77,7 @@ FirmwareUpgradeController::FirmwareUpgradeController(void)
connect(&_eraseTimer, &QTimer::timeout, this, &FirmwareUpgradeController::_eraseProgressTick); connect(&_eraseTimer, &QTimer::timeout, this, &FirmwareUpgradeController::_eraseProgressTick);
_initFirmwareHash(); _initFirmwareHash();
_determinePX4StableVersion();
} }
FirmwareUpgradeController::~FirmwareUpgradeController() FirmwareUpgradeController::~FirmwareUpgradeController()
...@@ -827,3 +830,40 @@ FirmwareUpgradeController::FirmwareVehicleType_t FirmwareUpgradeController::vehi ...@@ -827,3 +830,40 @@ FirmwareUpgradeController::FirmwareVehicleType_t FirmwareUpgradeController::vehi
return _apmVehicleTypeFromCurrentVersionList[index]; return _apmVehicleTypeFromCurrentVersionList[index];
} }
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"));
}
void FirmwareUpgradeController::_px4StableGithubDownloadFinished(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();
return;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qWarning() << "Unable to open json document" << localFile << jsonParseError.errorString();
return;
}
QJsonObject json = doc.object();
_px4StableVersion = json["name"].toString();
emit px4StableVersionChanged(_px4StableVersion);
}
void FirmwareUpgradeController::_px4StableGithubDownloadError(QString errorMsg)
{
qWarning() << "PX4 stable github download failed" << errorMsg;
}
...@@ -111,6 +111,7 @@ public: ...@@ -111,6 +111,7 @@ public:
Q_PROPERTY(QString boardType MEMBER _foundBoardTypeName NOTIFY boardFound) Q_PROPERTY(QString boardType MEMBER _foundBoardTypeName NOTIFY boardFound)
Q_PROPERTY(FirmwareType_t selectedFirmwareType READ selectedFirmwareType WRITE setSelectedFirmwareType NOTIFY selectedFirmwareTypeChanged) Q_PROPERTY(FirmwareType_t selectedFirmwareType READ selectedFirmwareType WRITE setSelectedFirmwareType NOTIFY selectedFirmwareTypeChanged)
Q_PROPERTY(QStringList apmAvailableVersions READ apmAvailableVersions NOTIFY apmAvailableVersionsChanged) Q_PROPERTY(QStringList apmAvailableVersions READ apmAvailableVersions NOTIFY apmAvailableVersionsChanged)
Q_PROPERTY(QString px4StableVersion READ px4StableVersion NOTIFY px4StableVersionChanged)
/// TextArea for log output /// TextArea for log output
Q_PROPERTY(QQuickItem* statusLog READ statusLog WRITE setStatusLog) Q_PROPERTY(QQuickItem* statusLog READ statusLog WRITE setStatusLog)
...@@ -150,6 +151,7 @@ public: ...@@ -150,6 +151,7 @@ public:
QString firmwareTypeAsString(FirmwareType_t type) const; QString firmwareTypeAsString(FirmwareType_t type) const;
QStringList apmAvailableVersions(void); QStringList apmAvailableVersions(void);
QString px4StableVersion(void) { return _px4StableVersion; }
signals: signals:
void boardFound(void); void boardFound(void);
...@@ -160,6 +162,7 @@ signals: ...@@ -160,6 +162,7 @@ signals:
void error(void); void error(void);
void selectedFirmwareTypeChanged(FirmwareType_t firmwareType); void selectedFirmwareTypeChanged(FirmwareType_t firmwareType);
void apmAvailableVersionsChanged(void); void apmAvailableVersionsChanged(void);
void px4StableVersionChanged(const QString& px4StableVersion);
private slots: private slots:
void _downloadProgress(qint64 curr, qint64 total); void _downloadProgress(qint64 curr, qint64 total);
...@@ -178,6 +181,8 @@ private slots: ...@@ -178,6 +181,8 @@ private slots:
void _eraseComplete(void); void _eraseComplete(void);
void _eraseProgressTick(void); void _eraseProgressTick(void);
void _apmVersionDownloadFinished(QString remoteFile, QString localFile); void _apmVersionDownloadFinished(QString remoteFile, QString localFile);
void _px4StableGithubDownloadFinished(QString remoteFile, QString localFile);
void _px4StableGithubDownloadError(QString errorMsg);
private: private:
void _getFirmwareFile(FirmwareIdentifier firmwareId); void _getFirmwareFile(FirmwareIdentifier firmwareId);
...@@ -188,6 +193,7 @@ private: ...@@ -188,6 +193,7 @@ private:
void _loadAPMVersions(QGCSerialPortInfo::BoardType_t boardType); void _loadAPMVersions(QGCSerialPortInfo::BoardType_t boardType);
QHash<FirmwareIdentifier, QString>* _firmwareHashForBoardId(int boardId); QHash<FirmwareIdentifier, QString>* _firmwareHashForBoardId(int boardId);
QHash<FirmwareIdentifier, QString>* _firmwareHashForBoardType(QGCSerialPortInfo::BoardType_t boardType); QHash<FirmwareIdentifier, QString>* _firmwareHashForBoardType(QGCSerialPortInfo::BoardType_t boardType);
void _determinePX4StableVersion(void);
QString _portName; QString _portName;
QString _portDescription; QString _portDescription;
...@@ -243,6 +249,8 @@ private: ...@@ -243,6 +249,8 @@ private:
FirmwareType_t _selectedFirmwareType; FirmwareType_t _selectedFirmwareType;
FirmwareImage* _image; FirmwareImage* _image;
QString _px4StableVersion; // Version strange for latest PX4 stable
}; };
// global hashing function // 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