raspberrypi_utils/
ws2812.rs1use 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}