#network

std-embedded-nal

Implementation of the embedded-nal traits for large devices that support the standard library

5 releases

0.1.1 Aug 10, 2021
0.1.0 Aug 10, 2021
0.0.3 Feb 2, 2021
0.0.2 Feb 2, 2021
0.0.1 Sep 2, 2020

#63 in Embedded development

29 downloads per month
Used in 3 crates

MIT/Apache

17KB
346 lines

std-embedded-nal

This crate implements the embedded-nal network traits for operating systems that support the standard library's network. .

In that, it is to embedded-nal what linux-embedded-hal is to embedded-hal: A way to use libraries written for the bare-metal embedded world on Linux. (Just that network interfaces are better standardized than hardware access, so it should work on any system).

Usage

As the operating system's network stack is always available, it can be instanciated and used at any time without need for synchronization, roughly like this:

use embedded_nal::nb::block;
use std_embedded_nal::Stack;
use embedded_nal::UdpClient;

let message = [0x50, 0x01, 0x00, 0x00];

let mut stack = Stack::default();
let mut socket = stack.socket()?;
block!(stack.connect(&mut socket, "127.0.0.1:5683".parse()?)?);
block!(stack.send(&mut socket, &message)?);

See the CoAP and HTTP examples for full and working versions.

Performance

As embedded-nal is exclusively operating in nonblocking mode starting from version 0.2, any practical use of this ends up busy-waiting for network events. That's abysmal for any production application. It my be acceptable during development (which is what this crate is primarily intended for: Test network components before flashing them onto embedded hardware), but still requires user awareness.

A nb based selector main loop, or a future migration of embedded-nal to a more elaborate async mechanism, might mitigate this to some extent, but the author is not aware of any such implementation.

Maturity

This crate contains minimal working implementations the traits currently in embedded-nal.

Minimum Supported Rust Version

This crate is build-tested on stable Rust 1.51.0. That is largely following the embedded-nal MSRV. It might compile with older versions but that may change at any time.

Dependencies

~555KB
~10K SLoC