diff --git a/src/heartbeat.rs b/src/heartbeat.rs new file mode 100644 index 0000000..a80c007 --- /dev/null +++ b/src/heartbeat.rs @@ -0,0 +1,11 @@ +use defmt::*; +use embassy_rp::gpio::Output; +use embassy_time::{Duration, Timer}; + +pub async fn heartbeat(mut led: Output<'_>) { + loop { + info!("Alive!"); + led.toggle(); + Timer::after(Duration::from_millis(1000)).await; + } +} diff --git a/src/main.rs b/src/main.rs index 14bac41..0fb17af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,8 @@ #![no_std] #![no_main] +mod heartbeat; + use core::sync::atomic::{AtomicBool, AtomicU8, Ordering}; use defmt::*; @@ -10,7 +12,6 @@ use embassy_rp::bind_interrupts; use embassy_rp::gpio::{Input, Level, Output, Pull}; use embassy_rp::peripherals::USB; use embassy_rp::usb::{Driver, InterruptHandler}; -use embassy_time::{Duration, Timer}; use embassy_usb::class::hid::{ HidBootProtocol, HidProtocolMode, HidReaderWriter, HidSubclass, ReportId, RequestHandler, State, }; @@ -33,9 +34,9 @@ async fn main(_spawner: Spawner) { // Create embassy-usb Config let mut config = Config::new(0xc0de, 0xcafe); - config.manufacturer = Some("Embassy"); - config.product = Some("HID keyboard example"); - config.serial_number = Some("12345678"); + config.manufacturer = Some("Nicholas Mello"); + config.product = Some("Pi Pico Arcade Keyboard"); + config.serial_number = Some("00000001"); config.max_power = 100; config.max_packet_size_0 = 64; config.composite_with_iads = false; @@ -77,12 +78,6 @@ async fn main(_spawner: Spawner) { }; let hid = HidReaderWriter::<_, 1, 8>::new(&mut builder, &mut state, config); - // Build the builder. - let mut usb = builder.build(); - - // Run the USB device. - let usb_fut = usb.run(); - // Set up the signal pin that will be used to trigger the keyboard. let mut signal_pin = Input::new(p.PIN_16, Pull::None); @@ -94,7 +89,6 @@ async fn main(_spawner: Spawner) { // Do stuff with the class! let in_fut = async { loop { - info!("Waiting for HIGH on pin 16"); signal_pin.wait_for_high().await; info!("HIGH DETECTED"); @@ -144,23 +138,14 @@ async fn main(_spawner: Spawner) { reader.run(false, &mut request_handler).await; }; - let heartbeat = async { - let mut led = Output::new(p.PIN_25, Level::Low); + let mut usb = builder.build(); + let led = Output::new(p.PIN_25, Level::Low); - loop { - info!("led on!"); - led.set_high(); - Timer::after(Duration::from_millis(1000)).await; - - info!("led off!"); - led.set_low(); - Timer::after(Duration::from_millis(1000)).await; - } - }; - - // Run everything concurrently. - // If we had made everything `'static` above instead, we could do this using separate tasks instead. - join(join(usb_fut, heartbeat), join(in_fut, out_fut)).await; + join( + join(usb.run(), heartbeat::heartbeat(led)), + join(in_fut, out_fut), + ) + .await; } struct MyRequestHandler {}