QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MAVLinkLogManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QFile>
4#include <QtCore/QObject>
5#include <QtNetwork/QHttpPart>
6#include <QtQmlIntegration/QtQmlIntegration>
7
9class QNetworkAccessManager;
11class Vehicle;
12
13class MAVLinkLogFiles : public QObject
14{
15 Q_OBJECT
16
17 Q_PROPERTY(QString name READ name CONSTANT)
18 Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectedChanged)
19 Q_PROPERTY(bool uploaded READ uploaded NOTIFY uploadedChanged)
20 Q_PROPERTY(bool uploading READ uploading NOTIFY uploadingChanged)
21 Q_PROPERTY(bool writing READ writing NOTIFY writingChanged)
22 Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
23 Q_PROPERTY(quint32 size READ size NOTIFY sizeChanged)
24
25public:
26 MAVLinkLogFiles(MAVLinkLogManager *manager, const QString &filePath, bool newFile = false);
28
29 QString name() const { return _name; }
30 bool selected() const { return _selected; }
31 bool uploaded() const { return _uploaded; }
32 bool uploading() const { return _uploading; }
33 bool writing() const { return _writing; }
34 qreal progress() const { return _progress; }
35 quint32 size() const { return _size; }
36
37 void setProgress(qreal progress);
38 void setSelected(bool selected);
39 void setSize(quint32 size);
40 void setUploaded(bool uploaded);
41 void setUploading(bool uploading);
42 void setWriting(bool writing);
43
44signals:
51
52private:
53 bool _selected = false;
54 bool _uploaded = false;
55 bool _uploading = false;
56 bool _writing = false;
57 qreal _progress = 0;
58 QString _name;
59 quint32 _size = 0;
60};
61
62/*===========================================================================*/
63
65{
66public:
69
70 void close();
71 bool valid() const { return ((_file.exists()) && (_record != nullptr)); }
72 bool create(MAVLinkLogManager *manager, QStringView path, uint8_t id);
73 MAVLinkLogFiles *record() { return _record; }
74 QString fileName() const { return _fileName; }
75 bool processStreamData(uint16_t _sequence, uint8_t first_message, const QByteArray &in);
76
77private:
78 bool _checkSequence(uint16_t seq, int &num_drops);
79 QByteArray _writeUlogMessage(QByteArray &data);
80 void _writeData(const void* data, int len);
81
82 bool _error = false;
83 bool _gotHeader = false;
84 int _numDrops = 0;
85 int _sequence = -1;
86 MAVLinkLogFiles *_record = nullptr;
87 QByteArray _ulogMessage;
88 QFile _file;
89 QString _fileName;
90 quint32 _written = 0;
91
92 static constexpr int kUlogMessageHeader = 3;
93 static constexpr int kSequenceSize = 1 << 15;
94};
95
96/*===========================================================================*/
97
98class MAVLinkLogManager : public QObject
99{
100 Q_OBJECT
101 QML_ELEMENT
102 QML_UNCREATABLE("")
103 Q_MOC_INCLUDE("QmlObjectListModel.h")
104 Q_PROPERTY(QString emailAddress READ emailAddress WRITE setEmailAddress NOTIFY emailAddressChanged)
105 Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
106 Q_PROPERTY(QString uploadURL READ uploadURL WRITE setUploadURL NOTIFY uploadURLChanged)
107 Q_PROPERTY(QString feedback READ feedback WRITE setFeedback NOTIFY feedbackChanged)
108 Q_PROPERTY(QString videoURL READ videoURL WRITE setVideoURL NOTIFY videoURLChanged)
112 Q_PROPERTY(bool publicLog READ publicLog WRITE setPublicLog NOTIFY publicLogChanged)
113 Q_PROPERTY(bool uploading READ uploading NOTIFY uploadingChanged)
114 Q_PROPERTY(bool logRunning READ logRunning NOTIFY logRunningChanged)
115 Q_PROPERTY(bool canStartLog READ canStartLog NOTIFY canStartLogChanged)
116 Q_PROPERTY(QmlObjectListModel *logFiles READ logFiles NOTIFY logFilesChanged)
117 Q_PROPERTY(int windSpeed READ windSpeed WRITE setWindSpeed NOTIFY windSpeedChanged)
118 Q_PROPERTY(QString rating READ rating WRITE setRating NOTIFY ratingChanged)
119
120public:
123 explicit MAVLinkLogManager(Vehicle *vehicle, QObject *parent = nullptr);
124
127
128 Q_INVOKABLE void cancelUpload();
129 Q_INVOKABLE void deleteLog();
130 Q_INVOKABLE void startLogging();
131 Q_INVOKABLE void stopLogging();
132 Q_INVOKABLE void uploadLog();
133
134 QString emailAddress() const { return _emailAddress; }
135 QString description() const { return _description; }
136 QString uploadURL() const { return _uploadURL; }
137 QString feedback() const { return _feedback; }
138 QString videoURL() const { return _videoURL; }
139 bool enableAutoUpload() const { return _enableAutoUpload; }
140 bool enableAutoStart() const { return _enableAutoStart; }
141 bool uploading() const { return (_currentLogfile != nullptr); }
142 bool logRunning() const { return _logRunning; }
143 bool canStartLog() const { return !_loggingDenied; }
144 bool deleteAfterUpload() const { return _deleteAfterUpload; }
145 bool publicLog() const { return _publicLog; }
146 int windSpeed() const { return _windSpeed; }
147 QString rating() const { return _rating; }
148 QString logExtension() const { return _ulogExtension; }
149
150 QmlObjectListModel *logFiles() { return _logFiles; }
151
152 void setDeleteAfterUpload(bool enable);
153 void setDescription(const QString &description);
154 void setEmailAddress(const QString &email);
155 void setEnableAutoStart(bool enable);
156 void setEnableAutoUpload(bool enable);
157 void setFeedback(const QString &feedback);
158 void setPublicLog(bool publicLog);
159 void setRating(const QString &rate);
160 void setUploadURL(const QString &url);
161 void setVideoURL(const QString &url);
162 void setWindSpeed(int speed);
163
164signals:
172 void failed();
178 void readyRead(const QByteArray &data);
180 void succeed();
185
186private slots:
187 void _uploadFinished();
188 void _dataAvailable();
189 void _uploadProgress(qint64 bytesSent, qint64 bytesTotal);
190 void _mavlinkLogData(Vehicle *vehicle, uint8_t target_system, uint8_t target_component, uint16_t sequence, uint8_t first_message, const QByteArray &data, bool acked);
191 void _armedChanged(bool armed);
192 void _mavCommandResult(int vehicleId, int component, int command, int result, int failureCode);
193
194private:
195 bool _sendLog(const QString &logFile);
196 bool _processUploadResponse(int http_code, const QByteArray &data);
197 bool _createNewLog();
198 int _getFirstSelected() const;
199 void _insertNewLog(MAVLinkLogFiles *newLog);
200 void _deleteLog(MAVLinkLogFiles *log);
201 void _discardLog();
202 QString _makeFilename(const QString &baseName) const;
203
204 static QHttpPart _createFormPart(QStringView name, QStringView value);
205
206 Vehicle *_vehicle = nullptr;
207 QNetworkAccessManager *_networkManager = nullptr;
208 QmlObjectListModel *_logFiles = nullptr;
209 QString _ulogExtension;
210 QString _logPath;
211
212 bool _deleteAfterUpload = false;
213 bool _enableAutoStart = false;
214 bool _enableAutoUpload = true;
215 bool _loggingDisabled = false;
216 bool _loggingDenied = false;
217 bool _logRunning = false;
218 bool _publicLog = false;
219 int _windSpeed = -1;
220 MAVLinkLogFiles *_currentLogfile = nullptr;
221 MAVLinkLogProcessor *_logProcessor = nullptr;
222 QString _description;
223 QString _emailAddress;
224 QString _feedback;
225 QString _rating;
226 QString _uploadURL;
227 QString _videoURL;
228
229 static constexpr const char *kMAVLinkLogGroup = "MAVLinkLogGroup";
230 static constexpr const char *kEmailAddressKey = "Email";
231 static constexpr const char *kDescriptionsKey = "Description";
232 static constexpr const char *kDefaultDescr = "QGroundControl Session";
233 static constexpr const char *kPx4URLKey = "LogURL";
234 static constexpr const char *kDefaultPx4URL = "https://logs.px4.io/upload";
235 static constexpr const char *kEnableAutoUploadKey = "EnableAutoUpload";
236 static constexpr const char *kEnableAutoStartKey = "EnableAutoStart";
237 static constexpr const char *kEnableDeletetKey = "EnableDelete";
238 static constexpr const char *kVideoURLKey = "VideoURL";
239 static constexpr const char *kWindSpeedKey = "WindSpeed";
240 static constexpr const char *kRateKey = "RateKey";
241 static constexpr const char *kPublicLogKey = "PublicLog";
242 static constexpr const char *kFeedback = "feedback";
243 static constexpr const char *kVideoURL = "videoUrl";
244};
void setSize(quint32 size)
void uploadingChanged()
void setUploading(bool uploading)
void writingChanged()
bool writing() const
void setSelected(bool selected)
void selectedChanged()
bool selected() const
void setProgress(qreal progress)
bool uploading() const
qreal progress() const
void progressChanged()
bool uploaded() const
void setWriting(bool writing)
quint32 size() const
QString name() const
void uploadedChanged()
void setUploaded(bool uploaded)
QString feedback() const
QString uploadURL() const
void logRunningChanged()
void setDeleteAfterUpload(bool enable)
QString rating() const
Q_INVOKABLE void stopLogging()
void enableAutoUploadChanged()
Q_INVOKABLE void uploadLog()
void canStartLogChanged()
bool enableAutoUpload() const
void selectedCountChanged()
void setEmailAddress(const QString &email)
void setDescription(const QString &description)
void setPublicLog(bool publicLog)
bool deleteAfterUpload() const
Q_INVOKABLE void deleteLog()
QString videoURL() const
void setEnableAutoUpload(bool enable)
void setWindSpeed(int speed)
bool enableAutoStart() const
QmlObjectListModel * logFiles()
QString emailAddress() const
void readyRead(const QByteArray &data)
QString description() const
void setRating(const QString &rate)
void setVideoURL(const QString &url)
~MAVLinkLogManager()
Destructor for the MAVLinkLogManager class.
void emailAddressChanged()
void descriptionChanged()
void deleteAfterUploadChanged()
Q_INVOKABLE void cancelUpload()
QString logExtension() const
void enableAutoStartChanged()
void setFeedback(const QString &feedback)
Q_INVOKABLE void startLogging()
void setEnableAutoStart(bool enable)
void setUploadURL(const QString &url)
bool create(MAVLinkLogManager *manager, QStringView path, uint8_t id)
QString fileName() const
bool processStreamData(uint16_t _sequence, uint8_t first_message, const QByteArray &in)
MAVLinkLogFiles * record()