diff --git a/qgcimages.qrc b/qgcimages.qrc
index 5c995eac1753..909cecce09a0 100644
--- a/qgcimages.qrc
+++ b/qgcimages.qrc
@@ -105,6 +105,8 @@
src/UI/toolbar/Images/Gps.svg
src/UI/toolbar/Images/Hamburger.svg
src/UI/toolbar/Images/HamburgerThin.svg
+ src/UI/toolbar/Images/GpsAuthentication.svg
+ src/UI/toolbar/Images/GpsInterference.svg
src/FlightMap/Images/Help.svg
src/FlightMap/Images/HelpBlack.svg
src/AutoPilotPlugins/PX4/Images/HITL.svg
diff --git a/src/Comms/MockLink/MockLink.cc b/src/Comms/MockLink/MockLink.cc
index ca095b548261..1deeffda4a0e 100644
--- a/src/Comms/MockLink/MockLink.cc
+++ b/src/Comms/MockLink/MockLink.cc
@@ -1357,23 +1357,22 @@ void MockLink::_sendGpsRawInt()
_vehicleComponentId,
mavlinkChannel(),
&msg,
- timeTick++, // time since boot
+ timeTick++, // time since boot
GPS_FIX_TYPE_3D_FIX,
- static_cast(_vehicleLatitude * 1E7),
- static_cast(_vehicleLongitude * 1E7),
- static_cast(_vehicleAltitudeAMSL * 1000),
- 3 * 100, // hdop
- 3 * 100, // vdop
- UINT16_MAX, // velocity not known
- UINT16_MAX, // course over ground not known
- 8, // satellites visible
+ (int32_t)(_vehicleLatitude * 1E7),
+ (int32_t)(_vehicleLongitude * 1E7),
+ (int32_t)(_vehicleAltitudeAMSL * 1000),
+ UINT16_MAX, UINT16_MAX, // HDOP/VDOP not known
+ UINT16_MAX, // velocity not known
+ UINT16_MAX, // course over ground not known
+ 8, // satellites visible
//-- Extension
- 0, // Altitude (above WGS84, EGM96 ellipsoid), in meters * 1000 (positive for up).
- 0, // Position uncertainty in meters * 1000 (positive for up).
- 0, // Altitude uncertainty in meters * 1000 (positive for up).
- 0, // Speed uncertainty in meters * 1000 (positive for up).
- 0, // Heading / track uncertainty in degrees * 1e5.
- 65535 // Yaw not provided
+ 0, // Altitude (above WGS84, EGM96 ellipsoid), in meters * 1000 (positive for up).
+ 0, // Position uncertainty in meters * 1000 (positive for up).
+ 0, // Altitude uncertainty in meters * 1000 (positive for up).
+ 0, // Speed uncertainty in meters * 1000 (positive for up).
+ 0, // Heading / track uncertainty in degrees * 1e5.
+ 65535 // Yaw not provided
);
respondWithMavlinkMessage(msg);
}
diff --git a/src/FirmwarePlugin/FirmwarePlugin.cc b/src/FirmwarePlugin/FirmwarePlugin.cc
index 3c308db319c4..3b76119f689f 100644
--- a/src/FirmwarePlugin/FirmwarePlugin.cc
+++ b/src/FirmwarePlugin/FirmwarePlugin.cc
@@ -205,6 +205,8 @@ const QVariantList &FirmwarePlugin::toolIndicators(const Vehicle*)
_toolIndicatorList = QVariantList({
QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Controls/FlightModeIndicator.qml")),
QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Toolbar/VehicleGPSIndicator.qml")),
+ QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Toolbar/GPSInterferenceIndicator.qml")),
+ QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Toolbar/GPSAuthenticationIndicator.qml")),
QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Toolbar/TelemetryRSSIIndicator.qml")),
QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Toolbar/RCRSSIIndicator.qml")),
QVariant::fromValue(QUrl::fromUserInput("qrc:/qml/QGroundControl/Controls/BatteryIndicator.qml")),
diff --git a/src/QmlControls/GPSIndicatorPage.qml b/src/QmlControls/GPSIndicatorPage.qml
index 3849c97df4f5..01ced7b5563f 100644
--- a/src/QmlControls/GPSIndicatorPage.qml
+++ b/src/QmlControls/GPSIndicatorPage.qml
@@ -64,6 +64,27 @@ ToolIndicatorPage {
}
+ function errorText() {
+ if(!_activeVehicle){
+ return qsTr("Disconnected")
+ } else if (_activeVehicle.gps.systemErrors.value === 1) {
+ return qsTr("Incoming correction")
+ } else if (_activeVehicle.gps.systemErrors.value === 2) {
+ return qsTr("Configuration")
+ } else if (_activeVehicle.gps.systemErrors.value === 4) {
+ return qsTr("Software")
+ } else if (_activeVehicle.gps.systemErrors.value === 8) {
+ return qsTr("Antenna")
+ } else if (_activeVehicle.gps.systemErrors.value === 16) {
+ return qsTr("Event congestion")
+ } else if (_activeVehicle.gps.systemErrors.value === 32) {
+ return qsTr("CPU overload")
+ } else if (_activeVehicle.gps.systemErrors.value === 64) {
+ return qsTr("Output congestion")
+ }
+ return qsTr("Multiple errors")
+ }
+
contentComponent: Component {
ColumnLayout {
spacing: ScreenTools.defaultFontPixelHeight / 2
@@ -96,6 +117,12 @@ ToolIndicatorPage {
label: qsTr("Course Over Ground")
labelText: activeVehicle ? activeVehicle.gps.courseOverGround.valueString : valueNA
}
+
+ LabelledLabel {
+ label: qsTr("GPS Error")
+ labelText: errorText()
+ visible: _activeVehicle && _activeVehicle.gps.systemErrors.value > 0
+ }
}
SettingsGroupLayout {
diff --git a/src/QmlControls/QGCPalette.cc b/src/QmlControls/QGCPalette.cc
index 9adda85a7f98..5b2228f629c5 100644
--- a/src/QmlControls/QGCPalette.cc
+++ b/src/QmlControls/QGCPalette.cc
@@ -74,6 +74,7 @@ void QGCPalette::_buildMap()
DECLARE_QGC_COLOR(colorRed, "#b52b2b", "#b52b2b", "#f32836", "#f32836")
DECLARE_QGC_COLOR(colorGrey, "#808080", "#808080", "#bfbfbf", "#bfbfbf")
DECLARE_QGC_COLOR(colorBlue, "#1a72ff", "#1a72ff", "#536dff", "#536dff")
+ DECLARE_QGC_COLOR(colorWhite, "#222222", "#222222", "#ffffff", "#ffffff")
DECLARE_QGC_COLOR(alertBackground, "#eecc44", "#eecc44", "#eecc44", "#eecc44")
DECLARE_QGC_COLOR(alertBorder, "#808080", "#808080", "#808080", "#808080")
DECLARE_QGC_COLOR(alertText, "#000000", "#000000", "#000000", "#000000")
diff --git a/src/QmlControls/QGCPalette.h b/src/QmlControls/QGCPalette.h
index 465a43bbf3ea..53950468655b 100644
--- a/src/QmlControls/QGCPalette.h
+++ b/src/QmlControls/QGCPalette.h
@@ -144,6 +144,7 @@ class QGCPalette : public QObject
DEFINE_QGC_COLOR(colorRed, setColorRed)
DEFINE_QGC_COLOR(colorGrey, setColorGrey)
DEFINE_QGC_COLOR(colorBlue, setColorBlue)
+ DEFINE_QGC_COLOR(colorWhite, setColorWhite)
DEFINE_QGC_COLOR(alertBackground, setAlertBackground)
DEFINE_QGC_COLOR(alertBorder, setAlertBorder)
DEFINE_QGC_COLOR(alertText, setAlertText)
diff --git a/src/UI/toolbar/CMakeLists.txt b/src/UI/toolbar/CMakeLists.txt
index 3397c482d344..7dbd40eadd19 100644
--- a/src/UI/toolbar/CMakeLists.txt
+++ b/src/UI/toolbar/CMakeLists.txt
@@ -14,6 +14,8 @@ qt_add_qml_module(ToolbarModule
EscIndicatorPage.qml
GCSControlIndicator.qml
GimbalIndicator.qml
+ GPSAuthenticationIndicator.qml
+ GPSInterferenceIndicator.qml
JoystickIndicator.qml
LinkIndicator.qml
ModeIndicator.qml
diff --git a/src/UI/toolbar/GPSAuthenticationIndicator.qml b/src/UI/toolbar/GPSAuthenticationIndicator.qml
new file mode 100644
index 000000000000..7408619ee44b
--- /dev/null
+++ b/src/UI/toolbar/GPSAuthenticationIndicator.qml
@@ -0,0 +1,84 @@
+/****************************************************************************
+ *
+ * (c) 2009-2024 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+import QtQuick
+import QtQuick.Layouts
+
+import QGroundControl
+import QGroundControl.Controls
+import QGroundControl.ScreenTools
+import QGroundControl.Palette
+
+//-------------------------------------------------------------------------
+//-- GPS Authentication Indicator
+Item {
+ id: control
+ width: height
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
+
+ property bool showIndicator: _activeVehicle && _activeVehicle.gps.authenticationState.value > 0
+
+ function authenticationIconColor() {
+ if(!_activeVehicle){
+ return qgcPal.colorGrey // Not connected
+ }
+
+ switch (_activeVehicle.gps.authenticationState.value) {
+ case 1: // Initializing
+ return qgcPal.colorYellow;
+ case 2: // Error
+ return qgcPal.colorRed;
+ case 3: // OK
+ return qgcPal.colorGreen;
+ case 0: // Unknown
+ case 4: // Disabled
+ default:
+ return qgcPal.colorGrey;
+ }
+ }
+
+ QGCColoredImage {
+ id: gpsAuthenticationIcon
+ width: height
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ source: "/qmlimages/GpsAuthentication.svg"
+ fillMode: Image.PreserveAspectFit
+ sourceSize.height: height
+ opacity: 1
+ color: authenticationIconColor()
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: mainWindow.showIndicatorDrawer(authenticationContentComponent, control)
+ }
+
+ Component{
+ id: authenticationContentComponent
+
+ ColumnLayout{
+ spacing: ScreenTools.defaultFontPixelHeight / 2
+
+ SettingsGroupLayout {
+ heading: qsTr("GPS Authentication")
+ contentSpacing: 0
+ showDividers: false
+
+ LabelledLabel {
+ label: qsTr("Status")
+ labelText: _activeVehicle ? (_activeVehicle.gps.authenticationState.valueString || qsTr("n/a")) : qsTr("n/a")
+ }
+ }
+ }
+ }
+}
diff --git a/src/UI/toolbar/GPSInterferenceIndicator.qml b/src/UI/toolbar/GPSInterferenceIndicator.qml
new file mode 100644
index 000000000000..bfa1c9a327d7
--- /dev/null
+++ b/src/UI/toolbar/GPSInterferenceIndicator.qml
@@ -0,0 +1,95 @@
+/****************************************************************************
+ *
+ * (c) 2009-2024 QGROUNDCONTROL PROJECT
+ *
+ * QGroundControl is licensed according to the terms in the file
+ * COPYING.md in the root of the source code directory.
+ *
+ ****************************************************************************/
+
+import QtQuick
+import QtQuick.Layouts
+
+import QGroundControl
+import QGroundControl.Controls
+import QGroundControl.ScreenTools
+import QGroundControl.Palette
+
+//-------------------------------------------------------------------------
+//-- GPS Interference Indicator
+Item {
+ id: control
+ width: height
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle
+
+ property bool showIndicator: _activeVehicle && (_activeVehicle.gps.spoofingState.value > 0 || _activeVehicle.gps.jammingState.value > 0)
+
+ QGCColoredImage {
+ id: gpsSpoofingIcon
+ width: height
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ source: "/qmlimages/GpsInterference.svg"
+ fillMode: Image.PreserveAspectFit
+ sourceSize.height: height
+ opacity: 1
+ color: {
+ if(!_activeVehicle){
+ return qgcPal.colorGrey
+ }
+
+ let maxState = Math.max(_activeVehicle.gps.spoofingState.value, _activeVehicle.gps.jammingState.value);
+
+ switch (maxState) {
+ case 3:
+ return qgcPal.colorRed;
+ case 2:
+ return qgcPal.colorOrange;
+ case 1:
+ return qgcPal.colorWhite;
+ default:
+ return qgcPal.colorGrey;
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: mainWindow.showIndicatorDrawer(gpsSpoofingPopup, control)
+ }
+
+ Component {
+ id: gpsSpoofingPopup
+
+ ToolIndicatorPage {
+ showExpand: expandedComponent ? true : false
+ contentComponent: spoofingContentComponent
+ }
+ }
+
+ Component{
+ id: spoofingContentComponent
+
+ ColumnLayout{
+ spacing: ScreenTools.defaultFontPixelHeight / 2
+
+ SettingsGroupLayout {
+ heading: qsTr("GPS Interference Status")
+ showDividers: true
+
+ LabelledLabel {
+ label: qsTr("GPS Jamming")
+ labelText: _activeVehicle ? (_activeVehicle.gps.jammingState.valueString || qsTr("n/a")) : qsTr("n/a")
+ }
+
+ LabelledLabel {
+ label: qsTr("GPS Spoofing")
+ labelText: _activeVehicle ? (_activeVehicle.gps.spoofingState.valueString || qsTr("n/a")) : qsTr("n/a")
+ }
+ }
+ }
+ }
+}
diff --git a/src/UI/toolbar/Images/GpsAuthentication.svg b/src/UI/toolbar/Images/GpsAuthentication.svg
new file mode 100644
index 000000000000..68e0fd625a02
--- /dev/null
+++ b/src/UI/toolbar/Images/GpsAuthentication.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/src/UI/toolbar/Images/GpsInterference.svg b/src/UI/toolbar/Images/GpsInterference.svg
new file mode 100644
index 000000000000..62a92a6e3c29
--- /dev/null
+++ b/src/UI/toolbar/Images/GpsInterference.svg
@@ -0,0 +1,80 @@
+
+
+
+
diff --git a/src/Vehicle/FactGroups/GPSFact.json b/src/Vehicle/FactGroups/GPSFact.json
index a563f7cb8dd9..df00ecda3574 100644
--- a/src/Vehicle/FactGroups/GPSFact.json
+++ b/src/Vehicle/FactGroups/GPSFact.json
@@ -58,6 +58,55 @@
"name": "count",
"shortDesc": "Sat Count",
"type": "uint32"
+},
+{
+ "name": "systemErrors",
+ "shortDesc": "General System Errors",
+ "type": "uint32"
+},
+{
+ "name": "spoofingState",
+ "shortDesc": "Signal Spoofing State",
+ "type": "uint8",
+ "enumStrings": "Unknown,Ok,Mitigated,Detected",
+ "enumValues": "0,1,2,3",
+ "decimalPlaces": 0
+},
+{
+ "name": "jammingState",
+ "shortDesc": "Signal Jamming State",
+ "type": "uint8",
+ "enumStrings": "Unknown,Ok,Mitigated,Detected",
+ "enumValues": "0,1,2,3",
+ "decimalPlaces": 0
+},
+{
+ "name": "authenticationState",
+ "shortDesc": "Signal Authentication State",
+ "type": "uint8",
+ "enumStrings": "Unknown,Initializing,Error,Ok,Disabled",
+ "enumValues": "0,1,2,3,4",
+ "decimalPlaces": 0
+},
+{
+ "name": "correctionsQuality",
+ "shortDesc": "Corrections Quality",
+ "type": "uint8"
+},
+{
+ "name": "systemQuality",
+ "shortDesc": "System Status Quality",
+ "type": "uint8"
+},
+{
+ "name": "gnssSignalQuality",
+ "shortDesc": "Gnss Signal Quality",
+ "type": "uint8"
+},
+{
+ "name": "postProcessingQuality",
+ "shortDesc": "Post Processing Quality",
+ "type": "uint8"
}
]
}
diff --git a/src/Vehicle/FactGroups/VehicleGPSFactGroup.cc b/src/Vehicle/FactGroups/VehicleGPSFactGroup.cc
index cebadd664218..1db6b9e7e7b5 100644
--- a/src/Vehicle/FactGroups/VehicleGPSFactGroup.cc
+++ b/src/Vehicle/FactGroups/VehicleGPSFactGroup.cc
@@ -10,6 +10,7 @@
#include "VehicleGPSFactGroup.h"
#include "Vehicle.h"
#include "QGCGeo.h"
+#include "development/mavlink_msg_gnss_integrity.h"
#include
@@ -25,6 +26,29 @@ VehicleGPSFactGroup::VehicleGPSFactGroup(QObject *parent)
_addFact(&_yawFact);
_addFact(&_lockFact);
_addFact(&_countFact);
+ _addFact(&_systemErrorsFact);
+ _addFact(&_spoofingStateFact);
+ _addFact(&_jammingStateFact);
+ _addFact(&_authenticationStateFact);
+ _addFact(&_correctionsQualityFact);
+ _addFact(&_systemQualityFact);
+ _addFact(&_gnssSignalQualityFact);
+ _addFact(&_postProcessingQualityFact);
+
+ _spoofingStateFact.metaData()->setEnumInfo(
+ QStringList() << "Disconnected" << "OK" << "Mitigated" << "Ongoing",
+ QVariantList() << 0 << 1 << 2 << 3
+ );
+
+ _jammingStateFact.metaData()->setEnumInfo(
+ QStringList() << "Disconnected" << "OK" << "Mitigated" << "Ongoing",
+ QVariantList() << 0 << 1 << 2 << 3
+ );
+
+ _authenticationStateFact.metaData()->setEnumInfo(
+ QStringList() << "Unknown" << "Initializing..." << "Failed" << "OK" << "Disabled",
+ QVariantList() << 0 << 1 << 2 << 3 << 4
+ );
_latFact.setRawValue(std::numeric_limits::quiet_NaN());
_lonFact.setRawValue(std::numeric_limits::quiet_NaN());
@@ -32,6 +56,13 @@ VehicleGPSFactGroup::VehicleGPSFactGroup(QObject *parent)
_hdopFact.setRawValue(std::numeric_limits::quiet_NaN());
_vdopFact.setRawValue(std::numeric_limits::quiet_NaN());
_courseOverGroundFact.setRawValue(std::numeric_limits::quiet_NaN());
+ _spoofingStateFact.setRawValue(0);
+ _jammingStateFact.setRawValue(0);
+ _authenticationStateFact.setRawValue(255);
+ _correctionsQualityFact.setRawValue(255);
+ _systemQualityFact.setRawValue(255);
+ _gnssSignalQualityFact.setRawValue(255);
+ _postProcessingQualityFact.setRawValue(255);
_yawFact.setRawValue(std::numeric_limits::quiet_NaN());
}
@@ -49,6 +80,9 @@ void VehicleGPSFactGroup::handleMessage(Vehicle *vehicle, const mavlink_message_
case MAVLINK_MSG_ID_HIGH_LATENCY2:
_handleHighLatency2(message);
break;
+ case MAVLINK_MSG_ID_GNSS_INTEGRITY:
+ _handleGnssIntegrity(message);
+ break;
default:
break;
}
@@ -99,3 +133,19 @@ void VehicleGPSFactGroup::_handleHighLatency2(const mavlink_message_t &message)
_setTelemetryAvailable(true);
}
+
+void VehicleGPSFactGroup::_handleGnssIntegrity(const mavlink_message_t& message)
+{
+ mavlink_gnss_integrity_t gnssIntegrity;
+ mavlink_msg_gnss_integrity_decode(&message, &gnssIntegrity);
+
+ systemErrors()->setRawValue (gnssIntegrity.system_errors);
+ spoofingState()->setRawValue (gnssIntegrity.spoofing_state);
+ jammingState()->setRawValue (gnssIntegrity.jamming_state);
+ authenticationState()->setRawValue (gnssIntegrity.authentication_state);
+ correctionsQuality()->setRawValue (gnssIntegrity.corrections_quality);
+ systemQuality()->setRawValue (gnssIntegrity.system_status_summary);
+ gnssSignalQuality()->setRawValue (gnssIntegrity.gnss_signal_quality);
+ postProcessingQuality()->setRawValue(gnssIntegrity.post_processing_quality);
+}
+
diff --git a/src/Vehicle/FactGroups/VehicleGPSFactGroup.h b/src/Vehicle/FactGroups/VehicleGPSFactGroup.h
index 75a6aac85b69..9bc05599440c 100644
--- a/src/Vehicle/FactGroups/VehicleGPSFactGroup.h
+++ b/src/Vehicle/FactGroups/VehicleGPSFactGroup.h
@@ -14,15 +14,24 @@
class VehicleGPSFactGroup : public FactGroup
{
Q_OBJECT
- Q_PROPERTY(Fact *lat READ lat CONSTANT)
- Q_PROPERTY(Fact *lon READ lon CONSTANT)
- Q_PROPERTY(Fact *mgrs READ mgrs CONSTANT)
- Q_PROPERTY(Fact *hdop READ hdop CONSTANT)
- Q_PROPERTY(Fact *vdop READ vdop CONSTANT)
- Q_PROPERTY(Fact *courseOverGround READ courseOverGround CONSTANT)
- Q_PROPERTY(Fact *yaw READ yaw CONSTANT)
- Q_PROPERTY(Fact *count READ count CONSTANT)
- Q_PROPERTY(Fact *lock READ lock CONSTANT)
+
+ Q_PROPERTY(Fact *lat READ lat CONSTANT)
+ Q_PROPERTY(Fact *lon READ lon CONSTANT)
+ Q_PROPERTY(Fact *mgrs READ mgrs CONSTANT)
+ Q_PROPERTY(Fact *hdop READ hdop CONSTANT)
+ Q_PROPERTY(Fact *vdop READ vdop CONSTANT)
+ Q_PROPERTY(Fact *courseOverGround READ courseOverGround CONSTANT)
+ Q_PROPERTY(Fact *count READ count CONSTANT)
+ Q_PROPERTY(Fact *lock READ lock CONSTANT)
+ Q_PROPERTY(Fact* systemErrors READ systemErrors CONSTANT)
+ Q_PROPERTY(Fact* spoofingState READ spoofingState CONSTANT)
+ Q_PROPERTY(Fact* jammingState READ jammingState CONSTANT)
+ Q_PROPERTY(Fact* authenticationState READ authenticationState CONSTANT)
+ Q_PROPERTY(Fact* correctionsQuality READ correctionsQuality CONSTANT)
+ Q_PROPERTY(Fact* systemQuality READ systemQuality CONSTANT)
+ Q_PROPERTY(Fact* gnssSignalQuality READ gnssSignalQuality CONSTANT)
+ Q_PROPERTY(Fact* postProcessingQuality READ postProcessingQuality CONSTANT)
+ Q_PROPERTY(Fact *yaw READ yaw CONSTANT)
public:
explicit VehicleGPSFactGroup(QObject *parent = nullptr);
@@ -36,14 +45,23 @@ class VehicleGPSFactGroup : public FactGroup
Fact *yaw() { return &_yawFact; }
Fact *count() { return &_countFact; }
Fact *lock() { return &_lockFact; }
+ Fact *systemErrors() { return &_systemErrorsFact; }
+ Fact *spoofingState() { return &_spoofingStateFact; }
+ Fact *jammingState() { return &_jammingStateFact; }
+ Fact *authenticationState() { return &_authenticationStateFact; }
+ Fact *correctionsQuality() { return &_correctionsQualityFact; }
+ Fact *systemQuality() { return &_systemQualityFact; }
+ Fact *gnssSignalQuality() { return &_gnssSignalQualityFact; }
+ Fact *postProcessingQuality() { return &_postProcessingQualityFact; }
// Overrides from FactGroup
void handleMessage(Vehicle *vehicle, const mavlink_message_t &message) override;
protected:
- void _handleGpsRawInt(const mavlink_message_t &message);
- void _handleHighLatency(const mavlink_message_t &message);
- void _handleHighLatency2(const mavlink_message_t &message);
+ void _handleGpsRawInt (const mavlink_message_t& message);
+ void _handleHighLatency (const mavlink_message_t& message);
+ void _handleHighLatency2 (const mavlink_message_t& message);
+ void _handleGnssIntegrity(const mavlink_message_t& message);
Fact _latFact = Fact(0, QStringLiteral("lat"), FactMetaData::valueTypeDouble);
Fact _lonFact = Fact(0, QStringLiteral("lon"), FactMetaData::valueTypeDouble);
@@ -54,4 +72,12 @@ class VehicleGPSFactGroup : public FactGroup
Fact _yawFact = Fact(0, QStringLiteral("yaw"), FactMetaData::valueTypeDouble);
Fact _countFact = Fact(0, QStringLiteral("count"), FactMetaData::valueTypeInt32);
Fact _lockFact = Fact(0, QStringLiteral("lock"), FactMetaData::valueTypeInt32);
+ Fact _systemErrorsFact = Fact(0, QStringLiteral("systemErrors"), FactMetaData::valueTypeUint8);
+ Fact _spoofingStateFact = Fact(0, QStringLiteral("spoofingState"), FactMetaData::valueTypeUint8);
+ Fact _jammingStateFact = Fact(0, QStringLiteral("jammingState"), FactMetaData::valueTypeUint8);
+ Fact _authenticationStateFact = Fact(0, QStringLiteral("authenticationState"), FactMetaData::valueTypeUint8);
+ Fact _correctionsQualityFact = Fact(0, QStringLiteral("correctionsQuality"), FactMetaData::valueTypeUint8);
+ Fact _systemQualityFact = Fact(0, QStringLiteral("systemQuality"), FactMetaData::valueTypeUint8);
+ Fact _gnssSignalQualityFact = Fact(0, QStringLiteral("gnssSignalQuality"), FactMetaData::valueTypeUint8);
+ Fact _postProcessingQualityFact = Fact(0, QStringLiteral("postProcessingQuality"), FactMetaData::valueTypeUint8);
};
diff --git a/translations/qgc-json.ts b/translations/qgc-json.ts
index 765b1f0137c7..ae4ea12b6b84 100644
--- a/translations/qgc-json.ts
+++ b/translations/qgc-json.ts
@@ -1979,6 +1979,9 @@
UAVCAN configure
+
+
+ VibrationFact.json
.mavCmdInfo[MAV_CMD_PREFLIGHT_STORAGE].friendlyName,
@@ -2473,6 +2476,30 @@
Sat Count
+
+ .QGC.MetaData.Facts[correctionsQuality].shortDesc,
+
+ Corrections Quality
+
+
+
+ .QGC.MetaData.Facts[systemQuality].shortDesc,
+
+ System Status Quality
+
+
+
+ .QGC.MetaData.Facts[gnssSignalQuality].shortDesc,
+
+ Gnss Signal Quality
+
+
+
+ .QGC.MetaData.Facts[postProcessingQuality].shortDesc,
+
+ Post Processing Quality
+
+
TerrainFactGroup.json