Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
GNU Radio support for Pothos
This project builds Pothos bindings for GNU Radio blocks.
Pothos features can complement and enhance the GNU Radio experience:
- Live reconfiguration of the topology graph
- Zero-copy buffer integration for DMA devices
- Distribute a topology design across a network
- Work with other toolkits supported by Pothos
Signals+slots for structured event handling
- Automatic slots for all setters for topology-driven control
- Feedback loops demonstrate DSP concepts
- All calls into block are automatically thread-safe
The gr-pothos project provides two major functionalities: 1) It provides a special Pothos adapter block named "GrPothosBlock", that wraps a standard gr::block. GrPothosBlock is responsible for invoking the gr::block's work routine, and interfacing directly with inputs, outputs, buffers, tags, and messages. 2) The gr-pothos project scans headers and GRC xml files which it uses to generate Pothos block wrappers for GNU Radio. After installing GNU Radio and various out-of-tree projects, the user simply rebuilds gr-pothos to update the Pothos block wrappers.
Note: Before continuing, we recommend that you make sure that your GNU Radio install is clean. The gr-pothos utility scans installed header files and GRC blocks to generate wrappers. If your GNU Radio install is an amalgamation of recent and defunct files, the generation step will fail. If this is the case, you must clean the install directories and reinstall GNU Radio. This is already recommended practice for GNU Radio users.
- Meet the standard build requirements for GNU Radio: See build guide.
- Python PLY modules is an additional runtime requirement for GrPothosUtil.
#Ubuntu apt-get install instructions for additional requirements sudo apt-get install python-ply
Install GNURadio by the standard means, either a binary installer or from source (See build guide). Also, make sure to configure GNU Radio with GRC support as gr-pothos requires the block definitions.
We are going to build the GrPothosBlock adapter and generate Pothos block wrappers for the installed GNU Radio blocks. After this step, you can use GNU Radio blocks within the Pothos framework. The gr-pothos component is a CMake project that scans the GNU Radio installation, and generates Pothos block wrappers. This step should be re-run after making changes to the GNU Radio installation (including out-of-tree projects).
git clone https://github.com/pothosware/gr-pothos.git cd gr-pothos mkdir build cd build #set CMAKE_INSTALL_PREFIX to match the GNU Radio install cmake ../ -DCMAKE_INSTALL_PREFIX=/usr/local make -j8 sudo make install
This is complicated. We are parsing header files, GRC block definitions, and generating code. There are bound to be problems. To help the effort, please report missing blocks, blocks that have errors, or appear not to function. Tell us about the issue: https://github.com/pothosware/PothosCore/wiki/Support
The gr-pothos utility works with the mainline GNU Radio components, and we cannot guarantee that it will work with every out-of-tree project. Given a project named gr-foo, gr-pothos assumes the following:
- There is a library called libgnuradio-foo.so
- Headers are installed to include/gnuradio/foo/*.h
- GRC files are installed to share/gnuradio/grc/blocks/foo_*.xml
Again, please report problems. We can probably make the gr-pothos utility more flexible to accommodate your project.
The gr-pothos utility only handles gr::block style blocks for now. That excludes hierarchical blocks and python blocks. This is a good first step as most blocks are gr::blocks. Hopefully, most missing hierarchical blocks can be recreated from their component blocks.