1
1
#include "../esp_flasher_app_i.h"
2
2
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
3
10
enum QuickState {
4
11
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 ,
10
19
QuickWROOM ,
11
20
QuickWROOM_Marauder ,
12
21
QuickS2 ,
13
22
QuickS2_Marauder ,
14
23
QuickS2_Blackmagic ,
24
+ QuickS3 ,
25
+ QuickS3_Marauder ,
15
26
};
16
27
17
28
void esp_flasher_scene_quick_submenu_callback (void * context , uint32_t index ) {
@@ -27,21 +38,36 @@ void esp_flasher_scene_quick_on_enter(void* context) {
27
38
Submenu * submenu = app -> submenu ;
28
39
uint32_t state = scene_manager_get_scene_state (app -> scene_manager , EspFlasherSceneQuick );
29
40
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
30
44
switch (state ) {
31
45
case QuickStart :
32
- case QuickBootS2 :
33
- case QuickBootWROOM :
46
+ case QuickS2Boot :
47
+ case QuickWROOMBoot :
48
+ case QuickS3Boot :
34
49
case QuickWROOM :
35
50
case QuickS2 :
51
+ case QuickS3 :
36
52
submenu_set_header (submenu , "Choose Board:" );
37
53
submenu_add_item (
38
54
submenu ,
39
- "Flipper WiFi Board / Xeon " ,
40
- QuickBootS2 ,
55
+ "Flipper WiFi Devboard " ,
56
+ QuickS2Boot ,
41
57
esp_flasher_scene_quick_submenu_callback ,
42
58
app );
43
59
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 );
45
71
submenu_add_item (
46
72
submenu ,
47
73
"Other ESP32-WROOM" ,
@@ -50,32 +76,44 @@ void esp_flasher_scene_quick_on_enter(void* context) {
50
76
app );
51
77
submenu_add_item (
52
78
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 );
53
81
break ;
54
- case QuickBootS2_Marauder :
55
- case QuickBootS2_Blackmagic :
82
+ case QuickS2Boot_Marauder :
83
+ case QuickS2Boot_Blackmagic :
56
84
case QuickS2_Marauder :
57
85
case QuickS2_Blackmagic :
58
86
submenu_set_header (submenu , "Choose Firmware:" );
59
87
submenu_add_item (
60
88
submenu ,
61
89
"Marauder (has Evil Portal)" ,
62
- state > QuickS2 ? QuickS2_Marauder : QuickBootS2_Marauder ,
90
+ state > QuickS2 ? QuickS2_Marauder : QuickS2Boot_Marauder ,
63
91
esp_flasher_scene_quick_submenu_callback ,
64
92
app );
65
93
submenu_add_item (
66
94
submenu ,
67
95
"Black Magic" ,
68
- state > QuickS2 ? QuickS2_Blackmagic : QuickBootS2_Blackmagic ,
96
+ state > QuickS2 ? QuickS2_Blackmagic : QuickS2Boot_Blackmagic ,
69
97
esp_flasher_scene_quick_submenu_callback ,
70
98
app );
71
99
break ;
72
- case QuickBootWROOM_Marauder :
100
+ case QuickWROOMBoot_Marauder :
73
101
case QuickWROOM_Marauder :
74
102
submenu_set_header (submenu , "Choose Firmware:" );
75
103
submenu_add_item (
76
104
submenu ,
77
105
"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 ,
79
117
esp_flasher_scene_quick_submenu_callback ,
80
118
app );
81
119
break ;
@@ -97,49 +135,63 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) {
97
135
consumed = true;
98
136
99
137
bool enter_bootloader = false;
100
- const char * boot = NULL ; // 0x1000
138
+ bool s3 = false;
139
+ const char * boot = NULL ; // 0x1000 (or 0x0 on S3)
101
140
const char * part = NULL ; // 0x8000
102
141
const char * app0 = NULL ; // 0xE000
103
142
const char * firm = NULL ; // 0x10000
104
143
105
144
switch (event .event ) {
106
- case QuickBootS2 :
107
- case QuickBootWROOM :
145
+ case QuickS2Boot :
146
+ case QuickWROOMBoot :
147
+ case QuickS3Boot :
108
148
case QuickWROOM :
109
149
case QuickS2 :
150
+ case QuickS3 :
151
+ // Select first item of submenu
110
152
scene_manager_set_scene_state (
111
153
app -> scene_manager , EspFlasherSceneQuick , event .event + 1 );
112
154
scene_manager_next_scene (app -> scene_manager , EspFlasherSceneQuick );
113
155
return consumed ;
114
156
115
- case QuickBootS2_Marauder :
157
+ case QuickS2Boot_Marauder :
116
158
enter_bootloader = true;
117
159
/* fallthrough */
118
160
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" );
120
162
part = APP_ASSETS_PATH ("marauder/esp32_marauder.ino.partitions.bin" );
121
163
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" );
123
165
break ;
124
166
125
- case QuickBootS2_Blackmagic :
167
+ case QuickS2Boot_Blackmagic :
126
168
enter_bootloader = true;
127
169
/* fallthrough */
128
170
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" );
132
174
break ;
133
175
134
- case QuickBootWROOM_Marauder :
176
+ case QuickWROOMBoot_Marauder :
135
177
enter_bootloader = true;
136
178
/* fallthrough */
137
179
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" );
139
192
part = APP_ASSETS_PATH ("marauder/esp32_marauder.ino.partitions.bin" );
140
193
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" );
143
195
break ;
144
196
145
197
default :
@@ -157,6 +209,7 @@ bool esp_flasher_scene_quick_on_event(void* context, SceneManagerEvent event) {
157
209
app -> bin_file_path_app_b [0 ] = '\0' ;
158
210
app -> bin_file_path_custom [0 ] = '\0' ;
159
211
212
+ app -> selected_flash_options [SelectedFlashS3Mode ] = s3 ;
160
213
if (boot ) {
161
214
app -> selected_flash_options [SelectedFlashBoot ] = true;
162
215
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) {
181
234
scene_manager_next_scene (app -> scene_manager , EspFlasherSceneConsoleOutput );
182
235
} else if (event .type == SceneManagerEventTypeBack ) {
183
236
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 )
185
241
state = QuickS2 ;
186
242
else if (state > QuickWROOM )
187
243
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
192
251
scene_manager_set_scene_state (app -> scene_manager , EspFlasherSceneQuick , state );
193
252
}
194
253
0 commit comments