Skip to content
Christian W. Zuckschwerdt edited this page Nov 17, 2023 · 61 revisions

Welcome to the SoapySDR project

https://raw.githubusercontent.com/wiki/pothosware/SoapySDR/images/soapy_sdr_logo.png

SoapySDR is an open-source generalized API and runtime library for interfacing with SDR devices. With SoapySDR, you can instantiate, configure, and stream with an SDR device in a variety of environments. Most off the shelf SDR hardware platforms are supported by SoapySDR, and many open source applications rely on SoapySDR for hardware integration support. In additon, SoapySDR has bindings for development frameworks like GNU Radio and Pothos.

https://raw.githubusercontent.com/wiki/pothosware/SoapySDR/images/soapy_sdr_info.png

There are a family of devices known as SDRs with RF frontends, ADCs, DACs, and a PC interface. The project goal is to support this general type of device known as SDR. SoapySDR is not intended to be a generalized hardware abstraction library. However, with interfaces for registers, generalized settings, spi, i2c, etc; its feasible to wrap arbitrary hardware or SoC devices in a SoapySDR plugin as a convenient way to get network support, python and GO language bindings.

SoapySDR is not tied to any particular SDR hardware vendor. We try to generalize the SoapySDR API to support most devices out there, while providing hooks for users to access vendor-specific functionalities.

SoapySDR is not specific to any particular SDR platform. We wrote SoapySDR to help platform creators interface with SDRs without getting lost in the details of a given device.

SoapySDR supports SDR devices through runtime-loadable modules. This allows users to build and install device support against an existing SoapySDR installation without disturbing the existing installation or requiring recompilation of the platform. This allows vendors to maintain a SoapySDR module along with their driver build package.

Via the environment variable SOAPY_SDR_PLUGIN_PATH it is possible to specify custom alternative search paths for installed modules. (e.g. export SOAPY_SDR_PLUGIN_PATH=/opt/SoapyRemote/lib/SoapySDR/modules0.8)

The SoapySDR library is released under a permissive free software license. This makes SoapySDR applicable for both open-source projects and commercial uses. Regardless of SoapySDR licensing, please respect the licensing of platform and vendor software.

Use any SoapySDR supported device transparently over a local network link. The remote support feature can turn any SDR into a network peripheral, to work around software-related issues, to share a device among multiple computers, or to ease embedded device development. Learn more on the remote access wiki.

https://raw.githubusercontent.com/wiki/pothosware/PothosCore/images/dependencies.png

Platforms are graphical applications and command line utilities that use SoapySDR to interface with the ecosystem of SDR hardware.

  • QSpectrumAnalyzer is a python based spectrum analyzer based on SoapySDR python bindings.
  • Welle.io DAB/DAB+ is an open source DAB and DAB+ software defined radio (SDR). It supports high DPI and touch displays and it runs even on cheap computers like Raspberry Pi 2/3 and 100€ China Windows 10 tablets.
  • Cubic SDR is a cross-platform Software-Defined Radio application which allows you to navigate the radio spectrum and demodulate any signals you might discover.
  • GQRX is a C++ based spectrum analyzer which uses SoapySDR through bindings in GrOsmoSDR.
  • SDRangel is an Open Source Qt5/OpenGL 3.0+ SDR and signal analyzer frontend to various hardware.
  • HABDEC is a RTTY decoder for High Altitude Balloons.
  • LinHPSDR is an HPSDR application for Linux based on GTK+ 3.
  • QUISK is a graphical receiver and transmitter application.
  • SigDigger is a free digital signal analyzer based on Suscan
  • SdrGlut is a simple software defined radio player. Using glut for drawing and glui for its dialogs makes it tiny compared to programs that use QT5 or wxWidgets.
  • QRadioLink is a VOIP GNU/Linux SDR transceiver application using Internet protocols for communication.
  • OpenWebRX is a multi-user SDR receiver that can be operated from any web browser.
  • SDR++ is a cross-platform and open source SDR software with the aim of being bloat free and simple to use.
  • Abraca DAB radio is a DAB/DAB+ Qt6 cross-platform receiver application.

The Pothos data flow project uses SoapySDR for its SDR source and sink blocks.

https://raw.githubusercontent.com/wiki/pothosware/PothosSoapy/images/sdr_blocks.png
  • The gr-soapy source/sink blocks are a vendor neutral set of blocks for GNU Radio. This will make it easy for GNU Radio developers to maintain the component, and vendors can continue updating modules and supporting new hardware.
  • GrOsmoSDR also provides a set of soapy source/sink blocks, along with many other hardware support wrappers for GNU Radio. GrOsmoSDR is how GQRX gets its hardware support. To use SoapySDR devices in GrOsmoSDR, simply build with soapy support and add the key/value pair "soapy=0" to the list of device arguments.
  • In addition, SoapyUHD can provide UHD binding for SoapySDR, such that SoapySDR supported devices can be used within the gr-uhd source/sink blocks. Users must ensure that the SoapyUHD support module is installed in UHD's module search path. Read more: https://github.com/pothosware/SoapyUHD/wiki#soapy-devices-in-uhd
  • RTLSDR-Airband receives analog radio voice channels and produces audio streams which can be routed to various outputs.
  • The RTL433 project is a program to decode traffic from Devices that are broadcasting on 433.9 MHz like temperature sensors.
  • The Rx Tools project is a set of command line tools for Soapy SDR. The tools have some basic signal processing and and ability to pipe samples from stdout so that commands can be chained for RF processing using UNIX command piping.
  • HackTV is an analogue TV transmitter with bindings for Soapy SDR.
  • ODR-DabMod is a DAB (Digital Audio Broadcasting) modulator compliant to ETSI EN 300 401.
  • Suscan is a realtime DSP processing library. It provides a set of useful abstractions to perform dynamic digital signal analysis and demodulation.

SoapySDR itself has very few dependencies. To build SoapySDR, the only dependencies are a C++ compiler and CMake. However, individual vendor dependencies may vary widely. Also, the various language bindings may bring in additional dependencies.

  • Soapy SDR binaries for your system may available from Pothos downloads.
  • Or follow the build guide to compile and install Soapy SDR from source.

The client API is what users and platform maintainers write their code with to use a SDR device.

Example code:

The driver API is what vendors write their hardware support modules with. See the Driver Guide for more details. To support hardware in SoapySDR, simply do the following:

  • Copy the ExampleDriver into your devices's build tree
  • Rename the "MyDevice" files and classes for your product
  • Implement overloads for a custom SoapySDR::Device class
  • Implement the discovery function to locate devices on the system
  • Implement the factory function to instantiate the device object
  • Further reading: Stream status indicators

SoapySDR is supposed to be a useful tool for vendors and users alike. And therefore we need your feedback, suggestions, and criticisms. Feel free to leave a ticket on the issue tracker, send an email to a public forum like myriadrf discourse, or the Pothos users' group.

Clone this wiki locally