diff options
Diffstat (limited to 'examples/std/src/bin/tcp_accept.rs')
| -rw-r--r-- | examples/std/src/bin/tcp_accept.rs | 39 |
1 files changed, 10 insertions, 29 deletions
diff --git a/examples/std/src/bin/tcp_accept.rs b/examples/std/src/bin/tcp_accept.rs index e8b6eaa6c..77886f471 100644 --- a/examples/std/src/bin/tcp_accept.rs +++ b/examples/std/src/bin/tcp_accept.rs | |||
| @@ -1,15 +1,13 @@ | |||
| 1 | use core::fmt::Write as _; | ||
| 2 | |||
| 3 | use clap::Parser; | 1 | use clap::Parser; |
| 4 | use embassy_executor::{Executor, Spawner}; | 2 | use embassy_executor::{Executor, Spawner}; |
| 5 | use embassy_net::tcp::TcpSocket; | 3 | use embassy_net::tcp::TcpSocket; |
| 6 | use embassy_net::{Config, Ipv4Address, Ipv4Cidr, Stack, StackResources}; | 4 | use embassy_net::{Config, Ipv4Address, Ipv4Cidr, StackResources}; |
| 7 | use embassy_net_tuntap::TunTapDevice; | 5 | use embassy_net_tuntap::TunTapDevice; |
| 8 | use embassy_time::{Duration, Timer}; | 6 | use embassy_time::{Duration, Timer}; |
| 9 | use embedded_io_async::Write as _; | 7 | use embedded_io_async::Write as _; |
| 10 | use heapless::Vec; | 8 | use heapless::Vec; |
| 11 | use log::*; | 9 | use log::*; |
| 12 | use rand_core::{OsRng, RngCore}; | 10 | use rand_core::{OsRng, TryRngCore}; |
| 13 | use static_cell::StaticCell; | 11 | use static_cell::StaticCell; |
| 14 | 12 | ||
| 15 | #[derive(Parser)] | 13 | #[derive(Parser)] |
| @@ -24,18 +22,8 @@ struct Opts { | |||
| 24 | } | 22 | } |
| 25 | 23 | ||
| 26 | #[embassy_executor::task] | 24 | #[embassy_executor::task] |
| 27 | async fn net_task(stack: &'static Stack<TunTapDevice>) -> ! { | 25 | async fn net_task(mut runner: embassy_net::Runner<'static, TunTapDevice>) -> ! { |
| 28 | stack.run().await | 26 | runner.run().await |
| 29 | } | ||
| 30 | |||
| 31 | #[derive(Default)] | ||
| 32 | struct StrWrite(pub heapless::Vec<u8, 30>); | ||
| 33 | |||
| 34 | impl core::fmt::Write for StrWrite { | ||
| 35 | fn write_str(&mut self, s: &str) -> Result<(), core::fmt::Error> { | ||
| 36 | self.0.extend_from_slice(s.as_bytes()).unwrap(); | ||
| 37 | Ok(()) | ||
| 38 | } | ||
| 39 | } | 27 | } |
| 40 | 28 | ||
| 41 | #[embassy_executor::task] | 29 | #[embassy_executor::task] |
| @@ -58,21 +46,15 @@ async fn main_task(spawner: Spawner) { | |||
| 58 | 46 | ||
| 59 | // Generate random seed | 47 | // Generate random seed |
| 60 | let mut seed = [0; 8]; | 48 | let mut seed = [0; 8]; |
| 61 | OsRng.fill_bytes(&mut seed); | 49 | OsRng.try_fill_bytes(&mut seed).unwrap(); |
| 62 | let seed = u64::from_le_bytes(seed); | 50 | let seed = u64::from_le_bytes(seed); |
| 63 | 51 | ||
| 64 | // Init network stack | 52 | // Init network stack |
| 65 | static STACK: StaticCell<Stack<TunTapDevice>> = StaticCell::new(); | ||
| 66 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); | 53 | static RESOURCES: StaticCell<StackResources<3>> = StaticCell::new(); |
| 67 | let stack = &*STACK.init(Stack::new( | 54 | let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed); |
| 68 | device, | ||
| 69 | config, | ||
| 70 | RESOURCES.init(StackResources::<3>::new()), | ||
| 71 | seed, | ||
| 72 | )); | ||
| 73 | 55 | ||
| 74 | // Launch network task | 56 | // Launch network task |
| 75 | spawner.spawn(net_task(stack)).unwrap(); | 57 | spawner.spawn(net_task(runner).unwrap()); |
| 76 | 58 | ||
| 77 | // Then we can use it! | 59 | // Then we can use it! |
| 78 | let mut rx_buffer = [0; 4096]; | 60 | let mut rx_buffer = [0; 4096]; |
| @@ -91,9 +73,8 @@ async fn main_task(spawner: Spawner) { | |||
| 91 | 73 | ||
| 92 | // Write some quick output | 74 | // Write some quick output |
| 93 | for i in 1..=5 { | 75 | for i in 1..=5 { |
| 94 | let mut w = StrWrite::default(); | 76 | let s = format!("{}! ", i); |
| 95 | write!(w, "{}! ", i).unwrap(); | 77 | let r = socket.write_all(s.as_bytes()).await; |
| 96 | let r = socket.write_all(&w.0).await; | ||
| 97 | if let Err(e) = r { | 78 | if let Err(e) = r { |
| 98 | warn!("write error: {:?}", e); | 79 | warn!("write error: {:?}", e); |
| 99 | return; | 80 | return; |
| @@ -120,6 +101,6 @@ fn main() { | |||
| 120 | 101 | ||
| 121 | let executor = EXECUTOR.init(Executor::new()); | 102 | let executor = EXECUTOR.init(Executor::new()); |
| 122 | executor.run(|spawner| { | 103 | executor.run(|spawner| { |
| 123 | spawner.spawn(main_task(spawner)).unwrap(); | 104 | spawner.spawn(main_task(spawner).unwrap()); |
| 124 | }); | 105 | }); |
| 125 | } | 106 | } |
