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