Skip to content

Commit d554418

Browse files
authored
Merge pull request #422 from sparkfun/Fix_#419
Fix #419
2 parents 4a74690 + a53686a commit d554418

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

Firmware/RTK_Everywhere/MQTT_Client.ino

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,9 @@ void mqttClientReceiveMessage(int messageSize)
457457

458458
settings.pointPerfectNextKeyDuration = (1000LL * 60 * 60 * 24 * 28) - 1; // Assume next key duration is 28 days
459459

460-
settings.lastKeyAttempt = rtc.getEpoch(); // Mark it
461-
460+
if (online.rtc)
461+
settings.lastKeyAttempt = rtc.getEpoch(); // Mark it - but only if RTC is online
462+
462463
recordSystemSettings(); // Record these settings to unit
463464

464465
if (settings.debugCorrections == true)

Firmware/RTK_Everywhere/menuPP.ino

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

12151215
void updateProvisioning()
12161216
{
@@ -1229,14 +1229,15 @@ void updateProvisioning()
12291229
default:
12301230
case PROVISIONING_OFF:
12311231
{
1232-
provisioningStartTime = millis(); // Record the start time so we can timeout
1232+
provisioningStartTime_millis = millis(); // Record the start time so we can timeout
12331233
provisioningSetState(PROVISIONING_WAIT_RTC);
12341234
}
12351235
break;
12361236
case PROVISIONING_WAIT_RTC:
12371237
{
12381238
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))
12401241
|| (settings.requestKeyUpdate))
12411242
provisioningSetState(PROVISIONING_NOT_STARTED);
12421243
}
@@ -1258,6 +1259,7 @@ void updateProvisioning()
12581259
systemPrintln("Invalid certificates or keys. Starting provisioning");
12591260
provisioningSetState(PROVISIONING_CHECK_NETWORK);
12601261
}
1262+
// If RTC is not online, we have to skip PROVISIONING_CHECK_ATTEMPT
12611263
else if (!online.rtc)
12621264
{
12631265
if (settings.debugPpCertificate)
@@ -1266,21 +1268,21 @@ void updateProvisioning()
12661268
}
12671269
else
12681270
{
1269-
// Determine days until next key expires
1271+
// RTC is online. Determine days until next key expires
12701272
int daysRemaining =
12711273
daysFromEpoch(settings.pointPerfectNextKeyStart + settings.pointPerfectNextKeyDuration + 1);
12721274

12731275
if (settings.debugPpCertificate)
12741276
systemPrintf("Days until keys expire: %d\r\n", daysRemaining);
12751277

12761278
if (daysRemaining > 28)
1277-
provisioningSetState(PROVISIONING_KEYS_REMAINING);
1279+
provisioningSetState(PROVISIONING_KEYS_REMAINING); // Don't need new keys
12781280
else
1279-
provisioningSetState(PROVISIONING_CHECK_ATTEMPT);
1281+
provisioningSetState(PROVISIONING_CHECK_ATTEMPT); // Do need new keys
12801282
}
12811283
}
12821284
break;
1283-
case PROVISIONING_CHECK_ATTEMPT:
1285+
case PROVISIONING_CHECK_ATTEMPT: // Requires RTC to be online
12841286
{
12851287
// When did we last try to get keys? Attempt every 24 hours - or always for DEVELOPER
12861288
//if (rtc.getEpoch() - settings.lastKeyAttempt > ( ENABLE_DEVELOPER ? 0 : (60 * 60 * 24)))
@@ -1317,22 +1319,22 @@ void updateProvisioning()
13171319
recordSystemSettings(); // Record these settings to unit
13181320
ztpResponse = ZTP_NOT_STARTED; // HTTP_Client will update this
13191321
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
13211323
paintGettingKeys();
13221324
provisioningSetState(PROVISIONING_STARTED);
13231325
}
13241326
case PROVISIONING_STARTED:
13251327
{
1326-
if (millis() > (provisioningStartTime + provisioningTimeout))
1328+
if (millis() > (provisioningStartTime_millis + provisioningTimeout_ms))
13271329
{
13281330
httpClientModeNeeded = false; // Tell HTTP_Client to give up. (But it probably already has...)
13291331
paintKeyUpdateFail(5000);
13301332
provisioningSetState(PROVISIONING_KEYS_REMAINING);
13311333
}
13321334
else if (ztpResponse == ZTP_SUCCESS)
13331335
{
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
13361338
provisioningSetState(PROVISIONING_KEYS_REMAINING);
13371339
}
13381340
else if (ztpResponse == ZTP_DEACTIVATED)
@@ -1356,7 +1358,7 @@ void updateProvisioning()
13561358
"subscription. Please reference device ID: %s\r\n",
13571359
landingPageUrl, hardwareID);
13581360

1359-
httpClientModeNeeded = false; // Tell HTTP_Client to give up. (But it probably already has...)
1361+
httpClientModeNeeded = false; // Tell HTTP_Client to give up
13601362
displayAccountExpired(5000);
13611363

13621364
provisioningSetState(PROVISIONING_KEYS_REMAINING);
@@ -1382,7 +1384,7 @@ void updateProvisioning()
13821384
"activated. Please reference device ID: %s\r\n",
13831385
landingPageUrl, hardwareID);
13841386

1385-
httpClientModeNeeded = false; // Tell HTTP_Client to give up. (But it probably already has...)
1387+
httpClientModeNeeded = false; // Tell HTTP_Client to give up
13861388
displayNotListed(5000);
13871389

13881390
provisioningSetState(PROVISIONING_KEYS_REMAINING);
@@ -1398,7 +1400,7 @@ void updateProvisioning()
13981400
"[email protected] for more assistance. Please reference device ID: %s\r\n",
13991401
hardwareID);
14001402

1401-
httpClientModeNeeded = false; // Tell HTTP_Client to give up. (But it probably already has...)
1403+
httpClientModeNeeded = false; // Tell HTTP_Client to give up
14021404
displayAlreadyRegistered(5000);
14031405

14041406
provisioningSetState(PROVISIONING_KEYS_REMAINING);
@@ -1407,7 +1409,7 @@ void updateProvisioning()
14071409
{
14081410
systemPrintln("updateProvisioning: ZTP_UNKNOWN_ERROR");
14091411

1410-
httpClientModeNeeded = false; // Tell HTTP_Client to give up. (But it probably already has...)
1412+
httpClientModeNeeded = false; // Tell HTTP_Client to give up
14111413

14121414
provisioningSetState(PROVISIONING_KEYS_REMAINING);
14131415
}
@@ -1439,24 +1441,21 @@ void updateProvisioning()
14391441

14401442
gnssApplyPointPerfectKeys(); // Send current keys, if available, to GNSS
14411443

1444+
provisioningStartTime_millis = millis(); // Record the time so we can restart after 24 hours
14421445
provisioningSetState(PROVISIONING_WAIT_ATTEMPT);
14431446
}
14441447
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.
14461449
{
14471450
if (settings.requestKeyUpdate)
1448-
provisioningSetState(PROVISIONING_STARTING);
1451+
provisioningSetState(PROVISIONING_CHECK_REMAINING);
14491452
else if (!settings.enablePointPerfectCorrections || !settings.autoKeyRenewal)
14501453
provisioningSetState(PROVISIONING_OFF);
14511454
// 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))))
14531456
// 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);
14601459
}
14611460
break;
14621461
}

0 commit comments

Comments
 (0)