QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
OnboardLogFtpController.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QElapsedTimer>
4#include <QtCore/QLoggingCategory>
5#include <QtCore/QObject>
6#include <QtCore/QQueue>
7#include <QtQmlIntegration/QtQmlIntegration>
8
9Q_DECLARE_LOGGING_CATEGORY(OnboardLogFtpControllerLog)
10
13class Vehicle;
14
15class OnboardLogFtpController : public QObject
16{
17 Q_OBJECT
18 QML_ELEMENT
19 QML_SINGLETON
20 Q_MOC_INCLUDE("Vehicle.h")
21 Q_MOC_INCLUDE("QmlObjectListModel.h")
22 Q_PROPERTY(QmlObjectListModel *model READ _getModel CONSTANT)
23 Q_PROPERTY(bool requestingList READ _getRequestingList NOTIFY requestingListChanged)
24 Q_PROPERTY(bool downloadingLogs READ _getDownloadingLogs NOTIFY downloadingLogsChanged)
25
26public:
27 explicit OnboardLogFtpController(QObject *parent = nullptr);
29
30 Q_INVOKABLE void refresh();
31 Q_INVOKABLE void download(const QString &path = QString());
32 Q_INVOKABLE void cancel();
33
34signals:
38
39private slots:
40 void _setActiveVehicle(Vehicle *vehicle);
41 void _listDirComplete(const QStringList &dirList, const QString &errorMsg);
42 void _downloadComplete(const QString &file, const QString &errorMsg);
43 void _downloadProgress(float value);
44
45private:
46 enum ListState { Idle, ListingRoot, ListingSubdir };
47
48 QmlObjectListModel *_getModel() const { return _logEntriesModel; }
49 bool _getRequestingList() const { return _requestingLogEntries; }
50 bool _getDownloadingLogs() const { return _downloadingLogs; }
51
52 void _startListing();
53 void _listRoot();
54 void _listNextSubdir();
55 uint _processFileEntries(const QStringList &dirList, const QString &subdir);
56 void _downloadEntry(QGCOnboardLogFtpEntry *entry);
57 void _downloadToDirectory(const QString &dir);
58 void _resetSelection(bool canceled = false);
59 void _setDownloading(bool active);
60 void _setListing(bool active);
61 void _finishListing();
62
63 QmlObjectListModel *_logEntriesModel = nullptr;
64 Vehicle *_vehicle = nullptr;
65
66 bool _requestingLogEntries = false;
67 bool _downloadingLogs = false;
68
69 ListState _listState = Idle;
70 QString _logRoot;
71 bool _triedFallbackRoot = false;
72 QStringList _dirsToList;
73 uint _logIdCounter = 0;
74
75 QQueue<QGCOnboardLogFtpEntry*> _downloadQueue;
76 QGCOnboardLogFtpEntry *_currentDownloadEntry = nullptr;
77 QString _downloadPath;
78 QElapsedTimer _downloadElapsed;
79 size_t _downloadBytesAtLastUpdate = 0;
80 qreal _downloadRateAvg = 0.;
81
82 static constexpr uint32_t kGUIRateMs = 17;
83};
Q_INVOKABLE void download(const QString &path=QString())