fn main() -> rtlsdr::Result<()> {
let devices = rtlsdr::get_devices();
println!("Found {} device(s)", devices.len());
let mut device = devices[0];
device.open()?;
let (manufacturer, product, serial) = device.get_usb_device_strings()?;
println!("Device: {manufacturer} {product} {serial}");
device.set_center_freq(101_700_000)?; device.set_direct_sampling(rtlsdr::DirectSampling::Disabled)?;
device.set_tuner_bandwidth(0)?;
device.set_agc_mode(true)?;
device.set_tuner_gain_mode(false)?;
device.reset_buffer()?;
let mut buf = [0u8; 1024];
let n_read = device.read(&mut buf)?;
println!("Read {} bytes of data", n_read);
println!("Starting asynchronous reading for 3 seconds...");
let start = std::time::Instant::now();
device.start_reading(
|data| {
let avg = data.iter().map(|&b| b as u32).sum::<u32>() as f32 / data.len() as f32;
println!(
"Received {} bytes of data, average value: {:.2}",
data.len(),
avg
);
start.elapsed().as_secs_f32() >= 3.0
},
0,
0,
)?;
println!("Finished asynchronous reading.");
Ok(())
}