diff --git a/api/cpp/Cargo.toml b/api/cpp/Cargo.toml index bea694286e4..5ccd5aa808d 100644 --- a/api/cpp/Cargo.toml +++ b/api/cpp/Cargo.toml @@ -61,7 +61,7 @@ raw-window-handle = { version = "0.6", optional = true } image = { workspace = true, optional = true, features = ["default"] } esp-backtrace = { version = "0.14.0", features = ["panic-handler", "println"], optional = true } -esp-println = { version = "0.11.0", default-features = false, features = ["uart"], optional = true } +esp-println = { version = "0.12.0", default-features = false, features = ["uart"], optional = true } [build-dependencies] anyhow = "1.0" diff --git a/examples/mcu-board-support/Cargo.toml b/examples/mcu-board-support/Cargo.toml index 3bb871c2b28..128da6f35f2 100644 --- a/examples/mcu-board-support/Cargo.toml +++ b/examples/mcu-board-support/Cargo.toml @@ -21,20 +21,20 @@ path = "lib.rs" pico-st7789 = ["slint/unsafe-single-threaded", "rp-pico", "embedded-hal", "embedded-hal-nb", "cortex-m-rt", "embedded-alloc", "fugit", "cortex-m", "display-interface", "display-interface-spi", "mipidsi", "defmt", "defmt-rtt", "slint/libm", "embedded-dma", "embedded-graphics", "euclid/libm"] stm32h735g = ["slint/unsafe-single-threaded", "cortex-m/critical-section-single-core", "cortex-m-rt","embedded-alloc", "embedded-time", "stm32h7xx-hal/stm32h735", "defmt", "defmt-rtt", "embedded-display-controller", "ft5336", "panic-probe", "slint/libm", "getrandom"] esp32-s2-kaluga-1 = ["slint/unsafe-single-threaded", "esp-hal/esp32s2", "embedded-hal", "embedded-hal-bus", "esp-alloc", "esp-println/esp32s2", "display-interface", "display-interface-spi", "mipidsi", "embedded-graphics-core", "slint/libm"] -esp32-s3-box = ["slint/unsafe-single-threaded", "esp-hal/esp32s3", "esp-hal/embedded-hal-02", "embedded-hal", "embedded-hal-bus", "esp-alloc", "esp-println/esp32s3", "esp-backtrace/esp32s3", "display-interface", "display-interface-spi", "mipidsi", "embedded-graphics-core", "slint/libm", "tt21100"] +esp32-s3-box = ["slint/unsafe-single-threaded", "esp-hal/esp32s3", "embedded-hal", "embedded-hal-bus", "esp-alloc", "esp-println/esp32s3", "esp-backtrace/esp32s3", "display-interface", "display-interface-spi", "mipidsi", "embedded-graphics-core", "slint/libm", "tt21100"] [dependencies] slint = { version = "=1.9.0", path = "../../api/rs/slint", default-features = false, features = ["compat-1-2", "renderer-software"] } i-slint-core-macros = { version = "=1.9.0", path = "../../internal/core-macros" } -derive_more = "0.99.5" +derive_more = { workspace = true } embedded-graphics = { version = "0.8", optional = true } once_cell = { version = "1.9", default-features = false, features = ["alloc"] } pin-weak = { version = "1", default-features = false } rgb = "0.8.27" cfg-if = "1" -embedded-alloc = { version = "0.5", optional = true } +embedded-alloc = { version = "0.6", optional = true } cortex-m-rt = { version = "0.7", optional = true } cortex-m = { version = "0.7.2", optional = true } display-interface = { version = "0.5.0", optional = true } @@ -52,10 +52,10 @@ embedded-time = { version = "0.12.0", optional = true } embedded-display-controller = { version = "0.2.0", optional = true } ft5336 = { version = "0.2", optional = true } -esp-hal = { version = "0.19", optional = true } +esp-hal = { version = "0.21", optional = true } display-interface-spi = { version = "0.5", optional = true } -esp-alloc = { version = "0.4", optional = true } -esp-println = { version = "0.11.0", optional = true } +esp-alloc = { version = "0.5", optional = true } +esp-println = { version = "0.12.0", optional = true } esp-backtrace = { version = "0.14.0", optional = true, features = ["panic-handler", "println"] } tt21100 = { version = "0.1", optional = true } diff --git a/examples/mcu-board-support/esp32_s2_kaluga_1.rs b/examples/mcu-board-support/esp32_s2_kaluga_1.rs index 7713f7c1d37..98d185cef9a 100644 --- a/examples/mcu-board-support/esp32_s2_kaluga_1.rs +++ b/examples/mcu-board-support/esp32_s2_kaluga_1.rs @@ -3,18 +3,15 @@ use alloc::boxed::Box; use alloc::rc::Rc; -use core::{cell::RefCell, convert::Infallible}; +use core::{cell::RefCell, convert::Infallible, mem::MaybeUninit}; use display_interface_spi::SPIInterface; use embedded_hal::digital::OutputPin; -use esp_alloc::EspHeap; +use esp_alloc as _; pub use esp_hal::entry; use esp_hal::gpio::{Io, Level, Output}; use esp_hal::spi::{master::Spi, SpiMode}; -use esp_hal::system::SystemControl; use esp_hal::timer::{systimer::SystemTimer, timg::TimerGroup}; -use esp_hal::{ - clock::ClockControl, delay::Delay, peripherals::Peripherals, prelude::*, rtc_cntl::Rtc, -}; +use esp_hal::{delay::Delay, prelude::*, rtc_cntl::Rtc}; use esp_println::println; type Display = mipidsi::Display; @@ -28,13 +25,16 @@ fn panic(info: &core::panic::PanicInfo) -> ! { } } -#[global_allocator] -static ALLOCATOR: EspHeap = EspHeap::empty(); - pub fn init() { const HEAP_SIZE: usize = 160 * 1024; - static mut HEAP: [u8; HEAP_SIZE] = [0; HEAP_SIZE]; - unsafe { ALLOCATOR.init(core::ptr::addr_of_mut!(HEAP) as *mut u8, HEAP_SIZE) } + static mut HEAP: MaybeUninit<[u8; HEAP_SIZE]> = MaybeUninit::uninit(); + unsafe { + esp_alloc::HEAP.add_region(esp_alloc::HeapRegion::new( + HEAP.as_mut_ptr() as *mut u8, + HEAP_SIZE, + esp_alloc::MemoryCapability::Internal.into(), + )); + } slint::platform::set_platform(Box::new(EspBackend::default())) .expect("backend already initialized"); } @@ -57,24 +57,22 @@ impl slint::platform::Platform for EspBackend { fn duration_since_start(&self) -> core::time::Duration { core::time::Duration::from_millis( - SystemTimer::now() / (SystemTimer::TICKS_PER_SECOND / 1000), + SystemTimer::now() / (SystemTimer::ticks_per_second() / 1000), ) } fn run_event_loop(&self) -> Result<(), slint::PlatformError> { - let peripherals = Peripherals::take(); - let system = SystemControl::new(peripherals.SYSTEM); - let mut clocks = ClockControl::max(system.clock_control).freeze(); + let peripherals = esp_hal::init(esp_hal::Config::default()); // Disable the RTC and TIMG watchdog timers - let mut rtc = Rtc::new(peripherals.LPWR, None); + let mut rtc = Rtc::new(peripherals.LPWR); rtc.rwdt.disable(); - let mut timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks, None); + let mut timer_group0 = TimerGroup::new(peripherals.TIMG0); timer_group0.wdt.disable(); - let mut timer_group1 = TimerGroup::new(peripherals.TIMG1, &clocks, None); + let mut timer_group1 = TimerGroup::new(peripherals.TIMG1); timer_group1.wdt.disable(); - let mut delay = Delay::new(&clocks); + let mut delay = Delay::new(); let io = Io::new(peripherals.GPIO, peripherals.IO_MUX); let mut backlight = Output::new(io.pins.gpio6, Level::High); @@ -87,11 +85,11 @@ impl slint::platform::Platform for EspBackend { let sck = io.pins.gpio15; let miso = io.pins.gpio8; - let spi = Spi::new(peripherals.SPI3, 80u32.MHz(), SpiMode::Mode0, &mut clocks).with_pins( - Some(sck), - Some(mosi), - Some(miso), - esp_hal::gpio::NO_PIN, + let spi = Spi::new(peripherals.SPI3, 80u32.MHz(), SpiMode::Mode0).with_pins( + sck, + mosi, + miso, + esp_hal::gpio::NoPin, ); let spi = embedded_hal_bus::spi::ExclusiveDevice::new_no_delay(spi, cs).unwrap(); let di = SPIInterface::new(spi, Output::new(dc, Level::Low)); diff --git a/examples/mcu-board-support/esp32_s3_box.rs b/examples/mcu-board-support/esp32_s3_box.rs index b34206fb1a7..5a4d97a1a01 100644 --- a/examples/mcu-board-support/esp32_s3_box.rs +++ b/examples/mcu-board-support/esp32_s3_box.rs @@ -4,30 +4,32 @@ use alloc::boxed::Box; use alloc::rc::Rc; use core::cell::RefCell; +use core::mem::MaybeUninit; use display_interface_spi::SPIInterface; use embedded_graphics_core::geometry::OriginDimensions; use embedded_hal::digital::OutputPin; -use esp_alloc::EspHeap; +use esp_alloc as _; use esp_backtrace as _; -use esp_hal::clock::ClockControl; use esp_hal::delay::Delay; pub use esp_hal::entry; use esp_hal::gpio::{Input, Io, Level, Output, Pull}; use esp_hal::rtc_cntl::Rtc; use esp_hal::spi::{master::Spi, SpiMode}; -use esp_hal::system::SystemControl; use esp_hal::timer::{systimer::SystemTimer, timg::TimerGroup}; -use esp_hal::{i2c::I2C, peripherals::Peripherals, prelude::*}; +use esp_hal::{i2c::I2c, prelude::*}; use mipidsi::{options::Orientation, Display}; use slint::platform::WindowEvent; -#[global_allocator] -static ALLOCATOR: EspHeap = EspHeap::empty(); - pub fn init() { const HEAP_SIZE: usize = 250 * 1024; - static mut HEAP: [u8; HEAP_SIZE] = [0; HEAP_SIZE]; - unsafe { ALLOCATOR.init(core::ptr::addr_of_mut!(HEAP) as *mut u8, HEAP_SIZE) } + static mut HEAP: MaybeUninit<[u8; HEAP_SIZE]> = MaybeUninit::uninit(); + unsafe { + esp_alloc::HEAP.add_region(esp_alloc::HeapRegion::new( + HEAP.as_mut_ptr() as *mut u8, + HEAP_SIZE, + esp_alloc::MemoryCapability::Internal.into(), + )); + } slint::platform::set_platform(Box::new(EspBackend::default())) .expect("backend already initialized"); } @@ -50,27 +52,24 @@ impl slint::platform::Platform for EspBackend { fn duration_since_start(&self) -> core::time::Duration { core::time::Duration::from_millis( - SystemTimer::now() / (SystemTimer::TICKS_PER_SECOND / 1000), + SystemTimer::now() / (SystemTimer::ticks_per_second() / 1000), ) } fn run_event_loop(&self) -> Result<(), slint::PlatformError> { - let peripherals = Peripherals::take(); - let system = SystemControl::new(peripherals.SYSTEM); - let clocks = ClockControl::max(system.clock_control).freeze(); + let peripherals = esp_hal::init(esp_hal::Config::default()); - let mut rtc = Rtc::new(peripherals.LPWR, None); + let mut rtc = Rtc::new(peripherals.LPWR); rtc.rwdt.disable(); - let mut timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks, None); + let mut timer_group0 = TimerGroup::new(peripherals.TIMG0); timer_group0.wdt.disable(); - let mut timer_group1 = TimerGroup::new(peripherals.TIMG1, &clocks, None); + let mut timer_group1 = TimerGroup::new(peripherals.TIMG1); timer_group1.wdt.disable(); - let mut delay = Delay::new(&clocks); + let mut delay = Delay::new(); let io = Io::new(peripherals.GPIO, peripherals.IO_MUX); - let i2c = - I2C::new(peripherals.I2C0, io.pins.gpio8, io.pins.gpio18, 400u32.kHz(), &clocks, None); + let i2c = I2c::new(peripherals.I2C0, io.pins.gpio8, io.pins.gpio18, 400u32.kHz()); let mut touch = tt21100::TT21100::new(i2c, Input::new(io.pins.gpio3, Pull::Up)) .expect("Initialize the touch device"); @@ -78,11 +77,11 @@ impl slint::platform::Platform for EspBackend { let sclk = io.pins.gpio7; let mosi = io.pins.gpio6; - let spi = Spi::new(peripherals.SPI2, 60u32.MHz(), SpiMode::Mode0, &clocks).with_pins( - Some(sclk), - Some(mosi), - esp_hal::gpio::NO_PIN, - esp_hal::gpio::NO_PIN, + let spi = Spi::new(peripherals.SPI2, 60u32.MHz(), SpiMode::Mode0).with_pins( + sclk, + mosi, + Level::Low, + esp_hal::gpio::NoPin, ); let dc = Output::new(io.pins.gpio4, Level::Low); diff --git a/examples/mcu-board-support/pico_st7789.rs b/examples/mcu-board-support/pico_st7789.rs index b4b633a601d..eda0f25841c 100644 --- a/examples/mcu-board-support/pico_st7789.rs +++ b/examples/mcu-board-support/pico_st7789.rs @@ -12,7 +12,7 @@ use cortex_m::interrupt::Mutex; use cortex_m::singleton; pub use cortex_m_rt::entry; use defmt_rtt as _; -use embedded_alloc::Heap; +use embedded_alloc::LlffHeap as Heap; use embedded_hal::digital::{InputPin, OutputPin}; use embedded_hal::spi::{ErrorType, Operation, SpiBus, SpiDevice}; use fugit::{Hertz, RateExtU32}; diff --git a/examples/mcu-board-support/stm32h735g.rs b/examples/mcu-board-support/stm32h735g.rs index 1030a1fc0e9..ff78006b8bc 100644 --- a/examples/mcu-board-support/stm32h735g.rs +++ b/examples/mcu-board-support/stm32h735g.rs @@ -19,7 +19,7 @@ use stm32h7xx_hal as hal; // global logger #[cfg(feature = "panic-probe")] use panic_probe as _; -use embedded_alloc::Heap; +use embedded_alloc::LlffHeap as Heap; const HEAP_SIZE: usize = 200 * 1024; static mut HEAP: [u8; HEAP_SIZE] = [0; HEAP_SIZE]; @@ -205,7 +205,8 @@ impl Default for StmBackend { led_green.set_low(); */ - let (fb1, fb2) = (core::ptr::addr_of!(FB1), core::ptr::addr_of!(FB2)); + #[allow(unused_unsafe)] //(unsafe required for Rust <= 1.81) + let (fb1, fb2) = unsafe { (core::ptr::addr_of!(FB1), core::ptr::addr_of!(FB2)) }; assert!((hyperram_ptr as usize..hyperram_ptr as usize + hyperram_size) .contains(&(fb1 as usize))); assert!((hyperram_ptr as usize..hyperram_ptr as usize + hyperram_size)