autd3-rs-core 0.3.0

Core types and link abstraction shared across the AUTD3 phased-array sdk crates.
Documentation
use super::DeviceState;

#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LinkStatus {
    pub devices: Vec<DeviceState>,
    pub recoveries: u64,
}

impl LinkStatus {
    #[must_use]
    pub fn new(num_devices: usize) -> Self {
        Self {
            devices: vec![DeviceState::Op; num_devices],
            recoveries: 0,
        }
    }

    #[must_use]
    pub fn all_op(&self) -> bool {
        self.devices.iter().all(|s| *s == DeviceState::Op)
    }

    #[must_use]
    pub fn any_lost(&self) -> bool {
        self.devices.contains(&DeviceState::Lost)
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn link_status_predicates() {
        let status = LinkStatus::new(2);
        assert!(status.all_op());
        assert!(!status.any_lost());

        let status = LinkStatus {
            devices: vec![DeviceState::Op, DeviceState::Lost],
            recoveries: 0,
        };
        assert!(!status.all_op());
        assert!(status.any_lost());
    }
}