#recording #reading #mea #live-data #rust

finalspark-rs

A Rust library for live data recording from MEA devices

3 releases

0.1.5 Mar 13, 2025
0.1.4 Mar 12, 2025
0.1.3 Mar 7, 2025

#125 in Biology

Download history 115/week @ 2025-03-05 274/week @ 2025-03-12

389 downloads per month

MIT license

19KB
240 lines

FinalSpark-RS

FinalSpark-RS is a Rust library for live data recording from MEA (Microelectrode Array) devices. It enables real-time data acquisition and processing from MEA devices over a network connection.

Features

  • Connects to an MEA server to retrieve live data
  • Supports both single-sample and multi-sample data recording
  • Uses tokio for asynchronous networking
  • Structured data output with timestamps and electrode readings

Installation

Add finalspark-rs to your Cargo.toml:

[dependencies]
finalspark-rs = { git = "https://github.com/maidenlabs/finalspark-rs.git" }
tokio = { version = "1.0", features = ["full"] }

Usage

Basic Setup

use finalspark_rs::LiveMEA;

#[tokio::main]
async fn main() {
    let live_mea = LiveMEA::new();
    
    // Record a single sample
    match live_mea.record_sample(1).await {
        Ok(data) => {
            println!("Recorded sample with timestamp: {}", data.timestamp);
            println!("Number of electrodes: {}", data.data.len());
            println!("Samples per electrode: {}", data.data[0].len());
        },
        Err(e) => eprintln!("Error recording sample: {}", e),
    }
}

Recording Multiple Samples

use finalspark_rs::LiveMEA;

#[tokio::main]
async fn main() {
    let live_mea = LiveMEA::new();

    match live_mea.record_n_samples(1, 5).await {
        Ok(samples) => {
            println!("Successfully recorded {} samples", samples.len());
            for (i, sample) in samples.iter().enumerate() {
                println!("Sample {} timestamp: {}", i + 1, sample.timestamp);
            }
        },
        Err(e) => eprintln!("Error recording samples: {}", e),
    }
}

Data Structure

The LiveData struct contains:

  • timestamp: String in RFC3339 format representing when the sample was recorded
  • data: 2D vector containing electrode readings where:
    • First dimension: 32 electrodes
    • Second dimension: 4096 samples per electrode

Dependencies

  • tokio - Async runtime and networking
  • serde & serde_json - Data serialization
  • chrono - Timestamp handling
  • tokio-tungstenite - WebSocket communication
  • url - URL parsing and handling

License

This project is licensed under the MIT License. See LICENSE for details.

Contributing

Contributions are welcome! Please submit an issue or pull request on GitHub.

Dependencies

~7–20MB
~270K SLoC