@@ -1209,8 +1209,8 @@ void provisioningSetState(uint8_t newState)
12091209 }
12101210}
12111211
1212- unsigned long provisioningStartTime ;
1213- const unsigned long provisioningTimeout = 120000 ;
1212+ unsigned long provisioningStartTime_millis ;
1213+ const unsigned long provisioningTimeout_ms = 120000 ;
12141214
12151215void updateProvisioning ()
12161216{
@@ -1228,12 +1228,14 @@ void updateProvisioning()
12281228 {
12291229 default :
12301230 case PROVISIONING_OFF: {
1231- provisioningStartTime = millis (); // Record the start time so we can timeout
1231+ provisioningStartTime_millis = millis (); // Record the start time so we can timeout
12321232 provisioningSetState (PROVISIONING_WAIT_RTC);
12331233 }
12341234 break ;
12351235 case PROVISIONING_WAIT_RTC: {
1236- if ((online.rtc ) || (millis () > (provisioningStartTime + provisioningTimeout)) || (settings.requestKeyUpdate ))
1236+ if ((online.rtc )
1237+ // If RTC is not online after provisioningTimeout_ms, try to provision anyway
1238+ || (millis () > (provisioningStartTime_millis + provisioningTimeout_ms)) || (settings.requestKeyUpdate ))
12371239 provisioningSetState (PROVISIONING_NOT_STARTED);
12381240 }
12391241 break ;
@@ -1269,17 +1271,17 @@ void updateProvisioning()
12691271 }
12701272 else
12711273 {
1272- // Determine days until next key expires
1274+ // RTC is online. Determine days until next key expires
12731275 int daysRemaining =
12741276 daysFromEpoch (settings.pointPerfectNextKeyStart + settings.pointPerfectNextKeyDuration + 1 );
12751277
12761278 if (settings.debugPpCertificate )
12771279 systemPrintf (" Days until keys expire: %d\r\n " , daysRemaining);
12781280
12791281 if (daysRemaining > 28 )
1280- provisioningSetState (PROVISIONING_KEYS_REMAINING);
1282+ provisioningSetState (PROVISIONING_KEYS_REMAINING); // Don't need new keys
12811283 else
1282- provisioningSetState (PROVISIONING_CHECK_ATTEMPT);
1284+ provisioningSetState (PROVISIONING_CHECK_ATTEMPT); // Do need new keys
12831285 }
12841286 }
12851287 break ;
@@ -1313,9 +1315,9 @@ void updateProvisioning()
13131315 }
13141316 break ;
13151317 case PROVISIONING_STARTING: {
1316- ztpResponse = ZTP_NOT_STARTED; // HTTP_Client will update this
1317- httpClientModeNeeded = true ; // This will start the HTTP_Client
1318- provisioningStartTime = millis (); // Record the start time so we can timeout
1318+ ztpResponse = ZTP_NOT_STARTED; // HTTP_Client will update this
1319+ httpClientModeNeeded = true ; // This will start the HTTP_Client
1320+ provisioningStartTime_millis = millis (); // Record the start time so we can timeout
13191321 paintGettingKeys ();
13201322 provisioningSetState (PROVISIONING_STARTED);
13211323 }
@@ -1329,8 +1331,8 @@ void updateProvisioning()
13291331 }
13301332 else if (ztpResponse == ZTP_SUCCESS)
13311333 {
1332- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1333- recordSystemSettings ();
1334+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up
1335+ recordSystemSettings (); // Make sure the new cert and keys are recorded
13341336 provisioningSetState (PROVISIONING_KEYS_REMAINING);
13351337 }
13361338 else if (ztpResponse == ZTP_DEACTIVATED)
@@ -1354,7 +1356,7 @@ void updateProvisioning()
13541356 " subscription. Please reference device ID: %s\r\n " ,
13551357 landingPageUrl, hardwareID);
13561358
1357- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1359+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up.
13581360 displayAccountExpired (5000 );
13591361
13601362 provisioningSetState (PROVISIONING_KEYS_REMAINING);
@@ -1380,7 +1382,7 @@ void updateProvisioning()
13801382 " activated. Please reference device ID: %s\r\n " ,
13811383 landingPageUrl, hardwareID);
13821384
1383- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1385+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up.
13841386 displayNotListed (5000 );
13851387
13861388 provisioningSetState (PROVISIONING_KEYS_REMAINING);
@@ -1396,7 +1398,7 @@ void updateProvisioning()
13961398 " support@sparkfun.com for more assistance. Please reference device ID: %s\r\n " ,
13971399 hardwareID);
13981400
1399- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1401+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up.
14001402 displayAlreadyRegistered (5000 );
14011403
14021404 provisioningSetState (PROVISIONING_KEYS_REMAINING);
@@ -1405,7 +1407,7 @@ void updateProvisioning()
14051407 {
14061408 systemPrintln (" updateProvisioning: ZTP_UNKNOWN_ERROR" );
14071409
1408- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1410+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up.
14091411
14101412 provisioningSetState (PROVISIONING_KEYS_REMAINING);
14111413 }
@@ -1449,15 +1451,12 @@ void updateProvisioning()
14491451 else if (!settings.enablePointPerfectCorrections || !settings.autoKeyRenewal )
14501452 provisioningSetState (PROVISIONING_OFF);
14511453 // When did we last try to get keys? Attempt every 24 hours - or every 15 mins for DEVELOPER
1452- // else if (online.rtc && (rtc.getEpoch() - settings.lastKeyAttempt > ( ENABLE_DEVELOPER ? (15 * 60) : (60 * 60
1453- // * 24))))
1454+ // else if (millis() > (provisioningStartTime_millis + ( ENABLE_DEVELOPER ? (1000 * 60 * 15 ) : (1000 * 60 * 60 *
1455+ // 24))))
14541456 // When did we last try to get keys? Attempt every 24 hours
1455- else if (online.rtc && (rtc.getEpoch () - settings.lastKeyAttempt > (60 * 60 * 24 )))
1456- {
1457- settings.lastKeyAttempt = rtc.getEpoch (); // Mark it
1458- recordSystemSettings (); // Record these settings to unit
1459- provisioningSetState (PROVISIONING_STARTING);
1460- }
1457+ else if (millis () >
1458+ (provisioningStartTime_millis + (1000 * 60 * 60 * 24 ))) // Don't use settings.lastKeyAttempt (#419)
1459+ provisioningSetState (PROVISIONING_CHECK_REMAINING);
14611460 }
14621461 break ;
14631462 }
0 commit comments