2个版本

0.1.1 2020年10月26日
0.1.0 2020年10月23日

#1559 in 网络编程

MIT许可证

3MB
32K SLoC

C++ 26K SLoC // 0.1% comments Visual Studio Project 3.5K SLoC Rust 3K SLoC // 0.2% comments Visual Studio Solution 270 SLoC C 153 SLoC // 0.2% comments Shell 31 SLoC // 0.3% comments Python 27 SLoC // 0.2% comments Batch 25 SLoC Forge Config 21 SLoC Perl 20 SLoC // 0.4% comments

liblsl库的Rust绑定

为lab streaming layer (LSL)的主要网络库liblsl提供安全的高层绑定。

lab streaming layer是一个本地网络上的对等pub/sub系统,允许应用程序和机器之间实时交换多通道时间序列(及其元数据),具有内置的跨设备时间同步。

最常见的用例是在实验室环境中,例如,使来自不同硬件(例如传感器)的仪器数据实时可访问客户端程序(例如实验脚本、录制程序、流查看器或实时处理软件)。LSL的主要特性之一是统一的API,它允许客户端用几行代码从许多设备类型(如EEG、眼动、音频、人机界面设备、事件等)读取格式化的多通道数据。

示例

请参阅git仓库中examples/文件夹中的脚本,以获取以下代码的完整注释版本。其他用例的示例也可以在那里找到。

向LSL发送数据

use lsl;
use lsl::Pushable;

fn main() -> Result<(), lsl::Error> {
    // declare a stream and create an outlet
    let info = lsl::StreamInfo::new(
        "BioSemi", "EEG", 8, 100.0,
        lsl::ChannelFormat::Float32, "myid234365")?;
    let outlet = lsl::StreamOutlet::new(&info, 0, 360)?;

    // stream some 8-channel data
    loop {
        let sample = vec![1, 2, 3, 4, 5, 6, 7, 8];
        outlet.push_sample(&sample)?;
        std::thread::sleep(std::time::Duration::from_millis(10));
    }
}

从LSL接收数据

use lsl;
use lsl::Pullable;

fn main() -> Result<(), lsl::Error> {

    // resolve a data stream and create an inlet to read from it
    let res = lsl::resolve_bypred("name='BioSemi' and type='EEG'", 1, lsl::FOREVER)?;
    let inl = lsl::StreamInlet::new(&res[0], 360, 0, true)?;

    // read the streaming data and print the multi-channel samples 
    loop {
        let (sample, ts): (Vec<f32>, _) = inl.pull_sample(lsl::FOREVER)?;
        println!("got {:?} at time {}", sample, ts);
    }
}

添加为依赖项

Cargo.toml中的依赖项中添加新条目

[dependencies]
lsl = "0.1.1"

在您的代码中添加以下内容

use lsl;

获取源代码

git clone --recurse-submodules https://github.com/labstreaminglayer/liblsl-rust

编译

此crate目前将liblsl库静态链接(如果系统库存在,动态链接计划在未来版本中实现)。要编译此crate(以及本地库),您需要

  • 需要安装 CMake 3.12 或更高版本。如果您通过系统包管理器安装(例如,在 MacOS 上如果您有 Homebrew 则使用 brew install cmake,或者在 Ubuntu 上使用 sudo apt-get install cmake),这可能已经包含了第二个依赖项(系统编译器),因此构建可能已经成功。
  • 系统编译器;在 Windows 上 MS Visual Studio 2019(较旧版本也可能适用),在 Linux 上 build-essentials,以及在 MacOS XCode CLI。

满足这些依赖项后,包应该可以为您编译。以下目标已经使用此库进行了测试

* x86_64-pc-windows-msvc
* x86_64-unknown-linux-gnu
* x86_64-apple-darwin

API 文档

最新版本的文档可以在 docs.rs 找到。

lsl-sys

lsl 库依赖于一个更低级的 lsl-sys 库,该库提供了原始(不安全)的本地库绑定。不建议直接使用该库(您几乎可以编写 C 语言代码)。这些绑定是自动生成的,并且可以通过遵循该库的 readme 中的说明更新到更新的上游本地库版本。

贡献

除非您明确声明,否则您提交给 lsl 库的任何贡献都将按照 MIT 许可证授权,不附加任何额外条款或条件。

依赖项