QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
LogDownloadController.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QLoggingCategory>
4#include <QtCore/QObject>
5#include <QtQmlIntegration/QtQmlIntegration>
6
7Q_DECLARE_LOGGING_CATEGORY(LogDownloadControllerLog)
8
9struct LogDownloadData;
10class QGCLogEntry;
12class QTimer;
13class QThread;
14class Vehicle;
15class LogDownloadTest;
16
17class LogDownloadController : public QObject
18{
19 Q_OBJECT
20 QML_ELEMENT
21 QML_SINGLETON
22 Q_MOC_INCLUDE("Vehicle.h")
23 Q_MOC_INCLUDE("QmlObjectListModel.h")
24 Q_PROPERTY(QmlObjectListModel *model READ _getModel CONSTANT)
25 Q_PROPERTY(bool requestingList READ _getRequestingList NOTIFY requestingListChanged)
26 Q_PROPERTY(bool downloadingLogs READ _getDownloadingLogs NOTIFY downloadingLogsChanged)
27 Q_PROPERTY(bool compressLogs READ compressLogs WRITE setCompressLogs NOTIFY compressLogsChanged)
28 Q_PROPERTY(bool compressing READ compressing NOTIFY compressingChanged)
30
31 friend class LogDownloadTest;
32
33public:
34 explicit LogDownloadController(QObject *parent = nullptr);
36
37 Q_INVOKABLE void refresh();
38 Q_INVOKABLE void download(const QString &path = QString());
39 Q_INVOKABLE void eraseAll();
40 Q_INVOKABLE void cancel();
41
42 bool compressLogs() const { return _compressLogs; }
43 void setCompressLogs(bool compress);
44 bool compressing() const { return _compressing; }
45 float compressionProgress() const { return _compressionProgress; }
46
48 Q_INVOKABLE bool compressLogFile(const QString &logPath);
49
51 Q_INVOKABLE void cancelCompression();
52
53signals:
60 void compressionComplete(const QString &outputPath, const QString &error);
61
62private slots:
63 void _setActiveVehicle(Vehicle *vehicle);
64 void _logEntry(uint32_t time_utc, uint32_t size, uint16_t id, uint16_t num_logs, uint16_t last_log_num);
65 void _logData(uint32_t ofs, uint16_t id, uint8_t count, const uint8_t *data);
66 void _processDownload();
67 void _handleCompressionProgress(qreal progress);
68 void _handleCompressionFinished(bool success);
69
70private:
71 QmlObjectListModel *_getModel() const { return _logEntriesModel; }
72 bool _getRequestingList() const { return _requestingLogEntries; }
73 bool _getDownloadingLogs() const { return _downloadingLogs; }
74
75 bool _chunkComplete() const;
76 bool _entriesComplete() const;
77 bool _logComplete() const;
78 bool _prepareLogDownload();
79 void _downloadToDirectory(const QString &dir);
80 void _findMissingData();
81 void _findMissingEntries();
82 void _receivedAllData();
83 void _receivedAllEntries();
84 void _requestLogData(uint16_t id, uint32_t offset, uint32_t count, int retryCount = 0);
85 void _requestLogList(uint32_t start, uint32_t end);
86 void _requestLogEnd();
87 void _resetSelection(bool canceled = false);
88 void _setDownloading(bool active);
89 void _setListing(bool active);
90 void _updateDataRate();
91
92 QGCLogEntry *_getNextSelected() const;
93
94 QTimer *_timer = nullptr;
95 QmlObjectListModel *_logEntriesModel = nullptr;
96
97 bool _downloadingLogs = false;
98 bool _requestingLogEntries = false;
99 int _apmOffset = 0;
100 int _retries = 0;
101 std::unique_ptr<LogDownloadData> _downloadData;
102 QString _downloadPath;
103 Vehicle *_vehicle = nullptr;
104 bool _compressLogs = false;
105 bool _compressing = false;
106 float _compressionProgress = 0.0F;
107
108 static constexpr uint32_t kTimeOutMs = 500;
109 static constexpr uint32_t kGUIRateMs = 500;
110 static constexpr uint32_t kRequestLogListTimeoutMs = 5000;
111};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
Error error
void download(const QString &path=QString())
void cancelCompression()
Cancel compression.
bool compressLogFile(const QString &logPath)
Compress a single log file.
void compressionProgressChanged()
void compressionComplete(const QString &outputPath, const QString &error)
void setCompressLogs(bool compress)