mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-07 05:29:09 -07:00
ESP Flasher quick flash for wroom / dev pro
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ struct EspFlasherApp {
|
||||
|
||||
bool reset;
|
||||
bool boot;
|
||||
bool quickflash;
|
||||
|
||||
bool selected_flash_options[NUM_FLASH_OPTIONS];
|
||||
int num_selected_flash_options;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
186
applications/external/esp_flasher/scenes/esp_flasher_scene_quick.c
vendored
Normal file
186
applications/external/esp_flasher/scenes/esp_flasher_scene_quick.c
vendored
Normal file
@@ -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);
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user