Commit Graph

382 Commits

Author SHA1 Message Date
Ryan Tucker ed4dda192b bladerf_common: formatting/whitespace/consistency 2018-08-15 19:53:26 +02:00
Ryan Tucker cee878536a bladerf: replace bladerf_module with bladerf_direction
More closely matches the handling in the API
2018-08-15 19:53:26 +02:00
Ryan Tucker 07babe997d bladerf_common: cleanup on set_gain_mode
Turns out that source/sink_impl already handle the AGC->MGC gain
preservation, so this was redundant and counterproductive.

Also DRY the code a bit.
2018-08-15 19:53:26 +02:00
Ryan Tucker 3523097e00 bladeRF: fix identification of channels 2018-08-15 19:52:57 +02:00
Ryan Tucker 855ac41c12 bladeRF: remove set_bb_gain
This is not meaningful with bladeRF hardware
2018-08-15 19:52:57 +02:00
Rey Tucker 4ffccd1363 update copyright dates 2018-08-15 19:52:57 +02:00
Rey Tucker a6209e3250 formatting/wording tweaks 2018-08-15 19:52:56 +02:00
Ryan Tucker 107b35bee3 bladerf2: add get_gain_mode and set_gain_mode 2018-08-15 19:52:56 +02:00
Ryan Tucker 708096f6e4 WIP: libbladeRF rev2 refactoring etc 2018-08-15 19:52:56 +02:00
Ryan Tucker 4395c3e6c7 WIP: more port work 2018-08-15 19:52:56 +02:00
Rey Tucker 56da34f7f2 bladerf: initial support for new bladeRF hardware
Relies on some new libbladeRF API calls. Has been tested
with gqrx on new bladeRF hardware (as a source) but have
not yet tested sink, or existing bladeRF hardware.
2018-08-15 19:52:56 +02:00
Josh Blum 0b5c3911f7 link with pthreads only when using gcc
Fix from c98be5dd for MSVC which does not require pthreads for boost threading library.
Under gcc -pthread adds support for multithreading with the pthreads library.
2018-08-15 19:52:23 +02:00
Dimitri Stolnikov ea1fc34766 Merge branch 'master' of git.osmocom.org:gr-osmosdr 2018-08-15 19:47:37 +02:00
Maxime Vincent c98be5dd9d Fix compilation with boost-1.67
Signed-off-by: Steve Markgraf <steve@steve-m.de>
2018-06-17 17:56:50 +02:00
Dimitri Stolnikov ea6b356cfd Remove workaround for gnuradio bug #528 as it has been fixed in 3.7.9.1 2017-06-14 20:42:59 +02:00
Dimitri Stolnikov c653754dde Merge branch 'master' of git.osmocom.org:gr-osmosdr 2017-06-12 00:04:36 +02:00
Dimitri Stolnikov b7aab458ed freesrp: whitespace fixes 2017-06-11 23:55:17 +02:00
Lukas Lao Beyer 1693e4e9d8 FreeSRP: Add support for multiple devices in get_devices 2017-06-11 23:52:12 +02:00
Dimitri Stolnikov 3c7d3f1664 rtl,rtl_tcp: add bias=0|1 parameter to switch off|on bias voltage on
gpio0
2017-06-11 22:04:03 +02:00
Dimitri Stolnikov a3b4e5c815 rtl_tcp: delete LUT table in destructor 2017-06-11 21:42:05 +02:00
Krzysztof Halasa 26f93e4687 RTL-TCP: Convert to single class model
The existing RTL TCP driver is quite different from its brother RTL_SDR.
It's much more complicated, uses gr::blocks::deinterleave and
gr::blocks::float_to_complex, and generally doesn't work correctly
(e.g. https://github.com/csete/gqrx/issues/99
 Spectrum is mirrored when filter or demodulator changes (rtl_tcp) #99)

I've converted the RTL TCP driver to the model used by RTL_SDR,
simplifying it in the process, and fixing the GQRX issue.
2017-06-11 21:30:47 +02:00
Krzysztof Halasa 33a8d1c2ae RTL-SDR: convert _lut to float[] to reduce size by a factor of 256
The _lut is being indexed by I + Q (16 bits = 65536 entries), however
both samples can be processed independently, resulting in 8-bit LUT.
Saves a bit of RAM and CPU cache.
2017-06-11 21:30:38 +02:00
Josh Blum cf9549485a soapy - correct constant for frequency correction
This is a typo, some modules use the "CORR" string
in the setFrequency(dir, chan, name, value) API
to perform fine frequency adjustments.
Updated modules will use setFrequencyCorrection(),
this is support for backwards compatible implementations.
2017-04-21 11:29:30 -07:00
Josh Blum 117f648859 soapy: support set/getFrequencyCorrection() API
backwards compatible changes with #ifdef
set/get_freq_corr() call directly into the SoapySDR
equivalent when supported by the API version.
2017-04-18 16:29:02 -07:00
Josh Blum b361fa5a77 soapy: support newer getSampleRateRange() API call
Switch to the newer API call which can provide a list of ranges.
There are feature detection ifdefs provided by the library
so that code will always correctly compile.
2017-04-18 16:29:02 -07:00
Josh Blum a9e536f45b soapy - check for freq corr before invoking
set_freq_corr() is often a NOP for devices.
checking avoids crashes for some applications (ex GQRX)
2017-04-18 16:29:02 -07:00
Lukas Lao Beyer 5ecfa255d2 Add support for FreeSRP
This patch adds support for both receiving and transmitting using
the FreeSRP. More information on the FreeSRP can be found at:

http://freesrp.org

The gr-osmosdr blocks added make use of libfreesrp, the library
required for interfacing with this device. The libfreesrp source
code is freely available at

https://github.com/freesrp/libfreesrp

Usage example:

osmocom_fft -a "freesrp"
2017-04-18 23:48:08 +02:00
Dimitri Stolnikov e9dde9afd7 bladerf: discover and use Volk 2017-02-27 23:23:54 +01:00
Sylvain Munaut 71846180f5 bladeRF: Use VOLK for type conversion
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
2017-02-27 23:03:43 +01:00
Dimitri Stolnikov 43df1c98c4 rfspace: use boost::chrono for sleeping 2017-02-27 23:03:09 +01:00
Dimitri Stolnikov 20a5fd1a68 hackrf: correct gcc6 warnings 2017-02-27 23:01:51 +01:00
Dimitri Stolnikov 6a0cac6609 airspy: correct gcc6 warnings 2017-02-27 23:01:15 +01:00
Alexandru Csete c6ed80aea7 rtl, rtl_tcp: Use std::abs.
Fixes compile error on Mac OS X.
2017-02-27 22:29:18 +01:00
Alexandru Csete 3823c8efce Custom FIR kernels for Airspy. 2017-02-27 22:27:53 +01:00
Alexandru Csete 6ea6c19028 rfspace: Send periodic keep-alive packets.
This patch enables sending keep-alive packets at 1 minute interval to
RFSpace networked radios. Without this the TCP connection to the radio
is closed after about 5 minutes (by the OS?).
2017-02-27 22:26:26 +01:00
Alexandru Csete 0dc8154f08 rfspace: Wait 10 ms before sending queries to device.
This is necessary to esatablish a working connection to the RFSpace
CloudIQ. Without this delay the radio will not be ready and we never
receive any response to the queries and the radio will close the
connection after 5 seconds.
2017-02-27 22:26:09 +01:00
Josh Blum 2a2236cc9e soapy: support step size in gain ranges
* This change is backwards compatible and checks for API support for step size.
* Created soapy_common.cc/h to house common gain range functions
* Moved factory mutex declaration to common source files as well
2017-02-02 11:33:34 -08:00
Josh Blum 3511defbf4 soapy: added device::find() support
Was missing from the implementation.
Now devices with a label show up nicely in GQRX
2017-02-02 11:10:08 -08:00
Josh Blum ae686c462d soapy: support newer getBandwidthRange() API call
Switch to the newer API call which can provide a list of ranges.
There are feature detection ifdefs provided by the library
so that code will always correctly compile.
2016-06-22 18:13:11 -07:00
Josh Blum 860e9a1a72 soapy: provide default gain range step
The soapysdr range type does not provide a step size,
however apps like the osmocom siggen use this size for a slider,
and a value of zero will cause a divide by zero error.

Although many ranges are not actually linear,
the idea to provide some default step to avoid crashes.
A future addition to the API may include providing a step.
2016-06-07 13:52:52 -07:00
Josh Blum e3b6560b04 soapy: support automatic bandwidth param
When the special 0.0 bandwidth setting is used, set the filter bandwidth to rate * 0.75.
Passing automatic 0.0 bandwidth for some devices was problematic.
2016-06-07 13:45:25 -07:00
Dimitri Stolnikov 164a09fc11 airspy: Option pack={0,1} to enable USB bit packing
Patch provided by Martin Smith.

Last July there were several changes made to the Airspy firmware and
libairspy that added support for a new bit packing mode where 4 sets of
12 bit samples are packed into 3 sets of 16 bits for the transfer across
the USB bus ( https://i.imgur.com/qXnWoEK.png?1 ). 25% less data is
transferred across the bus and this is good for some computers with
cheap USB chipsets. There is an overhead of extra memory bandwidth
required on the host side to unpack the data into a useful format, so
for optimal performance bit packing is disabled by default.

The data is automatically unpacked within libairspy before being passed
along, so no changes are required anywhere else if packing is enabled
(or not enabled). Airspy firmware older than v1.0.0-rc6 does not have
the function, but that is detected and handled by libairspy.

I wrote the attached patch to enable packing in gr-osmosdr, which I
tested and it works. It is basically a clone of the bias=0|1 lines as
pack=0|1 and calls the needed libairspy function.

ref:
https://github.com/airspy/firmware/commit/7e1806b
https://github.com/airspy/firmware/commit/5b7dcab
https://github.com/airspy/host/commit/a51eccb

---
Do some Baseline test with Airspy command line tools to have something
to compare USB throughput results
--------------------------------------------------------------------------------------------------------
$ sudo mount -t debugfs none /sys/kernel/debug
$ sudo modprobe usbmon
$ wireshark -i usbmod3 &
$ airspy_info ; sleep 120 ; \
airspy_rx -t 4 -r /dev/null -n 2400000000 ; sleep 120 ; \
airspy_rx -t 4 -r /dev/null -p 1 -n 2400000000 ; sleep 120 ; \
airspy_info
Wireshark->Statistics->IO Graph
The Bytes/Tick are double the actual data rate because of way wireshark
collects the USB packets, I could have added a filter to fix this. But
the relationship is valid 25% less with packing enabled. The data rate
in the IO Grahp drops from 80MB/sec (in+out) [really 40MB/sec] to
60MB/second (in+out) [really 30MB/sec] from unpacked to packed.
10MSPS no packing, packing https://i.imgur.com/pA9LPdE.png?1
2.5MSPS no packing, packing https://i.imgur.com/lA8q5aq.png?1

Verification test with my patched gr-osmosdr
--------------------------------------------
$ sudo mount -t debugfs none /sys/kernel/debug
$ sudo modprobe usbmon
$ wireshark -i usbmod3 &
$ osmocom_fft -a "airspy=0" -s 10000000 --fft-rate=1
$ osmocom_fft -a "airspy=0,pack=1" -s 10000000 --fft-rate=1
$ osmocom_fft -a "airspy=0" -s 2500000 --fft-rate=1
$ osmocom_fft -a "airspy=0,pack=1" -s 2500000 --fft-rate=1
$ osmocom_fft -a "airspy=0" -s 2500000 --fft-rate=1
$ osmocom_fft -a "airspy=0,pack=0" -s 2500000 --fft-rate=1

I ran all of the above tests and the wireshark USB throughput graphs
showed exactly what was expected.
40MB/sec(10MSPS+normal),30MB/sec(10MSPS+packing),10MB/sec(2.5MSPS
+normal),7.5MB/sec(2.5MSPS+packing),10MB/sec(2.5MSPS+normal),10MB/
sec(2.5MSPS+normal).

25% less when packing was enabled and if you did not specify the
"pack=1", then no bit packing is performed by libairspy. All the
magnitudes within the FFT windows looked exactly the same as they do
without bit packing.
2016-02-28 17:52:01 +01:00
Dimitri Stolnikov 2b79811350 bladerf: implement options for clock configuration
Since firmware 2016.01-rc1 bladeRF has the ability to lock to an
external reference as well as produce arbitrary frequency signal
(25 MHz here) on its clock output.

Use gr-osmosdr source with the following arguments to produce 25
MHz on the SMB connector:

osmocom_fft -a bladerf,smb=25e6

smb=25e6

To lock the bladeRF itself to an external GPSDO reference, use
additional arguments tamer=external for 10MHz or tamer=external_1pps for
1PPS GPSDO signals.

osmocom_fft -a bladerf,smb=25e6,tamer=external

tamer={internal,external_1pps,external}

The described method requires https://github.com/Nuand/bladeRF/releases/
tag/2016.01-rc1

Carefully *read the instructions for external reference locking*
(especially max allowed voltage levels) on Nuand's blog https://
www.nuand.com/blog/2016-01-rc1-release/
2016-02-28 17:45:54 +01:00
Jiří Pinkava ac15e7897b do not check for NULL before calling free 2016-01-10 22:48:31 +01:00
Dimitri Stolnikov e321095445 airspy: implement sensitivity and linerity gain profiles for set_gain()
use them with airspy,linearity (the default) or airspy,sensitivity
device arguments. Range is 0 to 21. Named gains still work as before.

Requires libairspy commit dc5cbca2f6f03458c40eab7c0f88fdfed60a08ff
2016-01-10 22:33:55 +01:00
Dimitri Stolnikov da2cf6a6f2 cmake: update component name & update AUTHORS file 2016-01-10 22:28:15 +01:00
Dimitri Stolnikov 11257d0aa6 add Red Pitaya discovery in device find function 2016-01-10 22:19:13 +01:00
Marcus Müller 84249efbea added file_sink_c 2016-01-10 22:12:19 +01:00
Pavel Demin f8cba954f0 redpitaya: fix compilation errors on MS Windows and on Mac OS X 2016-01-10 22:05:53 +01:00
Pavel Demin 810a981d0c redpitaya: change base class to gr::sync_block 2015-12-21 19:27:38 +01:00
Dimitri Stolnikov 55fe961987 update documentation 2015-12-18 22:20:27 +01:00
Pavel Demin 3582ba17e0 redpitaya: add support for Red Pitaya SDR transceiver
This patch adds two gr-osmosdr blocks that can be used with the SDR transceiver
application available from the Red Pitaya application marketplace:

http://bazaar.redpitaya.com

These new source and sink blocks are based on the file block with some pieces
borrowed from the rtl_tcp block.

More details about Red Pitaya SDR transceiver can be found at:

http://pavel-demin.github.io/red-pitaya-notes/sdr-transceiver

Usage example:

osmocom_fft -a "redpitaya=192.168.1.100:1001"

Signed-off-by: Pavel Demin <pavel.demin@uclouvain.be>
2015-12-18 22:02:25 +01:00
Alexandru Csete 7cec4c0f51 rfspace: Add basic Cloud-IQ support.
Cloud-IQ uses essentially the NetSDR protocol with different sample
rates and product ID.
2015-12-10 20:54:26 +01:00
Dimitri Stolnikov 2ca720cfee hackrf: change hackrf i/o from default char to explicit int8_t
original patch provided via github by Dirk Grunwald
2015-12-07 20:37:32 +01:00
Dimitri Stolnikov 69ec75a0b4 hackrf: since devicecount is signed, make comparisons signed as well 2015-12-07 20:27:02 +01:00
Dimitri Stolnikov 3198eb927a Merge remote-tracking branch 'origin/soapy_support' 2015-12-07 20:19:36 +01:00
Josh Blum c804460f5d provide NAN define for MSVC older than VC12
This fixes a minor compile issue on VC11 and below
where source_impl.cc and sink_impl.cc use the float NAN define.
The patch simply defines the NAN macro conditionally,
in a common header (which seemed like the best place).
2015-12-06 17:10:25 -08:00
Josh Blum 9ceadfb645 rtl_tcp: fix ssize_t definition for MSVC
This was actually causing a cryptic compile error because of the define.
The fix was to typedef ssize_t as ptrdiff_t, the same as bladerf_common.h
2015-12-06 15:49:44 -08:00
Josh Blum b3d915f591 soapy: do not throw when IQ bal mode is set to off
The automatic IQ balance mode is not supported,
but we should not throw when it is set to disabled.
Setting to disabled is techinically allowable,
and currently throwing is disruptive for users.
2015-12-06 15:19:26 -08:00
Jon Szymaniak 86ad584204 bladeRF: Support opening via a (subset of a) serial number, using any backend
The bladerf=X,[arguments] string now supports the following, where X is:

    - The "device instance" which represents the Nth bladeRF connected.
      This is 0-indexed, in the order displayed by `bladeRF-cli --probe`.

    - The device's serial number.
        For libbladeRF >= 1.4.1, a subset of the serial number is
        supported. The subset must be at least the first three
        characters of the serial number.

The backend specifier has been changed from "libusb" to the wildcard
("*"), allowing any available backend to be used.
2015-07-17 17:09:30 +02:00
Jon Szymaniak 43a00ae785 bladeRF: Added SOB/EOB stream tag handling support to bladerf_sink
When running with metadata mode enabled, the bladerf_sink supports 'tx_sob' and
'tx_eob' stream tags. Anything not in the burst will be dropped, and a warning
will be printed.

Use of the bladeRF metadata can be enabled via a 'enable_metadata'
device argument. If running full-duplex, this must be provided to both
the source and the sink. This does not currently any additional features
to the sink.
2015-07-17 17:09:23 +02:00
Utomnia ac1d8ec02d bug fixes 2015-07-16 19:35:18 +02:00
Dimitri Stolnikov 46e95395e0 cmake: move check for hackrf_device_list to hackrf subdirectory 2015-06-06 22:01:33 +02:00
Dimitri Stolnikov f33f30815a hackrf: use #ifdef just like in hackrf_sink_c 2015-06-01 22:24:32 +02:00
Heikki Hannikainen dd6690b6ca hackrf: Add cmake magic to figure out if multiple devices support is available in libhackrf, so that backwards compatibility with old libhackrf is maintained.
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:02 +02:00
Heikki Hannikainen 254e1b1981 hackrf_source: adjust error message
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:02 +02:00
Heikki Hannikainen e847176f3e hackrf_source: Support selecting device with index number (hackrf=0)
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:02 +02:00
Heikki Hannikainen dd6536757a hackrf_sink_c: device enumeration
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:02 +02:00
Heikki Hannikainen 485b02e615 hackrf device enumeration: Use only 6 characters of serial (should be unique per user?) and append it in device name
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:02 +02:00
Heikki Hannikainen 592a814bdb hackrf_source: Truncate serial numbers to 16 chars when enumerating, parse USB board IDs correctly
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:01 +02:00
Heikki Hannikainen 8e6ecd0644 hackrf_source: attempt device enumeration with hackrf_device_list
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:01 +02:00
Heikki Hannikainen 69181b0e85 hackrf_sink: support hackrf_open_by_serial
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:01 +02:00
Heikki Hannikainen 5dca656745 style update to match surroundings
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:01 +02:00
Heikki Hannikainen d4387f436d Require hackrf argument to have a non-zero-length value to trigger serial number search
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:01 +02:00
Heikki Hannikainen 9595b044b6 hackrf: support for hackrf_open_by_serial in hackrf source
Signed-off-by: Heikki Hannikainen <hessu@hes.iki.fi>
2015-06-01 22:01:01 +02:00
Dimitri Stolnikov 5943919828 hackrf: introduce bias=0|1 and bias_tx=0|1 parameters
... to support antenna/phantom power via a new device argument "bias"
(to match Airspy's existing bias power syntax). 0=disable and 1=enable.
I also added a device argument to control bias power at transmit time. I
named this option differently - "bias_tx" - to avoid accidentally
enabling bias power in transmit mode when an LNA may be attached in an
input amplifier configuration.

Original patch provided by Brad Hein
2015-05-27 23:55:00 +02:00
Dimitri Stolnikov 275e6aed19 airspy: comment on used gain values 2015-05-13 00:16:54 +02:00
Dimitri Stolnikov 8d25584da3 airspy: query supported samplerates from the firmware 2015-05-12 23:48:43 +02:00
Dimitri Stolnikov 3916b5bc4f cmake: added ENABLE_NONFREE option to enable nonfree components. 2015-05-12 23:30:45 +02:00
Dimitri Stolnikov 17c9497d4d sdrplay: added copyright 2015-05-12 23:28:35 +02:00
SDRplay be9af0fe6f changed bufi and bufq to std::vector 2015-04-28 22:35:18 +02:00
SDRplay 79b53f50e4 changed bufi and bufq to std::vector 2015-04-28 22:35:18 +02:00
SDRplay afed5df615 Added SDRplay RSP support
Initial build for SDRplay RSP support. Basic functionality, AGC etc. to
be added
2015-04-28 22:35:18 +02:00
Josh Blum 3532d60c11 osmo: minor msvc fixes for bladerf_common.h 2015-04-28 22:27:53 +02:00
Josh Blum c092f9e2a3 osmo: minor build tweaks w/ rtl on msvc 2015-04-28 22:27:53 +02:00
Josh Blum 61184a19e7 soapy: make use of per component freq api 2015-02-24 20:36:36 -08:00
Josh Blum 53ed8918f3 soapy: ordering of elements for bb/if gain 2015-02-17 19:57:27 -08:00
Josh Blum a960600a1e soapy: start/stop hooks should use de/activate return code 2015-02-16 23:15:26 -08:00
Josh Blum cd0d9350c6 soapy: fix set_dc_offset_mode implementation 2015-02-16 21:25:38 -08:00
Josh Blum 535a505069 soapy: fixes from last commit w/ field test 2015-02-16 21:04:05 -08:00
Josh Blum 6d6a483cfb soapy: filled in the source and sink implementation 2015-02-15 19:20:01 -08:00
Josh Blum 3afcb7e04f soapy: began work on soapy sdr support 2015-02-15 17:57:12 -08:00
Dimitri Stolnikov 48045b597d bladerf: include rxvga1 to the BB gain setting
Patch provided by Samu Laaja
2015-01-10 14:01:09 +01:00
Dimitri Stolnikov 46bb1ad1a0 airspy: increase version string size to 128 2014-12-16 00:15:26 +01:00
Dimitri Stolnikov 20fd6a8c34 airspy: implement DC bias control
use with -a "airspy,bias=1" to enable DC bias on antenna input
2014-11-27 16:38:25 +01:00
Dimitri Stolnikov 163cad2e96 airspy: remove deprecated init/exit calls 2014-11-27 16:28:30 +01:00
Dimitri Stolnikov 13114b7830 airspy: add support for 2.5MSPS rate (requires production firmware) 2014-11-27 16:22:27 +01:00
Dimitri Stolnikov aa4094b3fd introduce time & clock synchronisation APIs 2014-11-25 20:47:59 +01:00
Jon Szymaniak 8d9e6b58bb bladeRF: Fixed incorrectly placed 'else'
This addresses a defect introduced in 6e75abf which causes the
_consecutive_failures count to get reset with every failure, rather
then upon a successful return value.
2014-11-06 21:30:32 +01:00
Jon Szymaniak 6e75abf198 bladeRF: Don't fail out until 3 consecutive errors have occurred
This change is intended to make the bladeRF source/sink implementations
slightly more resilient to any transient issues in a flow graph.

For poor choices of buffers/transfers or under high CPU load, an RX or
TX operation might time out. Instead of immediately reporting WORK_DONE
and bailing out, an error message is now printed and the device will
attempt to continue transmitting/receiving samples.

After 3 consecutive errors have occurred on an RX/TX operation, the
device will report WORK_DONE; in this situation, something is likely
very wrong.
2014-11-03 23:24:04 +01:00