Field Guide · technology

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.

applications (GQRX, GNU Radio…) SoapySDR (common API) RTL-SDR HackRF Airspy
SoapySDR is a vendor-neutral abstraction layer: one API that drives many different SDR devices through per-device plugins.

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

  1. SoapySDR — the project repository, documenting the vendor-neutral SDR abstraction API and SoapyRemote. 

  2. SoapySDR wiki — Pothosware, the driver list and SoapyRemote documentation describing per-device plugins and networked streaming. 

See also