From e36bd24330970c225d7798800d39da847f3cd822 Mon Sep 17 00:00:00 2001 From: f4exb Date: Thu, 22 Nov 2018 08:52:15 +0100 Subject: [PATCH] SoapySDR support: output: documentation --- doc/img/SoapySDRInput_plugin1.xcf | Bin 0 -> 125300 bytes doc/img/SoapySDROutput_plugin1.png | Bin 0 -> 21255 bytes plugins/samplesink/bladerf1output/readme.md | 16 ++ plugins/samplesink/soapysdroutput/readme.md | 184 +++++++++++++++++++ plugins/samplesource/soapysdrinput/readme.md | 16 +- 5 files changed, 214 insertions(+), 2 deletions(-) create mode 100644 doc/img/SoapySDRInput_plugin1.xcf create mode 100644 doc/img/SoapySDROutput_plugin1.png create mode 100644 plugins/samplesink/soapysdroutput/readme.md diff --git a/doc/img/SoapySDRInput_plugin1.xcf b/doc/img/SoapySDRInput_plugin1.xcf new file mode 100644 index 0000000000000000000000000000000000000000..51ace5345285806fd71cf8b4d66a03e52782c5df GIT binary patch literal 125300 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 literal 0 HcmV?d00001 diff --git a/doc/img/SoapySDROutput_plugin1.png b/doc/img/SoapySDROutput_plugin1.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c10d9c4af0678fbdfb397c5093dab3be91c80a GIT binary patch literal 21255 zcmaI81yq$$v@S|0AgPj4il_)kNGdIeNJ@7~Z@L>qBoq)qx^EuEW= zH@D~9bIyJD-NzVvfV=+nuQk`4U(DrOMFlA$d}@3Q3=AUa=TDU}Ffa$<;fRL=&&a)G zO@m)JFJ+~k!f*IFlBo5AUsvp(YdK+H5RjrDm>7x4RPZFOv$VV(IZQDzn1cbE@Ue038$5y}54B2<-lwyc>04F z`G3Fa&+`BJ(0{!8e|+eF`^x|Eq0A1R{!8MTOs0)Th(ZC`6MP1LmZ!pB8L=v)R1NA= zF@G_Njj5rpzLKzhjnhUNHI&3BgQXTibGPl^xRx{U89K6*znwkVT5I`r#Aopr=gQJd z#2Kg8jqi74Xs*E5y{RfLru!53p}$3&k6R>YKQR58J5!E>wcdew0q2gh{%_x?>D%lcd2t?s>x^Y;P-y$u9~ejh8YW!C(B2zLjuw;=He?;vr$LXH>##eS%RjeAm!3@6e*k zGPj{GRbL)>bx2-8=6WV^A}gKq_3TBipq#^ zxX{$3-`V{_eX>~^eo#V?U4zG$2 z5|D7f9c|9-I z;>jOOEr~+u7yHtTcnn=;{pU5P?0N-#PkV27CM^{RPXW|7*@ zwY8_0%k^wgs*pLPIAN0wv*;_HMatbYRfeb8Pm}F$&wl#I^Co*=k%P8lq4`@KqHw8C zDMAYOghjZmr{q$ch-7SEbEA@z|Cm7N(n;D!q&A)sbLbPSp-gO)A$^;M?&k_m8~YN+ zf7?a-=--?yr|ni<_w^!18G3LBBpy8p^= zRoS^(y6WsCMk4LypR&xeBTO&5juS8UA-H_Yiu#_pEUPH4`qx~1VwC0Mi{;hDQ_{Y8 zdPTL6M3v_6Znj+!n}zlm>HN}3RJ4hP4X<7G-JA6y_!=XdMLXT1_F}#-@4R_TM8)~) z@X*~7@5&$|N6btYQ@Zx6^h8W|irwUE?c9RMI0bp1*Z1T%Oy}G8|2hw8RF+@q^rUbpCh$rFE$UZDYE#rF2Rh8j;{p%ZJtDUYS{p<)aKk{VgF_HYsV zVS@Xk@tMWEAJZe`eg+z3VQ!xq*Y>JuiJzKBpLiSFT)tnt#cS(3#aetZvaRYlv7x}I zAy_ww%CWE4mNCQhqmyNGJ7+1F&Uwr2sy#PNq_<8r)wxu&TeJIHa#q=~Fx$s^@Ivq5 zU~6mZ?eXb})d(t@RUtV5kj#B^!<*|?NVRa`=k*aEsM&GmVd$+F-a2NND zt7ugF&X4Ne?p>Tx)X|VSnWtd>Jn_+c@*tz)-(4dA-R1jlhN)t_nn&iXy7iRC>({vt zK748ztUUd9HD>0AA|1thtx^u#;Uma>G31vo4|Qyu8iEGnj)xTuo~I8#ewP`&EMGA6 zD>D%P#fwKi+A|Z?1)I%9oweSDSrv~BBvxd7tnxVSD6S^&xE>*p_Nzs|3S!<37pWzS z6qWilio3clxGi+BPj{d&y2@nb;q9Fz=(kIzv*72cwx$*ovN~^ko~;;HO@5SNKYJ

%kHpazTtd*TXT!?2nDl%q){49K_Tg~y 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

*i`;b-|b8+FawNE%W+MrS%t(G(by{G;5 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 VI>BUt<^h)kb-C}d63 +SoapySDR[0:0] Generic RTL...
+SoapySDR[1:0] Generic RTL... + + +If the same device exposes several channels they appear as distinct devices with the channel number incremented like: + +

+SoapySDR[1:0] LimeSDR...
+SoapySDR[1:1] LimeSDR... +
+ +This works similarly to LimeSDR USB or BladeRF 2.0 micro +

Build

The plugin will be built only if the [BladeRF host library](https://github.com/Nuand/bladeRF) is installed in your system. If you build it from source and install it in a custom location say: `/opt/install/libbladeRF` you will have to add `-DLIBBLADERF_INCLUDE_DIR=/opt/install/libbladeRF/include -DLIBBLADERF_LIBRARIES=/opt/install/libbladeRF/lib/libbladeRF.so` to the cmake command line. diff --git a/plugins/samplesink/soapysdroutput/readme.md b/plugins/samplesink/soapysdroutput/readme.md new file mode 100644 index 000000000..ac8225971 --- /dev/null +++ b/plugins/samplesink/soapysdroutput/readme.md @@ -0,0 +1,184 @@ +

SoapySDR output plugin

+ +

Introduction

+ +This output sample sink plugin sends its samples to a device interfaced with [SoapySDR](https://github.com/pothosware/SoapySDR/wiki). + +SoapySDR is a [C/C++ API](https://github.com/pothosware/SoapySDR/blob/master/include/SoapySDR/Device.hpp) that interfaces SDR hardware on one side and application software on the other. Due to its very generic nature it was fairly difficult to implement and specific UI widgets were developped to handle specific types of parameters. The level of control depends on how the device API was implemented by the vendors. On application side some parts of the API have not been implemented and can be left as possible enhancements (see next). In any case it is recommended to use the native plugins if they are available. + +SoapySDR devices appear in the list of available devices in the order they are listed in the API call to SoapySDR. If more than one device controlled by SoapySDR is listed then its sequence number is incremented like: + + - SoapySDR[0:0] HackRF One... + - SoapySDR[1:0] HackRF One... + +If the same device exposes several channels they appear as distinct devices with the channel number incremented like: + + - SoapySDR[1:0] LimeSDR... + - SoapySDR[1:1] LimeSDR... + +This works similarly to LimeSDR USB or BladeRF 2.0 micro + +

Binary distributions

+ +The binary distributions provide only the SoapySDR base library. It is your responsibility to install SoapySDR in your system with the SoapySDR plugins suitable for your hardware. + +

SoapySDR API implementation

+ +Not all parts are implemented. Currently the following have been left out: + + - Frequency API tuning arguments. The tuning elements are of course supported. + - Clocking API + - Time API + - Sensor API + - Register API + - GPIO API + - I2C API + - SPI API + - UART API + +

Particular considerations concerning hardware

+ +In general as previously stated you should choose the native plugins if they are available. These are: + + - BladeRF + - HackRF + - LimeSDR + - PlutoSDR + +The following paragraphs list the known issues or oddities. + +

BladeRF

+ +It is very important NOT to use SoapySDR. The default parameters are set to flash the FPGA but as this does not suceeds it results in a FPGA image wipe out and the device returns in "Cypress" mode. It is not too difficult to recover but there is no point risking the hassle. + +

Red Pitaya

+ +When installed the Red Pitaya SoapySDR plugin lists a Red Pitaya device even if there is no Red Pitaya attached. Trying to select and start it when there is no Red Pitaya will result in program crash. + +

Interface

+ +![SoapySDR input plugin GUI](../../../doc/img/SoapySDROutput_plugin1.png) + +The top part described by number tags is common for all devices. The bottom part under the "A" tag depends on the SoapySDR device implementation. The corresponding widgets are stacked vertically inside a scrollable area as there may be many controls depending on how the device interface is implemented in SoapySDR. Move the slider on the right to see all parameters available. + +

1: Start/Stop

+ +Device start / stop button. + + - Blue triangle icon: device is ready and can be started + - Red square icon: device is running and can be stopped + - Magenta (or pink) square icon: an error occurred. In the case the device was accidentally disconnected you may click on the icon, plug back in and start again. + +

2: Stream sample rate

+ +Baseband I/Q sample rate in kS/s. This is the device sample rate (the "SR" SoapySDR control) divided by the interpolation factor (4). + +

3: Frequency

+ +This is the center frequency of transmission in kHz. The center frequency is usually the same for all Tx channels. The GUI of the sibling channel if present is adjusted automatically if necessary. This control corresponds to the first SoapySDR tuning element usually labeled as "RF" and would generally control the main local oscillator (LO). + +Use the wheels to adjust the value. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. + +

4: Interpolation factor

+ +The I/Q stream from the application is upsampled by a power of two before being sent to the the SoapySDR controlled device. Possible values are increasing powers of two: 1 (no interpolation), 2, 4, 8, 16, 32, 64. + +

5: Transverter mode open dialog

+ +This button opens a dialog to set the transverter mode frequency translation options: + +![Input stream transverter dialog](../../../doc/img/RTLSDR_plugin_xvrt.png) + +Note that if you mouse over the button a tooltip appears that displays the translating frequency and if translation is enabled or disabled. When the frequency translation is enabled the button is lit. + +

5.1: Translating frequency

+ +You can set the translating frequency in Hz with this dial. The manipulation of the dial is described in (3: Frequency). + +The frequency set in the device is the frequency on the main dial (1) minus this frequency. Thus it is positive for down converters and negative for up converters. + +For example a mixer at 120 MHz for HF operation you would set the value to -120,000,000 Hz so that if the main dial frequency is set at 7,130 kHz the PlutoSDR will be set to 127.130 MHz. + +If you use a down converter to receive the 6 cm band narrowband center frequency of 5670 MHz at 432 MHz you would set the translating frequency to 5760 - 432 = 5328 MHz thus dial +5,328,000,000 Hz. + +For bands even higher in the frequency spectrum the GHz digits are not really significant so you can have them set at 1 GHz. Thus to receive the 10368 MHz frequency at 432 MHz you would set the translating frequency to 1368 - 432 = 936 MHz. Note that in this case the frequency of the LO used in the mixer of the transverter is set at 9936 MHz. + +The Hz precision allows a fine tuning of the transverter LO offset + +

5.2: Translating frequency enable/disable

+ +Use this toggle button to activate or deactivate the frequency translation + +

5.3: Confirmation buttons

+ +Use these buttons to confirm ("OK") or dismiss ("Cancel") your changes. + +

6: Software LO ppm correction

+ +Use this slider to adjust SDRangel internal LO correction in ppm. It can be varied from -100.0 to 100.0 in 0.1 steps and is applied in software when calculating the frequency at which the LO should be set. + +

A: SoapySDR variable interface

+ +The form of widgets is closely related to the type of setting defined in the [SoapySDR interface](https://github.com/pothosware/SoapySDR/blob/master/include/SoapySDR/Types.hpp). These are: + + - Ranges + - Continuous range when maximum and minimum are different + - Discrete value when maximum and minimum are equal. Usually this appears in a range list to define a set of values + - List of ranges: more than one range applies to the same setting + - Arguments defined by + - type: boolean, integer, floating point, string + - nature: continuous or discrete + - String list + +

A.1: Continuous range

+ +If the range is all in the positive domain the unsigned variation is used: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_range_pos.png) + +Note that the same widget is used for single ranges and ranges list. In this case the range selection combo on the right is disabled. The manipulation of the dial is described in (3: Frequency) + +If the range is in both the positive and negative domains the signed variation is used: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_range_neg.png) + +If the range applies to a gain a slider is used: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_range_gain.png) + +

A.2: Discrete range

+ +Appears with a combo box to select a discrete value: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_range_discrete.png) + +

A.3: List of ranges

+ +In this case the range selection combo on the right is enabled: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_range_list1.png) + +

A.4: Boolean argument

+ +A checkbox is used to control boolean values: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_arg_bool2.png) + +For AGC, Auto DC and Auto IQ corrections the checkbox has its text label on the right: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_arg_bool1.png) + +

A.5: Int, Float and String arguments

+ +For all these types of values a line editor is used. Numerical values are parsed from string: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_arg_str.png) + +

A.6 String lists

+ +Some parameters like the antenna ports are expressed as a list of possible string values. These are presented in a combo box: + +![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_arg_strlist.png) + + + diff --git a/plugins/samplesource/soapysdrinput/readme.md b/plugins/samplesource/soapysdrinput/readme.md index 55191f7d6..ad4386000 100644 --- a/plugins/samplesource/soapysdrinput/readme.md +++ b/plugins/samplesource/soapysdrinput/readme.md @@ -6,6 +6,18 @@ This input sample source plugin gets its samples from a device interfaced with [ SoapySDR is a [C/C++ API](https://github.com/pothosware/SoapySDR/blob/master/include/SoapySDR/Device.hpp) that interfaces SDR hardware on one side and application software on the other. Due to its very generic nature it was fairly difficult to implement and specific UI widgets were developped to handle specific types of parameters. The level of control depends on how the device API was implemented by the vendors. On application side some parts of the API have not been implemented and can be left as possible enhancements (see next). In any case it is recommended to use the native plugins if they are available. +SoapySDR devices appear in the list of available devices in the order they are listed in the API call to SoapySDR. If more than one device controlled by SoapySDR is listed then its sequence number is incremented like: + + - SoapySDR[0:0] Generic RTL... + - SoapySDR[1:0] Generic RTL... + +If the same device exposes several channels they appear as distinct devices with the channel number incremented like: + + - SoapySDR[1:0] LimeSDR... + - SoapySDR[1:1] LimeSDR... + +This works similarly to LimeSDR USB or BladeRF 2.0 micro +

Binary distributions

The binary distributions provide only the SoapySDR base library. It is your responsibility to install SoapySDR in your system with the SoapySDR plugins suitable for your hardware. @@ -63,7 +75,7 @@ The top part described by number tags is common for all devices. The bottom part

1.1: Frequency

-This is the center frequency of reception in kHz. The center frequency is the same for all Rx channels. The GUI of the sibling channel if present is adjusted automatically. This control corresponds to the first SoapySDR tuning element usually labeled as "RF" and would generally control the main local oscillator (LO). +This is the center frequency of reception in kHz. The center frequency is usually the same for all Rx channels. The GUI of the sibling channel if present is adjusted automatically if necessary. This control corresponds to the first SoapySDR tuning element usually labeled as "RF" and would generally control the main local oscillator (LO). Use the wheels to adjust the value. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. @@ -188,7 +200,7 @@ A checkbox is used to control boolean values: ![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_arg_bool2.png) -For AGC, Auto DC and Auto IQ corrections a block with the text on the rihgt: +For AGC, Auto DC and Auto IQ corrections the checkbox has its text label on the right: ![SoapySDR input plugin GUI](../../../doc/img/SoapySDR_arg_bool1.png)