15 个版本 (破坏性更新)
0.12.0 | 2024 年 7 月 31 日 |
---|---|
0.11.0 | 2024 年 2 月 22 日 |
0.10.0 | 2023 年 9 月 15 日 |
0.8.0 | 2023 年 6 月 13 日 |
0.1.0 | 2022 年 12 月 31 日 |
#144 在 硬件支持
每月 236 次下载
在 futuresdr 中使用
160KB
4K SLoC
Seify! 一个 Rusty SDR 硬件抽象库
目标
通往出色的 Rust SDR 驱动程序生态系统的清晰路径。
- Seify 为 Soapy 提供了实现,因此支持几乎所有可用的 SDR 前端。
- Seify 支持具有动态分发的类型化和泛型设备。对于类型化版本,没有或最小化开销,即没有理由不使用 Seify。
- 一旦有更多本机 Rust 驱动程序可用,它们可以被添加到 Seify 中,并逐步从 Soapy 转移到纯 Rust 驱动程序。
- 通往适当的异步和 WASM WebUSB 的清晰路径。
- 零安装:Rust 驱动程序不需要基础系统的库。它们要么基于网络/http,要么使用
rusb
,它提供libusb
。 - 为 Rust 驱动程序提供适当的驱动程序集成(例如,核心库中没有线程)。
- Rust 驱动程序通过每个二进制文件的 crate 功能添加,并不依赖于系统范围的库。
- 为 Rust SDR 驱动程序提供一个框架,以避免在生态系统中驱动程序实现的分歧概念。
硬件驱动程序
要添加新的 SDR 驱动程序,请在 src/impls
文件夹中添加一个实现 DeviceTrait
的结构体,并将驱动程序的特性逻辑添加到 src/device.rs
中的探测/枚举逻辑中。
目前,Seify 被设计为将驱动程序实现提交到上游,即没有插件系统。这可能会添加,但不是当前的重点。虽然这集中在 Seify 的维护工作上,但简化了用户的工作,用户只需将 Seify 添加到项目中,并启用其 SDR 的功能标志。
示例
use num_complex::Complex32;
use seify::Device;
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
let dev = Device::new()?;
let mut samps = [Complex32::new(0.0, 0.0); 1024];
let mut rx = dev.rx_streamer(&[0])?;
rx.activate()?;
let n = rx.read(&mut [&mut samps], 200000)?;
println!("read {n} samples");
Ok(())
}
依赖项
~3–10MB
~113K SLoC