From 42a3f4c104eafb26db77df0ce513d1e9d9d6325e Mon Sep 17 00:00:00 2001 From: sawyer bristol Date: Thu, 17 Jul 2025 23:33:48 -0600 Subject: [PATCH] fixes --- Cargo.lock | 76 ++++++++++++++++++++++++++++++++++++++++++-------- src/display.rs | 42 ++++++++++++++++------------ src/main.rs | 7 +++-- 3 files changed, 92 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index cbc0950..13db5ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -138,6 +138,18 @@ version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -447,12 +459,13 @@ checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "embassy-embedded-hal" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fea5ef5bed4d3468dfd44f5c9fa4cda8f54c86d4fb4ae683eacf9d39e2ea12" +checksum = "8578db196d74db92efdd5ebc546736dac1685499ee245b22eff92fa5e4b57945" dependencies = [ "embassy-futures", - "embassy-sync 0.6.2", + "embassy-hal-internal 0.3.0", + "embassy-sync 0.7.0", "embassy-time", "embedded-hal 0.2.7", "embedded-hal 1.0.0", @@ -505,6 +518,15 @@ dependencies = [ "num-traits", ] +[[package]] +name = "embassy-hal-internal" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95285007a91b619dc9f26ea8f55452aa6c60f7115a4edc05085cd2bd3127cd7a" +dependencies = [ + "num-traits", +] + [[package]] name = "embassy-net-driver" version = "0.2.0" @@ -513,13 +535,13 @@ checksum = "524eb3c489760508f71360112bca70f6e53173e6fe48fc5f0efd0f5ab217751d" [[package]] name = "embassy-net-driver-channel" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4818c32afec43e3cae234f324bad9a976c9aa7501022d26ff60a4017a1a006b7" +checksum = "25a567ab50319d866ad5e6c583ed665ba9b07865389644d3d82e45bf1497c934" dependencies = [ "embassy-futures", "embassy-net-driver", - "embassy-sync 0.6.2", + "embassy-sync 0.7.0", ] [[package]] @@ -536,7 +558,7 @@ dependencies = [ "document-features", "embassy-embedded-hal", "embassy-futures", - "embassy-hal-internal", + "embassy-hal-internal 0.2.0", "embassy-sync 0.6.2", "embassy-time", "embassy-usb-driver", @@ -574,7 +596,7 @@ dependencies = [ "document-features", "embassy-embedded-hal", "embassy-futures", - "embassy-hal-internal", + "embassy-hal-internal 0.2.0", "embassy-sync 0.6.2", "embassy-time", "embassy-time-driver", @@ -666,11 +688,12 @@ dependencies = [ [[package]] name = "embassy-usb-driver" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc247028eae04174b6635104a35b1ed336aabef4654f5e87a8f32327d231970" +checksum = "340c5ce591ef58c6449e43f51d2c53efe1bf0bb6a40cbf80afa0d259c7d52c76" dependencies = [ - "defmt 0.3.100", + "defmt 1.0.1", + "embedded-io-async", ] [[package]] @@ -844,6 +867,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures" version = "0.3.31" @@ -1535,6 +1564,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand_core" version = "0.6.4" @@ -1733,11 +1768,13 @@ dependencies = [ [[package]] name = "st7365p-lcd" version = "0.11.0" -source = "git+https://github.com/legitcamper/st7365p-lcd-rs?branch=async#c4e923c33b89883ea6f98b448822a8606d730f27" +source = "git+https://github.com/legitcamper/st7365p-lcd-rs?branch=async#87abf450404865dcb535292e9e1a6a2457fd4599" dependencies = [ + "bitvec", "embedded-graphics-core", "embedded-hal 1.0.0", "embedded-hal-async", + "heapless", "nb 1.1.0", ] @@ -1805,6 +1842,12 @@ dependencies = [ "lock_api", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "term" version = "0.7.0" @@ -2228,6 +2271,15 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "zerocopy" version = "0.8.26" diff --git a/src/display.rs b/src/display.rs index 7ec99b6..7cf9ab4 100644 --- a/src/display.rs +++ b/src/display.rs @@ -7,13 +7,13 @@ use embassy_rp::{ spi::{Async, Spi}, }; use embassy_sync::{blocking_mutex::raw::ThreadModeRawMutex, signal::Signal}; -use embassy_time::{Delay, Timer}; +use embassy_time::{Delay, Instant, Timer}; use embedded_graphics::{ Drawable, draw_target::DrawTarget, mono_font::{MonoTextStyle, ascii::FONT_10X20}, pixelcolor::Rgb565, - prelude::{Point, RgbColor, Size}, + prelude::{Dimensions, Point, RgbColor, Size}, primitives::Rectangle, text::{Alignment, Text}, }; @@ -21,6 +21,8 @@ use embedded_hal_bus::spi::ExclusiveDevice; use portable_atomic::AtomicBool; use st7365p_lcd::{FrameBuffer, ST7365P}; +use crate::LAST_TEXT_RECT; + const SCREEN_WIDTH: usize = 320; const SCREEN_HEIGHT: usize = 320; @@ -56,26 +58,30 @@ pub async fn display_handler( loop { DISPLAY_SIGNAL.wait().await; - framebuffer - .fill_solid( - &Rectangle::new( - Point::new(0, 0), - Size::new(SCREEN_HEIGHT as u32 - 1, SCREEN_WIDTH as u32 - 1), - ), - Rgb565::BLACK, - ) - .unwrap(); - let text = crate::STRING.lock().await.clone(); + let text_string = crate::STRING.lock().await.clone(); - Text::with_alignment( - &text, + let text = Text::with_alignment( + &text_string, Point::new(160, 160), MonoTextStyle::new(&FONT_10X20, Rgb565::RED), Alignment::Center, - ) - .draw(&mut framebuffer) - .unwrap(); + ); - framebuffer.draw(&mut display).await.unwrap(); + { + let rect = LAST_TEXT_RECT.lock().await; + if let Some(rect) = *rect.borrow() { + framebuffer.fill_solid(&rect, Rgb565::BLACK).unwrap(); + } + *rect.borrow_mut() = Some(text.bounding_box()); + } + + text.draw(&mut framebuffer).unwrap(); + + let start = Instant::now(); + framebuffer + .partial_draw_batched(&mut display) + .await + .unwrap(); + info!("Elapsed {}ms", start.elapsed().as_millis()); } } diff --git a/src/main.rs b/src/main.rs index 684d8d0..e754b93 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,8 +3,6 @@ #![no_std] #![no_main] -use core::sync::atomic::Ordering; - use crate::{ display::DISPLAY_SIGNAL, peripherals::keyboard::{KeyCode, KeyState, read_keyboard_fifo}, @@ -12,7 +10,7 @@ use crate::{ use {defmt_rtt as _, panic_probe as _}; -use defmt::info; +use core::cell::RefCell; use embassy_executor::Spawner; use embassy_futures::join::join; use embassy_rp::peripherals::I2C1; @@ -20,6 +18,7 @@ use embassy_rp::{i2c, i2c::I2c, spi}; use embassy_sync::blocking_mutex::raw::ThreadModeRawMutex; use embassy_sync::mutex::Mutex; use embassy_time::Timer; +use embedded_graphics::primitives::Rectangle; use heapless::String; mod peripherals; @@ -32,6 +31,8 @@ embassy_rp::bind_interrupts!(struct Irqs { }); static STRING: Mutex> = Mutex::new(String::new()); +static LAST_TEXT_RECT: Mutex>> = + Mutex::new(RefCell::new(None)); #[embassy_executor::main] async fn main(_spawner: Spawner) {