($($other:tt)*) => { compile_error!(concat!("Unknown wakeup source: ", stringify!($($other)*))) };
/// Returned by [`wakeup_cause`]. This is a thin wrapper around the set of [`WakeupSource`]s that
// For more info on about how RTC setting works and what it has to do with boot time, see https://github.com/esp-rs/esp-hal/pull/1883
// https://github.com/espressif/esp-idf/blob/23e4823f17a8349b5e03536ff7653e3e584c9351/components/newlib/port/esp_time_impl.c#L115
// https://github.com/espressif/esp-idf/blob/23e4823/components/newlib/port/esp_time_impl.c#L102-L103
/// `Rtc` owns `RTC_TIMER`, but the sleep alarm needs the same counter without the peripheral. This
/// read is therefore a free function. A read first writes a register to make a snapshot, and then
/// reads the snapshot from other registers. Two callers that do this at the same time can read the
/// snapshot of the other caller, and the lock prevents that. The lock keeps interrupts disabled for
static LIGHT_SLEEP_WAKEUP: portable_atomic::AtomicBool = portable_atomic::AtomicBool::new(false);
/// returned. The result is empty if the chip was not woken from sleep (for example on a cold boot,