use fleascope_rs::{FleaScope, ProbeType, Waveform};
use std::time::Duration;
fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::init();
println!("FleaScope CLI Reader");
println!("===================");
println!("Connecting to FleaScope...");
let mut fleascope = FleaScope::connect(None, None, true)?;
println!("Connected to: {}", fleascope.get_hostname());
println!("Setting up sine wave at 1000 Hz...");
fleascope.set_waveform(Waveform::Sine, 1000)?;
println!("Reading data...");
let start_time = std::time::Instant::now();
let lazy_frame = fleascope.read(
ProbeType::X1,
Duration::from_millis(100), None, None, )?;
let read_duration = start_time.elapsed();
let dataframe = lazy_frame.collect()?;
println!(
"Read {} data points in {:?}",
dataframe.height(),
read_duration
);
if let (Ok(time_col), Ok(voltage_col)) = (dataframe.column("time"), dataframe.column("bnc")) {
if let (Ok(time_series), Ok(voltage_series)) = (time_col.f64(), voltage_col.f64()) {
let time_values: Vec<f64> = time_series.into_no_null_iter().collect();
let voltage_values: Vec<f64> = voltage_series.into_no_null_iter().collect();
if !voltage_values.is_empty() {
let min_voltage = voltage_values.iter().fold(f64::INFINITY, |a, &b| a.min(b));
let max_voltage = voltage_values
.iter()
.fold(f64::NEG_INFINITY, |a, &b| a.max(b));
let avg_voltage = voltage_values.iter().sum::<f64>() / voltage_values.len() as f64;
let time_span =
time_values.last().unwrap_or(&0.0) - time_values.first().unwrap_or(&0.0);
println!("\nData Analysis:");
println!("Time span: {:.6} seconds", time_span);
println!("Voltage range: {:.3}V to {:.3}V", min_voltage, max_voltage);
println!("Average voltage: {:.3}V", avg_voltage);
println!(
"Sample rate: {:.1} Hz",
voltage_values.len() as f64 / time_span
);
}
}
}
println!("\nFirst 10 data points:");
println!("{}", dataframe.head(Some(10)));
Ok(())
}