@@ -39,7 +39,7 @@ void GNSS_LG290P::baseRtcmLowDataRate()
39
39
settings.lg290pMessageRatesRTCMBase [x] = 0 ;
40
40
41
41
settings.lg290pMessageRatesRTCMBase [getRtcmMessageNumberByName (" RTCM3-1005" )] =
42
- 10 ; // 1005 0.1Hz - Exclude antenna height
42
+ 10 ; // 1005 0.1Hz - Exclude antenna height
43
43
settings.lg290pMessageRatesRTCMBase [getRtcmMessageNumberByName (" RTCM3-107X" )] = 2 ; // 1074 0.5Hz
44
44
settings.lg290pMessageRatesRTCMBase [getRtcmMessageNumberByName (" RTCM3-108X" )] = 2 ; // 1084 0.5Hz
45
45
settings.lg290pMessageRatesRTCMBase [getRtcmMessageNumberByName (" RTCM3-109X" )] = 2 ; // 1094 0.5Hz
@@ -114,6 +114,14 @@ void GNSS_LG290P::begin()
114
114
" update the "
115
115
" firmware on your LG290P to allow for these features. Please see https://bit.ly/sfe-rtk-lg290p-update\r\n " ,
116
116
lg290pFirmwareVersion, gnssFirmwareVersion);
117
+
118
+ // Determine if the "LG290P03AANR01A03S_PPP_TEMP0812 2025/08/12" firmware is present
119
+ // This version has support for testing out E6/HAS PPP, but confusingly was released after v05.
120
+ if (strstr (gnssFirmwareVersion, " PPP_TEMP" ) != nullptr )
121
+ {
122
+ present.galileoHasCapable = true ;
123
+ systemPrintln (" PPP trial firmware detected. HAS settings will now be available." );
124
+ }
117
125
}
118
126
if (lg290pFirmwareVersion < 5 )
119
127
{
@@ -362,6 +370,8 @@ bool GNSS_LG290P::configureRover()
362
370
if (settings.debugGnss && response == false )
363
371
systemPrintln (" configureRover: Set rate failed" );
364
372
373
+ response &= setHighAccuracyService (settings.enableGalileoHas );
374
+
365
375
response &= enableRTCMRover ();
366
376
if (settings.debugGnss && response == false )
367
377
systemPrintln (" configureRover: Enable RTCM failed" );
@@ -476,6 +486,8 @@ bool GNSS_LG290P::configureBase()
476
486
477
487
response &= setMinCnoRadio (settings.minCNO );
478
488
489
+ response &= setHighAccuracyService (settings.enableGalileoHas );
490
+
479
491
response &= enableRTCMBase (); // Set RTCM messages
480
492
if (settings.debugGnss && response == false )
481
493
systemPrintln (" configureBase: Enable RTCM failed" );
@@ -826,7 +838,8 @@ bool GNSS_LG290P::enableRTCMRover()
826
838
// So we set all RTCM to 1, and set PQTMCFGRTCM to the lowest value found
827
839
828
840
// Capture the message with the lowest rate
829
- if (settings.lg290pMessageRatesRTCMRover [messageNumber] > 0 && settings.lg290pMessageRatesRTCMRover [messageNumber] < minimumRtcmRate)
841
+ if (settings.lg290pMessageRatesRTCMRover [messageNumber] > 0 &&
842
+ settings.lg290pMessageRatesRTCMRover [messageNumber] < minimumRtcmRate)
830
843
minimumRtcmRate = settings.lg290pMessageRatesRTCMRover [messageNumber];
831
844
832
845
// Force all RTCM messages to 1 or 0. See above for reasoning.
@@ -847,13 +860,11 @@ bool GNSS_LG290P::enableRTCMRover()
847
860
if (lg290pFirmwareVersion >= 4 )
848
861
{
849
862
// If any one of the commands fails, report failure overall
850
- response &= _lg290p->setMessageRateOnPort (lgMessagesRTCM[messageNumber].msgTextName ,
851
- rate,
852
- portNumber);
863
+ response &=
864
+ _lg290p->setMessageRateOnPort (lgMessagesRTCM[messageNumber].msgTextName , rate, portNumber);
853
865
}
854
866
else
855
- response &= _lg290p->setMessageRate (lgMessagesRTCM[messageNumber].msgTextName ,
856
- rate);
867
+ response &= _lg290p->setMessageRate (lgMessagesRTCM[messageNumber].msgTextName , rate);
857
868
858
869
if (response == false && settings.debugGnss )
859
870
systemPrintf (" Enable RTCM failed at messageNumber %d %s\r\n " , messageNumber,
@@ -874,8 +885,7 @@ bool GNSS_LG290P::enableRTCMRover()
874
885
}
875
886
else
876
887
response &= _lg290p->setMessageRate (lgMessagesRTCM[messageNumber].msgTextName ,
877
- settings.lg290pMessageRatesRTCMRover [messageNumber],
878
- 0 );
888
+ settings.lg290pMessageRatesRTCMRover [messageNumber], 0 );
879
889
880
890
if (response == false && settings.debugGnss )
881
891
systemPrintf (" Enable RTCM failed at messageNumber %d %s\r\n " , messageNumber,
@@ -1754,6 +1764,12 @@ void GNSS_LG290P::menuConstellations()
1754
1764
systemPrintln ();
1755
1765
}
1756
1766
1767
+ if (present.galileoHasCapable )
1768
+ {
1769
+ systemPrintf (" %d) Galileo E6 Corrections: %s\r\n " , MAX_LG290P_CONSTELLATIONS + 1 ,
1770
+ settings.enableGalileoHas ? " Enabled" : " Disabled" );
1771
+ }
1772
+
1757
1773
systemPrintln (" x) Exit" );
1758
1774
1759
1775
int incoming = getUserInputNumber (); // Returns EXIT, TIMEOUT, or long
@@ -1764,6 +1780,10 @@ void GNSS_LG290P::menuConstellations()
1764
1780
1765
1781
settings.lg290pConstellations [incoming] ^= 1 ;
1766
1782
}
1783
+ else if ((incoming == MAX_LG290P_CONSTELLATIONS + 1 ) && present.galileoHasCapable )
1784
+ {
1785
+ settings.enableGalileoHas ^= 1 ;
1786
+ }
1767
1787
else if (incoming == INPUT_RESPONSE_GETNUMBER_EXIT)
1768
1788
break ;
1769
1789
else if (incoming == INPUT_RESPONSE_GETNUMBER_TIMEOUT)
@@ -1775,6 +1795,8 @@ void GNSS_LG290P::menuConstellations()
1775
1795
// Apply current settings to module
1776
1796
gnss->setConstellations ();
1777
1797
1798
+ setHighAccuracyService (settings.enableGalileoHas );
1799
+
1778
1800
clearBuffer (); // Empty buffer of any newline chars
1779
1801
}
1780
1802
@@ -2221,6 +2243,49 @@ bool GNSS_LG290P::setElevation(uint8_t elevationDegrees)
2221
2243
return true ;
2222
2244
}
2223
2245
2246
+ // ----------------------------------------
2247
+ bool GNSS_LG290P::setHighAccuracyService (bool enableGalileoHas)
2248
+ {
2249
+ bool result = true ;
2250
+
2251
+ // E6 reception requires version v03 with 'PPP_TEMP' in firmware title
2252
+ // Present is set during LG290P begin()
2253
+ if (present.galileoHasCapable == false )
2254
+ return (result); // We are unable to set this setting to report success
2255
+
2256
+ // Enable E6 and PPP if enabled
2257
+ if (settings.enableGalileoHas )
2258
+ {
2259
+ // $PQTMCFGPPP,W,2,1,120,0.10,0.15*68
2260
+ // Enable E6 HAS, WGS84, 120 timeout, 0.10m Horizontal convergence accuracy threshold, 0.15m Vertical threshold
2261
+ if (_lg290p->sendOkCommand (" $PQTMCFGPPP" , " ,W,2,1,120,0.10,0.15" ) == true )
2262
+ {
2263
+ systemPrintln (" Galileo E6 HAS service enabled" );
2264
+ }
2265
+ else
2266
+ {
2267
+ systemPrintln (" Galileo E6 HAS service failed to enable" );
2268
+ result = false ;
2269
+ }
2270
+ }
2271
+ else
2272
+ {
2273
+ // Turn off HAS/E6
2274
+ // $PQTMCFGPPP,W,0*
2275
+ if (_lg290p->sendOkCommand (" $PQTMCFGPPP" , " ,W,0" ) == true )
2276
+ {
2277
+ systemPrintln (" Galileo E6 HAS service disabled" );
2278
+ }
2279
+ else
2280
+ {
2281
+ systemPrintln (" Galileo E6 HAS service failed to disable" );
2282
+ result = false ;
2283
+ }
2284
+ }
2285
+
2286
+ return (result);
2287
+ }
2288
+
2224
2289
// ----------------------------------------
2225
2290
// Enable all the valid messages for this platform
2226
2291
// There are many messages so split into batches. VALSET is limited to 64 max per batch
0 commit comments