#[derive(Copy, Clone, Eq, PartialEq, Debug, PartialOrd, Ord, Hash, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum SocketStatus {
#[default]
Closed = 0x00,
Init = 0x13,
Listen = 0x14,
SynSent = 0x15,
SynRecv = 0x16,
Established = 0x17,
FinWait = 0x18,
Closing = 0x1A,
TimeWait = 0x1B,
CloseWait = 0x1C,
LastAck = 0x1D,
Udp = 0x22,
Macraw = 0x42,
}
impl From<SocketStatus> for u8 {
fn from(val: SocketStatus) -> u8 {
val as u8
}
}
impl TryFrom<u8> for SocketStatus {
type Error = u8;
fn try_from(val: u8) -> Result<SocketStatus, u8> {
match val {
x if x == SocketStatus::Closed as u8 => Ok(SocketStatus::Closed),
x if x == SocketStatus::Init as u8 => Ok(SocketStatus::Init),
x if x == SocketStatus::Listen as u8 => Ok(SocketStatus::Listen),
x if x == SocketStatus::SynSent as u8 => Ok(SocketStatus::SynSent),
x if x == SocketStatus::SynRecv as u8 => Ok(SocketStatus::SynRecv),
x if x == SocketStatus::Established as u8 => Ok(SocketStatus::Established),
x if x == SocketStatus::FinWait as u8 => Ok(SocketStatus::FinWait),
x if x == SocketStatus::Closing as u8 => Ok(SocketStatus::Closing),
x if x == SocketStatus::TimeWait as u8 => Ok(SocketStatus::TimeWait),
x if x == SocketStatus::CloseWait as u8 => Ok(SocketStatus::CloseWait),
x if x == SocketStatus::LastAck as u8 => Ok(SocketStatus::LastAck),
x if x == SocketStatus::Udp as u8 => Ok(SocketStatus::Udp),
x if x == SocketStatus::Macraw as u8 => Ok(SocketStatus::Macraw),
_ => Err(val),
}
}
}
#[derive(Copy, Clone, Eq, PartialEq, Debug, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum SocketCommand {
Accepted = 0x00,
Open = 0x01,
Listen = 0x02,
Connect = 0x04,
Disconnect = 0x08,
Close = 0x10,
Send = 0x20,
SendMac = 0x21,
SendKeep = 0x22,
Recv = 0x40,
}
impl From<SocketCommand> for u8 {
fn from(val: SocketCommand) -> u8 {
val as u8
}
}
impl TryFrom<u8> for SocketCommand {
type Error = u8;
fn try_from(val: u8) -> Result<Self, u8> {
match val {
x if x == Self::Accepted as u8 => Ok(Self::Accepted),
x if x == Self::Open as u8 => Ok(Self::Open),
x if x == Self::Listen as u8 => Ok(Self::Listen),
x if x == Self::Connect as u8 => Ok(Self::Connect),
x if x == Self::Disconnect as u8 => Ok(Self::Disconnect),
x if x == Self::Close as u8 => Ok(Self::Close),
x if x == Self::Send as u8 => Ok(Self::Send),
x if x == Self::SendMac as u8 => Ok(Self::SendMac),
x if x == Self::SendKeep as u8 => Ok(Self::SendKeep),
x if x == Self::Recv as u8 => Ok(Self::Recv),
_ => Err(val),
}
}
}
#[derive(Copy, Clone, Eq, PartialEq, Debug, PartialOrd, Ord, Hash)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum Protocol {
Closed = 0b0000,
Tcp = 0b0001,
Udp = 0b0010,
Macraw = 0b0100,
}
impl Protocol {
pub const fn from_raw(val: u8) -> Result<Self, u8> {
match val {
x if x == Protocol::Closed as u8 => Ok(Protocol::Closed),
x if x == Protocol::Tcp as u8 => Ok(Protocol::Tcp),
x if x == Protocol::Udp as u8 => Ok(Protocol::Udp),
x if x == Protocol::Macraw as u8 => Ok(Protocol::Macraw),
_ => Err(val),
}
}
}
impl From<Protocol> for u8 {
fn from(val: Protocol) -> u8 {
val as u8
}
}
impl Default for Protocol {
fn default() -> Self {
Self::Closed
}
}
impl TryFrom<u8> for Protocol {
type Error = u8;
fn try_from(val: u8) -> Result<Self, u8> {
Self::from_raw(val)
}
}
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug, Hash)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum OperationMode {
HalfDuplex10bt = 0b000,
FullDuplex10bt = 0b001,
HalfDuplex100bt = 0b010,
FullDuplex100bt = 0b011,
HalfDuplex100btAuto = 0b100,
PowerDown = 0b110,
Auto = 0b111,
}
impl OperationMode {
pub const fn from_raw(val: u8) -> Self {
match val & 0b111 {
x if x == Self::HalfDuplex10bt as u8 => Self::HalfDuplex10bt,
x if x == Self::FullDuplex10bt as u8 => Self::FullDuplex10bt,
x if x == Self::HalfDuplex100bt as u8 => Self::HalfDuplex100bt,
x if x == Self::FullDuplex100bt as u8 => Self::FullDuplex100bt,
x if x == Self::HalfDuplex100btAuto as u8 => Self::HalfDuplex100btAuto,
x if x == Self::PowerDown as u8 => Self::PowerDown,
_ => Self::Auto,
}
}
}
impl From<OperationMode> for u8 {
fn from(val: OperationMode) -> u8 {
val as u8
}
}
impl Default for OperationMode {
fn default() -> Self {
Self::Auto
}
}
#[derive(Copy, Clone, Eq, PartialEq, Debug, PartialOrd, Ord, Hash, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum LinkStatus {
#[default]
Down = 0,
Up = 1,
}
impl From<bool> for LinkStatus {
fn from(val: bool) -> LinkStatus {
if val {
LinkStatus::Up
} else {
LinkStatus::Down
}
}
}
impl From<LinkStatus> for u8 {
fn from(val: LinkStatus) -> u8 {
val as u8
}
}
#[derive(Copy, Clone, Eq, PartialEq, Debug, PartialOrd, Ord, Hash, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum SpeedStatus {
#[default]
Mbps10 = 0,
Mbps100 = 1,
}
impl From<bool> for SpeedStatus {
fn from(val: bool) -> SpeedStatus {
if val {
SpeedStatus::Mbps100
} else {
SpeedStatus::Mbps10
}
}
}
impl From<SpeedStatus> for u8 {
fn from(val: SpeedStatus) -> u8 {
val as u8
}
}
#[derive(Copy, Clone, Eq, PartialEq, Debug, PartialOrd, Ord, Hash, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
pub enum DuplexStatus {
#[default]
Half = 0,
Full = 1,
}
impl From<bool> for DuplexStatus {
fn from(val: bool) -> DuplexStatus {
if val {
DuplexStatus::Full
} else {
DuplexStatus::Half
}
}
}
impl From<DuplexStatus> for u8 {
fn from(val: DuplexStatus) -> u8 {
val as u8
}
}
#[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, Hash, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[repr(u8)]
#[allow(clippy::upper_case_acronyms)]
pub enum BufferSize {
KB0 = 0,
KB1 = 1,
KB2 = 2,
KB4 = 4,
KB8 = 8,
KB16 = 16,
}
impl From<BufferSize> for u8 {
fn from(val: BufferSize) -> u8 {
val as u8
}
}
impl TryFrom<u8> for BufferSize {
type Error = u8;
fn try_from(val: u8) -> Result<BufferSize, u8> {
match val {
x if x == BufferSize::KB0 as u8 => Ok(BufferSize::KB0),
x if x == BufferSize::KB1 as u8 => Ok(BufferSize::KB1),
x if x == BufferSize::KB2 as u8 => Ok(BufferSize::KB2),
x if x == BufferSize::KB4 as u8 => Ok(BufferSize::KB4),
x if x == BufferSize::KB8 as u8 => Ok(BufferSize::KB8),
x if x == BufferSize::KB16 as u8 => Ok(BufferSize::KB16),
_ => Err(val),
}
}
}
impl Default for BufferSize {
fn default() -> Self {
BufferSize::KB2
}
}
impl BufferSize {
pub const fn size_in_bytes(&self) -> usize {
match self {
BufferSize::KB0 => 0,
BufferSize::KB1 => 1024,
BufferSize::KB2 => 2048,
BufferSize::KB4 => 4096,
BufferSize::KB8 => 8192,
BufferSize::KB16 => 16384,
}
}
}