mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-07 16:23:38 +03:00
Add an option to reboot on failed update
This commit is contained in:
parent
03a2b4808b
commit
2e08c5d797
@ -358,10 +358,12 @@ uint32_t EspClass::getFreeSketchSpace() {
|
|||||||
return freeSpaceEnd - freeSpaceStart;
|
return freeSpaceEnd - freeSpaceStart;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EspClass::updateSketch(Stream& in, uint32_t size) {
|
bool EspClass::updateSketch(Stream& in, uint32_t size, bool restartOnFail) {
|
||||||
|
|
||||||
if (size > getFreeSketchSpace())
|
if (size > getFreeSketchSpace()){
|
||||||
|
if(restartOnFail) ESP.restart();
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t usedSize = getSketchSize();
|
uint32_t usedSize = getSketchSize();
|
||||||
uint32_t freeSpaceStart = (usedSize + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1));
|
uint32_t freeSpaceStart = (usedSize + FLASH_SECTOR_SIZE - 1) & (~(FLASH_SECTOR_SIZE - 1));
|
||||||
@ -374,8 +376,10 @@ bool EspClass::updateSketch(Stream& in, uint32_t size) {
|
|||||||
noInterrupts();
|
noInterrupts();
|
||||||
int rc = SPIEraseAreaEx(freeSpaceStart, roundedSize);
|
int rc = SPIEraseAreaEx(freeSpaceStart, roundedSize);
|
||||||
interrupts();
|
interrupts();
|
||||||
if (rc)
|
if (rc){
|
||||||
|
if(restartOnFail) ESP.restart();
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_SERIAL
|
#ifdef DEBUG_SERIAL
|
||||||
DEBUG_SERIAL.println("erase done");
|
DEBUG_SERIAL.println("erase done");
|
||||||
@ -397,12 +401,14 @@ bool EspClass::updateSketch(Stream& in, uint32_t size) {
|
|||||||
#ifdef DEBUG_SERIAL
|
#ifdef DEBUG_SERIAL
|
||||||
DEBUG_SERIAL.println("stream read failed");
|
DEBUG_SERIAL.println("stream read failed");
|
||||||
#endif
|
#endif
|
||||||
|
if(restartOnFail) ESP.restart();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(addr == freeSpaceStart) {
|
if(addr == freeSpaceStart) {
|
||||||
// check for valid first magic byte
|
// check for valid first magic byte
|
||||||
if(*((uint8 *) buffer.get()) != 0xE9) {
|
if(*((uint8 *) buffer.get()) != 0xE9) {
|
||||||
|
if(restartOnFail) ESP.restart();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -414,6 +420,7 @@ bool EspClass::updateSketch(Stream& in, uint32_t size) {
|
|||||||
#ifdef DEBUG_SERIAL
|
#ifdef DEBUG_SERIAL
|
||||||
DEBUG_SERIAL.println("write failed");
|
DEBUG_SERIAL.println("write failed");
|
||||||
#endif
|
#endif
|
||||||
|
if(restartOnFail) ESP.restart();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ class EspClass {
|
|||||||
|
|
||||||
uint32_t getSketchSize();
|
uint32_t getSketchSize();
|
||||||
uint32_t getFreeSketchSpace();
|
uint32_t getFreeSketchSpace();
|
||||||
bool updateSketch(Stream& in, uint32_t size);
|
bool updateSketch(Stream& in, uint32_t size, bool restartOnFail = false);
|
||||||
|
|
||||||
String getResetInfo();
|
String getResetInfo();
|
||||||
struct rst_info * getResetInfoPtr();
|
struct rst_info * getResetInfoPtr();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user