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