feat: Mode to register value and common mode impls
- make crate no_std when not running tests Signed-off-by: Lachezar Lechev <elpiel93@gmail.com>
This commit is contained in:
parent
30b61de2eb
commit
a858bd815a
1 changed files with 50 additions and 10 deletions
60
src/lib.rs
60
src/lib.rs
|
|
@ -1,4 +1,4 @@
|
||||||
#![no_std]
|
#![cfg_attr(not(test), no_std)]
|
||||||
#![allow(unused)]
|
#![allow(unused)]
|
||||||
#![deny(rustdoc::broken_intra_doc_links)]
|
#![deny(rustdoc::broken_intra_doc_links)]
|
||||||
#![doc = include_str!("../README.md")]
|
#![doc = include_str!("../README.md")]
|
||||||
|
|
@ -14,50 +14,68 @@ pub mod tcp;
|
||||||
pub mod udp;
|
pub mod udp;
|
||||||
mod uninitialized_device;
|
mod uninitialized_device;
|
||||||
|
|
||||||
pub use device::{Device, DeviceRefMut, InactiveDevice};
|
#[doc(inline)]
|
||||||
pub use host::{Dhcp, Host, HostConfig, Manual};
|
pub use self::{
|
||||||
pub use net::MacAddress;
|
device::{Device, DeviceRefMut, InactiveDevice},
|
||||||
pub use uninitialized_device::{InitializeError, UninitializedDevice};
|
host::{Dhcp, Host, HostConfig, Manual},
|
||||||
|
net::MacAddress,
|
||||||
|
uninitialized_device::{InitializeError, UninitializedDevice}
|
||||||
|
};
|
||||||
|
|
||||||
|
use register::common;
|
||||||
|
|
||||||
// TODO add better docs to all public items, add unit tests.
|
// TODO add better docs to all public items, add unit tests.
|
||||||
|
|
||||||
/// Settings for wake on LAN. Allows the W5500 to optionally emit an interrupt upon receiving a packet
|
/// Settings for wake on LAN. Allows the W5500 to optionally emit an interrupt upon receiving a packet
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq, Eq)]
|
||||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
pub enum OnWakeOnLan {
|
pub enum OnWakeOnLan {
|
||||||
InvokeInterrupt = 0b00100000,
|
InvokeInterrupt = 0b00100000,
|
||||||
Ignore = 0b00000000,
|
Ignore = 0b00000000,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Ping Block Mode
|
||||||
|
///
|
||||||
/// Settings for ping. Allows the W5500 to respond to or ignore network ping requests
|
/// Settings for ping. Allows the W5500 to respond to or ignore network ping requests
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq, Eq)]
|
||||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
pub enum OnPingRequest {
|
pub enum OnPingRequest {
|
||||||
|
/// 0: Disable Ping block
|
||||||
Respond = 0b00000000,
|
Respond = 0b00000000,
|
||||||
|
/// 1 : Enable Ping block
|
||||||
|
///
|
||||||
|
/// If the bit is ‘1’, it blocks the response to a ping request.
|
||||||
Ignore = 0b00010000,
|
Ignore = 0b00010000,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Use [ConnectionType::PPoE] when talking
|
/// Use [ConnectionType::PPoE] when talking
|
||||||
/// to an ADSL modem. Otherwise use [ConnectionType::Ethernet]
|
/// to an ADSL modem. Otherwise use [ConnectionType::Ethernet]
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)]
|
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq, Eq)]
|
||||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
pub enum ConnectionType {
|
pub enum ConnectionType {
|
||||||
PPoE = 0b00001000,
|
PPoE = 0b00001000,
|
||||||
Ethernet = 0b00000000,
|
Ethernet = 0b00000000,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq)]
|
/// Force ARP
|
||||||
|
///
|
||||||
|
#[derive(Copy, Clone, Debug, PartialOrd, PartialEq, Eq)]
|
||||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
pub enum ArpResponses {
|
pub enum ArpResponses {
|
||||||
|
/// 0 : Disable Force ARP mode
|
||||||
Cache = 0b00000000,
|
Cache = 0b00000000,
|
||||||
|
/// 1 : Enable Force ARP mode
|
||||||
|
///
|
||||||
|
/// In Force ARP mode, It forces on sending ARP Request whenever data is
|
||||||
|
/// sent.
|
||||||
DropAfterUse = 0b00000010,
|
DropAfterUse = 0b00000010,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
||||||
pub struct Mode {
|
pub struct Mode {
|
||||||
pub on_wake_on_lan: OnWakeOnLan,
|
pub on_wake_on_lan: OnWakeOnLan,
|
||||||
|
|
@ -66,6 +84,28 @@ pub struct Mode {
|
||||||
pub arp_responses: ArpResponses,
|
pub arp_responses: ArpResponses,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Mode {
|
||||||
|
pub fn to_register(self) -> [u8; 1] {
|
||||||
|
[self.to_u8()]
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn to_u8(self) -> u8 {
|
||||||
|
let mut register = 0;
|
||||||
|
register |= self.on_wake_on_lan as u8;
|
||||||
|
register |= self.on_ping_request as u8;
|
||||||
|
register |= self.connection_type as u8;
|
||||||
|
register |= self.arp_responses as u8;
|
||||||
|
|
||||||
|
register
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<Mode> for common::Mode {
|
||||||
|
fn from(value: Mode) -> Self {
|
||||||
|
Self::Mode(value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Default for Mode {
|
impl Default for Mode {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue