1use crate::Chip;
2
3#[derive(Clone, Debug)]
4pub struct Module {
5 pub name: &'static str,
6 pub display_name: &'static str,
7 pub chip: Chip,
8 pub remove_pins: &'static [&'static str],
9}
10
11pub const ESP32_MODULES: &[Module] = &[
16 Module {
17 name: "esp32-wroom-32e",
18 display_name: "ESP32-WROOM-32E/32UE (4/8/16MB flash)",
19 chip: Chip::Esp32,
20 remove_pins: &["spi_flash", "esp32_pico_v3"],
21 },
22 Module {
23 name: "esp32-wrover-e",
24 display_name: "ESP32-WROVER-E/IE (4/8/16MB flash, 8MB PSRAM)",
25 chip: Chip::Esp32,
26 remove_pins: &["spi_flash", "spi_psram", "esp32_pico_v3"],
27 },
28 Module {
29 name: "esp32-mini-1",
30 display_name: "ESP32-MINI-1/1U (4MB flash)",
31 chip: Chip::Esp32,
32 remove_pins: &["spi_flash", "esp32_pico_v3"],
33 },
34 Module {
35 name: "esp32-pico-mini-01",
36 display_name: "ESP32-PICO-MINI-02/02U (8MB flash, 2MB PSRAM)",
37 chip: Chip::Esp32,
38 remove_pins: &["spi_flash", "spi_psram"],
39 },
40 Module {
41 name: "esp32-pico-v3-zero",
42 display_name: "ESP32-PICO-V3-ZERO (4MB flash)",
43 chip: Chip::Esp32,
44 remove_pins: &["spi_flash"],
45 },
46 Module {
47 name: "esp32-wroom-32d",
48 display_name: "ESP32-WROOM-32D/32U (4/8/16MB flash)",
49 chip: Chip::Esp32,
50 remove_pins: &["spi_flash", "esp32_pico_v3"],
51 },
52 Module {
54 name: "esp32-wroom-32",
55 display_name: "ESP32-WROOM-32 (4MB flash)",
56 chip: Chip::Esp32,
57 remove_pins: &["spi_flash", "esp32_pico_v3"],
58 },
59 Module {
60 name: "esp32-wrover-b",
61 display_name: "ESP32-WROVER-B/IB (4/8/16MB flash, 8MB PSRAM)",
62 chip: Chip::Esp32,
63 remove_pins: &["spi_flash", "spi_psram", "esp32_pico_v3"],
64 },
65 Module {
66 name: "esp32-wroom-da",
67 display_name: "ESP32-WROOM-DA (4/8/16MB flash)",
68 chip: Chip::Esp32,
69 remove_pins: &["spi_flash", "esp32_pico_v3"],
70 },
71 Module {
72 name: "esp32-du1906",
73 display_name: "ESP32-DU1906/DU1906-U (8MB flash, 8MB PSRAM)",
74 chip: Chip::Esp32,
75 remove_pins: &["spi_flash", "spi_psram", "esp32_pico_v3"],
76 },
77];
78
79pub const ESP32C2_MODULES: &[Module] = &[
80 Module {
81 name: "esp32c2-mini-1",
82 display_name: "ESP8684-MINI-1/1U (1/2/4MB flash)",
83 chip: Chip::Esp32c2,
84 remove_pins: &["spi_flash"],
85 },
86 Module {
88 name: "esp32c2-wroom",
89 display_name: "ESP8684-WROOM-01C/02C/02UC/03/04C/05/06C/07 (2/4MB flash)",
90 chip: Chip::Esp32c2,
91 remove_pins: &["spi_flash"],
92 },
93];
94
95pub const ESP32C3_MODULES: &[Module] = &[
96 Module {
97 name: "esp32c3-mini-1",
98 display_name: "ESP32-C3-MINI-1/1U (4MB embedded flash)",
99 chip: Chip::Esp32c3,
100 remove_pins: &["spi_flash"],
101 },
102 Module {
103 name: "esp32c3-wroom-02",
104 display_name: "ESP32-C3-WROOM-02/02U (4MB flash)",
105 chip: Chip::Esp32c3,
106 remove_pins: &["spi_flash"],
107 },
108 Module {
110 name: "esp32c3-wroom-03",
111 display_name: "ESP8685-WROOM-03/04/05/06/07 (2/4MB flash)",
112 chip: Chip::Esp32c3,
113 remove_pins: &["spi_flash"],
114 },
115];
116
117pub const ESP32C5_MODULES: &[Module] = &[
118 Module {
119 name: "esp32c5-wroom-1",
120 display_name: "ESP32-C5-WROOM-1/1U (Without PSRAM)",
121 chip: Chip::Esp32c61,
122 remove_pins: &["spi_flash"],
123 },
124 Module {
125 name: "esp32c5-wroom-1-psram",
126 display_name: "ESP32-C5-WROOM-1/1U (8MB PSRAM)",
127 chip: Chip::Esp32c61,
128 remove_pins: &["spi_flash", "spi_psram"],
129 },
130 Module {
131 name: "esp32c5-mini-1",
132 display_name: "ESP32-C5-MINI-1/1U (Without PSRAM)",
133 chip: Chip::Esp32c61,
134 remove_pins: &["spi_flash"],
135 },
136 Module {
137 name: "esp32c5-mini-1-psram",
138 display_name: "ESP32-C5-MINI-1/1U (8MB PSRAM)",
139 chip: Chip::Esp32c61,
140 remove_pins: &["spi_flash", "spi_psram"],
141 },
142];
143
144pub const ESP32C6_MODULES: &[Module] = &[
145 Module {
146 name: "esp32c6-mini-1",
147 display_name: "ESP32-C6-MINI-1/1U (4/8MB flash)",
148 chip: Chip::Esp32c6,
149 remove_pins: &["spi_flash"],
150 },
151 Module {
152 name: "esp32c6-wroom-1",
153 display_name: "ESP32-C6-WROOM-1/1U (4/8/16MB flash)",
154 chip: Chip::Esp32c6,
155 remove_pins: &["spi_flash"],
156 },
157];
158
159pub const ESP32C61_MODULES: &[Module] = &[
160 Module {
161 name: "esp32c61-wroom-1",
162 display_name: "ESP32-C61-WROOM-1/1U",
163 chip: Chip::Esp32c61,
164 remove_pins: &["spi_flash", "spi_psram"],
165 },
166 Module {
167 name: "esp32c61-mini-1",
168 display_name: "ESP32-C61-MINI-1/1U",
169 chip: Chip::Esp32c61,
170 remove_pins: &["spi_flash"],
171 },
172];
173pub const ESP32H2_MODULES: &[Module] = &[
174 Module {
175 name: "esp32h2-mini-1",
176 display_name: "ESP32-H2-MINI-1/1U (1/2/4MB flash)",
177 chip: Chip::Esp32h2,
178 remove_pins: &["spi_flash"],
179 },
180 Module {
181 name: "esp32h2-wroom-02c",
182 display_name: "ESP32-H2-WROOM-02C (2/4MB flash)",
183 chip: Chip::Esp32h2,
184 remove_pins: &["spi_flash"],
185 },
186];
187
188pub const ESP32S2_MODULES: &[Module] = &[
189 Module {
190 name: "esp32s2-mini-2",
191 display_name: "ESP32-S2-MINI-2/2U (4MB embedded flash)",
192 chip: Chip::Esp32s2,
193 remove_pins: &["spi_flash"],
194 },
195 Module {
196 name: "esp32s2-mini-2-psram",
197 display_name: "ESP32-S2-MINI-2/2U (4MB embedded flash, 2MB PSRAM)",
198 chip: Chip::Esp32s2,
199 remove_pins: &["spi_flash", "spi_psram"],
200 },
201 Module {
202 name: "esp32s2-solo-2",
203 display_name: "ESP32-S2-SOLO-2/2U (4MB flash)",
204 chip: Chip::Esp32s2,
205 remove_pins: &["spi_flash"],
206 },
207 Module {
208 name: "esp32s2-solo-2-psram",
209 display_name: "ESP32-S2-SOLO-2/2U (4MB embedded flash, 2MB PSRAM)",
210 chip: Chip::Esp32s2,
211 remove_pins: &["spi_flash", "spi_psram"],
212 },
213 Module {
214 name: "esp32s2-mini-1",
215 display_name: "ESP32-S2-MINI-1/1U (4MB embedded flash)",
216 chip: Chip::Esp32s2,
217 remove_pins: &["spi_flash"],
218 },
219 Module {
220 name: "esp32s2-mini-1-psram",
221 display_name: "ESP32-S2-MINI-1/1U (4MB embedded flash, 2MB PSRAM)",
222 chip: Chip::Esp32s2,
223 remove_pins: &["spi_flash", "spi_psram"],
224 },
225 Module {
226 name: "esp32s2-solo",
227 display_name: "ESP32-S2-SOLO/SOLO-U (4/8/16MB flash)",
228 chip: Chip::Esp32s2,
229 remove_pins: &["spi_flash"],
230 },
231 Module {
232 name: "esp32s2-solo-psram",
233 display_name: "ESP32-S2-SOLO/SOLO-U (4/8/16MB embedded flash, 2MB PSRAM)",
234 chip: Chip::Esp32s2,
235 remove_pins: &["spi_flash", "spi_psram"],
236 },
237 Module {
238 name: "esp32s2-wrover",
239 display_name: "ESP32-S2-WROVER/WROVER-I (4/8/16MB flash, 2MB PSRAM)",
240 chip: Chip::Esp32s2,
241 remove_pins: &["spi_flash", "spi_psram"],
242 },
243 Module {
244 name: "esp32s2-wroom",
245 display_name: "ESP32-S2-WROOM/WROOM-I (4/8/16MB flash)",
246 chip: Chip::Esp32s2,
247 remove_pins: &["spi_flash"],
248 },
249];
250
251pub const ESP32S3_MODULES: &[Module] = &[
252 Module {
253 name: "esp32s3-wroom-1",
254 display_name: "ESP32-S3-WROOM-1/1U (4/8/16MB flash)",
255 chip: Chip::Esp32s3,
256 remove_pins: &["spi_flash"],
257 },
258 Module {
259 name: "esp32s3-wroom-1-psram",
260 display_name: "ESP32-S3-WROOM-1/1U (4/8/16MB flash, 2MB PSRAM)",
261 chip: Chip::Esp32s3,
262 remove_pins: &["spi_flash", "spi_psram"],
263 },
264 Module {
265 name: "esp32s3-wroom-1-octal-psram",
266 display_name: "ESP32-S3-WROOM-1/1U (4/8/16MB flash, 8/16MB PSRAM)",
267 chip: Chip::Esp32s3,
268 remove_pins: &["spi_flash", "octal_psram"],
269 },
270 Module {
271 name: "esp32s3-wroom-2",
272 display_name: "ESP32-S3-WROOM-2 (16/32MB flash, 8/16MB PSRAM)",
273 chip: Chip::Esp32s3,
274 remove_pins: &["octal_flash", "octal_psram"],
275 },
276 Module {
277 name: "esp32s3-mini-1",
278 display_name: "ESP32-S3-MINI-1/1U (4/8MB embedded flash)",
279 chip: Chip::Esp32s3,
280 remove_pins: &["spi_flash"],
281 },
282 Module {
283 name: "esp32s3-mini-1-psram",
284 display_name: "ESP32-S3-MINI-1/1U (4/8MB embedded flash, 2MB PSRAM)",
285 chip: Chip::Esp32s3,
286 remove_pins: &["spi_flash", "spi_psram"],
287 },
288];
289
290use crate::template::GeneratorOptionItem;
291
292pub fn populate_module_category(chip: Chip, options: &mut [GeneratorOptionItem]) {
294 for item in options.iter_mut() {
295 let GeneratorOptionItem::Category(category) = item else {
296 continue;
297 };
298 if category.name != "module" {
299 continue;
300 }
301
302 let template_opt = match category.options.first() {
303 Some(GeneratorOptionItem::Option(opt)) => opt.clone(),
304 _ => {
305 panic!("module category must contain a placeholder !Option");
306 }
307 };
308
309 category.options.clear();
310
311 for module in chip.modules() {
312 let mut opt = template_opt.clone();
313 opt.name = module.name.to_string();
314 opt.display_name = module.display_name.to_string();
315 opt.selection_group = "module".to_string();
316 category.options.push(GeneratorOptionItem::Option(opt));
317 }
318
319 break;
320 }
321}