From 467b46c82a6b4767f9102499a3b021b79e96ef8c Mon Sep 17 00:00:00 2001 From: ClaraCrazy Date: Wed, 19 Jul 2023 00:39:02 +0200 Subject: [PATCH] Add One-Click Devboard flash to esp_flasher --- .../scenes/esp_flasher_scene_config.h | 1 + .../scenes/esp_flasher_scene_devboard.c | 80 +++++++++++++++++++ .../scenes/esp_flasher_scene_start.c | 12 ++- 3 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 applications/external/esp_flasher/scenes/esp_flasher_scene_devboard.c diff --git a/applications/external/esp_flasher/scenes/esp_flasher_scene_config.h b/applications/external/esp_flasher/scenes/esp_flasher_scene_config.h index 21a5162a9..bf9c6e7b1 100644 --- a/applications/external/esp_flasher/scenes/esp_flasher_scene_config.h +++ b/applications/external/esp_flasher/scenes/esp_flasher_scene_config.h @@ -1,4 +1,5 @@ ADD_SCENE(esp_flasher, start, Start) +ADD_SCENE(esp_flasher, devboard, Devboard) ADD_SCENE(esp_flasher, console_output, ConsoleOutput) ADD_SCENE(esp_flasher, about, About) ADD_SCENE(esp_flasher, browse, Browse) diff --git a/applications/external/esp_flasher/scenes/esp_flasher_scene_devboard.c b/applications/external/esp_flasher/scenes/esp_flasher_scene_devboard.c new file mode 100644 index 000000000..a8064719b --- /dev/null +++ b/applications/external/esp_flasher/scenes/esp_flasher_scene_devboard.c @@ -0,0 +1,80 @@ +#include "../esp_flasher_app_i.h" + +enum SubmenuIndex { + SubmenuIndexMarauder, + SubmenuIndexEvilPortal, + SubmenuIndexBlackMagic, +}; + +void esp_flasher_scene_devboard_submenu_callback(void* context, uint32_t index) { + furi_assert(context); + EspFlasherApp* app = context; + + view_dispatcher_send_custom_event(app->view_dispatcher, index); +} + +void esp_flasher_scene_devboard_on_enter(void* context) { + furi_assert(context); + + EspFlasherApp* app = context; + Submenu* submenu = app->submenu; + submenu_add_item( + submenu, + "Marauder", + SubmenuIndexMarauder, + esp_flasher_scene_devboard_submenu_callback, + app); + submenu_add_item( + submenu, + "Evil Portal", + SubmenuIndexEvilPortal, + esp_flasher_scene_devboard_submenu_callback, + app); + submenu_add_item( + submenu, + "Black Magic", + SubmenuIndexBlackMagic, + esp_flasher_scene_devboard_submenu_callback, + app); + + submenu_set_selected_item( + submenu, scene_manager_get_scene_state(app->scene_manager, EspFlasherSceneDevboard)); + + view_dispatcher_switch_to_view(app->view_dispatcher, EspFlasherAppViewSubmenu); +} + +bool esp_flasher_scene_devboard_on_event(void* context, SceneManagerEvent event) { + furi_assert(context); + + EspFlasherApp* app = context; + bool consumed = false; + if(event.type == SceneManagerEventTypeCustom) { + const char* path = NULL; + consumed = true; + if(event.event == SubmenuIndexBlackMagic) { + path = APP_DATA_PATH("Black_Magic.bin"); + } else if(event.event == SubmenuIndexEvilPortal) { + path = APP_DATA_PATH("Evil_Portal.bin"); + } else if(event.event == SubmenuIndexMarauder) { + path = APP_DATA_PATH("Marauder.bin"); + } else { + consumed = false; + } + + if(consumed) { + app->selected_flash_options[SelectedFlashBoot] = true; + strncpy(app->bin_file_path_boot, path, sizeof(app->bin_file_path_boot)); + scene_manager_next_scene(app->scene_manager, EspFlasherSceneConsoleOutput); + } + scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneDevboard, event.event); + } + + return consumed; +} + +void esp_flasher_scene_devboard_on_exit(void* context) { + furi_assert(context); + + EspFlasherApp* app = context; + submenu_reset(app->submenu); +} \ No newline at end of file diff --git a/applications/external/esp_flasher/scenes/esp_flasher_scene_start.c b/applications/external/esp_flasher/scenes/esp_flasher_scene_start.c index 82a3f5ebf..4277fb438 100644 --- a/applications/external/esp_flasher/scenes/esp_flasher_scene_start.c +++ b/applications/external/esp_flasher/scenes/esp_flasher_scene_start.c @@ -1,6 +1,7 @@ #include "../esp_flasher_app_i.h" enum SubmenuIndex { + SubmenuIndexEspFlasherDevboardFlash, SubmenuIndexEspFlasherFlash, SubmenuIndexEspFlasherAbout, }; @@ -19,7 +20,13 @@ void esp_flasher_scene_start_on_enter(void* context) { Submenu* submenu = app->submenu; submenu_add_item( submenu, - "Flash ESP", + "Flash Wifi Devboard", + SubmenuIndexEspFlasherDevboardFlash, + esp_flasher_scene_start_submenu_callback, + app); + submenu_add_item( + submenu, + "Flash Generic ESP", SubmenuIndexEspFlasherFlash, esp_flasher_scene_start_submenu_callback, app); @@ -48,6 +55,9 @@ bool esp_flasher_scene_start_on_event(void* context, SceneManagerEvent event) { } else if(event.event == SubmenuIndexEspFlasherFlash) { scene_manager_next_scene(app->scene_manager, EspFlasherSceneBrowse); consumed = true; + } else if(event.event == SubmenuIndexEspFlasherDevboardFlash) { + scene_manager_next_scene(app->scene_manager, EspFlasherSceneDevboard); + consumed = true; } scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneStart, event.event); }