use embedded_hal::digital::v2::OutputPin; use embedded_hal::spi::FullDuplex; use embedded_nal::Ipv4Addr; use crate::{MacAddress, Mode}; use bus::{ActiveBus, ActiveFourWire, FourWire}; use core::cell::RefCell; use device::Device; use network::{Manual, Network}; use uninitialized_device::{InitializeError, UninitializedDevice}; pub struct Interface { pub device: RefCell>, } 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) } }