Skip to content

Commit d7ef955

Browse files
committed
Make otaCheckVersion use network layer
1 parent 48a8be3 commit d7ef955

File tree

2 files changed

+46
-78
lines changed

2 files changed

+46
-78
lines changed

Firmware/RTK_Everywhere/RTK_Everywhere.ino

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ char otaRcFirmwareJsonUrl[OTA_FIRMWARE_JSON_URL_LENGTH];
334334
bool apConfigFirmwareUpdateInProcess; // Goes true once WiFi is connected and OTA pull begins
335335
unsigned int binBytesSent; // Tracks firmware bytes sent over WiFi OTA update via AP config.
336336

337+
char otaReportedVersion[50];
337338
bool otaRequestFirmwareVersionCheck = false;
338339
bool otaRequestFirmwareUpdate = false;
339340

Firmware/RTK_Everywhere/menuFirmware.ino

Lines changed: 45 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ static OtaState otaState;
2626
#endif // COMPILE_OTA_AUTO
2727

2828
bool newOTAFirmwareAvailable = false;
29-
char otaReportedVersion[50];
3029

3130
//----------------------------------------
3231
// Menu
@@ -433,85 +432,52 @@ bool otaCheckVersion(char *versionAvailable, uint8_t versionAvailableLength)
433432
{
434433
bool gotVersion = false;
435434
#ifdef COMPILE_NETWORK
436-
bool wasInAPmode;
437435

438436
if (networkIsOnline() == false)
439437
{
440-
if (wifiNetworkCount() == 0)
441-
systemPrintln("Error: Please enter at least one SSID before checking for new firmware");
442-
else
443-
systemPrintln("Error: Network not available!");
438+
systemPrintln("Error: Network not available!");
439+
return (false);
444440
}
445-
else
446-
{
447-
// Determine if WiFi is running
448-
bool wifiRunning = WiFi.STA.started() || WiFi.STA.linkUp() || WiFi.STA.connected();
449-
450-
wasInAPmode = false;
451-
if (networkIsOnline() || (wifiConnect(settings.wifiConnectTimeoutMs, true, &wasInAPmode) ==
452-
true)) // Use WIFI_AP_STA if already in WIFI_AP mode
453-
{
454-
char versionString[21];
455-
getFirmwareVersion(versionString, sizeof(versionString), enableRCFirmware);
456-
systemPrintf("Current firmware version: %s\r\n", versionString);
457-
458-
const char *url = otaGetUrl();
459-
systemPrintf("Checking to see if an update is available from %s\r\n", url);
460441

461-
ESP32OTAPull ota;
442+
// Create a string of the unit's current firmware version
443+
char currentVersion[21];
444+
getFirmwareVersion(currentVersion, sizeof(currentVersion), enableRCFirmware);
462445

463-
int response = ota.CheckForOTAUpdate(url, versionString, ESP32OTAPull::DONT_DO_UPDATE);
446+
systemPrintf("Current firmware version: %s\r\n", currentVersion);
464447

465-
// We don't care if the library thinks the available firmware is newer, we just need a successful JSON parse
466-
if (response == ESP32OTAPull::UPDATE_AVAILABLE || response == ESP32OTAPull::NO_UPDATE_AVAILABLE)
467-
{
468-
gotVersion = true;
448+
const char *url = otaGetUrl();
449+
if (settings.debugFirmwareUpdate)
450+
systemPrintf("Checking to see if an update is available from %s\r\n", url);
469451

470-
// Call getVersion after original inquiry
471-
String otaVersion = ota.GetVersion();
472-
otaVersion.toCharArray(versionAvailable, versionAvailableLength);
473-
}
474-
else if (response == ESP32OTAPull::HTTP_FAILED)
475-
{
476-
systemPrintln("Firmware server not available");
477-
}
478-
else
479-
{
480-
systemPrintln("OTA failed");
481-
}
452+
ESP32OTAPull ota;
482453

483-
// If we were in WIFI_AP mode, return to WIFI_AP mode
484-
// There may be some overlap with systemState STATE_WIFI_CONFIG ? Not sure...
485-
if (wasInAPmode)
486-
wifiSetApMode();
454+
int response = ota.CheckForOTAUpdate(url, currentVersion, ESP32OTAPull::DONT_DO_UPDATE);
487455

488-
if (systemState != STATE_WIFI_CONFIG)
489-
{
490-
// WIFI_STOP() turns off the entire radio including the webserver. We need to turn off Station mode
491-
// only. For now, unit exits AP mode via reset so if we are in AP config mode, leave WiFi Station
492-
// running.
456+
// We don't care if the library thinks the available firmware is newer, we just need a successful JSON parse
457+
if (response == ESP32OTAPull::UPDATE_AVAILABLE || response == ESP32OTAPull::NO_UPDATE_AVAILABLE)
458+
{
459+
gotVersion = true;
493460

494-
// If WiFi was originally off, turn it off again
495-
if (wifiRunning == false)
496-
WIFI_STOP();
497-
}
498-
}
499-
else
500-
{
501-
systemPrintln("Network not available for OTA!");
502-
}
461+
// Call getVersion after original inquiry
462+
String otaVersion = ota.GetVersion();
463+
otaVersion.toCharArray(versionAvailable, versionAvailableLength);
464+
}
465+
else if (response == ESP32OTAPull::HTTP_FAILED)
466+
{
467+
systemPrintln("Firmware server not available");
468+
}
469+
else
470+
{
471+
systemPrintln("OTA failed");
503472
}
504-
505-
if (gotVersion == true)
506-
log_d("Available OTA firmware version: %s\r\n", versionAvailable);
507473

508474
#endif // COMPILE_NETWORK
509475
return (gotVersion);
510476
}
511477

512-
// Force updates firmware using OTA pull
478+
// Updates firmware using OTA pull
513479
// Exits by either updating firmware and resetting, or failing to connect
514-
void overTheAirUpdate()
480+
void otaUpdateFirmware()
515481
{
516482
#ifdef COMPILE_NETWORK
517483
char versionString[9];
@@ -567,7 +533,7 @@ void otaForcedUpdate()
567533

568534
if ((networkIsOnline) || (wifiConnect(settings.wifiConnectTimeoutMs, true, &wasInAPmode) ==
569535
true)) // Use WIFI_AP_STA if already in WIFI_AP mode
570-
overTheAirUpdate();
536+
otaUpdateFirmware();
571537

572538
// Update failed.
573539
// If we were in WIFI_AP mode, return to WIFI_AP mode
@@ -681,12 +647,15 @@ bool isReportedVersionNewer(char *reportedVersion, char *currentVersion)
681647
breakVersionIntoParts(reportedVersion, &reportedVersionNumberMajor, &reportedVersionNumberMinor, &reportedYear,
682648
&reportedMonth, &reportedDay);
683649

684-
log_d("currentVersion (%s): %d.%d %d %d %d", currentVersion, currentVersionNumberMajor, currentVersionNumberMinor,
685-
currentYear, currentMonth, currentDay);
686-
log_d("reportedVersion (%s): %d.%d %d %d %d", reportedVersion, reportedVersionNumberMajor,
687-
reportedVersionNumberMinor, reportedYear, reportedMonth, reportedDay);
688-
if (enableRCFirmware)
689-
log_d("RC firmware enabled");
650+
if (settings.debugFirmwareUpdate)
651+
{
652+
systemPrintf("currentVersion (%s): %d.%d %d %d %d\r\n", currentVersion, currentVersionNumberMajor,
653+
currentVersionNumberMinor, currentYear, currentMonth, currentDay);
654+
systemPrintf("reportedVersion (%s): %d.%d %d %d %d\r\n", reportedVersion, reportedVersionNumberMajor,
655+
reportedVersionNumberMinor, reportedYear, reportedMonth, reportedDay);
656+
if (enableRCFirmware)
657+
systemPrintln("RC firmware enabled");
658+
}
690659

691660
// Production firmware is named "2.6"
692661
// Release Candidate firmware is named "2.6-Dec 5 2022"
@@ -716,10 +685,7 @@ bool isReportedVersionNewer(char *reportedVersion, char *currentVersion)
716685
int currentVersionScore = currentDay + currentMonth * 100 + currentYear * 2000;
717686

718687
if (reportedVersionScore > currentVersionScore)
719-
{
720-
log_d("Reported version is greater");
721688
return (true);
722-
}
723689

724690
return (false);
725691
}
@@ -923,10 +889,6 @@ void otaUpdate()
923889
otaReportedVersion[0] = 0;
924890
if (otaCheckVersion(otaReportedVersion, sizeof(otaReportedVersion)))
925891
{
926-
// We got a version number, now determine if it's newer or not
927-
char currentVersion[21];
928-
getFirmwareVersion(currentVersion, sizeof(currentVersion), enableRCFirmware);
929-
930892
// If we are doing just a version check, set version number, turn off network request and stop machine
931893
if (otaRequestFirmwareVersionCheck == true)
932894
{
@@ -935,13 +897,18 @@ void otaUpdate()
935897
return;
936898
}
937899

900+
// Create a string of the unit's current firmware version
901+
char currentVersion[21];
902+
getFirmwareVersion(currentVersion, sizeof(currentVersion), enableRCFirmware);
903+
938904
// If we are doing a scheduled automatic update or a manually requested update, continue through the
939905
// state machine
940906

941-
// Allow update if locally compiled developer version
907+
// We got a version number, now determine if it's newer or not
942908
if ((isReportedVersionNewer(otaReportedVersion, &currentVersion[1]) == true) ||
943909
(currentVersion[0] == 'd') || (FIRMWARE_VERSION_MAJOR == 99))
944910
{
911+
// Allow update if locally compiled developer version
945912
if (settings.debugFirmwareUpdate)
946913
systemPrintf("Firmware update detected new firmware version %s\r\n", otaReportedVersion);
947914
otaSetState(OTA_STATE_UPDATE_FIRMWARE);
@@ -969,7 +936,7 @@ void otaUpdate()
969936
else
970937
{
971938
// Perform the firmware update
972-
overTheAirUpdate();
939+
otaUpdateFirmware();
973940
otaUpdateStop();
974941
}
975942
break;

0 commit comments

Comments
 (0)