11#include "../esp_flasher_app_i.h"
22
3+ // DO NOT use as an example, you should split into different scene files for each screen
4+ // To keep in a single file, this is setup in an unusual and confusing way
5+ // You can find more info in comments throughout
6+
7+ // There's one entry for each item on quick flash menu
8+ // Following each one, there are its submenu items
9+ // Not all boards support automatic bootmode, so here we separate into those that do and don't
310enum QuickState {
411 QuickStart ,
5- QuickBootS2 ,
6- QuickBootS2_Marauder ,
7- QuickBootS2_Blackmagic ,
8- QuickBootWROOM ,
9- QuickBootWROOM_Marauder ,
12+ QuickS2Boot ,
13+ QuickS2Boot_Marauder ,
14+ QuickS2Boot_Blackmagic ,
15+ QuickWROOMBoot ,
16+ QuickWROOMBoot_Marauder ,
17+ QuickS3Boot ,
18+ QuickS3Boot_Marauder ,
1019 QuickWROOM ,
1120 QuickWROOM_Marauder ,
1221 QuickS2 ,
1322 QuickS2_Marauder ,
1423 QuickS2_Blackmagic ,
24+ QuickS3 ,
25+ QuickS3_Marauder ,
1526};
1627
1728void esp_flasher_scene_quick_submenu_callback (void * context , uint32_t index ) {
@@ -27,21 +38,36 @@ void esp_flasher_scene_quick_on_enter(void* context) {
2738 Submenu * submenu = app -> submenu ;
2839 uint32_t state = scene_manager_get_scene_state (app -> scene_manager , EspFlasherSceneQuick );
2940
41+ // State indicates the currently selected (or activated) item
42+ // So map quick flash menu values to show the quick flash menu
43+ // And map submenu values to show corresponding submenu
3044 switch (state ) {
3145 case QuickStart :
32- case QuickBootS2 :
33- case QuickBootWROOM :
46+ case QuickS2Boot :
47+ case QuickWROOMBoot :
48+ case QuickS3Boot :
3449 case QuickWROOM :
3550 case QuickS2 :
51+ case QuickS3 :
3652 submenu_set_header (submenu , "Choose Board:" );
3753 submenu_add_item (
3854 submenu ,
39- "Flipper WiFi Board / Xeon " ,
40- QuickBootS2 ,
55+ "Flipper WiFi Devboard " ,
56+ QuickS2Boot ,
4157 esp_flasher_scene_quick_submenu_callback ,
4258 app );
4359 submenu_add_item (
44- submenu , "Multi-Fucc" , QuickBootWROOM , esp_flasher_scene_quick_submenu_callback , app );
60+ submenu ,
61+ "ESP32-WROOM (bootloader)" ,
62+ QuickWROOMBoot ,
63+ esp_flasher_scene_quick_submenu_callback ,
64+ app );
65+ submenu_add_item (
66+ submenu ,
67+ "ESP32-S3 (bootloader)" ,
68+ QuickS3Boot ,
69+ esp_flasher_scene_quick_submenu_callback ,
70+ app );
4571 submenu_add_item (
4672 submenu ,
4773 "Other ESP32-WROOM" ,
@@ -50,32 +76,44 @@ void esp_flasher_scene_quick_on_enter(void* context) {
5076 app );
5177 submenu_add_item (
5278 submenu , "Other ESP32-S2" , QuickS2 , esp_flasher_scene_quick_submenu_callback , app );
79+ submenu_add_item (
80+ submenu , "Other ESP32-S3" , QuickS3 , esp_flasher_scene_quick_submenu_callback , app );
5381 break ;
54- case QuickBootS2_Marauder :
55- case QuickBootS2_Blackmagic :
82+ case QuickS2Boot_Marauder :
83+ case QuickS2Boot_Blackmagic :
5684 case QuickS2_Marauder :
5785 case QuickS2_Blackmagic :
5886 submenu_set_header (submenu , "Choose Firmware:" );
5987 submenu_add_item (
6088 submenu ,
6189 "Marauder (has Evil Portal)" ,
62- state > QuickS2 ? QuickS2_Marauder : QuickBootS2_Marauder ,
90+ state > QuickS2 ? QuickS2_Marauder : QuickS2Boot_Marauder ,
6391 esp_flasher_scene_quick_submenu_callback ,
6492 app );
6593 submenu_add_item (
6694 submenu ,
6795 "Black Magic" ,
68- state > QuickS2 ? QuickS2_Blackmagic : QuickBootS2_Blackmagic ,
96+ state > QuickS2 ? QuickS2_Blackmagic : QuickS2Boot_Blackmagic ,
6997 esp_flasher_scene_quick_submenu_callback ,
7098 app );
7199 break ;
72- case QuickBootWROOM_Marauder :
100+ case QuickWROOMBoot_Marauder :
73101 case QuickWROOM_Marauder :
74102 submenu_set_header (submenu , "Choose Firmware:" );
75103 submenu_add_item (
76104 submenu ,
77105 "Marauder (has Evil Portal)" ,
78- state > QuickWROOM ? QuickWROOM_Marauder : QuickBootWROOM_Marauder ,
106+ state > QuickWROOM ? QuickWROOM_Marauder : QuickWROOMBoot_Marauder ,
107+ esp_flasher_scene_quick_submenu_callback ,
108+ app );
109+ break ;
110+ case QuickS3Boot_Marauder :
111+ case QuickS3_Marauder :
112+ submenu_set_header (submenu , "Choose Firmware:" );
113+ submenu_add_item (
114+ submenu ,
115+ "Marauder (has Evil Portal)" ,
116+ state > QuickS3 ? QuickS3_Marauder : QuickS3Boot_Marauder ,
79117 esp_flasher_scene_quick_submenu_callback ,
80118 app );
81119 break ;
@@ -97,49 +135,63 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) {
97135 consumed = true;
98136
99137 bool enter_bootloader = false;
100- const char * boot = NULL ; // 0x1000
138+ bool s3 = false;
139+ const char * boot = NULL ; // 0x1000 (or 0x0 on S3)
101140 const char * part = NULL ; // 0x8000
102141 const char * app0 = NULL ; // 0xE000
103142 const char * firm = NULL ; // 0x10000
104143
105144 switch (event .event ) {
106- case QuickBootS2 :
107- case QuickBootWROOM :
145+ case QuickS2Boot :
146+ case QuickWROOMBoot :
147+ case QuickS3Boot :
108148 case QuickWROOM :
109149 case QuickS2 :
150+ case QuickS3 :
151+ // Select first item of submenu
110152 scene_manager_set_scene_state (
111153 app -> scene_manager , EspFlasherSceneQuick , event .event + 1 );
112154 scene_manager_next_scene (app -> scene_manager , EspFlasherSceneQuick );
113155 return consumed ;
114156
115- case QuickBootS2_Marauder :
157+ case QuickS2Boot_Marauder :
116158 enter_bootloader = true;
117159 /* fallthrough */
118160 case QuickS2_Marauder :
119- boot = APP_ASSETS_PATH ("marauder/S2 /esp32_marauder.ino.bootloader.bin" );
161+ boot = APP_ASSETS_PATH ("marauder/s2 /esp32_marauder.ino.bootloader.bin" );
120162 part = APP_ASSETS_PATH ("marauder/esp32_marauder.ino.partitions.bin" );
121163 app0 = APP_ASSETS_PATH ("marauder/boot_app0.bin" );
122- firm = APP_ASSETS_PATH ("marauder/S2 /esp32_marauder.flipper.bin" );
164+ firm = APP_ASSETS_PATH ("marauder/s2 /esp32_marauder.flipper.bin" );
123165 break ;
124166
125- case QuickBootS2_Blackmagic :
167+ case QuickS2Boot_Blackmagic :
126168 enter_bootloader = true;
127169 /* fallthrough */
128170 case QuickS2_Blackmagic :
129- boot = APP_ASSETS_PATH ("blackmagic/bootloader.bin" );
130- part = APP_ASSETS_PATH ("blackmagic/partition-table.bin" );
131- firm = APP_ASSETS_PATH ("blackmagic/blackmagic.bin" );
171+ boot = APP_ASSETS_PATH ("blackmagic/s2/ bootloader.bin" );
172+ part = APP_ASSETS_PATH ("blackmagic/s2/ partition-table.bin" );
173+ firm = APP_ASSETS_PATH ("blackmagic/s2/ blackmagic.bin" );
132174 break ;
133175
134- case QuickBootWROOM_Marauder :
176+ case QuickWROOMBoot_Marauder :
135177 enter_bootloader = true;
136178 /* fallthrough */
137179 case QuickWROOM_Marauder :
138- boot = APP_ASSETS_PATH ("marauder/WROOM/esp32_marauder.ino.bootloader.bin" );
180+ boot = APP_ASSETS_PATH ("marauder/wroom/esp32_marauder.ino.bootloader.bin" );
181+ part = APP_ASSETS_PATH ("marauder/esp32_marauder.ino.partitions.bin" );
182+ app0 = APP_ASSETS_PATH ("marauder/boot_app0.bin" );
183+ firm = APP_ASSETS_PATH ("marauder/wroom/esp32_marauder.dev_board_pro.bin" );
184+ break ;
185+
186+ case QuickS3Boot_Marauder :
187+ enter_bootloader = true;
188+ /* fallthrough */
189+ case QuickS3_Marauder :
190+ s3 = true;
191+ boot = APP_ASSETS_PATH ("marauder/s3/esp32_marauder.ino.bootloader.bin" );
139192 part = APP_ASSETS_PATH ("marauder/esp32_marauder.ino.partitions.bin" );
140193 app0 = APP_ASSETS_PATH ("marauder/boot_app0.bin" );
141- firm =
142- APP_ASSETS_PATH ("marauder/WROOM/esp32_marauder.dev_board_pro.bin" );
194+ firm = APP_ASSETS_PATH ("marauder/s3/esp32_marauder.multiboardS3.bin" );
143195 break ;
144196
145197 default :
@@ -157,6 +209,7 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) {
157209 app -> bin_file_path_app_b [0 ] = '\0' ;
158210 app -> bin_file_path_custom [0 ] = '\0' ;
159211
212+ app -> selected_flash_options [SelectedFlashS3Mode ] = s3 ;
160213 if (boot ) {
161214 app -> selected_flash_options [SelectedFlashBoot ] = true;
162215 strncpy (app -> bin_file_path_boot , boot , sizeof (app -> bin_file_path_boot ));
@@ -181,14 +234,20 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) {
181234 scene_manager_next_scene (app -> scene_manager , EspFlasherSceneConsoleOutput );
182235 } else if (event .type == SceneManagerEventTypeBack ) {
183236 uint32_t state = scene_manager_get_scene_state (app -> scene_manager , EspFlasherSceneQuick );
184- if (state > QuickS2 )
237+ // Pressing back from submenu, check if in submenu, select corresponding item in quick flash menu
238+ if (state > QuickS3 )
239+ state = QuickS3 ;
240+ else if (state > QuickS2 )
185241 state = QuickS2 ;
186242 else if (state > QuickWROOM )
187243 state = QuickWROOM ;
188- else if (state > QuickBootWROOM )
189- state = QuickBootWROOM ;
190- else if (state > QuickBootS2 )
191- state = QuickBootS2 ;
244+ else if (state > QuickS3Boot )
245+ state = QuickS3Boot ;
246+ else if (state > QuickWROOMBoot )
247+ state = QuickWROOMBoot ;
248+ else if (state > QuickS2Boot )
249+ state = QuickS2Boot ;
250+ // If pressing back from quick flash menu (not submenu), state will not matter
192251 scene_manager_set_scene_state (app -> scene_manager , EspFlasherSceneQuick , state );
193252 }
194253
0 commit comments