11#include " Updater.h"
22#include " eboot_command.h"
33#include < esp8266_peri.h>
4+ #include < PolledTimeout.h>
45#include " StackThunk.h"
56
67// #define DEBUG_UPDATER Serial
@@ -476,7 +477,7 @@ bool UpdaterClass::_verifyEnd() {
476477 return false ;
477478}
478479
479- size_t UpdaterClass::writeStream (Stream &data) {
480+ size_t UpdaterClass::writeStream (Stream &data, uint16_t streamTimeout ) {
480481 size_t written = 0 ;
481482 size_t toRead = 0 ;
482483 if (hasError () || !isRunning ())
@@ -489,6 +490,7 @@ size_t UpdaterClass::writeStream(Stream &data) {
489490 _reset ();
490491 return 0 ;
491492 }
493+ esp8266::polledTimeout::oneShotMs timeOut (streamTimeout);
492494 if (_progress_callback) {
493495 _progress_callback (0 , _size);
494496 }
@@ -506,13 +508,15 @@ size_t UpdaterClass::writeStream(Stream &data) {
506508 }
507509 toRead = data.readBytes (_buffer + _bufferLen, bytesToRead);
508510 if (toRead == 0 ) { // Timeout
509- delay (100 );
510- toRead = data.readBytes (_buffer + _bufferLen, bytesToRead);
511- if (toRead == 0 ) { // Timeout
512- _currentAddress = (_startAddress + _size);
513- _setError (UPDATE_ERROR_STREAM);
514- return written;
515- }
511+ if (timeOut) {
512+ _currentAddress = (_startAddress + _size);
513+ _setError (UPDATE_ERROR_STREAM);
514+ _reset ();
515+ return written;
516+ }
517+ delay (100 );
518+ } else {
519+ timeOut.reset ();
516520 }
517521 if (_ledPin != -1 ) {
518522 digitalWrite (_ledPin, !_ledOn); // Switch LED off
0 commit comments