Platform agnostic rust driver for the [Wiznet W5500] internet offload chip.
This crate contains higher level (hl) socket operations, built on-top of my other crate, [w5500-ll], which contains register accessors, and networking data types for the W5500.
There are no separate socket structures.
The [Tcp
] and [Udp
] traits provided in this crate simply extend the
[Registers
] trait provided in [w5500-ll].
This makes for a less ergonomic API, but a much more portable API because
there are no mutexes or runtime checks to enable socket structures to share
ownership of the underlying W5500 device.
You will likely want to wrap up the underlying structure that implements
the [Registers
], [Tcp
], and [Udp
] traits to provide separate socket
structures utilizing whatever Mutex is available for your platform / RTOS.
All features are disabled by default.
defmt
: Passthrough to [w5500-ll].embedded-hal
: Passthrough to [w5500-ll].std
: Passthrough to [w5500-ll].UDP sockets
```rust use w5500hl::ll::{ net::{Ipv4Addr, SocketAddrV4}, Registers, Sn::Sn0, }; use w5500hl::Udp;
// open Sn0 as a UDP socket on port 1234 w5500.udp_bind(Sn0, 1234)?;
// send 4 bytes to 192.168.2.4:8080, and get the number of bytes transmitted let data: [u8; 4] = [0, 1, 2, 3]; let destination = SocketAddrV4::new(Ipv4Addr::new(192, 168, 2, 4), 8080); let txbytes = w5500.udpsend_to(Sn0, &data, &destination)?; ```
TCP streams (client)
```rust use w5500hl::ll::{ net::{Ipv4Addr, SocketAddrV4}, Registers, Sn, }; use w5500hl::Tcp;
const MQTTSOCKET: Sn = Sn::Sn0; const MQTTSOURCEPORT: u16 = 33650; const MQTTSERVER: SocketAddrV4 = SocketAddrV4::new(Ipv4Addr::new(192, 168, 2, 10), 1883);
// initiate a TCP connection to a MQTT server w5500.tcpconnect(MQTTSOCKET, MQTTSOURCEPORT, &MQTT_SERVER)?; ```
TCP listeners (server)
```rust use w5500hl::ll::{ net::{Ipv4Addr, SocketAddrV4}, Registers, Sn, }; use w5500hl::Tcp;
const HTTPSOCKET: Sn = Sn::Sn1; const HTTPPORT: u16 = 80;
// serve HTTP w5500.tcplisten(HTTPSOCKET, HTTP_PORT)?; ```
std::net
].