Starting with version 2 SDRangel supports running several sampling devices simultaneously. Each concurrent device is associated to a slot with a set of tabbed windows in the UI. These tabs are marked R0, R1, R2...
The slots are arranged in a stacked fashion so that when a new device is added with the Acquisition -> Add device set menu a new slot is allocated in the last position and when a device is removed with the Acquisition -> Remove last device set menu the slot in the last position is deleted. Slot 0 (R0) receiver slot is created at initialization and cannot be deleted with the menu. The letter "R" in the tab names indicates that the slot is for a receiver (source) device while "T" designates a transmitter (sink) device.
The sampling devices tab (1) acts as a master and when one of its tabs is selected all other tabs are selected accordingly i.e. all R0s, all R1s, etc... in tabs (2), (3), (4) and (5)
In each slave tab group (2), (3), (4) and (5) an individual tab corresponding to one device can be selected without affecting the selection of the other tabs. This way you can sneak peek into another spectrum or channel group without affecting the display of other tabbed windows.
- _AMBE_: Opens a dialog to select AMBE3000 serial devices or AMBE server addresses to use for AMBE digital voice processing. If none is selected AMBE frames decoding will be done with mbelib if available else no audio will be produced for AMBE digital voice (see 1.3 below for details)
- _My Position_: opens a dialog to enter your station ("My Position") coordinates in decimal degrees with north latitudes positive and east longitudes positive. This is used whenever positional data is to be displayed (APRS, DPRS, ...). For it now only works with D-Star $$CRC frames. See [DSD demod plugin](../plugins/channelrx/demoddsd/readme.md) for details on how to decode Digital Voice modes.
When clicking on the AMBE submenu a dialog opens to let you specify physical AMBE devices to decode AMBE frames produced by digital voice signals (using DSD decoder plugin).
<h5>1.3.1 AMBE server address and port or direct input</h5>
Use this freeflow text input box to specify either the address and port of an AMBE server in the form: <IPv4 address>:<port> or any directly attached physical device address like a COM port on Windows.
<h5>1.3.2 Import above address or device</h5>
Import the address or device specified in (1) into the list of used devices. The system will try to open the device or contact the server and will add it to the list only if successful.
<h5>1.3.3 Remove in use device or address</h5>
When a device or address is selected in the in use list (6) push this button to remove it from the list. The corresponding resources will be released.
<h5>1.3.4 Refresh in use list</h5>
Checks the list of devices or addresses currently in use and update the in use list (6).
<h5>1.3.5 Empty in use list</h5>
Removes all devices or addresses in use. The in use list (6) is cleared consequently. This removes all AMBE devices related resources attached to the current instance of the SDRangel program. Therefore consecutive AMBE frames decoding will be handled by the mbelib library if available or no audio will be output.
<h5>1.3.6 In use list</h5>
List of devices or addresses currently in use for AMBE frames decoding by this instance of the SDRangel program.
<h5>1.3.7 Import serial device</h5>
Imports a serial device scanned in the list of available AMBE 3000 serial devices (9) in the in use list. If this device is already in the in use list then nothing happens and this is reported in the status text (10)
<h5>1.3.8 Import all serial devices</h5>
Imports all serial devices scanned in the list of available AMBE 3000 serial devices (9) in the in use list. If any device is already in the in use list then it is not added twice.
<h5>1.3.9 List of available AMBE 3000 serial devices</h5>
This is the list of AMBE 3000 currently attached to the system directly. This list gets updated at every opening of the dialog.
<h5>1.3.10 Status text</h5>
A brief text reports the result of the current action
Only in Linux and if LimeSuite library is available this opens a dialog to control a LimeRFE device via USB. The details are provided [here](limerfeusbgui.md).
The plugin entry can be expanded or collapsed using the caret on the left. When expanded it shows more information about the copyright of the author and locations on the web where the plugin can be found. In all cases this is just here.
- When a play icon (▶) is displayed with a grey background the device is not operational
- When a play icon (▶) is displayed with a blue background the device is ready to start
- When a stop icon (■) is displayed with a green background the device is currently running
- When a play icon (▶) is displayed with a red background there is an error and a popup displays the error message. An Error typically occurs when you try to start the same device in more than one tab.
Use this checkbox to toggle on/off the reverse API feature. With reverse API engaged the changes in the device settings are forwarded to an API endpoint given by address (2.1.2.2), port (2.1.2.3) and device index (2.1.2.4) in the same format as the SDRangel REST API device settings endpoint. With the values of the screenshot the API URL is: `http://127.0.0.1:8888/sdrangel/deviceset/0/device/settings` The JSON payload follows the same format as the SDRangel REST API device settings. For example with HachRF Rx this would be something like:
Note that the PATCH method is used. The full set of parameters is sent only when the reverse API is toggled on or a full settings update is done.
The start and stop actions are also forwarded with the `/sdrangel/deviceset/{deviceSetIndex}/device/run` API endpoint using POST (start) or DELETE (stop) methods.
More details on this feature can be found on the corresponding Wiki page.
<h6>2.1.2.2: API address</h6>
This is the IP address of the API endpoint
<h6>2.1.2.3: API port</h6>
This is the IP port of the API endpoint
<h6>2.1.2.4: Device index</h6>
This is the targeted device index
<h6>2.1.2.5: Cancel changes and exit dialog</h6>
Do not make any changes and exit dialog
<h6>2.1.2.6: Validate and exit dialog</h6>
Validates the data (saves it in the channel marker object) and exits the dialog
This is the I/Q from device record toggle. When a red background is displayed the recording is currently active. The name of the file created is `test_n.sdriq` where `n` is the slot number.
The format is S16LE I/Q samples. Thus there are 4 bytes per sample. I and Q values are 16 bit signed integers. The file starts with a context header containing information about center frequency, sample rate and timestamp of the start of the recording. This header has a length which is a multiple of a sample size (normally 24 bytes thus 6 samples). Thus this file can be used as a raw I/Q file with S16LE samples tolerating a glitch at the start corresponding to the 6 "random" samples.
This is the sampling rate in kS/s of the I/Q stream extracted from the device after possible decimation. The main spectrum display corresponds to this sampling rate.
This is the current center frequency in kHz with dot separated thousands (MHz, GHz). On devices for which frequency can be directly controlled (i.e. all except File Source and Remote Input) you can use the thumbwheels to set the frequency. Thumbwheels move with the mouse wheel when hovering over a digit.
Use this combo box to select the device. Only available devices will appear in the list. For devices having more than one channel (ex: LimeSDR) the channel number will appear next to the device sequence number inside the brackets. Ex: `LimeSDR[0:1] 0009060B00473419` designates the second Rx (Rx #1) of the first encountered LimeSDR which serial number is 0009060B00473419.
<h5>3.2.2. Device selection confirmation</h5>
Use the `OK` button to confirm your choice and exit the dialog
<h5>3.2.3. Device selection cancellation</h5>
Use the `Cancel` button to exit the dialog without any change
This button activates a close/open sequence to recycle the device. It may be useful when the device is not streaming anymore or in an attempt to clear possible errors. Make sure the streaming is stopped first.
Use this combo to select which averaging mode is applied:
- **No**: no averaging. Disables averaging regardless of the number of averaged samples (4.6). This is the default option
- **Mov**: moving average. This is a sliding average over the amount of samples specified next (4.6). There is one complete FFT line produced at every FFT sampling period
- **Fix**: fixed average. Average is done over the amount of samples specified next (4.6) and a result is produced at the end of the corresponding period then the next block of averaged samples is processed. There is one complete FFT line produced every FFT sampling period multiplied by the number of averaged samples (4.6). The time scale on the waterfall display is updated accordingly.
- **Max**: this is not an averaging but a max hold. It will retain the maximum value over the amount of samples specified next (4.6). Similarly to the fixed average a result is produced at the end of the corresponding period which results in slowing down the waterfall display. The point of this mode is to make outlying short bursts within the "averaging" period stand out. With averaging they would only cause a modest increase and could be missed out.
Each FFT bin (squared magnitude) is averaged or max'ed over a number of samples. This combo allows selecting the number of samples between these values: 1 (no averaging), 2, 5, 10, 20, 50, 100, 200, 500, 1k (1000) for all modes and in addition 2k, 5k, 10k, 20k, 50k, 1e5 (100000), 2e5, 5e5, 1M (1000000) for "fixed" and "max" modes. The tooltip mentions the resulting averaging period considering the baseband sample rate and FFT size.
Averaging reduces the noise variance and can be used to better detect weak continuous signals. The fixed averaging mode allows long time monitoring on the waterfall. The max mode helps showing short bursts that may appear during the "averaging" period.
☞ Note: The spectrum display is refreshed every 50ms (20 FPS). Setting an averaging time above this value will make sure that a short burst is not missed particularly when using the max mode.
This controls the decay rate of the stroke when phosphor display is engaged (4.C). The histogram pixel value is diminished by this value each time a new FFT is produced. A value of zero means no decay and thus phosphor history and max hold (red line) will be kept until the clear button (4.B) is pressed.
When phosphor display is engaged (4.C) and stroke decay is 1 (4.7) this divides the unit decay by this value by diminishing histogram pixel value by one each time a number of FFTs equal to this number have been produced. Thus the actual decay rate is 1 over this value. This allow setting a slower decay rate than one unit for each new FFT.
This controls the stroke strength when phosphor display is engaged (4.C). The histogram value is incremented by this value at each new FFT until the maximum (red) is reached.
Use this toggle button to switch between spectrum logarithmic and linear scale display. The face of the button will change to represent either a logaritmic or linear curve.
When in linear mode the range control (4.4) has no effect because the actual range is between 0 and the reference level. The reference level in dB (4.3) still applies but is translated to a linear value e.g -40 dB is 1e-4. In linear mode the scale numbers are formatted using scientific notation so that they always occupy the same space.
<h4>4.K. Spectrum live display pause/resume (freeze)</h4>
Use this control to pause or resume spectrum live display. You can use this control to freeze the spectrum display. This may be useful to make measurements using the markers (see section 7).
<h4>4.L. Spectrum server control</h4>
⚠ Note: this is a v5 feature only.
A websockets based server can be used to send spectrum data to clients. An example of such client can be found in the [SDRangelSpectrum](https://github.com/f4exb/sdrangelspectrum) project.
- Left button: toggles server on/off
- Right button: opens a secondary dialog that lets you choose the server listening (local) address and port.
The server only sends data. Control including FFT details is done via the REST API. FFT frames are formatted as follows (in bytes):
<table>
<tr>
<th>Offset</th>
<th>Length</th>
<th>Value</th>
</tr>
<tr>
<td>0</td>
<td>8</td>
<td>Center frequency in Hz as 64 bit integer</td>
</tr>
<tr>
<td>8</td>
<td>8</td>
<td>Effective FFT time in milliseconds as 64 bit integer</td>
</tr>
<tr>
<td>16</td>
<td>8</td>
<td>Unix timestamp in milliseconds as 64 bit integer</td>
</tr>
<tr>
<td>24</td>
<td>4</td>
<td>FFT size as 32 bit integer</td>
</tr>
<tr>
<td>28</td>
<td>4</td>
<td>FFT bandwidth in Hz as 32 bit integer</td>
</tr>
<tr>
<td>32</td>
<td>4</td>
<td>
Indicators as 32 bit integer LSB to MSB:
<ul>
<li>bit 0: Linear (1) / log (0) spectrum indicator</li>
The presets and commands tree view are by default stacked in tabs. The following sections describe the presets section 5A) and commands (section 5B) views successively
This is a tree view of the saved presets. Presets record the channels setup and a copy of the settings of each sample source that has been used when saving this preset. Thus you can use the same channel arrangement with various devices having their particular setup.
Click on this icon to create a update the selected preset with the current values in the selected sample device tab (Main window: 2). Please note that this does not save the preset immediately on disk to save presets immediately you need to use the save button (4).
Using the previous icon presets are saved globally in a system dependent place. Using this icon you can export a specific preset in a single file that can be imported on another machine possibly with a different O/S. The preset binary data (BLOB) is saved in Base-64 format.
This is a tree view of the saved commands. Commands describe the path to an executable file, its arguments a possible link to a keystroke event that triggers the execution. Similarly to presets commands can be arranged into groups and have a description short text.
Typically an "executable file" is a script (Python, shell, whatever...) or can be a compiled program (c, c++, java, whatever...) that interacts with SDRangel using its web REST API. When called from within SDRangel they can act as "macros" allowing to perform actions automatically.
You select a command or a command group by clicking on its line in the tree view. All actions (6) will be done relative to this command or command group.
<h4>5B.2. Group</h4>
You can organize your commands into groups. Groups can be collapsed or expanded by using the caret icon on the left.
<h4>5B.3. Description</h4>
Short description of a command.
<h4>5B.4. Key binding indicator</h4>
-`-`: no key binding
-`P`: key press binding
-`R`: key release binding
<h4>5B.5. Key binding sequence</h4>
This is a descriptive text of the key sequence that is used for the key binding.
Click on this icon to create a new command. This opens an edit dialog see the edit section (5B.6.3) for the details of the edit dialog.
<h5>5B.6.2. Duplicate command</h5>
Click on this icon to duplicate the currently selected command (inactive on groups). Later you can edit the details of the copy with the edit dialog (see 5B.6.3 next)
<h5>5B.6.3. Edit command or command group</h5>
<b>Command groups</b>
With this dialog you can rename a group using the text box or if you select an existing group with the combo this will merge the contents of the group with the existing group
![Main Window command group edit](../doc/img/MainWindow_command_edit_group.png)
<b>Commands</b>
You can edit the details of the command with this dialog.
![Main Window command group edit](../doc/img/MainWindow_command_edit.png)
<h6>5B.6.3.1. Edit group </h6>
You can select an existing group with the combo or create a new one for this command using the text edit box
<h6>5B.6.3.2. Edit description </h6>
You can edit the description using this text box. The description will appear in the tree view.
Clicking on this button will open a file dialog to select the executable file that will be run with this command. The file selection dialog has predefined file pattern selections:
Use this checkbox to enable or disable the command execution binding to a key or combination of keys press or release event
<h6>5B.6.3.7. Key binding capture</h6>
Use this button to capture the key or key combination that will be used for the key binding. After pushing this button just type in the key or key combination.
<h6>5B.6.3.8. Key binding display</h6>
This shows the key or combination of keys used for the key binding.
<h6>5B.6.3.9. Release key binding</h6>
Use this checkbox to bind the key or combination of keys to the key release event. If unchecked the binding will be associated to the key press event.
<h6>5B.6.3.10. Confirm changes</h6>
Use the "OK" button to confirm the changes.
<h6>5B.6.3.11. Cancel changes</h6>
Use the "Cancel" button to cancel the changes.
<h5>5B.6.4. Run command or groups of commands</h5>
This will run the currently selected command. If the selection is a group it will run all commands of the group starting them in the displayed order. Please note that commands are run in independent processes and therefore all launched commands in the group will run concurrently.
This shows the actual command line that was used to start the process
<h6>5B.6.5.8. Error status</h6>
This is the translation of `QProcess::ProcessError`. Possible values are:
-`...`: the process has never run during this session
-`Failed to start`: the process could not start. For example the executable file has no execution rights actually
-`Crashed`: the process ended with crash. This is the status when you killed the process
-`Timed out`: the last waitFor...() function timed out.
-`Write error`: an error occurred when attempting to write to the process. For example, the process may not be running, or it may have closed its input channel.
-`Read error`: an error occurred when attempting to read from the process. For example, the process may not be running.
This is the program exit code. When the process crashes this is the signal by which the process end was caused. For example if you kill the process with button (6) it sends the process a SIGKILL (code 9) and therefore the value is 9.
<h6>5B.6.5.10. Exit status</h6>
There are only two possibilities: either the program exits normally but possibly with a non zero exit code or it ends with a crash.
<h6>5B.6.5.11. Process log</h6>
This is the log of the process (merged stdout and stderr). Please note that it is updated only on program termination.
<h6>5B.6.5.12. Exit</h6>
By pushing the "Close" button the process output window is closed.
Use this button to activate the keyboard bindings. Note that you need to have this button selected (its background should be lit in beige/orange) for the key bindings to be effective.
This area shows the control GUIs of the channels currently active for the device. When the preset is saved (as default at exit time or as a saved preset) the GUIs are ordered by increasing frequency. If presets share the same frequency they are ordered by their internal ID name. Thus new channel GUIs will appear ordered only when reloaded.
Details about the GUIs can be found in the channel plugins documentation which consists of a readme.md file in each of the channel plugins folder (done partially).
With most channel types some common basic settings can be set with a popup dialog. This dialog is opened by clicking on the small grey square on the top left of the channel window. The settings are as follows:
Changes the color of the window title bar and spectrum overlay. To change the color click on the color square to open a color chooser dialog. The hex rgb value is displayed next to the color square.
When the mouse is over the channel window or over the central line in the spectrum a channel parameter is displayed on the frequency scale. This parameter can be:
Use this checkbox to toggle on/off the reverse API feature. With reverse API engaged the changes in the channel settings are forwarded to an API endpoint given by address (6.5), port (6.6), device index (6.7) and channel index (6.8) in the same format as the SDRangel REST API channel settings endpoint. With the values of the screenshot the API URL is: `http://127.0.0.1:8888/sdrangel/deviceset/0/channel/0/settings` The JSON payload follows the same format as the SDRangel REST API channel settings. Using the same example this would be:
![Channel control 02](../doc/img/MainWindow_channel_02.png)
The bigger square next to the leftmost "c" square is the device stream assignment control. With single Rx (source device set) and single Tx devices (sink device set) this is inactive because the channel is simply connected to the single stream as shown by the "S" letter.
This is in place for future MIMO devices and channels support (v.5).
This shows the spectrum in the passband returned from the sampling device possibly after decimation. The actual sample rate is shown in the device control at the left of the frequency display (2.3)
Use Shift and mouse left click to set a new marker. There is a maximum of two markers with a different status:
- The first marker will display frequency (2) and power (1) or time (5) on the scale side of the view. Frequency units are the same as displayed in the frequency scale.
- The second marker will display frequency difference (3 or 6) and power difference (4) or time difference (7) from the first marker on the opposite side of the scales. Difference values may be suffixed with a multiplier character.
Base units are Hz for frequency difference and seconds for time. Power is expressed either in dB or plain value depending on the linear or log setting for the spectrum display.
Use mouse right click anywhere in the view to remove the last entered marker. Use shift and mouse right click to remove all markers.
Any change in the spectrum settings is not reflected in the markers. You have to clear them and make a new measurement if any critical setting of the spectrum is changed.
This is the current tag or the latest tag followed by the number of commits since the latest tag followed by the git commit SHA1 (8 hex characters) preceded by 'g'. Ex: `v4.5.3-29-gf5f2349d`