brainvision 0.0.1

Rust library and TUI for Brain Products BrainVision RDA EEG streams over TCP/IP
Documentation
//! CLI: connect to BrainVision Recorder RDA and print sample data.

use brainvision::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();

    let host = std::env::var("BRAINVISION_HOST").unwrap_or_else(|_| "127.0.0.1".into());
    let port = std::env::var("BRAINVISION_PORT")
        .ok()
        .and_then(|s| s.parse::<u16>().ok())
        .unwrap_or(RDA_PORT_I16);

    println!("BrainVision RDA — Rust CLI\n");
    println!("Connecting to {host}:{port} ...");
    let mut dev = BrainVisionDevice::connect(&host, port)?;

    let h = dev.wait_for_start()?;
    println!("Channels: {}", h.channel_count);
    println!("Sampling: {:.2} Hz", h.sampling_rate_hz());

    let n = (h.sampling_rate_hz() as u32).max(1) * 4;
    let scans = dev.capture(n)?;
    println!("Captured {} scans", scans.len());

    for (i, s) in scans.iter().take(5).enumerate() {
        println!("[{i}] {:?}", &s.eeg()[..s.eeg().len().min(8)]);
    }

    dev.close();
    Ok(())
}