DFU button for development mode

This commit is contained in:
Adam Gausmann 2025-10-29 20:48:05 -05:00
parent 5f36125e92
commit 4099896e36

View file

@ -2,10 +2,11 @@
#![no_main] #![no_main]
use embassy_executor::Spawner; 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::gpio::{Input, Level, Output, Pull};
use embassy_rp::pwm::{self, Pwm}; 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 embedded_hal_bus::spi::ExclusiveDevice;
use heapless::String; use heapless::String;
use mipidsi::interface::SpiInterface; use mipidsi::interface::SpiInterface;
@ -27,7 +28,7 @@ use {defmt_rtt as _, panic_probe as _};
const DISPLAY_FREQ: u32 = 64_000_000; const DISPLAY_FREQ: u32 = 64_000_000;
#[embassy_executor::main] #[embassy_executor::main]
async fn main(_spawner: Spawner) -> ! { async fn main(spawner: Spawner) -> ! {
let p = embassy_rp::init(Default::default()); let p = embassy_rp::init(Default::default());
// display SPI // display SPI
@ -90,7 +91,7 @@ async fn main(_spawner: Spawner) -> ! {
let _btn_a = Input::new(p.PIN_12, Pull::Up); let _btn_a = Input::new(p.PIN_12, Pull::Up);
let _btn_b = Input::new(p.PIN_13, Pull::Up); let _btn_b = Input::new(p.PIN_13, Pull::Up);
// let _btn_x = Input::new(p.PIN_14, 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_f1 = Input::new(p.PIN_11, Pull::Up);
let mut btn_f2 = Input::new(p.PIN_14, 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; let mut last_state = None;
spawner.spawn(dfu_button(btn_y)).ok();
loop { loop {
let state = [ let state = [
btn_f1.is_low(), btn_f1.is_low(),
@ -135,3 +138,9 @@ async fn main(_spawner: Spawner) -> ! {
.await; .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);
}