Skip to content

Commit bde6ab1

Browse files
authored
Merge pull request #6117 from PurpleAir/master
Improve timeout in Updater.
2 parents d013aad + 57fbd69 commit bde6ab1

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

cores/esp8266/Updater.cpp

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
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

cores/esp8266/Updater.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class UpdaterClass {
8383
Should be equal to the remaining bytes when called
8484
Usable for slow streams like Serial
8585
*/
86-
size_t writeStream(Stream &data);
86+
size_t writeStream(Stream &data, uint16_t streamTimeout = 60000);
8787

8888
/*
8989
If all bytes are written

0 commit comments

Comments
 (0)