fix: less warnings, better logging for helios broadcast

This commit is contained in:
Marc Planard 2024-08-14 18:41:47 +02:00
parent 2c0d5cd13f
commit a45abd69ec
4 changed files with 26 additions and 19 deletions

View File

@ -62,8 +62,15 @@ impl EtherdreamDevice {
} }
Ok((dac, source_addr)) => { Ok((dac, source_addr)) => {
info!("Valid broadcast, source_addr: {}", source_addr); info!("Valid broadcast, source_addr: {}", source_addr);
if source_addr.is_ipv6() { return None; } if source_addr.is_ipv6() {
if &source_addr.ip().to_string() != ip { return None; } warn!("Broadcast ignored: ipv6 address.");
return None;
}
let src_ip = source_addr.ip().to_string();
if &src_ip != ip {
warn!("Broadcast ignored: expected {ip}, got: {src_ip} ");
return None;
}
Some(Ok((dac, source_addr))) Some(Ok((dac, source_addr)))
} }
} }
@ -168,11 +175,11 @@ impl Device for EtherdreamDevice {
debug!("New chunk length: {:?}", chunk.len()); debug!("New chunk length: {:?}", chunk.len());
loop { loop {
let capacity = self.points_capacity(); let capacity = self.points_capacity();
if chunk.len() > capacity as usize { if chunk.len() > capacity {
debug!("Sleep, capacity : {:?}", capacity); debug!("Sleep, capacity : {:?}", capacity);
// Sleep for 1/100th of a sec // Sleep for 1/100th of a sec
sleep(Duration::new( 0, 10000000)); sleep(Duration::new( 0, 10000000));
self.ping(); self.ping()?;
} else { } else {
break; break;
} }
@ -181,9 +188,9 @@ impl Device for EtherdreamDevice {
match self.stream match self.stream
.queue_commands() .queue_commands()
.data( .data(
chunk.into_iter() chunk.iter()
.map(|point| (*point).into()) .map(|point| (*point).into())
.take(chunk_size as usize) .take(chunk_size)
) )
.submit() { .submit() {
Err(err) => { Err(err) => {
@ -233,8 +240,8 @@ impl Device for EtherdreamDevice {
} }
fn grid(&mut self) -> Vec<Point> { fn grid(&mut self) -> Vec<Point> {
let dim_mid = 16000 as f32; let dim_mid = 16000.0;
let dim_max = 32000 as f32; let dim_max = 32000.0;
let col_min = Color { r: 0, g: 0, b: 0 }; let col_min = Color { r: 0, g: 0, b: 0 };
let col_max = Color { r: 255, g: 255, b: 255 }; let col_max = Color { r: 255, g: 255, b: 255 };
@ -275,10 +282,10 @@ impl Iterator for SineWave {
let amp = (hz * (fract + phase) * 2.0 * std::f32::consts::PI).sin(); let amp = (hz * (fract + phase) * 2.0 * std::f32::consts::PI).sin();
let (r, g, b) = match i { let (r, g, b) = match i {
i if i == coloured_points_per_frame || i < 13 => (0, 0, 0), i if i == coloured_points_per_frame || i < 13 => (0, 0, 0),
_ => (std::u16::MAX, std::u16::MAX, std::u16::MAX), _ => (u16::MAX, u16::MAX, u16::MAX),
}; };
let x_min = std::i16::MIN; let x_min = i16::MIN;
let x_max = std::i16::MAX; let x_max = i16::MAX;
let x = (x_min as f32 + fract * (x_max as f32 - x_min as f32)) as i16; let x = (x_min as f32 + fract * (x_max as f32 - x_min as f32)) as i16;
let y = (amp * x_max as f32) as i16; let y = (amp * x_max as f32) as i16;
let control = 0; let control = 0;
@ -298,4 +305,4 @@ impl Iterator for SineWave {
self.point += 1; self.point += 1;
Some(p) Some(p)
} }
} }

View File

@ -85,8 +85,8 @@ impl Device for HeliosDevice {
fn grid(&mut self) -> Vec<Point> { fn grid(&mut self) -> Vec<Point> {
let dim_min = 0 as f32; let dim_min = 0 as f32;
let dim_mid = 2047 as f32; let dim_mid = 2047.0;
let dim_max = 4095 as f32; let dim_max = 4095.0;
let col_min = Color { r: 0, g: 0, b: 0 }; let col_min = Color { r: 0, g: 0, b: 0 };
let col_max = Color { r: 255, g: 255, b: 255 }; let col_max = Color { r: 255, g: 255, b: 255 };

View File

@ -76,7 +76,7 @@ fn run_all() -> LJResult<()> {
// Dispatch based on redis requests // Dispatch based on redis requests
while running.load(Ordering::SeqCst) { while running.load(Ordering::SeqCst) {
rs.set_status(tracer.status())?; rs.set_status(tracer.status())?;
let _ = framerate_handler.handle_time()?; framerate_handler.handle_time()?;
let order = rs.get_order(config.laser_id)?; let order = rs.get_order(config.laser_id)?;
match order { match order {
Order::Draw | Order::Black | Order::Grid => { Order::Draw | Order::Black | Order::Grid => {

View File

@ -98,10 +98,10 @@ impl RedisCtrl {
pub fn init_world_state(&mut self) -> LJResult<WorldState> { pub fn init_world_state(&mut self) -> LJResult<WorldState> {
Ok(WorldState { Ok(WorldState {
client_key: self.get_client_key().unwrap(), client_key: self.get_client_key()?,
edh: self.get_edh().unwrap(), edh: self.get_edh()?,
kpps: self.get_int("kpps").unwrap().try_into().unwrap(), kpps: self.get_int("kpps")?.try_into()?,
intensity: self.get_int("intensity").unwrap().try_into().unwrap(), intensity: self.get_int("intensity")?.try_into()?,
..WorldState::default() ..WorldState::default()
}) })
} }