From 6aaa63c82a18515b7543a24e5673366e8a8f5084 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 5 Feb 2024 21:43:00 +0100 Subject: [PATCH 1/2] Backport: ArduinoOTA upload intermittent failure fixed Backport of #4657 --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index fe85580f566..ee9c3e95301 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -287,7 +287,7 @@ void ArduinoOTAClass::_runUpdate() { if (!waited){ if(written && tried++ < 3){ log_i("Try[%u]: %u", tried, written); - if(!client.printf("%u", written)){ + if(!client.printf("%lu", written)){ log_e("failed to respond"); _state = OTA_IDLE; break; @@ -315,6 +315,10 @@ void ArduinoOTAClass::_runUpdate() { size_t r = client.read(buf, available); if(r != available){ log_w("didn't read enough! %u != %u", r, available); + if((int32_t) r<0) { + delay(1); + continue; //let's not try to write 4 gigabytes when client.read returns -1 + } } written = Update.write(buf, r); @@ -322,7 +326,7 @@ void ArduinoOTAClass::_runUpdate() { if(written != r){ log_w("didn't write enough! %u != %u", written, r); } - if(!client.printf("%u", written)){ + if(!client.printf("%lu", written)){ log_w("failed to respond"); } total += written; From 244f7d861d7ff13912fce28443a412ac2642a560 Mon Sep 17 00:00:00 2001 From: Jason2866 <24528715+Jason2866@users.noreply.github.com> Date: Mon, 5 Feb 2024 21:48:35 +0100 Subject: [PATCH 2/2] Fix compile error --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index ee9c3e95301..a32cba6fa29 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -287,7 +287,7 @@ void ArduinoOTAClass::_runUpdate() { if (!waited){ if(written && tried++ < 3){ log_i("Try[%u]: %u", tried, written); - if(!client.printf("%lu", written)){ + if(!client.printf("%u", written)){ log_e("failed to respond"); _state = OTA_IDLE; break; @@ -326,7 +326,7 @@ void ArduinoOTAClass::_runUpdate() { if(written != r){ log_w("didn't write enough! %u != %u", written, r); } - if(!client.printf("%lu", written)){ + if(!client.printf("%u", written)){ log_w("failed to respond"); } total += written;