1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//! # Smart Leds Trait
//!
//! Smart leds is a collection of crates to use smart leds on embedded devices with rust.
//!
//! Examples of smart leds include the popular WS2812 (also called Neopixel),
//! APA102 (DotStar) and other leds, which can be individually adressed.
//!
//! This crate is used as a common base, so that breaking changes which would
//! force all other crates to be updated, can be avoided.
//!
//! End users should use the [smart-leds](https://crates.io/crates/smart-leds)
//! crate, which contains various convenience functions.
#![no_std]

pub use {rgb::RGB, rgb::RGB16, rgb::RGB8, rgb::RGBA};

#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct White<C>(pub C);

/// The RGBW Pixel
///
/// This is used for leds, that in addition to RGB leds also contain a white led
pub type RGBW<ComponentType, WhiteComponentType = ComponentType> =
    RGBA<ComponentType, White<WhiteComponentType>>;

/// A trait that smart led drivers implement
///
/// The amount of time each iteration of `iterator` might take is undefined.
/// Drivers, where this might lead to issues, aren't expected to work in all cases.
pub trait SmartLedsWrite {
    type Error;
    type Color;
    fn write<T, I>(&mut self, iterator: T) -> Result<(), Self::Error>
    where
        T: IntoIterator<Item = I>,
        I: Into<Self::Color>;
}