diff --git a/src/interface.rs b/src/interface.rs index 8542ebc..2ad9c77 100644 --- a/src/interface.rs +++ b/src/interface.rs @@ -1,7 +1,14 @@ -use bus::{ActiveBus}; +use embedded_hal::digital::v2::OutputPin; +use embedded_hal::spi::FullDuplex; +use embedded_nal::Ipv4Addr; + +use crate::{MacAddress,Mode}; + +use bus::{ActiveBus,FourWire,ActiveFourWire}; use device::Device; -use network::Network; +use network::{Network,Manual}; use core::cell::RefCell; +use uninitialized_device::{UninitializedDevice,InitializeError}; pub struct Interface { pub device: RefCell>, @@ -11,8 +18,19 @@ impl Interface { fn new(device: Device) -> Self { Self { device: RefCell::new(device) } } + + pub fn release(self) -> Device { + self.device.into_inner() + } } +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)