SEDSnet 4.0.0

A memory safe, no_std-capable networking stack with routing, discovery, reliability, and Rust/C/Python bindings.
Documentation
use sedsnet::router::{Clock, EndpointHandler, Router, RouterConfig};
use sedsnet::{DataEndpoint, DataType, TelemetryResult};
use std::sync::atomic::{AtomicU64, Ordering};

#[derive(Default)]
struct StepClock {
    now: AtomicU64,
}

impl Clock for StepClock {
    fn now_ms(&self) -> u64 {
        self.now.fetch_add(5, Ordering::SeqCst)
    }
}

fn main() -> TelemetryResult<()> {
    let router = Router::new_with_clock(
        RouterConfig::new([EndpointHandler::new_packet_handler(
            DataEndpoint::named("SD_CARD"),
            |pkt| {
                println!("[RX] {pkt}");
                Ok(())
            },
        )]),
        Box::new(StepClock::default()),
    );
    router.add_side_packed("TX", |_bytes| Ok(()));

    for i in 0..5 {
        router.log_f32(DataType::named("GPS_DATA"), &[i as f32, 0.0, 0.0])?;
    }

    router.process_all_queues_with_timeout(5)?;
    router.process_all_queues_with_timeout(0)?;
    Ok(())
}