#![doc = include_str!("../README.md")]
#![no_std]
use smoltcp::{
phy,
phy::DeviceCapabilities,
time::Instant,
};
mod ext;
mod token;
pub use ext::DynPhyExt;
pub use token::*;
pub trait DynPhy {
fn dyn_receive(&mut self, timestamp: Instant) -> Option<(DynRxToken<'_>, DynTxToken<'_>)>;
fn dyn_transmit(&mut self, timestamp: Instant) -> Option<DynTxToken<'_>>;
fn capabilities(&self) -> DeviceCapabilities;
}
impl<D> DynPhy for D
where
D: phy::Device,
{
#[inline]
fn dyn_receive(&mut self, timestamp: Instant) -> Option<(DynRxToken, DynTxToken)> {
let (rx, tx) = self.receive(timestamp)?;
let dyn_rx = DynRxToken::new(rx);
let dyn_tx = DynTxToken::new(tx);
Some((dyn_rx, dyn_tx))
}
#[inline]
fn dyn_transmit(&mut self, timestamp: Instant) -> Option<DynTxToken> {
let tx = self.transmit(timestamp)?;
Some(DynTxToken::new(tx))
}
#[inline]
fn capabilities(&self) -> DeviceCapabilities {
self.capabilities()
}
}