diff --git a/src/AutoPilotPlugins/Common/SetupPage.qml b/src/AutoPilotPlugins/Common/SetupPage.qml index 714e3bba0b021204aaef778a84349705dc227777..2efdf4bb695a10072ca043f83f465d282496000e 100644 --- a/src/AutoPilotPlugins/Common/SetupPage.qml +++ b/src/AutoPilotPlugins/Common/SetupPage.qml @@ -40,7 +40,7 @@ QGCView { property bool _vehicleFlying: _activeVehicle ? _activeVehicle.flying : false property bool _disableDueToArmed: vehicleComponent ? (!vehicleComponent.allowSetupWhileArmed && _vehicleArmed) : false // FIXME: The _vehicleIsRover checkl is a hack to work around https://github.com/PX4/Firmware/issues/10969 - property bool _disableDueToFlying: vehicleComponent ? (_vehicleIsRover || (!vehicleComponent.allowSetupWhileFlying && _vehicleFlying)) : false + property bool _disableDueToFlying: vehicleComponent ? (!_vehicleIsRover && !vehicleComponent.allowSetupWhileFlying && _vehicleFlying) : false property string _disableReason: _disableDueToArmed ? qsTr("armed") : qsTr("flying") property real _margins: ScreenTools.defaultFontPixelHeight * 0.5 diff --git a/src/QGCApplication.cc b/src/QGCApplication.cc index 5aa0bb9bba328edcae4b8a1ac0939ac55cd3a1be..534ef45f1f050feadf9efd1bd605606e430cfa20 100644 --- a/src/QGCApplication.cc +++ b/src/QGCApplication.cc @@ -89,6 +89,7 @@ #include "FactValueSliderListModel.h" #include "ShapeFileHelper.h" #include "QGCFileDownload.h" +#include "FirmwareImage.h" #ifndef NO_SERIAL_LINK #include "SerialLink.h" @@ -236,11 +237,13 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) // Parse command line options bool fClearSettingsOptions = false; // Clear stored settings + bool fClearCache = false; // Clear parameter/airframe caches bool logging = false; // Turn on logging QString loggingOptions; CmdLineOpt_t rgCmdLineOptions[] = { { "--clear-settings", &fClearSettingsOptions, nullptr }, + { "--clear-cache", &fClearCache, nullptr }, { "--logging", &logging, &loggingOptions }, { "--fake-mobile", &_fakeMobile, nullptr }, { "--log-output", &_logOutput, nullptr }, @@ -309,6 +312,15 @@ QGCApplication::QGCApplication(int &argc, char* argv[], bool unitTesting) } settings.setValue(_settingsVersionKey, QGC_SETTINGS_VERSION); + if (fClearCache) { + QDir dir(ParameterManager::parameterCacheDir()); + dir.removeRecursively(); + QFile airframe(cachedAirframeMetaDataFile()); + airframe.remove(); + QFile parameter(cachedParameterMetaDataFile()); + parameter.remove(); + } + // Set up our logging filters QGCLoggingCategoryRegister::instance()->setFilterRulesFromSettings(loggingOptions); @@ -839,3 +851,16 @@ void QGCApplication::_gpsNumSatellites(int numSatellites) _gpsRtkFactGroup->numSatellites()->setRawValue(numSatellites); } +QString QGCApplication::cachedParameterMetaDataFile(void) +{ + QSettings settings; + QDir parameterDir = QFileInfo(settings.fileName()).dir(); + return parameterDir.filePath(QStringLiteral("ParameterFactMetaData.xml")); +} + +QString QGCApplication::cachedAirframeMetaDataFile(void) +{ + QSettings settings; + QDir airframeDir = QFileInfo(settings.fileName()).dir(); + return airframeDir.filePath(QStringLiteral("PX4AirframeFactMetaData.xml")); +} diff --git a/src/QGCApplication.h b/src/QGCApplication.h index fa83c39b64c670bd99e84bca18a03eacf08e6313..052bf53f0318631472ad16f285f3992b815070f6 100644 --- a/src/QGCApplication.h +++ b/src/QGCApplication.h @@ -98,6 +98,9 @@ public: FactGroup* gpsRtkFactGroup(void) { return _gpsRtkFactGroup; } + static QString cachedParameterMetaDataFile(void); + static QString cachedAirframeMetaDataFile(void); + public slots: /// You can connect to this slot to show an information message box from a different thread. void informationMessageBoxOnMainThread(const QString& title, const QString& msg); diff --git a/src/VehicleSetup/FirmwareImage.cc b/src/VehicleSetup/FirmwareImage.cc index 6306eceb2e14643ac5c5aa3fddc51a98423bb6bc..95145a93c96eb5d60c923b08e44e44c86ae44930 100644 --- a/src/VehicleSetup/FirmwareImage.cc +++ b/src/VehicleSetup/FirmwareImage.cc @@ -275,12 +275,8 @@ bool FirmwareImage::_px4Load(const QString& imageFilename) _jsonParamXmlKey, // key which holds compressed bytes decompressedBytes); // Returned decompressed bytes if (success) { - // Use settings location as our work directory, this way is something goes wrong the file is still there - // sitting next to the cache files. - QSettings settings; - QDir parameterDir = QFileInfo(settings.fileName()).dir(); - QString parameterFilename = parameterDir.filePath("ParameterFactMetaData.xml"); - QFile parameterFile(parameterFilename); + QString parameterFilename = QGCApplication::cachedParameterMetaDataFile(); + QFile parameterFile(QGCApplication::cachedParameterMetaDataFile()); if (parameterFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { qint64 bytesWritten = parameterFile.write(decompressedBytes); @@ -306,12 +302,9 @@ bool FirmwareImage::_px4Load(const QString& imageFilename) _jsonAirframeXmlKey, // key which holds compressed bytes decompressedBytes); // Returned decompressed bytes if (success) { - // We cache the airframe xml in the same location as settings and parameters - QSettings settings; - QDir airframeDir = QFileInfo(settings.fileName()).dir(); - QString airframeFilename = airframeDir.filePath("PX4AirframeFactMetaData.xml"); + QString airframeFilename = QGCApplication::cachedAirframeMetaDataFile(); //qDebug() << airframeFilename; - QFile airframeFile(airframeFilename); + QFile airframeFile(QGCApplication::cachedAirframeMetaDataFile()); if (airframeFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { qint64 bytesWritten = airframeFile.write(decompressedBytes);