use std::time::{Duration, Instant};
use enpose_api::{DeviceDiscovery, PoseStream};
const STREAM_DURATION: Duration = Duration::from_secs(10);
fn main() -> std::io::Result<()> {
let devices = DeviceDiscovery::new().discover()?;
if devices.is_empty() {
println!("No Enpose devices found on the local network.");
return Ok(());
}
println!("Found {} device(s):", devices.len());
for device in &devices {
let status = if device.compatible {
"compatible"
} else {
"INCOMPATIBLE (protocol version mismatch)"
};
println!(" - {} (serial {}): {}", device.ip, device.serial, status);
}
let Some(device) = devices.iter().find(|d| d.compatible) else {
println!("No compatible device to stream poses from.");
return Ok(());
};
println!("\nStreaming poses from {} for {:?}...", device.ip, STREAM_DURATION);
let mut stream = PoseStream::from_device(device, true)?;
let start = Instant::now();
while start.elapsed() < STREAM_DURATION {
for pose in stream.receive_pose_updates(true)? {
println!(
" t={:>10}us marker {:>3}: pos=({:+.4}, {:+.4}, {:+.4}) rmse={:.4} sensors={}",
pose.timestamp,
pose.marker_id,
pose.x,
pose.y,
pose.z,
pose.position_rmse,
pose.sensors,
);
}
}
Ok(())
}