pub mod buffer_estimator;
pub mod stream;
pub use self::buffer_estimator::BufferEstimator;
pub use self::stream::Stream;
use crate::protocols::lasercube_wifi::protocol::DeviceInfo;
use std::fmt;
use std::net::{IpAddr, SocketAddr};
use std::ops;
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Addressed {
pub source_addr: SocketAddr,
pub dac: Dac,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct Dac {
pub version: u8,
pub max_buffer_space: u16,
pub ip_addr: IpAddr,
pub status: Status,
}
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
pub struct Status {
pub free_buffer_space: u16,
pub point_rate: u32,
pub output_enabled: bool,
}
impl Addressed {
pub fn from_discovery(info: &DeviceInfo, source_addr: SocketAddr) -> Self {
let dac = Dac {
version: info.version,
max_buffer_space: info.max_buffer_space,
ip_addr: source_addr.ip(),
status: Status {
free_buffer_space: info.max_buffer_space,
point_rate: 0,
output_enabled: false,
},
};
Addressed { source_addr, dac }
}
}
impl ops::Deref for Addressed {
type Target = Dac;
fn deref(&self) -> &Self::Target {
&self.dac
}
}
impl ops::DerefMut for Addressed {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.dac
}
}
impl fmt::Display for Dac {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"LaserCube @ {} (v{}, buffer: {})",
self.ip_addr, self.version, self.max_buffer_space
)
}
}