QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
VehicleGPSFactGroup.h
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4
5#include <QtCore/QPointer>
6#include <QtPositioning/QGeoPositionInfo>
7#include <QtQmlIntegration/QtQmlIntegration>
8
9#include "FactGroup.h"
10#include "ScheduledTask.h"
11
13
17{
18 Q_OBJECT
19 QML_ELEMENT
20 QML_UNCREATABLE("")
21 // Both enums have an Unknown value, so QML names them with their enum, such as AuthenticationState.Ok.
22 Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
23 Q_PROPERTY(Fact* lat READ lat CONSTANT)
24 Q_PROPERTY(Fact* lon READ lon CONSTANT)
25 Q_PROPERTY(Fact* mgrs READ mgrs CONSTANT)
26 Q_PROPERTY(Fact* hdop READ hdop CONSTANT)
27 Q_PROPERTY(Fact* vdop READ vdop CONSTANT)
28 Q_PROPERTY(Fact* horizontalAccuracy READ horizontalAccuracy CONSTANT)
29 Q_PROPERTY(Fact* verticalAccuracy READ verticalAccuracy CONSTANT)
30 Q_PROPERTY(Fact* courseOverGround READ courseOverGround CONSTANT)
31 Q_PROPERTY(Fact* yaw READ yaw CONSTANT)
32 Q_PROPERTY(Fact* count READ count CONSTANT)
33 Q_PROPERTY(Fact* lock READ lock CONSTANT)
34 Q_PROPERTY(Fact* systemErrors READ systemErrors CONSTANT)
35 Q_PROPERTY(Fact* spoofingState READ spoofingState CONSTANT)
36 Q_PROPERTY(Fact* jammingState READ jammingState CONSTANT)
37 Q_PROPERTY(Fact* authenticationState READ authenticationState CONSTANT)
38 Q_PROPERTY(Fact* correctionsQuality READ correctionsQuality CONSTANT)
39 Q_PROPERTY(Fact* systemQuality READ systemQuality CONSTANT)
40 Q_PROPERTY(Fact* gnssSignalQuality READ gnssSignalQuality CONSTANT)
41 Q_PROPERTY(Fact* postProcessingQuality READ postProcessingQuality CONSTANT)
42 Q_PROPERTY(Fact* rtkBaseline READ rtkBaseline CONSTANT)
43 Q_PROPERTY(Fact* rtkRate READ rtkRate CONSTANT)
44 Q_PROPERTY(Fact* rtkSatellites READ rtkSatellites CONSTANT)
45 Q_PROPERTY(QString systemErrorText READ systemErrorText NOTIFY systemErrorTextChanged)
46 Q_PROPERTY(bool jammingReported READ jammingReported NOTIFY resilienceChanged)
47 Q_PROPERTY(bool spoofingReported READ spoofingReported NOTIFY resilienceChanged)
50 Q_PROPERTY(int interferenceState READ interferenceState NOTIFY resilienceChanged)
53
54public:
55 enum class ReceiverIndex
56 {
57 Primary,
59 };
60
63 {
64 Unknown = 0,
65 NotDetected = 1,
66 Mitigated = 2,
67 Detected = 3,
68 };
69 Q_ENUM(InterferenceState)
70
71
73 {
74 Unknown = 0,
75 Initializing = 1,
76 Error = 2,
77 Ok = 3,
78 Disabled = 4,
79 };
81
82
83 static constexpr int NOT_REPORTED = 255;
84
85 explicit VehicleGPSFactGroup(QObject* parent = nullptr, RuntimeScheduler* scheduler = nullptr,
87
88 Fact* lat() { return &_latFact; }
89
90 Fact* lon() { return &_lonFact; }
91
92 Fact* mgrs() { return &_mgrsFact; }
93
94 Fact* hdop() { return &_hdopFact; }
95
96 Fact* vdop() { return &_vdopFact; }
97
98 Fact* horizontalAccuracy() { return &_horizontalAccuracyFact; }
99
100 Fact* verticalAccuracy() { return &_verticalAccuracyFact; }
101
102 Fact* courseOverGround() { return &_courseOverGroundFact; }
103
104 Fact* yaw() { return &_yawFact; }
105
106 Fact* count() { return &_countFact; }
107
108 Fact* lock() { return &_lockFact; }
109
110 Fact* systemErrors() { return &_systemErrorsFact; }
111
112 Fact* spoofingState() { return &_spoofingStateFact; }
113
114 Fact* jammingState() { return &_jammingStateFact; }
115
116 Fact* authenticationState() { return &_authenticationStateFact; }
117
118 Fact* correctionsQuality() { return &_correctionsQualityFact; }
119
120 Fact* systemQuality() { return &_systemQualityFact; }
121
122 Fact* gnssSignalQuality() { return &_gnssSignalQualityFact; }
123
124 Fact* postProcessingQuality() { return &_postProcessingQualityFact; }
125
127 Fact* rtkBaseline() { return &_rtkBaselineFact; }
128
129 Fact* rtkRate() { return &_rtkRateFact; }
130
131 Fact* rtkSatellites() { return &_rtkSatellitesFact; }
132
134 QString systemErrorText() const;
135
136 bool jammingReported() const;
137 bool spoofingReported() const;
138 bool authenticationReported() const;
139 int interferenceState() const;
140 int authenticationSeverity() const;
141
143 [[nodiscard]] static constexpr bool reported(int state) { return state > 0 && state < NOT_REPORTED; }
144
145 static constexpr std::chrono::seconds RTK_STATUS_TIMEOUT{5};
147 static constexpr std::chrono::seconds GNSS_INTEGRITY_TIMEOUT{5};
148
149 // Overrides from FactGroup
150 void handleMessage(Vehicle* vehicle, const mavlink_message_t& message) override;
151
152signals:
155 void positionReported(const QGeoPositionInfo& position, int fixType);
158
159private:
160 void _handleGpsRaw(const mavlink_message_t& message);
161 void _handleHighLatency(const mavlink_message_t& message);
162 void _handleHighLatency2(const mavlink_message_t& message);
163 void _handleGnssIntegrity(const mavlink_message_t& message);
164 void _handleGpsRtk(const mavlink_message_t& message);
165 void _clearIntegrity();
166 void _clearRtkStatus();
167 void _updateFix(int fixType, int satellitesVisible, double hdopValue, double vdopValue, double courseValue,
168 double yawValue);
170 void _reportPosition(QGeoPositionInfo position, int fixType);
171
172 Fact _latFact = Fact(0, QStringLiteral("lat"), FactMetaData::valueTypeDouble);
173 Fact _lonFact = Fact(0, QStringLiteral("lon"), FactMetaData::valueTypeDouble);
174 Fact _mgrsFact = Fact(0, QStringLiteral("mgrs"), FactMetaData::valueTypeString);
175 Fact _hdopFact = Fact(0, QStringLiteral("hdop"), FactMetaData::valueTypeDouble);
176 Fact _vdopFact = Fact(0, QStringLiteral("vdop"), FactMetaData::valueTypeDouble);
177 Fact _horizontalAccuracyFact = Fact(0, QStringLiteral("horizontalAccuracy"), FactMetaData::valueTypeDouble);
178 Fact _verticalAccuracyFact = Fact(0, QStringLiteral("verticalAccuracy"), FactMetaData::valueTypeDouble);
179 Fact _courseOverGroundFact = Fact(0, QStringLiteral("courseOverGround"), FactMetaData::valueTypeDouble);
180 Fact _yawFact = Fact(0, QStringLiteral("yaw"), FactMetaData::valueTypeDouble);
181 Fact _countFact = Fact(0, QStringLiteral("count"), FactMetaData::valueTypeInt32);
182 Fact _lockFact = Fact(0, QStringLiteral("lock"), FactMetaData::valueTypeInt32);
183 Fact _systemErrorsFact = Fact(0, QStringLiteral("systemErrors"), FactMetaData::valueTypeUint32);
184 Fact _spoofingStateFact = Fact(0, QStringLiteral("spoofingState"), FactMetaData::valueTypeUint8);
185 Fact _jammingStateFact = Fact(0, QStringLiteral("jammingState"), FactMetaData::valueTypeUint8);
186 Fact _authenticationStateFact = Fact(0, QStringLiteral("authenticationState"), FactMetaData::valueTypeUint8);
187 Fact _correctionsQualityFact = Fact(0, QStringLiteral("correctionsQuality"), FactMetaData::valueTypeUint8);
188 Fact _systemQualityFact = Fact(0, QStringLiteral("systemQuality"), FactMetaData::valueTypeUint8);
189 Fact _gnssSignalQualityFact = Fact(0, QStringLiteral("gnssSignalQuality"), FactMetaData::valueTypeUint8);
190 Fact _postProcessingQualityFact = Fact(0, QStringLiteral("postProcessingQuality"), FactMetaData::valueTypeUint8);
191 Fact _rtkBaselineFact = Fact(0, QStringLiteral("rtkBaseline"), FactMetaData::valueTypeDouble);
192 Fact _rtkRateFact = Fact(0, QStringLiteral("rtkRate"), FactMetaData::valueTypeDouble);
193 Fact _rtkSatellitesFact = Fact(0, QStringLiteral("rtkSatellites"), FactMetaData::valueTypeInt32);
194
195 const ReceiverIndex _receiver;
196 QPointer<RuntimeScheduler> _scheduler;
197 ScheduledTask _rtkStatusExpiry;
198 ScheduledTask _integrityExpiry;
199};
struct __mavlink_message mavlink_message_t
Used to group Facts together into an object hierarachy.
Definition FactGroup.h:16
A Fact is used to hold a single value within the system.
Definition Fact.h:15
InterferenceState
MAVLink GPS_JAMMING_STATE and GPS_SPOOFING_STATE, which share their values.
bool authenticationReported() const
Fact * rtkBaseline()
GPS_RTK (primary) or GPS2_RTK (secondary); cleared when the vehicle stops reporting them.
static constexpr std::chrono::seconds GNSS_INTEGRITY_TIMEOUT
The GNSS_INTEGRITY facts return to unreported when the vehicle stops sending it for this long.
void handleMessage(Vehicle *vehicle, const mavlink_message_t &message) override
Allows a FactGroup to parse incoming messages and fill in values.
static constexpr int NOT_REPORTED
The value of a state the vehicle has not reported.
QString systemErrorText() const
The receiver's reported system errors, comma separated; empty when there are none.
ReceiverIndex
The worse of the reported spoofing and jamming states, or 0 when neither is reported.
static constexpr bool reported(int state)
A state other than Unknown or NOT_REPORTED.
AuthenticationState
MAVLink GPS_AUTHENTICATION_STATE.
void systemErrorTextChanged()
void positionReported(const QGeoPositionInfo &position, int fixType)
static constexpr std::chrono::seconds RTK_STATUS_TIMEOUT