1use std::time::{Duration, Instant};
14
15use enpose_api::{DeviceDiscovery, PoseStream};
16
17const STREAM_DURATION: Duration = Duration::from_secs(10);
19
20fn main() -> std::io::Result<()> {
21 let devices = DeviceDiscovery::new().discover()?;
22
23 if devices.is_empty() {
24 println!("No Enpose devices found on the local network.");
25 return Ok(());
26 }
27
28 println!("Found {} device(s):", devices.len());
29 for device in &devices {
30 let status = if device.compatible {
31 "compatible"
32 } else {
33 "INCOMPATIBLE (protocol version mismatch)"
34 };
35 println!(" - {} (serial {}): {}", device.ip, device.serial, status);
36 }
37
38 let Some(device) = devices.iter().find(|d| d.compatible) else {
40 println!("No compatible device to stream poses from.");
41 return Ok(());
42 };
43
44 println!("\nStreaming poses from {} for {:?}...", device.ip, STREAM_DURATION);
45
46 let mut stream = PoseStream::from_device(device, true)?;
49
50 let start = Instant::now();
51 while start.elapsed() < STREAM_DURATION {
52 for pose in stream.receive_pose_updates(true)? {
55 println!(
56 " t={:>10}us marker {:>3}: pos=({:+.4}, {:+.4}, {:+.4}) rmse={:.4} sensors={}",
57 pose.timestamp,
58 pose.marker_id,
59 pose.x,
60 pose.y,
61 pose.z,
62 pose.position_rmse,
63 pose.sensors,
64 );
65 }
66 }
67
68 Ok(())
70}