@@ -509,31 +509,29 @@ void stateUpdate()
509
509
// We want an immediate change from this state
510
510
forceSystemStateUpdate = true ; // Immediately go to this new state
511
511
512
+ uint8_t networkType = networkGetActiveType ();
513
+
512
514
// If user has turned off PointPerfect, skip everything
513
515
if (!settings.enablePointPerfectCorrections )
514
516
{
515
517
changeState (settings.lastState ); // Go to either rover or base
516
518
}
517
519
518
- // If there is no WiFi setup, and no keys, skip everything
519
- else if (wifiNetworkCount () == 0 && strlen (settings.pointPerfectCurrentKey ) == 0 )
520
+ // If on WiFi and there are no WiFi SSIDs available, skip everything
521
+ // (Some duplication in pointPerfectProvisionOrUpdate)
522
+ else if ((networkType == NETWORK_TYPE_WIFI) && (wifiNetworkCount () == 0 ))
520
523
{
521
524
displayNoSSIDs (2000 );
522
525
changeState (settings.lastState ); // Go to either rover or base
523
526
}
524
527
525
- // If we don't have keys, begin zero touch provisioning
526
- else if (strlen (settings.pointPerfectCurrentKey ) == 0 || strlen (settings.pointPerfectNextKey ) == 0 )
528
+ // If we don't have certs or keys, begin zero touch provisioning
529
+ else if (! checkCertificates () || strlen (settings.pointPerfectCurrentKey ) == 0 || strlen (settings.pointPerfectNextKey ) == 0 )
527
530
{
528
531
if (settings.debugPpCertificate )
529
- systemPrintln (" PointPerfect Keys starting WiFi" );
530
-
531
- // Temporarily limit WiFi connection attempts
532
- wifiOriginalMaxConnectionAttempts = wifiMaxConnectionAttempts;
533
- wifiMaxConnectionAttempts = 0 ; // Override setting during key retrieval. Give up after single failure.
532
+ systemPrintln (" PointPerfect starting provisioning" );
534
533
535
- wifiStart ();
536
- changeState (STATE_KEYS_PROVISION_STARTED);
534
+ changeState (STATE_KEYS_NEEDED);
537
535
}
538
536
539
537
// Determine if we have valid date/time RTC from last boot
@@ -566,17 +564,14 @@ void stateUpdate()
566
564
case (STATE_KEYS_NEEDED): {
567
565
forceSystemStateUpdate = true ; // Immediately go to this new state
568
566
567
+ uint8_t networkType = networkGetActiveType ();
568
+
569
569
if (online.rtc == false )
570
570
{
571
571
if (settings.debugPpCertificate )
572
- systemPrintln (" Keys Needed. RTC offline. Starting WiFi" );
573
-
574
- // Temporarily limit WiFi connection attempts
575
- wifiOriginalMaxConnectionAttempts = wifiMaxConnectionAttempts;
576
- wifiMaxConnectionAttempts = 0 ; // Override setting during key retrieval. Give up after single failure.
572
+ systemPrintln (" Keys Needed. RTC offline. Starting provisioning or update" );
577
573
578
- wifiStart ();
579
- changeState (STATE_KEYS_WIFI_STARTED); // If we can't check the RTC, continue
574
+ changeState (STATE_KEYS_PROVISION_STARTED); // If we can't check the RTC, continue
580
575
}
581
576
582
577
// When did we last try to get keys? Attempt every 24 hours
@@ -586,19 +581,14 @@ void stateUpdate()
586
581
recordSystemSettings (); // Record these settings to unit
587
582
588
583
if (settings.debugPpCertificate )
589
- systemPrintln (" Keys Needed. Starting WiFi " );
584
+ systemPrintln (" Keys Needed. Starting provisioning or update " );
590
585
591
- // Temporarily limit WiFi connection attempts
592
- wifiOriginalMaxConnectionAttempts = wifiMaxConnectionAttempts;
593
- wifiMaxConnectionAttempts = 0 ; // Override setting during key retrieval. Give up after single failure.
594
-
595
- wifiStart (); // Starts WiFi state machine
596
- changeState (STATE_KEYS_WIFI_STARTED);
586
+ changeState (STATE_KEYS_PROVISION_STARTED);
597
587
}
598
588
599
589
// Added to display error if user selects GetKeys from the display
600
590
// Normally, this would be caught during STATE_KEYS_STARTED
601
- else if (wifiNetworkCount () == 0 )
591
+ else if ((networkType == NETWORK_TYPE_WIFI) && ( wifiNetworkCount () == 0 ) )
602
592
{
603
593
displayNoSSIDs (1000 );
604
594
changeState (
@@ -614,13 +604,7 @@ void stateUpdate()
614
604
if (settings.debugPpCertificate )
615
605
systemPrintln (" Force key update. Starting WiFi" );
616
606
617
- // Temporarily limit WiFi connection attempts
618
- wifiOriginalMaxConnectionAttempts = wifiMaxConnectionAttempts;
619
- wifiMaxConnectionAttempts = 0 ; // Override setting during key retrieval. Give up after single failure.
620
-
621
- wifiStart (); // Starts WiFi state machine
622
-
623
- changeState (STATE_KEYS_WIFI_STARTED);
607
+ changeState (STATE_KEYS_PROVISION_STARTED);
624
608
}
625
609
626
610
else
@@ -634,75 +618,6 @@ void stateUpdate()
634
618
}
635
619
break ;
636
620
637
- case (STATE_KEYS_WIFI_STARTED): {
638
- wifiMaxConnectionAttempts = wifiOriginalMaxConnectionAttempts; // Revert setting
639
-
640
- if (wifiIsConnected ())
641
- changeState (STATE_KEYS_WIFI_CONNECTED);
642
- else
643
- {
644
- wifiShutdown (); // Turn off WiFi
645
-
646
- changeState (STATE_KEYS_WIFI_TIMEOUT);
647
- }
648
- }
649
- break ;
650
-
651
- case (STATE_KEYS_WIFI_CONNECTED): {
652
-
653
- // Check that the certs are valid
654
- if (checkCertificates () == true )
655
- {
656
- // Update the keys
657
- if (pointperfectUpdateKeys () == true ) // Connect to ThingStream MQTT and get PointPerfect key UBX packet
658
- displayKeysUpdated ();
659
- }
660
- else
661
- {
662
- // Erase keys
663
- erasePointperfectCredentials ();
664
-
665
- // Provision device
666
- if (pointperfectProvisionDevice () == true ) // Connect to ThingStream API and get keys
667
- displayKeysUpdated ();
668
- }
669
-
670
- wifiShutdown (); // Turn off WiFi
671
- forceSystemStateUpdate = true ; // Imediately go to this new state
672
- changeState (STATE_KEYS_DAYS_REMAINING);
673
- }
674
- break ;
675
-
676
- case (STATE_KEYS_WIFI_TIMEOUT): {
677
- paintKeyWiFiFail (2000 );
678
-
679
- forceSystemStateUpdate = true ; // Imediately go to this new state
680
-
681
- if (online.rtc == true )
682
- {
683
- int daysRemaining =
684
- daysFromEpoch (settings.pointPerfectNextKeyStart + settings.pointPerfectNextKeyDuration + 1 );
685
-
686
- if (daysRemaining >= 0 )
687
- {
688
- changeState (STATE_KEYS_DAYS_REMAINING);
689
- }
690
- else
691
- {
692
- paintKeysExpired ();
693
- changeState (STATE_KEYS_LBAND_ENCRYPTED);
694
- }
695
- }
696
- else
697
- {
698
- // No WiFi. No RTC. We don't know if the keys we have are expired. Attempt to use them.
699
- changeState (STATE_KEYS_LBAND_CONFIGURE);
700
- }
701
- }
702
- break ;
703
-
704
- // Note: STATE_KEYS_EXPIRED should be here, but isn't. TODO: check this
705
-
706
621
case (STATE_KEYS_DAYS_REMAINING): {
707
622
if (online.rtc == true )
708
623
{
@@ -749,30 +664,44 @@ void stateUpdate()
749
664
break ;
750
665
751
666
case (STATE_KEYS_PROVISION_STARTED): {
752
- if (wifiIsConnected ( ))
753
- changeState (STATE_KEYS_PROVISION_CONNECTED );
667
+ if (pointPerfectProvisionOrUpdate ( false ))
668
+ changeState (STATE_KEYS_PROVISION_SUCCESS );
754
669
else
755
- {
756
- wifiShutdown (); // Turn off WiFi
757
- changeState (STATE_KEYS_WIFI_TIMEOUT);
758
- }
670
+ changeState (STATE_KEYS_PROVISION_FAIL);
759
671
}
760
672
break ;
761
673
762
- case (STATE_KEYS_PROVISION_CONNECTED ): {
674
+ case (STATE_KEYS_PROVISION_SUCCESS ): {
763
675
forceSystemStateUpdate = true ; // Imediately go to this new state
764
676
765
- if (pointperfectProvisionDevice () == true )
677
+ // displayKeysUpdated();
678
+ changeState (STATE_KEYS_DAYS_REMAINING);
679
+ }
680
+ break ;
681
+
682
+ case (STATE_KEYS_PROVISION_FAIL): {
683
+ forceSystemStateUpdate = true ; // Imediately go to this new state
684
+
685
+ if (online.rtc == true )
766
686
{
767
- displayKeysUpdated ();
768
- changeState (STATE_KEYS_DAYS_REMAINING);
687
+ int daysRemaining =
688
+ daysFromEpoch (settings.pointPerfectNextKeyStart + settings.pointPerfectNextKeyDuration + 1 );
689
+
690
+ if (daysRemaining >= 0 )
691
+ {
692
+ changeState (STATE_KEYS_DAYS_REMAINING);
693
+ }
694
+ else
695
+ {
696
+ paintKeysExpired ();
697
+ changeState (STATE_KEYS_LBAND_ENCRYPTED);
698
+ }
769
699
}
770
700
else
771
701
{
772
- paintKeyProvisionFail ( 10000 ); // Device not whitelisted. Show device ID .
773
- changeState (STATE_KEYS_LBAND_ENCRYPTED );
702
+ // No RTC. We don't know if the keys we have are expired. Attempt to use them .
703
+ changeState (STATE_KEYS_LBAND_CONFIGURE );
774
704
}
775
- wifiShutdown (); // Turn off WiFi
776
705
}
777
706
break ;
778
707
@@ -1038,12 +967,6 @@ const char *getState(SystemState state, char *buffer)
1038
967
return " STATE_KEYS_STARTED" ;
1039
968
case (STATE_KEYS_NEEDED):
1040
969
return " STATE_KEYS_NEEDED" ;
1041
- case (STATE_KEYS_WIFI_STARTED):
1042
- return " STATE_KEYS_WIFI_STARTED" ;
1043
- case (STATE_KEYS_WIFI_CONNECTED):
1044
- return " STATE_KEYS_WIFI_CONNECTED" ;
1045
- case (STATE_KEYS_WIFI_TIMEOUT):
1046
- return " STATE_KEYS_WIFI_TIMEOUT" ;
1047
970
case (STATE_KEYS_EXPIRED):
1048
971
return " STATE_KEYS_EXPIRED" ;
1049
972
case (STATE_KEYS_DAYS_REMAINING):
@@ -1054,8 +977,10 @@ const char *getState(SystemState state, char *buffer)
1054
977
return " STATE_KEYS_LBAND_ENCRYPTED" ;
1055
978
case (STATE_KEYS_PROVISION_STARTED):
1056
979
return " STATE_KEYS_PROVISION_STARTED" ;
1057
- case (STATE_KEYS_PROVISION_CONNECTED):
1058
- return " STATE_KEYS_PROVISION_CONNECTED" ;
980
+ case (STATE_KEYS_PROVISION_SUCCESS):
981
+ return " STATE_KEYS_PROVISION_SUCCESS" ;
982
+ case (STATE_KEYS_PROVISION_FAIL):
983
+ return " STATE_KEYS_PROVISION_FAIL" ;
1059
984
#endif // COMPILE_L_BAND
1060
985
1061
986
case (STATE_ESPNOW_PAIRING_NOT_STARTED):
@@ -1155,7 +1080,7 @@ const RTK_MODE_ENTRY stateModeTable[] = {
1155
1080
{" Rover" , STATE_ROVER_NOT_STARTED, STATE_ROVER_RTK_FIX},
1156
1081
{" Base" , STATE_BASE_NOT_STARTED, STATE_BASE_FIXED_TRANSMITTING},
1157
1082
{" Setup" , STATE_DISPLAY_SETUP, STATE_PROFILE},
1158
- {" Key Provisioning" , STATE_KEYS_STARTED, STATE_KEYS_PROVISION_CONNECTED },
1083
+ {" Key Provisioning" , STATE_KEYS_STARTED, STATE_KEYS_PROVISION_FAIL },
1159
1084
{" ESPNOW Pairing" , STATE_ESPNOW_PAIRING_NOT_STARTED, STATE_ESPNOW_PAIRING},
1160
1085
{" NTP" , STATE_NTPSERVER_NOT_STARTED, STATE_NTPSERVER_SYNC},
1161
1086
{" Ethernet Config" , STATE_CONFIG_VIA_ETH_NOT_STARTED, STATE_CONFIG_VIA_ETH_RESTART_BASE},
0 commit comments