Also known as: SoapySDR
SoapySDR is a vendor-neutral hardware-abstraction library that exposes a common API across many software-defined radios, so applications can support diverse devices without per-vendor code.1 Instead of an app linking directly to librtlsdr, libhackrf, libairspy and a dozen others, it links once to SoapySDR and lets a driver plugin translate the calls for whatever hardware is plugged in.
How it works
An application asks SoapySDR to enumerate devices, then opens one by a set of key/value
arguments (driver=rtlsdr, driver=hackrf, and so on). The library loads the matching
plugin module and hands back a device object with a uniform set of methods: set the tune
frequency, set the sample rate, set gains, and stream
IQ buffers. Every device — however different its native SDK — presents
the same calls, so the application code is identical whether the samples come from a
$25 dongle or a USRP. Capabilities the hardware lacks (a bias tee,
a second channel, transmit) are discoverable through the API rather than assumed, so an app
can adapt gracefully.
The companion SoapyRemote plugin makes a network-attached radio look local. A
SoapySDRServer process runs on the machine with the dongle; on the client, opening
driver=remote transparently forwards every API call and streams the IQ back over TCP/UDP.
From the application’s point of view nothing changed — it is still talking to a normal
SoapySDR device — but the radio is on another host. This is the key advantage over a
single-device protocol like rtl_tcp: SoapyRemote works for any
SoapySDR-supported radio, not just RTL dongles.
In practice
SoapySDR is the glue underneath a large slice of the open SDR ecosystem.
GNU Radio ships a gr-soapy block, GQRX,
CubicSDR, and SDRangel can all source from it, and Linux distributions package the drivers
so one SoapySDRUtil --find lists every attached radio.2 Because it is a thin abstraction
rather than a heavyweight framework, the overhead is negligible; the practical cost is one
more layer that must have a working driver plugin for your specific device.
Relevance to SDR
For SDR users, SoapySDR’s value is portability: write or configure once, run against many radios, and place the radio anywhere on the network via SoapyRemote. GopherTrunk benefits from the same idea — SoapySDR-style remoting (alongside rtl_tcp) lets it use radios that live on a separate host, so the dongle can sit at the antenna over a short coax run while decoding happens on a more capable machine.
Sources
-
SoapySDR — the project repository, documenting the vendor-neutral SDR abstraction API and SoapyRemote. ↩
-
SoapySDR wiki — Pothosware, the driver list and SoapyRemote documentation describing per-device plugins and networked streaming. ↩