Added bus model and InactiveW5500 state

This commit is contained in:
Jonah Dahlquist 2019-08-06 21:47:30 -05:00 committed by Jonah Dahlquist
commit a43f86d744
7 changed files with 130 additions and 40 deletions

View file

@ -1 +1,34 @@
pub struct W5500 {}
use crate::inactive_w5500::InactiveW5500;
use crate::uninitialized_w5500::UninitializedW5500;
use bus::{ActiveBus, ActiveFourWire, ActiveThreeWire, FourWire, ThreeWire};
use embedded_hal::digital::v2::OutputPin;
use embedded_hal::spi::FullDuplex;
pub struct W5500<SpiBus: ActiveBus> {
bus: SpiBus,
}
impl<SpiBus: ActiveBus> W5500<SpiBus> {
pub fn new(bus: SpiBus) -> Self {
W5500 { bus }
}
pub fn reset(self) -> UninitializedW5500<SpiBus> {
// TODO reset chip
UninitializedW5500::new(self.bus)
}
//TODO open_udp_socket
}
impl<Spi: FullDuplex<u8>, ChipSelect: OutputPin> W5500<ActiveFourWire<Spi, ChipSelect>> {
pub fn deactivate(self) -> (InactiveW5500<FourWire<ChipSelect>>, Spi) {
let (bus, spi) = self.bus.deactivate();
(InactiveW5500::new(bus), spi)
}
}
impl<Spi: FullDuplex<u8>> W5500<ActiveThreeWire<Spi>> {
pub fn deactivate(self) -> (InactiveW5500<ThreeWire>, Spi) {
let (bus, spi) = self.bus.deactivate();
(InactiveW5500::new(bus), spi)
}
}