@@ -12,14 +12,9 @@ void menuFirmware()
1212 if (btPrintEcho == true )
1313 systemPrintln (" Firmware update not available while configuration over Bluetooth is active" );
1414
15- char currentVersion[20 ];
16- if (enableRCFirmware == false )
17- snprintf (currentVersion, sizeof (currentVersion), " %d.%d" , FIRMWARE_VERSION_MAJOR, FIRMWARE_VERSION_MINOR);
18- else
19- snprintf (currentVersion, sizeof (currentVersion), " %d.%d-%s" , FIRMWARE_VERSION_MAJOR, FIRMWARE_VERSION_MINOR,
20- __DATE__);
21-
22- systemPrintf (" Current firmware: v%s\r\n " , currentVersion);
15+ char currentVersion[21 ];
16+ getFirmwareVersion (currentVersion, sizeof (currentVersion), enableRCFirmware);
17+ systemPrintf (" Current firmware: %s\r\n " , currentVersion);
2318
2419 if (strlen (reportedVersion) > 0 )
2520 {
@@ -60,15 +55,9 @@ void menuFirmware()
6055 if (otaCheckVersion (reportedVersion, sizeof (reportedVersion)))
6156 {
6257 // We got a version number, now determine if it's newer or not
63- char currentVersion[20 ];
64- if (enableRCFirmware == false )
65- snprintf (currentVersion, sizeof (currentVersion), " %d.%d" , FIRMWARE_VERSION_MAJOR,
66- FIRMWARE_VERSION_MINOR);
67- else
68- snprintf (currentVersion, sizeof (currentVersion), " %d.%d-%s" , FIRMWARE_VERSION_MAJOR,
69- FIRMWARE_VERSION_MINOR, __DATE__);
70-
71- if (isReportedVersionNewer (reportedVersion, currentVersion) == true )
58+ char currentVersion[21 ];
59+ getFirmwareVersion (currentVersion, sizeof (currentVersion), enableRCFirmware);
60+ if (isReportedVersionNewer (reportedVersion, ¤tVersion[1 ]) == true )
7261 {
7362 log_d (" New version detected" );
7463 newOTAFirmwareAvailable = true ;
@@ -97,15 +86,9 @@ void menuFirmware()
9786 if (otaCheckVersion (reportedVersion, sizeof (reportedVersion)))
9887 {
9988 // We got a version number, now determine if it's newer or not
100- char currentVersion[20 ];
101- if (enableRCFirmware == false )
102- snprintf (currentVersion, sizeof (currentVersion), " %d.%d" , FIRMWARE_VERSION_MAJOR,
103- FIRMWARE_VERSION_MINOR);
104- else
105- snprintf (currentVersion, sizeof (currentVersion), " %d.%d-%s" , FIRMWARE_VERSION_MAJOR,
106- FIRMWARE_VERSION_MINOR, __DATE__);
107-
108- if (isReportedVersionNewer (reportedVersion, currentVersion) == true )
89+ char currentVersion[21 ];
90+ getFirmwareVersion (currentVersion, sizeof (currentVersion), enableRCFirmware);
91+ if (isReportedVersionNewer (reportedVersion, ¤tVersion[1 ]) == true )
10992 {
11093 log_d (" New version detected" );
11194 newOTAFirmwareAvailable = true ;
@@ -463,6 +446,39 @@ void updateFromSD(const char *firmwareFileName)
463446 systemPrintln (" Firmware update failed. Please try again." );
464447}
465448
449+ // Format the firmware version
450+ void formatFirmwareVersion (uint8_t major, uint8_t minor, char * buffer, int bufferLength, bool includeDate)
451+ {
452+ char prefix;
453+
454+ // Construct the full or release candidate version number
455+ prefix = ENABLE_DEVELOPER ? ' d' : ' v' ;
456+ if (enableRCFirmware && (bufferLength >= 21 ))
457+ // 123456789012345678901
458+ // pxxx.yyy-dd-mmm-yyyy0
459+ snprintf (buffer, bufferLength, " %c%d.%d-%s" , prefix, major, minor, __DATE__);
460+
461+ // Construct a truncated version number
462+ else if (bufferLength >= 9 )
463+ // 123456789
464+ // pxxx.yyy0
465+ snprintf (buffer, bufferLength, " %c%d.%d" , prefix, major, minor);
466+
467+ // The buffer is too small for the version number
468+ else
469+ {
470+ systemPrintf (" ERROR: Buffer too small for version number!\r\n " );
471+ if (bufferLength > 0 )
472+ *buffer = 0 ;
473+ }
474+ }
475+
476+ // Get the current firmware version
477+ void getFirmwareVersion (char * buffer, int bufferLength, bool includeDate)
478+ {
479+ formatFirmwareVersion (FIRMWARE_VERSION_MAJOR, FIRMWARE_VERSION_MINOR, buffer, bufferLength, includeDate);
480+ }
481+
466482// Returns true if we successfully got the versionAvailable
467483// Modifies versionAvailable with OTA getVersion response
468484// Connects to WiFi as needed
@@ -474,14 +490,8 @@ bool otaCheckVersion(char *versionAvailable, uint8_t versionAvailableLength)
474490
475491 if (wifiConnect (10000 ) == true )
476492 {
477- char versionString[20 ];
478-
479- if (enableRCFirmware == false )
480- snprintf (versionString, sizeof (versionString), " %d.%d" , FIRMWARE_VERSION_MAJOR, FIRMWARE_VERSION_MINOR);
481- else
482- snprintf (versionString, sizeof (versionString), " %d.%d-%s" , FIRMWARE_VERSION_MAJOR, FIRMWARE_VERSION_MINOR,
483- __DATE__);
484-
493+ char versionString[21 ];
494+ getFirmwareVersion (versionString, sizeof (versionString), enableRCFirmware);
485495 systemPrintf (" Current firmware version: v%s\r\n " , versionString);
486496
487497 if (enableRCFirmware == false )
@@ -546,16 +556,14 @@ void otaUpdate()
546556
547557 if (wifiConnect (10000 ) == true )
548558 {
549- char versionString[20 ];
550- snprintf ( versionString, sizeof (versionString), " %d.%d " , 0 , 0 ); // Force update with version 0.0
559+ char versionString[9 ];
560+ formatFirmwareVersion ( 0 , 0 , versionString, sizeof (versionString), false );
551561
552562 ESP32OTAPull ota;
553563
554564 int response;
555- if (enableRCFirmware == false )
556- response = ota.CheckForOTAUpdate (OTA_FIRMWARE_JSON_URL, versionString, ESP32OTAPull::DONT_DO_UPDATE);
557- else
558- response = ota.CheckForOTAUpdate (OTA_RC_FIRMWARE_JSON_URL, versionString, ESP32OTAPull::DONT_DO_UPDATE);
565+ const char * url = enableRCFirmware ? OTA_RC_FIRMWARE_JSON_URL : OTA_FIRMWARE_JSON_URL;
566+ response = ota.CheckForOTAUpdate (url, &versionString[1 ], ESP32OTAPull::DONT_DO_UPDATE);
559567
560568 if (response == ESP32OTAPull::UPDATE_AVAILABLE)
561569 {
0 commit comments