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 @@ - +