diff --git a/firmware/src/main.rs b/firmware/src/main.rs index 0cabe29..2000a1e 100644 --- a/firmware/src/main.rs +++ b/firmware/src/main.rs @@ -2,10 +2,11 @@ #![no_main] use embassy_executor::Spawner; -use embassy_futures::select::{select_array, select4}; +use embassy_futures::select::select_array; use embassy_rp::gpio::{Input, Level, Output, Pull}; use embassy_rp::pwm::{self, Pwm}; -use embassy_time::{Delay, Timer}; +use embassy_rp::rom_data::reset_to_usb_boot; +use embassy_time::Delay; use embedded_hal_bus::spi::ExclusiveDevice; use heapless::String; use mipidsi::interface::SpiInterface; @@ -27,7 +28,7 @@ use {defmt_rtt as _, panic_probe as _}; const DISPLAY_FREQ: u32 = 64_000_000; #[embassy_executor::main] -async fn main(_spawner: Spawner) -> ! { +async fn main(spawner: Spawner) -> ! { let p = embassy_rp::init(Default::default()); // display SPI @@ -90,7 +91,7 @@ async fn main(_spawner: Spawner) -> ! { let _btn_a = Input::new(p.PIN_12, Pull::Up); let _btn_b = Input::new(p.PIN_13, Pull::Up); // let _btn_x = Input::new(p.PIN_14, Pull::Up); - let _btn_y = Input::new(p.PIN_15, Pull::Up); + let btn_y = Input::new(p.PIN_15, Pull::Up); let mut btn_f1 = Input::new(p.PIN_11, Pull::Up); let mut btn_f2 = Input::new(p.PIN_14, Pull::Up); @@ -114,6 +115,8 @@ async fn main(_spawner: Spawner) -> ! { let mut last_state = None; + spawner.spawn(dfu_button(btn_y)).ok(); + loop { let state = [ btn_f1.is_low(), @@ -135,3 +138,9 @@ async fn main(_spawner: Spawner) -> ! { .await; } } + +#[embassy_executor::task] +async fn dfu_button(mut btn_y: Input<'static>) { + btn_y.wait_for_falling_edge().await; + reset_to_usb_boot(0, 0); +}