diff --git a/src/Arduino_ESP32_OTA.cpp b/src/Arduino_ESP32_OTA.cpp index a914889..ec1cc1b 100644 --- a/src/Arduino_ESP32_OTA.cpp +++ b/src/Arduino_ESP32_OTA.cpp @@ -311,8 +311,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; @@ -322,14 +324,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 93c9e8f..3a4c473 100644 --- a/src/Arduino_ESP32_OTA.h +++ b/src/Arduino_ESP32_OTA.h @@ -101,6 +101,7 @@ class Arduino_ESP32_OTA int downloadProgress(); virtual void write_byte_to_flash(uint8_t data); + Arduino_ESP32_OTA::Error verify(); Arduino_ESP32_OTA::Error update(); void reset(); static bool isCapable();