diff --git a/src/main.rs b/src/main.rs index 4e5fa05..90d4e9c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ use rp_pico::entry; use embedded_hal::digital::OutputPin; +use embedded_hal::digital::StatefulOutputPin; use rp_pico::hal::pac; @@ -91,6 +92,8 @@ fn main() -> ! { .ok() .unwrap(); + let timer = hal::timer::Timer::new(pac.TIMER, &mut pac.RESETS, &clocks); + let sio = hal::Sio::new(pac.SIO); let pins = rp_pico::Pins::new( pac.IO_BANK0, @@ -122,8 +125,26 @@ fn main() -> ! { .self_powered(false) .build(); + let mut start_time: u64 = 0; loop { - led_pin.set_high().unwrap(); + let interval = match (usb_device.state(), led_pin.is_set_high().unwrap()) { + // The USB device has just been created or reset. + (UsbDeviceState::Default, true) => 100_000, + (UsbDeviceState::Default, false) => 100_000, + // The USB device has received an address from the host. + (UsbDeviceState::Addressed, true) => 250_000, + (UsbDeviceState::Addressed, false) => 250_000, + // The USB device has been configured and is fully functional. + (UsbDeviceState::Configured, true) => 1_000_000, + (UsbDeviceState::Configured, false) => 0, + // The USB device has been suspended by the host or it has been unplugged from the USB bus. + (UsbDeviceState::Suspend, true) => 25_000, + (UsbDeviceState::Suspend, false) => 2_000_000, + }; + if timer.get_counter().ticks() - start_time > interval { + led_pin.toggle().unwrap(); + start_time = timer.get_counter().ticks(); + } if !usb_device.poll(&mut [&mut scsi]) { continue; @@ -134,7 +155,6 @@ fn main() -> ! { } let _ = scsi.poll(|command| { - led_pin.set_low().unwrap(); if let Err(err) = process_command(command, &mut state, &mut storage) { //defmt::error!("{}", err); }