From 0884c704b0076703d676b87f58fce9c93be1a038 Mon Sep 17 00:00:00 2001 From: Victoria Fischer Date: Sun, 1 Dec 2024 21:21:50 +0100 Subject: [PATCH] platform: remove Peripherals param from board trait --- src/main.rs | 16 ++-------------- src/platform/esp32.rs | 9 ++++++++- src/platform/mod.rs | 4 ++-- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7bbc715..56fa171 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,26 +9,14 @@ mod animations; mod mappings; mod buffers; -use esp_idf_svc::hal::prelude::Peripherals; - -use crate::platform::Board; +use crate::platform::{DefaultBoard, Board}; use crate::task::{Task, Scheduler}; use crate::render::{Surfaces, Renderer}; use crate::geometry::Rectangle; -use crate::platform::esp32::Esp32Board as BoardType; - fn main() { - // It is necessary to call this function once. Otherwise some patches to the runtime - // implemented by esp-idf-sys might not link properly. See https://github.com/esp-rs/esp-idf-template/issues/71 - esp_idf_svc::sys::link_patches(); + let mut board: DefaultBoard = Board::take(); - // Bind the log crate to the ESP Logging facilities - esp_idf_svc::log::EspLogger::initialize_default(); - - let peripherals = Peripherals::take().unwrap(); - let mut board: BoardType = Board::new(peripherals); - log::info!("Board: {}", core::any::type_name_of_val(&board)); let output = board.output(); diff --git a/src/platform/esp32.rs b/src/platform/esp32.rs index c1cb13a..2c63d50 100644 --- a/src/platform/esp32.rs +++ b/src/platform/esp32.rs @@ -41,8 +41,15 @@ impl<'a> Board for Esp32Board<'a> { type Output = StrideOutput<[Rgb; 310], FastWs2812Esp32Rmt<'a>>; type Surfaces = SurfacePool; - fn new(peripherals: Peripherals) -> Self { + fn take() -> Self { + // It is necessary to call this function once. Otherwise some patches to the runtime + // implemented by esp-idf-sys might not link properly. See https://github.com/esp-rs/esp-idf-template/issues/71 + esp_idf_svc::sys::link_patches(); + // Bind the log crate to the ESP Logging facilities + esp_idf_svc::log::EspLogger::initialize_default(); + + let peripherals = Peripherals::take().unwrap(); let sys_loop = EspSystemEventLoop::take().unwrap(); let nvs = EspDefaultNvsPartition::take().unwrap(); diff --git a/src/platform/mod.rs b/src/platform/mod.rs index 3f2a766..bf99ca8 100644 --- a/src/platform/mod.rs +++ b/src/platform/mod.rs @@ -6,7 +6,7 @@ pub mod smart_leds_lib; pub mod esp32; -use esp_idf_svc::hal::prelude::Peripherals; +pub type DefaultBoard = esp32::Esp32Board; use crate::render::{Output, Surfaces}; use crate::task::Task; @@ -15,7 +15,7 @@ pub trait Board { type Output: Output; type Surfaces: Surfaces; - fn new(peripherals: Peripherals) -> Self; + fn take() -> Self; fn output(&mut self) -> Self::Output; fn surfaces(&mut self) -> Self::Surfaces; fn system_tasks(&mut self) -> Vec>;