Struct FrameBuffer

Source
#[repr(C)]
pub struct FrameBuffer<T>
where T: Hardware,
{ /* private fields */ }
Expand description

This structure represents the framebuffer - a 2D array of monochome pixels.

The framebuffer is stored as an array of horizontal lines, where each line is comprised of 8 bit words. This suits our timing needs as although the SPI peripheral on an LM4F120 which can emit 16 bits at a time, 8 proves easier to work with.

Implementations§

Source§

impl<T> FrameBuffer<T>
where T: Hardware,

Source

pub fn new() -> FrameBuffer<T>

Source

pub fn init(&mut self, hw: T)

Initialise the hardware (by calling the configure callback).

Source

pub fn borrow_hw_mut(&mut self) -> Option<&mut T>

Source

pub fn borrow_hw(&self) -> Option<&T>

Source

pub fn set_cursor_visible(&mut self, visible: bool)

Source

pub fn mode2(&mut self, buffer: &[u8], start_line: usize)

Enable mode2 - a 1-bit-per-pixel graphical buffer which is coloured according to the colour attributes for the matching text cells. Supply a u8 slice that is some multiple of MODE0_USABLE_HORIZONTAL_OCTETS long. The buffer will be line-doubled and so can be up to 288 lines long.

Source

pub fn mode2_shift(&mut self, new_start_line: usize)

Source

pub fn mode2_release(&mut self)

Releases the memory for mode2. The rendering code may keep reading this memory buffer up until the end of the frame.

Source

pub fn map_line(&mut self, visible_line: u16, rendered_line: u16)

Source

pub fn frame(&self) -> usize

Returns the current frame number.

Source

pub fn line(&self) -> Option<usize>

Returns the current visible line number or None in the blanking period.

Source

pub fn total_line(&self) -> u64

Returns the number of lines since startup.

Source

pub fn isr_sol(&mut self)

Call this at the start of every line.

Source

pub fn set_custom_font(&mut self, new_font: Option<&'static [u8]>)

Change the current font

Source

pub fn clear(&mut self)

Clears the screen and resets the cursor to 0,0.

Source

pub fn write_glyph_at(&mut self, glyph: Char, pos: Position, attr: Option<Attr>)

Puts a glyph on screen at the specified place

Source

pub fn read_glyph_at(&mut self, pos: Position) -> Option<(Char, Attr)>

Read a glyph on screen at the specified place

Source

pub fn write_glyph(&mut self, glyph: Char, attr: Option<Attr>)

Puts a glyph on screen at the current position.

Source

pub fn write_char(&mut self, ch: u8, attr: Option<Attr>)

Write a single Unicode char to the screen at the current position.

Source

pub fn set_attr_at(&mut self, pos: Position, attr: Attr)

Changes the attribute for a given position, leaving the glyph unchanged.

Source

pub fn set_line_mode_at(&mut self, row: Row, double_height: DoubleHeightMode)

Change font height for a given line.

Source

pub fn set_line_mode(&mut self, double_height: DoubleHeightMode)

Change font height for the current line.

Source

pub fn set_attr(&mut self, attr: Attr) -> Attr

Change the current character attribute

Source

pub fn get_attr(&mut self) -> Attr

Get the current character attribute

Trait Implementations§

Source§

impl<T> AsciiConsole for FrameBuffer<T>
where T: Hardware,

Source§

fn handle_escape(&mut self, escaped_char: u8) -> bool

Handle an escape char. We take a, b, c, d, e, f, g, h as being a background colour and A..H as being a foreground colour. ‘Z’ means clear the screen.

Source§

fn write_char_at(&mut self, ch: u8, pos: Position) -> Result<(), Self::Error>

Write a single Unicode char to the screen at the given position without updating the current position.

Source§

fn write_string(&mut self, s: &[u8]) -> Result<(), Self::Error>

Write an 8-bit string to the screen at the given position. Updates the current position to the end of the string. Strings will wrap across the end of the screen and scroll the screen if they reach the bottom.
Source§

fn write_character(&mut self, ch: u8) -> Result<(), Self::Error>

Write a single 8-bit char to the screen at the current position.
Source§

fn write_string_at( &mut self, s: &[u8], pos: Position, ) -> Result<(), Self::Error>

Write an 8-bit string to the screen at the given position. Updates the current position to the end of the string. Strings will wrap across the end of the screen and scroll the screen if they reach the bottom.
Source§

fn is_special(&self, ch: u8) -> Option<SpecialChar>

Check if an 8-bit char is special
Source§

impl<T> BaseConsole for FrameBuffer<T>
where T: Hardware,

Source§

fn get_width(&self) -> Col

Gets the last col on the screen.

Source§

fn get_height(&self) -> Row

Gets the last row on the screen.

Source§

fn set_col(&mut self, col: Col) -> Result<(), Self::Error>

Set the horizontal position for the next text output.

Source§

fn set_row(&mut self, row: Row) -> Result<(), Self::Error>

Set the vertical position for the next text output.

Source§

fn set_pos(&mut self, pos: Position) -> Result<(), Self::Error>

Set the horizontal and vertical position for the next text output.

Source§

fn get_pos(&self) -> Position

Get the current screen position.

Source§

fn set_control_char_mode(&mut self, mode: ControlCharMode)

Set the control char mode

Source§

fn get_control_char_mode(&self) -> ControlCharMode

Get the current control char mode

Source§

fn set_escape_char_mode(&mut self, mode: EscapeCharMode)

Set the escape char mode

Source§

fn get_escape_char_mode(&self) -> EscapeCharMode

Get the current escape char mode

Source§

fn scroll_screen(&mut self) -> Result<(), Self::Error>

Called when the screen needs to scroll up one row.

Source§

type Error = ()

Source§

fn set_pos_unbounded(&mut self, pos: Position)

Set the horizontal and vertical position for the next text output. Don’t bounds check the value, we’ve already done it.
Source§

fn move_cursor_right(&mut self) -> Result<(), Self::Error>

Move the current cursor right one position. Wraps at the end of the line. Returns Ok(true) if the screen needs to scroll, or Ok(false) if it does not.
Source§

impl<T> Write for FrameBuffer<T>
where T: Hardware,

Source§

fn write_str(&mut self, s: &str) -> Result

Writes a string slice into this writer, returning whether the write succeeded. Read more
1.1.0 · Source§

fn write_char(&mut self, c: char) -> Result<(), Error>

Writes a char into this writer, returning whether the write succeeded. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Glue for usage of the write! macro with implementors of this trait. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for FrameBuffer<T>

§

impl<T> RefUnwindSafe for FrameBuffer<T>
where T: RefUnwindSafe,

§

impl<T> !Send for FrameBuffer<T>

§

impl<T> !Sync for FrameBuffer<T>

§

impl<T> Unpin for FrameBuffer<T>
where T: Unpin,

§

impl<T> UnwindSafe for FrameBuffer<T>
where T: UnwindSafe,

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.