diff --git a/flight/modules/GPS/GPS.c b/flight/modules/GPS/GPS.c
index 305fb7148..dfc2ac2c6 100644
--- a/flight/modules/GPS/GPS.c
+++ b/flight/modules/GPS/GPS.c
@@ -727,31 +727,49 @@ void updateGpsSettings(__attribute__((unused)) UAVObjEvent *ev)
newconfig.enableGPS = true;
newconfig.enableGLONASS = true;
newconfig.enableBeiDou = false;
+ newconfig.enableGalileo = false;
break;
case GPSSETTINGS_UBXGNSSMODE_GLONASS:
newconfig.enableGPS = false;
newconfig.enableGLONASS = true;
newconfig.enableBeiDou = false;
+ newconfig.enableGalileo = false;
break;
case GPSSETTINGS_UBXGNSSMODE_GPS:
newconfig.enableGPS = true;
newconfig.enableGLONASS = false;
newconfig.enableBeiDou = false;
+ newconfig.enableGalileo = false;
break;
case GPSSETTINGS_UBXGNSSMODE_GPSBEIDOU:
newconfig.enableGPS = true;
newconfig.enableGLONASS = false;
newconfig.enableBeiDou = true;
+ newconfig.enableGalileo = false;
break;
case GPSSETTINGS_UBXGNSSMODE_GLONASSBEIDOU:
newconfig.enableGPS = false;
newconfig.enableGLONASS = true;
newconfig.enableBeiDou = true;
+ newconfig.enableGalileo = false;
+ break;
+ case GPSSETTINGS_UBXGNSSMODE_GPSGALILEO:
+ newconfig.enableGPS = true;
+ newconfig.enableGLONASS = false;
+ newconfig.enableBeiDou = false;
+ newconfig.enableGalileo = true;
+ break;
+ case GPSSETTINGS_UBXGNSSMODE_GPSGLONASSGALILEO:
+ newconfig.enableGPS = true;
+ newconfig.enableGLONASS = true;
+ newconfig.enableBeiDou = false;
+ newconfig.enableGalileo = true;
break;
default:
newconfig.enableGPS = false;
newconfig.enableGLONASS = false;
newconfig.enableBeiDou = false;
+ newconfig.enableGalileo = false;
break;
}
diff --git a/flight/modules/GPS/inc/UBX.h b/flight/modules/GPS/inc/UBX.h
index 4615a4a15..f622ea87a 100644
--- a/flight/modules/GPS/inc/UBX.h
+++ b/flight/modules/GPS/inc/UBX.h
@@ -460,8 +460,8 @@ struct UBX_CFG_CFG {
// ------------------------------------10987654321098765432109876543210
// WAAS 122, 133, 134, 135, 138---------|---------|---------|---------|
#define UBX_CFG_SBAS_SCANMODE1_WAAS 0b00000000000001001110000000000100
-// EGNOS 120, 124, 126, 131-------------|---------|---------|---------|
-#define UBX_CFG_SBAS_SCANMODE1_EGNOS 0b00000000000000000000100001010001
+// EGNOS 120, 123, 136------------------|---------|---------|---------|
+#define UBX_CFG_SBAS_SCANMODE1_EGNOS 0b00000000000000010000000000001001
// MSAS 129, 137------------------------|---------|---------|---------|
#define UBX_CFG_SBAS_SCANMODE1_MSAS 0b00000000000000100000001000000000
// GAGAN 127, 128-----------------------|---------|---------|---------|
@@ -485,6 +485,7 @@ struct UBX_CFG_SBAS {
#define UBX_CFG_GNSS_FLAGS_QZSS_L1CA 0x010000
#define UBX_CFG_GNSS_FLAGS_QZSS_L1SAIF 0x040000
#define UBX_CFG_GNSS_FLAGS_GLONASS_L1OF 0x010000
+#define UBX_CFG_GNSS_FLAGS_GALILEO_E1 0x010000
#define UBX_CFG_GNSS_NUMCH_VER7 22
#define UBX_CFG_GNSS_NUMCH_VER8 32
diff --git a/flight/modules/GPS/inc/ubx_autoconfig.h b/flight/modules/GPS/inc/ubx_autoconfig.h
index 8578f1d6b..44045840c 100644
--- a/flight/modules/GPS/inc/ubx_autoconfig.h
+++ b/flight/modules/GPS/inc/ubx_autoconfig.h
@@ -102,6 +102,7 @@ typedef struct {
bool enableGPS;
bool enableGLONASS;
bool enableBeiDou;
+ bool enableGalileo;
} ubx_autoconfig_settings_t;
// Sent messages for configuration support
diff --git a/flight/modules/GPS/ubx_autoconfig.c b/flight/modules/GPS/ubx_autoconfig.c
index 9cfb079d3..e4be2cda8 100644
--- a/flight/modules/GPS/ubx_autoconfig.c
+++ b/flight/modules/GPS/ubx_autoconfig.c
@@ -397,6 +397,13 @@ static void config_gnss(uint16_t *bytes_to_send)
status->working_packet.message.payload.cfg_gnss.cfgBlocks[i].resTrkCh = 8;
}
break;
+ case UBX_GNSS_ID_GALILEO:
+ if (status->currentSettings.enableGalileo) {
+ status->working_packet.message.payload.cfg_gnss.cfgBlocks[i].flags = UBX_CFG_GNSS_FLAGS_ENABLED | UBX_CFG_GNSS_FLAGS_GALILEO_E1;
+ status->working_packet.message.payload.cfg_gnss.cfgBlocks[i].maxTrkCh = 10;
+ status->working_packet.message.payload.cfg_gnss.cfgBlocks[i].resTrkCh = 8;
+ }
+ break;
default:
break;
}
diff --git a/ground/gcs/src/plugins/gpsdisplay/gpsconstellationwidget.cpp b/ground/gcs/src/plugins/gpsdisplay/gpsconstellationwidget.cpp
index 9fde211c0..2a9df0235 100644
--- a/ground/gcs/src/plugins/gpsdisplay/gpsconstellationwidget.cpp
+++ b/ground/gcs/src/plugins/gpsdisplay/gpsconstellationwidget.cpp
@@ -118,7 +118,7 @@ void GpsConstellationWidget::updateSat(int index, int prn, int elevation, int az
}
// TODO: add range checking
- satellites[index][0] = prn;
+ satellites[index][0] = prn; // UBX SVID
satellites[index][1] = elevation;
satellites[index][2] = azimuth;
satellites[index][3] = snr;
@@ -129,7 +129,13 @@ void GpsConstellationWidget::updateSat(int index, int prn, int elevation, int az
-satIcons[index]->boundingRect().center().y());
satIcons[index]->setTransform(QTransform::fromTranslate(opd.x(), opd.y()), false);
- // Show normal GPS, SBAS/QZSS (120-158,193-197 range), BeiDou (33-64, 159-163) or GLONASS (65-96, 255 if unidentified)
+ // Show satellite constellations in a separate color
+ // The UBX SVID numbers are defined in appendix A of u-blox8-M8_ReceiverDescrProtSpec_(UBX-13003221)_Public.pdf
+ // GPS = default
+ // SBAS 120-158, QZSS 193-197
+ // BeiDou 33-64, 159-163
+ // GLONASS 65-96, 255 if unidentified
+ // Galileo 211-246
if ((prn > 119 && prn < 159) || (prn > 192 && prn < 198)) {
if (snr) {
satIcons[index]->setElementId("satellite-sbas");
@@ -148,6 +154,12 @@ void GpsConstellationWidget::updateSat(int index, int prn, int elevation, int az
} else {
satIcons[index]->setElementId("sat-beidou-notSeen");
}
+ } else if (prn > 210 && prn < 247) {
+ if (snr) {
+ satIcons[index]->setElementId("satellite-galileo");
+ } else {
+ satIcons[index]->setElementId("sat-galileo-notSeen");
+ }
} else {
if (snr) {
satIcons[index]->setElementId("satellite");
diff --git a/ground/gcs/src/plugins/gpsdisplay/gpsdisplaywidget.ui b/ground/gcs/src/plugins/gpsdisplay/gpsdisplaywidget.ui
index f0edd26d8..6af532b91 100644
--- a/ground/gcs/src/plugins/gpsdisplay/gpsdisplaywidget.ui
+++ b/ground/gcs/src/plugins/gpsdisplay/gpsdisplaywidget.ui
@@ -127,7 +127,7 @@
- <html><head/><body><p>Displays the SNR for each detected sat. GPS satellites are shown in green, GLONASS in cyan, BeiDou in red and SBAS/QZSS in orange. Satellite number (PRN) is displayed inside the bar. Sat SNR is displayed above (in dBHz)</p></body></html>
+ <html><head/><body><p>Displays the SNR for each detected sat. GPS satellites are shown in green, GLONASS in cyan, BeiDou in red, Galileo in magenta and SBAS/QZSS in orange. Satellite number (PRN) is displayed inside the bar. Sat SNR is displayed above (in dBHz)</p></body></html>
false
diff --git a/ground/gcs/src/plugins/gpsdisplay/gpssnrwidget.cpp b/ground/gcs/src/plugins/gpsdisplay/gpssnrwidget.cpp
index 5e965b46f..22971b694 100644
--- a/ground/gcs/src/plugins/gpsdisplay/gpssnrwidget.cpp
+++ b/ground/gcs/src/plugins/gpsdisplay/gpssnrwidget.cpp
@@ -104,14 +104,21 @@ void GpsSnrWidget::drawSat(int index)
QRectF boxRect = boxes[index]->boundingRect();
- // Change color for SBAS & QZSS 120-158, 193-197 range
- // GLONASS range 65-96 or 255, BeiDou 33-64 or 159-163
+ // Show satellite constellations in a separate color
+ // The UBX SVID numbers are defined in appendix A of u-blox8-M8_ReceiverDescrProtSpec_(UBX-13003221)_Public.pdf
+ // GPS = default
+ // SBAS 120-158, QZSS 193-197
+ // BeiDou 33-64, 159-163
+ // GLONASS 65-96, 255 if unidentified
+ // Galileo 211-246
if ((prn > 119 && prn < 159) || (prn > 192 && prn < 198)) {
- boxes[index]->setBrush(QColor("#fd700b"));
+ boxes[index]->setBrush(QColor("#fd700b")); // orange
} else if ((prn > 64 && prn < 97) || 255 == prn) {
boxes[index]->setBrush(QColor("Cyan"));
} else if ((prn > 32 && prn < 65) || (prn > 158 && prn < 164)) {
boxes[index]->setBrush(QColor("Red"));
+ } else if (prn > 210 && prn < 247) {
+ boxes[index]->setBrush(QColor("#e162f3")); // magenta
} else {
boxes[index]->setBrush(QColor("Green"));
}
diff --git a/ground/gcs/src/plugins/gpsdisplay/images/gpsEarth.svg b/ground/gcs/src/plugins/gpsdisplay/images/gpsEarth.svg
index a1a9df773..200160fb1 100644
--- a/ground/gcs/src/plugins/gpsdisplay/images/gpsEarth.svg
+++ b/ground/gcs/src/plugins/gpsdisplay/images/gpsEarth.svg
@@ -14,10 +14,21 @@
height="691.54303"
id="svg2"
version="1.1"
- inkscape:version="0.48.4 r9939"
+ inkscape:version="0.91 r13725"
sodipodi:docname="gpsEarth.svg">
+
+
+
+
@@ -1003,6 +1014,46 @@
fx="559.92383"
fy="182.67093"
r="21.496641" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/shared/uavobjectdefinition/gpssettings.xml b/shared/uavobjectdefinition/gpssettings.xml
index 0e0be02c9..c5b28c3dc 100644
--- a/shared/uavobjectdefinition/gpssettings.xml
+++ b/shared/uavobjectdefinition/gpssettings.xml
@@ -18,7 +18,7 @@
-
+