From f5b9674840ce0f96629e62c2fa6331377e422925 Mon Sep 17 00:00:00 2001 From: ju6ge Date: Sun, 10 May 2026 13:34:25 +0200 Subject: [PATCH] refactor: move run_dhcp to network module --- rust/src/hal/esp.rs | 46 +-------------------------------------------- rust/src/network.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/rust/src/hal/esp.rs b/rust/src/hal/esp.rs index 3e087fb..8c5246f 100644 --- a/rust/src/hal/esp.rs +++ b/rust/src/hal/esp.rs @@ -47,7 +47,7 @@ use portable_atomic::AtomicBool; use sntpc::{NtpContext, NtpTimestampGenerator, NtpUdpSocket, get_time}; use super::shared_flash::MutexFlashStorage; -use crate::network::net_task; +use crate::network::{net_task, run_dhcp}; #[esp_hal::ram(unstable(rtc_fast), unstable(persistent))] static mut LAST_WATERING_TIMESTAMP: [i64; PLANT_COUNT] = [0; PLANT_COUNT]; @@ -732,47 +732,3 @@ impl Esp<'_> { } } - -#[embassy_executor::task] -async fn run_dhcp(stack: Stack<'static>, ip: Ipv4Addr) { - use core::net::SocketAddrV4; - - use edge_dhcp::{ - io::{self, DEFAULT_SERVER_PORT}, - server::{Server, ServerOptions}, - }; - use edge_nal::UdpBind; - use edge_nal_embassy::{Udp, UdpBuffers}; - - let mut buf = [0u8; 1500]; - - let mut gw_buf = [Ipv4Addr::UNSPECIFIED]; - - let buffers = UdpBuffers::<3, 1024, 1024, 10>::new(); - let unbound_socket = Udp::new(stack, &buffers); - let mut bound_socket = match unbound_socket - .bind(SocketAddr::V4(SocketAddrV4::new( - Ipv4Addr::UNSPECIFIED, - DEFAULT_SERVER_PORT, - ))) - .await - { - Ok(s) => s, - Err(e) => { - error!("dhcp task failed to bind socket: {:?}", e); - return; - } - }; - - loop { - _ = io::server::run( - &mut Server::<_, 64>::new_with_et(ip), - &ServerOptions::new(ip, Some(&mut gw_buf)), - &mut bound_socket, - &mut buf, - ) - .await - .inspect_err(|e| warn!("DHCP server error: {e:?}")); - Timer::after(Duration::from_millis(500)).await; - } -} diff --git a/rust/src/network.rs b/rust/src/network.rs index c27a03d..a208bac 100644 --- a/rust/src/network.rs +++ b/rust/src/network.rs @@ -1,7 +1,16 @@ use alloc::string::String; use chrono::{DateTime, Utc}; -use embassy_net::Runner; +use core::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; +use embassy_net::{Runner, Stack}; +use embassy_time::{Duration, Timer}; +use edge_dhcp::{ + io::{self, DEFAULT_SERVER_PORT}, + server::{Server, ServerOptions}, +}; +use edge_nal::UdpBind; +use edge_nal_embassy::{Udp, UdpBuffers}; use esp_radio::wifi::Interface; +use log::{warn, error}; use serde::Serialize; #[derive(Serialize, Debug, PartialEq)] @@ -24,3 +33,38 @@ pub enum NetworkMode { pub(crate) async fn net_task(mut runner: Runner<'static, Interface<'static>>) { runner.run().await; } + +#[embassy_executor::task] +pub(crate) async fn run_dhcp(stack: Stack<'static>, ip: Ipv4Addr) { + let mut buf = [0u8; 1500]; + + let mut gw_buf = [Ipv4Addr::UNSPECIFIED]; + + let buffers = UdpBuffers::<3, 1024, 1024, 10>::new(); + let unbound_socket = Udp::new(stack, &buffers); + let mut bound_socket = match unbound_socket + .bind(SocketAddr::V4(SocketAddrV4::new( + Ipv4Addr::UNSPECIFIED, + DEFAULT_SERVER_PORT, + ))) + .await + { + Ok(s) => s, + Err(e) => { + error!("dhcp task failed to bind socket: {:?}", e); + return; + } + }; + + loop { + _ = io::server::run( + &mut Server::<_, 64>::new_with_et(ip), + &ServerOptions::new(ip, Some(&mut gw_buf)), + &mut bound_socket, + &mut buf, + ) + .await + .inspect_err(|e| warn!("DHCP server error: {e:?}")); + Timer::after(Duration::from_millis(500)).await; + } +}