OTA Flash erase bug... erased. release

This commit is contained in:
Sebastien
2019-11-12 18:00:49 -05:00
parent 1391897a3a
commit 7a3f78d8d2
4 changed files with 33 additions and 12 deletions

View File

@@ -102,6 +102,7 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
return ESP_OK;
}
#endif
esp_err_t err = ESP_OK;
bool bFound=false;
ESP_LOGI(TAG, "Looking for partition type %u",partition_subtype);
const esp_partition_t *partition;
@@ -115,10 +116,17 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
{
partition = (esp_partition_t *) esp_partition_get(it);
if(partition != NULL){
ESP_LOGI(TAG, "Found partition type %u",partition_subtype);
esp_ota_set_boot_partition(partition);
bFound=true;
set_status_message(WARNING, "Rebooting!");
ESP_LOGI(TAG, "Found application partition sub type %u",partition_subtype);
err=esp_ota_set_boot_partition(partition);
if(err!=ESP_OK){
ESP_LOGE(TAG,"Unable to set partition as active for next boot. %s",esp_err_to_name(err));
set_status_message(ERROR, "Unable to select partition for reboot.");
}
else{
bFound=true;
set_status_message(WARNING, "Rebooting!");
}
}
else
{

View File

@@ -6,6 +6,7 @@
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.
*/
//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
@@ -37,7 +38,7 @@
#include "esp_ota_ops.h"
#define OTA_FLASH_ERASE_BLOCK (1024*100)
#define OTA_FLASH_ERASE_BLOCK (4096*100)
static const char *TAG = "squeezelite-ota";
extern const uint8_t server_cert_pem_start[] asm("_binary_github_pem_start");
extern const uint8_t server_cert_pem_end[] asm("_binary_github_pem_end");
@@ -205,6 +206,7 @@ esp_err_t _erase_last_boot_app_partition(void)
{
uint16_t num_passes=0;
uint16_t remain_size=0;
uint16_t single_pass_size=0;
const esp_partition_t *ota_partition=NULL;
const esp_partition_t *ota_data_partition=NULL;
esp_err_t err=ESP_OK;
@@ -246,14 +248,17 @@ esp_err_t _erase_last_boot_app_partition(void)
}
ESP_LOGI(TAG,"Erasing flash ");
num_passes=ota_partition->size/OTA_FLASH_ERASE_BLOCK;
single_pass_size= ota_partition->size/num_passes;
remain_size=ota_partition->size-(num_passes*OTA_FLASH_ERASE_BLOCK);
for(uint16_t i=0;i<num_passes;i++){
err=esp_partition_erase_range(ota_partition, 0, ota_partition->size);
ESP_LOGD(TAG,"Erasing flash (%u%%)",i/num_passes);
triggerStatusJsonRefresh(i%5==0?true:false,"Erasing flash (%u/%u)",i,num_passes);
taskYIELD();
err=esp_partition_erase_range(ota_partition, i*single_pass_size, single_pass_size);
if(err!=ESP_OK) return err;
ESP_LOGD(TAG,"Erasing flash (%u%%)",i/num_passes);
ESP_LOGD(TAG,"Pass %d of %d, with chunks of %d bytes, from %d to %d", i+1, num_passes,single_pass_size,i*single_pass_size,i*single_pass_size+single_pass_size);
triggerStatusJsonRefresh(i%2==0?true:false,"Erasing flash (%u/%u)",i,num_passes);
taskYIELD();
}
if(remain_size>0){
err=esp_partition_erase_range(ota_partition, ota_partition->size-remain_size, remain_size);