diff --git a/src/Settings/App.SettingsGroup.json b/src/Settings/App.SettingsGroup.json index a86453df89db0ae955468a428e3bfa5168e3de80..eaa88ac86840772c3afccf951a98e5f902f98c8a 100644 --- a/src/Settings/App.SettingsGroup.json +++ b/src/Settings/App.SettingsGroup.json @@ -263,5 +263,12 @@ "longDescription": "Use Link Pairing.", "type": "bool", "defaultValue": false +}, +{ + "name": "saveCsvTelemetry", + "shortDescription": "Save CSV Telementry Logs", + "longDescription": "If this option is enabled, all Facts will be written to a CSV file with a 1 Hertz frequency.", + "type": "bool", + "defaultValue": false } ] diff --git a/src/Settings/AppSettings.cc b/src/Settings/AppSettings.cc index b53690392e28e40415efaa419039dc5e4eecdb4c..7d33e95dc606b81558b23392cfcbeb9445f2b5b4 100644 --- a/src/Settings/AppSettings.cc +++ b/src/Settings/AppSettings.cc @@ -97,6 +97,7 @@ DECLARE_SETTINGSFACT(AppSettings, enableMicrohard) DECLARE_SETTINGSFACT(AppSettings, language) DECLARE_SETTINGSFACT(AppSettings, disableAllPersistence) DECLARE_SETTINGSFACT(AppSettings, usePairing) +DECLARE_SETTINGSFACT(AppSettings, saveCsvTelemetry) DECLARE_SETTINGSFACT_NO_FUNC(AppSettings, indoorPalette) { diff --git a/src/Settings/AppSettings.h b/src/Settings/AppSettings.h index 6cee9d65d9d76b872134e5eef77573b15122d5d0..6ecbb042475f426c12785b4bef90f58d8a6360b2 100644 --- a/src/Settings/AppSettings.h +++ b/src/Settings/AppSettings.h @@ -52,6 +52,7 @@ public: DEFINE_SETTINGFACT(language) DEFINE_SETTINGFACT(disableAllPersistence) DEFINE_SETTINGFACT(usePairing) + DEFINE_SETTINGFACT(saveCsvTelemetry) // Although this is a global setting it only affects ArduPilot vehicle since PX4 automatically starts the stream from the vehicle side DEFINE_SETTINGFACT(apmStartMavlinkStreams) diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index dbb90aff0512c8d34e3be4a438b54dbf9081318f..2419ed135c8774bbeeb99aed626d5872da7899f8 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -303,7 +303,10 @@ Vehicle::Vehicle(LinkInterface* link, connect(&_adsbTimer, &QTimer::timeout, this, &Vehicle::_adsbTimerTimeout); _adsbTimer.setSingleShot(false); _adsbTimer.start(1000); - _initializeCsv(); + + // Start csv logger + connect(&_csvLogTimer, &QTimer::timeout, this, &Vehicle::_writeCsvLine); + _csvLogTimer.start(1000); } // Disconnected Vehicle for offline editing @@ -4010,6 +4013,9 @@ void Vehicle::_pidTuningAdjustRates(bool setRatesForTuning) void Vehicle::_initializeCsv() { + if(!_toolbox->settingsManager()->appSettings()->saveCsvTelemetry()->rawValue().toBool()){ + return; + } QString now = QDateTime::currentDateTime().toString("yyyy-MM-dd hh-mm-ss"); QString fileName = QString("%1 vehicle%2.csv").arg(now).arg(_id); QDir saveDir(_toolbox->settingsManager()->appSettings()->telemetrySavePath()); @@ -4030,13 +4036,20 @@ void Vehicle::_initializeCsv() } qCDebug(VehicleLog) << "Facts logged to csv:" << allFactNames; stream << "Timestamp," << allFactNames.join(",") << "\n"; - - connect(&_csvLogTimer, &QTimer::timeout, this, &Vehicle::_writeCsvLine); - _csvLogTimer.start(1000); } void Vehicle::_writeCsvLine() { + // Only save the logs after the the vehicle gets armed, unless "Save logs even if vehicle was not armed" is checked + if(!_csvLogFile.isOpen() && + (_armed || _toolbox->settingsManager()->appSettings()->telemetrySaveNotArmed()->rawValue().toBool())){ + _initializeCsv(); + } + + if(!_csvLogFile.isOpen()){ + return; + } + QStringList allFactValues; QTextStream stream(&_csvLogFile); diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml index 2809c201da091f8410b677f5911b56423502ef05..01825459085244f4a07f13fe2b0697c41966794a 100644 --- a/src/ui/preferences/GeneralSettings.qml +++ b/src/ui/preferences/GeneralSettings.qml @@ -420,6 +420,14 @@ Rectangle { enabled: promptSaveLog.checked && !disableDataPersistence.checked property Fact _telemetrySaveNotArmed: QGroundControl.settingsManager.appSettings.telemetrySaveNotArmed } + FactCheckBox { + id: promptSaveCsv + text: qsTr("Save CSV log of telemetry data") + fact: _saveCsvTelemetry + visible: _saveCsvTelemetry.visible + enabled: !disableDataPersistence.checked + property Fact _saveCsvTelemetry: QGroundControl.settingsManager.appSettings.saveCsvTelemetry + } } }