diff --git a/Cargo.toml b/Cargo.toml index c8bd57e..74b20e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,6 +13,6 @@ edition = "2018" [dependencies] byteorder = { version = "1.3.4", default-features = false } embedded-hal = "0.2.4" -embedded-nal = { git = "https://github.com/rust-embedded-community/embedded-nal.git", rev = "0bc4d77" } +embedded-nal = "0.3.0" bit_field = "0.10.1" nb = "1.0.0" diff --git a/src/device.rs b/src/device.rs index d840a22..f637036 100644 --- a/src/device.rs +++ b/src/device.rs @@ -74,10 +74,6 @@ impl Device { Ok(phy[0].into()) } - pub fn into_interface(self) -> Interface { - self.into() - } - pub fn release_socket(&mut self, socket: Socket) { self.sockets.set_bit(socket.index.into(), true); } diff --git a/src/interface.rs b/src/interface.rs deleted file mode 100644 index 2b42de2..0000000 --- a/src/interface.rs +++ /dev/null @@ -1,46 +0,0 @@ -use embedded_hal::digital::v2::OutputPin; -use embedded_hal::spi::FullDuplex; -use embedded_nal::Ipv4Addr; - -use crate::bus::{ActiveBus, ActiveFourWire, FourWire}; -use crate::device::Device; -use crate::host::{Host, Manual}; -use crate::uninitialized_device::{InitializeError, UninitializedDevice}; -use crate::{MacAddress, Mode}; - -pub struct Interface { - pub device: Device, -} - -impl Interface { - fn new(device: Device) -> Self { - Self { device } - } - - pub fn release(self) -> Device { - self.device - } -} - -impl, ChipSelect: OutputPin> - Interface, Manual> -{ - pub fn setup( - spi: Spi, - cs: ChipSelect, - mac: MacAddress, - ip: Ipv4Addr, - ) -> Result as ActiveBus>::Error>> { - Ok(UninitializedDevice::new(FourWire::new(cs).activate(spi)) - .initialize_manual(mac, ip, Mode::default())? - .into_interface()) - } -} - -impl From> - for Interface -{ - fn from(device: Device) -> Interface { - Interface::::new(device) - } -} diff --git a/src/lib.rs b/src/lib.rs index eb7f44e..d4f0ba3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -74,13 +74,10 @@ pub mod bus; mod device; mod host; mod inactive_device; -pub mod interface; -mod network; pub mod net; pub mod register; mod socket; mod udp; pub mod uninitialized_device; -pub use bus::ActiveFourWire; -pub use interface::Interface; +pub use net::MacAddress; diff --git a/src/udp.rs b/src/udp.rs index 346bcf1..37713c5 100644 --- a/src/udp.rs +++ b/src/udp.rs @@ -1,6 +1,6 @@ use crate::bus::ActiveBus; +use crate::device::Device; use crate::host::Host; -use crate::interface::Interface; use crate::register::socketn; use crate::socket::Socket; use core::fmt::Debug; @@ -178,7 +178,7 @@ impl From> for nb::Error { } } -impl UdpClientStack for Interface +impl UdpClientStack for Device where SpiBus: ActiveBus, HostImpl: Host, @@ -187,8 +187,7 @@ where type Error = UdpSocketError; fn socket(&mut self) -> Result { - let mut device = &mut self.device; - if let Some(socket) = device.take_socket() { + if let Some(socket) = self.take_socket() { Ok(UdpSocket::new(socket)) } else { Err(Self::Error::NoMoreSockets) @@ -200,18 +199,17 @@ where socket: &mut Self::UdpSocket, remote: SocketAddr, ) -> Result<(), Self::Error> { - let mut device = &mut self.device; if let SocketAddr::V4(remote) = remote { // TODO find a random port - socket.open(&mut device.bus, 4000)?; - socket.set_destination(&mut device.bus, remote)?; + socket.open(&mut self.bus, 4000)?; + socket.set_destination(&mut self.bus, remote)?; Ok(()) } else { Err(Self::Error::UnsupportedAddress) } } fn send(&mut self, socket: &mut Self::UdpSocket, buffer: &[u8]) -> nb::Result<(), Self::Error> { - socket.send(&mut self.device.bus, buffer)?; + socket.send(&mut self.bus, buffer)?; Ok(()) } fn receive( @@ -219,24 +217,22 @@ where socket: &mut Self::UdpSocket, buffer: &mut [u8], ) -> nb::Result<(usize, SocketAddr), Self::Error> { - Ok(socket.receive(&mut self.device.bus, buffer)?) + Ok(socket.receive(&mut self.bus, buffer)?) } fn close(&mut self, socket: Self::UdpSocket) -> Result<(), Self::Error> { - let mut device = &mut self.device; - socket.close(&mut device.bus)?; - device.release_socket(socket.socket); + socket.close(&mut self.bus)?; + self.release_socket(socket.socket); Ok(()) } } -impl UdpFullStack for Interface +impl UdpFullStack for Device where SpiBus: ActiveBus, HostImpl: Host, { fn bind(&mut self, socket: &mut Self::UdpSocket, local_port: u16) -> Result<(), Self::Error> { - let mut device = &mut self.device; - socket.open(&mut device.bus, local_port)?; + socket.open(&mut self.bus, local_port)?; Ok(()) } fn send_to( @@ -246,7 +242,7 @@ where buffer: &[u8], ) -> nb::Result<(), Self::Error> { if let SocketAddr::V4(remote) = remote { - socket.send_to(&mut self.device.bus, remote, buffer)?; + socket.send_to(&mut self.bus, remote, buffer)?; Ok(()) } else { Err(nb::Error::Other(Self::Error::UnsupportedAddress))