From d088487cb9ac09e9a27bc93adcad0859db545d91 Mon Sep 17 00:00:00 2001 From: schneider <schneider@blinkenlichts.net> Date: Fri, 4 Aug 2023 02:24:22 +0200 Subject: [PATCH] recovery: show progress bar --- recovery/main/rec_gui.c | 18 ++++++++++++++++++ recovery/main/rec_gui.h | 3 ++- recovery/main/rec_main.c | 6 ++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/recovery/main/rec_gui.c b/recovery/main/rec_gui.c index 92306a7865..361bda6c5c 100644 --- a/recovery/main/rec_gui.c +++ b/recovery/main/rec_gui.c @@ -42,6 +42,24 @@ void rec_erasing_draw(void) { st3m_gfx_drawctx_pipe_put(target); } +void rec_flashing_draw(int percent) { + st3m_ctx_desc_t *target = st3m_gfx_drawctx_free_get(portMAX_DELAY); + _header_draw(target); + + ctx_move_to(target->ctx, 0, 0); + ctx_font_size(target->ctx, 20.0); + ctx_gray(target->ctx, 0.8); + + char buf[128]; + snprintf(buf, sizeof(buf), "Flashing... %2d%%", percent); + ctx_text(target->ctx, buf); + + ctx_rectangle(target->ctx, -120, 20, 240 * percent / 100, 20); + ctx_fill(target->ctx); + + st3m_gfx_drawctx_pipe_put(target); +} + void rec_menu_draw(menu_t *menu) { st3m_ctx_desc_t *target = st3m_gfx_drawctx_free_get(portMAX_DELAY); _header_draw(target); diff --git a/recovery/main/rec_gui.h b/recovery/main/rec_gui.h index ba7753ced5..30bec4a4af 100644 --- a/recovery/main/rec_gui.h +++ b/recovery/main/rec_gui.h @@ -17,5 +17,6 @@ typedef struct { } menu_t; void rec_erasing_draw(void); +void rec_flashing_draw(int percent); void rec_menu_draw(menu_t *menu); -void rec_menu_process(menu_t *menu); \ No newline at end of file +void rec_menu_process(menu_t *menu); diff --git a/recovery/main/rec_main.c b/recovery/main/rec_main.c index 58393b0b8b..12d85b98f6 100644 --- a/recovery/main/rec_main.c +++ b/recovery/main/rec_main.c @@ -127,6 +127,11 @@ static void _list_select(void) { rec_fatal("Could not open file :("); } + fseek(f, 0, SEEK_END); + size_t size = ftell(f); + fseek(f, 0, SEEK_SET); + + rec_flashing_draw(0); do { n = fread(buf, 1, sizeof(buf), f); if (n > 0) { @@ -134,6 +139,7 @@ static void _list_select(void) { esp_partition_write(p, offset, buf, n); offset += n; ESP_LOGI(TAG, "wrote %u bytes", offset); + rec_flashing_draw(offset * 100 / size); } } while (n == sizeof(buf)); -- GitLab