@@ -1209,8 +1209,8 @@ void provisioningSetState(uint8_t newState)
1209
1209
}
1210
1210
}
1211
1211
1212
- unsigned long provisioningStartTime ;
1213
- const unsigned long provisioningTimeout = 120000 ;
1212
+ unsigned long provisioningStartTime_millis ;
1213
+ const unsigned long provisioningTimeout_ms = 120000 ;
1214
1214
1215
1215
void updateProvisioning ()
1216
1216
{
@@ -1229,14 +1229,15 @@ void updateProvisioning()
1229
1229
default :
1230
1230
case PROVISIONING_OFF:
1231
1231
{
1232
- provisioningStartTime = millis (); // Record the start time so we can timeout
1232
+ provisioningStartTime_millis = millis (); // Record the start time so we can timeout
1233
1233
provisioningSetState (PROVISIONING_WAIT_RTC);
1234
1234
}
1235
1235
break ;
1236
1236
case PROVISIONING_WAIT_RTC:
1237
1237
{
1238
1238
if ((online.rtc )
1239
- || (millis () > (provisioningStartTime + provisioningTimeout))
1239
+ // If RTC is not online after provisioningTimeout_ms, try to provision anyway
1240
+ || (millis () > (provisioningStartTime_millis + provisioningTimeout_ms))
1240
1241
|| (settings.requestKeyUpdate ))
1241
1242
provisioningSetState (PROVISIONING_NOT_STARTED);
1242
1243
}
@@ -1258,6 +1259,7 @@ void updateProvisioning()
1258
1259
systemPrintln (" Invalid certificates or keys. Starting provisioning" );
1259
1260
provisioningSetState (PROVISIONING_CHECK_NETWORK);
1260
1261
}
1262
+ // If RTC is not online, we have to skip PROVISIONING_CHECK_ATTEMPT
1261
1263
else if (!online.rtc )
1262
1264
{
1263
1265
if (settings.debugPpCertificate )
@@ -1266,21 +1268,21 @@ void updateProvisioning()
1266
1268
}
1267
1269
else
1268
1270
{
1269
- // Determine days until next key expires
1271
+ // RTC is online. Determine days until next key expires
1270
1272
int daysRemaining =
1271
1273
daysFromEpoch (settings.pointPerfectNextKeyStart + settings.pointPerfectNextKeyDuration + 1 );
1272
1274
1273
1275
if (settings.debugPpCertificate )
1274
1276
systemPrintf (" Days until keys expire: %d\r\n " , daysRemaining);
1275
1277
1276
1278
if (daysRemaining > 28 )
1277
- provisioningSetState (PROVISIONING_KEYS_REMAINING);
1279
+ provisioningSetState (PROVISIONING_KEYS_REMAINING); // Don't need new keys
1278
1280
else
1279
- provisioningSetState (PROVISIONING_CHECK_ATTEMPT);
1281
+ provisioningSetState (PROVISIONING_CHECK_ATTEMPT); // Do need new keys
1280
1282
}
1281
1283
}
1282
1284
break ;
1283
- case PROVISIONING_CHECK_ATTEMPT:
1285
+ case PROVISIONING_CHECK_ATTEMPT: // Requires RTC to be online
1284
1286
{
1285
1287
// When did we last try to get keys? Attempt every 24 hours - or always for DEVELOPER
1286
1288
// if (rtc.getEpoch() - settings.lastKeyAttempt > ( ENABLE_DEVELOPER ? 0 : (60 * 60 * 24)))
@@ -1317,22 +1319,22 @@ void updateProvisioning()
1317
1319
recordSystemSettings (); // Record these settings to unit
1318
1320
ztpResponse = ZTP_NOT_STARTED; // HTTP_Client will update this
1319
1321
httpClientModeNeeded = true ; // This will start the HTTP_Client
1320
- provisioningStartTime = millis (); // Record the start time so we can timeout
1322
+ provisioningStartTime_millis = millis (); // Record the start time so we can timeout
1321
1323
paintGettingKeys ();
1322
1324
provisioningSetState (PROVISIONING_STARTED);
1323
1325
}
1324
1326
case PROVISIONING_STARTED:
1325
1327
{
1326
- if (millis () > (provisioningStartTime + provisioningTimeout ))
1328
+ if (millis () > (provisioningStartTime_millis + provisioningTimeout_ms ))
1327
1329
{
1328
1330
httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1329
1331
paintKeyUpdateFail (5000 );
1330
1332
provisioningSetState (PROVISIONING_KEYS_REMAINING);
1331
1333
}
1332
1334
else if (ztpResponse == ZTP_SUCCESS)
1333
1335
{
1334
- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1335
- recordSystemSettings ();
1336
+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up
1337
+ recordSystemSettings (); // Make sure the new cert and keys are recorded
1336
1338
provisioningSetState (PROVISIONING_KEYS_REMAINING);
1337
1339
}
1338
1340
else if (ztpResponse == ZTP_DEACTIVATED)
@@ -1356,7 +1358,7 @@ void updateProvisioning()
1356
1358
" subscription. Please reference device ID: %s\r\n " ,
1357
1359
landingPageUrl, hardwareID);
1358
1360
1359
- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1361
+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up
1360
1362
displayAccountExpired (5000 );
1361
1363
1362
1364
provisioningSetState (PROVISIONING_KEYS_REMAINING);
@@ -1382,7 +1384,7 @@ void updateProvisioning()
1382
1384
" activated. Please reference device ID: %s\r\n " ,
1383
1385
landingPageUrl, hardwareID);
1384
1386
1385
- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1387
+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up
1386
1388
displayNotListed (5000 );
1387
1389
1388
1390
provisioningSetState (PROVISIONING_KEYS_REMAINING);
@@ -1398,7 +1400,7 @@ void updateProvisioning()
1398
1400
" [email protected] for more assistance. Please reference device ID: %s\r\n " ,
1399
1401
hardwareID);
1400
1402
1401
- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1403
+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up
1402
1404
displayAlreadyRegistered (5000 );
1403
1405
1404
1406
provisioningSetState (PROVISIONING_KEYS_REMAINING);
@@ -1407,7 +1409,7 @@ void updateProvisioning()
1407
1409
{
1408
1410
systemPrintln (" updateProvisioning: ZTP_UNKNOWN_ERROR" );
1409
1411
1410
- httpClientModeNeeded = false ; // Tell HTTP_Client to give up. (But it probably already has...)
1412
+ httpClientModeNeeded = false ; // Tell HTTP_Client to give up
1411
1413
1412
1414
provisioningSetState (PROVISIONING_KEYS_REMAINING);
1413
1415
}
@@ -1439,24 +1441,21 @@ void updateProvisioning()
1439
1441
1440
1442
gnssApplyPointPerfectKeys (); // Send current keys, if available, to GNSS
1441
1443
1444
+ provisioningStartTime_millis = millis (); // Record the time so we can restart after 24 hours
1442
1445
provisioningSetState (PROVISIONING_WAIT_ATTEMPT);
1443
1446
}
1444
1447
break ;
1445
- case PROVISIONING_WAIT_ATTEMPT:
1448
+ case PROVISIONING_WAIT_ATTEMPT: // We may still not have RTC... Or RTC may come online _during_ this state.
1446
1449
{
1447
1450
if (settings.requestKeyUpdate )
1448
- provisioningSetState (PROVISIONING_STARTING );
1451
+ provisioningSetState (PROVISIONING_CHECK_REMAINING );
1449
1452
else if (!settings.enablePointPerfectCorrections || !settings.autoKeyRenewal )
1450
1453
provisioningSetState (PROVISIONING_OFF);
1451
1454
// 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 * 24))))
1455
+ // else if (millis() > (provisioningStartTime_millis + ( ENABLE_DEVELOPER ? (1000 * 60 * 15 ) : (1000 * 60 * 60 * 24))))
1453
1456
// When did we last try to get keys? Attempt every 24 hours
1454
- else if (online.rtc && (rtc.getEpoch () - settings.lastKeyAttempt > (60 * 60 * 24 )))
1455
- {
1456
- settings.lastKeyAttempt = rtc.getEpoch (); // Mark it
1457
- recordSystemSettings (); // Record these settings to unit
1458
- provisioningSetState (PROVISIONING_STARTING);
1459
- }
1457
+ else if (millis () > (provisioningStartTime_millis + (1000 * 60 * 60 * 24 ))) // Don't use settings.lastKeyAttempt (#419)
1458
+ provisioningSetState (PROVISIONING_CHECK_REMAINING);
1460
1459
}
1461
1460
break ;
1462
1461
}
0 commit comments