seify

Crates.ioseify
lib.rsseify
version
sourcesrc
created_at2022-12-31 06:55:23.32584
updated_at2024-11-08 10:22:28.264092
descriptionShiny Samples from your Rusty SDR
homepagehttps://www.futuresdr.org
repositoryhttps://github.com/FutureSDR/seify
max_upload_size
id748274
Cargo.toml error:TOML parse error at line 17, column 1 | 17 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include`
size0
Bastian Bloessl (bastibl)

documentation

https://docs.rs/seify/

README

Seify! A Rusty SDR Hardware Abstraction Library

Goals

A clear path towards a great Rust SDR driver ecosystem.

  • Seify has an implementation for Soapy and, therefore, supports basically all available SDR frontends.
  • Seify supports both typed and generic devices with dynamic dispatch. There is no or minimal overhead for the typed version, i.e., there should be no reason not to use Seify.
  • Once more native Rust drivers become available, they can be added to Seify and gradually move from Soapy to pure-Rust drivers.
  • A clear path towards a proper async and WASM WebUSB.
  • Zero-installation: Rust drivers need no libraries from the base system. Either they are network/http-based or they use rusb, which vendors libusb.
  • Proper driver integration for Rust drivers (e.g., no threads in the core library).
  • Rust drivers are added with crate features per binary and do not rely on system-wide libraries.
  • Provide a framework for Rust SDR drivers, to avoid diverging concepts of driver implementations in the ecosystem.

Hardware Drivers

To add a new SDR driver, add a struct, implementing the DeviceTrait in the src/impls folder and add feature-gated logic for the driver to the probing/enumeration logic in src/device.rs.

At the moment, Seify is designed to commit the driver implementations upstream, i.e., there is no plugin system. This will probably be added but is no priority at the moment. While this concentrates maintenance efforts on Seify, it simplifies things for the user, who just add Seify to the project and enables feature flags for their SDR.

Example

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(())
}
Commit count: 163

cargo fmt