From b9363f1c7d4bdd98f6147507b68082b7cd0bc395 Mon Sep 17 00:00:00 2001 From: Adam Gausmann Date: Thu, 30 Oct 2025 20:49:39 -0500 Subject: [PATCH] HappyEyes --- Cargo.lock | 11 ----------- firmware/Cargo.toml | 1 - firmware/src/art.rs | 27 ++++++++++++++++++++++++++- firmware/src/assets/eye1.tga | Bin 0 -> 220 bytes firmware/src/main.rs | 34 ++++++++++++++++++++-------------- 5 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 firmware/src/assets/eye1.tga diff --git a/Cargo.lock b/Cargo.lock index c86b5ab..18df47e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -765,7 +765,6 @@ dependencies = [ "embedded-storage", "heapless", "mipidsi", - "panic-probe", "rgb", "tinytga", ] @@ -888,16 +887,6 @@ dependencies = [ "syn", ] -[[package]] -name = "panic-probe" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd402d00b0fb94c5aee000029204a46884b1262e0c443f166d86d2c0747e1a1a" -dependencies = [ - "cortex-m", - "defmt", -] - [[package]] name = "parking_lot" version = "0.12.5" diff --git a/firmware/Cargo.toml b/firmware/Cargo.toml index ce2b5b4..0a1bdb6 100644 --- a/firmware/Cargo.toml +++ b/firmware/Cargo.toml @@ -12,7 +12,6 @@ bench = false [dependencies] defmt = "1.0" defmt-rtt = "1.1" -panic-probe = { version = "1.0", features = ["print-defmt"] } embedded-hal = "1.0.0" embedded-hal-async = "1.0.0" diff --git a/firmware/src/art.rs b/firmware/src/art.rs index 44886ab..1e26154 100644 --- a/firmware/src/art.rs +++ b/firmware/src/art.rs @@ -22,6 +22,31 @@ impl Drawable for Hal { where D: DrawTarget, { - Image::new(&self.image_data, Point::zero()).draw(target) + self.image_data.draw(target) + } +} + +pub struct HappyEyes { + image_data: Tga<'static, Rgb888>, +} + +impl HappyEyes { + pub fn new() -> Self { + Self { + image_data: Tga::from_slice(include_bytes!("assets/eye1.tga")).unwrap(), + } + } +} + +impl Drawable for HappyEyes { + type Color = Rgb888; + + type Output = (); + + fn draw(&self, target: &mut D) -> Result + where + D: DrawTarget, + { + self.image_data.draw(target) } } diff --git a/firmware/src/assets/eye1.tga b/firmware/src/assets/eye1.tga new file mode 100644 index 0000000000000000000000000000000000000000..709dc4a2b9c43a753bc15bcb2d18ee886804ac31 GIT binary patch literal 220 zcmZQz;9`IP4h9Vd4h9K@E)89`w!p+miRgVDxmF`qK literal 0 HcmV?d00001 diff --git a/firmware/src/main.rs b/firmware/src/main.rs index 9395339..fe13805 100644 --- a/firmware/src/main.rs +++ b/firmware/src/main.rs @@ -4,6 +4,8 @@ mod art; mod led_matrix; +use core::panic::PanicInfo; + use embassy_executor::Spawner; use embassy_futures::select::select_array; use embassy_rp::bind_interrupts; @@ -13,28 +15,25 @@ use embassy_rp::pio::Pio; use embassy_rp::pio_programs::ws2812::{PioWs2812, PioWs2812Program}; use embassy_rp::pwm::{self, Pwm}; use embassy_rp::rom_data::reset_to_usb_boot; +use embassy_rp::spi::{self, Blocking, Spi}; use embassy_time::Delay; +use embedded_graphics::image::{Image, ImageRawLE}; +use embedded_graphics::mono_font::MonoTextStyle; +use embedded_graphics::mono_font::ascii::FONT_10X20; +use embedded_graphics::pixelcolor::{Rgb565, Rgb888}; +use embedded_graphics::prelude::*; use embedded_graphics::primitives::{PrimitiveStyleBuilder, Rectangle}; +use embedded_graphics::text::Text; use embedded_hal_bus::spi::ExclusiveDevice; use heapless::String; use mipidsi::interface::SpiInterface; use mipidsi::models::ST7789; use mipidsi::options::Orientation; -use crate::art::Hal; +use crate::art::{Hal, HappyEyes}; use crate::led_matrix::{LedMatrix, Serpentine}; -use {defmt_rtt as _, panic_probe as _}; - -use embassy_rp::spi::{self, Blocking, Spi}; -use embedded_graphics::image::{Image, ImageRawLE}; -use embedded_graphics::mono_font::MonoTextStyle; -use embedded_graphics::mono_font::ascii::FONT_10X20; -use embedded_graphics::pixelcolor::{Rgb565, Rgb888}; -use embedded_graphics::prelude::*; -use embedded_graphics::text::Text; - -use {defmt_rtt as _, panic_probe as _}; +use defmt_rtt as _; bind_interrupts!(struct Irqs { PIO0_IRQ_0 => embassy_rp::pio::InterruptHandler; @@ -143,8 +142,9 @@ async fn main(spawner: Spawner) -> ! { .draw(&mut led_surface) .ok(); */ - let hal = Hal::new(); - hal.draw(&mut led_surface).ok(); + // let hal = Hal::new(); + let eyes = HappyEyes::new(); + eyes.draw(&mut led_surface).ok(); led_surface.sync().await; let mut render = |f_keys: [bool; 4]| { @@ -191,3 +191,9 @@ async fn dfu_button(mut btn_y: Input<'static>) { btn_y.wait_for_falling_edge().await; reset_to_usb_boot(0, 0); } + +#[panic_handler] +fn panic(_info: &PanicInfo) -> ! { + reset_to_usb_boot(0, 0); + loop {} +}