Struct ws2812_flexio::WS2812Driver
source · pub struct WS2812Driver<const N: u8, const L: usize, PINS: Pins<N, L>>where
Instance<N>: Valid,{ /* private fields */ }Expand description
A WS2812 Neopixel LED Strip driver based on the i.MX RT FlexIO module
Implementations§
source§impl<const N: u8, const L: usize, PINS: Pins<N, L>> WS2812Driver<N, L, PINS>where
Instance<N>: Valid,
impl<const N: u8, const L: usize, PINS: Pins<N, L>> WS2812Driver<N, L, PINS>where Instance<N>: Valid,
sourcepub fn init(flexio: Instance<N>, pins: PINS) -> Result<Self, WS2812InitError>
pub fn init(flexio: Instance<N>, pins: PINS) -> Result<Self, WS2812InitError>
Initializes the FlexIO driver.
IMPORTANT! Make sure that the clock input of the FlexIO instance is at 16MHz prior to calling this function.
Note that not all amounts of pins are always supported. The limiting factor is most likely the number of FlexIO timers; we need two timers plus an additional two per pin.
For example, if the FlexIO instance has 8 timers, it supports up to 3 pins.
sourcepub fn write(&mut self, data: [&mut dyn PixelStreamRef; L])
pub fn write(&mut self, data: [&mut dyn PixelStreamRef; L])
Writes pixels to an LED strip.
If the strips are of different length, the shorter ones will be padded
with 0 to match the longest strip.
For technical reasons, an additional [0, 0, 0] pixel will be added at
the of the transmission.
sourcepub fn write_dma<F, R, const N2: usize, const P: usize>(
&mut self,
data: &PreprocessedPixels<N2, L, P>,
dma: &mut Channel,
dma_signal_id: u32,
concurrent_action: F
) -> Result<WriteDmaResult<R>, Error>where
F: FnOnce() -> R,
pub fn write_dma<F, R, const N2: usize, const P: usize>( &mut self, data: &PreprocessedPixels<N2, L, P>, dma: &mut Channel, dma_signal_id: u32, concurrent_action: F ) -> Result<WriteDmaResult<R>, Error>where F: FnOnce() -> R,
Writes pixels to an LED strip.
In contrast to write(), this one performs the actual copy
via DMA, whilst allowing for something else (like the next frame) to be
computed concurrently.
Arguments
data- Preprocessed pixel data to send to the LED stripsdma- The dma channel that should be used to transmit the datadma_signal_id- The signal the FlexIO unit uses to communicate with the DMA. This is chip specific and must therefore be supplied by the user. The value can be found in the reference manual.concurrent_action- A function that will be executed while the pixels get transferred. Typically used to render the next frame, so it can be transmitted afterwards without a delay, to achieve the maximum possible framerate.
For technical reasons, an additional [0, 0, 0] pixel will be added at
the of the transmission.
Auto Trait Implementations§
impl<const N: u8, const L: usize, PINS> !RefUnwindSafe for WS2812Driver<N, L, PINS>
impl<const N: u8, const L: usize, PINS> Send for WS2812Driver<N, L, PINS>where PINS: Send,
impl<const N: u8, const L: usize, PINS> !Sync for WS2812Driver<N, L, PINS>
impl<const N: u8, const L: usize, PINS> Unpin for WS2812Driver<N, L, PINS>where PINS: Unpin,
impl<const N: u8, const L: usize, PINS> !UnwindSafe for WS2812Driver<N, L, PINS>
Blanket Implementations§
source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,
source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere M: TransformMatrix<T>,
source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere U: IntoStimulus<T>,
source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere U: FromAngle<T>,
source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere U: FromColor<T>,
source§fn into_color(self) -> U
fn into_color(self) -> U
source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere U: FromColorUnclamped<T>,
source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere U: TryFromColor<T>,
source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more