clean up imports and reorganize the ssd bits into a graphics mod

This commit is contained in:
2025-10-26 11:14:28 +01:00
parent 27e92edef0
commit 4776227793
17 changed files with 396 additions and 375 deletions

View File

@@ -8,6 +8,7 @@
use core::ptr::addr_of_mut;
use alloc::sync::Arc;
use embassy_executor::Spawner;
use embassy_time::{Instant, Timer};
@@ -19,7 +20,7 @@ use esp_hal::{
use esp_hal_embassy::{Executor, InterruptExecutor};
use log::*;
use renderbug_embassy::{logging::RenderbugLogger, tasks::{safetyui::{safety_ui_main, SafetyUi}, ui::UiSurfacePool}};
use renderbug_embassy::{logging::RenderbugLogger, tasks::{oled::{oled_ui, OledUI, OledUiSurfacePool}, safetyui::{safety_ui_main, SafetyUi}, ui::UiSurfacePool}};
use renderbug_embassy::events::BusGarage;
use static_cell::StaticCell;
use esp_backtrace as _;
@@ -29,6 +30,8 @@ use renderbug_embassy::tasks::{
ui::{Ui, ui_main}
};
use figments_render::output::OutputAsync;
extern crate alloc;
// This creates a default app-descriptor required by the esp-idf bootloader.
@@ -68,6 +71,11 @@ async fn main(spawner: Spawner) {
info!("Setting up rendering pipeline");
let mut surfaces = UiSurfacePool::default();
let ui = Ui::new(&mut surfaces);
let mut oled_surfaces = OledUiSurfacePool::default();
let oled_uniforms = Default::default();
let oledui = OledUI::new(&mut oled_surfaces, garage.oled_display.clone(), Arc::clone(&oled_uniforms));
let mut safety_surfaces = UiSurfacePool::default();
let safety_ui = SafetyUi::new(&mut safety_surfaces, garage.display.clone());
@@ -102,14 +110,15 @@ async fn main(spawner: Spawner) {
#[cfg(feature="oled")]
{
use esp_hal::i2c::master::{Config, I2c};
use renderbug_embassy::graphics::ssd1306::SsdOutput;
let rst = Output::new(peripherals.GPIO21, esp_hal::gpio::Level::Low, OutputConfig::default());
let i2c = I2c::new(
peripherals.I2C0,
Config::default().with_frequency(Rate::from_khz(400))
).unwrap().with_scl(peripherals.GPIO18).with_sda(peripherals.GPIO17).into_async();
spawner.must_spawn(renderbug_embassy::tasks::oled::oled_task(i2c, rst, garage.telemetry.dyn_subscriber().unwrap()));
let output = SsdOutput::new(i2c, rst, garage.oled_display.clone()).await;
spawner.must_spawn(renderbug_embassy::tasks::oled_render::oled_render(output, oled_surfaces, oled_uniforms));
}
#[cfg(feature="simulation")]
@@ -136,6 +145,8 @@ async fn main(spawner: Spawner) {
spawner.must_spawn(safety_ui_main(garage.notify.dyn_subscriber().unwrap(), safety_ui));
info!("Launching UI");
spawner.must_spawn(ui_main(garage.notify.dyn_subscriber().unwrap(), garage.telemetry.dyn_publisher().unwrap(), ui));
info!("Launching OLED UI");
spawner.must_spawn(oled_ui(garage.telemetry.dyn_subscriber().unwrap(), oledui));
#[cfg(feature="demo")]
{
warn!("Launching with demo sequencer");