Selaa lähdekoodia

OTA Flash erase bug... erased. release

Sebastien 5 vuotta sitten
vanhempi
commit
7a3f78d8d2

+ 12 - 4
components/cmd_system/cmd_system.c

@@ -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
 		{

+ 9 - 4
components/squeezelite-ota/squeezelite-ota.c

@@ -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);
+		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);
-		triggerStatusJsonRefresh(i%5==0?true:false,"Erasing flash (%u/%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(err!=ESP_OK) return err;
 	}
 	if(remain_size>0){
 		err=esp_partition_erase_range(ota_partition, ota_partition->size-remain_size, remain_size);

+ 7 - 1
main/config.c

@@ -437,7 +437,7 @@ bool wait_for_commit(){
 	    	ESP_LOGI(TAG,"Config committed!");
 	    }
 	}
-	return commit_pending;
+	return !commit_pending;
 }
 
 bool config_lock(TickType_t xTicksToWait) {
@@ -564,6 +564,12 @@ void config_delete_key(const char *key){
 	if(entry !=NULL){
 		ESP_LOGI(TAG, "Removing config key [%s]", entry->string);
 		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 {
 		ESP_LOGW(TAG, "Unable to remove config key [%s]: not found.", key);

+ 4 - 2
main/esp_app_main.c

@@ -232,7 +232,6 @@ void app_main()
 	ESP_LOGD(TAG,"Clearing CONNECTED_BIT from wifi group");
 	xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
 
-
 	ESP_LOGI(TAG,"Starting app_main");
 	initialize_nvs();
 	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(WIFI_EVENT_STA_DISCONNECTED, &cb_connection_sta_disconnected);
 	}
-
 	console_start();
 	if(fwurl && strlen(fwurl)>0){
+#if RECOVERY_APPLICATION
 		while(!bWifiConnected){
 			wait_for_wifi();
 			taskYIELD();
 		}
 		ESP_LOGI(TAG,"Updating firmware from link: %s",fwurl);
 		start_ota(fwurl, true);
+#else
+		ESP_LOGE(TAG,"Restarted to application partition. We're not going to perform OTA!");
+#endif
 		free(fwurl);
 	}
 }