From 06fa0b08cf8ed73ec4dd6567582ae0eb5e007083 Mon Sep 17 00:00:00 2001 From: Sathish Date: Mon, 23 Jul 2018 15:35:30 +0530 Subject: [PATCH 1/2] [OTA Timeout] Added ability set OTA timeout in the OTA client --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 2 +- libraries/ArduinoOTA/src/ArduinoOTA.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index 1e100991fdc..0c2b71513b1 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -261,7 +261,7 @@ void ArduinoOTAClass::_runUpdate() { uint32_t written = 0, total = 0, tried = 0; while (!Update.isFinished() && client.connected()) { - size_t waited = 1000; + size_t waited = OTA_TIMEOUT_DURATION_MS; size_t available = client.available(); while (!available && waited){ delay(1); diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.h b/libraries/ArduinoOTA/src/ArduinoOTA.h index ee8d589702f..f4e2f640663 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.h +++ b/libraries/ArduinoOTA/src/ArduinoOTA.h @@ -7,6 +7,9 @@ #define INT_BUFFER_SIZE 16 +#ifndef OTA_TIMEOUT_DURATION_MS +#define OTA_TIMEOUT_DURATION_MS 1000 +#endif typedef enum { OTA_IDLE, From beb81d1b2a8fc7bc46a94473a5c001a61b5b1796 Mon Sep 17 00:00:00 2001 From: Sathish Date: Tue, 24 Jul 2018 16:01:32 +0530 Subject: [PATCH 2/2] [OTA Timeout] Changed to method instead of defined value --- libraries/ArduinoOTA/src/ArduinoOTA.cpp | 12 +++++++++--- libraries/ArduinoOTA/src/ArduinoOTA.h | 15 +++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.cpp b/libraries/ArduinoOTA/src/ArduinoOTA.cpp index 0c2b71513b1..5df367d5873 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.cpp +++ b/libraries/ArduinoOTA/src/ArduinoOTA.cpp @@ -9,7 +9,7 @@ #include "Update.h" -//#define OTA_DEBUG Serial +// #define OTA_DEBUG Serial ArduinoOTAClass::ArduinoOTAClass() : _port(0) @@ -20,6 +20,7 @@ ArduinoOTAClass::ArduinoOTAClass() , _size(0) , _cmd(0) , _ota_port(0) +, _ota_timeout(1000) , _start_callback(NULL) , _end_callback(NULL) , _error_callback(NULL) @@ -260,8 +261,9 @@ void ArduinoOTAClass::_runUpdate() { } uint32_t written = 0, total = 0, tried = 0; + while (!Update.isFinished() && client.connected()) { - size_t waited = OTA_TIMEOUT_DURATION_MS; + size_t waited = _ota_timeout; size_t available = client.available(); while (!available && waited){ delay(1); @@ -387,6 +389,10 @@ int ArduinoOTAClass::getCommand() { return _cmd; } +void ArduinoOTAClass::setTimeout(int timeoutInMillis) { + _ota_timeout = timeoutInMillis; +} + #if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_ARDUINOOTA) ArduinoOTAClass ArduinoOTA; -#endif +#endif \ No newline at end of file diff --git a/libraries/ArduinoOTA/src/ArduinoOTA.h b/libraries/ArduinoOTA/src/ArduinoOTA.h index f4e2f640663..db0ead631db 100644 --- a/libraries/ArduinoOTA/src/ArduinoOTA.h +++ b/libraries/ArduinoOTA/src/ArduinoOTA.h @@ -7,10 +7,6 @@ #define INT_BUFFER_SIZE 16 -#ifndef OTA_TIMEOUT_DURATION_MS -#define OTA_TIMEOUT_DURATION_MS 1000 -#endif - typedef enum { OTA_IDLE, OTA_WAITAUTH, @@ -28,9 +24,9 @@ typedef enum { class ArduinoOTAClass { public: - typedef std::function THandlerFunction; - typedef std::function THandlerFunction_Error; - typedef std::function THandlerFunction_Progress; + typedef std::function THandlerFunction; + typedef std::function THandlerFunction_Error; + typedef std::function THandlerFunction_Progress; ArduinoOTAClass(); ~ArduinoOTAClass(); @@ -78,6 +74,8 @@ class ArduinoOTAClass //Gets update command type after OTA has started. Either U_FLASH or U_SPIFFS int getCommand(); + void setTimeout(int timeoutInMillis); + private: int _port; String _password; @@ -91,6 +89,7 @@ class ArduinoOTAClass int _size; int _cmd; int _ota_port; + int _ota_timeout; IPAddress _ota_ip; String _md5; @@ -109,4 +108,4 @@ class ArduinoOTAClass extern ArduinoOTAClass ArduinoOTA; #endif -#endif /* __ARDUINO_OTA_H */ +#endif /* __ARDUINO_OTA_H */ \ No newline at end of file