This commit is contained in:
2026-09-07 23:57:58 -05:00
parent 8d8eabc56b
commit 550f9564b0
2 changed files with 40 additions and 34 deletions
+19 -22
View File
@@ -10,10 +10,9 @@ use embedded_graphics::pixelcolor::Rgb565;
use embedded_graphics::prelude::*;
use embedded_graphics::primitives::{PrimitiveStyle, Triangle};
use embassy_executor::Spawner;
use embassy_time::Timer;
use embassy_time::{Instant, Timer};
use esp_backtrace as _;
use esp_bootloader_esp_idf::esp_app_desc;
use esp_hal::gpio::Output;
use esp_hal::timer::timg::TimerGroup;
use esp_hal::{init, rmt::Rmt, time::Rate, Config};
use esp_println::println;
@@ -42,13 +41,14 @@ async fn led_task(mut led: led::RgbLed) {
#[embassy_executor::task]
async fn display_task(
mut spi: display::SpiDmaBus,
mut dc: Output<'static>,
mut cs: Output<'static>,
pins: display::LcdPins,
mut fb: framebuffer::Framebuffer,
timer: esp_hal::ledc::timer::Timer<'static, esp_hal::ledc::LowSpeed>,
bl_pin: esp_hal::peripherals::GPIO22<'static>,
) {
let mut parts = display::init_parts(pins);
println!("LCD {}x{} initialized", display::WIDTH, display::HEIGHT);
let mut backlight =
backlight::LcdBacklight::new(&timer, bl_pin).expect("Failed to init backlight");
backlight.set_level(0.5).unwrap();
@@ -62,6 +62,8 @@ async fn display_task(
let mut vx: i32 = 3;
let mut vy: i32 = 2;
let mut frame = 0u32;
let mut fps_window_start = Instant::now();
let mut fps_frames = 0u32;
loop {
let hue = (frame % 256) as u8;
@@ -95,7 +97,7 @@ async fn display_task(
.draw(&mut fb)
.unwrap();
display::send_framebuffer(&mut spi, &mut dc, &mut cs, fb.as_bytes())
display::send_framebuffer(&mut parts.spi, &mut parts.dc, &mut parts.cs, fb.as_bytes())
.await
.unwrap();
@@ -106,6 +108,15 @@ async fn display_task(
);
}
fps_frames += 1;
if fps_frames >= 60 {
let elapsed_ms = fps_window_start.elapsed().as_millis().max(1);
let fps = (fps_frames as u64 * 1000) / elapsed_ms;
println!("fps: {fps} ({fps_frames} frames in {elapsed_ms} ms)");
fps_frames = 0;
fps_window_start = Instant::now();
}
frame = frame.wrapping_add(1);
}
}
@@ -124,8 +135,8 @@ async fn main(spawner: Spawner) -> ! {
let (_ledc, timer) =
backlight::setup_timer(peripherals.LEDC).expect("Failed to init backlight timer");
let mut buffer = [0u8; 4096];
let lcd = display::init(
spawner.spawn(led_task(led).unwrap());
spawner.spawn(display_task(
display::LcdPins {
spi2: peripherals.SPI2,
sck: peripherals.GPIO7,
@@ -135,20 +146,6 @@ async fn main(spawner: Spawner) -> ! {
rst: peripherals.GPIO21,
dma_ch: peripherals.DMA_CH0,
},
&mut buffer,
);
let (interface, _model, _rst) = lcd.release();
let (device, dc) = interface.release();
let (spi, cs) = device.into_inner();
println!("LCD {}x{} initialized", display::WIDTH, display::HEIGHT);
spawner.spawn(led_task(led).unwrap());
spawner.spawn(display_task(
spi,
dc,
cs,
framebuffer::Framebuffer,
timer,
peripherals.GPIO22,