Screen

Struct Screen 

Source
pub struct Screen { /* private fields */ }
Expand description

This is the main type for interacting with the LED Matrix Screen.

Implementations§

Source§

impl Screen

Source

pub fn open(path: &str) -> Result<Self, ScreenError>

Open the framebuffer to the screen at the given file-system path.

Examples found in repository?
examples/letter.rs (line 17)
16fn main() {
17    let mut screen = Screen::open("/dev/fb1").unwrap();
18
19    let white_50_pct = PixelColor::WHITE.dim(0.5);
20
21    let letter = "Dear Toño, I am well. Thank you. Bye. - ゆにち";
22
23    let screen_text = FONT_COLLECTION.sanitize_str(letter).unwrap();
24
25    for unicode in screen_text.chars() {
26        if let Some(symbol) = FONT_COLLECTION.get(unicode) {
27            let frame = font_to_frame(symbol.byte_array(), white_50_pct);
28            screen.write_frame(&frame);
29        }
30        thread::sleep(Duration::from_millis(800));
31    }
32}
More examples
Hide additional examples
examples/scroll-bottom-top.rs (line 15)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" ^^^123^^^ ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of CYAN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::CYAN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `bottom_to_top` method.
29    scroll.bottom_to_top().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-left-right.rs (line 15)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" >>>123>>> ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `left_to_right` method.
29    scroll.left_to_right().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-top-bottom.rs (line 15)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" vvv123vvv ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `top_to_bottom` method.
29    scroll.top_to_bottom().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-right-left.rs (line 15)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" «««123««« ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of GREEN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::GREEN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `right_to_left` method.
29    scroll.right_to_left().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/clip.rs (line 16)
15fn main() {
16    let mut screen = Screen::open("/dev/fb1").unwrap();
17
18    let letters = "a e i o u ";
19    let letter_color = PixelColor::YELLOW.dim(0.5);
20
21    let frames = letters
22        .chars()
23        .map(|sym| {
24            let font = FONT_COLLECTION.get(sym).unwrap();
25            font_to_pixel_frame(font.byte_array(), letter_color)
26        })
27        .collect::<Vec<PixelFrame>>();
28
29    // create a sequence of clips that will scroll each character-whitespace pair
30    // from appearing to move from right to left.
31    let frame_reel: Vec<PixelFrame> = frames.chunks(2).fold(Vec::new(), |mut v, chunk| match chunk
32        .len()
33    {
34        2 => {
35            let clip = chunk[0].build_clip(&chunk[1]);
36            for i in 0..=8 {
37                v.push(clip.offset(Offset::left(i)));
38            }
39            v
40        }
41        _ => panic!("this frame reel will only display &str of even length (divisible by 2)"),
42    });
43
44    for frame in &frame_reel {
45        screen.write_frame(&frame.frame_line());
46        ::std::thread::sleep(::std::time::Duration::from_millis(750));
47    }
48}
Source

pub fn write_frame(&mut self, frame: &FrameLine)

Write the contents of a FrameLine into the framebuffer. This will render the frameline on the screen.

Examples found in repository?
examples/letter.rs (line 28)
16fn main() {
17    let mut screen = Screen::open("/dev/fb1").unwrap();
18
19    let white_50_pct = PixelColor::WHITE.dim(0.5);
20
21    let letter = "Dear Toño, I am well. Thank you. Bye. - ゆにち";
22
23    let screen_text = FONT_COLLECTION.sanitize_str(letter).unwrap();
24
25    for unicode in screen_text.chars() {
26        if let Some(symbol) = FONT_COLLECTION.get(unicode) {
27            let frame = font_to_frame(symbol.byte_array(), white_50_pct);
28            screen.write_frame(&frame);
29        }
30        thread::sleep(Duration::from_millis(800));
31    }
32}
More examples
Hide additional examples
examples/scroll-bottom-top.rs (line 32)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" ^^^123^^^ ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of CYAN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::CYAN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `bottom_to_top` method.
29    scroll.bottom_to_top().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-left-right.rs (line 32)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" >>>123>>> ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `left_to_right` method.
29    scroll.left_to_right().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-top-bottom.rs (line 32)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" vvv123vvv ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `top_to_bottom` method.
29    scroll.top_to_bottom().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-right-left.rs (line 32)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" «««123««« ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of GREEN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::GREEN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `right_to_left` method.
29    scroll.right_to_left().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/clip.rs (line 45)
15fn main() {
16    let mut screen = Screen::open("/dev/fb1").unwrap();
17
18    let letters = "a e i o u ";
19    let letter_color = PixelColor::YELLOW.dim(0.5);
20
21    let frames = letters
22        .chars()
23        .map(|sym| {
24            let font = FONT_COLLECTION.get(sym).unwrap();
25            font_to_pixel_frame(font.byte_array(), letter_color)
26        })
27        .collect::<Vec<PixelFrame>>();
28
29    // create a sequence of clips that will scroll each character-whitespace pair
30    // from appearing to move from right to left.
31    let frame_reel: Vec<PixelFrame> = frames.chunks(2).fold(Vec::new(), |mut v, chunk| match chunk
32        .len()
33    {
34        2 => {
35            let clip = chunk[0].build_clip(&chunk[1]);
36            for i in 0..=8 {
37                v.push(clip.offset(Offset::left(i)));
38            }
39            v
40        }
41        _ => panic!("this frame reel will only display &str of even length (divisible by 2)"),
42    });
43
44    for frame in &frame_reel {
45        screen.write_frame(&frame.frame_line());
46        ::std::thread::sleep(::std::time::Duration::from_millis(750));
47    }
48}

Trait Implementations§

Source§

impl Debug for Screen

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Screen

§

impl RefUnwindSafe for Screen

§

impl Send for Screen

§

impl Sync for Screen

§

impl Unpin for Screen

§

impl UnwindSafe for Screen

Blanket Implementations§

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> 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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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.