use crate::CsiConfig;
use crate::wire::Bandwidth;
#[derive(Debug, Clone, Default)]
pub struct MeasurementSetup {
id: u8,
periodicity_hz: Option<u16>,
bandwidth: Option<Bandwidth>,
acquisition: Option<CsiConfig>,
}
impl MeasurementSetup {
pub fn new() -> Self {
Self::default()
}
pub fn periodicity_hz(mut self, hz: u16) -> Self {
self.periodicity_hz = Some(hz);
self
}
pub fn bandwidth(mut self, bandwidth: Bandwidth) -> Self {
self.bandwidth = Some(bandwidth);
self
}
pub fn acquisition(mut self, acquisition: CsiConfig) -> Self {
self.acquisition = Some(acquisition);
self
}
pub fn id(mut self, id: u8) -> Self {
self.id = id;
self
}
pub fn get_periodicity_hz(&self) -> Option<u16> {
self.periodicity_hz
}
pub fn get_bandwidth(&self) -> Option<Bandwidth> {
self.bandwidth
}
pub fn get_acquisition(&self) -> Option<&CsiConfig> {
self.acquisition.as_ref()
}
pub fn get_id(&self) -> u8 {
self.id
}
pub(crate) fn set_periodicity_hz(&mut self, hz: Option<u16>) {
self.periodicity_hz = hz;
}
pub(crate) fn set_acquisition(&mut self, acquisition: Option<CsiConfig>) {
self.acquisition = acquisition;
}
pub(crate) fn set_id(&mut self, id: u8) {
self.id = id;
}
}
impl From<&MeasurementSetup> for crate::wire::MeasurementSetup {
fn from(setup: &MeasurementSetup) -> Self {
let mut acquisition = crate::wire::AcquisitionFilter::default();
acquisition.bandwidth = setup.bandwidth;
let mut wire = crate::wire::MeasurementSetup::new(setup.id).with_acquisition(acquisition);
if let Some(hz) = setup.periodicity_hz {
wire = wire.with_stimulus(crate::wire::StimulusParams::new(
1_000_000 / hz.max(1) as u32,
setup.bandwidth.unwrap_or(Bandwidth::Mhz20),
));
}
wire
}
}