mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-04-30 04:19:59 -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) {
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
assets/resources/apps_data/esp_flasher/assets/boot_app0.bin
Normal file
BIN
assets/resources/apps_data/esp_flasher/assets/boot_app0.bin
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user