QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
LogFileParser.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QHash>
4#include <QtCore/QObject>
5#include <QtCore/QPointF>
6#include <QtCore/QString>
7#include <QtCore/QStringList>
8#include <QtCore/QVariant>
9#include <QtCore/QVariantList>
10#include <QtCore/QDateTime>
11#include <QtCore/QVector>
12#include <QtCore/QtGlobal>
13#include <QtQmlIntegration/QtQmlIntegration>
14
15#include <atomic>
16#include <memory>
17
32class LogFileParser : public QObject
33{
34 Q_OBJECT
35 QML_ELEMENT
36
37 Q_PROPERTY(bool parsing READ parsing NOTIFY parsingChanged)
38 Q_PROPERTY(float parseProgress READ parseProgress NOTIFY parseProgressChanged)
39 Q_PROPERTY(bool parseComplete READ parseComplete NOTIFY parseCompleteChanged)
40 Q_PROPERTY(QString parseError READ parseError NOTIFY parseErrorChanged)
41 Q_PROPERTY(QStringList availableFields READ availableFields NOTIFY availableFieldsChanged)
42 Q_PROPERTY(QVariantList parameters READ parameters NOTIFY parametersChanged)
43 Q_PROPERTY(QVariantList events READ events NOTIFY eventsChanged)
44 Q_PROPERTY(QVariantList messages READ messages NOTIFY messagesChanged)
45 Q_PROPERTY(QStringList plottableFields READ plottableFields NOTIFY plottableFieldsChanged)
46 Q_PROPERTY(QVariantList modeSegments READ modeSegments NOTIFY modeSegmentsChanged)
47 Q_PROPERTY(QStringList modeNames READ modeNames NOTIFY modeNamesChanged)
48 Q_PROPERTY(QVariantList dropouts READ dropouts NOTIFY dropoutsChanged)
50 Q_PROPERTY(double minTimestamp READ minTimestamp NOTIFY timeRangeChanged)
51 Q_PROPERTY(double maxTimestamp READ maxTimestamp NOTIFY timeRangeChanged)
52 Q_PROPERTY(int sampleCount READ sampleCount NOTIFY sampleCountChanged)
53 Q_PROPERTY(QDateTime startTime READ startTime NOTIFY startTimeChanged)
54
55public:
56 explicit LogFileParser(QObject *parent = nullptr);
58
59 bool parseComplete() const { return _parseComplete; }
60 QString parseError() const { return _parseError; }
61 QStringList availableFields() const { return _availableFields; }
62 QVariantList parameters() const { return _parameters; }
63 QVariantList events() const { return _events; }
64 QVariantList messages() const { return _messages; }
65 QStringList plottableFields() const { return _plottableFields; }
66 QVariantList modeSegments() const { return _modeSegments; }
67 QStringList modeNames() const { return _modeNames; }
68 QVariantList dropouts() const { return _dropouts; }
69 QString detectedVehicleType() const { return _detectedVehicleType; }
70 double minTimestamp() const { return _minTimestamp; }
71 double maxTimestamp() const { return _maxTimestamp; }
72 int sampleCount() const { return _sampleCount; }
73 QDateTime startTime() const { return _startTime; }
74 bool parsing() const { return _parsing; }
75 float parseProgress() const { return _parseProgress; }
76
77 Q_INVOKABLE bool parseFile(const QString &filePath);
78 Q_INVOKABLE void startParsingAsync(const QString &filePath);
79 Q_INVOKABLE void clear();
80 Q_INVOKABLE QVariantList fieldSamples(const QString &fieldName) const;
81 Q_INVOKABLE QVariantList fieldSamplesFiltered(const QString &fieldName, double minX, double maxX, int pixelWidth) const;
82 Q_INVOKABLE QVariantMap fieldMinMax(const QString &fieldName) const;
83 Q_INVOKABLE double fieldValueAt(const QString &fieldName, double timestampSeconds) const;
84 Q_INVOKABLE QString modeAt(double timestampSeconds) const;
85 Q_INVOKABLE QString modeColor(const QString &modeName) const;
86 Q_INVOKABLE QVariantList eventsNear(double timestampSeconds, double thresholdSeconds) const;
87
92 Q_INVOKABLE QVariantList gpsPath() const;
93
97 Q_INVOKABLE QString gpsAltitudeFieldName() const;
98
101 Q_INVOKABLE QVariantMap gpsCoordAt(double timestampSeconds) const;
102
103signals:
120 void parseFileFinished(const QString &filePath, bool ok, const QString &errorMessage);
121
122private:
123 void _setParseError(const QString &error);
124 void _applyResult(const struct LogParseResult &result);
125
126 bool _parseComplete = false;
127 QString _parseError;
128 QStringList _availableFields;
129 QStringList _plottableFields;
130 QVariantList _parameters;
131 QVariantList _events;
132 QVariantList _messages;
133 QVariantList _modeSegments;
134 QVariantList _dropouts;
135 QString _detectedVehicleType;
136 QHash<QString, QVector<QPointF>> _fieldSamples;
137 double _minTimestamp = -1.0;
138 double _maxTimestamp = -1.0;
139 int _sampleCount = 0;
140 quint64 _parseRequestId = 0;
141 QDateTime _startTime;
142 bool _parsing = false;
143 float _parseProgress = 0.f;
144 std::shared_ptr<std::atomic<bool>> _cancelToken;
145
146 QStringList _modeNames;
147 QHash<QString, int> _modeColorCache;
148
149 // Cached GPS field names, set by gpsPath() when a valid candidate is found.
150 mutable QString _gpsLatField;
151 mutable QString _gpsLonField;
152 mutable QString _gpsAltField;
153};
Error error
Unified log file parser for both DataFlash (.bin/.log) and PX4 ULog (.ulg) files.
Q_INVOKABLE QVariantList eventsNear(double timestampSeconds, double thresholdSeconds) const
QVariantList parameters() const
Q_INVOKABLE double fieldValueAt(const QString &fieldName, double timestampSeconds) const
QVariantList modeSegments() const
QStringList availableFields() const
Q_INVOKABLE QVariantList fieldSamplesFiltered(const QString &fieldName, double minX, double maxX, int pixelWidth) const
void parametersChanged()
Q_INVOKABLE QVariantMap fieldMinMax(const QString &fieldName) const
Q_INVOKABLE QVariantList fieldSamples(const QString &fieldName) const
double maxTimestamp() const
double minTimestamp() const
void timeRangeChanged()
void parseProgressChanged()
void parseErrorChanged()
void dropoutsChanged()
Q_INVOKABLE void startParsingAsync(const QString &filePath)
QString parseError() const
bool parsing() const
void startTimeChanged()
void detectedVehicleTypeChanged()
void sampleCountChanged()
void parsingChanged()
void plottableFieldsChanged()
float parseProgress() const
int sampleCount() const
void availableFieldsChanged()
void modeSegmentsChanged()
QDateTime startTime() const
void parseCompleteChanged()
bool parseComplete() const
Q_INVOKABLE QVariantMap gpsCoordAt(double timestampSeconds) const
Q_INVOKABLE QString modeAt(double timestampSeconds) const
QVariantList events() const
Q_INVOKABLE QString gpsAltitudeFieldName() const
QStringList modeNames() const
Q_INVOKABLE QVariantList gpsPath() const
void parseFileFinished(const QString &filePath, bool ok, const QString &errorMessage)
void modeNamesChanged()
QStringList plottableFields() const
Q_INVOKABLE void clear()
QVariantList dropouts() const
Q_INVOKABLE bool parseFile(const QString &filePath)
QVariantList messages() const
Q_INVOKABLE QString modeColor(const QString &modeName) const
void eventsChanged()
QString detectedVehicleType() const
void messagesChanged()