raspberrypi_utils/
ws2812.rs

1use raspberrypi_utils_sys::{Ws2812};
2
3pub use raspberrypi_utils_sys::urgb_u32;
4
5pub struct LedString {
6    hw: Ws2812,
7}
8
9impl LedString {
10    pub fn new(gpio: u32, frequency: Option<u32>, is_rgbw: bool) -> Result<Self, String> {
11        let runner = Ws2812::new(gpio)?;
12
13        runner.program_init(frequency, is_rgbw);
14
15        Ok(LedString { hw: runner })
16    }
17
18    pub fn put_pixel(&mut self, pixel_grb: u32) {
19        self.hw.put_pixel(pixel_grb);
20    }
21
22    pub fn put_pixel_rgb(&mut self, r: u8, g: u8, b: u8) {
23        self.hw.put_pixel(urgb_u32(r, g, b))
24    }
25
26    pub fn put_all_pixels(&mut self, pixel_grb: u32, num_pixels: u32) {
27        for _ in 0..num_pixels {
28            self.hw.put_pixel(pixel_grb);
29        }
30    }
31
32    pub fn put_all_pixels_rgb(&mut self, r: u8, g: u8, b: u8, num_pixels: u32) {
33        let pixel_grb = urgb_u32(r, g, b);
34
35        self.put_all_pixels(pixel_grb, num_pixels);
36    }
37}