Stubbed UdpSocket struct, added Socket structs
This commit is contained in:
parent
e74f7f401b
commit
b30e4d0d34
7 changed files with 100 additions and 15 deletions
|
|
@ -2,16 +2,22 @@ use bus::{ActiveFourWire, ActiveThreeWire, Bus, FourWire, ThreeWire};
|
||||||
use embedded_hal::digital::v2::OutputPin;
|
use embedded_hal::digital::v2::OutputPin;
|
||||||
use embedded_hal::spi::FullDuplex;
|
use embedded_hal::spi::FullDuplex;
|
||||||
use network::Network;
|
use network::Network;
|
||||||
|
use socket::OwnedSockets;
|
||||||
use w5500::W5500;
|
use w5500::W5500;
|
||||||
|
|
||||||
pub struct InactiveW5500<SpiBus: Bus, NetworkImpl: Network> {
|
pub struct InactiveW5500<SpiBus: Bus, NetworkImpl: Network> {
|
||||||
bus: SpiBus,
|
bus: SpiBus,
|
||||||
network: NetworkImpl,
|
network: NetworkImpl,
|
||||||
|
sockets: OwnedSockets,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<SpiBus: Bus, NetworkImpl: Network> InactiveW5500<SpiBus, NetworkImpl> {
|
impl<SpiBus: Bus, NetworkImpl: Network> InactiveW5500<SpiBus, NetworkImpl> {
|
||||||
pub fn new(bus: SpiBus, network: NetworkImpl) -> Self {
|
pub fn new(bus: SpiBus, network: NetworkImpl, sockets: OwnedSockets) -> Self {
|
||||||
Self { bus, network }
|
Self {
|
||||||
|
bus,
|
||||||
|
network,
|
||||||
|
sockets,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -20,7 +26,7 @@ impl<ChipSelect: OutputPin, NetworkImpl: Network> InactiveW5500<FourWire<ChipSel
|
||||||
self,
|
self,
|
||||||
spi: Spi,
|
spi: Spi,
|
||||||
) -> W5500<ActiveFourWire<Spi, ChipSelect>, NetworkImpl> {
|
) -> W5500<ActiveFourWire<Spi, ChipSelect>, NetworkImpl> {
|
||||||
W5500::new(self.bus.activate(spi), self.network)
|
W5500::new(self.bus.activate(spi), self.network, self.sockets)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,6 +35,6 @@ impl<NetworkImpl: Network> InactiveW5500<ThreeWire, NetworkImpl> {
|
||||||
self,
|
self,
|
||||||
spi: Spi,
|
spi: Spi,
|
||||||
) -> W5500<ActiveThreeWire<Spi>, NetworkImpl> {
|
) -> W5500<ActiveThreeWire<Spi>, NetworkImpl> {
|
||||||
W5500::new(self.bus.activate(spi), self.network)
|
W5500::new(self.bus.activate(spi), self.network, self.sockets)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -940,9 +940,11 @@ impl Default for Mode {
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
pub mod bus;
|
mod bus;
|
||||||
pub mod inactive_w5500;
|
mod inactive_w5500;
|
||||||
mod network;
|
mod network;
|
||||||
mod register;
|
mod register;
|
||||||
|
mod socket;
|
||||||
|
mod udp;
|
||||||
pub mod uninitialized_w5500;
|
pub mod uninitialized_w5500;
|
||||||
pub mod w5500;
|
mod w5500;
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ impl Network for Dhcp {
|
||||||
/// Gets (if necessary) and sets the network settings on the chip
|
/// Gets (if necessary) and sets the network settings on the chip
|
||||||
fn refresh<SpiBus: ActiveBus>(&mut self, _bus: &mut SpiBus) -> Result<(), SpiBus::Error> {
|
fn refresh<SpiBus: ActiveBus>(&mut self, _bus: &mut SpiBus) -> Result<(), SpiBus::Error> {
|
||||||
// TODO actually negotiate settings from DHCP
|
// TODO actually negotiate settings from DHCP
|
||||||
|
// TODO figure out how should receive socket for DHCP negotiations
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
39
src/socket/mod.rs
Normal file
39
src/socket/mod.rs
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
pub trait Socket {}
|
||||||
|
|
||||||
|
pub type OwnedSockets = (
|
||||||
|
Socket0,
|
||||||
|
Socket1,
|
||||||
|
Socket2,
|
||||||
|
Socket3,
|
||||||
|
Socket4,
|
||||||
|
Socket5,
|
||||||
|
Socket6,
|
||||||
|
Socket7,
|
||||||
|
);
|
||||||
|
pub type Sockets<'a> = (
|
||||||
|
&'a mut Socket0,
|
||||||
|
&'a mut Socket1,
|
||||||
|
&'a mut Socket2,
|
||||||
|
&'a mut Socket3,
|
||||||
|
&'a mut Socket4,
|
||||||
|
&'a mut Socket5,
|
||||||
|
&'a mut Socket6,
|
||||||
|
&'a mut Socket7,
|
||||||
|
);
|
||||||
|
|
||||||
|
pub struct Socket0 {}
|
||||||
|
impl Socket for Socket0 {}
|
||||||
|
pub struct Socket1 {}
|
||||||
|
impl Socket for Socket1 {}
|
||||||
|
pub struct Socket2 {}
|
||||||
|
impl Socket for Socket2 {}
|
||||||
|
pub struct Socket3 {}
|
||||||
|
impl Socket for Socket3 {}
|
||||||
|
pub struct Socket4 {}
|
||||||
|
impl Socket for Socket4 {}
|
||||||
|
pub struct Socket5 {}
|
||||||
|
impl Socket for Socket5 {}
|
||||||
|
pub struct Socket6 {}
|
||||||
|
impl Socket for Socket6 {}
|
||||||
|
pub struct Socket7 {}
|
||||||
|
impl Socket for Socket7 {}
|
||||||
5
src/udp/mod.rs
Normal file
5
src/udp/mod.rs
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
use crate::socket::Socket;
|
||||||
|
|
||||||
|
pub struct UdpSocket<SocketImpl: Socket> {
|
||||||
|
pub socket: SocketImpl,
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ use bus::{ActiveBus, ActiveFourWire, ActiveThreeWire};
|
||||||
use embedded_hal::digital::v2::OutputPin;
|
use embedded_hal::digital::v2::OutputPin;
|
||||||
use embedded_hal::spi::FullDuplex;
|
use embedded_hal::spi::FullDuplex;
|
||||||
use register;
|
use register;
|
||||||
|
use socket::{Socket0, Socket1, Socket2, Socket3, Socket4, Socket5, Socket6, Socket7};
|
||||||
use w5500::W5500;
|
use w5500::W5500;
|
||||||
|
|
||||||
pub struct UninitializedW5500<SpiBus: ActiveBus> {
|
pub struct UninitializedW5500<SpiBus: ActiveBus> {
|
||||||
|
|
@ -64,8 +65,17 @@ impl<SpiBus: ActiveBus> UninitializedW5500<SpiBus> {
|
||||||
network
|
network
|
||||||
.refresh(&mut self.bus)
|
.refresh(&mut self.bus)
|
||||||
.map_err(|e| InitializeError::SpiError(e))?;
|
.map_err(|e| InitializeError::SpiError(e))?;
|
||||||
Ok(W5500::new(self.bus, network))
|
let sockets = (
|
||||||
// TODO give ownership of all sockets
|
Socket0 {},
|
||||||
|
Socket1 {},
|
||||||
|
Socket2 {},
|
||||||
|
Socket3 {},
|
||||||
|
Socket4 {},
|
||||||
|
Socket5 {},
|
||||||
|
Socket6 {},
|
||||||
|
Socket7 {},
|
||||||
|
);
|
||||||
|
Ok(W5500::new(self.bus, network, sockets))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn assert_chip_version(
|
fn assert_chip_version(
|
||||||
|
|
|
||||||
34
src/w5500.rs
34
src/w5500.rs
|
|
@ -5,18 +5,38 @@ use embedded_hal::digital::v2::OutputPin;
|
||||||
use embedded_hal::spi::FullDuplex;
|
use embedded_hal::spi::FullDuplex;
|
||||||
use network::Network;
|
use network::Network;
|
||||||
use register;
|
use register;
|
||||||
|
use socket::{OwnedSockets, Socket, Sockets};
|
||||||
|
use udp::UdpSocket;
|
||||||
|
|
||||||
pub struct W5500<SpiBus: ActiveBus, NetworkImpl: Network> {
|
pub struct W5500<SpiBus: ActiveBus, NetworkImpl: Network> {
|
||||||
bus: SpiBus,
|
bus: SpiBus,
|
||||||
network: NetworkImpl,
|
network: NetworkImpl,
|
||||||
|
sockets: OwnedSockets,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<SpiBus: ActiveBus, NetworkImpl: Network> W5500<SpiBus, NetworkImpl> {
|
impl<SpiBus: ActiveBus, NetworkImpl: Network> W5500<SpiBus, NetworkImpl> {
|
||||||
pub fn new(bus: SpiBus, network: NetworkImpl) -> Self {
|
pub fn new(bus: SpiBus, network: NetworkImpl, sockets: OwnedSockets) -> Self {
|
||||||
W5500 { bus, network }
|
W5500 {
|
||||||
|
bus,
|
||||||
|
network,
|
||||||
|
sockets,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn sockets(&mut self) -> Sockets {
|
||||||
|
(
|
||||||
|
&mut self.sockets.0,
|
||||||
|
&mut self.sockets.1,
|
||||||
|
&mut self.sockets.2,
|
||||||
|
&mut self.sockets.3,
|
||||||
|
&mut self.sockets.4,
|
||||||
|
&mut self.sockets.5,
|
||||||
|
&mut self.sockets.6,
|
||||||
|
&mut self.sockets.7,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn reset(mut self) -> Result<UninitializedW5500<SpiBus>, SpiBus::Error> {
|
pub fn reset(mut self) -> Result<UninitializedW5500<SpiBus>, SpiBus::Error> {
|
||||||
// TODO accept all sockets back
|
|
||||||
self.clear_mode()?;
|
self.clear_mode()?;
|
||||||
Ok(UninitializedW5500::new(self.bus))
|
Ok(UninitializedW5500::new(self.bus))
|
||||||
}
|
}
|
||||||
|
|
@ -30,7 +50,9 @@ impl<SpiBus: ActiveBus, NetworkImpl: Network> W5500<SpiBus, NetworkImpl> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO open_udp_socket
|
pub fn open_udp_socket<SocketImpl: Socket>(&self, socket: SocketImpl) -> UdpSocket<SocketImpl> {
|
||||||
|
UdpSocket { socket }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Spi: FullDuplex<u8>, ChipSelect: OutputPin, NetworkImpl: Network>
|
impl<Spi: FullDuplex<u8>, ChipSelect: OutputPin, NetworkImpl: Network>
|
||||||
|
|
@ -38,13 +60,13 @@ impl<Spi: FullDuplex<u8>, ChipSelect: OutputPin, NetworkImpl: Network>
|
||||||
{
|
{
|
||||||
pub fn deactivate(self) -> (InactiveW5500<FourWire<ChipSelect>, NetworkImpl>, Spi) {
|
pub fn deactivate(self) -> (InactiveW5500<FourWire<ChipSelect>, NetworkImpl>, Spi) {
|
||||||
let (bus, spi) = self.bus.deactivate();
|
let (bus, spi) = self.bus.deactivate();
|
||||||
(InactiveW5500::new(bus, self.network), spi)
|
(InactiveW5500::new(bus, self.network, self.sockets), spi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Spi: FullDuplex<u8>, NetworkImpl: Network> W5500<ActiveThreeWire<Spi>, NetworkImpl> {
|
impl<Spi: FullDuplex<u8>, NetworkImpl: Network> W5500<ActiveThreeWire<Spi>, NetworkImpl> {
|
||||||
pub fn deactivate(self) -> (InactiveW5500<ThreeWire, NetworkImpl>, Spi) {
|
pub fn deactivate(self) -> (InactiveW5500<ThreeWire, NetworkImpl>, Spi) {
|
||||||
let (bus, spi) = self.bus.deactivate();
|
let (bus, spi) = self.bus.deactivate();
|
||||||
(InactiveW5500::new(bus, self.network), spi)
|
(InactiveW5500::new(bus, self.network, self.sockets), spi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue