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,

source

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.

source

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.

source

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 strips
  • dma - The dma channel that should be used to transmit the data
  • dma_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>,

source§

fn adapt_into_using<M>(self, method: M) -> Dwhere M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromAngle<T> for T

source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
source§

impl<T, U> FromStimulus<U> for Twhere U: IntoStimulus<T>,

source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> IntoAngle<U> for Twhere U: FromAngle<T>,

source§

fn into_angle(self) -> U

Performs a conversion into T.
source§

impl<T, U> IntoColor<U> for Twhere U: FromColor<T>,

source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
source§

impl<T, U> IntoColorUnclamped<U> for Twhere U: FromColorUnclamped<T>,

source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
source§

impl<T> IntoStimulus<T> for T

source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T, U> TryIntoColor<U> for Twhere U: TryFromColor<T>,

source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more