@@ -41,8 +41,7 @@ void menuFirmware()
41
41
systemPrintf (" e) Allow Beta Firmware: %s\r\n " , enableRCFirmware ? " Enabled" : " Disabled" );
42
42
43
43
if (settings.enableAutoFirmwareUpdate )
44
- systemPrintf (" i) Automatic firmware check minutes: %d\r\n " ,
45
- settings.autoFirmwareCheckMinutes );
44
+ systemPrintf (" i) Automatic firmware check minutes: %d\r\n " , settings.autoFirmwareCheckMinutes );
46
45
47
46
if (newOTAFirmwareAvailable)
48
47
systemPrintf (" u) Update to new firmware: v%s\r\n " , reportedVersion);
@@ -86,8 +85,9 @@ void menuFirmware()
86
85
char currentVersion[21 ];
87
86
getFirmwareVersion (currentVersion, sizeof (currentVersion), enableRCFirmware);
88
87
89
- // Allow update if locally compiled developer version
90
- if (isReportedVersionNewer (reportedVersion, ¤tVersion[1 ]) == true || FIRMWARE_VERSION_MAJOR == 99 )
88
+ // Allow update if locally compiled developer version
89
+ if (isReportedVersionNewer (reportedVersion, ¤tVersion[1 ]) == true ||
90
+ FIRMWARE_VERSION_MAJOR == 99 )
91
91
{
92
92
systemPrintln (" New version detected" );
93
93
newOTAFirmwareAvailable = true ;
@@ -108,7 +108,7 @@ void menuFirmware()
108
108
bool previouslyConnected = wifiIsConnected ();
109
109
110
110
bool bluetoothOriginallyConnected = false ;
111
- if (bluetoothState == BT_CONNECTED)
111
+ if (bluetoothState == BT_CONNECTED)
112
112
bluetoothOriginallyConnected = true ;
113
113
114
114
bluetoothStop (); // Stop Bluetooth to allow for SSL on the heap
@@ -144,10 +144,10 @@ void menuFirmware()
144
144
if (previouslyConnected == false )
145
145
WIFI_STOP ();
146
146
147
- if (bluetoothOriginallyConnected == true )
147
+ if (bluetoothOriginallyConnected == true )
148
148
bluetoothStart (); // Restart BT according to settings
149
149
}
150
- } // End wifiNetworkCount() check
150
+ } // End wifiNetworkCount() check
151
151
}
152
152
else if (incoming == ' c' && btPrintEcho == true )
153
153
{
@@ -159,14 +159,14 @@ void menuFirmware()
159
159
{
160
160
enableRCFirmware ^= 1 ;
161
161
strncpy (reportedVersion, " " , sizeof (reportedVersion) - 1 ); // Reset to force c) menu
162
+ newOTAFirmwareAvailable = false ;
162
163
}
163
164
164
165
else if ((incoming == ' i' ) && settings.enableAutoFirmwareUpdate )
165
166
{
166
167
systemPrint (" Enter minutes (1 - 999999) before next firmware check: " );
167
168
int minutes = getNumber (); // Returns EXIT, TIMEOUT, or long
168
- if ((minutes != INPUT_RESPONSE_GETNUMBER_EXIT) &&
169
- (minutes != INPUT_RESPONSE_GETNUMBER_TIMEOUT))
169
+ if ((minutes != INPUT_RESPONSE_GETNUMBER_EXIT) && (minutes != INPUT_RESPONSE_GETNUMBER_TIMEOUT))
170
170
{
171
171
if ((minutes < 1 ) || (minutes > 999999 ))
172
172
systemPrintln (" Error: Out of range (1 - 999999)" );
@@ -739,23 +739,30 @@ const char *otaPullErrorText(int code)
739
739
// Returns true if reportedVersion is newer than currentVersion
740
740
// Version number comes in as v2.7-Jan 5 2023
741
741
// 2.7-Jan 5 2023 is newer than v2.7-Jan 1 2023
742
+ // We can't use just the float number: v3.12 is a greater version than v3.9 but it is a smaller float number
742
743
bool isReportedVersionNewer (char *reportedVersion, char *currentVersion)
743
744
{
744
- float currentVersionNumber = 0.0 ;
745
+ int currentVersionNumberMajor = 0 ;
746
+ int currentVersionNumberMinor = 0 ;
745
747
int currentDay = 0 ;
746
748
int currentMonth = 0 ;
747
749
int currentYear = 0 ;
748
750
749
- float reportedVersionNumber = 0.0 ;
751
+ int reportedVersionNumberMajor = 0 ;
752
+ int reportedVersionNumberMinor = 0 ;
750
753
int reportedDay = 0 ;
751
754
int reportedMonth = 0 ;
752
755
int reportedYear = 0 ;
753
756
754
- breakVersionIntoParts (currentVersion, ¤tVersionNumber, ¤tYear, ¤tMonth, ¤tDay);
755
- breakVersionIntoParts (reportedVersion, &reportedVersionNumber, &reportedYear, &reportedMonth, &reportedDay);
757
+ breakVersionIntoParts (currentVersion, ¤tVersionNumberMajor, ¤tVersionNumberMinor, ¤tYear,
758
+ ¤tMonth, ¤tDay);
759
+ breakVersionIntoParts (reportedVersion, &reportedVersionNumberMajor, &reportedVersionNumberMinor, &reportedYear,
760
+ &reportedMonth, &reportedDay);
756
761
757
- log_d (" currentVersion: %f %d %d %d" , currentVersionNumber, currentYear, currentMonth, currentDay);
758
- log_d (" reportedVersion: %f %d %d %d" , reportedVersionNumber, reportedYear, reportedMonth, reportedDay);
762
+ log_d (" currentVersion (%s): %d.%d %d %d %d" , currentVersion, currentVersionNumberMajor, currentVersionNumberMinor,
763
+ currentYear, currentMonth, currentDay);
764
+ log_d (" reportedVersion (%s): %d.%d %d %d %d" , reportedVersion, reportedVersionNumberMajor,
765
+ reportedVersionNumberMinor, reportedYear, reportedMonth, reportedDay);
759
766
if (enableRCFirmware)
760
767
log_d (" RC firmware enabled" );
761
768
@@ -765,15 +772,20 @@ bool isReportedVersionNewer(char *reportedVersion, char *currentVersion)
765
772
// If the user is not using Release Candidate firmware, then check only the version number
766
773
if (enableRCFirmware == false )
767
774
{
768
- // Check only the version number
769
- if (reportedVersionNumber > currentVersionNumber)
775
+ if (reportedVersionNumberMajor > currentVersionNumberMajor)
776
+ return (true );
777
+ if (reportedVersionNumberMajor == currentVersionNumberMajor &&
778
+ reportedVersionNumberMinor > currentVersionNumberMinor)
770
779
return (true );
771
780
return (false );
772
781
}
773
782
774
783
// For RC firmware, compare firmware date as well
775
784
// Check version number
776
- if (reportedVersionNumber > currentVersionNumber)
785
+ if (reportedVersionNumberMajor > currentVersionNumberMajor)
786
+ return (true );
787
+ if (reportedVersionNumberMajor == currentVersionNumberMajor &&
788
+ reportedVersionNumberMinor > currentVersionNumberMinor)
777
789
return (true );
778
790
779
791
// Check which date is more recent
@@ -791,27 +803,28 @@ bool isReportedVersionNewer(char *reportedVersion, char *currentVersion)
791
803
}
792
804
793
805
// Version number comes in as v2.7-Jan 5 2023
794
- // Given a char string, break into version number, year, month, day
806
+ // Given a char string, break into version number major/minor , year, month, day
795
807
// Returns false if parsing failed
796
- bool breakVersionIntoParts (char *version, float *versionNumber, int *year, int *month, int *day)
808
+ bool breakVersionIntoParts (char *version, int *versionNumberMajor, int *versionNumberMinor, int *year, int *month,
809
+ int *day)
797
810
{
798
811
char monthStr[20 ];
799
812
int placed = 0 ;
800
813
801
814
if (enableRCFirmware == false )
802
815
{
803
- placed = sscanf (version, " %f " , versionNumber );
804
- if (placed != 1 )
816
+ placed = sscanf (version, " %d.%d " , versionNumberMajor, versionNumberMinor );
817
+ if (placed != 2 )
805
818
{
806
819
log_d (" Failed to sscanf basic" );
807
820
return (false ); // Something went wrong
808
821
}
809
822
}
810
823
else
811
824
{
812
- placed = sscanf (version, " %f -%s %d %d" , versionNumber , monthStr, day, year);
825
+ placed = sscanf (version, " %d.%d -%s %d %d" , versionNumberMajor, versionNumberMinor , monthStr, day, year);
813
826
814
- if (placed != 4 )
827
+ if (placed != 5 )
815
828
{
816
829
log_d (" Failed to sscanf RC" );
817
830
return (false ); // Something went wrong
0 commit comments