1
1
#include " Updater.h"
2
2
#include " eboot_command.h"
3
3
#include < esp8266_peri.h>
4
+ #include < PolledTimeout.h>
4
5
#include " StackThunk.h"
5
6
6
7
// #define DEBUG_UPDATER Serial
@@ -476,7 +477,7 @@ bool UpdaterClass::_verifyEnd() {
476
477
return false ;
477
478
}
478
479
479
- size_t UpdaterClass::writeStream (Stream &data) {
480
+ size_t UpdaterClass::writeStream (Stream &data, uint16_t streamTimeout ) {
480
481
size_t written = 0 ;
481
482
size_t toRead = 0 ;
482
483
if (hasError () || !isRunning ())
@@ -489,6 +490,7 @@ size_t UpdaterClass::writeStream(Stream &data) {
489
490
_reset ();
490
491
return 0 ;
491
492
}
493
+ esp8266::polledTimeout::oneShotMs timeOut (streamTimeout);
492
494
if (_progress_callback) {
493
495
_progress_callback (0 , _size);
494
496
}
@@ -506,13 +508,15 @@ size_t UpdaterClass::writeStream(Stream &data) {
506
508
}
507
509
toRead = data.readBytes (_buffer + _bufferLen, bytesToRead);
508
510
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 ();
516
520
}
517
521
if (_ledPin != -1 ) {
518
522
digitalWrite (_ledPin, !_ledOn); // Switch LED off
0 commit comments