@@ -512,11 +512,13 @@ void menuPointPerfectKeys()
512
512
// If GNSS is mosaic-X5, configure LBandBeam1
513
513
void updateLBand ()
514
514
{
515
+ static bool lband_gnss_can_not_begin = false ;
515
516
516
517
#ifdef COMPILE_L_BAND
517
518
if (present.lband_neo )
518
519
{
519
- if (!online.lband_neo && pointPerfectIsEnabled ())
520
+ // Start L-Band if it is enabled
521
+ if (online.lband_neo == false && pointPerfectLbandEnabled () == true )
520
522
{
521
523
static bool lband_neo_can_not_begin = false ;
522
524
@@ -641,10 +643,9 @@ void updateLBand()
641
643
#ifdef COMPILE_MOSAICX5
642
644
if (present.gnss_mosaicX5 )
643
645
{
644
- if (!online.lband_gnss && pointPerfectIsEnabled ())
646
+ // Start L-Band if service is enabled
647
+ if (online.lband_gnss == false && pointPerfectLbandEnabled ())
645
648
{
646
- static bool lband_gnss_can_not_begin = false ;
647
-
648
649
if (lband_gnss_can_not_begin)
649
650
return ;
650
651
@@ -694,7 +695,7 @@ void updateLBand()
694
695
695
696
result &= mosaic->configureLBand (true , LBandFreq); // Start L-Band
696
697
697
- result &= mosaic->saveConfiguration (); // Save the updated configuration. Probably redundant?
698
+ result &= mosaic->saveConfiguration (); // Save the updated configuration.
698
699
699
700
if (result == false )
700
701
{
@@ -708,10 +709,32 @@ void updateLBand()
708
709
online.lband_gnss = true ;
709
710
}
710
711
}
711
- // else if (online.lband_gnss && pointPerfectIsEnabled())
712
+
713
+ // Stop L-Band is service is disabled
714
+ else if (online.lband_gnss == true && pointPerfectLbandEnabled () == false )
712
715
{
713
- // If no SPARTN data is received, the L-Band may need a 'kick'. Turn L-Band off and back on again!
714
- // But gnss->update will do this. No need to do it here
716
+ Serial.println (" \n\r Taking L-Band offline" );
717
+
718
+ bool result = true ;
719
+
720
+ GNSS_MOSAIC *mosaic = (GNSS_MOSAIC *)gnss;
721
+
722
+ uint32_t LBandFreq = 1556290000 ; // Default to US band
723
+ result &= mosaic->configureLBand (false , LBandFreq); // Stop L-Band
724
+
725
+ result &= mosaic->saveConfiguration (); // Save the updated configuration.
726
+
727
+ if (result == false )
728
+ {
729
+ systemPrintln (" mosaic-X5 L-Band failed to stop. Retrying..." );
730
+ }
731
+ else
732
+ {
733
+ if (settings.debugCorrections == true )
734
+ systemPrintln (" mosaic-X5 L-Band successfully taken offline" );
735
+ online.lband_gnss = false ;
736
+ lband_gnss_can_not_begin = false ; // reset so L-Band can restart if requested
737
+ }
715
738
}
716
739
}
717
740
#endif // /COMPILE_MOSAICX5
@@ -799,7 +822,7 @@ bool pointPerfectIsEnabled()
799
822
return false ;
800
823
}
801
824
802
- // Determine if this service type uses keys
825
+ // Determine if this service type is encrypted and requires keys for decryption
803
826
bool pointPerfectServiceUsesKeys ()
804
827
{
805
828
if (settings.pointPerfectService == PP_NICKNAME_FLEX_LBAND_NA ||
@@ -808,8 +831,16 @@ bool pointPerfectServiceUsesKeys()
808
831
return false ;
809
832
}
810
833
834
+ // Determine if this service type uses L-Band
835
+ bool pointPerfectLbandEnabled ()
836
+ {
837
+ if (settings.pointPerfectService == PP_NICKNAME_FLEX_LBAND_NA || settings.pointPerfectService == PP_NICKNAME_GLOBAL)
838
+ return true ;
839
+ return false ;
840
+ }
841
+
811
842
// Determine if this service type uses NTRIP for corrections
812
- bool pointPerfectServiceUsesNtrip ()
843
+ bool pointPerfectNtripEnabled ()
813
844
{
814
845
if (settings.pointPerfectService == PP_NICKNAME_FLEX_RTCM || settings.pointPerfectService == PP_NICKNAME_LIVE)
815
846
return true ;
@@ -852,7 +883,7 @@ bool productVariantSupportsLbandNA()
852
883
853
884
bool productVariantSupportsLbandGlobal ()
854
885
{
855
- return false ; // As of June 2025, LBand Global is not yet available
886
+ return false ; // As of June 2025, LBand Global is not yet available
856
887
857
888
if (productVariant == RTK_EVK)
858
889
return false ;
@@ -869,6 +900,25 @@ bool productVariantSupportsLbandGlobal()
869
900
return false ;
870
901
}
871
902
903
+ // Returns true if this platform requires the PointPerfect Library to run to use the corrections from PointPerfect
904
+ bool productVariantNeedsPpl ()
905
+ {
906
+ if (productVariant == RTK_EVK)
907
+ return false ;
908
+ if (productVariant == RTK_FACET_V2)
909
+ return false ; // TODO - will require specific module lookup
910
+ if (productVariant == RTK_FACET_MOSAIC)
911
+ return true ;
912
+ if (productVariant == RTK_TORCH)
913
+ return true ;
914
+ if (productVariant == RTK_POSTCARD)
915
+ return true ;
916
+
917
+ systemPrintln (" Uncaught productVariantNeedsPpl()" );
918
+ return false ;
919
+ }
920
+
921
+
872
922
// Given a service nick name, return whether this platform supports it
873
923
// Helps with printing the menu
874
924
bool productVariantSupportsService (uint8_t ppNickName)
@@ -895,7 +945,7 @@ bool productVariantSupportsService(uint8_t ppNickName)
895
945
}
896
946
else if (ppNickName == PP_NICKNAME_LIVE)
897
947
{
898
- return false ; // As of June 2025, PointPerfect Live is not yet available
948
+ return false ; // As of June 2025, PointPerfect Live is not yet available
899
949
900
950
// All platforms support RTCM over NTRIP
901
951
return true ;
0 commit comments