use anyhow::Result;
use emotiv::client::{CortexClient, CortexClientConfig};
use emotiv::types::*;
#[tokio::main]
async fn main() -> Result<()> {
env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init();
let streams = &["eeg", "mot", "met", "pow"];
{
let client_id = std::env::var("EMOTIV_CLIENT_ID")
.expect("Set EMOTIV_CLIENT_ID environment variable");
let client_secret = std::env::var("EMOTIV_CLIENT_SECRET")
.expect("Set EMOTIV_CLIENT_SECRET environment variable");
let config = CortexClientConfig {
client_id,
client_secret,
..Default::default()
};
let client = CortexClient::new(config);
let (mut rx, handle) = client.connect().await?;
while let Some(event) = rx.recv().await {
match event {
CortexEvent::SessionCreated(id) => {
println!("Session created: {id}");
handle.subscribe(streams).await?;
}
CortexEvent::DataLabels(labels) => {
println!("{} labels are: {:?}", labels.stream_name, labels.labels);
}
CortexEvent::Eeg(data) => {
println!("eeg data: {:?}", data);
}
CortexEvent::Motion(data) => {
println!("motion data: {:?}", data);
}
CortexEvent::Dev(data) => {
println!("dev data: {:?}", data);
}
CortexEvent::Metrics(data) => {
println!("pm data: {:?}", data);
}
CortexEvent::BandPower(data) => {
println!("pow data: {:?}", data);
}
CortexEvent::Disconnected => {
println!("Disconnected");
break;
}
CortexEvent::Error(msg) => {
eprintln!("Error: {msg}");
}
_ => {}
}
}
}
Ok(())
}