diff --git a/applications/external/esp_flasher/esp_flasher_app.c b/applications/external/esp_flasher/esp_flasher_app.c index cf299c4c5..d58d96844 100644 --- a/applications/external/esp_flasher/esp_flasher_app.c +++ b/applications/external/esp_flasher/esp_flasher_app.c @@ -68,6 +68,7 @@ EspFlasherApp* esp_flasher_app_alloc() { app->reset = false; app->boot = false; + app->quickflash = false; scene_manager_next_scene(app->scene_manager, EspFlasherSceneStart); diff --git a/applications/external/esp_flasher/esp_flasher_app_i.h b/applications/external/esp_flasher/esp_flasher_app_i.h index 8f533453f..4cbd54064 100644 --- a/applications/external/esp_flasher/esp_flasher_app_i.h +++ b/applications/external/esp_flasher/esp_flasher_app_i.h @@ -59,6 +59,7 @@ struct EspFlasherApp { bool reset; bool boot; + bool quickflash; bool selected_flash_options[NUM_FLASH_OPTIONS]; int num_selected_flash_options; diff --git a/applications/external/esp_flasher/esp_flasher_worker.c b/applications/external/esp_flasher/esp_flasher_worker.c index ef7ed1806..06d5555c3 100644 --- a/applications/external/esp_flasher/esp_flasher_worker.c +++ b/applications/external/esp_flasher/esp_flasher_worker.c @@ -189,6 +189,7 @@ static int32_t esp_flasher_flash_bin(void* context) { // done app->flash_worker_busy = false; + app->quickflash = false; // cleanup furi_stream_buffer_free(flash_rx_stream); @@ -236,6 +237,10 @@ static int32_t esp_flasher_reset(void* context) { app->reset = false; app->boot = false; + if(app->quickflash) { + esp_flasher_flash_bin(app); + } + return 0; } @@ -324,4 +329,4 @@ void esp_flasher_worker_handle_rx_data_cb(uint8_t* buf, size_t len, void* contex // done flashing if(global_app) esp_flasher_console_output_handle_rx_data_cb(buf, len, global_app); } -} \ No newline at end of file +} 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 bf9c6e7b1..2f0a7272a 100644 --- a/applications/external/esp_flasher/scenes/esp_flasher_scene_config.h +++ b/applications/external/esp_flasher/scenes/esp_flasher_scene_config.h @@ -1,5 +1,5 @@ ADD_SCENE(esp_flasher, start, Start) -ADD_SCENE(esp_flasher, devboard, Devboard) +ADD_SCENE(esp_flasher, quick, Quick) 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 deleted file mode 100644 index ccb8f527c..000000000 --- a/applications/external/esp_flasher/scenes/esp_flasher_scene_devboard.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "../esp_flasher_app_i.h" - -enum SubmenuIndex { - SubmenuIndexBlackMagic, - SubmenuIndexEvilPortal, - SubmenuIndexMarauder, -}; - -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_set_header(submenu, "Select Firmware to flash"); - submenu_add_item( - submenu, - "Black Magic", - SubmenuIndexBlackMagic, - 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, - "Marauder", - SubmenuIndexMarauder, - 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; - switch(event.event) { - case SubmenuIndexBlackMagic: - path = APP_DATA_PATH("Black_Magic.bin"); - break; - case SubmenuIndexEvilPortal: - path = APP_DATA_PATH("Evil_Portal.bin"); - break; - case SubmenuIndexMarauder: - path = APP_DATA_PATH("Marauder.bin"); - break; - default: - consumed = false; - break; - } - - 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_quick.c b/applications/external/esp_flasher/scenes/esp_flasher_scene_quick.c new file mode 100644 index 000000000..2acbe6a51 --- /dev/null +++ b/applications/external/esp_flasher/scenes/esp_flasher_scene_quick.c @@ -0,0 +1,186 @@ +#include "../esp_flasher_app_i.h" + +enum QuickState { + QuickStart, + QuickBlackmagic, + QuickBlackmagicWifidev, + QuickEvilportal, + QuickEvilportalWifidevS2, + QuickEvilportalDevproWroom, + QuickMarauder, + QuickMarauderWifidevS2, + QuickMarauderDevproWroom, +}; + +void esp_flasher_scene_quick_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_quick_on_enter(void* context) { + furi_assert(context); + EspFlasherApp* app = context; + Submenu* submenu = app->submenu; + uint32_t state = scene_manager_get_scene_state(app->scene_manager, EspFlasherSceneQuick); + + switch(state) { + case QuickStart: + submenu_set_header(submenu, "Flash Firmware:"); + submenu_add_item( + submenu, "Black Magic", QuickBlackmagic, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, "Evil Portal", QuickEvilportal, esp_flasher_scene_quick_submenu_callback, app); + submenu_add_item( + submenu, "Marauder", QuickMarauder, esp_flasher_scene_quick_submenu_callback, app); + break; + case QuickBlackmagic: + submenu_set_header(submenu, "Flash Black Magic To:"); + submenu_add_item( + submenu, + "Flipper WiFi Dev Board", + QuickBlackmagicWifidev, + esp_flasher_scene_quick_submenu_callback, + app); + break; + case QuickEvilportal: + submenu_set_header(submenu, "Flash Evil Portal To:"); + submenu_add_item( + submenu, + "WiFi Dev Board / S2", + QuickEvilportalWifidevS2, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "Dev Board Pro / WROOM", + QuickEvilportalDevproWroom, + esp_flasher_scene_quick_submenu_callback, + app); + break; + case QuickMarauder: + submenu_set_header(submenu, "Flash Marauder To:"); + submenu_add_item( + submenu, + "WiFi Dev Board / S2", + QuickMarauderWifidevS2, + esp_flasher_scene_quick_submenu_callback, + app); + submenu_add_item( + submenu, + "Dev Board Pro / WROOM", + QuickMarauderDevproWroom, + esp_flasher_scene_quick_submenu_callback, + app); + break; + default: + break; + } + + view_dispatcher_switch_to_view(app->view_dispatcher, EspFlasherAppViewSubmenu); +} + +bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) { + furi_assert(context); + + EspFlasherApp* app = context; + bool consumed = false; + if(event.type == SceneManagerEventTypeCustom) { + consumed = true; + + bool flash = true; + const char* boot = NULL; // 0x1000 + const char* part = NULL; // 0x8000 + const char* nvs = NULL; // 0x9000 + const char* app0 = APP_DATA_PATH("assets/boot_app0.bin"); // 0xE000 + const char* firm = NULL; // 0x10000 + + switch(event.event) { + case QuickBlackmagic: + case QuickEvilportal: + case QuickMarauder: + scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneQuick, event.event); + scene_manager_next_scene(app->scene_manager, EspFlasherSceneQuick); + flash = false; + break; + case QuickBlackmagicWifidev: + boot = APP_DATA_PATH("assets/blackmagic/wifidev/bootloader.bin"); + part = APP_DATA_PATH("assets/blackmagic/wifidev/partition-table.bin"); + nvs = APP_DATA_PATH("assets/blackmagic/wifidev/nvs.bin"); + firm = APP_DATA_PATH("assets/blackmagic/wifidev/blackmagic.bin"); + break; + case QuickEvilportalWifidevS2: + boot = APP_DATA_PATH("assets/evilportal/wifidev-s2/EvilPortal.ino.bootloader.bin"); + part = APP_DATA_PATH("assets/evilportal/EvilPortal.ino.partitions.bin"); + firm = APP_DATA_PATH("assets/evilportal/wifidev-s2/EvilPortal.ino.bin"); + break; + case QuickEvilportalDevproWroom: + boot = APP_DATA_PATH("assets/evilportal/devpro-wroom/EvilPortal.ino.bootloader.bin"); + part = APP_DATA_PATH("assets/evilportal/EvilPortal.ino.partitions.bin"); + firm = APP_DATA_PATH("assets/evilportal/devpro-wroom/EvilPortal.ino.bin"); + break; + case QuickMarauderWifidevS2: + boot = APP_DATA_PATH("assets/marauder/wifidev-s2/bootloader.bin"); + part = APP_DATA_PATH("assets/marauder/partitions.bin"); + firm = APP_DATA_PATH("assets/marauder/wifidev-s2/flipper_sd_serial.bin"); + break; + case QuickMarauderDevproWroom: + boot = APP_DATA_PATH("assets/marauder/devpro-wroom/bootloader.bin"); + part = APP_DATA_PATH("assets/marauder/partitions.bin"); + firm = APP_DATA_PATH("assets/marauder/devpro-wroom/marauder_dev_board_pro.bin"); + break; + default: + flash = false; + consumed = false; + break; + } + + if(flash) { + memset(app->selected_flash_options, 0, sizeof(app->selected_flash_options)); + app->bin_file_path_boot[0] = '\0'; + app->bin_file_path_part[0] = '\0'; + app->bin_file_path_nvs[0] = '\0'; + app->bin_file_path_boot_app0[0] = '\0'; + app->bin_file_path_app[0] = '\0'; + app->bin_file_path_custom[0] = '\0'; + + if(boot) { + app->selected_flash_options[SelectedFlashBoot] = true; + strncpy(app->bin_file_path_boot, boot, sizeof(app->bin_file_path_boot)); + } + if(part) { + app->selected_flash_options[SelectedFlashPart] = true; + strncpy(app->bin_file_path_part, part, sizeof(app->bin_file_path_part)); + } + if(nvs) { + app->selected_flash_options[SelectedFlashNvs] = true; + strncpy(app->bin_file_path_nvs, nvs, sizeof(app->bin_file_path_nvs)); + } + if(app0) { + app->selected_flash_options[SelectedFlashBootApp0] = true; + strncpy(app->bin_file_path_boot_app0, app0, sizeof(app->bin_file_path_boot_app0)); + } + if(firm) { + app->selected_flash_options[SelectedFlashApp] = true; + strncpy(app->bin_file_path_app, firm, sizeof(app->bin_file_path_app)); + } + + app->boot = true; + app->reset = false; + app->quickflash = true; + scene_manager_next_scene(app->scene_manager, EspFlasherSceneConsoleOutput); + } + } else if(event.type == SceneManagerEventTypeBack) { + scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneQuick, QuickStart); + } + + return consumed; +} + +void esp_flasher_scene_quick_on_exit(void* context) { + furi_assert(context); + + EspFlasherApp* app = context; + submenu_reset(app->submenu); +} 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 d531b884a..7ac899145 100644 --- a/applications/external/esp_flasher/scenes/esp_flasher_scene_start.c +++ b/applications/external/esp_flasher/scenes/esp_flasher_scene_start.c @@ -1,11 +1,11 @@ #include "../esp_flasher_app_i.h" enum SubmenuIndex { - SubmenuIndexEspFlasherDevboardFlash, - SubmenuIndexEspFlasherFlash, - SubmenuIndexEspFlasherAbout, + SubmenuIndexEspFlasherQuickFlash, + SubmenuIndexEspFlasherManualFlash, SubmenuIndexEspFlasherReset, SubmenuIndexEspFlasherBootloader, + SubmenuIndexEspFlasherAbout, }; void esp_flasher_scene_start_submenu_callback(void* context, uint32_t index) { @@ -20,16 +20,17 @@ void esp_flasher_scene_start_on_enter(void* context) { EspFlasherApp* app = context; Submenu* submenu = app->submenu; + submenu_set_header(submenu, "ESP Flasher"); submenu_add_item( submenu, - "Flash Wifi Devboard", - SubmenuIndexEspFlasherDevboardFlash, + "Quick Flash", + SubmenuIndexEspFlasherQuickFlash, esp_flasher_scene_start_submenu_callback, app); submenu_add_item( submenu, - "Flash Generic ESP", - SubmenuIndexEspFlasherFlash, + "Manual Flash", + SubmenuIndexEspFlasherManualFlash, esp_flasher_scene_start_submenu_callback, app); submenu_add_item( @@ -63,10 +64,10 @@ bool esp_flasher_scene_start_on_event(void* context, SceneManagerEvent event) { EspFlasherApp* app = context; bool consumed = false; if(event.type == SceneManagerEventTypeCustom) { - if(event.event == SubmenuIndexEspFlasherDevboardFlash) { - scene_manager_next_scene(app->scene_manager, EspFlasherSceneDevboard); + if(event.event == SubmenuIndexEspFlasherQuickFlash) { + scene_manager_next_scene(app->scene_manager, EspFlasherSceneQuick); consumed = true; - } else if(event.event == SubmenuIndexEspFlasherFlash) { + } else if(event.event == SubmenuIndexEspFlasherManualFlash) { scene_manager_next_scene(app->scene_manager, EspFlasherSceneBrowse); consumed = true; } else if(event.event == SubmenuIndexEspFlasherReset) { diff --git a/assets/resources/apps_data/esp_flasher/Black_Magic.bin b/assets/resources/apps_data/esp_flasher/Black_Magic.bin deleted file mode 100644 index 337fbe603..000000000 Binary files a/assets/resources/apps_data/esp_flasher/Black_Magic.bin and /dev/null differ diff --git a/assets/resources/apps_data/esp_flasher/Marauder.bin b/assets/resources/apps_data/esp_flasher/Marauder.bin deleted file mode 100644 index 379d6c313..000000000 Binary files a/assets/resources/apps_data/esp_flasher/Marauder.bin and /dev/null differ diff --git a/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/blackmagic.bin b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/blackmagic.bin new file mode 100644 index 000000000..2bbc8fddb Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/blackmagic.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/bootloader.bin b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/bootloader.bin new file mode 100644 index 000000000..ca1dfe208 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/bootloader.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/nvs.bin b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/nvs.bin new file mode 100644 index 000000000..f10174f3b Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/nvs.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/partition-table.bin b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/partition-table.bin new file mode 100644 index 000000000..a62b43b54 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/blackmagic/wifidev/partition-table.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/boot_app0.bin b/assets/resources/apps_data/esp_flasher/assets/boot_app0.bin new file mode 100644 index 000000000..13562cabb Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/boot_app0.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/evilportal/EvilPortal.ino.partitions.bin b/assets/resources/apps_data/esp_flasher/assets/evilportal/EvilPortal.ino.partitions.bin new file mode 100644 index 000000000..2108af950 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/evilportal/EvilPortal.ino.partitions.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/evilportal/devpro-wroom/EvilPortal.ino.bin b/assets/resources/apps_data/esp_flasher/assets/evilportal/devpro-wroom/EvilPortal.ino.bin new file mode 100644 index 000000000..9d463929d Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/evilportal/devpro-wroom/EvilPortal.ino.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/evilportal/devpro-wroom/EvilPortal.ino.bootloader.bin b/assets/resources/apps_data/esp_flasher/assets/evilportal/devpro-wroom/EvilPortal.ino.bootloader.bin new file mode 100644 index 000000000..25c62a975 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/evilportal/devpro-wroom/EvilPortal.ino.bootloader.bin differ diff --git a/assets/resources/apps_data/esp_flasher/Evil_Portal.bin b/assets/resources/apps_data/esp_flasher/assets/evilportal/wifidev-s2/EvilPortal.ino.bin similarity index 92% rename from assets/resources/apps_data/esp_flasher/Evil_Portal.bin rename to assets/resources/apps_data/esp_flasher/assets/evilportal/wifidev-s2/EvilPortal.ino.bin index 993755ee5..ce5b19724 100644 Binary files a/assets/resources/apps_data/esp_flasher/Evil_Portal.bin and b/assets/resources/apps_data/esp_flasher/assets/evilportal/wifidev-s2/EvilPortal.ino.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/evilportal/wifidev-s2/EvilPortal.ino.bootloader.bin b/assets/resources/apps_data/esp_flasher/assets/evilportal/wifidev-s2/EvilPortal.ino.bootloader.bin new file mode 100644 index 000000000..eee12915e Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/evilportal/wifidev-s2/EvilPortal.ino.bootloader.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/marauder/devpro-wroom/bootloader.bin b/assets/resources/apps_data/esp_flasher/assets/marauder/devpro-wroom/bootloader.bin new file mode 100644 index 000000000..05f670d0c Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/marauder/devpro-wroom/bootloader.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/marauder/devpro-wroom/marauder_dev_board_pro.bin b/assets/resources/apps_data/esp_flasher/assets/marauder/devpro-wroom/marauder_dev_board_pro.bin new file mode 100644 index 000000000..6b9a53e88 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/marauder/devpro-wroom/marauder_dev_board_pro.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/marauder/partitions.bin b/assets/resources/apps_data/esp_flasher/assets/marauder/partitions.bin new file mode 100644 index 000000000..fa042d671 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/marauder/partitions.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/marauder/wifidev-s2/bootloader.bin b/assets/resources/apps_data/esp_flasher/assets/marauder/wifidev-s2/bootloader.bin new file mode 100644 index 000000000..08c257b11 Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/marauder/wifidev-s2/bootloader.bin differ diff --git a/assets/resources/apps_data/esp_flasher/assets/marauder/wifidev-s2/flipper_sd_serial.bin b/assets/resources/apps_data/esp_flasher/assets/marauder/wifidev-s2/flipper_sd_serial.bin new file mode 100644 index 000000000..fb247ad7d Binary files /dev/null and b/assets/resources/apps_data/esp_flasher/assets/marauder/wifidev-s2/flipper_sd_serial.bin differ