Struct 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,

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 take_interrupt_handler( &mut self, storage: &'static mut Option<InterruptHandlerData<N>>, ) -> InterruptHandler<N>

Take the interrupt handler callback from the driver.

§Arguments
  • storage - Static memory required by the function to work. See InterruptHandlerData for more information.

For correct functionality of write_dma() in waker-based async runtimes (like RTIC 2), it is required to invoke the returned InterruptHandler every time an interrupt of the given FlexIO peripheral happens.

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 async 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: Future<Output = 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.

Source

pub fn write_dma_blocking<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,

Same as write_dma(), but blocks until completion.

Do not use this function in an async context as it will busy-wait internally.

Auto Trait Implementations§

§

impl<const N: u8, const L: usize, PINS> !Freeze for WS2812Driver<N, L, PINS>

§

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>

§

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 S
where 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) -> D
where 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 T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
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 T
where 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 T
where 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 T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where 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 T
where 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, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

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

Source§

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 T
where U: TryFrom<T>,

Source§

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 T
where 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
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.