diff --git a/src/Arduino_ESP32_OTA.cpp b/src/Arduino_ESP32_OTA.cpp index d8052f2..39dd327 100644 --- a/src/Arduino_ESP32_OTA.cpp +++ b/src/Arduino_ESP32_OTA.cpp @@ -312,8 +312,10 @@ void Arduino_ESP32_OTA::clean() } } -Arduino_ESP32_OTA::Error Arduino_ESP32_OTA::update() +Arduino_ESP32_OTA::Error Arduino_ESP32_OTA::verify() { + assert(_context != nullptr); + /* ... then finalize ... */ _context->calculatedCrc32 ^= 0xFFFFFFFF; @@ -323,14 +325,24 @@ Arduino_ESP32_OTA::Error Arduino_ESP32_OTA::update() return Error::OtaHeaderCrc; } + clean(); + + return Error::None; +} + +Arduino_ESP32_OTA::Error Arduino_ESP32_OTA::update() +{ + Arduino_ESP32_OTA::Error res = Error::None; + if(_context != nullptr && (res = verify()) != Error::None) { + return res; + } + if (!Update.end(true)) { DEBUG_ERROR("%s: Failure to apply OTA update", __FUNCTION__); return Error::OtaStorageEnd; } - clean(); - - return Error::None; + return res; } void Arduino_ESP32_OTA::reset() diff --git a/src/Arduino_ESP32_OTA.h b/src/Arduino_ESP32_OTA.h index b1fb8dd..f82c6e1 100644 --- a/src/Arduino_ESP32_OTA.h +++ b/src/Arduino_ESP32_OTA.h @@ -114,6 +114,7 @@ class Arduino_ESP32_OTA size_t downloadSize(); virtual void write_byte_to_flash(uint8_t data); + Arduino_ESP32_OTA::Error verify(); Arduino_ESP32_OTA::Error update(); void reset(); static bool isCapable();