From eaf48fe3fd75ce3c57ccd3d09fe537db5f82bc44 Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Tue, 21 May 2019 09:50:59 -0300 Subject: [PATCH] Vehicle: add csv logging of facts --- src/Vehicle/Vehicle.cc | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/Vehicle/Vehicle.h | 5 +++++ 2 files changed, 55 insertions(+) diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index 02a98da..dbb90af 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -111,6 +111,7 @@ Vehicle::Vehicle(LinkInterface* link, , _soloFirmware(false) , _toolbox(qgcApp()->toolbox()) , _settingsManager(_toolbox->settingsManager()) + , _csvLogTimer(this) , _joystickMode(JoystickModeRC) , _joystickEnabled(false) , _uas(nullptr) @@ -302,6 +303,7 @@ Vehicle::Vehicle(LinkInterface* link, connect(&_adsbTimer, &QTimer::timeout, this, &Vehicle::_adsbTimerTimeout); _adsbTimer.setSingleShot(false); _adsbTimer.start(1000); + _initializeCsv(); } // Disconnected Vehicle for offline editing @@ -323,6 +325,7 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType, , _soloFirmware(false) , _toolbox(qgcApp()->toolbox()) , _settingsManager(_toolbox->settingsManager()) + , _csvLogTimer(this) , _joystickMode(JoystickModeRC) , _joystickEnabled(false) , _uas(nullptr) @@ -4005,6 +4008,53 @@ void Vehicle::_pidTuningAdjustRates(bool setRatesForTuning) _setpointFactGroup.setLiveUpdates(setRatesForTuning); } +void Vehicle::_initializeCsv() +{ + 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()); + _csvLogFile.setFileName(saveDir.absoluteFilePath(fileName)); + + if (!_csvLogFile.open(QIODevice::Append)) { + qCWarning(VehicleLog) << "unable to open file for csv logging, Stopping csv logging!"; + return; + } + + QTextStream stream(&_csvLogFile); + QStringList allFactNames; + allFactNames << factNames(); + for (const QString& groupName: factGroupNames()) { + for(const QString& factName: getFactGroup(groupName)->factNames()){ + allFactNames << QString("%1.%2").arg(groupName, factName); + } + } + 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() +{ + QStringList allFactValues; + QTextStream stream(&_csvLogFile); + + // Write timestamp to csv file + allFactValues << QDateTime::currentDateTime().toString(); + // Write Vehicle's own facts + for (const QString& factName : factNames()) { + allFactValues << getFact(factName)->cookedValueString(); + } + // write facts from Vehicle's FactGroups + for (const QString& groupName: factGroupNames()) { + for (const QString& factName : getFactGroup(groupName)->factNames()) { + allFactValues << getFactGroup(groupName)->getFact(factName)->cookedValueString(); + } + } + + stream << allFactValues.join(",") << "\n"; +} #if !defined(NO_ARDUPILOT_DIALECT) void Vehicle::flashBootloader(void) diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index b989976..56d0fa2 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -1331,6 +1331,8 @@ private: void _pidTuningAdjustRates(bool setRatesForTuning); void _handleUnsupportedRequestAutopilotCapabilities(void); void _handleUnsupportedRequestProtocolVersion(void); + void _initializeCsv(); + void _writeCsvLine(); int _id; ///< Mavlink system id int _defaultComponentId; @@ -1347,6 +1349,9 @@ private: QGCToolbox* _toolbox; SettingsManager* _settingsManager; + QTimer _csvLogTimer; + QFile _csvLogFile; + QList _links; JoystickMode_t _joystickMode;