8.6 KiB
SDRangel Developper's notes
Build options
The release type can be specified with the -DBUILD_TYPE cmake option. It takes the following values:
RELEASE(default): produces production release code i.e.optimized and no debug symbolsRELEASEWITHDBGINFO: optimized with debug infoDEBUG: unoptimized with debug info
You can specify whether or not you want to see debug messages printed out to the console with the -DDEBUG_OUTPUT cmake option:
OFF(default): no debug outputON: debug output
You can add -Wno-dev on the cmake command line to avoid warnings.
Global code structure and flow
The existing receiving flow is represented with green boxes. The futrue Tx flow with red boxes. Some classes and file paths in the Rx part were renamed to avoid collision with future Tx names in this case the old name appears below the present name in italics.
Rx path
- The I/Q samples are collected from a physical device or UDP flow with a device plugin that derives from the
DeviceSampleSourceclass. - These I/Q samples are downsampled by a factor set in the device plugin GUI and fed into a
BasebandSampleSink - The
DownChannelizerclass downsamples further down (or not) the baseband I/Q samples depending on the requirements of the Rx plugin. It cascades the downsampling from the center, left or right half of the baseband in order to fit the Rx plugin bandwidth. It contains the NCO to adjust to the Rx plugin center frequency. - The special
FileSourceplugin reads a file that was recorded using theFileRecordclass directly into the baseband as there is no downsampling from the sample rate at which the file was recorded. - The baseband I/Q samples can be recorded to a file using the
FileRecordclass
Device sample source plugins
At present the following plugins are available:
AirspyXxxclasses inplugins/samplesource/airspy: Inteface with Airspy devicesBladeRFXxxclasses inplugins/samplesource/bladerf: Inteface with BladeRF devicesBladeRFXxxclasses inplugins/samplesource/bladerf: Inteface with BladeRF devicesFCDProXxxclasses inplugins/samplesource/fcdpro: Inteface with Funcube Pro devicesFCDProPlusXxxclasses inplugins/samplesource/fcdproplus: Inteface with Funcube Pro+ devicesHackRFXxxclasses inplugins/samplesource/hackrf: Inteface with HackRF devicesRTLSDRXxxclasses inplugins/samplesource/rtlsdr: Inteface with RTL-SDR devicesSDRDaemonXxxclasses inplugins/samplesource/sdrdaemon: Special inteface collecting I/Q samples from an UDP flow sent by a remote device using SDRdaemon.SDRDaemonFECXxxclasses inplugins/samplesource/sdrdaemonfec: Special inteface collecting I/Q samples from an UDP flow sent by a remote device using SDRdaemon with FEC protection of blocks.FileSourceclasses inplugins/samplesource/filesource: Special inteface reading I/Q samples from a file directly into the baseband skipping the downsampling block
Device sample sink plugins
At present the following plugins are available:
FileSinkclasses inplugins/samplesink/filesink: Special inteface writing baseband I/Q samples to a file skipping the final upsampling block
Channel receiver (Rx) plugins
At present the following plugins are available:
ChannelAnalyzerXxxclasses inplugins/channelrx/chanalyzer: Signal analysis tool pretty much like a DSA/DSO signal analyzer like the venerable HP 4406A (although still far from it!)AMDemodXxxclasses inplugins/channelrx/demodam: AM demodulator with audio outputBFMDemodXxxclasses inplugins/channelrx/demodbfm: Broadcast FM demodulator with audio mono/stereo output and RDSDSDDemodXxxclasses inplugins/channelrx/demoddsd: Digital Speech demodulator/decoder built on top of the DSDcc library. Produces audio output and some communication data from various digital voice standards: DMR, dPMR, D-Star, Yaesu System Fusion (YSF).LoraDemodXxxclasses inplugins/channelrx/demodlora: Decodes LoRa transmissions. This is legacy code that is not very well maintained so it may or may not work.NFMDemodXxxclasses inplugins/channelrx/demodnfm: Narrowband FM demodulator with audio output.SSBDemodXxxclasses inplugins/channelrx/demodssb: SSB/DSB/CW demodulator with audio output.WFMDemodXxxclasses inplugins/channelrx/demodwfm: Wideband FM demodulator with audio output. This is a basic demodulator.TCPSrcXxxclasses inplugins/channelrx/tcpsrc: Sends channel I/Q samples via TCPUDPSrcXxxclasses inplugins/channelrx/udpsrc: Sends channel I/Q or FM demodulated samples via UDP
Channel transmitter (Tx) plugins
At present the following plugins are available:
AMMmodXxxclasses inplugins/channeltx/modam: AM modulator with simple sine
Source tree structure
At the first subdirectory level indclude and sdrbase contain the common core components include and source files respectively. They are further broken down in subdirectories corresponding to a specific area:
audiocontains the interface with the audio device(s)dspcontains the common blocks for Digital Signal Processing like filters, scope and spectrum analyzer internalsguicontains the common Graphical User Interface components like the scope and spectrum analyzer controls and displayplugincontains the common blocks for managing pluginssettingscontains components to manage presets and preferencesutilcontains common utilities such as the message queue
The plugins subdirectory contains the associated plugins used to manage devices and channel components. Naming convention of various items depend on the usage and Rx (reception side) or Tx (transmission side) affinity. Transmission side is a work in progress.
-
Receiver functions (Rx):
samplesource: Device managers:xxx: Device manager (e.g. xxx = airspy)xxxinput.h/cpp: Device interfacexxxgui.h/cpp: GUIxxxplugin.h/cpp: Plugin interfacexxxsettings.h/cpp: Configuration managerxxxthread.h/cpp: Reading samplesxxx.pro: Qt .pro file for Windows/Android build
channelrx: Channel handlers:demodxxx: Demodulator internal handler (e.g xxx = demodam)xxxdemod.h/cpp: Demodulator corexxxdemodgui.h/cpp: Demodulator GUIxxxdemodplugin.h/cpp: Plugin interfacedemodxxx.pro: Qt .pro file for Windows/Android build
xxxanalyzer: Analyzer internal handler (e.g xxx = channel)xxxanalyzer.h/cpp: Analyzer corexxxanalyzergui.h/cpp: Analyzer GUIxxxanalyzerplugin.h/cpp: Analyzer plugin managerxxxanalyzer.pro: Qt .pro file for Windows/Android build
xxxsrc: Interface to the outside (e.g xxx = udp):xxxsrc.h/cpp: Inteface corexxxsrcgui.h/cpp: Interface GUIxxxsrcplugin/h/cpp: Interface plugin managerxxxsrc.pro: Qt .pro file for Windows/Android build
-
Transmitter functions (Tx):
samplesink: Device managers:xxx: Device manager (e.g. xxx = bladerf)xxxsinkoutput.h/cpp: Device interfacexxxsinkgui.h/cpp: GUIxxxsinkplugin.h/cpp: Plugin interfacexxxsinksettings.h/cpp: Configuration managerxxxsinkthread.h/cpp: Writing samplesxxxsink.pro: Qt .pro file for Windows/Android build
channeltx: Channel handlers:modxxx: Modulator internal handler (e.g xxx = modam)xxxmod.h/cpp: Modulator corexxxmodgui.h/cpp: Modulator GUIxxxmodplugin.h/cpp: Plugin interfacemodxxx.pro: Qt .pro file for Windows/Android build
xxxgenerator: Generator internal handler (e.g xxx = channel)xxxgenerator.h/cpp: Generator corexxxgeneratorgui.h/cpp: Generator GUIxxxgeneratorplugin.h/cpp: Generator plugin managerxxxgenerator.pro: Qt .pro file for Windows/Android build
xxxsink: Interface to the outside (e.g xxx = udp):xxxsink.h/cpp: Inteface corexxxsinkgui.h/cpp: Interface GUIxxxsinklugin/h/cpp: Interface plugin managerxxxsink.pro: Qt .pro file for Windows/Android build
