QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
RequestMetaDataTypeStateMachine.h
Go to the documentation of this file.
1#pragma once
2
3#include "QGCStateMachine.h"
4#include "MAVLinkLib.h"
5
6#include <QtCore/QElapsedTimer>
7#include <QtCore/QLoggingCategory>
8
9Q_DECLARE_LOGGING_CATEGORY(RequestMetaDataTypeStateMachineLog)
10
11class Vehicle;
13class CompInfo;
17class QGCState;
18
20{
21 Q_OBJECT
22
23public:
24 explicit RequestMetaDataTypeStateMachine(ComponentInformationManager* compMgr, QObject* parent = nullptr);
26
28 QString typeToString() const;
29 CompInfo* compInfo() const { return _compInfo; }
30 ComponentInformationManager* compMgr() const { return _compMgr; }
31
32signals:
34
35private:
36 void _createStates();
37 void _wireTransitions();
38 void _wireTimeoutHandling();
39
40 // State entry/action functions
41 void _requestCompInfo();
42 void _requestCompInfoDeprecated();
43 void _requestMetaDataJson();
44 void _requestMetaDataJsonFallback();
45 void _requestTranslationJson();
46 void _requestTranslate();
47 void _completeRequest();
48
49 // Skip predicates
50 bool _shouldSkipCompInfoRequest() const;
51 bool _shouldSkipDeprecatedRequest() const;
52 bool _shouldSkipFallback() const;
53 bool _shouldSkipTranslation() const;
54
55 // Download helpers
56 void _requestFile(const QString& cacheFileTag, bool crcValid, const QString& uri, QString& outputFileName, bool trackMetadataSource);
57 QString _downloadCompleteJsonWorker(const QString& jsonFileName);
58 static bool _uriIsMAVLinkFTP(const QString& uri);
59
60 enum class MetadataSource {
61 None,
62 Cache,
63 FTP,
64 HTTP,
65 };
66 static const char* _metadataSourceToString(MetadataSource source);
67
68 // Message result handlers
69 void _handleCompMetadataResult(MAV_RESULT result, const mavlink_message_t& message);
70 void _handleCompInfoResult(MAV_RESULT result, Vehicle::RequestMessageResultHandlerFailureCode_t failureCode, const mavlink_message_t& message);
71
72private slots:
73 void _ftpDownloadComplete(const QString& file, const QString& errorMsg);
74 void _ftpDownloadProgress(float progress);
75 void _httpDownloadComplete(bool success, const QString& localFile, const QString& errorMsg, bool fromCache);
76 void _downloadAndTranslationComplete(QString translatedJsonTempFile, QString errorMsg);
77
78private:
79 ComponentInformationManager* _compMgr = nullptr;
80 CompInfo* _compInfo = nullptr;
81
82 // Download state
83 QString _jsonMetadataFileName;
84 QString _jsonMetadataTranslatedFileName;
85 bool _jsonMetadataCrcValid = false;
86 QString _jsonTranslationFileName;
87
88 QString* _currentFileName = nullptr;
89 QString _currentCacheFileTag;
90 bool _currentFileValidCrc = false;
91
92 QElapsedTimer _downloadStartTime;
93 MetadataSource _metadataSource = MetadataSource::None;
94 QString _metadataUri;
95 bool _metadataIsFallback = false;
96
97 // State pointers
98 AsyncFunctionState* _stateRequestCompInfo = nullptr;
99 SkippableAsyncState* _stateRequestDeprecated = nullptr;
100 AsyncFunctionState* _stateRequestMetaDataJson = nullptr;
101 SkippableAsyncState* _stateRequestMetaDataJsonFallback = nullptr;
102 AsyncFunctionState* _stateRequestTranslationJson = nullptr;
103 SkippableAsyncState* _stateRequestTranslate = nullptr;
104 QGCState* _stateComplete = nullptr;
105 QGCFinalState* _stateFinal = nullptr;
106
107 // Track active download state for completion
108 AsyncFunctionState* _activeAsyncState = nullptr;
109 SkippableAsyncState* _activeSkippableState = nullptr;
110
111 // Timeout values (ms)
112 static constexpr int _timeoutCompInfoRequest = 5000;
113 static constexpr int _timeoutMetaDataDownload = 30000;
114 static constexpr int _timeoutTranslation = 15000;
115};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
struct __mavlink_message mavlink_message_t
Base class for all CompInfo types.
Definition CompInfo.h:14
Final state for a QGCStateMachine with logging support.
QGroundControl specific state machine with enhanced error handling.
ComponentInformationManager * compMgr() const
RequestMessageResultHandlerFailureCode_t
Definition Vehicle.h:668