fix(ota): prevent connection aborts by disabling socket keep-alive, keeping RF awake, and enabling dynamic mbedTLS buffers
All checks were successful
ESP32 Build & Release / build (push) Successful in 1m14s
All checks were successful
ESP32 Build & Release / build (push) Successful in 1m14s
This commit is contained in:
@@ -504,15 +504,15 @@ static void ota_download_task(void *arg)
|
||||
|
||||
set_state(OTA_STATUS_DOWNLOADING, "Starting download...");
|
||||
ESP_LOGI(TAG, "Starting HTTPS OTA from: %s", s_release.download_url);
|
||||
wifi_manager_set_power_save(false);
|
||||
rfid_manager_pause(true);
|
||||
|
||||
esp_http_client_config_t http_cfg = {
|
||||
.url = s_release.download_url,
|
||||
.transport_type = HTTP_TRANSPORT_OVER_SSL,
|
||||
.timeout_ms = 45000,
|
||||
.keep_alive_enable = true,
|
||||
.buffer_size = 4096,
|
||||
.buffer_size_tx = 2048,
|
||||
.buffer_size_tx = 1024,
|
||||
.cert_pem = s_isrg_root_x1_pem,
|
||||
.cert_len = sizeof(s_isrg_root_x1_pem),
|
||||
};
|
||||
@@ -525,6 +525,7 @@ static void ota_download_task(void *arg)
|
||||
esp_err_t err = esp_https_ota_begin(&ota_cfg, &ota_handle);
|
||||
if (err != ESP_OK || ota_handle == NULL) {
|
||||
rfid_manager_pause(false);
|
||||
wifi_manager_set_power_save(true);
|
||||
wifi_manager_release_net_lock();
|
||||
ESP_LOGE(TAG, "esp_https_ota_begin failed: %s", esp_err_to_name(err));
|
||||
set_state(OTA_STATUS_FAILED, "Failed to connect to image");
|
||||
@@ -541,6 +542,7 @@ static void ota_download_task(void *arg)
|
||||
ESP_LOGW(TAG, "Incoming image has identical ELF SHA-256 as running app - aborting flash write");
|
||||
esp_https_ota_abort(ota_handle);
|
||||
rfid_manager_pause(false);
|
||||
wifi_manager_set_power_save(true);
|
||||
wifi_manager_release_net_lock();
|
||||
set_state(OTA_STATUS_UP_TO_DATE, "Firmware is already up to date");
|
||||
s_ota_task_handle = NULL;
|
||||
@@ -550,11 +552,13 @@ static void ota_download_task(void *arg)
|
||||
}
|
||||
|
||||
int chunk_counter = 0;
|
||||
int last_logged_step = -1;
|
||||
while (1) {
|
||||
if (s_cancel_requested) {
|
||||
ESP_LOGW(TAG, "OTA canceled by user");
|
||||
esp_https_ota_abort(ota_handle);
|
||||
rfid_manager_pause(false);
|
||||
wifi_manager_set_power_save(true);
|
||||
wifi_manager_release_net_lock();
|
||||
set_state(OTA_STATUS_IDLE, "Update canceled");
|
||||
s_ota_task_handle = NULL;
|
||||
@@ -572,6 +576,14 @@ static void ota_download_task(void *arg)
|
||||
if (read > 0) s_bytes_read = (size_t)read;
|
||||
if (total > 0) s_total_bytes = (size_t)total;
|
||||
|
||||
if (total > 0) {
|
||||
int step = (read * 10) / total;
|
||||
if (step != last_logged_step) {
|
||||
last_logged_step = step;
|
||||
ESP_LOGI(TAG, "OTA download: %d%% (%d / %d KB)", (read * 100) / total, read / 1024, total / 1024);
|
||||
}
|
||||
}
|
||||
|
||||
/* Yield every 4 chunks (16 KB) to feed the task watchdog without throttling throughput */
|
||||
if (++chunk_counter % 4 == 0) {
|
||||
vTaskDelay(1);
|
||||
@@ -579,6 +591,7 @@ static void ota_download_task(void *arg)
|
||||
}
|
||||
|
||||
rfid_manager_pause(false);
|
||||
wifi_manager_set_power_save(true);
|
||||
|
||||
if (err == ESP_OK) {
|
||||
if (esp_https_ota_is_complete_data_received(ota_handle)) {
|
||||
|
||||
Reference in New Issue
Block a user