Skip to content

Commit

Permalink
Fix HTTPUpdate flash size check and add SPIFFS size check (#2161)
Browse files Browse the repository at this point in the history
* Fix error in PR #2048: if ::available() is called before ::connect() _rxBuffer is not initialised

* Fixed flash size check and added SPIFFS size check

* Rewriting ESP.getFreeSketchSpace(), moving code from HTTPUpdate.cpp
  • Loading branch information
Jeroen88 authored and me-no-dev committed Dec 6, 2018
1 parent bb7dea1 commit 884e417
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 8 deletions.
7 changes: 6 additions & 1 deletion cores/esp32/Esp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,12 @@ uint32_t EspClass::getSketchSize () {
}

uint32_t EspClass::getFreeSketchSpace () {
return sketchSize(SKETCH_SIZE_FREE);
const esp_partition_t* _partition = esp_ota_get_next_update_partition(NULL);
if(!_partition){
return 0;
}

return _partition->size;
}

uint8_t EspClass::getChipRevision(void)
Expand Down
29 changes: 22 additions & 7 deletions libraries/HTTPUpdate/src/HTTPUpdate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ String HTTPUpdate::getLastErrorString(void)
return "Verify Bin Header Failed";
case HTTP_UE_BIN_FOR_WRONG_FLASH:
return "New Binary Does Not Fit Flash Size";
case HTTP_UE_NO_PARTITION:
return "Partition Could Not be Found";
}

return String();
Expand Down Expand Up @@ -238,14 +240,25 @@ HTTPUpdateResult HTTPUpdate::handleUpdate(HTTPClient& http, const String& curren
if(len > 0) {
bool startUpdate = true;
if(spiffs) {
// To do size_t spiffsSize = ((size_t) &_SPIFFS_end - (size_t) &_SPIFFS_start);
// To do if(len > (int) spiffsSize) {
// To do log_e("spiffsSize to low (%d) needed: %d\n", spiffsSize, len);
// To do startUpdate = false;
// To do }
const esp_partition_t* _partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_SPIFFS, NULL);
if(!_partition){
_lastError = HTTP_UE_NO_PARTITION;
return HTTP_UPDATE_FAILED;
}

if(len > _partition->size) {
log_e("spiffsSize to low (%d) needed: %d\n", _partition->size, len);
startUpdate = false;
}
} else {
if(len > (int) ESP.getFreeSketchSpace()) {
log_e("FreeSketchSpace to low (%d) needed: %d\n", ESP.getFreeSketchSpace(), len);
int sketchFreeSpace = ESP.getFreeSketchSpace();
if(!sketchFreeSpace){
_lastError = HTTP_UE_NO_PARTITION;
return HTTP_UPDATE_FAILED;
}

if(len > sketchFreeSpace) {
log_e("FreeSketchSpace to low (%d) needed: %d\n", sketchFreeSpace, len);
startUpdate = false;
}
}
Expand Down Expand Up @@ -375,6 +388,8 @@ bool HTTPUpdate::runUpdate(Stream& in, uint32_t size, String md5, int command)
}
}

// To do: the SHA256 could be checked if the server sends it

if(Update.writeStream(in) != size) {
_lastError = Update.getError();
Update.printError(error);
Expand Down
1 change: 1 addition & 0 deletions libraries/HTTPUpdate/src/HTTPUpdate.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#define HTTP_UE_SERVER_FAULTY_MD5 (-105)
#define HTTP_UE_BIN_VERIFY_HEADER_FAILED (-106)
#define HTTP_UE_BIN_FOR_WRONG_FLASH (-107)
#define HTTP_UE_NO_PARTITION (-108)

enum HTTPUpdateResult {
HTTP_UPDATE_FAILED,
Expand Down

0 comments on commit 884e417

Please sign in to comment.