Refactor firmware and companion updates plus add extra supporting components
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) EdgeTX
|
||||
*
|
||||
* Based on code named
|
||||
* opentx - https://github.com/opentx/opentx
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program 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.
|
||||
*/
|
||||
|
||||
#include "updatefirmware.h"
|
||||
#include "appdata.h"
|
||||
#include "flashfirmwaredialog.h"
|
||||
|
||||
UpdateFirmware::UpdateFirmware(QWidget * parent) :
|
||||
UpdateInterface(parent)
|
||||
{
|
||||
setName("Firmware");
|
||||
setRepo(QString(GH_REPOS_EDGETX).append("/edgetx"));
|
||||
setReleasesNightlyName("nightly");
|
||||
|
||||
dfltParams->data.flags = UPDFLG_Common | UPDFLG_Locked | UPDFLG_AsyncInstall;
|
||||
|
||||
UpdateParameters::AssetParams &ap = dfltParams->addAsset();
|
||||
ap.filterType = UpdateParameters::UFT_Startswith;
|
||||
ap.filter = "edgetx-firmware";
|
||||
ap.maxExpected = 1;
|
||||
ap.flags = dfltParams->data.flags | UPDFLG_CopyFiles;
|
||||
ap.destSubDir = "FIRMWARE";
|
||||
ap.copyFilterType = UpdateParameters::UFT_Expression;
|
||||
ap.copyFilter = QString("^%1-.*\\.bin$").arg(fwFlavour);
|
||||
}
|
||||
|
||||
bool UpdateFirmware::asyncInstall()
|
||||
{
|
||||
progressMessage(tr("Async install"));
|
||||
|
||||
assets->setFilterFlags(UPDFLG_AsyncInstall);
|
||||
reportProgress(tr("Asset filter applied: %1 Assets found: %2").arg(updateFlagsToString(UPDFLG_AsyncInstall)).arg(assets->count()), QtDebugMsg);
|
||||
|
||||
if (assets->count() != 1) {
|
||||
reportProgress(tr("Expected 1 asset for install but none found"), QtCriticalMsg);
|
||||
return false;
|
||||
}
|
||||
|
||||
QString destPath = updateDir;
|
||||
|
||||
if (!assets->subDirectory().isEmpty())
|
||||
destPath.append("/" % assets->subDirectory());
|
||||
|
||||
QRegularExpression filter(runParams->data.assets.at(0).copyFilter, QRegularExpression::CaseInsensitiveOption);
|
||||
|
||||
QDirIterator it(destPath);
|
||||
|
||||
bool found = false;
|
||||
|
||||
while (it.hasNext())
|
||||
{
|
||||
QFileInfo file(it.next());
|
||||
|
||||
if ((!filter.pattern().isEmpty()) && (!file.fileName().contains(filter)))
|
||||
continue;
|
||||
|
||||
destPath.append("/" % file.fileName());
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
reportProgress(tr("Firmware not found in %1 using filter %2").arg(destPath).arg(filter.pattern()), QtCriticalMsg);
|
||||
return false;
|
||||
}
|
||||
|
||||
g.currentProfile().fwName(destPath);
|
||||
|
||||
reportProgress(tr("Write firmware to radio option setting: %1").arg(g.currentProfile().burnFirmware() ? tr("true") : tr("false")), QtDebugMsg);
|
||||
|
||||
if (g.currentProfile().burnFirmware()) {
|
||||
int ret = QMessageBox::question(this, CPN_STR_APP_NAME, tr("Do you want to write the firmware to the radio now ?"), QMessageBox::Yes | QMessageBox::No);
|
||||
if (ret == QMessageBox::Yes) {
|
||||
FlashFirmwareDialog *dlg = new FlashFirmwareDialog(this);
|
||||
dlg->exec();
|
||||
dlg->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user