aboutsummaryrefslogtreecommitdiff
path: root/embassy-net-examples/src/main.rs
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2021-02-03 05:09:37 +0100
committerDario Nieuwenhuis <[email protected]>2021-02-03 05:09:37 +0100
commitcb5931d583d283dda3a1b5ed2014c086bb8f98ae (patch)
tree19a669238e0d562bf74616fe38485388ec40b02a /embassy-net-examples/src/main.rs
:rainbow:
Diffstat (limited to 'embassy-net-examples/src/main.rs')
-rw-r--r--embassy-net-examples/src/main.rs79
1 files changed, 79 insertions, 0 deletions
diff --git a/embassy-net-examples/src/main.rs b/embassy-net-examples/src/main.rs
new file mode 100644
index 000000000..bc413f1a2
--- /dev/null
+++ b/embassy-net-examples/src/main.rs
@@ -0,0 +1,79 @@
1#![feature(type_alias_impl_trait)]
2
3use embassy::executor::{Spawner, task};
4use embassy::io::{AsyncBufReadExt, AsyncWriteExt};
5use embassy::time::{Duration, Timer};
6use embassy::util::Forever;
7use embassy_net::*;
8use embassy_std::Executor;
9use heapless::Vec;
10use log::*;
11
12mod tuntap;
13
14use crate::tuntap::TunTapDevice;
15
16static DEVICE: Forever<TunTapDevice> = Forever::new();
17static CONFIG: Forever<StaticConfigurator> = Forever::new();
18
19#[task]
20async fn net_task() {
21 embassy_net::run().await
22}
23
24#[task]
25async fn main_task(spawner: Spawner) {
26 // Init network device
27 let device = TunTapDevice::new("tap0").unwrap();
28
29 // Static IP configuration
30 let config = StaticConfigurator::new(UpConfig {
31 address: Ipv4Cidr::new(Ipv4Address::new(192, 168, 69, 1), 24),
32 dns_servers: Vec::new(),
33 gateway: Ipv4Address::new(192, 168, 69, 100),
34 });
35
36 // Init network stack
37 embassy_net::init(DEVICE.put(device), CONFIG.put(config));
38
39 // Launch network task
40 spawner.spawn(net_task()).unwrap();
41
42 // Then we can use it!
43 let mut rx_buffer = [0; 4096];
44 let mut tx_buffer = [0; 4096];
45 let mut socket = TcpSocket::new(&mut rx_buffer, &mut tx_buffer);
46
47 socket.set_timeout(Some(embassy_net::SmolDuration::from_secs(10)));
48
49 let remote_endpoint = (Ipv4Address::new(192, 168, 69, 100), 8000);
50 info!("connecting to {:?}...", remote_endpoint);
51 let r = socket.connect(remote_endpoint).await;
52 if let Err(e) = r {
53 warn!("connect error: {:?}", e);
54 return;
55 }
56 info!("connected!");
57 loop {
58 let r = socket.write_all(b"Hello!\n").await;
59 if let Err(e) = r {
60 warn!("write error: {:?}", e);
61 return;
62 }
63 }
64}
65
66static EXECUTOR: Forever<Executor> = Forever::new();
67
68fn main() {
69 env_logger::builder()
70 .filter_level(log::LevelFilter::Debug)
71 .filter_module("async_io", log::LevelFilter::Info)
72 .format_timestamp_nanos()
73 .init();
74
75 let executor = EXECUTOR.put(Executor::new());
76 executor.run(|spawner| {
77 spawner.spawn(main_task(spawner)).unwrap();
78 });
79}