aboutsummaryrefslogtreecommitdiff
path: root/examples/std/src/bin/tcp_accept.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/std/src/bin/tcp_accept.rs')
-rw-r--r--examples/std/src/bin/tcp_accept.rs32
1 files changed, 9 insertions, 23 deletions
diff --git a/examples/std/src/bin/tcp_accept.rs b/examples/std/src/bin/tcp_accept.rs
index 39b29a449..961c20e2d 100644
--- a/examples/std/src/bin/tcp_accept.rs
+++ b/examples/std/src/bin/tcp_accept.rs
@@ -1,15 +1,13 @@
1use core::fmt::Write as _;
2
3use clap::Parser; 1use clap::Parser;
4use embassy_executor::{Executor, Spawner}; 2use embassy_executor::{Executor, Spawner};
5use embassy_net::tcp::TcpSocket; 3use embassy_net::tcp::TcpSocket;
6use embassy_net::{Config, Ipv4Address, Ipv4Cidr, Stack, StackResources}; 4use embassy_net::{Config, Ipv4Address, Ipv4Cidr, StackResources};
7use embassy_net_tuntap::TunTapDevice; 5use embassy_net_tuntap::TunTapDevice;
8use embassy_time::{Duration, Timer}; 6use embassy_time::{Duration, Timer};
9use embedded_io_async::Write as _; 7use embedded_io_async::Write as _;
10use heapless::Vec; 8use heapless::Vec;
11use log::*; 9use log::*;
12use rand_core::{OsRng, RngCore}; 10use rand_core::{OsRng, TryRngCore};
13use static_cell::StaticCell; 11use 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]
27async fn net_task(stack: &'static Stack<TunTapDevice>) -> ! { 25async fn net_task(mut runner: embassy_net::Runner<'static, TunTapDevice>) -> ! {
28 stack.run().await 26 runner.run().await
29}
30
31#[derive(Default)]
32struct StrWrite(pub heapless::Vec<u8, 30>);
33
34impl 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,16 +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(device, config, RESOURCES.init(StackResources::new()), seed)); 54 let (stack, runner) = embassy_net::new(device, config, RESOURCES.init(StackResources::new()), seed);
68 55
69 // Launch network task 56 // Launch network task
70 spawner.spawn(net_task(stack)).unwrap(); 57 spawner.spawn(net_task(runner)).unwrap();
71 58
72 // Then we can use it! 59 // Then we can use it!
73 let mut rx_buffer = [0; 4096]; 60 let mut rx_buffer = [0; 4096];
@@ -86,9 +73,8 @@ async fn main_task(spawner: Spawner) {
86 73
87 // Write some quick output 74 // Write some quick output
88 for i in 1..=5 { 75 for i in 1..=5 {
89 let mut w = StrWrite::default(); 76 let s = format!("{}! ", i);
90 write!(w, "{}! ", i).unwrap(); 77 let r = socket.write_all(s.as_bytes()).await;
91 let r = socket.write_all(&w.0).await;
92 if let Err(e) = r { 78 if let Err(e) = r {
93 warn!("write error: {:?}", e); 79 warn!("write error: {:?}", e);
94 return; 80 return;