From 807e6aa6f5c93bcacaa3efbdfdb7000f8fdb2c72 Mon Sep 17 00:00:00 2001 From: zdmx <hi@zdmx.me> Date: Mon, 14 Aug 2023 00:20:16 +0200 Subject: [PATCH] Add start screen / bmp rendering example --- Cargo.lock | 10 ++++++++++ Cargo.toml | 1 + img/logo.bmp | Bin 0 -> 27786 bytes src/demo_tasks.rs | 18 +++++++++++++++++- src/main.rs | 6 +++++- 5 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 img/logo.bmp diff --git a/Cargo.lock b/Cargo.lock index 4127ac8..e29355c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -699,6 +699,7 @@ dependencies = [ "shared-bus", "smart-leds", "static_cell", + "tinybmp", ] [[package]] @@ -1269,6 +1270,15 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "tinybmp" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "197cc000e382175ff15abd9c54c694ef80ef20cb07e7f956c71e3ea97fc8dc60" +dependencies = [ + "embedded-graphics", +] + [[package]] name = "toml_datetime" version = "0.6.3" diff --git a/Cargo.toml b/Cargo.toml index 9c9e8dc..2f79b6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,3 +32,4 @@ port-expander = "0.4.0" shared-bus = { version = "0.3.0", features = ["xtensa"] } smart-leds = "0.3.0" static_cell = "1.2.0" +tinybmp = "0.5.0" diff --git a/img/logo.bmp b/img/logo.bmp new file mode 100644 index 0000000000000000000000000000000000000000..aa065fa3bfaa51446bf7a859ea31295d39dcd2c5 GIT binary patch literal 27786 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 ZceH@|_wV26{X~%P!Ae4cYiQkX1prFY21Eb= literal 0 HcmV?d00001 diff --git a/src/demo_tasks.rs b/src/demo_tasks.rs index 76f9dc0..c9d0362 100644 --- a/src/demo_tasks.rs +++ b/src/demo_tasks.rs @@ -5,10 +5,11 @@ use embedded_graphics::{ pixelcolor::Rgb565, prelude::*, primitives::{PrimitiveStyle, Rectangle, StyledDrawable}, - text::Text, + text::Text, image::Image, }; use esp_backtrace as _; use esp_println::println; +use tinybmp::Bmp; use crate::flow3r::display::Display; use smart_leds::SmartLedsWrite; @@ -87,3 +88,18 @@ async fn move_rectangle<'a>( display.flush().await.unwrap(); Timer::after(Duration::from_millis(10)).await; } + +pub async fn draw_start_screen(display: &mut Display) { + let bmp_data = include_bytes!("../img/logo.bmp"); + let bmp = Bmp::from_slice(bmp_data).unwrap(); + display.fill_solid(&display.bounding_box(), Rgb565::WHITE).unwrap(); + Image::with_center(&bmp, display.bounding_box().center()).draw(display).unwrap(); + Text::with_alignment( + "flow3-rs starting", + Point { x: 120, y: 180 }, + MonoTextStyle::new(&FONT_6X10, Rgb565::BLACK), + embedded_graphics::text::Alignment::Center + ).draw(display).unwrap(); + display.flush().await.unwrap(); + display.set_backlight(100).unwrap(); +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 4e3a76c..62fc88b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ mod flow3r; mod runtime; mod demo_tasks; +use demo_tasks::draw_start_screen; use embassy_executor::Spawner; use embassy_time::{Duration, Timer}; @@ -24,7 +25,10 @@ fn runtime() -> ! { } #[embassy_executor::task] -async fn main(flow3r: Flow3r) -> ! { +async fn main(mut flow3r: Flow3r) -> ! { + draw_start_screen(&mut flow3r.display).await; + Timer::after(Duration::from_secs(10)).await; + let spawner = Spawner::for_current_executor().await; spawner.spawn(demo_tasks::leds_fade(flow3r.leds)).ok(); spawner.spawn(demo_tasks::display_demo(flow3r.display)).ok(); -- GitLab