mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 12:37:01 +03:00
OTA Flash erase bug... erased. release
This commit is contained in:
@@ -102,6 +102,7 @@ esp_err_t guided_boot(esp_partition_subtype_t partition_subtype)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
esp_err_t err = ESP_OK;
|
||||||
bool bFound=false;
|
bool bFound=false;
|
||||||
ESP_LOGI(TAG, "Looking for partition type %u",partition_subtype);
|
ESP_LOGI(TAG, "Looking for partition type %u",partition_subtype);
|
||||||
const esp_partition_t *partition;
|
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);
|
partition = (esp_partition_t *) esp_partition_get(it);
|
||||||
if(partition != NULL){
|
if(partition != NULL){
|
||||||
ESP_LOGI(TAG, "Found partition type %u",partition_subtype);
|
ESP_LOGI(TAG, "Found application partition sub type %u",partition_subtype);
|
||||||
esp_ota_set_boot_partition(partition);
|
err=esp_ota_set_boot_partition(partition);
|
||||||
bFound=true;
|
if(err!=ESP_OK){
|
||||||
set_status_message(WARNING, "Rebooting!");
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
CONDITIONS OF ANY KIND, either express or implied.
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
*/
|
*/
|
||||||
|
//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
@@ -37,7 +38,7 @@
|
|||||||
|
|
||||||
#include "esp_ota_ops.h"
|
#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";
|
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_start[] asm("_binary_github_pem_start");
|
||||||
extern const uint8_t server_cert_pem_end[] asm("_binary_github_pem_end");
|
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 num_passes=0;
|
||||||
uint16_t remain_size=0;
|
uint16_t remain_size=0;
|
||||||
|
uint16_t single_pass_size=0;
|
||||||
const esp_partition_t *ota_partition=NULL;
|
const esp_partition_t *ota_partition=NULL;
|
||||||
const esp_partition_t *ota_data_partition=NULL;
|
const esp_partition_t *ota_data_partition=NULL;
|
||||||
esp_err_t err=ESP_OK;
|
esp_err_t err=ESP_OK;
|
||||||
@@ -246,14 +248,17 @@ esp_err_t _erase_last_boot_app_partition(void)
|
|||||||
}
|
}
|
||||||
ESP_LOGI(TAG,"Erasing flash ");
|
ESP_LOGI(TAG,"Erasing flash ");
|
||||||
num_passes=ota_partition->size/OTA_FLASH_ERASE_BLOCK;
|
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);
|
remain_size=ota_partition->size-(num_passes*OTA_FLASH_ERASE_BLOCK);
|
||||||
|
|
||||||
for(uint16_t i=0;i<num_passes;i++){
|
for(uint16_t i=0;i<num_passes;i++){
|
||||||
err=esp_partition_erase_range(ota_partition, 0, ota_partition->size);
|
err=esp_partition_erase_range(ota_partition, i*single_pass_size, single_pass_size);
|
||||||
ESP_LOGD(TAG,"Erasing flash (%u%%)",i/num_passes);
|
|
||||||
triggerStatusJsonRefresh(i%5==0?true:false,"Erasing flash (%u/%u)",i,num_passes);
|
|
||||||
taskYIELD();
|
|
||||||
if(err!=ESP_OK) return err;
|
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){
|
if(remain_size>0){
|
||||||
err=esp_partition_erase_range(ota_partition, ota_partition->size-remain_size, remain_size);
|
err=esp_partition_erase_range(ota_partition, ota_partition->size-remain_size, remain_size);
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ bool wait_for_commit(){
|
|||||||
ESP_LOGI(TAG,"Config committed!");
|
ESP_LOGI(TAG,"Config committed!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return commit_pending;
|
return !commit_pending;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool config_lock(TickType_t xTicksToWait) {
|
bool config_lock(TickType_t xTicksToWait) {
|
||||||
@@ -564,6 +564,12 @@ void config_delete_key(const char *key){
|
|||||||
if(entry !=NULL){
|
if(entry !=NULL){
|
||||||
ESP_LOGI(TAG, "Removing config key [%s]", entry->string);
|
ESP_LOGI(TAG, "Removing config key [%s]", entry->string);
|
||||||
cJSON_Delete(entry);
|
cJSON_Delete(entry);
|
||||||
|
char * struc_str = cJSON_PrintUnformatted(nvs_json);
|
||||||
|
if(struc_str!=NULL){
|
||||||
|
ESP_LOGV(TAG, "Structure after delete \n%s", struc_str);
|
||||||
|
free(struc_str);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ESP_LOGW(TAG, "Unable to remove config key [%s]: not found.", key);
|
ESP_LOGW(TAG, "Unable to remove config key [%s]: not found.", key);
|
||||||
|
|||||||
@@ -232,7 +232,6 @@ void app_main()
|
|||||||
ESP_LOGD(TAG,"Clearing CONNECTED_BIT from wifi group");
|
ESP_LOGD(TAG,"Clearing CONNECTED_BIT from wifi group");
|
||||||
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
|
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
|
||||||
|
|
||||||
|
|
||||||
ESP_LOGI(TAG,"Starting app_main");
|
ESP_LOGI(TAG,"Starting app_main");
|
||||||
initialize_nvs();
|
initialize_nvs();
|
||||||
ESP_LOGI(TAG,"Setting up config subsystem.");
|
ESP_LOGI(TAG,"Setting up config subsystem.");
|
||||||
@@ -275,15 +274,18 @@ void app_main()
|
|||||||
wifi_manager_set_callback(EVENT_STA_GOT_IP, &cb_connection_got_ip);
|
wifi_manager_set_callback(EVENT_STA_GOT_IP, &cb_connection_got_ip);
|
||||||
wifi_manager_set_callback(WIFI_EVENT_STA_DISCONNECTED, &cb_connection_sta_disconnected);
|
wifi_manager_set_callback(WIFI_EVENT_STA_DISCONNECTED, &cb_connection_sta_disconnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
console_start();
|
console_start();
|
||||||
if(fwurl && strlen(fwurl)>0){
|
if(fwurl && strlen(fwurl)>0){
|
||||||
|
#if RECOVERY_APPLICATION
|
||||||
while(!bWifiConnected){
|
while(!bWifiConnected){
|
||||||
wait_for_wifi();
|
wait_for_wifi();
|
||||||
taskYIELD();
|
taskYIELD();
|
||||||
}
|
}
|
||||||
ESP_LOGI(TAG,"Updating firmware from link: %s",fwurl);
|
ESP_LOGI(TAG,"Updating firmware from link: %s",fwurl);
|
||||||
start_ota(fwurl, true);
|
start_ota(fwurl, true);
|
||||||
|
#else
|
||||||
|
ESP_LOGE(TAG,"Restarted to application partition. We're not going to perform OTA!");
|
||||||
|
#endif
|
||||||
free(fwurl);
|
free(fwurl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user