Send config to laser on connect

This commit is contained in:
Ruben van de Ven 2025-10-17 17:30:43 +02:00
parent b4a1bf1597
commit 966632c490

View file

@ -455,6 +455,26 @@ fn raw_window_event(_app: &App, model: &mut GuiModel, event: &nannou::winit::eve
model.egui.handle_raw_event(event);
}
// when connecting the dac, it does not correctly send/set the pps and other settings
// so run this awkward sequence to make sure they're all set
// this probably can be done more elegantly...
fn double_send_settings_at_connect(laser_settings: &LaserSettings, stream: &laser::FrameStream<LaserModel>) {
stream.set_point_hz(laser_settings.point_hz).ok();
stream.set_latency_points(laser_settings.latency_points).ok();
stream.set_frame_hz(laser_settings.frame_hz).ok();
stream
.enable_optimisations(laser_settings.enable_optimisations)
.ok();
stream
.enable_draw_reorder(laser_settings.enable_draw_reorder)
.ok();
stream.set_distance_per_point(laser_settings.distance_per_point).ok();
stream.set_blank_delay_points(laser_settings.blank_delay_points).ok();
stream.set_radians_per_point(laser_settings.radians_per_point).ok();
}
fn update(_app: &App, model: &mut GuiModel, update: Update) {
// First, check for new laser DACs.
for dac in model.dac_rx.try_recv() {
@ -473,6 +493,7 @@ fn update(_app: &App, model: &mut GuiModel, update: Update) {
.build()
.expect("failed to establish stream with newly detected DAC");
// dbg!(stream.enable_draw_reorder());
double_send_settings_at_connect(&model.laser_settings, &stream);
model.laser_streams.insert(dac.id(), stream);
// match save_config_file("./config.json", model.per_laser_config.clone().into()) {
@ -522,6 +543,7 @@ fn update(_app: &App, model: &mut GuiModel, update: Update) {
Err(err) => eprintln!("failed to restart stream: {}", err),
Ok(stream) => {
println!("Reinsert stream. {:?}", dac_id);
double_send_settings_at_connect(&model.laser_settings, &stream);
model.laser_streams.insert(dac_id, stream);
},
}
@ -530,6 +552,8 @@ fn update(_app: &App, model: &mut GuiModel, update: Update) {
}
// check if new messages have arrived. Update the model with new data.
zmq_receive(model);
@ -760,32 +784,6 @@ fn update(_app: &App, model: &mut GuiModel, update: Update) {
}
});
// if ui
// .add_enabled(laser_settings.enable_optimisations,
// egui::Checkbox::new(&mut laser_settings.enable_draw_reorder,"Reorder paths")
// )
// // .checkbox(&mut laser_settings.enable_draw_reorder, "Reorder paths")
// .changed()
// {
// for (_dac_id, stream) in laser_streams.iter() {
// stream
// .enable_draw_reorder(laser_settings.enable_draw_reorder)
// .ok();
// }
// }
if ui
.add(egui::Slider::new(&mut selected_config.filters.dim.intensity, 0.0..=1.).text("Dimming"))
.changed()
{
let factor = selected_config.filters.dim.intensity;
if let Some(stream) = selected_laser_stream {
stream.send(move |laser_model: &mut LaserModel| {
laser_model.config.filters.dim.intensity = factor;
}).unwrap();
}
}
if ui
.add(egui::Slider::new(&mut selected_config.filters.dim.intensity, 0.0..=1.).text("Dimming"))
.changed()