cfg(any(esp32s3, esp32s31, esp32p4)) => "8 channels, `Channel<0>`-`Channel<3>` hardcoded for transmitting signals and `Channel<4>`-`Channel<7>` hardcoded for receiving signals",
cfg(any(esp32c3, esp32c5, esp32c6, esp32h2)) => "4 channels, `Channel<0>` and `Channel<1>` hardcoded for transmitting signals and `Channel<2>` and `Channel<3>` hardcoded for receiving signals",
#, "/api-reference/peripherals/rmt.html)")]
// Pre-compute some constants to make it obvious that the code below doesn't mix up both halves of
/// This is slightly more convenient when passing in longer integers (e.g. `u32`) resulting from
// We store values of type `RmtState` in the global `STATE`. However, we also need atomic access,
// This submodule wraps all accesses in a safe API which ensures that only valid enum values can
// The reborrowing API treats Channel similar to a smart pointer: Ensure that it's size is actually
// FIXME: This interface isn't great, since one cannot use the waiting time until tx is stopped
/// Repeats for the given number of iterations, and also sets the loop count interrupt flag upon
doc = "When using a loop `mode` other than [`LoopMode::Infinite`], [`ContinuousTxTransaction::is_loopcount_interrupt_set`] can be used to check if the loop count is reached."
cfg(any(esp32, esp32s2)) => "The length of the received data cannot exceed the allocated RMT RAM.",
pub fn transmit(&mut self, mut data: &[PulseCode]) -> impl Future<Output = Result<(), Error>> {
cfg(any(esp32, esp32s2)) => "The length of the received data cannot exceed the allocated RMT RAM.",