diff --git a/src/main.rs b/src/main.rs index 38eadc2..6e36c4a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,8 +6,11 @@ use cyw43_pio::PioSpi; use defmt::{debug, info, warn, Format}; use dsmr5::Readout; use embassy_executor::Spawner; -use embassy_futures::select::{select, Either}; -use embassy_net::{tcp::TcpSocket, Ipv4Address, Ipv4Cidr, Stack, StackResources}; +use embassy_futures::{ + select::{select, Either}, + yield_now, +}; +use embassy_net::{tcp::TcpSocket, Config, Ipv4Address, Stack, StackResources}; use embassy_rp::{ bind_interrupts, gpio, peripherals::{DMA_CH0, PIN_23, PIN_25, PIO0, UART0}, @@ -182,13 +185,7 @@ async fn main(spawner: Spawner) { // Turn LED on while trying to connect control.gpio_set(0, true).await; - // let config = embassy_net::Config::dhcpv4(Default::default()); - let ip = Ipv4Address::new(10, 0, 0, 77); - let config = embassy_net::Config::ipv4_static(embassy_net::StaticConfigV4 { - address: Ipv4Cidr::new(ip, 24), - gateway: Some(Ipv4Address::new(10, 0, 0, 1)), - dns_servers: Vec::new(), - }); + let config = Config::dhcpv4(Default::default()); let mut seed = [0; 8]; // TODO: Make the seed actually random? @@ -218,6 +215,10 @@ async fn main(spawner: Spawner) { } } + info!("Waiting for DHCP..."); + let cfg = wait_for_config(stack).await; + info!("IP Address: {}", cfg.address.address()); + let mut rx_buffer = [0; 4096]; let mut tx_buffer = [0; 4096]; @@ -281,3 +282,16 @@ async fn main(spawner: Spawner) { } } } + +async fn wait_for_config( + stack: &'static Stack>, +) -> embassy_net::StaticConfigV4 { + loop { + // We are essentially busy looping here since there is no Async API for this + if let Some(config) = stack.config_v4() { + return config; + } + + yield_now().await; + } +}