2个版本
0.1.1 | 2020年10月26日 |
---|---|
0.1.0 | 2020年10月23日 |
#1559 in 网络编程
3MB
32K SLoC
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 许可证授权,不附加任何额外条款或条件。