use esp_radio::esp_now::WifiPhyRate;
use esp_radio::wifi::SecondaryChannel;
use crate::node::{WifiApConfig, WifiSnifferConfig, WifiStationConfig};
pub struct EspNowConfig {
phy_rate: WifiPhyRate,
pub(crate) channel: u8,
peer_mac: Option<[u8; 6]>,
secondary_channel: Option<SecondaryChannel>,
force_phy: bool,
}
impl Default for EspNowConfig {
fn default() -> Self {
Self {
phy_rate: WifiPhyRate::RateMcs0Lgi,
channel: 1,
peer_mac: None,
secondary_channel: None,
force_phy: false,
}
}
}
impl EspNowConfig {
pub fn fast_default() -> Self {
Self::default().with_phy_rate(WifiPhyRate::RateMcs7Lgi)
}
pub fn with_channel(mut self, channel: u8) -> Self {
self.channel = channel;
self
}
pub fn with_phy_rate(mut self, phy_rate: WifiPhyRate) -> Self {
self.phy_rate = phy_rate;
self.force_phy = true;
self
}
pub fn with_peer_mac(mut self, peer_mac: [u8; 6]) -> Self {
self.peer_mac = Some(peer_mac);
self
}
pub fn channel(&self) -> u8 {
self.channel
}
pub fn phy_rate(&self) -> &WifiPhyRate {
&self.phy_rate
}
pub fn peer_mac(&self) -> Option<[u8; 6]> {
self.peer_mac
}
pub fn with_ht40(mut self, secondary: SecondaryChannel) -> Self {
self.secondary_channel = Some(secondary);
self.force_phy = true;
self
}
pub fn secondary_channel(&self) -> Option<SecondaryChannel> {
self.secondary_channel
}
pub fn force_phy(&self) -> bool {
self.force_phy
}
}
pub enum CentralOpMode {
EspNow(EspNowConfig),
WifiStation(WifiStationConfig),
WifiAccessPoint(WifiApConfig),
EspNowFastCollector(EspNowConfig),
}
pub enum PeripheralOpMode {
EspNow(EspNowConfig),
WifiSniffer(WifiSnifferConfig),
EspNowFastSource(EspNowConfig),
}
pub enum Node {
Peripheral(PeripheralOpMode),
Central(CentralOpMode),
}
#[derive(PartialEq, Eq, Clone, Copy)]
pub enum CollectionMode {
Collector,
Listener,
}