OTA: report previous slot only when it is bootable

GET /api/ota listed a half-written upload or a rolled-back image as
'previous'. Only report it when esp_ota_check_rollback_is_possible().

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-24 23:27:49 +10:00
parent bbc5729cc1
commit ad5a8b7545
+5 -2
View File
@@ -46,13 +46,16 @@ static esp_err_t ota_get(httpd_req_t *req)
cJSON_AddStringToObject(o, "build_date", built); cJSON_AddStringToObject(o, "build_date", built);
cJSON_AddStringToObject(o, "idf", app->idf_ver); cJSON_AddStringToObject(o, "idf", app->idf_ver);
cJSON_AddStringToObject(o, "running", run->label); cJSON_AddStringToObject(o, "running", run->label);
// Only a bootable image counts as "previous" (not a half-written upload or a rolled-back
// one). With two slots, rollback is possible exactly when the other slot is bootable.
bool can_rollback = esp_ota_check_rollback_is_possible();
esp_app_desc_t prev; esp_app_desc_t prev;
if (other && esp_ota_get_partition_description(other, &prev) == ESP_OK) { if (can_rollback && other && esp_ota_get_partition_description(other, &prev) == ESP_OK) {
cJSON_AddStringToObject(o, "previous", other->label); cJSON_AddStringToObject(o, "previous", other->label);
cJSON_AddStringToObject(o, "previous_version", prev.version); cJSON_AddStringToObject(o, "previous_version", prev.version);
} }
cJSON_AddBoolToObject(o, "pending_verify", is_pending()); cJSON_AddBoolToObject(o, "pending_verify", is_pending());
cJSON_AddBoolToObject(o, "can_rollback", esp_ota_check_rollback_is_possible()); cJSON_AddBoolToObject(o, "can_rollback", can_rollback);
esp_err_t err = web_send_json(req, o); esp_err_t err = web_send_json(req, o);
cJSON_Delete(o); cJSON_Delete(o);
return err; return err;