esp_metadata_generated/
_generated_esp32s2.rs

1// Do NOT edit this file directly. Make your changes to esp-metadata,
2// then run `cargo xtask update-metadata`.
3
4/// The name of the chip as `&str`
5///
6/// # Example
7///
8/// ```rust, no_run
9/// use esp_hal::chip;
10/// let chip_name = chip!();
11#[doc = concat!("assert_eq!(chip_name, ", chip!(), ")")]
12/// ```
13#[macro_export]
14#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
15macro_rules! chip {
16    () => {
17        "esp32s2"
18    };
19}
20/// The properties of this chip and its drivers.
21#[macro_export]
22#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
23macro_rules! property {
24    ("chip") => {
25        "esp32s2"
26    };
27    ("arch") => {
28        "xtensa"
29    };
30    ("cores") => {
31        1
32    };
33    ("cores", str) => {
34        stringify!(1)
35    };
36    ("trm") => {
37        "https://www.espressif.com/sites/default/files/documentation/esp32-s2_technical_reference_manual_en.pdf"
38    };
39    ("soc.cpu_has_csr_pc") => {
40        false
41    };
42    ("soc.cpu_has_prv_mode") => {
43        false
44    };
45    ("soc.ref_tick_hz") => {
46        1000000
47    };
48    ("soc.ref_tick_hz", str) => {
49        stringify!(1000000)
50    };
51    ("soc.rc_fast_clk_default") => {
52        8500000
53    };
54    ("soc.rc_fast_clk_default", str) => {
55        stringify!(8500000)
56    };
57    ("soc.rc_slow_clock") => {
58        90000
59    };
60    ("soc.rc_slow_clock", str) => {
61        stringify!(90000)
62    };
63    ("soc.xtal_frequency") => {
64        40
65    };
66    ("soc.xtal_frequency", str) => {
67        stringify!(40)
68    };
69    ("aes.dma") => {
70        true
71    };
72    ("aes.has_split_text_registers") => {
73        true
74    };
75    ("aes.endianness_configurable") => {
76        true
77    };
78    ("gpio.has_bank_1") => {
79        true
80    };
81    ("gpio.gpio_function") => {
82        1
83    };
84    ("gpio.gpio_function", str) => {
85        stringify!(1)
86    };
87    ("gpio.constant_0_input") => {
88        60
89    };
90    ("gpio.constant_0_input", str) => {
91        stringify!(60)
92    };
93    ("gpio.constant_1_input") => {
94        56
95    };
96    ("gpio.constant_1_input", str) => {
97        stringify!(56)
98    };
99    ("gpio.remap_iomux_pin_registers") => {
100        false
101    };
102    ("gpio.func_in_sel_offset") => {
103        0
104    };
105    ("gpio.func_in_sel_offset", str) => {
106        stringify!(0)
107    };
108    ("gpio.input_signal_max") => {
109        242
110    };
111    ("gpio.input_signal_max", str) => {
112        stringify!(242)
113    };
114    ("gpio.output_signal_max") => {
115        256
116    };
117    ("gpio.output_signal_max", str) => {
118        stringify!(256)
119    };
120    ("i2c_master.has_fsm_timeouts") => {
121        false
122    };
123    ("i2c_master.has_hw_bus_clear") => {
124        false
125    };
126    ("i2c_master.has_bus_timeout_enable") => {
127        true
128    };
129    ("i2c_master.separate_filter_config_registers") => {
130        true
131    };
132    ("i2c_master.can_estimate_nack_reason") => {
133        false
134    };
135    ("i2c_master.has_conf_update") => {
136        false
137    };
138    ("i2c_master.has_reliable_fsm_reset") => {
139        false
140    };
141    ("i2c_master.has_arbitration_en") => {
142        true
143    };
144    ("i2c_master.has_tx_fifo_watermark") => {
145        false
146    };
147    ("i2c_master.bus_timeout_is_exponential") => {
148        false
149    };
150    ("i2c_master.i2c0_data_register_ahb_address") => {
151        1610690588
152    };
153    ("i2c_master.i2c0_data_register_ahb_address", str) => {
154        stringify!(1610690588)
155    };
156    ("i2c_master.max_bus_timeout") => {
157        16777215
158    };
159    ("i2c_master.max_bus_timeout", str) => {
160        stringify!(16777215)
161    };
162    ("i2c_master.ll_intr_mask") => {
163        131071
164    };
165    ("i2c_master.ll_intr_mask", str) => {
166        stringify!(131071)
167    };
168    ("i2c_master.fifo_size") => {
169        32
170    };
171    ("i2c_master.fifo_size", str) => {
172        stringify!(32)
173    };
174    ("interrupts.status_registers") => {
175        3
176    };
177    ("interrupts.status_registers", str) => {
178        stringify!(3)
179    };
180    ("rmt.ram_start") => {
181        1061250048
182    };
183    ("rmt.ram_start", str) => {
184        stringify!(1061250048)
185    };
186    ("rmt.channel_ram_size") => {
187        64
188    };
189    ("rmt.channel_ram_size", str) => {
190        stringify!(64)
191    };
192    ("rmt.has_tx_immediate_stop") => {
193        true
194    };
195    ("rmt.has_tx_loop_count") => {
196        true
197    };
198    ("rmt.has_tx_loop_auto_stop") => {
199        false
200    };
201    ("rmt.has_tx_carrier_data_only") => {
202        true
203    };
204    ("rmt.has_tx_sync") => {
205        true
206    };
207    ("rmt.has_rx_wrap") => {
208        false
209    };
210    ("rmt.has_rx_demodulation") => {
211        true
212    };
213    ("rmt.has_dma") => {
214        false
215    };
216    ("rmt.has_per_channel_clock") => {
217        true
218    };
219    ("rng.apb_cycle_wait_num") => {
220        16
221    };
222    ("rng.apb_cycle_wait_num", str) => {
223        stringify!(16)
224    };
225    ("rsa.size_increment") => {
226        32
227    };
228    ("rsa.size_increment", str) => {
229        stringify!(32)
230    };
231    ("rsa.memory_size_bytes") => {
232        512
233    };
234    ("rsa.memory_size_bytes", str) => {
235        stringify!(512)
236    };
237    ("sha.dma") => {
238        true
239    };
240    ("spi_master.has_octal") => {
241        true
242    };
243    ("timergroup.timg_has_timer1") => {
244        true
245    };
246    ("timergroup.timg_has_divcnt_rst") => {
247        false
248    };
249    ("timergroup.default_clock_source") => {
250        0
251    };
252    ("timergroup.default_clock_source", str) => {
253        stringify!(0)
254    };
255    ("uart.ram_size") => {
256        128
257    };
258    ("uart.ram_size", str) => {
259        stringify!(128)
260    };
261    ("wifi.has_wifi6") => {
262        false
263    };
264    ("phy.combo_module") => {
265        false
266    };
267}
268/// Macro to get the address range of the given memory region.
269#[macro_export]
270#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
271macro_rules! memory_range {
272    ("DRAM") => {
273        1073414144..1073741824
274    };
275}
276#[macro_export]
277#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
278macro_rules! for_each_soc_xtal_options {
279    ($($pattern:tt => $code:tt;)*) => {
280        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
281        _for_each_inner!((40)); _for_each_inner!((all(40)));
282    };
283}
284#[macro_export]
285#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
286macro_rules! for_each_aes_key_length {
287    ($($pattern:tt => $code:tt;)*) => {
288        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
289        _for_each_inner!((128)); _for_each_inner!((192)); _for_each_inner!((256));
290        _for_each_inner!((128, 0, 4)); _for_each_inner!((192, 1, 5));
291        _for_each_inner!((256, 2, 6)); _for_each_inner!((bits(128), (192), (256)));
292        _for_each_inner!((modes(128, 0, 4), (192, 1, 5), (256, 2, 6)));
293    };
294}
295/// This macro can be used to generate code for each channel of the RMT peripheral.
296///
297/// For an explanation on the general syntax, as well as usage of individual/repeated
298/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
299///
300/// This macro has three options for its "Individual matcher" case:
301///
302/// - `all`: `($num:literal)`
303/// - `tx`: `($num:literal, $idx:literal)`
304/// - `rx`: `($num:literal, $idx:literal)`
305///
306/// Macro fragments:
307///
308/// - `$num`: number of the channel, e.g. `0`
309/// - `$idx`: index of the channel among channels of the same capability, e.g. `0`
310///
311/// Example data:
312///
313/// - `all`: `(0)`
314/// - `tx`: `(1, 1)`
315/// - `rx`: `(2, 0)`
316#[macro_export]
317#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
318macro_rules! for_each_rmt_channel {
319    ($($pattern:tt => $code:tt;)*) => {
320        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
321        _for_each_inner!((0)); _for_each_inner!((1)); _for_each_inner!((2));
322        _for_each_inner!((3)); _for_each_inner!((0, 0)); _for_each_inner!((1, 1));
323        _for_each_inner!((2, 2)); _for_each_inner!((3, 3)); _for_each_inner!((0, 0));
324        _for_each_inner!((1, 1)); _for_each_inner!((2, 2)); _for_each_inner!((3, 3));
325        _for_each_inner!((all(0), (1), (2), (3))); _for_each_inner!((tx(0, 0), (1, 1),
326        (2, 2), (3, 3))); _for_each_inner!((rx(0, 0), (1, 1), (2, 2), (3, 3)));
327    };
328}
329#[macro_export]
330#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
331macro_rules! for_each_rmt_clock_source {
332    ($($pattern:tt => $code:tt;)*) => {
333        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
334        _for_each_inner!((RefTick, 0)); _for_each_inner!((Apb, 1));
335        _for_each_inner!((Apb)); _for_each_inner!((all(RefTick, 0), (Apb, 1)));
336        _for_each_inner!((default(Apb))); _for_each_inner!((is_boolean));
337    };
338}
339#[macro_export]
340#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
341macro_rules! for_each_rsa_exponentiation {
342    ($($pattern:tt => $code:tt;)*) => {
343        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
344        _for_each_inner!((32)); _for_each_inner!((64)); _for_each_inner!((96));
345        _for_each_inner!((128)); _for_each_inner!((160)); _for_each_inner!((192));
346        _for_each_inner!((224)); _for_each_inner!((256)); _for_each_inner!((288));
347        _for_each_inner!((320)); _for_each_inner!((352)); _for_each_inner!((384));
348        _for_each_inner!((416)); _for_each_inner!((448)); _for_each_inner!((480));
349        _for_each_inner!((512)); _for_each_inner!((544)); _for_each_inner!((576));
350        _for_each_inner!((608)); _for_each_inner!((640)); _for_each_inner!((672));
351        _for_each_inner!((704)); _for_each_inner!((736)); _for_each_inner!((768));
352        _for_each_inner!((800)); _for_each_inner!((832)); _for_each_inner!((864));
353        _for_each_inner!((896)); _for_each_inner!((928)); _for_each_inner!((960));
354        _for_each_inner!((992)); _for_each_inner!((1024)); _for_each_inner!((1056));
355        _for_each_inner!((1088)); _for_each_inner!((1120)); _for_each_inner!((1152));
356        _for_each_inner!((1184)); _for_each_inner!((1216)); _for_each_inner!((1248));
357        _for_each_inner!((1280)); _for_each_inner!((1312)); _for_each_inner!((1344));
358        _for_each_inner!((1376)); _for_each_inner!((1408)); _for_each_inner!((1440));
359        _for_each_inner!((1472)); _for_each_inner!((1504)); _for_each_inner!((1536));
360        _for_each_inner!((1568)); _for_each_inner!((1600)); _for_each_inner!((1632));
361        _for_each_inner!((1664)); _for_each_inner!((1696)); _for_each_inner!((1728));
362        _for_each_inner!((1760)); _for_each_inner!((1792)); _for_each_inner!((1824));
363        _for_each_inner!((1856)); _for_each_inner!((1888)); _for_each_inner!((1920));
364        _for_each_inner!((1952)); _for_each_inner!((1984)); _for_each_inner!((2016));
365        _for_each_inner!((2048)); _for_each_inner!((2080)); _for_each_inner!((2112));
366        _for_each_inner!((2144)); _for_each_inner!((2176)); _for_each_inner!((2208));
367        _for_each_inner!((2240)); _for_each_inner!((2272)); _for_each_inner!((2304));
368        _for_each_inner!((2336)); _for_each_inner!((2368)); _for_each_inner!((2400));
369        _for_each_inner!((2432)); _for_each_inner!((2464)); _for_each_inner!((2496));
370        _for_each_inner!((2528)); _for_each_inner!((2560)); _for_each_inner!((2592));
371        _for_each_inner!((2624)); _for_each_inner!((2656)); _for_each_inner!((2688));
372        _for_each_inner!((2720)); _for_each_inner!((2752)); _for_each_inner!((2784));
373        _for_each_inner!((2816)); _for_each_inner!((2848)); _for_each_inner!((2880));
374        _for_each_inner!((2912)); _for_each_inner!((2944)); _for_each_inner!((2976));
375        _for_each_inner!((3008)); _for_each_inner!((3040)); _for_each_inner!((3072));
376        _for_each_inner!((3104)); _for_each_inner!((3136)); _for_each_inner!((3168));
377        _for_each_inner!((3200)); _for_each_inner!((3232)); _for_each_inner!((3264));
378        _for_each_inner!((3296)); _for_each_inner!((3328)); _for_each_inner!((3360));
379        _for_each_inner!((3392)); _for_each_inner!((3424)); _for_each_inner!((3456));
380        _for_each_inner!((3488)); _for_each_inner!((3520)); _for_each_inner!((3552));
381        _for_each_inner!((3584)); _for_each_inner!((3616)); _for_each_inner!((3648));
382        _for_each_inner!((3680)); _for_each_inner!((3712)); _for_each_inner!((3744));
383        _for_each_inner!((3776)); _for_each_inner!((3808)); _for_each_inner!((3840));
384        _for_each_inner!((3872)); _for_each_inner!((3904)); _for_each_inner!((3936));
385        _for_each_inner!((3968)); _for_each_inner!((4000)); _for_each_inner!((4032));
386        _for_each_inner!((4064)); _for_each_inner!((4096)); _for_each_inner!((all(32),
387        (64), (96), (128), (160), (192), (224), (256), (288), (320), (352), (384), (416),
388        (448), (480), (512), (544), (576), (608), (640), (672), (704), (736), (768),
389        (800), (832), (864), (896), (928), (960), (992), (1024), (1056), (1088), (1120),
390        (1152), (1184), (1216), (1248), (1280), (1312), (1344), (1376), (1408), (1440),
391        (1472), (1504), (1536), (1568), (1600), (1632), (1664), (1696), (1728), (1760),
392        (1792), (1824), (1856), (1888), (1920), (1952), (1984), (2016), (2048), (2080),
393        (2112), (2144), (2176), (2208), (2240), (2272), (2304), (2336), (2368), (2400),
394        (2432), (2464), (2496), (2528), (2560), (2592), (2624), (2656), (2688), (2720),
395        (2752), (2784), (2816), (2848), (2880), (2912), (2944), (2976), (3008), (3040),
396        (3072), (3104), (3136), (3168), (3200), (3232), (3264), (3296), (3328), (3360),
397        (3392), (3424), (3456), (3488), (3520), (3552), (3584), (3616), (3648), (3680),
398        (3712), (3744), (3776), (3808), (3840), (3872), (3904), (3936), (3968), (4000),
399        (4032), (4064), (4096)));
400    };
401}
402#[macro_export]
403#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
404macro_rules! for_each_rsa_multiplication {
405    ($($pattern:tt => $code:tt;)*) => {
406        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
407        _for_each_inner!((32)); _for_each_inner!((64)); _for_each_inner!((96));
408        _for_each_inner!((128)); _for_each_inner!((160)); _for_each_inner!((192));
409        _for_each_inner!((224)); _for_each_inner!((256)); _for_each_inner!((288));
410        _for_each_inner!((320)); _for_each_inner!((352)); _for_each_inner!((384));
411        _for_each_inner!((416)); _for_each_inner!((448)); _for_each_inner!((480));
412        _for_each_inner!((512)); _for_each_inner!((544)); _for_each_inner!((576));
413        _for_each_inner!((608)); _for_each_inner!((640)); _for_each_inner!((672));
414        _for_each_inner!((704)); _for_each_inner!((736)); _for_each_inner!((768));
415        _for_each_inner!((800)); _for_each_inner!((832)); _for_each_inner!((864));
416        _for_each_inner!((896)); _for_each_inner!((928)); _for_each_inner!((960));
417        _for_each_inner!((992)); _for_each_inner!((1024)); _for_each_inner!((1056));
418        _for_each_inner!((1088)); _for_each_inner!((1120)); _for_each_inner!((1152));
419        _for_each_inner!((1184)); _for_each_inner!((1216)); _for_each_inner!((1248));
420        _for_each_inner!((1280)); _for_each_inner!((1312)); _for_each_inner!((1344));
421        _for_each_inner!((1376)); _for_each_inner!((1408)); _for_each_inner!((1440));
422        _for_each_inner!((1472)); _for_each_inner!((1504)); _for_each_inner!((1536));
423        _for_each_inner!((1568)); _for_each_inner!((1600)); _for_each_inner!((1632));
424        _for_each_inner!((1664)); _for_each_inner!((1696)); _for_each_inner!((1728));
425        _for_each_inner!((1760)); _for_each_inner!((1792)); _for_each_inner!((1824));
426        _for_each_inner!((1856)); _for_each_inner!((1888)); _for_each_inner!((1920));
427        _for_each_inner!((1952)); _for_each_inner!((1984)); _for_each_inner!((2016));
428        _for_each_inner!((2048)); _for_each_inner!((all(32), (64), (96), (128), (160),
429        (192), (224), (256), (288), (320), (352), (384), (416), (448), (480), (512),
430        (544), (576), (608), (640), (672), (704), (736), (768), (800), (832), (864),
431        (896), (928), (960), (992), (1024), (1056), (1088), (1120), (1152), (1184),
432        (1216), (1248), (1280), (1312), (1344), (1376), (1408), (1440), (1472), (1504),
433        (1536), (1568), (1600), (1632), (1664), (1696), (1728), (1760), (1792), (1824),
434        (1856), (1888), (1920), (1952), (1984), (2016), (2048)));
435    };
436}
437#[macro_export]
438#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
439macro_rules! for_each_sha_algorithm {
440    ($($pattern:tt => $code:tt;)*) => {
441        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
442        _for_each_inner!((Sha1, "SHA-1"(sizes : 64, 20, 8) (insecure_against :
443        "collision", "length extension"), 0)); _for_each_inner!((Sha224, "SHA-224"(sizes
444        : 64, 28, 8) (insecure_against : "length extension"), 1));
445        _for_each_inner!((Sha256, "SHA-256"(sizes : 64, 32, 8) (insecure_against :
446        "length extension"), 2)); _for_each_inner!((Sha384, "SHA-384"(sizes : 128, 48,
447        16) (insecure_against :), 3)); _for_each_inner!((Sha512, "SHA-512"(sizes : 128,
448        64, 16) (insecure_against : "length extension"), 4));
449        _for_each_inner!((Sha512_224, "SHA-512/224"(sizes : 128, 28, 16)
450        (insecure_against :), 5)); _for_each_inner!((Sha512_256, "SHA-512/256"(sizes :
451        128, 32, 16) (insecure_against :), 6)); _for_each_inner!((algos(Sha1,
452        "SHA-1"(sizes : 64, 20, 8) (insecure_against : "collision", "length extension"),
453        0), (Sha224, "SHA-224"(sizes : 64, 28, 8) (insecure_against :
454        "length extension"), 1), (Sha256, "SHA-256"(sizes : 64, 32, 8) (insecure_against
455        : "length extension"), 2), (Sha384, "SHA-384"(sizes : 128, 48, 16)
456        (insecure_against :), 3), (Sha512, "SHA-512"(sizes : 128, 64, 16)
457        (insecure_against : "length extension"), 4), (Sha512_224, "SHA-512/224"(sizes :
458        128, 28, 16) (insecure_against :), 5), (Sha512_256, "SHA-512/256"(sizes : 128,
459        32, 16) (insecure_against :), 6)));
460    };
461}
462/// This macro can be used to generate code for each peripheral instance of the I2C master driver.
463///
464/// For an explanation on the general syntax, as well as usage of individual/repeated
465/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
466///
467/// This macro has one option for its "Individual matcher" case:
468///
469/// Syntax: `($instance:ident, $sys:ident, $scl:ident, $sda:ident)`
470///
471/// Macro fragments:
472///
473/// - `$instance`: the name of the I2C instance
474/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
475/// - `$scl`, `$sda`: peripheral signal names.
476///
477/// Example data: `(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA)`
478#[macro_export]
479#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
480macro_rules! for_each_i2c_master {
481    ($($pattern:tt => $code:tt;)*) => {
482        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
483        _for_each_inner!((I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA));
484        _for_each_inner!((I2C1, I2cExt1, I2CEXT1_SCL, I2CEXT1_SDA));
485        _for_each_inner!((all(I2C0, I2cExt0, I2CEXT0_SCL, I2CEXT0_SDA), (I2C1, I2cExt1,
486        I2CEXT1_SCL, I2CEXT1_SDA)));
487    };
488}
489/// This macro can be used to generate code for each peripheral instance of the UART driver.
490///
491/// For an explanation on the general syntax, as well as usage of individual/repeated
492/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
493///
494/// This macro has one option for its "Individual matcher" case:
495///
496/// Syntax: `($instance:ident, $sys:ident, $rx:ident, $tx:ident, $cts:ident, $rts:ident)`
497///
498/// Macro fragments:
499///
500/// - `$instance`: the name of the UART instance
501/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
502/// - `$rx`, `$tx`, `$cts`, `$rts`: signal names.
503///
504/// Example data: `(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS)`
505#[macro_export]
506#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
507macro_rules! for_each_uart {
508    ($($pattern:tt => $code:tt;)*) => {
509        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
510        _for_each_inner!((UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS));
511        _for_each_inner!((UART1, Uart1, U1RXD, U1TXD, U1CTS, U1RTS));
512        _for_each_inner!((all(UART0, Uart0, U0RXD, U0TXD, U0CTS, U0RTS), (UART1, Uart1,
513        U1RXD, U1TXD, U1CTS, U1RTS)));
514    };
515}
516/// This macro can be used to generate code for each peripheral instance of the SPI master driver.
517///
518/// For an explanation on the general syntax, as well as usage of individual/repeated
519/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
520///
521/// This macro has one option for its "Individual matcher" case:
522///
523/// Syntax: `($instance:ident, $sys:ident, $sclk:ident, [$($cs:ident),*] [$($sio:ident),*
524/// $($is_qspi:iteral)?])`
525///
526/// Macro fragments:
527///
528/// - `$instance`: the name of the SPI instance
529/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
530/// - `$cs`, `$sio`: chip select and SIO signal names.
531/// - `$is_qspi`: a `true` literal present if the SPI instance supports QSPI.
532///
533/// Example data:
534/// - `(SPI2, Spi2, FSPICLK [FSPICS0, FSPICS1, FSPICS2, FSPICS3, FSPICS4, FSPICS5] [FSPID, FSPIQ,
535///   FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6, FSPIIO7], true)`
536/// - `(SPI3, Spi3, SPI3_CLK [SPI3_CS0, SPI3_CS1, SPI3_CS2] [SPI3_D, SPI3_Q])`
537#[macro_export]
538#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
539macro_rules! for_each_spi_master {
540    ($($pattern:tt => $code:tt;)*) => {
541        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
542        _for_each_inner!((SPI2, Spi2, FSPICLK[FSPICS0, FSPICS1, FSPICS2, FSPICS3,
543        FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD, FSPIIO4, FSPIIO5, FSPIIO6,
544        FSPIIO7], true)); _for_each_inner!((SPI3, Spi3, SPI3_CLK[SPI3_CS0, SPI3_CS1,
545        SPI3_CS2] [SPI3_D, SPI3_Q])); _for_each_inner!((all(SPI2, Spi2, FSPICLK[FSPICS0,
546        FSPICS1, FSPICS2, FSPICS3, FSPICS4, FSPICS5] [FSPID, FSPIQ, FSPIWP, FSPIHD,
547        FSPIIO4, FSPIIO5, FSPIIO6, FSPIIO7], true), (SPI3, Spi3, SPI3_CLK[SPI3_CS0,
548        SPI3_CS1, SPI3_CS2] [SPI3_D, SPI3_Q])));
549    };
550}
551/// This macro can be used to generate code for each peripheral instance of the SPI slave driver.
552///
553/// For an explanation on the general syntax, as well as usage of individual/repeated
554/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
555///
556/// This macro has one option for its "Individual matcher" case:
557///
558/// Syntax: `($instance:ident, $sys:ident, $sclk:ident, $mosi:ident, $miso:ident, $cs:ident)`
559///
560/// Macro fragments:
561///
562/// - `$instance`: the name of the I2C instance
563/// - `$sys`: the name of the instance as it is in the `esp_hal::system::Peripheral` enum.
564/// - `$mosi`, `$miso`, `$cs`: signal names.
565///
566/// Example data: `(SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0)`
567#[macro_export]
568#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
569macro_rules! for_each_spi_slave {
570    ($($pattern:tt => $code:tt;)*) => {
571        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
572        _for_each_inner!((SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0));
573        _for_each_inner!((SPI3, Spi3, SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0));
574        _for_each_inner!((all(SPI2, Spi2, FSPICLK, FSPID, FSPIQ, FSPICS0), (SPI3, Spi3,
575        SPI3_CLK, SPI3_D, SPI3_Q, SPI3_CS0)));
576    };
577}
578#[macro_export]
579#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
580macro_rules! for_each_peripheral {
581    ($($pattern:tt => $code:tt;)*) => {
582        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
583        _for_each_inner!((GPIO0 <= virtual())); _for_each_inner!((GPIO1 <= virtual()));
584        _for_each_inner!((GPIO2 <= virtual())); _for_each_inner!((GPIO3 <= virtual()));
585        _for_each_inner!((GPIO4 <= virtual())); _for_each_inner!((GPIO5 <= virtual()));
586        _for_each_inner!((GPIO6 <= virtual())); _for_each_inner!((GPIO7 <= virtual()));
587        _for_each_inner!((GPIO8 <= virtual())); _for_each_inner!((GPIO9 <= virtual()));
588        _for_each_inner!((GPIO10 <= virtual())); _for_each_inner!((GPIO11 <= virtual()));
589        _for_each_inner!((GPIO12 <= virtual())); _for_each_inner!((GPIO13 <= virtual()));
590        _for_each_inner!((GPIO14 <= virtual())); _for_each_inner!((GPIO15 <= virtual()));
591        _for_each_inner!((GPIO16 <= virtual())); _for_each_inner!((GPIO17 <= virtual()));
592        _for_each_inner!((GPIO18 <= virtual())); _for_each_inner!((GPIO19 <= virtual()));
593        _for_each_inner!((GPIO20 <= virtual())); _for_each_inner!((GPIO21 <= virtual()));
594        _for_each_inner!((GPIO33 <= virtual())); _for_each_inner!((GPIO34 <= virtual()));
595        _for_each_inner!((GPIO35 <= virtual())); _for_each_inner!((GPIO36 <= virtual()));
596        _for_each_inner!((GPIO37 <= virtual())); _for_each_inner!((GPIO38 <= virtual()));
597        _for_each_inner!((GPIO39 <= virtual())); _for_each_inner!((GPIO40 <= virtual()));
598        _for_each_inner!((GPIO41 <= virtual())); _for_each_inner!((GPIO42 <= virtual()));
599        _for_each_inner!((GPIO43 <= virtual())); _for_each_inner!((GPIO44 <= virtual()));
600        _for_each_inner!((GPIO45 <= virtual())); _for_each_inner!((GPIO46 <= virtual()));
601        _for_each_inner!((AES <= AES(AES : { bind_peri_interrupt, enable_peri_interrupt,
602        disable_peri_interrupt }) (unstable))); _for_each_inner!((APB_SARADC <=
603        APB_SARADC() (unstable))); _for_each_inner!((DEDICATED_GPIO <= DEDICATED_GPIO()
604        (unstable))); _for_each_inner!((DS <= DS() (unstable))); _for_each_inner!((EFUSE
605        <= EFUSE() (unstable))); _for_each_inner!((EXTMEM <= EXTMEM() (unstable)));
606        _for_each_inner!((FE <= FE() (unstable))); _for_each_inner!((FE2 <= FE2()
607        (unstable))); _for_each_inner!((GPIO <= GPIO() (unstable)));
608        _for_each_inner!((GPIO_SD <= GPIO_SD() (unstable))); _for_each_inner!((HMAC <=
609        HMAC() (unstable))); _for_each_inner!((I2C_ANA_MST <= I2C_ANA_MST() (unstable)));
610        _for_each_inner!((I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
611        enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((I2C1 <=
612        I2C1(I2C_EXT1 : { bind_peri_interrupt, enable_peri_interrupt,
613        disable_peri_interrupt }))); _for_each_inner!((I2S0 <= I2S0(I2S0 : {
614        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
615        (unstable))); _for_each_inner!((INTERRUPT_CORE0 <= INTERRUPT_CORE0()
616        (unstable))); _for_each_inner!((IO_MUX <= IO_MUX() (unstable)));
617        _for_each_inner!((LEDC <= LEDC() (unstable))); _for_each_inner!((NRX <= NRX()
618        (unstable))); _for_each_inner!((PCNT <= PCNT() (unstable)));
619        _for_each_inner!((PMS <= PMS() (unstable))); _for_each_inner!((RMT <= RMT()
620        (unstable))); _for_each_inner!((RNG <= RNG() (unstable))); _for_each_inner!((RSA
621        <= RSA(RSA : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
622        }) (unstable))); _for_each_inner!((LPWR <= RTC_CNTL() (unstable)));
623        _for_each_inner!((RTC_I2C <= RTC_I2C() (unstable))); _for_each_inner!((RTC_IO <=
624        RTC_IO() (unstable))); _for_each_inner!((SENS <= SENS() (unstable)));
625        _for_each_inner!((SHA <= SHA(SHA : { bind_peri_interrupt, enable_peri_interrupt,
626        disable_peri_interrupt }) (unstable))); _for_each_inner!((SPI0 <= SPI0()
627        (unstable))); _for_each_inner!((SPI1 <= SPI1() (unstable)));
628        _for_each_inner!((SPI2 <= SPI2(SPI2_DMA : { bind_dma_interrupt,
629        enable_dma_interrupt, disable_dma_interrupt }, SPI2 : { bind_peri_interrupt,
630        enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((SPI3 <=
631        SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
632        }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
633        }))); _for_each_inner!((SYSCON <= SYSCON() (unstable))); _for_each_inner!((SYSTEM
634        <= SYSTEM() (unstable))); _for_each_inner!((SYSTIMER <= SYSTIMER() (unstable)));
635        _for_each_inner!((TIMG0 <= TIMG0() (unstable))); _for_each_inner!((TIMG1 <=
636        TIMG1() (unstable))); _for_each_inner!((TWAI0 <= TWAI0() (unstable)));
637        _for_each_inner!((UART0 <= UART0(UART0 : { bind_peri_interrupt,
638        enable_peri_interrupt, disable_peri_interrupt }))); _for_each_inner!((UART1 <=
639        UART1(UART1 : { bind_peri_interrupt, enable_peri_interrupt,
640        disable_peri_interrupt }))); _for_each_inner!((UHCI0 <= UHCI0() (unstable)));
641        _for_each_inner!((USB0 <= USB0() (unstable))); _for_each_inner!((USB_WRAP <=
642        USB_WRAP() (unstable))); _for_each_inner!((XTS_AES <= XTS_AES() (unstable)));
643        _for_each_inner!((WIFI <= WIFI() (unstable))); _for_each_inner!((DMA_SPI2 <=
644        SPI2() (unstable))); _for_each_inner!((DMA_SPI3 <= SPI3() (unstable)));
645        _for_each_inner!((DMA_I2S0 <= I2S0() (unstable))); _for_each_inner!((DMA_CRYPTO
646        <= CRYPTO_DMA() (unstable))); _for_each_inner!((DMA_COPY <= COPY_DMA()
647        (unstable))); _for_each_inner!((ADC1 <= virtual() (unstable)));
648        _for_each_inner!((ADC2 <= virtual() (unstable))); _for_each_inner!((DAC1 <=
649        virtual() (unstable))); _for_each_inner!((DAC2 <= virtual() (unstable)));
650        _for_each_inner!((FLASH <= virtual() (unstable))); _for_each_inner!((PSRAM <=
651        virtual() (unstable))); _for_each_inner!((SW_INTERRUPT <= virtual() (unstable)));
652        _for_each_inner!((ULP_RISCV_CORE <= virtual() (unstable)));
653        _for_each_inner!((all(GPIO0 <= virtual()), (GPIO1 <= virtual()), (GPIO2 <=
654        virtual()), (GPIO3 <= virtual()), (GPIO4 <= virtual()), (GPIO5 <= virtual()),
655        (GPIO6 <= virtual()), (GPIO7 <= virtual()), (GPIO8 <= virtual()), (GPIO9 <=
656        virtual()), (GPIO10 <= virtual()), (GPIO11 <= virtual()), (GPIO12 <= virtual()),
657        (GPIO13 <= virtual()), (GPIO14 <= virtual()), (GPIO15 <= virtual()), (GPIO16 <=
658        virtual()), (GPIO17 <= virtual()), (GPIO18 <= virtual()), (GPIO19 <= virtual()),
659        (GPIO20 <= virtual()), (GPIO21 <= virtual()), (GPIO33 <= virtual()), (GPIO34 <=
660        virtual()), (GPIO35 <= virtual()), (GPIO36 <= virtual()), (GPIO37 <= virtual()),
661        (GPIO38 <= virtual()), (GPIO39 <= virtual()), (GPIO40 <= virtual()), (GPIO41 <=
662        virtual()), (GPIO42 <= virtual()), (GPIO43 <= virtual()), (GPIO44 <= virtual()),
663        (GPIO45 <= virtual()), (GPIO46 <= virtual()), (AES <= AES(AES : {
664        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })
665        (unstable)), (APB_SARADC <= APB_SARADC() (unstable)), (DEDICATED_GPIO <=
666        DEDICATED_GPIO() (unstable)), (DS <= DS() (unstable)), (EFUSE <= EFUSE()
667        (unstable)), (EXTMEM <= EXTMEM() (unstable)), (FE <= FE() (unstable)), (FE2 <=
668        FE2() (unstable)), (GPIO <= GPIO() (unstable)), (GPIO_SD <= GPIO_SD()
669        (unstable)), (HMAC <= HMAC() (unstable)), (I2C_ANA_MST <= I2C_ANA_MST()
670        (unstable)), (I2C0 <= I2C0(I2C_EXT0 : { bind_peri_interrupt,
671        enable_peri_interrupt, disable_peri_interrupt })), (I2C1 <= I2C1(I2C_EXT1 : {
672        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (I2S0 <=
673        I2S0(I2S0 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
674        }) (unstable)), (INTERRUPT_CORE0 <= INTERRUPT_CORE0() (unstable)), (IO_MUX <=
675        IO_MUX() (unstable)), (LEDC <= LEDC() (unstable)), (NRX <= NRX() (unstable)),
676        (PCNT <= PCNT() (unstable)), (PMS <= PMS() (unstable)), (RMT <= RMT()
677        (unstable)), (RNG <= RNG() (unstable)), (RSA <= RSA(RSA : { bind_peri_interrupt,
678        enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (LPWR <= RTC_CNTL()
679        (unstable)), (RTC_I2C <= RTC_I2C() (unstable)), (RTC_IO <= RTC_IO() (unstable)),
680        (SENS <= SENS() (unstable)), (SHA <= SHA(SHA : { bind_peri_interrupt,
681        enable_peri_interrupt, disable_peri_interrupt }) (unstable)), (SPI0 <= SPI0()
682        (unstable)), (SPI1 <= SPI1() (unstable)), (SPI2 <= SPI2(SPI2_DMA : {
683        bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt }, SPI2 : {
684        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (SPI3 <=
685        SPI3(SPI3_DMA : { bind_dma_interrupt, enable_dma_interrupt, disable_dma_interrupt
686        }, SPI3 : { bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt
687        })), (SYSCON <= SYSCON() (unstable)), (SYSTEM <= SYSTEM() (unstable)), (SYSTIMER
688        <= SYSTIMER() (unstable)), (TIMG0 <= TIMG0() (unstable)), (TIMG1 <= TIMG1()
689        (unstable)), (TWAI0 <= TWAI0() (unstable)), (UART0 <= UART0(UART0 : {
690        bind_peri_interrupt, enable_peri_interrupt, disable_peri_interrupt })), (UART1 <=
691        UART1(UART1 : { bind_peri_interrupt, enable_peri_interrupt,
692        disable_peri_interrupt })), (UHCI0 <= UHCI0() (unstable)), (USB0 <= USB0()
693        (unstable)), (USB_WRAP <= USB_WRAP() (unstable)), (XTS_AES <= XTS_AES()
694        (unstable)), (WIFI <= WIFI() (unstable)), (DMA_SPI2 <= SPI2() (unstable)),
695        (DMA_SPI3 <= SPI3() (unstable)), (DMA_I2S0 <= I2S0() (unstable)), (DMA_CRYPTO <=
696        CRYPTO_DMA() (unstable)), (DMA_COPY <= COPY_DMA() (unstable)), (ADC1 <= virtual()
697        (unstable)), (ADC2 <= virtual() (unstable)), (DAC1 <= virtual() (unstable)),
698        (DAC2 <= virtual() (unstable)), (FLASH <= virtual() (unstable)), (PSRAM <=
699        virtual() (unstable)), (SW_INTERRUPT <= virtual() (unstable)), (ULP_RISCV_CORE <=
700        virtual() (unstable))));
701    };
702}
703/// This macro can be used to generate code for each `GPIOn` instance.
704///
705/// For an explanation on the general syntax, as well as usage of individual/repeated
706/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
707///
708/// This macro has one option for its "Individual matcher" case:
709///
710/// Syntax: `($n:literal, $gpio:ident ($($digital_input_function:ident =>
711/// $digital_input_signal:ident)*) ($($digital_output_function:ident =>
712/// $digital_output_signal:ident)*) ($([$pin_attribute:ident])*))`
713///
714/// Macro fragments:
715///
716/// - `$n`: the number of the GPIO. For `GPIO0`, `$n` is 0.
717/// - `$gpio`: the name of the GPIO.
718/// - `$digital_input_function`: the number of the digital function, as an identifier (i.e. for
719///   function 0 this is `_0`).
720/// - `$digital_input_function`: the name of the digital function, as an identifier.
721/// - `$digital_output_function`: the number of the digital function, as an identifier (i.e. for
722///   function 0 this is `_0`).
723/// - `$digital_output_function`: the name of the digital function, as an identifier.
724/// - `$pin_attribute`: `Input` and/or `Output`, marks the possible directions of the GPIO.
725///   Bracketed so that they can also be matched as optional fragments. Order is always Input first.
726///
727/// Example data: `(0, GPIO0 (_5 => EMAC_TX_CLK) (_1 => CLK_OUT1 _5 => EMAC_TX_CLK) ([Input]
728/// [Output]))`
729#[macro_export]
730#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
731macro_rules! for_each_gpio {
732    ($($pattern:tt => $code:tt;)*) => {
733        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
734        _for_each_inner!((0, GPIO0() () ([Input] [Output]))); _for_each_inner!((1,
735        GPIO1() () ([Input] [Output]))); _for_each_inner!((2, GPIO2() () ([Input]
736        [Output]))); _for_each_inner!((3, GPIO3() () ([Input] [Output])));
737        _for_each_inner!((4, GPIO4() () ([Input] [Output]))); _for_each_inner!((5,
738        GPIO5() () ([Input] [Output]))); _for_each_inner!((6, GPIO6() () ([Input]
739        [Output]))); _for_each_inner!((7, GPIO7() () ([Input] [Output])));
740        _for_each_inner!((8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])));
741        _for_each_inner!((9, GPIO9(_3 => SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 =>
742        FSPIHD) ([Input] [Output]))); _for_each_inner!((10, GPIO10(_2 => FSPIIO4 _4 =>
743        FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0) ([Input] [Output])));
744        _for_each_inner!((11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
745        FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output]))); _for_each_inner!((12,
746        GPIO12(_2 => FSPIIO6 _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK)
747        ([Input] [Output]))); _for_each_inner!((13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4
748        => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) ([Input] [Output])));
749        _for_each_inner!((14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 => FSPIDQS _3 =>
750        SUBSPIWP _4 => FSPIWP) ([Input] [Output]))); _for_each_inner!((15, GPIO15() (_2
751        => U0RTS) ([Input] [Output]))); _for_each_inner!((16, GPIO16(_2 => U0CTS) ()
752        ([Input] [Output]))); _for_each_inner!((17, GPIO17() (_2 => U1TXD) ([Input]
753        [Output]))); _for_each_inner!((18, GPIO18(_2 => U1RXD) (_3 => CLK_OUT3) ([Input]
754        [Output]))); _for_each_inner!((19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2) ([Input]
755        [Output]))); _for_each_inner!((20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
756        [Output]))); _for_each_inner!((21, GPIO21() () ([Input] [Output])));
757        _for_each_inner!((33, GPIO33(_2 => FSPIHD _3 => SUBSPIHD) (_2 => FSPIHD _3 =>
758        SUBSPIHD) ([Input] [Output]))); _for_each_inner!((34, GPIO34(_2 => FSPICS0) (_2
759        => FSPICS0 _3 => SUBSPICS0) ([Input] [Output]))); _for_each_inner!((35, GPIO35(_2
760        => FSPID _3 => SUBSPID) (_2 => FSPID _3 => SUBSPID) ([Input] [Output])));
761        _for_each_inner!((36, GPIO36(_2 => FSPICLK) (_2 => FSPICLK _3 => SUBSPICLK)
762        ([Input] [Output]))); _for_each_inner!((37, GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4
763        => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) ([Input] [Output])));
764        _for_each_inner!((38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 => FSPIWP _3 =>
765        SUBSPIWP) ([Input] [Output]))); _for_each_inner!((39, GPIO39(_0 => MTCK) (_2 =>
766        CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output]))); _for_each_inner!((40, GPIO40()
767        (_0 => MTDO _2 => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((41, GPIO41(_0
768        => MTDI) (_2 => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((42, GPIO42(_0
769        => MTMS) () ([Input] [Output]))); _for_each_inner!((43, GPIO43() (_0 => U0TXD _2
770        => CLK_OUT1) ([Input] [Output]))); _for_each_inner!((44, GPIO44(_0 => U0RXD) (_2
771        => CLK_OUT2) ([Input] [Output]))); _for_each_inner!((45, GPIO45() () ([Input]
772        [Output]))); _for_each_inner!((46, GPIO46() () ([Input] [Output])));
773        _for_each_inner!((all(0, GPIO0() () ([Input] [Output])), (1, GPIO1() () ([Input]
774        [Output])), (2, GPIO2() () ([Input] [Output])), (3, GPIO3() () ([Input]
775        [Output])), (4, GPIO4() () ([Input] [Output])), (5, GPIO5() () ([Input]
776        [Output])), (6, GPIO6() () ([Input] [Output])), (7, GPIO7() () ([Input]
777        [Output])), (8, GPIO8() (_3 => SUBSPICS1) ([Input] [Output])), (9, GPIO9(_3 =>
778        SUBSPIHD _4 => FSPIHD) (_3 => SUBSPIHD _4 => FSPIHD) ([Input] [Output])), (10,
779        GPIO10(_2 => FSPIIO4 _4 => FSPICS0) (_2 => FSPIIO4 _3 => SUBSPICS0 _4 => FSPICS0)
780        ([Input] [Output])), (11, GPIO11(_2 => FSPIIO5 _3 => SUBSPID _4 => FSPID) (_2 =>
781        FSPIIO5 _3 => SUBSPID _4 => FSPID) ([Input] [Output])), (12, GPIO12(_2 => FSPIIO6
782        _4 => FSPICLK) (_2 => FSPIIO6 _3 => SUBSPICLK _4 => FSPICLK) ([Input] [Output])),
783        (13, GPIO13(_2 => FSPIIO7 _3 => SUBSPIQ _4 => FSPIQ) (_2 => FSPIIO7 _3 => SUBSPIQ
784        _4 => FSPIQ) ([Input] [Output])), (14, GPIO14(_3 => SUBSPIWP _4 => FSPIWP) (_2 =>
785        FSPIDQS _3 => SUBSPIWP _4 => FSPIWP) ([Input] [Output])), (15, GPIO15() (_2 =>
786        U0RTS) ([Input] [Output])), (16, GPIO16(_2 => U0CTS) () ([Input] [Output])), (17,
787        GPIO17() (_2 => U1TXD) ([Input] [Output])), (18, GPIO18(_2 => U1RXD) (_3 =>
788        CLK_OUT3) ([Input] [Output])), (19, GPIO19() (_2 => U1RTS _3 => CLK_OUT2)
789        ([Input] [Output])), (20, GPIO20(_2 => U1CTS) (_3 => CLK_OUT1) ([Input]
790        [Output])), (21, GPIO21() () ([Input] [Output])), (33, GPIO33(_2 => FSPIHD _3 =>
791        SUBSPIHD) (_2 => FSPIHD _3 => SUBSPIHD) ([Input] [Output])), (34, GPIO34(_2 =>
792        FSPICS0) (_2 => FSPICS0 _3 => SUBSPICS0) ([Input] [Output])), (35, GPIO35(_2 =>
793        FSPID _3 => SUBSPID) (_2 => FSPID _3 => SUBSPID) ([Input] [Output])), (36,
794        GPIO36(_2 => FSPICLK) (_2 => FSPICLK _3 => SUBSPICLK) ([Input] [Output])), (37,
795        GPIO37(_2 => FSPIQ _3 => SUBSPIQ _4 => SPIDQS) (_2 => FSPIQ _3 => SUBSPIQ _4 =>
796        SPIDQS) ([Input] [Output])), (38, GPIO38(_2 => FSPIWP _3 => SUBSPIWP) (_2 =>
797        FSPIWP _3 => SUBSPIWP) ([Input] [Output])), (39, GPIO39(_0 => MTCK) (_2 =>
798        CLK_OUT3 _3 => SUBSPICS1) ([Input] [Output])), (40, GPIO40() (_0 => MTDO _2 =>
799        CLK_OUT2) ([Input] [Output])), (41, GPIO41(_0 => MTDI) (_2 => CLK_OUT1) ([Input]
800        [Output])), (42, GPIO42(_0 => MTMS) () ([Input] [Output])), (43, GPIO43() (_0 =>
801        U0TXD _2 => CLK_OUT1) ([Input] [Output])), (44, GPIO44(_0 => U0RXD) (_2 =>
802        CLK_OUT2) ([Input] [Output])), (45, GPIO45() () ([Input] [Output])), (46,
803        GPIO46() () ([Input] [Output]))));
804    };
805}
806/// This macro can be used to generate code for each analog function of each GPIO.
807///
808/// For an explanation on the general syntax, as well as usage of individual/repeated
809/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
810///
811/// This macro has two options for its "Individual matcher" case:
812///
813/// - `all`: `($signal:ident, $gpio:ident)` - simple case where you only need identifiers
814/// - `all_expanded`: `(($signal:ident, $group:ident $(, $number:literal)+), $gpio:ident)` -
815///   expanded signal case, where you need the number(s) of a signal, or the general group to which
816///   the signal belongs. For example, in case of `ADC2_CH3` the expanded form looks like
817///   `(ADC2_CH3, ADCn_CHm, 2, 3)`.
818///
819/// Macro fragments:
820///
821/// - `$signal`: the name of the signal.
822/// - `$group`: the name of the signal, with numbers replaced by placeholders. For `ADC2_CH3` this
823///   is `ADCn_CHm`.
824/// - `$number`: the numbers extracted from `$signal`.
825/// - `$gpio`: the name of the GPIO.
826///
827/// Example data:
828/// - `(ADC2_CH5, GPIO12)`
829/// - `((ADC2_CH5, ADCn_CHm, 2, 5), GPIO12)`
830///
831/// The expanded syntax is only available when the signal has at least one numbered component.
832#[macro_export]
833#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
834macro_rules! for_each_analog_function {
835    ($($pattern:tt => $code:tt;)*) => {
836        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
837        _for_each_inner!((TOUCH1, GPIO1)); _for_each_inner!((ADC1_CH0, GPIO1));
838        _for_each_inner!((TOUCH2, GPIO2)); _for_each_inner!((ADC1_CH1, GPIO2));
839        _for_each_inner!((TOUCH3, GPIO3)); _for_each_inner!((ADC1_CH2, GPIO3));
840        _for_each_inner!((TOUCH4, GPIO4)); _for_each_inner!((ADC1_CH3, GPIO4));
841        _for_each_inner!((TOUCH5, GPIO5)); _for_each_inner!((ADC1_CH4, GPIO5));
842        _for_each_inner!((TOUCH6, GPIO6)); _for_each_inner!((ADC1_CH5, GPIO6));
843        _for_each_inner!((TOUCH7, GPIO7)); _for_each_inner!((ADC1_CH6, GPIO7));
844        _for_each_inner!((TOUCH8, GPIO8)); _for_each_inner!((ADC1_CH7, GPIO8));
845        _for_each_inner!((TOUCH9, GPIO9)); _for_each_inner!((ADC1_CH8, GPIO9));
846        _for_each_inner!((TOUCH10, GPIO10)); _for_each_inner!((ADC1_CH9, GPIO10));
847        _for_each_inner!((TOUCH11, GPIO11)); _for_each_inner!((ADC2_CH0, GPIO11));
848        _for_each_inner!((TOUCH12, GPIO12)); _for_each_inner!((ADC2_CH1, GPIO12));
849        _for_each_inner!((TOUCH13, GPIO13)); _for_each_inner!((ADC2_CH2, GPIO13));
850        _for_each_inner!((TOUCH14, GPIO14)); _for_each_inner!((ADC2_CH3, GPIO14));
851        _for_each_inner!((XTAL_32K_P, GPIO15)); _for_each_inner!((ADC2_CH4, GPIO15));
852        _for_each_inner!((XTAL_32K_N, GPIO16)); _for_each_inner!((ADC2_CH5, GPIO16));
853        _for_each_inner!((DAC_1, GPIO17)); _for_each_inner!((ADC2_CH6, GPIO17));
854        _for_each_inner!((DAC_2, GPIO18)); _for_each_inner!((ADC2_CH7, GPIO18));
855        _for_each_inner!((USB_DM, GPIO19)); _for_each_inner!((ADC2_CH8, GPIO19));
856        _for_each_inner!((USB_DP, GPIO20)); _for_each_inner!((ADC2_CH9, GPIO20));
857        _for_each_inner!(((TOUCH1, TOUCHn, 1), GPIO1)); _for_each_inner!(((ADC1_CH0,
858        ADCn_CHm, 1, 0), GPIO1)); _for_each_inner!(((TOUCH2, TOUCHn, 2), GPIO2));
859        _for_each_inner!(((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2)); _for_each_inner!(((TOUCH3,
860        TOUCHn, 3), GPIO3)); _for_each_inner!(((ADC1_CH2, ADCn_CHm, 1, 2), GPIO3));
861        _for_each_inner!(((TOUCH4, TOUCHn, 4), GPIO4)); _for_each_inner!(((ADC1_CH3,
862        ADCn_CHm, 1, 3), GPIO4)); _for_each_inner!(((TOUCH5, TOUCHn, 5), GPIO5));
863        _for_each_inner!(((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5)); _for_each_inner!(((TOUCH6,
864        TOUCHn, 6), GPIO6)); _for_each_inner!(((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6));
865        _for_each_inner!(((TOUCH7, TOUCHn, 7), GPIO7)); _for_each_inner!(((ADC1_CH6,
866        ADCn_CHm, 1, 6), GPIO7)); _for_each_inner!(((TOUCH8, TOUCHn, 8), GPIO8));
867        _for_each_inner!(((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8)); _for_each_inner!(((TOUCH9,
868        TOUCHn, 9), GPIO9)); _for_each_inner!(((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9));
869        _for_each_inner!(((TOUCH10, TOUCHn, 10), GPIO10)); _for_each_inner!(((ADC1_CH9,
870        ADCn_CHm, 1, 9), GPIO10)); _for_each_inner!(((TOUCH11, TOUCHn, 11), GPIO11));
871        _for_each_inner!(((ADC2_CH0, ADCn_CHm, 2, 0), GPIO11));
872        _for_each_inner!(((TOUCH12, TOUCHn, 12), GPIO12)); _for_each_inner!(((ADC2_CH1,
873        ADCn_CHm, 2, 1), GPIO12)); _for_each_inner!(((TOUCH13, TOUCHn, 13), GPIO13));
874        _for_each_inner!(((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13));
875        _for_each_inner!(((TOUCH14, TOUCHn, 14), GPIO14)); _for_each_inner!(((ADC2_CH3,
876        ADCn_CHm, 2, 3), GPIO14)); _for_each_inner!(((ADC2_CH4, ADCn_CHm, 2, 4),
877        GPIO15)); _for_each_inner!(((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16));
878        _for_each_inner!(((DAC_1, DAC_n, 1), GPIO17)); _for_each_inner!(((ADC2_CH6,
879        ADCn_CHm, 2, 6), GPIO17)); _for_each_inner!(((DAC_2, DAC_n, 2), GPIO18));
880        _for_each_inner!(((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18));
881        _for_each_inner!(((ADC2_CH8, ADCn_CHm, 2, 8), GPIO19));
882        _for_each_inner!(((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20));
883        _for_each_inner!((all(TOUCH1, GPIO1), (ADC1_CH0, GPIO1), (TOUCH2, GPIO2),
884        (ADC1_CH1, GPIO2), (TOUCH3, GPIO3), (ADC1_CH2, GPIO3), (TOUCH4, GPIO4),
885        (ADC1_CH3, GPIO4), (TOUCH5, GPIO5), (ADC1_CH4, GPIO5), (TOUCH6, GPIO6),
886        (ADC1_CH5, GPIO6), (TOUCH7, GPIO7), (ADC1_CH6, GPIO7), (TOUCH8, GPIO8),
887        (ADC1_CH7, GPIO8), (TOUCH9, GPIO9), (ADC1_CH8, GPIO9), (TOUCH10, GPIO10),
888        (ADC1_CH9, GPIO10), (TOUCH11, GPIO11), (ADC2_CH0, GPIO11), (TOUCH12, GPIO12),
889        (ADC2_CH1, GPIO12), (TOUCH13, GPIO13), (ADC2_CH2, GPIO13), (TOUCH14, GPIO14),
890        (ADC2_CH3, GPIO14), (XTAL_32K_P, GPIO15), (ADC2_CH4, GPIO15), (XTAL_32K_N,
891        GPIO16), (ADC2_CH5, GPIO16), (DAC_1, GPIO17), (ADC2_CH6, GPIO17), (DAC_2,
892        GPIO18), (ADC2_CH7, GPIO18), (USB_DM, GPIO19), (ADC2_CH8, GPIO19), (USB_DP,
893        GPIO20), (ADC2_CH9, GPIO20))); _for_each_inner!((all_expanded((TOUCH1, TOUCHn,
894        1), GPIO1), ((ADC1_CH0, ADCn_CHm, 1, 0), GPIO1), ((TOUCH2, TOUCHn, 2), GPIO2),
895        ((ADC1_CH1, ADCn_CHm, 1, 1), GPIO2), ((TOUCH3, TOUCHn, 3), GPIO3), ((ADC1_CH2,
896        ADCn_CHm, 1, 2), GPIO3), ((TOUCH4, TOUCHn, 4), GPIO4), ((ADC1_CH3, ADCn_CHm, 1,
897        3), GPIO4), ((TOUCH5, TOUCHn, 5), GPIO5), ((ADC1_CH4, ADCn_CHm, 1, 4), GPIO5),
898        ((TOUCH6, TOUCHn, 6), GPIO6), ((ADC1_CH5, ADCn_CHm, 1, 5), GPIO6), ((TOUCH7,
899        TOUCHn, 7), GPIO7), ((ADC1_CH6, ADCn_CHm, 1, 6), GPIO7), ((TOUCH8, TOUCHn, 8),
900        GPIO8), ((ADC1_CH7, ADCn_CHm, 1, 7), GPIO8), ((TOUCH9, TOUCHn, 9), GPIO9),
901        ((ADC1_CH8, ADCn_CHm, 1, 8), GPIO9), ((TOUCH10, TOUCHn, 10), GPIO10), ((ADC1_CH9,
902        ADCn_CHm, 1, 9), GPIO10), ((TOUCH11, TOUCHn, 11), GPIO11), ((ADC2_CH0, ADCn_CHm,
903        2, 0), GPIO11), ((TOUCH12, TOUCHn, 12), GPIO12), ((ADC2_CH1, ADCn_CHm, 2, 1),
904        GPIO12), ((TOUCH13, TOUCHn, 13), GPIO13), ((ADC2_CH2, ADCn_CHm, 2, 2), GPIO13),
905        ((TOUCH14, TOUCHn, 14), GPIO14), ((ADC2_CH3, ADCn_CHm, 2, 3), GPIO14),
906        ((ADC2_CH4, ADCn_CHm, 2, 4), GPIO15), ((ADC2_CH5, ADCn_CHm, 2, 5), GPIO16),
907        ((DAC_1, DAC_n, 1), GPIO17), ((ADC2_CH6, ADCn_CHm, 2, 6), GPIO17), ((DAC_2,
908        DAC_n, 2), GPIO18), ((ADC2_CH7, ADCn_CHm, 2, 7), GPIO18), ((ADC2_CH8, ADCn_CHm,
909        2, 8), GPIO19), ((ADC2_CH9, ADCn_CHm, 2, 9), GPIO20)));
910    };
911}
912/// This macro can be used to generate code for each LP/RTC function of each GPIO.
913///
914/// For an explanation on the general syntax, as well as usage of individual/repeated
915/// matchers, refer to [the crate-level documentation][crate#for_each-macros].
916///
917/// This macro has two options for its "Individual matcher" case:
918///
919/// - `all`: `($signal:ident, $gpio:ident)` - simple case where you only need identifiers
920/// - `all_expanded`: `(($signal:ident, $group:ident $(, $number:literal)+), $gpio:ident)` -
921///   expanded signal case, where you need the number(s) of a signal, or the general group to which
922///   the signal belongs. For example, in case of `SAR_I2C_SCL_1` the expanded form looks like
923///   `(SAR_I2C_SCL_1, SAR_I2C_SCL_n, 1)`.
924///
925/// Macro fragments:
926///
927/// - `$signal`: the name of the signal.
928/// - `$group`: the name of the signal, with numbers replaced by placeholders. For `ADC2_CH3` this
929///   is `ADCn_CHm`.
930/// - `$number`: the numbers extracted from `$signal`.
931/// - `$gpio`: the name of the GPIO.
932///
933/// Example data:
934/// - `(RTC_GPIO15, GPIO12)`
935/// - `((RTC_GPIO15, RTC_GPIOn, 15), GPIO12)`
936///
937/// The expanded syntax is only available when the signal has at least one numbered component.
938#[macro_export]
939#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
940macro_rules! for_each_lp_function {
941    ($($pattern:tt => $code:tt;)*) => {
942        macro_rules! _for_each_inner { $(($pattern) => $code;)* ($other : tt) => {} }
943        _for_each_inner!((RTC_GPIO0, GPIO0)); _for_each_inner!((RTC_GPIO1, GPIO1));
944        _for_each_inner!((RTC_GPIO2, GPIO2)); _for_each_inner!((RTC_GPIO3, GPIO3));
945        _for_each_inner!((RTC_GPIO4, GPIO4)); _for_each_inner!((RTC_GPIO5, GPIO5));
946        _for_each_inner!((RTC_GPIO6, GPIO6)); _for_each_inner!((RTC_GPIO7, GPIO7));
947        _for_each_inner!((RTC_GPIO8, GPIO8)); _for_each_inner!((RTC_GPIO9, GPIO9));
948        _for_each_inner!((RTC_GPIO10, GPIO10)); _for_each_inner!((RTC_GPIO11, GPIO11));
949        _for_each_inner!((RTC_GPIO12, GPIO12)); _for_each_inner!((RTC_GPIO13, GPIO13));
950        _for_each_inner!((RTC_GPIO14, GPIO14)); _for_each_inner!((RTC_GPIO15, GPIO15));
951        _for_each_inner!((RTC_GPIO16, GPIO16)); _for_each_inner!((RTC_GPIO17, GPIO17));
952        _for_each_inner!((RTC_GPIO18, GPIO18)); _for_each_inner!((RTC_GPIO19, GPIO19));
953        _for_each_inner!((RTC_GPIO20, GPIO20)); _for_each_inner!((RTC_GPIO21, GPIO21));
954        _for_each_inner!(((RTC_GPIO0, RTC_GPIOn, 0), GPIO0));
955        _for_each_inner!(((RTC_GPIO1, RTC_GPIOn, 1), GPIO1));
956        _for_each_inner!(((RTC_GPIO2, RTC_GPIOn, 2), GPIO2));
957        _for_each_inner!(((RTC_GPIO3, RTC_GPIOn, 3), GPIO3));
958        _for_each_inner!(((RTC_GPIO4, RTC_GPIOn, 4), GPIO4));
959        _for_each_inner!(((RTC_GPIO5, RTC_GPIOn, 5), GPIO5));
960        _for_each_inner!(((RTC_GPIO6, RTC_GPIOn, 6), GPIO6));
961        _for_each_inner!(((RTC_GPIO7, RTC_GPIOn, 7), GPIO7));
962        _for_each_inner!(((RTC_GPIO8, RTC_GPIOn, 8), GPIO8));
963        _for_each_inner!(((RTC_GPIO9, RTC_GPIOn, 9), GPIO9));
964        _for_each_inner!(((RTC_GPIO10, RTC_GPIOn, 10), GPIO10));
965        _for_each_inner!(((RTC_GPIO11, RTC_GPIOn, 11), GPIO11));
966        _for_each_inner!(((RTC_GPIO12, RTC_GPIOn, 12), GPIO12));
967        _for_each_inner!(((RTC_GPIO13, RTC_GPIOn, 13), GPIO13));
968        _for_each_inner!(((RTC_GPIO14, RTC_GPIOn, 14), GPIO14));
969        _for_each_inner!(((RTC_GPIO15, RTC_GPIOn, 15), GPIO15));
970        _for_each_inner!(((RTC_GPIO16, RTC_GPIOn, 16), GPIO16));
971        _for_each_inner!(((RTC_GPIO17, RTC_GPIOn, 17), GPIO17));
972        _for_each_inner!(((RTC_GPIO18, RTC_GPIOn, 18), GPIO18));
973        _for_each_inner!(((RTC_GPIO19, RTC_GPIOn, 19), GPIO19));
974        _for_each_inner!(((RTC_GPIO20, RTC_GPIOn, 20), GPIO20));
975        _for_each_inner!(((RTC_GPIO21, RTC_GPIOn, 21), GPIO21));
976        _for_each_inner!((all(RTC_GPIO0, GPIO0), (RTC_GPIO1, GPIO1), (RTC_GPIO2, GPIO2),
977        (RTC_GPIO3, GPIO3), (RTC_GPIO4, GPIO4), (RTC_GPIO5, GPIO5), (RTC_GPIO6, GPIO6),
978        (RTC_GPIO7, GPIO7), (RTC_GPIO8, GPIO8), (RTC_GPIO9, GPIO9), (RTC_GPIO10, GPIO10),
979        (RTC_GPIO11, GPIO11), (RTC_GPIO12, GPIO12), (RTC_GPIO13, GPIO13), (RTC_GPIO14,
980        GPIO14), (RTC_GPIO15, GPIO15), (RTC_GPIO16, GPIO16), (RTC_GPIO17, GPIO17),
981        (RTC_GPIO18, GPIO18), (RTC_GPIO19, GPIO19), (RTC_GPIO20, GPIO20), (RTC_GPIO21,
982        GPIO21))); _for_each_inner!((all_expanded((RTC_GPIO0, RTC_GPIOn, 0), GPIO0),
983        ((RTC_GPIO1, RTC_GPIOn, 1), GPIO1), ((RTC_GPIO2, RTC_GPIOn, 2), GPIO2),
984        ((RTC_GPIO3, RTC_GPIOn, 3), GPIO3), ((RTC_GPIO4, RTC_GPIOn, 4), GPIO4),
985        ((RTC_GPIO5, RTC_GPIOn, 5), GPIO5), ((RTC_GPIO6, RTC_GPIOn, 6), GPIO6),
986        ((RTC_GPIO7, RTC_GPIOn, 7), GPIO7), ((RTC_GPIO8, RTC_GPIOn, 8), GPIO8),
987        ((RTC_GPIO9, RTC_GPIOn, 9), GPIO9), ((RTC_GPIO10, RTC_GPIOn, 10), GPIO10),
988        ((RTC_GPIO11, RTC_GPIOn, 11), GPIO11), ((RTC_GPIO12, RTC_GPIOn, 12), GPIO12),
989        ((RTC_GPIO13, RTC_GPIOn, 13), GPIO13), ((RTC_GPIO14, RTC_GPIOn, 14), GPIO14),
990        ((RTC_GPIO15, RTC_GPIOn, 15), GPIO15), ((RTC_GPIO16, RTC_GPIOn, 16), GPIO16),
991        ((RTC_GPIO17, RTC_GPIOn, 17), GPIO17), ((RTC_GPIO18, RTC_GPIOn, 18), GPIO18),
992        ((RTC_GPIO19, RTC_GPIOn, 19), GPIO19), ((RTC_GPIO20, RTC_GPIOn, 20), GPIO20),
993        ((RTC_GPIO21, RTC_GPIOn, 21), GPIO21)));
994    };
995}
996/// Defines the `InputSignal` and `OutputSignal` enums.
997///
998/// This macro is intended to be called in esp-hal only.
999#[macro_export]
1000#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1001macro_rules! define_io_mux_signals {
1002    () => {
1003        #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1004        #[derive(Debug, PartialEq, Copy, Clone)]
1005        #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1006        #[doc(hidden)]
1007        pub enum InputSignal {
1008            SPIQ              = 0,
1009            SPID              = 1,
1010            SPIHD             = 2,
1011            SPIWP             = 3,
1012            SPID4             = 7,
1013            SPID5             = 8,
1014            SPID6             = 9,
1015            SPID7             = 10,
1016            SPIDQS            = 11,
1017            U0RXD             = 14,
1018            U0CTS             = 15,
1019            U0DSR             = 16,
1020            U1RXD             = 17,
1021            U1CTS             = 18,
1022            U1DSR             = 21,
1023            I2S0O_BCK         = 23,
1024            I2S0O_WS          = 25,
1025            I2S0I_BCK         = 27,
1026            I2S0I_WS          = 28,
1027            I2CEXT0_SCL       = 29,
1028            I2CEXT0_SDA       = 30,
1029            PCNT0_SIG_CH0     = 39,
1030            PCNT0_SIG_CH1     = 40,
1031            PCNT0_CTRL_CH0    = 41,
1032            PCNT0_CTRL_CH1    = 42,
1033            PCNT1_SIG_CH0     = 43,
1034            PCNT1_SIG_CH1     = 44,
1035            PCNT1_CTRL_CH0    = 45,
1036            PCNT1_CTRL_CH1    = 46,
1037            PCNT2_SIG_CH0     = 47,
1038            PCNT2_SIG_CH1     = 48,
1039            PCNT2_CTRL_CH0    = 49,
1040            PCNT2_CTRL_CH1    = 50,
1041            PCNT3_SIG_CH0     = 51,
1042            PCNT3_SIG_CH1     = 52,
1043            PCNT3_CTRL_CH0    = 53,
1044            PCNT3_CTRL_CH1    = 54,
1045            USB_EXTPHY_VP     = 61,
1046            USB_EXTPHY_VM     = 62,
1047            USB_EXTPHY_RCV    = 63,
1048            USB_OTG_IDDIG     = 64,
1049            USB_OTG_AVALID    = 65,
1050            USB_SRP_BVALID    = 66,
1051            USB_OTG_VBUSVALID = 67,
1052            USB_SRP_SESSEND   = 68,
1053            SPI3_CLK          = 72,
1054            SPI3_Q            = 73,
1055            SPI3_D            = 74,
1056            SPI3_HD           = 75,
1057            SPI3_CS0          = 76,
1058            RMT_SIG_0         = 83,
1059            RMT_SIG_1         = 84,
1060            RMT_SIG_2         = 85,
1061            RMT_SIG_3         = 86,
1062            I2CEXT1_SCL       = 95,
1063            I2CEXT1_SDA       = 96,
1064            FSPICLK           = 108,
1065            FSPIQ             = 109,
1066            FSPID             = 110,
1067            FSPIHD            = 111,
1068            FSPIWP            = 112,
1069            FSPIIO4           = 113,
1070            FSPIIO5           = 114,
1071            FSPIIO6           = 115,
1072            FSPIIO7           = 116,
1073            FSPICS0           = 117,
1074            TWAI_RX           = 123,
1075            SUBSPIQ           = 127,
1076            SUBSPID           = 128,
1077            SUBSPIHD          = 129,
1078            SUBSPIWP          = 130,
1079            I2S0I_DATA_IN15   = 158,
1080            SUBSPID4          = 167,
1081            SUBSPID5          = 168,
1082            SUBSPID6          = 169,
1083            SUBSPID7          = 170,
1084            SUBSPIDQS         = 171,
1085            PCMFSYNC          = 203,
1086            PCMCLK            = 204,
1087            PRO_ALONEGPIO_IN0 = 235,
1088            PRO_ALONEGPIO_IN1 = 236,
1089            PRO_ALONEGPIO_IN2 = 237,
1090            PRO_ALONEGPIO_IN3 = 238,
1091            PRO_ALONEGPIO_IN4 = 239,
1092            PRO_ALONEGPIO_IN5 = 240,
1093            PRO_ALONEGPIO_IN6 = 241,
1094            PRO_ALONEGPIO_IN7 = 242,
1095            MTDI,
1096            MTCK,
1097            MTMS,
1098        }
1099        #[allow(non_camel_case_types, clippy::upper_case_acronyms)]
1100        #[derive(Debug, PartialEq, Copy, Clone)]
1101        #[cfg_attr(feature = "defmt", derive(defmt::Format))]
1102        #[doc(hidden)]
1103        pub enum OutputSignal {
1104            SPIQ               = 0,
1105            SPID               = 1,
1106            SPIHD              = 2,
1107            SPIWP              = 3,
1108            SPICLK             = 4,
1109            SPICS0             = 5,
1110            SPICS1             = 6,
1111            SPID4              = 7,
1112            SPID5              = 8,
1113            SPID6              = 9,
1114            SPID7              = 10,
1115            SPIDQS             = 11,
1116            U0TXD              = 14,
1117            U0RTS              = 15,
1118            U0DTR              = 16,
1119            U1TXD              = 17,
1120            U1RTS              = 18,
1121            U1DTR              = 21,
1122            I2S0O_BCK          = 23,
1123            I2S0O_WS           = 25,
1124            I2S0I_BCK          = 27,
1125            I2S0I_WS           = 28,
1126            I2CEXT0_SCL        = 29,
1127            I2CEXT0_SDA        = 30,
1128            SDIO_TOHOST_INT    = 31,
1129            USB_EXTPHY_OEN     = 61,
1130            USB_EXTPHY_VPO     = 63,
1131            USB_EXTPHY_VMO     = 64,
1132            SPI3_CLK           = 72,
1133            SPI3_Q             = 73,
1134            SPI3_D             = 74,
1135            SPI3_HD            = 75,
1136            SPI3_CS0           = 76,
1137            SPI3_CS1           = 77,
1138            SPI3_CS2           = 78,
1139            LEDC_LS_SIG0       = 79,
1140            LEDC_LS_SIG1       = 80,
1141            LEDC_LS_SIG2       = 81,
1142            LEDC_LS_SIG3       = 82,
1143            LEDC_LS_SIG4       = 83,
1144            LEDC_LS_SIG5       = 84,
1145            LEDC_LS_SIG6       = 85,
1146            LEDC_LS_SIG7       = 86,
1147            RMT_SIG_0          = 87,
1148            RMT_SIG_1          = 88,
1149            RMT_SIG_2          = 89,
1150            RMT_SIG_3          = 90,
1151            I2CEXT1_SCL        = 95,
1152            I2CEXT1_SDA        = 96,
1153            GPIO_SD0           = 100,
1154            GPIO_SD1           = 101,
1155            GPIO_SD2           = 102,
1156            GPIO_SD3           = 103,
1157            GPIO_SD4           = 104,
1158            GPIO_SD5           = 105,
1159            GPIO_SD6           = 106,
1160            GPIO_SD7           = 107,
1161            FSPICLK            = 108,
1162            FSPIQ              = 109,
1163            FSPID              = 110,
1164            FSPIHD             = 111,
1165            FSPIWP             = 112,
1166            FSPIIO4            = 113,
1167            FSPIIO5            = 114,
1168            FSPIIO6            = 115,
1169            FSPIIO7            = 116,
1170            FSPICS0            = 117,
1171            FSPICS1            = 118,
1172            FSPICS2            = 119,
1173            FSPICS3            = 120,
1174            FSPICS4            = 121,
1175            FSPICS5            = 122,
1176            TWAI_TX            = 123,
1177            SUBSPICLK          = 126,
1178            SUBSPIQ            = 127,
1179            SUBSPID            = 128,
1180            SUBSPIHD           = 129,
1181            SUBSPIWP           = 130,
1182            SUBSPICS0          = 131,
1183            SUBSPICS1          = 132,
1184            FSPIDQS            = 133,
1185            FSPI_HSYNC         = 134,
1186            FSPI_VSYNC         = 135,
1187            FSPI_DE            = 136,
1188            FSPICD             = 137,
1189            SPI3_CD            = 139,
1190            SPI3_DQS           = 140,
1191            I2S0O_DATA_OUT23   = 166,
1192            SUBSPID4           = 167,
1193            SUBSPID5           = 168,
1194            SUBSPID6           = 169,
1195            SUBSPID7           = 170,
1196            SUBSPIDQS          = 171,
1197            PCMFSYNC           = 209,
1198            PCMCLK             = 210,
1199            PRO_ALONEGPIO_OUT0 = 235,
1200            PRO_ALONEGPIO_OUT1 = 236,
1201            PRO_ALONEGPIO_OUT2 = 237,
1202            PRO_ALONEGPIO_OUT3 = 238,
1203            PRO_ALONEGPIO_OUT4 = 239,
1204            PRO_ALONEGPIO_OUT5 = 240,
1205            PRO_ALONEGPIO_OUT6 = 241,
1206            PRO_ALONEGPIO_OUT7 = 242,
1207            CLK_I2S            = 251,
1208            GPIO               = 256,
1209            CLK_OUT1,
1210            CLK_OUT2,
1211            CLK_OUT3,
1212            MTDO,
1213        }
1214    };
1215}
1216/// Defines and implements the `io_mux_reg` function.
1217///
1218/// The generated function has the following signature:
1219///
1220/// ```rust,ignore
1221/// pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO0 {
1222///     // ...
1223/// # unimplemented!()
1224/// }
1225/// ```
1226///
1227/// This macro is intended to be called in esp-hal only.
1228#[macro_export]
1229#[expect(clippy::crate_in_macro_def)]
1230#[cfg_attr(docsrs, doc(cfg(feature = "_device-selected")))]
1231macro_rules! define_io_mux_reg {
1232    () => {
1233        pub(crate) fn io_mux_reg(gpio_num: u8) -> &'static crate::pac::io_mux::GPIO {
1234            crate::peripherals::IO_MUX::regs().gpio(gpio_num as usize)
1235        }
1236    };
1237}