uefi-graphics2 0.5.0

An embedded-graphics display driver for UEFI environments
Documentation

uefi-graphics2

Crates.io Version Crates.io Total Downloads Crates.io License

A fast embedded-graphics display driver for UEFI environments, using the embedded-graphics crate as its base.

Supports:

  • Double buffering
  • Display resizing
  • An extensive draw/render library using the embedded-graphics crate

Why are there 2 other crates for this job?

uefi-graphics and uefi-graphics-driver are two crates providing similar functionality, sadly both seem to either lack some of the necessary functionality or are completely unmaintained

Example

Here is a simple example with using the uefi crate on version 0.30.0:

#![no_main]
#![no_std]

extern crate alloc;

use embedded_graphics::geometry::Point;
use embedded_graphics::mono_font::ascii::FONT_6X10;
use embedded_graphics::mono_font::MonoTextStyle;
use embedded_graphics::pixelcolor::Rgb888;
use embedded_graphics::text::Text;
use embedded_graphics::Drawable;
use uefi::prelude::*;
use uefi::proto::console::gop::GraphicsOutput;

use uefi_graphics2::UefiDisplay;

#[entry]
fn main() -> Status {
  uefi::helpers::init().unwrap();

  // Disable the watchdog timer
  boot::set_watchdog_timer(0, 0x10000, None).unwrap();

  // Get gop
  let gop_handle = boot::get_handle_for_protocol::<GraphicsOutput>().unwrap();
  let mut gop = boot::open_protocol_exclusive::<GraphicsOutput>(gop_handle).unwrap();

  // Create UefiDisplay
  let mode = gop.current_mode_info();
  let mut display = UefiDisplay::new(gop.frame_buffer(), mode).unwrap();

  // Create a new character style
  let style = MonoTextStyle::new(&FONT_6X10, Rgb888::WHITE);

  // Create a new text
  let text = Text::new("Hello World!", Point { x: 30, y: 100 }, style);

  // Draw the text on the display
  text.draw(&mut display).unwrap();

  // Flush everything
  display.flush();

  // wait 10000000 microseconds (10 seconds)
  boot::stall(10_000_000);

  Status::SUCCESS
}

More example can be found in the example directory uefi-graphics2/examples.

Contributing and Updating

If any dependencies are outdated, bugs occur or features are requested, please notify me and create an issue.

Contributing is appreciated as well, feel free to create a pull request.

If you like this project dont forget to leave a star on github!

Star History

Star History Chart