diff --git a/embassy/demos/picow/Cargo.lock b/embassy/demos/picow/Cargo.lock index 222f779fd08d68f6842204b3461995d470786a0f..6b497bd21937a10a91ca4e5abe734c6af2657de8 100644 --- a/embassy/demos/picow/Cargo.lock +++ b/embassy/demos/picow/Cargo.lock @@ -687,6 +687,20 @@ dependencies = [ "heapless", ] +[[package]] +name = "embassy-usb" +version = "0.1.0" +source = "git+https://github.com/embassy-rs/embassy?rev=3e730aa8b06401003202bf9e21a9c83ec6b21b0e#3e730aa8b06401003202bf9e21a9c83ec6b21b0e" +dependencies = [ + "embassy-futures", + "embassy-net-driver-channel", + "embassy-sync 0.2.0 (git+https://github.com/embassy-rs/embassy?rev=3e730aa8b06401003202bf9e21a9c83ec6b21b0e)", + "embassy-usb-driver", + "heapless", + "ssmarshal", + "usbd-hid", +] + [[package]] name = "embassy-usb-driver" version = "0.1.0" @@ -792,6 +806,12 @@ dependencies = [ "log", ] +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "errno" version = "0.3.1" @@ -1167,17 +1187,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" -[[package]] -name = "no-panic" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "826c989b63ca62c4f2737e4c9e836a2124927d8aa13f9566b197ef0d191d8ac7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "no-std-net" version = "0.5.0" @@ -1566,6 +1575,12 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "serde" +version = "1.0.163" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" + [[package]] name = "sha2" version = "0.10.6" @@ -1646,6 +1661,16 @@ dependencies = [ "lock_api", ] +[[package]] +name = "ssmarshal" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3e6ad23b128192ed337dfa4f1b8099ced0c2bf30d61e551b65fda5916dbb850" +dependencies = [ + "encode_unicode", + "serde", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -1702,7 +1727,6 @@ dependencies = [ "heapless", "hmac", "log", - "no-panic", "poly1305", "pretty-hex", "rand_core", @@ -1752,6 +1776,7 @@ dependencies = [ "embassy-rp", "embassy-sync 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "embassy-time 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "embassy-usb", "embedded-hal 1.0.0-alpha.10", "embedded-hal-async", "embedded-io 0.4.0", @@ -1895,6 +1920,47 @@ dependencies = [ "subtle", ] +[[package]] +name = "usb-device" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f6cc3adc849b5292b4075fc0d5fdcf2f24866e88e336dd27a8943090a520508" + +[[package]] +name = "usbd-hid" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "975bd411f4a939986751ea09992a24fa47c4d25c6ed108d04b4c2999a4fd0132" +dependencies = [ + "serde", + "ssmarshal", + "usb-device", + "usbd-hid-macros", +] + +[[package]] +name = "usbd-hid-descriptors" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbee8c6735e90894fba04770bc41e11fd3c5256018856e15dc4dd1e6c8a3dd1" +dependencies = [ + "bitfield", +] + +[[package]] +name = "usbd-hid-macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261079a9ada015fa1acac7cc73c98559f3a92585e15f508034beccf6a2ab75a2" +dependencies = [ + "byteorder", + "proc-macro2", + "quote", + "serde", + "syn", + "usbd-hid-descriptors", +] + [[package]] name = "vcell" version = "0.1.3" diff --git a/embassy/demos/picow/Cargo.toml b/embassy/demos/picow/Cargo.toml index 0fa6a1216a6e764fdcec47f18737de234cedce75..d42d89fda87c31af4132ed6a5557bff56c4510ad 100644 --- a/embassy/demos/picow/Cargo.toml +++ b/embassy/demos/picow/Cargo.toml @@ -23,6 +23,7 @@ embassy-net = { version = "0.1.0", features = ["tcp", "dhcpv4", "medium-ethernet embassy-net-driver = { version = "0.1.0" } embassy-sync = { version = "0.2.0" } embassy-futures = { version = "0.1.0" } +embassy-usb = { version = "0.1.0" } atomic-polyfill = "0.1.5" static_cell = "1.0" @@ -63,6 +64,7 @@ embassy-executor = { git = "https://github.com/embassy-rs/embassy", rev = "3e730 embassy-futures = { git = "https://github.com/embassy-rs/embassy", rev = "3e730aa8b06401003202bf9e21a9c83ec6b21b0e" } embassy-rp = { git = "https://github.com/embassy-rs/embassy", rev = "3e730aa8b06401003202bf9e21a9c83ec6b21b0e" } embassy-net = { git = "https://github.com/embassy-rs/embassy", rev = "3e730aa8b06401003202bf9e21a9c83ec6b21b0e" } +embassy-usb = { git = "https://github.com/embassy-rs/embassy", rev = "3e730aa8b06401003202bf9e21a9c83ec6b21b0e" } # for cyw43 embassy-net-driver-channel = { git = "https://github.com/embassy-rs/embassy", rev = "3e730aa8b06401003202bf9e21a9c83ec6b21b0e" } embassy-net-driver = { git = "https://github.com/embassy-rs/embassy", rev = "3e730aa8b06401003202bf9e21a9c83ec6b21b0e" } diff --git a/embassy/demos/picow/src/main.rs b/embassy/demos/picow/src/main.rs index 82919ab82c403c4a2e63adce69156baa16af81ea..9413ae3510db58640dfed04a779b998c0d6e40ed 100644 --- a/embassy/demos/picow/src/main.rs +++ b/embassy/demos/picow/src/main.rs @@ -4,7 +4,6 @@ #![feature(async_fn_in_trait)] // #![allow(incomplete_features)] -use defmt::*; use embassy_executor::Spawner; use embassy_net::Stack; use embassy_rp::pio::PioPeripheral; @@ -18,6 +17,7 @@ use embassy_sync::signal::Signal; use embassy_sync::blocking_mutex::raw::NoopRawMutex; use sunset::*; +use sunset::prelude::*; use sunset_embassy::SSHServer; pub(crate) use sunset_demo_embassy_common as demo_common; @@ -25,6 +25,8 @@ use crate::demo_common::singleton; mod flashconfig; mod wifi; +mod usbserial; +mod switchpipe; use demo_common::{SSHConfig, demo_menu, Shell}; @@ -32,11 +34,6 @@ const NUM_LISTENERS: usize = 4; // +1 for dhcp. referenced directly by wifi_stack() function pub(crate) const NUM_SOCKETS: usize = NUM_LISTENERS+1; -#[embassy_executor::task] -async fn net_task(stack: &'static Stack<cyw43::NetDriver<'static>>) -> ! { - stack.run().await -} - #[embassy_executor::main] async fn main(spawner: Spawner) { info!("Hello World!"); @@ -62,7 +59,11 @@ async fn main(spawner: Spawner) { let stack = wifi::wifi_stack(&spawner, p.PIN_23, p.PIN_24, p.PIN_25, p.PIN_29, p.DMA_CH0, sm, wifi_net, wifi_pw).await; let stack = &*singleton!(stack); - unwrap!(spawner.spawn(net_task(&stack))); + spawner.spawn(net_task(&stack)).unwrap(); + + let usb_pipe = switchpipe::SwitchPipe::new(); + let usb_pipe = usb_pipe.base(); + let r = usb_pipe.switch_read(); for _ in 0..NUM_LISTENERS { spawner.spawn(listener(&stack, &ssh_config)).unwrap(); @@ -123,3 +124,20 @@ impl Shell for DemoShell { session.await } } + +#[embassy_executor::task] +async fn net_task(stack: &'static Stack<cyw43::NetDriver<'static>>) -> ! { + stack.run().await +} + +#[embassy_executor::task] +async fn usb_serial_task(usb: embassy_rp::peripherals::USB, + irq: embassy_rp::interrupt::USBCTRL_IRQ, + ) -> ! { + + // let mut p = embassy_sync::pipe::Pipe(64); + + // usbserial.usb_serial(usb, irq, tx, rx).await; + todo!("shoudln't exit"); +} +