ota.cpp: added a retry loop for write-to-flash
This commit is contained in:
parent
ed50a79297
commit
d80d1e24e9
@ -26,7 +26,7 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng
|
||||
|
||||
[common]
|
||||
; for release_version use max.10 chars total, use any decimal format like "a.b.c"
|
||||
release_version = 1.4.33
|
||||
release_version = 1.4.34
|
||||
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
||||
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
||||
debug_level = 0
|
||||
|
36
src/ota.cpp
36
src/ota.cpp
@ -112,7 +112,7 @@ void processOTAUpdate(const String &version) {
|
||||
}
|
||||
}
|
||||
|
||||
// ESP_LOGI(TAG, "Requesting: " + firmwarePath);
|
||||
ESP_LOGI(TAG, "Requesting %s", firmwarePath);
|
||||
|
||||
client.print(String("GET ") + firmwarePath + " HTTP/1.1\r\n");
|
||||
client.print(String("Host: ") + currentHost + "\r\n");
|
||||
@ -185,20 +185,33 @@ void processOTAUpdate(const String &version) {
|
||||
|
||||
// check whether we have everything for OTA update
|
||||
if (contentLength && isValidContentType) {
|
||||
if (Update.begin(contentLength)) {
|
||||
ESP_LOGI(TAG, "Starting OTA update. This will take some time to "
|
||||
"complete...");
|
||||
size_t written = Update.writeStream(client);
|
||||
|
||||
if (written == contentLength) {
|
||||
ESP_LOGI(TAG, "Written %d bytes successfully", written);
|
||||
} else {
|
||||
ESP_LOGI(TAG, "Written only %d of %d bytes, OTA update cancelled.",
|
||||
written, contentLength);
|
||||
// Retry??
|
||||
size_t written;
|
||||
|
||||
if (Update.begin(contentLength)) {
|
||||
|
||||
int i = FLASH_MAX_TRY;
|
||||
while ((i--) && (written != contentLength)) {
|
||||
|
||||
ESP_LOGI(TAG,
|
||||
"Starting OTA update, attempt %d of %d. This will take some "
|
||||
"time to complete...",
|
||||
i, FLASH_MAX_TRY);
|
||||
|
||||
written = Update.writeStream(client);
|
||||
|
||||
if (written == contentLength) {
|
||||
ESP_LOGI(TAG, "Written %d bytes successfully", written);
|
||||
break;
|
||||
} else {
|
||||
ESP_LOGI(TAG,
|
||||
"Written only %d of %d bytes, OTA update attempt cancelled.",
|
||||
written, contentLength);
|
||||
}
|
||||
}
|
||||
|
||||
if (Update.end()) {
|
||||
|
||||
if (Update.isFinished()) {
|
||||
ESP_LOGI(TAG, "OTA update completed. Rebooting to runmode.");
|
||||
ESP.restart();
|
||||
@ -209,6 +222,7 @@ void processOTAUpdate(const String &version) {
|
||||
} else {
|
||||
ESP_LOGI(TAG, "An error occurred. Error #: %d", Update.getError());
|
||||
}
|
||||
|
||||
} else {
|
||||
ESP_LOGI(TAG, "There isn't enough space to start OTA update");
|
||||
client.flush();
|
||||
|
@ -67,6 +67,7 @@
|
||||
|
||||
// OTA settings
|
||||
#define WIFI_MAX_TRY 20 // maximum number of wifi connect attempts for OTA update [default = 20]
|
||||
#define FLASH_MAX_TRY 3 // maximum number of attempts for writing update binary to flash [default = 3]
|
||||
|
||||
// LMIC settings
|
||||
// define hardware independent LMIC settings here, settings of standard library in /lmic/config.h will be ignored
|
||||
|
Loading…
Reference in New Issue
Block a user