#[repr(u8)]pub enum Sn {
Sn0 = 0,
Sn1 = 1,
Sn2 = 2,
Sn3 = 3,
Sn4 = 4,
Sn5 = 5,
Sn6 = 6,
Sn7 = 7,
}
Expand description
W5500 socket numbers.
Variants§
Sn0 = 0
Socket 0.
This is the only socket that can be used in the Macraw
mode.
Sn1 = 1
Socket 1.
Sn2 = 2
Socket 2.
Sn3 = 3
Socket 3.
Sn4 = 4
Socket 4.
Sn5 = 5
Socket 5.
Sn6 = 6
Socket 6.
Sn7 = 7
Socket 7.
Implementations§
source§impl Sn
impl Sn
sourcepub const fn block(self) -> u8
pub const fn block(self) -> u8
Get the socket register block select bits.
Example
use w5500_ll::Sn;
assert_eq!(Sn::Sn0.block(), 0b00001);
assert_eq!(Sn::Sn1.block(), 0b00101);
assert_eq!(Sn::Sn2.block(), 0b01001);
assert_eq!(Sn::Sn3.block(), 0b01101);
assert_eq!(Sn::Sn4.block(), 0b10001);
assert_eq!(Sn::Sn5.block(), 0b10101);
assert_eq!(Sn::Sn6.block(), 0b11001);
assert_eq!(Sn::Sn7.block(), 0b11101);
sourcepub const fn tx_block(self) -> u8
pub const fn tx_block(self) -> u8
Get the socket TX buffer block select bits.
Example
use w5500_ll::Sn;
assert_eq!(Sn::Sn0.tx_block(), 0b00010);
assert_eq!(Sn::Sn1.tx_block(), 0b00110);
assert_eq!(Sn::Sn2.tx_block(), 0b01010);
assert_eq!(Sn::Sn3.tx_block(), 0b01110);
assert_eq!(Sn::Sn4.tx_block(), 0b10010);
assert_eq!(Sn::Sn5.tx_block(), 0b10110);
assert_eq!(Sn::Sn6.tx_block(), 0b11010);
assert_eq!(Sn::Sn7.tx_block(), 0b11110);
sourcepub const fn rx_block(self) -> u8
pub const fn rx_block(self) -> u8
Get the socket RX buffer block select bits.
Example
use w5500_ll::Sn;
assert_eq!(Sn::Sn0.rx_block(), 0b00011);
assert_eq!(Sn::Sn1.rx_block(), 0b00111);
assert_eq!(Sn::Sn2.rx_block(), 0b01011);
assert_eq!(Sn::Sn3.rx_block(), 0b01111);
assert_eq!(Sn::Sn4.rx_block(), 0b10011);
assert_eq!(Sn::Sn5.rx_block(), 0b10111);
assert_eq!(Sn::Sn6.rx_block(), 0b11011);
assert_eq!(Sn::Sn7.rx_block(), 0b11111);
sourcepub const fn bitmask(self) -> u8
pub const fn bitmask(self) -> u8
Socket bitmask.
This is useful for masking socket interrupts with set_simr
.
Examples
Demonstration:
use w5500_ll::Sn;
assert_eq!(Sn::Sn0.bitmask(), 0x01);
assert_eq!(Sn::Sn1.bitmask(), 0x02);
assert_eq!(Sn::Sn2.bitmask(), 0x04);
assert_eq!(Sn::Sn3.bitmask(), 0x08);
assert_eq!(Sn::Sn4.bitmask(), 0x10);
assert_eq!(Sn::Sn5.bitmask(), 0x20);
assert_eq!(Sn::Sn6.bitmask(), 0x40);
assert_eq!(Sn::Sn7.bitmask(), 0x80);
As an argument of set_simr
:
use w5500_ll::{
eh1::vdm::W5500,
Registers,
Sn::{Sn1, Sn3},
};
let mut w5500 = W5500::new(spi);
// enable socket 1 and socket 3 interrupts
const SOCKET_INTERRUPT_MASK: u8 = Sn1.bitmask() | Sn3.bitmask();
w5500.set_simr(SOCKET_INTERRUPT_MASK)?;
sourcepub fn iter() -> Iter<'static, Self>
pub fn iter() -> Iter<'static, Self>
Iterate over all sockets.
Example
Check all sockets for a pending interrupt.
use w5500_ll::{eh1::vdm::W5500, Registers, Sn, SocketCommand};
let mut w5500 = W5500::new(spi);
let sir: u8 = w5500.sir()?;
for sn in Sn::iter() {
let mask: u8 = sn.bitmask();
if sir & sn.bitmask() != 0 {
// handle socket interrupt
}
}
Trait Implementations§
source§impl Ord for Sn
impl Ord for Sn
source§impl PartialOrd for Sn
impl PartialOrd for Sn
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read moreimpl Copy for Sn
impl Eq for Sn
impl StructuralEq for Sn
impl StructuralPartialEq for Sn
Auto Trait Implementations§
impl RefUnwindSafe for Sn
impl Send for Sn
impl Sync for Sn
impl Unpin for Sn
impl UnwindSafe for Sn
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more