kawaiifi 0.2.0

Wi-Fi scanning library for Linux, macOS, and Windows.
Documentation
use deku::{DekuRead, DekuWrite};
use serde::{Deserialize, Serialize};

use crate::ies::{Field, IeId};

#[derive(Debug, Clone, PartialEq, Eq, Hash, DekuRead, DekuWrite, Serialize, Deserialize)]
pub struct OverlappingBssScanParams {
    #[deku(bytes = 2)]
    pub obss_scan_passive_dwell_tu: u16,
    #[deku(bytes = 2)]
    pub obss_scan_active_dwell_tu: u16,
    #[deku(bytes = 2)]
    pub bss_channel_width_trigger_scan_interval_secs: u16,
    #[deku(bytes = 2)]
    pub obss_scan_passive_total_per_channel_tu: u16,
    #[deku(bytes = 2)]
    pub obss_scan_active_total_per_channel_tu: u16,
    #[deku(bytes = 2)]
    pub bss_width_channel_transition_delay_factor: u16,
    #[deku(bytes = 2)]
    pub obss_scan_activity_threshold: u16,
}

impl OverlappingBssScanParams {
    pub const NAME: &'static str = "Overlapping BSS Scan Parameters";
    pub const ID: u8 = 74;
    pub const ID_EXT: Option<u8> = None;
    pub(crate) const IE_ID: IeId = IeId::new(Self::ID, Self::ID_EXT);
    pub const LENGTH: usize = 14;

    pub fn summary(&self) -> String {
        "".to_string()
    }

    pub fn fields(&self) -> Vec<Field> {
        vec![
            Field::builder()
                .title("OBSS Scan Passive Dwell")
                .value(self.obss_scan_passive_dwell_tu)
                .units("TU")
                .bytes(self.obss_scan_passive_dwell_tu.to_le_bytes().to_vec())
                .build(),
            Field::builder()
                .title("OBSS Scan Active Dwell")
                .value(self.obss_scan_active_dwell_tu)
                .units("TU")
                .bytes(self.obss_scan_active_dwell_tu.to_le_bytes().to_vec())
                .build(),
            Field::builder()
                .title("BSS Channel Width Trigger Scan Interval")
                .value(self.bss_channel_width_trigger_scan_interval_secs)
                .units("seconds")
                .bytes(
                    self.bss_channel_width_trigger_scan_interval_secs
                        .to_le_bytes()
                        .to_vec(),
                )
                .build(),
            Field::builder()
                .title("OBSS Scan Passive Total Per Channel")
                .value(self.obss_scan_passive_total_per_channel_tu)
                .units("TU")
                .bytes(
                    self.obss_scan_passive_total_per_channel_tu
                        .to_le_bytes()
                        .to_vec(),
                )
                .build(),
            Field::builder()
                .title("OBSS Scan Active Total Per Channel")
                .value(self.obss_scan_active_total_per_channel_tu)
                .units("TU")
                .bytes(
                    self.obss_scan_active_total_per_channel_tu
                        .to_le_bytes()
                        .to_vec(),
                )
                .build(),
            Field::builder()
                .title("BSS Width Channel Transition Delay Factor")
                .value(self.bss_width_channel_transition_delay_factor)
                .bytes(
                    self.bss_width_channel_transition_delay_factor
                        .to_le_bytes()
                        .to_vec(),
                )
                .build(),
            Field::builder()
                .title("OBSS Scan Activity Threshold")
                .value(
                    format!(
                        "{:.2}%",
                        f64::from(self.obss_scan_activity_threshold) / 100.0
                    )
                    .trim_end_matches("0")
                    .trim_end_matches("."),
                )
                .units(format!("({})", self.obss_scan_activity_threshold))
                .bytes(self.obss_scan_activity_threshold.to_le_bytes().to_vec())
                .build(),
        ]
    }
}