@@ -26,7 +26,6 @@ static OtaState otaState;
2626#endif // COMPILE_OTA_AUTO
2727
2828bool 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, ¤tVersion[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