diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9c2cffe..a5dd8f5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,7 +121,6 @@ endif(APPLE)
# components required to the list of GR_REQUIRED_COMPONENTS (in all
# caps such as FILTER or FFT) and change the version to the minimum
# API compatible version required.
-find_package(CppUnit)
find_package(Doxygen)
MESSAGE(STATUS "Configuring GNU Radio C++ Libraries...")
@@ -132,10 +131,6 @@ if("${Gnuradio_VERSION}" VERSION_LESS MIN_GR_VERSION)
MESSAGE(FATAL_ERROR "GnuRadio version required: >=\"" ${MIN_GR_VERSION} "\" found: \"" ${Gnuradio_VERSION} "\"")
endif()
-if(NOT CPPUNIT_FOUND)
- message(FATAL_ERROR "CppUnit required to compile limesdr")
-endif()
-
########################################################################
# Find LimeSuite
########################################################################
@@ -178,14 +173,12 @@ include_directories(
${CMAKE_BINARY_DIR}/lib
${CMAKE_BINARY_DIR}/include
${Boost_INCLUDE_DIRS}
- ${CPPUNIT_INCLUDE_DIRS}
${GNURADIO_ALL_INCLUDE_DIRS}
${LIMESUITE_INCLUDE_DIRS}
)
link_directories(
${Boost_LIBRARY_DIRS}
- ${CPPUNIT_LIBRARY_DIRS}
${GNURADIO_RUNTIME_LIBRARY_DIRS}
${LIMESUITE_LIB}
)
diff --git a/README.md b/README.md
index b0a7439..a90d53b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# gr-limesdr v0.9 beta
+# gr-limesdr 1.0.0-RC
Package includes GNU Radio blocks for LimeSDR-USB/LimeSDR-Mini
boards. Various settings are hidden or shown, depending on the
@@ -8,12 +8,6 @@ selected device type.
* [MyriadRF Wiki page](https://wiki.myriadrf.org/Gr-limesdr_Plugin_for_GNURadio)
-## Currently under development
-
-* Callback functions
-* NCO setting
-* Windows OS support
-
## Dependencies
* GNU Radio
@@ -23,6 +17,8 @@ selected device type.
## Installation process
+* Linux
+
cd gr-limesdr
mkdir build
@@ -33,6 +29,21 @@ sudo make install
sudo ldconfig
+* Windows
+
+If you have "GNU Radio", merge windows\GNU_Radio folders with folders located in
+
+
+C:\Program Files\GNURadio-3.7
+
+
+If you have "Pothos SDR dev environment", merge windows\Pothos_SDR folders with
+folders located in
+
+
+C:\Program Files\PothosSDR
+
+
## Known issues
Known issues are located in:
@@ -42,5 +53,3 @@ gr-limesdr/docs/known_issues.txt
GNU Radio-Companion examples are located in:
gr-limesdr/examples
-
-Select .wav file path before running any of the TX examples.
diff --git a/docs/known_issues.txt b/docs/known_issues.txt
index fe98b87..7edc123 100644
--- a/docs/known_issues.txt
+++ b/docs/known_issues.txt
@@ -5,7 +5,5 @@ this line is need to be added in the end of .bashrc file.
2. Blocks work with LimeSuite version 17.10.0 and above.
-3. LimeSuite libraries ar not in /usr/local/lib. Delete libraries from usr/lib and reinstall LimeSuite.
-
-4. While running GNU Radio flowgraph “aUaU” message is thrown. This means audio underrun (not enough
+3. While running GNU Radio flowgraph “aUaU” message is thrown. This means audio underrun (not enough
samples ready to send to sound sink.
diff --git a/examples/FM_RDS.grc b/examples/FM_RDS.grc
new file mode 100644
index 0000000..fcd359f
--- /dev/null
+++ b/examples/FM_RDS.grc
@@ -0,0 +1,3558 @@
+
+
+
+ Thu Aug 28 08:24:49 2014
+
+ options
+
+ author
+ Lime Microsystems
+
+
+ window_size
+ 4096,4096
+
+
+ category
+ Custom
+
+
+ comment
+
+
+
+ description
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (14, 9)
+
+
+ _rotation
+ 0
+
+
+ generate_options
+ wx_gui
+
+
+ hier_block_src_path
+ .:
+
+
+ id
+ rds_rx
+
+
+ max_nouts
+ 0
+
+
+ qt_qss_theme
+
+
+
+ realtime_scheduling
+
+
+
+ run_command
+ {python} -u {filename}
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ sizing_mode
+ fixed
+
+
+ thread_safe_setters
+
+
+
+ title
+ FM RDS receiver
+
+
+ placement
+ (0,0)
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (560, 4)
+
+
+ _rotation
+ 0
+
+
+ id
+ audio_decim
+
+
+ value
+ 5
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (368, 1380)
+
+
+ _rotation
+ 0
+
+
+ id
+ audio_decim_rate
+
+
+ value
+ baseband_rate/audio_decim
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (272, 1380)
+
+
+ _rotation
+ 0
+
+
+ id
+ audio_rate
+
+
+ value
+ 48000
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (448, 4)
+
+
+ _rotation
+ 0
+
+
+ id
+ baseband_rate
+
+
+ value
+ samp_rate/bb_decim
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (664, 4)
+
+
+ _rotation
+ 0
+
+
+ id
+ bb_decim
+
+
+ value
+ 4
+
+
+
+ variable_slider
+
+ comment
+
+
+
+ converver
+ float_converter
+
+
+ value
+ 100.1e6
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1360, 16)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+ (1,0,1,2)
+
+
+ id
+ freq
+
+
+ label
+ Frequency
+
+
+ max
+ 108e6
+
+
+ min
+ 88e6
+
+
+ notebook
+
+
+
+ num_steps
+ 1000
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+
+ variable_slider
+
+ comment
+
+
+
+ converver
+ int_converter
+
+
+ value
+ 40
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1216, 16)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+ (0,0,1,1)
+
+
+ id
+ gain
+
+
+ label
+ RF Gain
+
+
+ max
+ 70
+
+
+ min
+ 0
+
+
+ notebook
+
+
+
+ num_steps
+ 70
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (344, 4)
+
+
+ _rotation
+ 0
+
+
+ id
+ samp_rate
+
+
+ value
+ 1000000
+
+
+
+ variable_slider
+
+ comment
+
+
+
+ converver
+ float_converter
+
+
+ value
+ 0.5
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1504, 16)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+ (0,1,1,1)
+
+
+ id
+ volume
+
+
+ label
+ Volume
+
+
+ max
+ 2
+
+
+ min
+ 0
+
+
+ notebook
+
+
+
+ num_steps
+ 51
+
+
+ style
+ wx.SL_HORIZONTAL
+
+
+
+ variable
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (280, 308)
+
+
+ _rotation
+ 0
+
+
+ id
+ xlate_bandwidth
+
+
+ value
+ 100000
+
+
+
+ analog_fm_deemph
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (632, 1308)
+
+
+ _rotation
+ 180
+
+
+ id
+ analog_fm_deemph_0_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_rate
+ audio_decim_rate
+
+
+ tau
+ 75e-6
+
+
+
+ analog_fm_deemph
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (640, 1460)
+
+
+ _rotation
+ 180
+
+
+ id
+ analog_fm_deemph_0_0_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_rate
+ audio_decim_rate
+
+
+ tau
+ 75e-6
+
+
+
+ analog_pll_refout_cc
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (864, 532)
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_pll_refout_cc_0
+
+
+ w
+ 0.001
+
+
+ max_freq
+ 2 * math.pi * (19000+200) / baseband_rate
+
+
+ maxoutbuf
+ 0
+
+
+ min_freq
+ 2 * math.pi * (19000-200) / baseband_rate
+
+
+ minoutbuf
+ 0
+
+
+
+ analog_wfm_rcv
+
+ audio_decimation
+ bb_decim
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (536, 380)
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_wfm_rcv_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ quad_rate
+ samp_rate
+
+
+
+ audio_sink
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ device_name
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (48, 1352)
+
+
+ _rotation
+ 180
+
+
+ id
+ audio_sink_0
+
+
+ num_inputs
+ 2
+
+
+ ok_to_block
+ True
+
+
+ samp_rate
+ audio_rate
+
+
+
+ blocks_add_xx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (824, 1456)
+
+
+ _rotation
+ 180
+
+
+ id
+ blocks_add_xx_0
+
+
+ type
+ float
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+
+ blocks_complex_to_imag
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (872, 680)
+
+
+ _rotation
+ 0
+
+
+ id
+ blocks_complex_to_imag_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ vlen
+ 1
+
+
+
+ blocks_complex_to_real
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (272, 1056)
+
+
+ _rotation
+ 0
+
+
+ id
+ blocks_complex_to_real_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ vlen
+ 1
+
+
+
+ blocks_keep_one_in_n
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (232, 1100)
+
+
+ _rotation
+ 0
+
+
+ id
+ blocks_keep_one_in_n_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ n
+ 2
+
+
+ type
+ byte
+
+
+ vlen
+ 1
+
+
+
+ blocks_multiply_const_vxx
+
+ alias
+
+
+
+ comment
+
+
+
+ const
+ volume
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (472, 1468)
+
+
+ _rotation
+ 180
+
+
+ id
+ blocks_multiply_const_vxx_0
+
+
+ type
+ float
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ vlen
+ 1
+
+
+
+ blocks_multiply_const_vxx
+
+ alias
+
+
+
+ comment
+
+
+
+ const
+ volume
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (472, 1316)
+
+
+ _rotation
+ 180
+
+
+ id
+ blocks_multiply_const_vxx_0_0
+
+
+ type
+ float
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ vlen
+ 1
+
+
+
+ blocks_multiply_xx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1264, 736)
+
+
+ _rotation
+ 270
+
+
+ id
+ blocks_multiply_xx_0
+
+
+ type
+ float
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+
+ blocks_multiply_xx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (928, 608)
+
+
+ _rotation
+ 180
+
+
+ id
+ blocks_multiply_xx_1
+
+
+ type
+ complex
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+
+ blocks_sub_xx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (808, 1304)
+
+
+ _rotation
+ 180
+
+
+ id
+ blocks_sub_xx_0
+
+
+ type
+ float
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ num_inputs
+ 2
+
+
+ vlen
+ 1
+
+
+
+ digital_binary_slicer_fb
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (80, 1104)
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_binary_slicer_fb_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+
+ digital_diff_decoder_bb
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (368, 1100)
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_diff_decoder_bb_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ modulus
+ 2
+
+
+
+ digital_mpsk_receiver_cc
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (48, 884)
+
+
+ _rotation
+ 0
+
+
+ gain_mu
+ 0.05
+
+
+ gain_omega
+ 0.001
+
+
+ id
+ digital_mpsk_receiver_cc_0
+
+
+ w
+ 1*cmath.pi/100.0
+
+
+ M
+ 2
+
+
+ fmax
+ 0.06
+
+
+ maxoutbuf
+ 0
+
+
+ fmin
+ -0.06
+
+
+ minoutbuf
+ 0
+
+
+ mu
+ 0.5
+
+
+ omega_relative_limit
+ 0.005
+
+
+ omega
+ samp_rate/bb_decim/audio_decim/ 2375.0
+
+
+ theta
+ 0
+
+
+
+ fir_filter_xxx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ audio_decim
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (668, 696)
+
+
+ _rotation
+ 270
+
+
+ id
+ fir_filter_xxx_1
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_delay
+ 0
+
+
+ taps
+ firdes.low_pass(1.0,baseband_rate,13e3,3e3,firdes.WIN_HAMMING)
+
+
+ type
+ fff
+
+
+
+ fir_filter_xxx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ 1
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (864, 412)
+
+
+ _rotation
+ 180
+
+
+ id
+ fir_filter_xxx_2
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_delay
+ 0
+
+
+ taps
+ firdes.complex_band_pass(1.0,baseband_rate,19e3-500,19e3+500,1e3,firdes.WIN_HAMMING)
+
+
+ type
+ fcc
+
+
+
+ fir_filter_xxx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ 1
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1272, 380)
+
+
+ _rotation
+ 0
+
+
+ id
+ fir_filter_xxx_3
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_delay
+ 0
+
+
+ taps
+ firdes.band_pass(1.0,baseband_rate,38e3-13e3,38e3+13e3,3e3,firdes.WIN_HAMMING)
+
+
+ type
+ fff
+
+
+
+ fir_filter_xxx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ audio_decim
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1268, 1144)
+
+
+ _rotation
+ 270
+
+
+ id
+ fir_filter_xxx_5
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_delay
+ 0
+
+
+ taps
+ firdes.low_pass(1.0,baseband_rate,20e3,40e3,firdes.WIN_HAMMING)
+
+
+ type
+ fff
+
+
+
+ freq_xlating_fir_filter_xxx
+
+ alias
+
+
+
+ center_freq
+ 0
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ 1
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (240, 368)
+
+
+ _rotation
+ 0
+
+
+ id
+ freq_xlating_fir_filter_xxx_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_rate
+ samp_rate
+
+
+ taps
+ firdes.low_pass(1, samp_rate, xlate_bandwidth, 100000)
+
+
+ type
+ ccc
+
+
+
+ freq_xlating_fir_filter_xxx
+
+ alias
+
+
+
+ center_freq
+ 57e3
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ audio_decim
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (48, 648)
+
+
+ _rotation
+ 0
+
+
+ id
+ freq_xlating_fir_filter_xxx_1
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samp_rate
+ baseband_rate
+
+
+ taps
+ firdes.low_pass(2500.0,baseband_rate,2.4e3,2e3,firdes.WIN_HAMMING)
+
+
+ type
+ fcc
+
+
+
+ gr_rds_decoder
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ debug
+ False
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (408, 1156)
+
+
+ _rotation
+ 180
+
+
+ id
+ gr_rds_decoder_0
+
+
+ log
+ True
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+
+ gr_rds_panel
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ freq
+ freq
+
+
+ _coordinate
+ (40, 1168)
+
+
+ _rotation
+ 180
+
+
+ grid_pos
+
+
+
+ id
+ gr_rds_panel_0
+
+
+ notebook
+
+
+
+
+ gr_rds_parser
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ debug
+ False
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (224, 1148)
+
+
+ _rotation
+ 180
+
+
+ id
+ gr_rds_parser_0
+
+
+ log
+ True
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ pty_locale
+ 0
+
+
+ reset
+ 0
+
+
+
+ import
+
+ alias
+
+
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (888, 484)
+
+
+ _rotation
+ 0
+
+
+ id
+ import_0
+
+
+ import
+ import math
+
+
+
+ limesdr_source
+
+ alias
+
+
+
+ channel
+ 0
+
+
+ analog_bandw_ch0
+ 1.5e6
+
+
+ analog_filter_ch0
+ 1
+
+
+ cmix_mode_ch0
+ 0
+
+
+ calibr_bandw_ch0
+ 2.5e6
+
+
+ calibration_ch0
+ 1
+
+
+ digital_bandw_ch0
+ 100e3
+
+
+ digital_filter_ch0
+ 1
+
+
+ gain_dB_ch0
+ gain
+
+
+ lna_path_ch0
+ 2
+
+
+ lna_path_mini
+ 3
+
+
+ nco_freq_ch0
+ 0
+
+
+ analog_bandw_ch1
+ 10e6
+
+
+ analog_filter_ch1
+ 0
+
+
+ cmix_mode_ch1
+ 0
+
+
+ calibr_bandw_ch1
+ 10e6
+
+
+ calibration_ch1
+ 0
+
+
+ digital_bandw_ch1
+ 0
+
+
+ digital_filter_ch1
+ 0
+
+
+ gain_dB_ch1
+ 60
+
+
+ lna_path_ch1
+ 1
+
+
+ nco_freq_ch1
+ 100e6
+
+
+ chip_mode
+ 1
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ serial
+
+
+
+ device_type
+ 1
+
+
+ _enabled
+ True
+
+
+ filename
+
+
+
+ _coordinate
+ (8, 260)
+
+
+ _rotation
+ 0
+
+
+ id
+ limesdr_source_0
+
+
+ file_switch
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ oversample
+ 0
+
+
+ rf_freq
+ freq
+
+
+ samp_rate
+ samp_rate
+
+
+
+ notebook
+
+ alias
+
+
+
+ comment
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (184, 6)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+ (2,0,1,2)
+
+
+ id
+ nb
+
+
+ labels
+ ['BB', 'Demod', 'L+R', 'L-R', 'Pilot', 'DSBSC', 'RDS', 'RDS constellation','Waterfall']
+
+
+ notebook
+
+
+
+ style
+ wx.NB_TOP
+
+
+
+ note
+
+ alias
+
+
+
+ comment
+ L+R for
+stereo
+receivers
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (776, 900)
+
+
+ _rotation
+ 180
+
+
+ id
+ note_0
+
+
+ note
+ L+R
+
+
+
+ note
+
+ alias
+
+
+
+ comment
+ In FM stereo broadcasting,
+a pilot tone of 19 kHz indicates
+that there is stereophonic
+information at 38 kHz
+(19×2, the second harmonic of the pilot).
+The receiver doubles the frequency
+of the pilot tone and uses it as a
+frequency and phase reference to
+demodulate the stereo information.
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1048, 460)
+
+
+ _rotation
+ 180
+
+
+ id
+ note_0_0
+
+
+ note
+ Pilot
+
+
+
+ note
+
+ alias
+
+
+
+ comment
+ DSBSC modulation
+of 38 kHz sinewave
+for mono
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1272, 276)
+
+
+ _rotation
+ 180
+
+
+ id
+ note_0_0_0
+
+
+ note
+ DSBSC
+
+
+
+ note
+
+ alias
+
+
+
+ comment
+ L-R for
+mono
+receivers
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (1136, 900)
+
+
+ _rotation
+ 0
+
+
+ id
+ note_0_1
+
+
+ note
+ L-R
+
+
+
+ note
+
+ alias
+
+
+
+ comment
+ Digital signal which
+includes information such
+as the name of the station,
+or free text such as the title
+of the program or the music.
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (264, 548)
+
+
+ _rotation
+ 180
+
+
+ id
+ note_0_2
+
+
+ note
+ RDS
+
+
+
+ note
+
+ alias
+
+
+
+ comment
+ We use lowest possible
+analog filter bandwidth
+and
+100 kHz digital filter bandwidth
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (8, 140)
+
+
+ _rotation
+ 180
+
+
+ id
+ note_10
+
+
+ note
+ LimeSDR
+
+
+
+ rational_resampler_xxx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ audio_decim_rate
+
+
+ _enabled
+ True
+
+
+ fbw
+ 0
+
+
+ _coordinate
+ (280, 1448)
+
+
+ _rotation
+ 180
+
+
+ id
+ rational_resampler_xxx_0
+
+
+ interp
+ audio_rate
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ taps
+ []
+
+
+ type
+ fff
+
+
+
+ rational_resampler_xxx
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ audio_decim_rate
+
+
+ _enabled
+ True
+
+
+ fbw
+ 0
+
+
+ _coordinate
+ (280, 1296)
+
+
+ _rotation
+ 180
+
+
+ id
+ rational_resampler_xxx_0_0
+
+
+ interp
+ audio_rate
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ taps
+ []
+
+
+ type
+ fff
+
+
+
+ root_raised_cosine_filter
+
+ alpha
+ 1
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ decim
+ 1
+
+
+ _enabled
+ True
+
+
+ type
+ fir_filter_ccf
+
+
+ _coordinate
+ (48, 760)
+
+
+ _rotation
+ 180
+
+
+ gain
+ 1
+
+
+ id
+ root_raised_cosine_filter_0
+
+
+ interp
+ 1
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ ntaps
+ 100
+
+
+ samp_rate
+ samp_rate/bb_decim/audio_decim
+
+
+ sym_rate
+ 2375
+
+
+
+ wxgui_fftsink2
+
+ avg_alpha
+ 0.8
+
+
+ average
+ True
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fft_size
+ 1024
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (544, 120)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_fftsink2_0
+
+
+ notebook
+ nb, 0
+
+
+ peak_hold
+ False
+
+
+ ref_level
+ -30
+
+
+ ref_scale
+ 2.0
+
+
+ fft_rate
+ 15
+
+
+ samp_rate
+ samp_rate
+
+
+ title
+ Baseband
+
+
+ type
+ complex
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+ y_divs
+ 10
+
+
+ y_per_div
+ 10
+
+
+
+ wxgui_fftsink2
+
+ avg_alpha
+ 0.8
+
+
+ average
+ True
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fft_size
+ 1024
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (904, 120)
+
+
+ _rotation
+ 180
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_fftsink2_0_0
+
+
+ notebook
+ nb, 1
+
+
+ peak_hold
+ False
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_rate
+ 15
+
+
+ samp_rate
+ baseband_rate
+
+
+ title
+ FM Demod
+
+
+ type
+ float
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+ y_divs
+ 10
+
+
+ y_per_div
+ 10
+
+
+
+ wxgui_fftsink2
+
+ avg_alpha
+ 0
+
+
+ average
+ False
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fft_size
+ 1024
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (736, 1012)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_fftsink2_0_0_0
+
+
+ notebook
+ nb, 2
+
+
+ peak_hold
+ False
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_rate
+ 15
+
+
+ samp_rate
+ audio_decim_rate
+
+
+ title
+ L+R
+
+
+ type
+ float
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+ y_divs
+ 10
+
+
+ y_per_div
+ 10
+
+
+
+ wxgui_fftsink2
+
+ avg_alpha
+ 0
+
+
+ average
+ False
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fft_size
+ 1024
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (1504, 316)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_fftsink2_0_0_0_1
+
+
+ notebook
+ nb, 5
+
+
+ peak_hold
+ False
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_rate
+ 15
+
+
+ samp_rate
+ baseband_rate
+
+
+ title
+ DSBSC Sub-carrier
+
+
+ type
+ float
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+ y_divs
+ 10
+
+
+ y_per_div
+ 10
+
+
+
+ wxgui_fftsink2
+
+ avg_alpha
+ 0
+
+
+ average
+ False
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fft_size
+ 1024
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (1096, 1012)
+
+
+ _rotation
+ 180
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_fftsink2_0_0_0_1_0_0
+
+
+ notebook
+ nb, 3
+
+
+ peak_hold
+ False
+
+
+ ref_level
+ -50
+
+
+ ref_scale
+ 2.0
+
+
+ fft_rate
+ 15
+
+
+ samp_rate
+ baseband_rate
+
+
+ title
+ L-R
+
+
+ type
+ float
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+ y_divs
+ 10
+
+
+ y_per_div
+ 10
+
+
+
+ wxgui_fftsink2
+
+ avg_alpha
+ 0
+
+
+ average
+ False
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fft_size
+ 1024
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (312, 684)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_fftsink2_0_0_0_1_0_1
+
+
+ notebook
+ nb,6
+
+
+ peak_hold
+ False
+
+
+ ref_level
+ 0
+
+
+ ref_scale
+ 2.0
+
+
+ fft_rate
+ 15
+
+
+ samp_rate
+ audio_rate
+
+
+ title
+ RDS
+
+
+ type
+ complex
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+ y_divs
+ 10
+
+
+ y_per_div
+ 10
+
+
+
+ wxgui_scopesink2
+
+ ac_couple
+ False
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ 1
+
+
+ _coordinate
+ (864, 728)
+
+
+ _rotation
+ 180
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_scopesink2_0
+
+
+ notebook
+ nb, 4
+
+
+ num_inputs
+ 1
+
+
+ samp_rate
+ baseband_rate
+
+
+ t_scale
+ 0
+
+
+ title
+ Pilot
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ type
+ float
+
+
+ v_offset
+ 0
+
+
+ v_scale
+ 0
+
+
+ win_size
+
+
+
+ xy_mode
+ False
+
+
+ y_axis_label
+ Counts
+
+
+
+ wxgui_scopesink2
+
+ ac_couple
+ False
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (320, 904)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_scopesink2_1
+
+
+ notebook
+ nb,7
+
+
+ num_inputs
+ 1
+
+
+ samp_rate
+ 2375
+
+
+ t_scale
+ 0
+
+
+ title
+ Scope Plot
+
+
+ trig_mode
+ wxgui.TRIG_MODE_AUTO
+
+
+ type
+ complex
+
+
+ v_offset
+ 0
+
+
+ v_scale
+ 0.4
+
+
+ win_size
+
+
+
+ xy_mode
+ True
+
+
+ y_axis_label
+ Counts
+
+
+
+ wxgui_waterfallsink2
+
+ avg_alpha
+ 0
+
+
+ average
+ False
+
+
+ baseband_freq
+ 0
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ dynamic_range
+ 100
+
+
+ _enabled
+ True
+
+
+ fft_rate
+ 15
+
+
+ fft_size
+ 512
+
+
+ freqvar
+ None
+
+
+ _coordinate
+ (736, 124)
+
+
+ _rotation
+ 0
+
+
+ grid_pos
+
+
+
+ id
+ wxgui_waterfallsink2_0
+
+
+ notebook
+ nb,8
+
+
+ ref_scale
+ 2.0
+
+
+ ref_level
+ 0
+
+
+ samp_rate
+ baseband_rate
+
+
+ title
+ Waterfall Plot
+
+
+ type
+ float
+
+
+ win_size
+
+
+
+ win
+ None
+
+
+
+ analog_fm_deemph_0_0
+ blocks_multiply_const_vxx_0_0
+ 0
+ 0
+
+
+ analog_fm_deemph_0_0_0
+ blocks_multiply_const_vxx_0
+ 0
+ 0
+
+
+ analog_pll_refout_cc_0
+ blocks_multiply_xx_1
+ 0
+ 0
+
+
+ analog_pll_refout_cc_0
+ blocks_multiply_xx_1
+ 0
+ 1
+
+
+ analog_wfm_rcv_0
+ fir_filter_xxx_1
+ 0
+ 0
+
+
+ analog_wfm_rcv_0
+ fir_filter_xxx_2
+ 0
+ 0
+
+
+ analog_wfm_rcv_0
+ fir_filter_xxx_3
+ 0
+ 0
+
+
+ analog_wfm_rcv_0
+ freq_xlating_fir_filter_xxx_1
+ 0
+ 0
+
+
+ analog_wfm_rcv_0
+ wxgui_fftsink2_0_0
+ 0
+ 0
+
+
+ analog_wfm_rcv_0
+ wxgui_waterfallsink2_0
+ 0
+ 0
+
+
+ blocks_add_xx_0
+ analog_fm_deemph_0_0_0
+ 0
+ 0
+
+
+ blocks_complex_to_imag_0
+ blocks_multiply_xx_0
+ 0
+ 1
+
+
+ blocks_complex_to_imag_0
+ wxgui_scopesink2_0
+ 0
+ 0
+
+
+ blocks_complex_to_real_0
+ digital_binary_slicer_fb_0
+ 0
+ 0
+
+
+ blocks_keep_one_in_n_0
+ digital_diff_decoder_bb_0
+ 0
+ 0
+
+
+ blocks_multiply_const_vxx_0
+ rational_resampler_xxx_0
+ 0
+ 0
+
+
+ blocks_multiply_const_vxx_0_0
+ rational_resampler_xxx_0_0
+ 0
+ 0
+
+
+ blocks_multiply_xx_0
+ fir_filter_xxx_5
+ 0
+ 0
+
+
+ blocks_multiply_xx_0
+ wxgui_fftsink2_0_0_0_1_0_0
+ 0
+ 0
+
+
+ blocks_multiply_xx_1
+ blocks_complex_to_imag_0
+ 0
+ 0
+
+
+ blocks_sub_xx_0
+ analog_fm_deemph_0_0
+ 0
+ 0
+
+
+ digital_binary_slicer_fb_0
+ blocks_keep_one_in_n_0
+ 0
+ 0
+
+
+ digital_diff_decoder_bb_0
+ gr_rds_decoder_0
+ 0
+ 0
+
+
+ digital_mpsk_receiver_cc_0
+ blocks_complex_to_real_0
+ 0
+ 0
+
+
+ digital_mpsk_receiver_cc_0
+ wxgui_scopesink2_1
+ 0
+ 0
+
+
+ fir_filter_xxx_1
+ blocks_add_xx_0
+ 0
+ 0
+
+
+ fir_filter_xxx_1
+ blocks_sub_xx_0
+ 0
+ 0
+
+
+ fir_filter_xxx_1
+ wxgui_fftsink2_0_0_0
+ 0
+ 0
+
+
+ fir_filter_xxx_2
+ analog_pll_refout_cc_0
+ 0
+ 0
+
+
+ fir_filter_xxx_3
+ blocks_multiply_xx_0
+ 0
+ 0
+
+
+ fir_filter_xxx_3
+ wxgui_fftsink2_0_0_0_1
+ 0
+ 0
+
+
+ fir_filter_xxx_5
+ blocks_add_xx_0
+ 0
+ 1
+
+
+ fir_filter_xxx_5
+ blocks_sub_xx_0
+ 0
+ 1
+
+
+ freq_xlating_fir_filter_xxx_0
+ analog_wfm_rcv_0
+ 0
+ 0
+
+
+ freq_xlating_fir_filter_xxx_0
+ wxgui_fftsink2_0
+ 0
+ 0
+
+
+ freq_xlating_fir_filter_xxx_1
+ root_raised_cosine_filter_0
+ 0
+ 0
+
+
+ freq_xlating_fir_filter_xxx_1
+ wxgui_fftsink2_0_0_0_1_0_1
+ 0
+ 0
+
+
+ gr_rds_decoder_0
+ gr_rds_parser_0
+ out
+ in
+
+
+ gr_rds_parser_0
+ gr_rds_panel_0
+ out
+ in
+
+
+ limesdr_source_0
+ freq_xlating_fir_filter_xxx_0
+ 0
+ 0
+
+
+ rational_resampler_xxx_0
+ audio_sink_0
+ 0
+ 0
+
+
+ rational_resampler_xxx_0_0
+ audio_sink_0
+ 0
+ 1
+
+
+ root_raised_cosine_filter_0
+ digital_mpsk_receiver_cc_0
+ 0
+ 0
+
+
diff --git a/examples/FM_receiver.grc b/examples/FM_receiver.grc
index 707890e..020a348 100644
--- a/examples/FM_receiver.grc
+++ b/examples/FM_receiver.grc
@@ -1,5 +1,5 @@
-
+
Tue Feb 20 16:15:20 2018
@@ -10,7 +10,7 @@
window_size
-
+ (1200,500)
category
@@ -72,6 +72,10 @@
run
True
+
+ sizing_mode
+ fixed
+
thread_safe_setters
@@ -80,6 +84,10 @@
title
FM receiver
+
+ placement
+ (0,0)
+
variable_slider
@@ -101,7 +109,7 @@
_coordinate
- (584, 17)
+ (248, 368)
_rotation
@@ -160,7 +168,7 @@
_coordinate
- (728, 17)
+ (392, 368)
_rotation
@@ -219,7 +227,7 @@
_coordinate
- (864, 17)
+ (896, 152)
_rotation
@@ -282,7 +290,7 @@
_coordinate
- (616, 205)
+ (704, 260)
_rotation
@@ -329,7 +337,7 @@
_coordinate
- (840, 140)
+ (1056, 268)
_rotation
@@ -376,7 +384,7 @@
_coordinate
- (792, 212)
+ (896, 268)
_rotation
@@ -421,6 +429,10 @@
analog_filter_ch0
1
+
+ cmix_mode_ch0
+ 0
+
calibr_bandw_ch0
2.5e6
@@ -449,6 +461,10 @@
lna_path_mini
3
+
+ nco_freq_ch0
+ 0
+
analog_bandw_ch1
2e6
@@ -457,6 +473,10 @@
analog_filter_ch1
1
+
+ cmix_mode_ch1
+ 0
+
calibr_bandw_ch1
2.5e6
@@ -482,8 +502,8 @@
2
- rf_freq
- 100.1e6
+ nco_freq_ch1
+ 0
chip_mode
@@ -498,8 +518,8 @@
- device_number
- 0
+ serial
+
device_type
@@ -515,7 +535,7 @@
_coordinate
- (8, 107)
+ (8, 148)
_rotation
@@ -541,6 +561,10 @@
oversample
0
+
+ rf_freq
+ 100.1e6
+
samp_rate
2e6
@@ -582,7 +606,7 @@
_coordinate
- (248, 170)
+ (288, 224)
_rotation
@@ -649,7 +673,7 @@
_coordinate
- (440, 191)
+ (520, 248)
_rotation
@@ -720,7 +744,7 @@
_coordinate
- (424, 13)
+ (520, 12)
_rotation
diff --git a/examples/FM_transmitter.grc b/examples/FM_transmitter.grc
index 46106bd..edd6fcb 100644
--- a/examples/FM_transmitter.grc
+++ b/examples/FM_transmitter.grc
@@ -1,5 +1,5 @@
-
+
Tue Feb 20 16:22:48 2018
@@ -10,7 +10,7 @@
window_size
-
+ (1000,500)
category
@@ -72,6 +72,10 @@
run
True
+
+ sizing_mode
+ fixed
+
thread_safe_setters
@@ -80,6 +84,10 @@
title
FM transmitter
+
+ placement
+ (0,0)
+
analog_nbfm_tx
@@ -105,7 +113,7 @@
_coordinate
- (216, 199)
+ (200, 200)
_rotation
@@ -127,6 +135,10 @@
minoutbuf
0
+
+ fh
+ -1.0
+
quad_rate
480000
@@ -160,7 +172,7 @@
_coordinate
- (8, 213)
+ (16, 220)
_rotation
@@ -205,6 +217,10 @@
analog_filter_ch0
1
+
+ cmix_mode_ch0
+ 0
+
calibr_bandw_ch0
2.5e6
@@ -225,6 +241,10 @@
gain_dB_ch0
60
+
+ nco_freq_ch0
+ 0
+
pa_path_ch0
1
@@ -241,6 +261,10 @@
analog_filter_ch1
1
+
+ cmix_mode_ch1
+ 0
+
calibr_bandw_ch1
10e6
@@ -262,12 +286,12 @@
0
- pa_path_ch1
- 1
+ nco_freq_ch1
+ 0
- rf_freq
- 446.09375e6
+ pa_path_ch1
+ 1
chip_mode
@@ -282,8 +306,8 @@
- device_number
- 0
+ serial
+
device_type
@@ -299,7 +323,7 @@
_coordinate
- (608, 19)
+ (696, 20)
_rotation
@@ -317,6 +341,10 @@
oversample
0
+
+ rf_freq
+ 446.09375e6
+
samp_rate
2e6
@@ -350,7 +378,7 @@
_coordinate
- (400, 199)
+ (448, 208)
_rotation
@@ -421,7 +449,7 @@
_coordinate
- (608, 285)
+ (696, 308)
_rotation
diff --git a/examples/GFSK.grc b/examples/GFSK.grc
new file mode 100644
index 0000000..891f9e8
--- /dev/null
+++ b/examples/GFSK.grc
@@ -0,0 +1,1640 @@
+
+
+
+ Thu May 24 14:58:19 2018
+
+ options
+
+ author
+ Lime Microsystems
+
+
+ window_size
+ (1000,500)
+
+
+ category
+ Custom
+
+
+ comment
+
+
+
+ description
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (8, 8)
+
+
+ _rotation
+ 0
+
+
+ generate_options
+ qt_gui
+
+
+ hier_block_src_path
+ .:
+
+
+ id
+ top_block
+
+
+ max_nouts
+ 0
+
+
+ qt_qss_theme
+
+
+
+ realtime_scheduling
+
+
+
+ run_command
+ {python} -u {filename}
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ sizing_mode
+ fixed
+
+
+ thread_safe_setters
+
+
+
+ title
+ GFSK loopback
+
+
+ placement
+ (0,0)
+
+
+
+ analog_quadrature_demod_cf
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (656, 52)
+
+
+ _rotation
+ 0
+
+
+ gain
+ 1
+
+
+ id
+ analog_quadrature_demod_cf_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+
+ analog_quadrature_demod_cf
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (256, 292)
+
+
+ _rotation
+ 0
+
+
+ gain
+ 1
+
+
+ id
+ analog_quadrature_demod_cf_0_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+
+ blks2_packet_decoder
+
+ access_code
+
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ 1
+
+
+ _coordinate
+ (472, 388)
+
+
+ _rotation
+ 0
+
+
+ id
+ blks2_packet_decoder_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ type
+ byte
+
+
+ threshold
+ -1
+
+
+
+ blks2_packet_encoder
+
+ access_code
+
+
+
+ bits_per_symbol
+ 1
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (240, 96)
+
+
+ _rotation
+ 0
+
+
+ id
+ blks2_packet_encoder_0
+
+
+ type
+ byte
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ pad_for_usrp
+ False
+
+
+ payload_length
+ 16
+
+
+ preamble
+
+
+
+ samples_per_symbol
+ 4
+
+
+
+ blocks_file_sink
+
+ append
+ False
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ 1
+
+
+ file
+
+
+
+ _coordinate
+ (640, 380)
+
+
+ _rotation
+ 0
+
+
+ id
+ blocks_file_sink_0
+
+
+ type
+ byte
+
+
+ unbuffered
+ True
+
+
+ vlen
+ 1
+
+
+
+ blocks_file_source
+
+ begin_tag
+ pmt.PMT_NIL
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ file
+
+
+
+ _coordinate
+ (72, 116)
+
+
+ _rotation
+ 0
+
+
+ id
+ blocks_file_source_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ type
+ byte
+
+
+ repeat
+ True
+
+
+ vlen
+ 1
+
+
+
+ digital_gfsk_demod
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ 1
+
+
+ freq_error
+ 0.0
+
+
+ _coordinate
+ (256, 360)
+
+
+ _rotation
+ 0
+
+
+ gain_mu
+ 0.175
+
+
+ id
+ digital_gfsk_demod_0
+
+
+ log
+ False
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ mu
+ 0.5
+
+
+ omega_relative_limit
+ 0.005
+
+
+ samples_per_symbol
+ 4
+
+
+ sensitivity
+ 1
+
+
+ verbose
+ False
+
+
+
+ digital_gfsk_mod
+
+ bt
+ 0.35
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (448, 112)
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_gfsk_mod_0
+
+
+ log
+ False
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ samples_per_symbol
+ 4
+
+
+ sensitivity
+ 1
+
+
+ verbose
+ True
+
+
+
+ limesdr_sink
+
+ alias
+
+
+
+ channel
+ 0
+
+
+ analog_bandw_ch0
+ 10e6
+
+
+ analog_filter_ch0
+ 0
+
+
+ cmix_mode_ch0
+ 0
+
+
+ calibr_bandw_ch0
+ 10e6
+
+
+ calibration_ch0
+ 0
+
+
+ digital_bandw_ch0
+ 0
+
+
+ digital_filter_ch0
+ 0
+
+
+ gain_dB_ch0
+ 40
+
+
+ nco_freq_ch0
+ 0
+
+
+ pa_path_ch0
+ 1
+
+
+ pa_path_mini
+ 1
+
+
+ analog_bandw_ch1
+ 10e6
+
+
+ analog_filter_ch1
+ 0
+
+
+ cmix_mode_ch1
+ 0
+
+
+ calibr_bandw_ch1
+ 10e6
+
+
+ calibration_ch1
+ 0
+
+
+ digital_bandw_ch1
+ 0
+
+
+ digital_filter_ch1
+ 0
+
+
+ gain_dB_ch1
+ 60
+
+
+ nco_freq_ch1
+ 100e6
+
+
+ pa_path_ch1
+ 1
+
+
+ chip_mode
+ 1
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ serial
+
+
+
+ device_type
+ 2
+
+
+ _enabled
+ 1
+
+
+ filename
+
+
+
+ _coordinate
+ (816, 120)
+
+
+ _rotation
+ 0
+
+
+ id
+ limesdr_sink_0
+
+
+ file_switch
+ 0
+
+
+ oversample
+ 0
+
+
+ rf_freq
+ 1e9
+
+
+ samp_rate
+ 0.5e6
+
+
+
+ limesdr_source
+
+ alias
+
+
+
+ channel
+ 0
+
+
+ analog_bandw_ch0
+ 10e6
+
+
+ analog_filter_ch0
+ 0
+
+
+ cmix_mode_ch0
+ 0
+
+
+ calibr_bandw_ch0
+ 10e6
+
+
+ calibration_ch0
+ 0
+
+
+ digital_bandw_ch0
+ 0
+
+
+ digital_filter_ch0
+ 0
+
+
+ gain_dB_ch0
+ 40
+
+
+ lna_path_ch0
+ 2
+
+
+ lna_path_mini
+ 3
+
+
+ nco_freq_ch0
+ 0
+
+
+ analog_bandw_ch1
+ 10e6
+
+
+ analog_filter_ch1
+ 0
+
+
+ cmix_mode_ch1
+ 0
+
+
+ calibr_bandw_ch1
+ 10e6
+
+
+ calibration_ch1
+ 0
+
+
+ digital_bandw_ch1
+ 0
+
+
+ digital_filter_ch1
+ 0
+
+
+ gain_dB_ch1
+ 60
+
+
+ lna_path_ch1
+ 1
+
+
+ nco_freq_ch1
+ 100e6
+
+
+ chip_mode
+ 1
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ serial
+
+
+
+ device_type
+ 2
+
+
+ _enabled
+ 1
+
+
+ filename
+
+
+
+ _coordinate
+ (8, 240)
+
+
+ _rotation
+ 0
+
+
+ id
+ limesdr_source_0
+
+
+ file_switch
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ oversample
+ 0
+
+
+ rf_freq
+ 1e9
+
+
+ samp_rate
+ 0.5e6
+
+
+
+ qtgui_time_sink_x
+
+ autoscale
+ False
+
+
+ axislabels
+ True
+
+
+ alias
+
+
+
+ comment
+
+
+
+ ctrlpanel
+ False
+
+
+ affinity
+
+
+
+ entags
+ True
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (832, 32)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ grid
+ False
+
+
+ id
+ qtgui_time_sink_x_0
+
+
+ legend
+ True
+
+
+ alpha1
+ 1.0
+
+
+ color1
+ "blue"
+
+
+ label1
+
+
+
+ marker1
+ -1
+
+
+ style1
+ 1
+
+
+ width1
+ 1
+
+
+ alpha10
+ 1.0
+
+
+ color10
+ "blue"
+
+
+ label10
+
+
+
+ marker10
+ -1
+
+
+ style10
+ 1
+
+
+ width10
+ 1
+
+
+ alpha2
+ 1.0
+
+
+ color2
+ "red"
+
+
+ label2
+
+
+
+ marker2
+ -1
+
+
+ style2
+ 1
+
+
+ width2
+ 1
+
+
+ alpha3
+ 1.0
+
+
+ color3
+ "green"
+
+
+ label3
+
+
+
+ marker3
+ -1
+
+
+ style3
+ 1
+
+
+ width3
+ 1
+
+
+ alpha4
+ 1.0
+
+
+ color4
+ "black"
+
+
+ label4
+
+
+
+ marker4
+ -1
+
+
+ style4
+ 1
+
+
+ width4
+ 1
+
+
+ alpha5
+ 1.0
+
+
+ color5
+ "cyan"
+
+
+ label5
+
+
+
+ marker5
+ -1
+
+
+ style5
+ 1
+
+
+ width5
+ 1
+
+
+ alpha6
+ 1.0
+
+
+ color6
+ "magenta"
+
+
+ label6
+
+
+
+ marker6
+ -1
+
+
+ style6
+ 1
+
+
+ width6
+ 1
+
+
+ alpha7
+ 1.0
+
+
+ color7
+ "yellow"
+
+
+ label7
+
+
+
+ marker7
+ -1
+
+
+ style7
+ 1
+
+
+ width7
+ 1
+
+
+ alpha8
+ 1.0
+
+
+ color8
+ "dark red"
+
+
+ label8
+
+
+
+ marker8
+ -1
+
+
+ style8
+ 1
+
+
+ width8
+ 1
+
+
+ alpha9
+ 1.0
+
+
+ color9
+ "dark green"
+
+
+ label9
+
+
+
+ marker9
+ -1
+
+
+ style9
+ 1
+
+
+ width9
+ 1
+
+
+ name
+ Sent Signal
+
+
+ nconnections
+ 1
+
+
+ size
+ 1024
+
+
+ srate
+ 2.4e6
+
+
+ stemplot
+ False
+
+
+ tr_chan
+ 0
+
+
+ tr_delay
+ 0
+
+
+ tr_level
+ 0.0
+
+
+ tr_mode
+ qtgui.TRIG_MODE_FREE
+
+
+ tr_slope
+ qtgui.TRIG_SLOPE_POS
+
+
+ tr_tag
+ ""
+
+
+ type
+ float
+
+
+ update_time
+ 0.10
+
+
+ ylabel
+ Amplitude
+
+
+ yunit
+ ""
+
+
+ ymax
+ 1
+
+
+ ymin
+ -1
+
+
+
+ qtgui_time_sink_x
+
+ autoscale
+ False
+
+
+ axislabels
+ True
+
+
+ alias
+
+
+
+ comment
+
+
+
+ ctrlpanel
+ False
+
+
+ affinity
+
+
+
+ entags
+ True
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (440, 272)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ grid
+ False
+
+
+ id
+ qtgui_time_sink_x_0_0
+
+
+ legend
+ True
+
+
+ alpha1
+ 1.0
+
+
+ color1
+ "blue"
+
+
+ label1
+
+
+
+ marker1
+ -1
+
+
+ style1
+ 1
+
+
+ width1
+ 1
+
+
+ alpha10
+ 1.0
+
+
+ color10
+ "blue"
+
+
+ label10
+
+
+
+ marker10
+ -1
+
+
+ style10
+ 1
+
+
+ width10
+ 1
+
+
+ alpha2
+ 1.0
+
+
+ color2
+ "red"
+
+
+ label2
+
+
+
+ marker2
+ -1
+
+
+ style2
+ 1
+
+
+ width2
+ 1
+
+
+ alpha3
+ 1.0
+
+
+ color3
+ "green"
+
+
+ label3
+
+
+
+ marker3
+ -1
+
+
+ style3
+ 1
+
+
+ width3
+ 1
+
+
+ alpha4
+ 1.0
+
+
+ color4
+ "black"
+
+
+ label4
+
+
+
+ marker4
+ -1
+
+
+ style4
+ 1
+
+
+ width4
+ 1
+
+
+ alpha5
+ 1.0
+
+
+ color5
+ "cyan"
+
+
+ label5
+
+
+
+ marker5
+ -1
+
+
+ style5
+ 1
+
+
+ width5
+ 1
+
+
+ alpha6
+ 1.0
+
+
+ color6
+ "magenta"
+
+
+ label6
+
+
+
+ marker6
+ -1
+
+
+ style6
+ 1
+
+
+ width6
+ 1
+
+
+ alpha7
+ 1.0
+
+
+ color7
+ "yellow"
+
+
+ label7
+
+
+
+ marker7
+ -1
+
+
+ style7
+ 1
+
+
+ width7
+ 1
+
+
+ alpha8
+ 1.0
+
+
+ color8
+ "dark red"
+
+
+ label8
+
+
+
+ marker8
+ -1
+
+
+ style8
+ 1
+
+
+ width8
+ 1
+
+
+ alpha9
+ 1.0
+
+
+ color9
+ "dark green"
+
+
+ label9
+
+
+
+ marker9
+ -1
+
+
+ style9
+ 1
+
+
+ width9
+ 1
+
+
+ name
+ Received Signal
+
+
+ nconnections
+ 1
+
+
+ size
+ 1024
+
+
+ srate
+ 2.4e6
+
+
+ stemplot
+ False
+
+
+ tr_chan
+ 0
+
+
+ tr_delay
+ 0
+
+
+ tr_level
+ 0.0
+
+
+ tr_mode
+ qtgui.TRIG_MODE_FREE
+
+
+ tr_slope
+ qtgui.TRIG_SLOPE_POS
+
+
+ tr_tag
+ ""
+
+
+ type
+ float
+
+
+ update_time
+ 0.10
+
+
+ ylabel
+ Amplitude
+
+
+ yunit
+ ""
+
+
+ ymax
+ 1
+
+
+ ymin
+ -1
+
+
+
+ analog_quadrature_demod_cf_0
+ qtgui_time_sink_x_0
+ 0
+ 0
+
+
+ analog_quadrature_demod_cf_0_0
+ qtgui_time_sink_x_0_0
+ 0
+ 0
+
+
+ blks2_packet_decoder_0
+ blocks_file_sink_0
+ 0
+ 0
+
+
+ blks2_packet_encoder_0
+ digital_gfsk_mod_0
+ 0
+ 0
+
+
+ blocks_file_source_0
+ blks2_packet_encoder_0
+ 0
+ 0
+
+
+ digital_gfsk_demod_0
+ blks2_packet_decoder_0
+ 0
+ 0
+
+
+ digital_gfsk_mod_0
+ analog_quadrature_demod_cf_0
+ 0
+ 0
+
+
+ digital_gfsk_mod_0
+ limesdr_sink_0
+ 0
+ 0
+
+
+ limesdr_source_0
+ analog_quadrature_demod_cf_0_0
+ 0
+ 0
+
+
+ limesdr_source_0
+ digital_gfsk_demod_0
+ 0
+ 0
+
+
diff --git a/examples/signal_analyzer.grc b/examples/signal_analyzer.grc
new file mode 100644
index 0000000..00c6b3a
--- /dev/null
+++ b/examples/signal_analyzer.grc
@@ -0,0 +1,915 @@
+
+
+
+ Mon May 21 21:44:03 2018
+
+ options
+
+ author
+ Lime Microsystems
+
+
+ window_size
+ (1000,500)
+
+
+ category
+ Custom
+
+
+ comment
+
+
+
+ description
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (8, 8)
+
+
+ _rotation
+ 0
+
+
+ generate_options
+ qt_gui
+
+
+ hier_block_src_path
+ .:
+
+
+ id
+ top_block
+
+
+ max_nouts
+ 0
+
+
+ qt_qss_theme
+
+
+
+ realtime_scheduling
+
+
+
+ run_command
+ {python} -u {filename}
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ sizing_mode
+ fixed
+
+
+ thread_safe_setters
+
+
+
+ title
+ Signal analyzer
+
+
+ placement
+ (0,0)
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ 10
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (176, 206)
+
+
+ gui_hint
+ 0,4,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_filter_bandwidth_rx
+
+
+ label
+ RX analog filter bandwidth [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_chooser
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (200, 283)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_filter_rx
+
+
+ label0
+ "OFF"
+
+
+ label1
+ "ON"
+
+
+ label2
+
+
+
+ label3
+
+
+
+ label4
+
+
+
+ label
+ RX analog filter
+
+
+ labels
+ []
+
+
+ num_opts
+ 2
+
+
+ option0
+ 0
+
+
+ option1
+ 1
+
+
+ option2
+ 2
+
+
+ option3
+ 3
+
+
+ option4
+ 4
+
+
+ options
+ [0, 1, 2]
+
+
+ orient
+ Qt.QHBoxLayout
+
+
+ type
+ int
+
+
+ widget
+ radio_buttons
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ 600
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (176, 118)
+
+
+ gui_hint
+ 0,1,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ baseband_rx
+
+
+ label
+ RX baseband [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ sample_rate/2e6
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (368, 206)
+
+
+ gui_hint
+ 0,6,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_filter_bandwidth_rx
+
+
+ label
+ RX digital filter bandwidth [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_chooser
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (384, 283)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_filter_rx
+
+
+ label0
+ "OFF"
+
+
+ label1
+ "ON"
+
+
+ label2
+
+
+
+ label3
+
+
+
+ label4
+
+
+
+ label
+ RX digital filter
+
+
+ labels
+ []
+
+
+ num_opts
+ 2
+
+
+ option0
+ 0
+
+
+ option1
+ 1
+
+
+ option2
+ 2
+
+
+ option3
+ 3
+
+
+ option4
+ 4
+
+
+ options
+ [0, 1, 2]
+
+
+ orient
+ Qt.QHBoxLayout
+
+
+ type
+ int
+
+
+ widget
+ radio_buttons
+
+
+
+ variable_qtgui_range
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ 1
+
+
+ _coordinate
+ (392, 73)
+
+
+ gui_hint
+ 0,8,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ gain_rx
+
+
+ label
+ RX gain
+
+
+ min_len
+ 200
+
+
+ orient
+ Qt.Horizontal
+
+
+ start
+ 0
+
+
+ step
+ 1
+
+
+ stop
+ 70
+
+
+ rangeType
+ int
+
+
+ widget
+ counter_slider
+
+
+
+ variable_qtgui_chooser
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (8, 283)
+
+
+ gui_hint
+ 0,3,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ nco_direction_rx
+
+
+ label0
+ "UPCONVERT"
+
+
+ label1
+ "DOWNCONVERT"
+
+
+ label2
+
+
+
+ label3
+
+
+
+ label4
+
+
+
+ label
+ RX NCO direction
+
+
+ labels
+ []
+
+
+ num_opts
+ 2
+
+
+ option0
+ 0
+
+
+ option1
+ 1
+
+
+ option2
+ 2
+
+
+ option3
+ 3
+
+
+ option4
+ 4
+
+
+ options
+ [0, 1, 2]
+
+
+ orient
+ Qt.QHBoxLayout
+
+
+ type
+ int
+
+
+ widget
+ radio_buttons
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (16, 206)
+
+
+ gui_hint
+ 0,2,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ nco_freq_rx
+
+
+ label
+ RX NCO [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_label
+
+ comment
+
+
+
+ value
+ 5e6
+
+
+ _enabled
+ True
+
+
+ formatter
+ None
+
+
+ _coordinate
+ (192, 14)
+
+
+ gui_hint
+ 0,0,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ sample_rate
+
+
+ label
+ Sample rate [S/s]
+
+
+ type
+ raw
+
+
+
+ limesdr_source
+
+ alias
+
+
+
+ channel
+ 0
+
+
+ analog_bandw_ch0
+ analog_filter_bandwidth_rx*1e6
+
+
+ analog_filter_ch0
+ analog_filter_rx
+
+
+ cmix_mode_ch0
+ nco_direction_rx
+
+
+ calibr_bandw_ch0
+ 5e6
+
+
+ calibration_ch0
+ 0
+
+
+ digital_bandw_ch0
+ digital_filter_bandwidth_rx*1e6
+
+
+ digital_filter_ch0
+ digital_filter_rx
+
+
+ gain_dB_ch0
+ gain_rx
+
+
+ lna_path_ch0
+ 2
+
+
+ lna_path_mini
+ 1
+
+
+ nco_freq_ch0
+ nco_freq_rx*1e6
+
+
+ analog_bandw_ch1
+ 10e6
+
+
+ analog_filter_ch1
+ 0
+
+
+ cmix_mode_ch1
+ 0
+
+
+ calibr_bandw_ch1
+ 5e6
+
+
+ calibration_ch1
+ 0
+
+
+ digital_bandw_ch1
+ 0
+
+
+ digital_filter_ch1
+ 0
+
+
+ gain_dB_ch1
+ 0
+
+
+ lna_path_ch1
+ 2
+
+
+ nco_freq_ch1
+ 0
+
+
+ chip_mode
+ 1
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ serial
+
+
+
+ device_type
+ 2
+
+
+ _enabled
+ 1
+
+
+ filename
+
+
+
+ _coordinate
+ (552, 120)
+
+
+ _rotation
+ 0
+
+
+ id
+ limesdr_source_0
+
+
+ file_switch
+ 0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ oversample
+ 0
+
+
+ rf_freq
+ baseband_rx*1e6
+
+
+ samp_rate
+ sample_rate
+
+
+
+ qtgui_sink_x
+
+ bw
+ sample_rate
+
+
+ alias
+
+
+
+ fc
+ baseband_rx*1e6
+
+
+ freqchangevar
+ None
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ True
+
+
+ fftsize
+ 4096
+
+
+ _coordinate
+ (776, 200)
+
+
+ gui_hint
+ 1,0,8,8
+
+
+ _rotation
+ 0
+
+
+ id
+ qtgui_sink_x_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ name
+
+
+
+ plotconst
+ True
+
+
+ plotfreq
+ True
+
+
+ plottime
+ True
+
+
+ plotwaterfall
+ True
+
+
+ showports
+ True
+
+
+ showrf
+ True
+
+
+ type
+ complex
+
+
+ rate
+ 10
+
+
+ wintype
+ firdes.WIN_BLACKMAN_hARRIS
+
+
+
+ limesdr_source_0
+ qtgui_sink_x_0
+ 0
+ 0
+
+
diff --git a/examples/signal_generator.grc b/examples/signal_generator.grc
new file mode 100644
index 0000000..c3e5a94
--- /dev/null
+++ b/examples/signal_generator.grc
@@ -0,0 +1,1102 @@
+
+
+
+ Mon May 21 21:11:53 2018
+
+ options
+
+ author
+ Lime Microsystems
+
+
+ window_size
+ (1200,400)
+
+
+ category
+ Custom
+
+
+ comment
+
+
+
+ description
+
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (16, 23)
+
+
+ _rotation
+ 0
+
+
+ generate_options
+ qt_gui
+
+
+ hier_block_src_path
+ .:
+
+
+ id
+ top_block
+
+
+ max_nouts
+ 0
+
+
+ qt_qss_theme
+
+
+
+ realtime_scheduling
+
+
+
+ run_command
+ {python} -u {filename}
+
+
+ run_options
+ prompt
+
+
+ run
+ True
+
+
+ sizing_mode
+ fixed
+
+
+ thread_safe_setters
+
+
+
+ title
+ Signal generator
+
+
+ placement
+ (0,0)
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ 10
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (776, 166)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_filter_bandwidth_tx
+
+
+ label
+ TX analog filter bandwidth [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_chooser
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (792, 251)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_filter_tx
+
+
+ label0
+ "OFF"
+
+
+ label1
+ "ON"
+
+
+ label2
+
+
+
+ label3
+
+
+
+ label4
+
+
+
+ label
+ TX analog filter
+
+
+ labels
+ []
+
+
+ num_opts
+ 2
+
+
+ option0
+ 0
+
+
+ option1
+ 1
+
+
+ option2
+ 2
+
+
+ option3
+ 3
+
+
+ option4
+ 4
+
+
+ options
+ [0, 1, 2]
+
+
+ orient
+ Qt.QHBoxLayout
+
+
+ type
+ int
+
+
+ widget
+ radio_buttons
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ 600
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (784, 86)
+
+
+ gui_hint
+ 1,0,2,2
+
+
+ _rotation
+ 0
+
+
+ id
+ baseband_tx
+
+
+ label
+ TX:Baseband [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ sample_rate/2e6
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (944, 166)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_filter_bandwidth_tx
+
+
+ label
+ TX digital filter bandwidth [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_chooser
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (960, 251)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ digital_filter_tx
+
+
+ label0
+ "OFF"
+
+
+ label1
+ "ON"
+
+
+ label2
+
+
+
+ label3
+
+
+
+ label4
+
+
+
+ label
+ TX digital filter
+
+
+ labels
+ []
+
+
+ num_opts
+ 2
+
+
+ option0
+ 0
+
+
+ option1
+ 1
+
+
+ option2
+ 2
+
+
+ option3
+ 3
+
+
+ option4
+ 4
+
+
+ options
+ [0, 1, 2]
+
+
+ orient
+ Qt.QHBoxLayout
+
+
+ type
+ int
+
+
+ widget
+ radio_buttons
+
+
+
+ variable_qtgui_range
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (16, 113)
+
+
+ gui_hint
+ 6,0,1,2
+
+
+ _rotation
+ 0
+
+
+ id
+ frequency
+
+
+ label
+ Signal source frequency
+
+
+ min_len
+ 200
+
+
+ orient
+ Qt.Horizontal
+
+
+ start
+ 0
+
+
+ step
+ 0.05e6
+
+
+ stop
+ 20e6
+
+
+ rangeType
+ float
+
+
+ widget
+ counter_slider
+
+
+
+ variable_qtgui_range
+
+ comment
+
+
+
+ value
+ 30
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (976, 41)
+
+
+ gui_hint
+ 3,1,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ gain_tx
+
+
+ label
+ TX gain
+
+
+ min_len
+ 200
+
+
+ orient
+ Qt.Horizontal
+
+
+ start
+ 0
+
+
+ step
+ 1
+
+
+ stop
+ 60
+
+
+ rangeType
+ int
+
+
+ widget
+ counter_slider
+
+
+
+ variable_qtgui_chooser
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (624, 251)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ nco_direction_tx
+
+
+ label0
+ "UPCONVERT"
+
+
+ label1
+ "DOWNCONVERT"
+
+
+ label2
+
+
+
+ label3
+
+
+
+ label4
+
+
+
+ label
+ TX NCO direction
+
+
+ labels
+ []
+
+
+ num_opts
+ 2
+
+
+ option0
+ 0
+
+
+ option1
+ 1
+
+
+ option2
+ 2
+
+
+ option3
+ 3
+
+
+ option4
+ 4
+
+
+ options
+ [0, 1, 2]
+
+
+ orient
+ Qt.QHBoxLayout
+
+
+ type
+ int
+
+
+ widget
+ radio_buttons
+
+
+
+ variable_qtgui_entry
+
+ comment
+
+
+
+ value
+ 0
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (616, 166)
+
+
+ gui_hint
+ 4,1,1,1
+
+
+ _rotation
+ 0
+
+
+ id
+ nco_freq_tx
+
+
+ label
+ TX NCO value [MHz]
+
+
+ type
+ real
+
+
+
+ variable_qtgui_range
+
+ comment
+
+
+
+ value
+ sample_rate
+
+
+ _enabled
+ True
+
+
+ _coordinate
+ (16, 233)
+
+
+ gui_hint
+ 6,2,1,2
+
+
+ _rotation
+ 0
+
+
+ id
+ samp_rate_sig_source
+
+
+ label
+ Signal source sample rate
+
+
+ min_len
+ 2000
+
+
+ orient
+ Qt.Horizontal
+
+
+ start
+ 0
+
+
+ step
+ 0.1e6
+
+
+ stop
+ 20e6
+
+
+ rangeType
+ float
+
+
+ widget
+ counter_slider
+
+
+
+ variable_qtgui_label
+
+ comment
+
+
+
+ value
+ 5e6
+
+
+ _enabled
+ True
+
+
+ formatter
+ None
+
+
+ _coordinate
+ (192, 30)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ sample_rate
+
+
+ label
+ Sample rate [S/s]
+
+
+ type
+ real
+
+
+
+ analog_sig_source_x
+
+ amp
+ 1
+
+
+ alias
+
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ 1
+
+
+ freq
+ frequency
+
+
+ _coordinate
+ (216, 216)
+
+
+ _rotation
+ 0
+
+
+ id
+ analog_sig_source_x_0_0_0
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ offset
+ 0
+
+
+ type
+ complex
+
+
+ samp_rate
+ samp_rate_sig_source
+
+
+ waveform
+ analog.GR_COS_WAVE
+
+
+
+ limesdr_sink
+
+ alias
+
+
+
+ channel
+ 0
+
+
+ analog_bandw_ch0
+ analog_filter_bandwidth_tx*1e6
+
+
+ analog_filter_ch0
+ analog_filter_tx
+
+
+ cmix_mode_ch0
+ nco_direction_tx
+
+
+ calibr_bandw_ch0
+ 5e6
+
+
+ calibration_ch0
+ 0
+
+
+ digital_bandw_ch0
+ digital_filter_bandwidth_tx*1e6
+
+
+ digital_filter_ch0
+ digital_filter_tx
+
+
+ gain_dB_ch0
+ gain_tx
+
+
+ nco_freq_ch0
+ nco_freq_tx*1e6
+
+
+ pa_path_ch0
+ 1
+
+
+ pa_path_mini
+ 1
+
+
+ analog_bandw_ch1
+ 10e6
+
+
+ analog_filter_ch1
+ 0
+
+
+ cmix_mode_ch1
+ 0
+
+
+ calibr_bandw_ch1
+ 5e6
+
+
+ calibration_ch1
+ 0
+
+
+ digital_bandw_ch1
+ 0
+
+
+ digital_filter_ch1
+ 0
+
+
+ gain_dB_ch1
+ 0
+
+
+ nco_freq_ch1
+ 0
+
+
+ pa_path_ch1
+ 1
+
+
+ chip_mode
+ 1
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ serial
+
+
+
+ device_type
+ 2
+
+
+ _enabled
+ 1
+
+
+ filename
+
+
+
+ _coordinate
+ (416, 144)
+
+
+ _rotation
+ 0
+
+
+ id
+ limesdr_sink_0
+
+
+ file_switch
+ 0
+
+
+ oversample
+ 0
+
+
+ rf_freq
+ baseband_tx*1e6
+
+
+ samp_rate
+ sample_rate
+
+
+
+ qtgui_sink_x
+
+ bw
+ sample_rate
+
+
+ alias
+
+
+
+ fc
+ baseband_tx*1e6
+
+
+ freqchangevar
+ None
+
+
+ comment
+
+
+
+ affinity
+
+
+
+ _enabled
+ 1
+
+
+ fftsize
+ 4096
+
+
+ _coordinate
+ (416, 32)
+
+
+ gui_hint
+
+
+
+ _rotation
+ 0
+
+
+ id
+ qtgui_sink_x_0_1
+
+
+ maxoutbuf
+ 0
+
+
+ minoutbuf
+ 0
+
+
+ name
+ "Signal Source"
+
+
+ plotconst
+ True
+
+
+ plotfreq
+ True
+
+
+ plottime
+ True
+
+
+ plotwaterfall
+ True
+
+
+ showports
+ True
+
+
+ showrf
+ True
+
+
+ type
+ complex
+
+
+ rate
+ 10
+
+
+ wintype
+ firdes.WIN_BLACKMAN_hARRIS
+
+
+
+ analog_sig_source_x_0_0_0
+ limesdr_sink_0
+ 0
+ 0
+
+
+ analog_sig_source_x_0_0_0
+ qtgui_sink_x_0_1
+ 0
+ 0
+
+
diff --git a/grc/limesdr_sink.xml b/grc/limesdr_sink.xml
index 01d0912..f973b70 100644
--- a/grc/limesdr_sink.xml
+++ b/grc/limesdr_sink.xml
@@ -2,10 +2,10 @@
LimeSuite Sink (TX)
limesdr_sink
- LimeSuite
+ [LimeSuite]
throttle
import limesdr
- limesdr.sink($device_number,
+ limesdr.sink($serial,
$device_type,
$chip_mode,
$channel,
@@ -30,13 +30,36 @@
$digital_filter_ch1,
$digital_bandw_ch1,
$gain_dB_ch0,
- $gain_dB_ch1)
+ $gain_dB_ch1,
+ $nco_freq_ch0,
+ $nco_freq_ch1,
+ $cmix_mode_ch0,
+ $cmix_mode_ch1)
+
+ set_rf_freq($rf_freq)
+ set_pa_path($pa_path_mini,0)
+ set_pa_path($pa_path_ch0,0)
+ set_pa_path($pa_path_ch1,1)
+ set_nco($nco_freq_ch0,$cmix_mode_ch0,0)
+ set_nco($nco_freq_ch1,$cmix_mode_ch1,1)
+ set_analog_filter($analog_filter_ch0,$analog_bandw_ch0,0)
+ set_analog_filter($analog_filter_ch1,$analog_bandw_ch1,1)
+ set_digital_filter($digital_filter_ch0,$digital_bandw_ch0,0)
+ set_digital_filter($digital_filter_ch1,$digital_bandw_ch1,1)
+ set_gain($gain_dB_ch0,0)
+ set_gain($gain_dB_ch1,1)
+
+
+ General
+ CH0
+ CH1
+
- Device number
- device_number
- 0
- int
+ Device serial
+ serial
+
+ string
none
@@ -76,7 +99,7 @@
CH0
channel
0
- enum
+ int
#if $device_type() == 1
all
@@ -127,7 +150,7 @@
- Center frequency
+ RF frequency
rf_freq
100e6
float
@@ -143,7 +166,7 @@
Sample rate
samp_rate
- 10e6
+ samp_rate
float
#if $file_switch() == 1
@@ -158,7 +181,7 @@
Oversample
oversample
0
- enum
+ int
#if $file_switch() == 1
all
@@ -195,12 +218,50 @@
32
-
+
+
+ CH0:NCO frequency
+ nco_freq_ch0
+ 0
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:CMIX mode
+ cmix_mode_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH0
+
+
CH0:Calibration
calibration_ch0
0
- enum
+ int
#if $file_switch() == 1
all
@@ -216,6 +277,7 @@
ON
1
+ CH0
@@ -232,13 +294,14 @@
none
#end if
+ CH0
CH0:PA path
pa_path_mini
1
- enum
+ int
#if $device_type() == 2
all
@@ -254,13 +317,14 @@
Band2
2
+ CH0
CH0:PA path
pa_path_ch0
1
- enum
+ int
#if $device_type() == 1
all
@@ -278,13 +342,14 @@
Band2
2
+ CH0
CH0:Analog filter
analog_filter_ch0
- 0
- enum
+ 1
+ int
#if $file_switch() == 1
all
@@ -300,12 +365,13 @@
ON
1
+ CH0
CH0:Analog filter bandw.
analog_bandw_ch0
- 10e6
+ 5e6
float
#if $analog_filter_ch0() == 0
@@ -316,13 +382,14 @@
none
#end if
+ CH0
CH0:Digital filter
digital_filter_ch0
0
- enum
+ int
#if $file_switch() == 1
all
@@ -338,6 +405,7 @@
ON
1
+ CH0
@@ -354,12 +422,13 @@
none
#end if
+ CH0
CH0:Gain,dB
gain_dB_ch0
- 60
+ 30
int
#if $file_switch() == 1
@@ -368,13 +437,60 @@
none
#end if
+ CH0
-
+
+
+ CH1:NCO frequency
+ nco_freq_ch1
+ 0
+ float
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:CMIX mode
+ cmix_mode_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH1
+
+
CH1:Calibration
calibration_ch1
0
- enum
+ int
#if $chip_mode() == 1
all
@@ -394,6 +510,7 @@
ON
1
+ CH1
@@ -414,13 +531,14 @@
none
#end if
+ CH1
CH1:PA path
pa_path_ch1
1
- enum
+ int
#if $chip_mode() == 1
all
@@ -440,13 +558,14 @@
Band2
2
+ CH1
CH1:Analog filter
analog_filter_ch1
- 0
- enum
+ 1
+ int
#if $chip_mode() == 1
all
@@ -466,12 +585,13 @@
ON
1
+ CH1
CH1:Analog filter bandw.
analog_bandw_ch1
- 10e6
+ 5e6
float
#if $analog_filter_ch1() == 0
@@ -486,13 +606,14 @@
none
#end if
+ CH1
CH1:Digital filter
digital_filter_ch1
0
- enum
+ int
#if $chip_mode() == 1
all
@@ -512,6 +633,7 @@
ON
1
+ CH1
@@ -532,12 +654,13 @@
none
#end if
+ CH1
CH1:Gain,dB
gain_dB_ch1
- 60
+ 30
int
#if $chip_mode() == 1
@@ -550,9 +673,9 @@
none
#end if
+ CH1
- $device_number >= 0
$device_type >= $chip_mode
$device_type >= 1
2 >= $device_type
@@ -597,13 +720,13 @@
-------------------------------------------------------------------------------------------------------------------
-DEVICE NUMBER
+DEVICE SERIAL
-Device number obtained by running
+Device serial number obtained by running
LimeUtil --find
-List numbering begins by 0.
+Cannot be left blank.
-------------------------------------------------------------------------------------------------------------------
DEVICE TYPE
@@ -655,6 +778,14 @@ Here you can select oversampling value for TX. Default value uses highest possib
Note: LimeSDR-Mini supports only the same oversampling value for TX and RX.
-------------------------------------------------------------------------------------------------------------------
+NCO FREQUENCY
+
+Adjust numerically controlled oscillator for each channel. 0 means that NCO is OFF.
+-------------------------------------------------------------------------------------------------------------------
+CMIX MODE
+
+Controls NCO direction for each channel.
+-------------------------------------------------------------------------------------------------------------------
CALIBRATION
Turn DC offset and IQ imbalance calibration ON/OFF for each channel.
diff --git a/grc/limesdr_source.xml b/grc/limesdr_source.xml
index 136aadf..3e436cc 100644
--- a/grc/limesdr_source.xml
+++ b/grc/limesdr_source.xml
@@ -2,10 +2,10 @@
LimeSuite Source (RX)
limesdr_source
- LimeSuite
+ [LimeSuite]
throttle
import limesdr
- limesdr.source($device_number,
+ limesdr.source($serial,
$device_type,
$chip_mode,
$channel,
@@ -30,13 +30,36 @@
$digital_filter_ch1,
$digital_bandw_ch1,
$gain_dB_ch0,
- $gain_dB_ch1)
-
+ $gain_dB_ch1,
+ $nco_freq_ch0,
+ $nco_freq_ch1,
+ $cmix_mode_ch0,
+ $cmix_mode_ch1)
+
+ set_rf_freq($rf_freq)
+ set_lna_path($lna_path_mini,0)
+ set_lna_path($lna_path_ch0,0)
+ set_lna_path($lna_path_ch1,1)
+ set_nco($nco_freq_ch0,$cmix_mode_ch0,0)
+ set_nco($nco_freq_ch1,$cmix_mode_ch1,1)
+ set_analog_filter($analog_filter_ch0,$analog_bandw_ch0,0)
+ set_analog_filter($analog_filter_ch1,$analog_bandw_ch1,1)
+ set_digital_filter($digital_filter_ch0,$digital_bandw_ch0,0)
+ set_digital_filter($digital_filter_ch1,$digital_bandw_ch1,1)
+ set_gain($gain_dB_ch0,0)
+ set_gain($gain_dB_ch1,1)
+
+
+ General
+ CH0
+ CH1
+
+
- Device number
- device_number
- 0
- int
+ Device serial
+ serial
+
+ string
none
@@ -76,7 +99,7 @@
CH0
channel
0
- enum
+ int
#if $device_type() == 1
all
@@ -127,7 +150,7 @@
- Center frequency
+ RF frequency
rf_freq
100e6
float
@@ -143,7 +166,7 @@
Sample rate
samp_rate
- 10e6
+ samp_rate
float
#if $file_switch() == 1
@@ -158,7 +181,7 @@
Oversample
oversample
0
- enum
+ int
#if $file_switch() == 1
all
@@ -196,11 +219,49 @@
+
+ CH0:NCO frequency
+ nco_freq_ch0
+ 0
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:CMIX mode
+ cmix_mode_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH0
+
+
CH0:Calibration
calibration_ch0
0
- enum
+ int
#if $file_switch() == 1
all
@@ -216,6 +277,7 @@
ON
1
+ CH0
@@ -232,13 +294,14 @@
none
#end if
+ CH0
CH0:LNA path
lna_path_mini
- 1
- enum
+ 3
+ int
#if $device_type() == 2
all
@@ -254,13 +317,14 @@
W
3
+ CH0
CH0:LNA path
lna_path_ch0
- 1
- enum
+ 2
+ int
#if $device_type() == 1
all
@@ -282,13 +346,14 @@
W
3
+ CH0
CH0:Analog filter
analog_filter_ch0
1
- enum
+ int
#if $file_switch() == 1
all
@@ -304,12 +369,13 @@
ON
1
+ CH0
CH0:Analog filter bandw.
analog_bandw_ch0
- 10e6
+ 5e6
float
#if $analog_filter_ch0() == 0
@@ -320,13 +386,14 @@
none
#end if
+ CH0
CH0:Digital filter
digital_filter_ch0
0
- enum
+ int
#if $file_switch() == 1
all
@@ -342,6 +409,7 @@
ON
1
+ CH0
@@ -358,12 +426,13 @@
none
#end if
+ CH0
CH0:Gain,dB
gain_dB_ch0
- 60
+ 30
int
#if $file_switch() == 1
@@ -372,13 +441,60 @@
none
#end if
+ CH0
-
+
+
+ CH1:NCO frequency
+ nco_freq_ch1
+ 0
+ float
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:CMIX mode
+ cmix_mode_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH1
+
+
CH1:Calibration
calibration_ch1
0
- enum
+ int
#if $chip_mode() == 1
all
@@ -398,6 +514,7 @@
ON
1
+ CH1
@@ -418,13 +535,14 @@
none
#end if
+ CH1
CH1:LNA path
lna_path_ch1
- 1
- enum
+ 2
+ int
#if $chip_mode() == 1
all
@@ -448,13 +566,14 @@
W
3
+ CH1
CH1:Analog filter
analog_filter_ch1
1
- enum
+ int
#if $chip_mode() == 1
all
@@ -474,12 +593,13 @@
ON
1
+ CH1
CH1:Analog filter bandw.
analog_bandw_ch1
- 10e6
+ 5e6
float
#if $analog_filter_ch1() == 0
@@ -494,13 +614,14 @@
none
#end if
+ CH1
CH1:Digital filter
digital_filter_ch1
0
- enum
+ int
#if $chip_mode() == 1
all
@@ -520,6 +641,7 @@
ON
1
+ CH1
@@ -540,12 +662,13 @@
none
#end if
+ CH1
CH1:Gain,dB
gain_dB_ch1
- 60
+ 30
int
#if $chip_mode() == 1
@@ -558,9 +681,9 @@
none
#end if
+ CH1
- $device_number >= 0
$device_type >= $chip_mode
$device_type >= 1
2 >= $device_type
@@ -605,13 +728,13 @@
-------------------------------------------------------------------------------------------------------------------
-DEVICE NUMBER
+DEVICE SERIAL
-Device number obtained by running
+Device serial number obtained by running
LimeUtil --find
-List numbering begins by 0.
+Cannot be left blank.
-------------------------------------------------------------------------------------------------------------------
DEVICE TYPE
@@ -642,7 +765,7 @@ Generate .ini file with LimeSuite and select path.
Note: setting must match in LimeSuite Source and Sink for the same device.
-------------------------------------------------------------------------------------------------------------------
-CENTER FREQUENCY
+RF FREQUENCY
Set RF center frequency for RX (both channels).
LimeSDR-USB supports [100e3,3800e6] Hz.
@@ -663,6 +786,14 @@ Here you can select oversampling value for RX. Default value uses highest possib
Note: LimeSDR-Mini supports only the same oversampling value for TX and RX.
-------------------------------------------------------------------------------------------------------------------
+NCO FREQUENCY
+
+Adjust numerically controlled oscillator for each channel. 0 means that NCO is OFF.
+-------------------------------------------------------------------------------------------------------------------
+CMIX MODE
+
+Controls NCO direction for each channel.
+-------------------------------------------------------------------------------------------------------------------
CALIBRATION
Turn DC offset and IQ imbalance calibration ON/OFF for each channel.
diff --git a/include/limesdr/api.h b/include/limesdr/api.h
index 6dfe0cb..3e9ba84 100644
--- a/include/limesdr/api.h
+++ b/include/limesdr/api.h
@@ -22,7 +22,6 @@
#define INCLUDED_LIMESDR_API_H
#include
-#include
#ifdef gnuradio_limesdr_EXPORTS
# define LIMESDR_API __GR_ATTR_EXPORT
diff --git a/include/limesdr/sink.h b/include/limesdr/sink.h
index 9dbefe0..f2e9db5 100644
--- a/include/limesdr/sink.h
+++ b/include/limesdr/sink.h
@@ -22,13 +22,13 @@
#define INCLUDED_LIMESDR_SINK_H
#include
-#include
+#include
namespace gr
{
namespace limesdr
{
- class LIMESDR_API sink : virtual public gr::sync_block
+ class LIMESDR_API sink : virtual public gr::block
{
public:
typedef boost::shared_ptr sptr;
@@ -38,6 +38,8 @@ namespace gr
* To avoid accidental use of raw pointers, sink's
* constructor is private. limesdr::sink::make is the public
* interface for creating new instances.
+ *
+ * @param serial Device serial number. Cannot be left blank.
*
* @param device_type LimeSDR-Mini(1), LimeSDR-USB(2).
*
@@ -89,9 +91,17 @@ namespace gr
*
* @param gain_dB_ch1 Input TX gain channel 1 [0,60] dB.
*
+ * @param nco_freq_ch0 NCO frequency channel 0 in Hz.
+ *
+ * @param nco_freq_ch1 NCO frequency channel 1 in Hz.
+ *
+ * @param cmix_mode_ch0 CMIX mode channel 0: UPCONVERT(0), DOWNCONVERT(1).
+ *
+ * @param cmix_mode_ch1 CMIX mode channel 1: UPCONVERT(0), DOWNCONVERT(1).
+ *
* @return a new limesdr sink block object
*/
- static sptr make(int device_number,
+ static sptr make(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -116,7 +126,23 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1);
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1);
+
+ virtual void set_rf_freq(float rf_freq) = 0;
+
+ virtual void set_pa_path(int pa_path, int channel) = 0;
+
+ virtual void set_nco(float nco_freq, int cmix_mode, int channel) = 0;
+
+ virtual void set_analog_filter(int analog_filter, float analog_bandw, int channel) = 0;
+
+ virtual void set_digital_filter(int digital_filter, float digital_bandw, int channel) = 0;
+
+ virtual void set_gain(int gain_dB, int channel) = 0;
};
}
}
diff --git a/include/limesdr/source.h b/include/limesdr/source.h
index 9d677d7..751e11d 100644
--- a/include/limesdr/source.h
+++ b/include/limesdr/source.h
@@ -22,13 +22,13 @@
#define INCLUDED_LIMESDR_SOURCE_H
#include
-#include
+#include
namespace gr
{
namespace limesdr
{
- class LIMESDR_API source : virtual public gr::sync_block
+ class LIMESDR_API source : virtual public gr::block
{
public:
typedef boost::shared_ptr sptr;
@@ -39,6 +39,8 @@ namespace gr
* To avoid accidental use of raw pointers, source's
* constructor is private. limesdr::source::make is the public
* interface for creating new instances.
+ *
+ * @param serial Device serial number. Cannot be left blank.
*
* @param device_type LimeSDR-Mini(1),LimeSDR-USB(2).
*
@@ -90,9 +92,17 @@ namespace gr
*
* @param gain_dB_ch1 Input RX gain channel 1 [0,70] dB.
*
+ * @param nco_freq_ch0 NCO frequency channel 0 in Hz.
+ *
+ * @param nco_freq_ch1 NCO frequency channel 1 in Hz.
+ *
+ * @param cmix_mode_ch0 CMIX mode channel 0: UPCONVERT(0), DOWNCONVERT(1).
+ *
+ * @param cmix_mode_ch1 CMIX mode channel 1: UPCONVERT(0), DOWNCONVERT(1).
+ *
* @return a new limesdr source block object
*/
- static sptr make(int device_number,
+ static sptr make(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -117,7 +127,23 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1);
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1);
+
+ virtual void set_rf_freq(float rf_freq) = 0;
+
+ virtual void set_lna_path(int lna_path, int channel) = 0;
+
+ virtual void set_nco(float nco_freq, int cmix_mode, int channel) = 0;
+
+ virtual void set_analog_filter(int analog_filter, float analog_bandw, int channel) = 0;
+
+ virtual void set_digital_filter(int digital_filter, float digital_bandw, int channel) = 0;
+
+ virtual void set_gain(int gain_dB, int channel) = 0;
};
}
}
diff --git a/lib/common/device_handler.cc b/lib/common/device_handler.cc
index e17270e..568cf18 100644
--- a/lib/common/device_handler.cc
+++ b/lib/common/device_handler.cc
@@ -26,42 +26,36 @@ void device_handler::error(int device_number)
std::cout << "ERROR: " << LMS_GetLastErrorMessage() << std::endl;
if (this->device_vector[device_number].address != NULL)
close_all_devices();
- exit(0);
}
device_handler::~device_handler()
-{
- close_all_devices();
-}
+{}
lms_device_t* device_handler::get_device(int device_number)
{
return this->device_vector[device_number].address;
}
-void device_handler::open_device(int device_number, int device_type)
+int device_handler::open_device(std::string serial, int device_type)
{
- // Check device_number value
- if(device_number < 0)
- {
- std::cout << "ERROR: device_handler::open_device(): device number cannot be lower than 0." << std::endl;
- close_all_devices();
- exit(0);
- }
-
+ std::string search_name;
+ std::string start_string;
+ int last;
+ int device_number;
+
+ std::cout << "##################" << std::endl;
+ std::cout << "Connecting to device" << std::endl;
+
// Read device list once
if(list_read == false)
{
- if ((device_count = LMS_GetDeviceList(NULL)) < LMS_SUCCESS)
- error(device_number);
+ device_count = LMS_GetDeviceList(list);
std::cout << "##################" << std::endl;
std::cout << "Devices found: " << device_count << std::endl;
-
- if (device_count < 1)
- std::exit(0);
std::cout << "##################" << std::endl;
+ if (device_count < 1)
+ exit(0);
std::cout << "Device list:" << std::endl;
- LMS_GetDeviceList(list);
for (int i = 0; i < device_count; i++)
{
@@ -72,61 +66,82 @@ void device_handler::open_device(int device_number, int device_type)
list_read = true;
}
- // Compare maximum device list value with device_number value
- if(device_number > device_count-1)
+ // Serial must not be empty
+ if(serial.empty())
{
- std::cout << "ERROR: device_handler::open_device(): device number " << device_number << " is not connected to this system. Please check the device list." << std::endl;
- close_all_devices();
- std::cout << "---------------------------------------------------------------" << std::endl;
- exit(0);
+ std::cout << "ERROR: device_handler::open_device(): no serial number." << std::endl;
+ std::cout << "INFO: device_handler::open_device(): use \"LimeUtil -- find\" in terminal to find device serial." << std::endl;
+ std::cout << "##################" << std::endl;
+ close_all_devices();
}
-
+
+ // Set device string search parameters
+ if (device_type == 1)
+ {
+ search_name = "LimeSDR Mini";
+ start_string = "serial=";
+ last = 14; // length of LimeSDR-Mini serial
+ }
+ else if (device_type == 2)
+ {
+ search_name = "LimeSDR-USB";
+ start_string = "serial=";
+ last = 16; // length of LimeSDR-USB serial
+ }
+ else
+ {
+ std::cout << "ERROR: device_handler::open_device(): wrong device_type." << std::endl;
+ close_all_devices();
+ }
+
+ // Identify device by device type and serial number
+ for (int i = 0; i < device_count; i++)
+ {
+ std::string device_string(list[i]);
+ unsigned first = device_string.find(start_string);
+ std::string aquired_serial = device_string.substr (first+7,last);
+
+ // If device_type and serial match found acquire device number
+ if (device_string.find(search_name) != std::string::npos && aquired_serial == serial)
+ {
+ device_number = i;
+ break;
+ }
+ // If program was unable to find serial in list print error and stop program
+ else if ((i == device_count-1 && aquired_serial != serial) || (device_string.find(search_name) == std::string::npos && aquired_serial == serial))
+ {
+ std::cout << "Unable to find " << search_name << " with device serial " << serial << "." << std::endl;
+ std::cout << "##################" << std::endl;
+ close_all_devices();
+ }
+ }
+
// If device slot is empty, open and initialize device
if(device_vector[device_number].address == NULL)
{
- std::string search_name;
- if (device_type == 1)
- search_name = "LimeSDR Mini";
- else if (device_type == 2)
- search_name = "LimeSDR-USB";
- else
- {
- std::cout << "ERROR: device_handler::open_device(): wrong device_type." << std::endl;
- close_all_devices();
- exit(0);
- }
- std::cout << "##################" << std::endl;
- std::cout << "New connection" << std::endl;
-
- std::string device_string(list[device_number]);
-
- if (device_string.find(search_name) != std::string::npos)
- {
- if (LMS_Open(&device_vector[device_number].address, list[device_number], NULL))
- error(device_number);
-
- std::cout << "Device number " << device_number << " from the list is used." << std::endl;
-
- if (LMS_Init(device_vector[device_number].address) != LMS_SUCCESS)
- error(device_number);
-
- std::cout << "##################" << std::endl;
- std::cout << std::endl;
-
- ++open_devices; // Count open devices
- }
- else if ((device_string.find(search_name) == std::string::npos))
- {
- std::cout << "Device number " << device_number << " from the list is not " << search_name << "." << std::endl;
- close_all_devices();
- exit(0);
- std::cout << "---------------------------------------------------------------" << std::endl;
- }
+ std::cout << "Device number " << device_number << " from the list is used." << std::endl;
+ LMS_Open(&device_vector[device_number].address, list[device_number], NULL);
+ LMS_Init(device_vector[device_number].address);
+ ++open_devices; // Count open devices
+ std::cout << "##################" << std::endl;
+ std::cout << std::endl;
+ }
+ // If device is open do nothing
+ else
+ {
+ std::cout << "Previously connected device number " << device_number << " from the list is used." << std::endl;
+ std::cout << "##################" << std::endl;
+ std::cout << std::endl;
}
+
+ return device_number; // return device number to identify device_vector[device_number].address connection in other functions
}
-void device_handler::close_device(int device_number)
+void device_handler::close_device(int device_number, int block_type)
{
+ // Check if other block finished and close device
+ if(device_vector[device_number].source_flag == false || device_vector[device_number].sink_flag == false)
+ {
if(this->device_vector[device_number].address != NULL)
{
std::cout << std::endl;
@@ -139,117 +154,143 @@ void device_handler::close_device(int device_number)
device_vector[device_number].address = NULL;
std::cout << "##################" << std::endl;
std::cout << std::endl;
- }
+ }
+ }
+ // If two blocks used switch one block flag and let other block finish work
+ else
+ {
+ // Switch flag when closing device
+ switch(block_type)
+ {
+ case 1:
+ device_vector[device_number].source_flag = false;
+ break;
+ case 2:
+ device_vector[device_number].sink_flag = false;
+ break;
+ }
+ }
}
void device_handler::close_all_devices()
{
+ if(close_flag == false)
+ {
for(int i = 0; i <= open_devices; i++)
- this->close_device(i);
+ {
+ if(this->device_vector[i].address != NULL)
+ {
+ LMS_Reset(this->device_vector[i].address);
+ LMS_Close(this->device_vector[i].address);
+ }
+ }
+ close_flag == true;
+ exit(0);
+ }
}
void device_handler::check_blocks(int device_number, int block_type, int device_type, int chip_mode, double sample_rate, size_t oversample, int file_switch, const char *filename)
{
- // Check how many blocks of each type are used for each device
+ // Get each block settings
switch(block_type)
{
- case 1: // Source block
- if(device_vector[device_number].source_flag == true)
- {
- std::cout << "ERROR: device_handler::check_blocks(): only one LimeSuite Source (RX) block is allowed per device." << std::endl;
- close_all_devices();
- exit(0);
- }
- else
- {
- device_vector[device_number].source_flag = true;
- device_vector[device_number].source_device_type = device_type;
- device_vector[device_number].source_chip_mode = chip_mode;
- if(file_switch == 0)
- {
- device_vector[device_number].source_sample_rate = sample_rate;
- device_vector[device_number].source_oversample = oversample;
- }
- else
- {
- device_vector[device_number].source_file_switch = file_switch;
- device_vector[device_number].source_filename = filename;
- }
- }
- break;
-
- case 2: // Sink block
- if(device_vector[device_number].sink_flag == true)
- {
- std::cout << "ERROR: device_handler::check_blocks(): only one LimeSuite Sink (TX) block is allowed per device." << std::endl;
- device_handler::getInstance().close_device(device_number);
- exit(0);
- }
- else
- {
- device_vector[device_number].sink_flag = true;
- device_vector[device_number].sink_device_type = device_type;
- device_vector[device_number].sink_chip_mode = chip_mode;
- if(file_switch == 0)
- {
- device_vector[device_number].sink_sample_rate = sample_rate;
- device_vector[device_number].sink_oversample = oversample;
- }
- else
- {
- device_vector[device_number].sink_file_switch = file_switch;
- device_vector[device_number].sink_filename = filename;
- }
- }
- break;
-
- default:
- std::cout << "ERROR: device_handler::check_blocks(): incorrect block_type value." << std::endl;
- close_all_devices();
- exit(0);
+ case 1: // Source block
+ if(device_vector[device_number].source_flag == true)
+ {
+ std::cout << "ERROR: device_handler::check_blocks(): only one LimeSuite Source (RX) block is allowed per device." << std::endl;
+ close_all_devices();
+ }
+ else
+ {
+ device_vector[device_number].source_flag = true;
+ device_vector[device_number].source_device_type = device_type;
+ device_vector[device_number].source_chip_mode = chip_mode;
+ device_vector[device_number].source_file_switch = file_switch;
+ if(file_switch == 0)
+ {
+ device_vector[device_number].source_sample_rate = sample_rate;
+ device_vector[device_number].source_oversample = oversample;
+ }
+ else
+ {
+ device_vector[device_number].source_filename = filename;
+ }
+ }
+ break;
+
+ case 2: // Sink block
+ if(device_vector[device_number].sink_flag == true)
+ {
+ std::cout << "ERROR: device_handler::check_blocks(): only one LimeSuite Sink (TX) block is allowed per device." << std::endl;
+ close_all_devices();
+ }
+ else
+ {
+ device_vector[device_number].sink_flag = true;
+ device_vector[device_number].sink_device_type = device_type;
+ device_vector[device_number].sink_chip_mode = chip_mode;
+ device_vector[device_number].sink_file_switch = file_switch;
+ if(file_switch == 0)
+ {
+ device_vector[device_number].sink_sample_rate = sample_rate;
+ device_vector[device_number].sink_oversample = oversample;
+ }
+ else
+ {
+ device_vector[device_number].sink_filename = filename;
+ }
+ }
+ break;
+
+ default:
+ std::cout << "ERROR: device_handler::check_blocks(): incorrect block_type value." << std::endl;
+ close_all_devices();
}
- // Check matching block settings
+ // Check block settings which must match
if(device_vector[device_number].source_flag && device_vector[device_number].sink_flag)
{
+ // Device_type must match in blocks with the same serial
if(device_vector[device_number].source_device_type != device_vector[device_number].sink_device_type)
{
std::cout << "ERROR: device_handler::check_blocks(): device_type mismatch in LimeSuite Source (RX) and LimeSuite Sink (TX) blocks." << std::endl;
close_all_devices();
- exit(0);
}
- else if(device_vector[device_number].source_chip_mode != device_vector[device_number].sink_chip_mode)
+
+ // Chip_mode must match in blocks with the same serial
+ if(device_vector[device_number].source_chip_mode != device_vector[device_number].sink_chip_mode)
{
std::cout << "ERROR: device_handler::check_blocks(): chip_mode mismatch in LimeSuite Source (RX) and LimeSuite Sink (TX)." << std::endl;
close_all_devices();
- exit(0);
}
- else if(device_vector[device_number].source_file_switch != device_vector[device_number].sink_file_switch)
+
+ // File_switch must match in blocks with the same serial
+ if(device_vector[device_number].source_file_switch != device_vector[device_number].sink_file_switch)
{
std::cout << "ERROR: device_handler::check_blocks(): file_switch must match in LimeSuite Source (RX) and LimeSuite Sink (TX)." << std::endl;
close_all_devices();
- exit(0);
}
- else if(device_vector[device_number].source_file_switch && device_vector[device_number].sink_file_switch == 0)
+
+ // When file_switch is 0 check LimeSDR-Mini sample_rate and oversample match throughout the blocks with the same serial
+ if( (device_vector[device_number].source_file_switch == 0) && (device_vector[device_number].sink_file_switch == 0))
{
if((device_vector[device_number].source_sample_rate != device_vector[device_number].sink_sample_rate) && (device_type == 1))
{
std::cout << "ERROR: device_handler::check_blocks(): sample_rate must match in LimeSuite Source (RX) and LimeSuite Sink (TX) when using LimeSDR-Mini." << std::endl;
close_all_devices();
- exit(0);
}
else if((device_vector[device_number].source_oversample != device_vector[device_number].sink_oversample) && (device_type == 1))
{
std::cout << "ERROR: device_handler::check_blocks(): oversample must match in LimeSuite Source (RX) and LimeSuite Sink (TX) when using LimeSDR-Mini." << std::endl;
close_all_devices();
- exit(0);
}
}
- else if(device_vector[device_number].source_filename != device_vector[device_number].sink_filename && device_vector[device_number].source_file_switch && device_vector[device_number].sink_file_switch == 1)
+
+ // When file_switch is 1 check filename match throughout the blocks with the same serial
+ if(device_vector[device_number].source_filename != device_vector[device_number].sink_filename && (device_vector[device_number].source_file_switch == 1) && (device_vector[device_number].sink_file_switch == 1))
{
std::cout << "ERROR: device_handler::check_blocks(): file must match in LimeSuite Source (RX) and LimeSuite Sink (TX)." << std::endl;
close_all_devices();
- exit(0);
}
}
}
@@ -258,6 +299,15 @@ void device_handler::settings_from_file(int device_number, const char *filename)
{
if(LMS_LoadConfig(device_handler::getInstance().get_device(device_number),filename))
device_handler::getInstance().error(device_number);
+
+ // Set LimeSDR-Mini switches based on .ini file
+ int antenna_ch0_tx;
+ int antenna_ch0_rx;
+ antenna_ch0_tx = LMS_GetAntenna(device_handler::getInstance().get_device(device_number),LMS_CH_TX,LMS_CH_0);
+ antenna_ch0_rx = LMS_GetAntenna(device_handler::getInstance().get_device(device_number),LMS_CH_RX,LMS_CH_0);
+
+ LMS_SetAntenna(device_handler::getInstance().get_device(device_number),LMS_CH_TX,LMS_CH_0,antenna_ch0_tx);
+ LMS_SetAntenna(device_handler::getInstance().get_device(device_number),LMS_CH_RX,LMS_CH_0,antenna_ch0_rx);
}
void device_handler::set_chip_mode(int device_number, int device_type, int chip_mode, int channel, bool direction)
@@ -301,28 +351,55 @@ void device_handler::set_samp_rate(int device_number, const double rate, size_t
{
std::cout << "ERROR: device_handler::set_samp_rate(): when LimeSDR-Mini samp_rate is more than 15.36e6 S/s and less or equal 30.72e6 S/s, oversample cannot be higher than 4." << std::endl;
close_all_devices();
- exit(0);
}
else if(7.68e6 < rate && rate <= 15.36e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4 && oversample != 8)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when LimeSDR-Mini samp_rate is more than 7.68e6 S/s and less or equal 15.36e6 S/s, oversample cannot be higher than 8." << std::endl;
close_all_devices();
- exit(0);
}
else if(3.84e6 < rate && rate <= 7.68e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4 && oversample != 8 && oversample != 16)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when LimeSDR-Mini samp_rate is more than 3.84e6 S/s and less or equal 7.68e6 S/s, oversample cannot be higher than 16." << std::endl;
close_all_devices();
- exit(0);
}
- if(LMS_SetSampleRate(device_handler::getInstance().get_device(device_number),rate,oversample)!=LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
+ else if(oversample == 0)
+ {
+ if(15.36e6 < rate && rate <= 30.72e6)
+ {
+ if(LMS_SetSampleRate(device_handler::getInstance().get_device(device_number),rate,4)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(7.68e6 < rate && rate <= 15.36e6)
+ {
+ if(LMS_SetSampleRate(device_handler::getInstance().get_device(device_number),rate,8)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(3.84e6 < rate && rate <= 7.68e6)
+ {
+ if(LMS_SetSampleRate(device_handler::getInstance().get_device(device_number),rate,16)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(rate <= 3.84e6)
+ {
+ if(LMS_SetSampleRate(device_handler::getInstance().get_device(device_number),rate,32)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ }
+ else
+ {
+ if(LMS_SetSampleRate(device_handler::getInstance().get_device(device_number),rate,oversample)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ double host_value;
+ double rf_value;
+ if(LMS_GetSampleRate(device_handler::getInstance().get_device(device_number),LMS_CH_RX,LMS_CH_0,&host_value,&rf_value))
+ device_handler::getInstance().error(device_number);
+ std::cout << "INFO: device_handler::set_samp_rate(): set sampling rate: " << host_value/1e6 << " MS/s." << std::endl;
}
else
{
std::cout << "ERROR: device_handler::set_samp_rate(): valid oversample values are: 0,1,2,4,8,16,32." << std::endl;
close_all_devices();
- exit(0);
}
}
@@ -336,34 +413,65 @@ void device_handler::set_samp_rate_dir(int device_number, const int direction, c
{
std::cout << "ERROR: device_handler::set_samp_rate(): RX samp_rate cannot be more than 61.44e6 S/s." << std::endl;
close_all_devices();
- exit(0);
}
else if(30.72e6 < rate && rate <= 61.44e6 && oversample != 0 && oversample != 1 && oversample != 2)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when RX samp_rate is more than 30.72e6 S/s and less or equal 61.44e6 S/s, oversample cannot be higher than 2." << std::endl;
close_all_devices();
- exit(0);
}
else if(15.36e6 < rate && rate <= 30.72e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when RX samp_rate is more than 15.36e6 S/s and less or equal 30.72e6 S/s, oversample cannot be higher than 4." << std::endl;
close_all_devices();
- exit(0);
}
else if(7.68e6 < rate && rate <= 15.36e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4 && oversample != 8)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when RX samp_rate is more than 7.68e6 S/s and less or equal 15.36e6 S/s, oversample cannot be higher than 8." << std::endl;
close_all_devices();
- exit(0);
}
else if(3.84e6 < rate && rate <= 7.68e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4 && oversample != 8 && oversample != 16)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when RX samp_rate is more than 3.84e6 S/s and less or equal 7.68e6 S/s, oversample cannot be higher than 16." << std::endl;
close_all_devices();
- exit(0);
}
- else if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,oversample)!=LMS_SUCCESS)
+ else if(oversample == 0)
+ {
+ if(30.72e6 < rate && rate <= 61.44e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,2)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(15.36e6 < rate && rate <= 30.72e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,4)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(7.68e6 < rate && rate <= 15.36e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,8)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(3.84e6 < rate && rate <= 7.68e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,16)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(rate <= 3.84e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,32)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ }
+ else
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,oversample)!=LMS_SUCCESS)
device_handler::getInstance().error(device_number);
+ }
+ double host_value;
+ double rf_value;
+ if(LMS_GetSampleRate(device_handler::getInstance().get_device(device_number),LMS_CH_RX,LMS_CH_0,&host_value,&rf_value))
+ device_handler::getInstance().error(device_number);
+ std::cout << "INFO: device_handler::set_samp_rate(): set [RX] sampling rate: " << host_value/1e6 << " MS/s." << std::endl;
}
else if(direction == LMS_CH_TX)
{
@@ -371,29 +479,51 @@ void device_handler::set_samp_rate_dir(int device_number, const int direction, c
{
std::cout << "ERROR: device_handler::set_samp_rate(): TX samp_rate cannot be more than 61.44e6 S/s." << std::endl;
close_all_devices();
- exit(0);
}
else if(30.72e6 < rate && rate <= 61.44e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4 && oversample != 8)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when TX samp_rate is more than 30.72e6 S/s and less or equal 61.44e6 S/s, oversample cannot be higher than 8." << std::endl;
close_all_devices();
- exit(0);
}
else if(15.36e6 < rate && rate <= 30.72e6 && oversample != 0 && oversample != 1 && oversample != 2 && oversample != 4 && oversample != 8 && oversample != 16)
{
std::cout << "ERROR: device_handler::set_samp_rate(): when TX samp_rate is more than 15.36e6 S/s and less or equal 30.72e6 S/s, oversample cannot be higher than 16." << std::endl;
close_all_devices();
- exit(0);
}
- else if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,oversample)!=LMS_SUCCESS)
+ else if(oversample == 0)
+ {
+ if(30.72e6 < rate && rate <= 61.44e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,8)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(15.36e6 < rate && rate <= 30.72e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,16)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ else if(rate <= 15.36e6)
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,32)!=LMS_SUCCESS)
+ device_handler::getInstance().error(device_number);
+ }
+ }
+ else
+ {
+ if(LMS_SetSampleRateDir(device_handler::getInstance().get_device(device_number),direction,rate,oversample)!=LMS_SUCCESS)
device_handler::getInstance().error(device_number);
+ }
+ double host_value;
+ double rf_value;
+ if(LMS_GetSampleRate(device_handler::getInstance().get_device(device_number),LMS_CH_TX,LMS_CH_0,&host_value,&rf_value))
+ device_handler::getInstance().error(device_number);
+ std::cout << "INFO: device_handler::set_samp_rate(): set [TX] sampling rate: " << host_value/1e6 << " MS/s." << std::endl;
}
}
else
{
std::cout << "ERROR: device_handler::set_samp_rate_dir() valid oversample values are: 0,1,2,4,8,16,32." << std::endl;
close_all_devices();
- exit(0);
}
}
@@ -403,12 +533,19 @@ void device_handler::set_rf_freq(int device_number, int device_type, bool direct
{
std::cout << "ERROR: device_handler::set_rf_freq(): rf_freq must be more than 0 Hz." << std::endl;
close_all_devices();
- exit(0);
}
else
{
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), direction, channel, rf_freq) != LMS_SUCCESS)
- device_handler::error(device_number);
+ int status = LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), direction, channel, rf_freq);
+ double value = 0;
+ LMS_GetLOFrequency(device_handler::getInstance().get_device(device_number), direction, channel, &value);
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX)
+ direction_string = "TX";
+
+ std::cout << "INFO: device_handler::set_rf_freq(): RF frequency set [" << direction_string << "]: " << value/1e6 << " MHz." << std::endl;
}
}
@@ -419,35 +556,25 @@ void device_handler::calibrate(int device_number, int device_type, int calibrati
std::cout << "INFO: device_handler::calibrate(): ";
if(device_type == 2 && path == 2) // LNAL matching workaround [LimeSDR-USB]
{
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, 200e6) != LMS_SUCCESS)
- device_handler::error(device_number);
- if(LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0)!= LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, rf_freq) != LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, 200e6);
+ LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, rf_freq);
}
else if(rf_freq >= 31e6) // Normal calibration
{
- if(LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0)!= LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
+ LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0);
}
else if(device_type == 1)// Lower than 31 MHz center frequency workaround [LimeSDR-Mini]
{
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, 100e6) != LMS_SUCCESS)
- device_handler::error(device_number);
- if(LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0)!= LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, rf_freq) != LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, 100e6);
+ LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, rf_freq);
}
else if(device_type == 2)// Lower than 31 MHz center frequency workaround [LimeSDR-USB]
{
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, 50e6) != LMS_SUCCESS)
- device_handler::error(device_number);
- if(LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0)!= LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, rf_freq) != LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, 50e6);
+ LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, bandwidth, 0);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_RX, channel, rf_freq);
}
}
else if(calibration == 1 && direction == LMS_CH_TX)
@@ -455,191 +582,74 @@ void device_handler::calibrate(int device_number, int device_type, int calibrati
std::cout << "INFO: device_handler::calibrate(): ";
if(rf_freq >= 31e6)
{
- if(LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, bandwidth, 0)!= LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
+ LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, bandwidth, 0);
}
else
{
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, 50e6) != LMS_SUCCESS)
- device_handler::error(device_number);
- if(LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, bandwidth, 0)!= LMS_SUCCESS)
- device_handler::getInstance().error(device_number);
- if (LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, rf_freq) != LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, 50e6);
+ LMS_Calibrate(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, bandwidth, 0);
+ LMS_SetLOFrequency(device_handler::getInstance().get_device(device_number), LMS_CH_TX, channel, rf_freq);
}
}
-}
-
-void device_handler::mini_switch_workaround(int device_number)
-{
- if(device_vector[device_number].mini_switch_workaround_flag == false)
- {
- device_vector[device_number].mini_switch_workaround_flag = true;
-
- uint16_t addr = 0x0017;
- uint16_t default_value = 0;
- uint16_t value = 0x2204;
-
- if(LMS_ReadFPGAReg(device_handler::getInstance().get_device(device_number),addr, &default_value))
- device_handler::error(device_number);
-
- if(LMS_WriteFPGAReg(device_handler::getInstance().get_device(device_number),addr, value))
- device_handler::error(device_number);
-
- if(LMS_WriteFPGAReg(device_handler::getInstance().get_device(device_number),addr, default_value))
- device_handler::error(device_number);
- }
-}
-
-void device_handler::set_lna_path_mini(int device_number, int lna_path_mini)
-{
-
- if(lna_path_mini == 1 || lna_path_mini == 3)
- {
- uint16_t addr = 0x0017;
- uint16_t value = 0;
- int bit = 0;
- if(LMS_ReadFPGAReg(device_handler::getInstance().get_device(device_number),addr, &value))
- device_handler::error(device_number);
-
- if(lna_path_mini==1)
- {
- bit = (value >> 8) & 1UL;
- if(bit == 0)
- {
- value |= 1UL << 8;
- value &= ~(1UL << 9);
- }
- else if(bit == 1)
- {
-
- }
- else
- {
- std::cout << "ERROR: device_handler::set_lna_path_mini(): failed to read 8th bit in 0x0017 registry." << std::endl;
- close_all_devices();
- exit(0);
- }
- }
- else if(lna_path_mini==3)
- {
- bit = (value >> 9) & 1UL;
- if(bit == 0)
- {
- value |= 1UL << 9;
- value &= ~(1UL << 8);
- }
- else if(bit == 1)
- {
-
- }
- else
- {
- std::cout << "ERROR: device_handler::set_lna_path_mini(): failed to read 9th bit in 0x0017 registry." << std::endl;
- close_all_devices();
- exit(0);
- }
- }
-
- if(LMS_WriteFPGAReg(device_handler::getInstance().get_device(device_number),addr, value))
- device_handler::error(device_number);
- }
- else
- {
- std::cout << "ERROR: device_handler::set_lna_path_mini(): lna_path_mini must be 1 or 3." << std::endl;
- close_all_devices();
- exit(0);
- }
-}
-
-void device_handler::set_lna_path(int device_number, int channel, int lna_path)
-{
- if(lna_path == 1 || lna_path == 2 || lna_path == 3)
- {
- if(LMS_SetAntenna(device_handler::getInstance().get_device(device_number),LMS_CH_RX,channel,lna_path))
- device_handler::error(device_number);
- }
- else
- {
- std::cout << "ERROR: device_handler::set_lna_path(): lna_path value must be 1,2,3." << std::endl;
- close_all_devices();
- exit(0);
- }
-}
-
-void device_handler::set_pa_path_mini(int device_number, int pa_path_mini)
-{
- if(pa_path_mini == 1 || pa_path_mini == 2)
+ else if(calibration == 0)
{
- uint16_t addr = 0x0017;
- uint16_t value = 0;
- int bit = 0;
-
- if(LMS_ReadFPGAReg(device_handler::getInstance().get_device(device_number),addr, &value))
- device_handler::error(device_number);
- if(pa_path_mini==1)
- {
- bit = (value >> 12) & 1UL;
- if(bit == 0)
- {
- value |= 1UL << 12;
- value &= ~(1UL << 13);
- }
- else if(bit == 1)
- {
-
- }
- else
- {
- std::cout << "ERROR: device_handler::set_pa_path_mini(): failed to read 12th bit in 0x0017 registry." << std::endl;
- close_all_devices();
- exit(0);
- }
- }
- else if(pa_path_mini==2)
- {
- bit = (value >> 13) & 1UL;
- if(bit == 0)
- {
- value |= 1UL << 13;
- value &= ~(1UL << 12);
- }
- else if(bit == 1)
- {
-
- }
- else
- {
- std::cout << "ERROR: device_handler::set_pa_path_mini(): failed to read 13th bit in 0x0017 registry." << std::endl;
- close_all_devices();
- exit(0);
- }
- }
-
- if(LMS_WriteFPGAReg(device_handler::getInstance().get_device(device_number),addr, value))
- device_handler::error(device_number);
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX)
+ direction_string = "TX";
+ std::cout << "INFO: device_handler::calibrate(): calibration channel " << channel << " [" << direction_string << "]: disabled." << std::endl;
}
else
{
- std::cout << "ERROR: device_handler::set_pa_path_mini(): pa_path_mini must be 1 or 2." << std::endl;
- close_all_devices();
- exit(0);
+ std::cout << "ERROR: device_handler::calibrate(): calibration must be either enabled (1) or disabled (0). Disabling calibration due to incorrect parameters." << std::endl;
}
}
-void device_handler::set_pa_path(int device_number, int channel, int pa_path)
+void device_handler::set_antenna(int device_number, int channel, int direction, int antenna)
{
- if(pa_path == 1 || pa_path == 2)
+ LMS_SetAntenna(device_handler::getInstance().get_device(device_number),direction,channel,antenna);
+ int antenna_value = LMS_GetAntenna(device_handler::getInstance().get_device(device_number),direction,channel);
+ lms_range_t range;
+ LMS_GetAntennaBW(device_handler::getInstance().get_device(device_number),direction,channel,antenna,&range);
+ std::string antenna_string;
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
{
- if(LMS_SetAntenna(device_handler::getInstance().get_device(device_number),LMS_CH_TX,channel,pa_path))
- device_handler::error(device_number);
+ direction_string = "RX";
+ switch(antenna_value)
+ {
+ case 1:
+ antenna_string = "LNAH";
+ break;
+ case 2:
+ antenna_string = "LNAL";
+ break;
+ case 3:
+ antenna_string = "LNAW";
+ break;
+ default:
+ antenna_string = "NONE";
+ break;
+ }
}
- else
+ else if(direction == LMS_CH_TX)
{
- std::cout << "ERROR: device_handler::set_pa_path(): pa_path value must be 1,2." << std::endl;
- close_all_devices();
- exit(0);
+ direction_string = "TX";
+ switch(antenna_value)
+ {
+ case 1:
+ antenna_string = "BAND1";
+ break;
+ case 2:
+ antenna_string = "BAND2";
+ break;
+ default:
+ antenna_string = "NONE";
+ break;
+ }
}
+ std::cout << "INFO: device_handler::set_antenna(): channel " << channel << " antenna set [" << direction_string << "]: " << antenna_string << "." << std::endl;
}
void device_handler::set_analog_filter(int device_number, bool direction, int channel, int analog_filter, float analog_bandw)
@@ -654,13 +664,15 @@ void device_handler::set_analog_filter(int device_number, bool direction, int ch
{
std::cout << "ERROR: device_handler::set_analog_filter(): analog_bandw TX value must be [5e6,130e6]." << std::endl;
close_all_devices();
- exit(0);
}
else
{
std::cout << "INFO: device_handler::set_analog_filter(): ";
- if(LMS_SetLPFBW(device_handler::getInstance().get_device(device_number),direction,channel,analog_bandw)!=LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetLPFBW(device_handler::getInstance().get_device(device_number),direction,channel,analog_bandw);
+
+ double analog_value;
+ LMS_GetLPFBW(device_handler::getInstance().get_device(device_number),direction,channel,&analog_value);
+ std::cout << "Configured bandwidth: " << analog_value/1e6 << " MHz." << std::endl;
}
}
else if(direction == LMS_CH_RX)
@@ -669,39 +681,44 @@ void device_handler::set_analog_filter(int device_number, bool direction, int ch
{
std::cout << "ERROR: device_handler::set_analog_filter(): analog_bandw RX value must be [1.5e6,130e6]." << std::endl;
close_all_devices();
- exit(0);
}
else
{
std::cout << "INFO: device_handler::set_analog_filter(): ";
- if(LMS_SetLPFBW(device_handler::getInstance().get_device(device_number),direction,channel,analog_bandw)!=LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetLPFBW(device_handler::getInstance().get_device(device_number),direction,channel,analog_bandw);
+
+ double analog_value;
+ LMS_GetLPFBW(device_handler::getInstance().get_device(device_number),direction,channel,&analog_value);
+ std::cout << "Configured bandwidth: " << analog_value/1e6 << " MHz." << std::endl;
}
}
else
{
std::cout << "ERROR: device_handler::set_analog_filter(): direction must be 0(LMS_CH_RX) or 1(LMS_CH_TX)." << std::endl;
close_all_devices();
- exit(0);
}
}
else
{
std::cout << "ERROR: device_handler::set_analog_filter(): channel must be 0 or 1." << std::endl;
close_all_devices();
- exit(0);
}
}
else if(analog_filter == 0)
{
- if(LMS_SetLPF(device_handler::getInstance().get_device(device_number), direction, channel, false)!=LMS_SUCCESS)
- device_handler::error(device_number);
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX)
+ direction_string = "TX";
+
+ std::cout << "INFO: device_handler::set_analog_filter(): analog filter channel " << channel << " [" << direction_string << "]: disabled (maximum value set)." << std::endl;
+ LMS_SetLPF(device_handler::getInstance().get_device(device_number),direction,channel,false);
}
else
{
- std::cout << "ERROR: device_handler::set_analog_filter(): analog_filter must be 0(OFF) or 1(ON)." << std::endl;
- close_all_devices();
- exit(0);
+ std::cout << "ERROR: device_handler::set_analog_filter(): analog_filter must be either enabled (1) or disabled (0). Disabling analog_filter due to incorrect parameters." << std::endl;
+ LMS_SetLPF(device_handler::getInstance().get_device(device_number),direction,channel,false);
}
}
@@ -709,35 +726,93 @@ void device_handler::set_digital_filter(int device_number, bool direction, int c
{
if(digital_filter != 0 && digital_filter != 1)
{
- std::cout << "ERROR: device_handler::set_digital_filter(): digital_filter must be 0(OFF) or 1(ON)." << std::endl;
- close_all_devices();
- exit(0);
+ std::cout << "ERROR: device_handler::set_digital_filter(): digital_filter must be either enabled (1) or disabled (0). Disabling digital_filter due to incorrect parameters." << std::endl;
+ LMS_SetGFIRLPF(device_handler::getInstance().get_device(device_number),direction,channel,0,digital_bandw);
}
else if(digital_bandw < 0)
{
std::cout << "ERROR: device_handler::set_digital_filter(): digital_bandw must be more than 0." << std::endl;
close_all_devices();
- exit(0);
}
- else
+ else if(digital_filter == 1)
{
- if(LMS_SetGFIRLPF(device_handler::getInstance().get_device(device_number),direction,channel,digital_filter,digital_bandw)!=LMS_SUCCESS)
- device_handler::error(device_number);
+ LMS_SetGFIRLPF(device_handler::getInstance().get_device(device_number),direction,channel,digital_filter,digital_bandw);
+
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX)
+ direction_string = "TX";
+
+ std::cout << "INFO: device_handler::set_digital_filter(): digital filter channel " << channel << " [" << direction_string << "]: " << digital_bandw/1e6 << " MHz." << std::endl;
}
+ else if(digital_filter == 0)
+ {
+
+ LMS_SetGFIRLPF(device_handler::getInstance().get_device(device_number),direction,channel,digital_filter,digital_bandw);
+
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX)
+ direction_string = "TX";
+
+ std::cout << "INFO: device_handler::set_digital_filter(): digital filter channel " << channel << " set [" << direction_string << "]: disabled." << std::endl;
+ }
}
-void device_handler::set_gain(int device_number, bool direction, int channel, unsigned gain_dB)
+void device_handler::set_gain(int device_number, bool direction, int channel, unsigned int gain_dB)
{
if((direction==LMS_CH_RX && gain_dB >= 0 && gain_dB <= 70)||(direction==LMS_CH_TX && gain_dB >= 0 && gain_dB <= 60))
{
if(LMS_SetGaindB(device_handler::getInstance().get_device(device_number),direction,channel,gain_dB)!=LMS_SUCCESS)
- device_handler::error(device_number);
+ device_handler::error(device_number);
+
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX)
+ direction_string = "TX";
+
+ unsigned int gain_value;
+ LMS_GetGaindB(device_handler::getInstance().get_device(device_number),direction,channel,&gain_value);
+ std::cout << "INFO: device_handler::set_gain(): set gain [" << direction_string << "]: " << gain_value << " dB." << std::endl;
}
else
{
std::cout << "ERROR: device_handler::set_gain(): valid RX gain range [0, 70], TX gain range [0, 60]." << std::endl;
close_all_devices();
- exit(0);
}
}
+
+void device_handler::set_nco(int device_number, bool direction, int channel, float nco_freq, float nco_pho, int cmix_mode)
+{
+ if(nco_freq == 0)
+ {
+ LMS_SetNCOIndex(device_handler::getInstance().get_device(device_number),direction,channel,-1,cmix_mode);
+ }
+ else
+ {
+ double freq_value_in[16];
+ for (int i = 0; i < 16; ++i)
+ {
+ if(i==0)
+ freq_value_in[i]=nco_freq;
+ else
+ freq_value_in[i]=0;
+ }
+ LMS_SetNCOFrequency(device_handler::getInstance().get_device(device_number),direction,channel,freq_value_in,nco_pho);
+ LMS_SetNCOIndex(device_handler::getInstance().get_device(device_number),direction,channel,0,cmix_mode);
+ std::string direction_string;
+ if(direction == LMS_CH_RX)
+ direction_string = "RX";
+ else if(direction == LMS_CH_TX);
+ direction_string = "TX";
+
+ double freq_value_out[16];
+ double pho_value_out[16];
+ LMS_GetNCOFrequency(device_handler::getInstance().get_device(device_number),direction,channel,freq_value_out,pho_value_out);
+ std::cout << "INFO: device_handler::set_nco(): set channel " << channel << " NCO [" << direction_string << "]: " << freq_value_out[0]/1e6 << " MHz (" << pho_value_out[0] << " deg.)." << std::endl;
+ }
+}
diff --git a/lib/common/device_handler.h b/lib/common/device_handler.h
index a503826..e2dbb39 100644
--- a/lib/common/device_handler.h
+++ b/lib/common/device_handler.h
@@ -25,16 +25,18 @@
#include
#include
#include
+#include
+#include
+#include
#include
-#include
class device_handler
{
-private:
-
+private:
int open_devices = 0;
-
+ // Read device list once flag
bool list_read = false;
+ // Calculate open devices to close them all on close_all_devices
int device_count;
struct device
@@ -62,9 +64,11 @@ class device_handler
};
//Device list
- lms_info_str_t* list = new lms_info_str_t[5];
+ lms_info_str_t* list = new lms_info_str_t[20];
// Device vector. Adds devices from the list
std::vector device_vector;
+ // Run close_all_devices once with this flag
+ bool close_flag = false;
device_handler() {};
device_handler(device_handler const&);
@@ -80,6 +84,8 @@ class device_handler
return instance;
}
~device_handler();
+
+ mutable std::recursive_mutex block_mutex;
/**
* Print device error and close all devices.
@@ -102,14 +108,14 @@ class device_handler
*
* @param device_type LimeSDR-Mini(1), LimeSDR-USB(2).
*/
- void open_device(int device_number, int device_type);
+ int open_device(std::string serial, int device_type);
/**
* Disconnect from the device.
*
* @param device_number Device number from the list of LMS_GetDeviceList.
*/
- void close_device(int device_number);
+ void close_device(int device_number, int block_type);
/**
* Disconnect from all devices.
@@ -216,53 +222,9 @@ class device_handler
* and center frequencies below 30 MHz (NCO).
*/
void calibrate(int device_number, int device_type, int calibration, int direction, int channel, double bandwidth, float rf_freq, int path);
-
- /**
- * Workaround for LimeSDR-Mini switch bug. Call upon implementation.
- *
- * @param device_number Device number from the list of LMS_GetDeviceList.
- */
- void mini_switch_workaround(int device_number);
-
- /**
- * LNA switch for LimeSDR-Mini.
- *
- * @param device_number Device number from the list of LMS_GetDeviceList.
- *
- * @param lna_path_mini LNA switch: LNAH(1),LNAW(3).
- */
- void set_lna_path_mini(int device_number, int lna_path_mini);
-
- /**
- * Set LNA path.
- *
- * @param device_number Device number from the list of LMS_GetDeviceList.
- *
- * @param channel Channel selection: A(LMS_CH_0),B(LMS_CH_1).
- *
- * @param lna_path LNA path: no path(0),LNAH(1),LNAL(2),LNAW(3).
- */
- void set_lna_path(int device_number, int channel, int lna_path);
-
- /**
- * PA switch for LimeSDR-Mini.
- *
- * @param device_number Device number from the list of LMS_GetDeviceList.
- *
- * @param pa_path_mini PA path: BAND1(1),BAND2(2).
- */
- void set_pa_path_mini(int device_number, int pa_path_mini);
-
- /**
- * Set PA path.
- *
- * @param device_number Device number from the list of LMS_GetDeviceList.
- *
- * @param channel Channel selection: A(LMS_CH_0),B(LMS_CH_1).
- *
- * @param pa_path PA path: BAND1(1),BAND2(2).
- */
- void set_pa_path(int device_number, int channel, int pa_path);
+
+
+ void set_antenna(int device_number, int channel, int direction, int antenna);
/**
* Set analog filters.
@@ -311,6 +273,25 @@ class device_handler
* @param gain_dB Desired gain: [0,70] RX, [0,60] TX.
*/
void set_gain(int device_number, bool direction, int channel, unsigned int gain_dB);
+
+ /**
+ * Set NCO (numerically controlled oscillator).
+ * By selecting NCO frequency, phase offset and CMIX mode
+ * configure NCO. When NCO frequency is 0, NCO is off.
+ *
+ * @param device_number Device number from the list of LMS_GetDeviceList.
+ *
+ * @param direction Select RX or TX.
+ *
+ * @param channel Channel index.
+ *
+ * @param nco_freq NCO frequency in Hz.
+ *
+ * @param nco_pho NCO phase offset in deg.
+ *
+ * @param cmix_mode CMIX mode: UPCONVERT(0), DOWNCONVERT(1).
+ */
+ void set_nco(int device_number, bool direction, int channel, float nco_freq, float nco_pho, int cmix_mode);
};
diff --git a/lib/sink_impl.cc b/lib/sink_impl.cc
index 3d146a5..11ee8e5 100644
--- a/lib/sink_impl.cc
+++ b/lib/sink_impl.cc
@@ -30,7 +30,7 @@ namespace gr
namespace limesdr
{
sink::sptr
- sink::make(int device_number,
+ sink::make(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -55,10 +55,14 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1)
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1)
{
return gnuradio::get_initial_sptr
- (new sink_impl(device_number,
+ (new sink_impl(serial,
device_type,
chip_mode,
channel,
@@ -83,10 +87,14 @@ namespace gr
digital_filter_ch1,
digital_bandw_ch1,
gain_dB_ch0,
- gain_dB_ch1));
+ gain_dB_ch1,
+ nco_freq_ch0,
+ nco_freq_ch1,
+ cmix_mode_ch0,
+ cmix_mode_ch1));
}
- sink_impl::sink_impl(int device_number,
+ sink_impl::sink_impl(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -111,8 +119,12 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1)
- : gr::sync_block("sink",
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1)
+ : gr::block("sink",
args_to_io_signature(chip_mode), // Based on chip_mode SISO/MIMO use appropriate input signature
gr::io_signature::make(0, 0, 0))
{
@@ -121,9 +133,10 @@ namespace gr
std::cout << std::endl;
// 1. Store private variables upon implementation to protect from changing them later
- stored.device_number = device_number;
+ stored.serial = serial;
stored.device_type = device_type;
stored.chip_mode = chip_mode;
+ stored.samp_rate = samp_rate;
if(stored.device_type == 1) // LimeSDR-Mini
stored.channel = LMS_CH_0;
@@ -135,17 +148,18 @@ namespace gr
stored.channel = LMS_CH_0;
}
+ if(channel != 0 && channel != 1)
+ {
+ std::cout << "ERROR: sink_impl::sink_impl(): CH0 must be either 0 (A) or 1 (B)." << std::endl;
+ exit(0);
+ }
+
// 2. Open device if not opened
- device_handler::getInstance().open_device(stored.device_number,stored.device_type);
+ stored.device_number = device_handler::getInstance().open_device(stored.serial,stored.device_type);
// 3. Check where to load settings from (file or block)
if(file_switch == 1)
{
- if(stored.device_type == 1)
- {
- device_handler::getInstance().mini_switch_workaround(stored.device_number);
- device_handler::getInstance().set_pa_path_mini(stored.device_number,pa_path_mini);
- }
device_handler::getInstance().settings_from_file(stored.device_number,filename);
device_handler::getInstance().check_blocks(stored.device_number,sink_block,stored.device_type, stored.chip_mode, 0, 0, file_switch,filename);
}
@@ -171,126 +185,176 @@ namespace gr
device_handler::getInstance().set_digital_filter(stored.device_number,LMS_CH_TX,stored.channel,digital_filter_ch0, digital_bandw_ch0);
- // 9. Set PA path switches and settings
+ // 9. Set PA path
if(stored.device_type == 1) // LimeSDR-Mini
- {
- device_handler::getInstance().mini_switch_workaround(stored.device_number);
- device_handler::getInstance().set_pa_path_mini(stored.device_number,pa_path_mini);
- device_handler::getInstance().set_pa_path(stored.device_number,stored.channel,pa_path_mini);
- }
+ device_handler::getInstance().set_antenna(stored.device_number,stored.channel,LMS_CH_TX,pa_path_mini);
else if(stored.device_type == 2) // LimeSDR-USB
- device_handler::getInstance().set_pa_path(stored.device_number,stored.channel,pa_path_ch0);
+ device_handler::getInstance().set_antenna(stored.device_number,stored.channel,LMS_CH_TX,pa_path_ch0);
// 10. Set GAIN
device_handler::getInstance().set_gain(stored.device_number,LMS_CH_TX,stored.channel,gain_dB_ch0);
-
+
// 11. Perform calibration
device_handler::getInstance().calibrate(stored.device_number,stored.device_type,calibration_ch0,LMS_CH_TX,stored.channel,calibr_bandw_ch0,rf_freq,pa_path_ch0);
-
- // 12. Begin configuring device for channel 1 (if chip_mode is MIMO)
+
+ // 12. Set NCO
+ device_handler::getInstance().set_nco(stored.device_number,LMS_CH_TX,stored.channel,nco_freq_ch0,0,cmix_mode_ch0);
+
+ // 13. Begin configuring device for channel 1 (if chip_mode is MIMO)
if(stored.chip_mode == 2 && stored.device_type == 2)
{
- device_handler::getInstance().set_pa_path(stored.device_number,LMS_CH_1,pa_path_ch1);
+ device_handler::getInstance().set_antenna(stored.device_number,LMS_CH_1,LMS_CH_TX,pa_path_ch1);
device_handler::getInstance().set_analog_filter(stored.device_number,LMS_CH_TX,LMS_CH_1,analog_filter_ch1,analog_bandw_ch1);
device_handler::getInstance().set_digital_filter(stored.device_number,LMS_CH_TX,LMS_CH_1,digital_filter_ch1, digital_bandw_ch1);
device_handler::getInstance().set_gain(stored.device_number,LMS_CH_TX,LMS_CH_1,gain_dB_ch1);
device_handler::getInstance().calibrate(stored.device_number,stored.device_type,calibration_ch1,LMS_CH_TX,LMS_CH_1,calibr_bandw_ch1,rf_freq,pa_path_ch1);
+ device_handler::getInstance().set_nco(stored.device_number,LMS_CH_TX,LMS_CH_1,nco_freq_ch1,0,cmix_mode_ch1);
}
}
-
+
+ // 14. Initialize stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1)
+ {
+ this->init_stream(stored.device_number,stored.channel,stored.samp_rate);
+ }
+
+ // 15. Initialize both channels streams (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2 && stored.device_type == 2)
+ {
+ this->init_stream(stored.device_number,LMS_CH_0,stored.samp_rate);
+ this->init_stream(stored.device_number,LMS_CH_1,stored.samp_rate);
+ }
std::cout << "---------------------------------------------------------------" << std::endl;
}
sink_impl::~sink_impl()
{
- device_handler::getInstance().close_device(stored.device_number);
+ // Stop and destroy stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1)
+ {
+ LMS_StopStream(&streamId[stored.channel]);
+ LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number),&streamId[stored.channel]);
+ }
+ // Stop and destroy stream for channels 0 & 1 (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2)
+ {
+ LMS_StopStream(&streamId[LMS_CH_0]);
+ LMS_StopStream(&streamId[LMS_CH_1]);
+ LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number),&streamId[LMS_CH_0]);
+ LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number),&streamId[LMS_CH_1]);
+ }
+ device_handler::getInstance().close_device(stored.device_number,sink_block);
}
- bool sink_impl::start(void)
- {
- // Initialize and start stream for channel 0 (if chip_mode is SISO)
- if(stored.chip_mode == 1) // If SISO configure prefered channel
- {
- this->init_stream(stored.device_number,stored.channel);
- if(LMS_StartStream(&streamId[stored.channel]) != LMS_SUCCESS)
- device_handler::getInstance().error(stored.device_number);
- }
+ bool sink_impl::start(void)
+ {
+ std::unique_lock lock(device_handler::getInstance().block_mutex);
+ // Initialize and start stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1) // If SISO configure prefered channel
+ {
+ LMS_StartStream(&streamId[stored.channel]);
+ }
- // Initialize and start stream for channels 0 & 1 (if chip_mode is MIMO)
- else if(stored.chip_mode == 2 && stored.device_type == 2)
- {
- this->init_stream(stored.device_number,LMS_CH_0);
- this->init_stream(stored.device_number,LMS_CH_1);
- if(LMS_StartStream(&streamId[LMS_CH_0]) != LMS_SUCCESS)
- device_handler::getInstance().error(stored.device_number);
- if(LMS_StartStream(&streamId[LMS_CH_1]) != LMS_SUCCESS)
- device_handler::getInstance().error(stored.device_number);
- }
- return true;
- }
+ // Initialize and start stream for channels 0 & 1 (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2 && stored.device_type == 2)
+ {
+ LMS_StartStream(&streamId[LMS_CH_0]);
+ LMS_StartStream(&streamId[LMS_CH_1]);
+ }
+ std::unique_lock unlock(device_handler::getInstance().block_mutex);
+ return true;
+ }
bool sink_impl::stop(void)
{
- // Stop and destroy stream for channel 0 (if chip_mode is SISO)
- if(stored.chip_mode == 1)
- {
- LMS_StopStream(&streamId[stored.channel]);
- LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number), &streamId[stored.channel]);
- }
- // Stop and destroy stream for channels 0 & 1 (if chip_mode is MIMO)
- else if(stored.chip_mode == 2)
- {
- LMS_StopStream(&streamId[LMS_CH_0]);
- LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number), &streamId[LMS_CH_0]);
- LMS_StopStream(&streamId[LMS_CH_1]);
- LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number), &streamId[LMS_CH_1]);
- }
+ std::unique_lock lock(device_handler::getInstance().block_mutex);
+ // Stop stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1)
+ {
+ LMS_StopStream(&streamId[stored.channel]);
+ }
+ // Stop streams for channels 0 & 1 (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2)
+ {
+ LMS_StopStream(&streamId[LMS_CH_0]);
+ LMS_StopStream(&streamId[LMS_CH_1]);
+ }
+ std::unique_lock unlock(device_handler::getInstance().block_mutex);
return true;
}
-
+
int
- sink_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ sink_impl::general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
- // Send stream for channel 0 (if chip_mode is SISO)
+ // Send stream for channel 0 (if chip_mode is SISO)
if(stored.chip_mode == 1)
{
- int ret = LMS_SendStream(&streamId[stored.channel],
+ //Print stream stats to debug
+ if (stream_analyzer == true && std::time(0)>t)
+ {
+ lms_stream_status_t status;
+ LMS_GetStreamStatus(&streamId[stored.channel], &status);
+ std::cout << std::endl;
+ std::cout << "TX rate: " << status.linkRate / 1e6 << " MB/s ";
+ std::cout << "dropped packets: " << status.droppedPackets << " ";
+ std::cout << "FIFO: " << 100 * status.fifoFilledCount / status.fifoSize << "% ";
+ std::cout << "underrun: " << status.underrun << " overrun: " << status.overrun;
+ std::cout << " FIFO size: " << status.fifoSize << std::endl;
+ t = std::time(0);
+ }
+
+ int ret0 = LMS_SendStream(&streamId[stored.channel],
input_items[0],
noutput_items,
- NULL, 0);
- if (ret < 0)
+ NULL, 100);
+ if(ret0 < 0)
{
- return 0; //call again
+ return 0;
}
- consume(0,ret);
+ consume(0,ret0);
}
// Send stream for channels 0 & 1 (if chip_mode is MIMO)
else if(stored.chip_mode == 2)
{
+ //Print stream stats to debug
+ if (stream_analyzer == true && std::time(0)>t)
+ {
+ lms_stream_status_t status;
+ LMS_GetStreamStatus(&streamId[LMS_CH_0], &status);
+ std::cout << std::endl;
+ std::cout << "TX rate: " << status.linkRate / 1e6 << " MB/s ";
+ std::cout << "dropped packets: " << status.droppedPackets << " ";
+ std::cout << "FIFO: " << 100 * status.fifoFilledCount / status.fifoSize << "% ";
+ std::cout << "underrun: " << status.underrun << " overrun: " << status.overrun << std::endl;
+ t = std::time(0);
+ }
+
int ret0 = LMS_SendStream(&streamId[LMS_CH_0],
input_items[0],
noutput_items,
- NULL, 0);
+ NULL, 100);
int ret1 = LMS_SendStream(&streamId[LMS_CH_1],
input_items[1],
noutput_items,
- NULL, 0);
+ NULL, 100);
if(ret0 < 0 || ret1 < 0)
{
- return 0; //call again
+ return 0;
}
consume(0,ret0);
consume(1,ret1);
}
+ return 0;
}
// Setup stream
- void sink_impl::init_stream(int device_number, int channel)
+ void sink_impl::init_stream(int device_number, int channel, float samp_rate)
{
streamId[channel].channel = channel;
- streamId[channel].fifoSize = fifosize;
+ streamId[channel].fifoSize = samp_rate/1e4;
streamId[channel].throughputVsLatency = 0.5;
streamId[channel].isTx = LMS_CH_TX;
streamId[channel].dataFmt = lms_stream_t::LMS_FMT_F32;
@@ -298,7 +362,7 @@ namespace gr
if (LMS_SetupStream(device_handler::getInstance().get_device(device_number),&streamId[channel])!=LMS_SUCCESS)
device_handler::getInstance().error(device_number);
- std::cout << "INFO: sink_impl::init_stream(): sink channel " << channel << " (device nr. " << device_number << ") stream setup done." << std::endl;
+ std::cout << "INFO: sink_impl::init_stream(): sink channel " << channel << " (device nr. " << device_number << ") stream setup done." << std::endl;
}
// Return io_signature to manage module input count
@@ -319,6 +383,76 @@ namespace gr
exit(0);
}
}
+
+ void sink_impl::set_rf_freq(float rf_freq)
+ {
+ device_handler::getInstance().set_rf_freq(stored.device_number,stored.device_type,LMS_CH_TX,LMS_CH_0,rf_freq);
+ }
+
+ void sink_impl::set_pa_path(int pa_path, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "sink_impl::set_pa_path(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_antenna(stored.device_number,channel,LMS_CH_TX,pa_path);
+ }
+ }
+
+ void sink_impl::set_nco(float nco_freq, int cmix_mode, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "sink_impl::set_nco(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_nco(stored.device_number,LMS_CH_TX,channel,nco_freq,0,cmix_mode);
+ }
+ }
+
+ void sink_impl::set_analog_filter(int analog_filter, float analog_bandw, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "sink_impl::set_analog_filter(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_analog_filter(stored.device_number,LMS_CH_TX,channel,analog_filter,analog_bandw);
+ }
+ }
+
+ void sink_impl::set_digital_filter(int digital_filter, float digital_bandw, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "sink_impl::set_digital_filter(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_digital_filter(stored.device_number,LMS_CH_TX,channel,digital_filter,digital_bandw);
+ }
+ }
+
+ void sink_impl::set_gain(int gain_dB, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "sink_impl::set_gain(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_gain(stored.device_number,LMS_CH_TX,channel,gain_dB);
+ }
+ }
}
}
diff --git a/lib/sink_impl.h b/lib/sink_impl.h
index 95a41dd..736d765 100644
--- a/lib/sink_impl.h
+++ b/lib/sink_impl.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_LIMESDR_SINK_IMPL_H
#define INCLUDED_LIMESDR_SINK_IMPL_H
+#include
#include
#include "common/device_handler.h"
@@ -32,22 +33,26 @@ namespace gr
{
private:
lms_stream_t streamId[2];
- uint32_t fifosize = 4096*10;
+
+ long t = std::time(0);
+ bool stream_analyzer = false;
+ int LMS_CH_0 = 0;
+ int LMS_CH_1 = 1;
+ int sink_block = 2;
+
struct constant_data
{
+ std::string serial;
int device_number;
int device_type;
int chip_mode;
int channel;
+ float samp_rate;
} stored;
-
- int LMS_CH_0 = 0;
- int LMS_CH_1 = 1;
- int sink_block = 2;
public:
- sink_impl(int device_number,
+ sink_impl(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -72,20 +77,37 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1);
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1);
~sink_impl();
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ int general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
bool start(void);
- bool stop(void);
-
- void init_stream(int device_number, int channel);
+ bool stop(void);
inline gr::io_signature::sptr args_to_io_signature(int channel_number);
+
+ void init_stream(int device_number, int channel, float samp_rate);
+
+ void set_rf_freq(float rf_freq);
+
+ void set_pa_path(int pa_path, int channel);
+
+ void set_nco(float nco_freq, int cmix_mode, int channel);
+
+ void set_analog_filter(int analog_filter, float analog_bandw, int channel);
+
+ void set_digital_filter(int digital_filter, float digital_bandw, int channel);
+
+ void set_gain(int gain_dB, int channel);
};
}
}
diff --git a/lib/source_impl.cc b/lib/source_impl.cc
index 8884e81..f3b6240 100644
--- a/lib/source_impl.cc
+++ b/lib/source_impl.cc
@@ -30,7 +30,7 @@ namespace gr
namespace limesdr
{
source::sptr
- source::make(int device_number,
+ source::make(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -55,10 +55,14 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1)
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1)
{
return gnuradio::get_initial_sptr
- (new source_impl(device_number,
+ (new source_impl(serial,
device_type,
chip_mode,
channel,
@@ -83,10 +87,14 @@ namespace gr
digital_filter_ch1,
digital_bandw_ch1,
gain_dB_ch0,
- gain_dB_ch1));
+ gain_dB_ch1,
+ nco_freq_ch0,
+ nco_freq_ch1,
+ cmix_mode_ch0,
+ cmix_mode_ch1));
}
- source_impl::source_impl(int device_number,
+ source_impl::source_impl(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -111,8 +119,12 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1)
- : gr::sync_block("source",
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1)
+ : gr::block("source",
gr::io_signature::make(0, 0, 0), // Based on chip_mode SISO/MIMO use appropriate output signature
args_to_io_signature(chip_mode))
{
@@ -121,10 +133,11 @@ namespace gr
std::cout << std::endl;
// 1. Store private variables upon implementation to protect from changing them later
- stored.device_number = device_number;
+ stored.serial = serial;
stored.device_type = device_type;
stored.chip_mode = chip_mode;
-
+ stored.samp_rate = samp_rate;
+
if(stored.device_type == 1) // LimeSDR-Mini
stored.channel = LMS_CH_0;
else if(stored.device_type == 2) // LimeSDR-USB
@@ -135,18 +148,18 @@ namespace gr
stored.channel = LMS_CH_0;
}
+ if(channel != 0 && channel != 1)
+ {
+ std::cout << "ERROR: source_impl::source_impl(): CH0 must be either 0 (A) or 1 (B)." << std::endl;
+ exit(0);
+ }
+
// 2. Open device if not opened
- device_handler::getInstance().open_device(stored.device_number,stored.device_type);
+ stored.device_number = device_handler::getInstance().open_device(stored.serial,stored.device_type);
// 3. Check where to load settings from (file or block)
if(file_switch == 1)
{
- if(stored.device_type == 1)
- {
- device_handler::getInstance().mini_switch_workaround(stored.device_number);
- device_handler::getInstance().set_lna_path_mini(stored.device_number,lna_path_mini);
- }
-
device_handler::getInstance().settings_from_file(stored.device_number,filename);
device_handler::getInstance().check_blocks(stored.device_number,source_block,stored.device_type, stored.chip_mode, 0, 0, file_switch,filename);
}
@@ -173,139 +186,188 @@ namespace gr
device_handler::getInstance().set_digital_filter(stored.device_number,LMS_CH_RX,stored.channel,digital_filter_ch0, digital_bandw_ch0);
- // 9. Set LNA path switches and settings
+ // 9. Set LNA path
if(stored.device_type == 1) // LimeSDR-Mini
- {
- device_handler::getInstance().mini_switch_workaround(stored.device_number);
- device_handler::getInstance().set_lna_path_mini(stored.device_number,lna_path_mini);
- device_handler::getInstance().set_lna_path(stored.device_number,stored.channel,lna_path_mini);
- }
+ device_handler::getInstance().set_antenna(stored.device_number,stored.channel,LMS_CH_RX,lna_path_mini);
else if(stored.device_type == 2) // LimeSDR-USB
- device_handler::getInstance().set_lna_path(stored.device_number,stored.channel,lna_path_ch0);
-
+ device_handler::getInstance().set_antenna(stored.device_number,stored.channel,LMS_CH_RX,lna_path_ch0);
// 10. Set GAIN
device_handler::getInstance().set_gain(stored.device_number,LMS_CH_RX,stored.channel,gain_dB_ch0);
-
-
+
// 11. Perform calibration
device_handler::getInstance().calibrate(stored.device_number,stored.device_type,calibration_ch0,LMS_CH_RX,stored.channel,calibr_bandw_ch0,rf_freq,lna_path_ch0);
-
-
- // 12. Begin configuring device for channel 1 (if chip_mode is MIMO)
+
+ // 12. Set NCO
+ device_handler::getInstance().set_nco(stored.device_number,LMS_CH_RX,stored.channel,nco_freq_ch0,0,cmix_mode_ch0);
+
+ // 13. Begin configuring device for channel 1 (if chip_mode is MIMO)
if(stored.chip_mode == 2 && stored.device_type == 2)
{
device_handler::getInstance().set_analog_filter(stored.device_number,LMS_CH_RX,LMS_CH_1,analog_filter_ch1, analog_bandw_ch1);
device_handler::getInstance().set_digital_filter(stored.device_number,LMS_CH_RX,LMS_CH_1,digital_filter_ch1, digital_bandw_ch1);
- device_handler::getInstance().set_lna_path(stored.device_number,LMS_CH_1,lna_path_ch1);
+ device_handler::getInstance().set_antenna(stored.device_number,LMS_CH_1,LMS_CH_RX,lna_path_ch1);
device_handler::getInstance().set_gain(stored.device_number,LMS_CH_RX,LMS_CH_1,gain_dB_ch1);
device_handler::getInstance().calibrate(stored.device_number,stored.device_type,calibration_ch1,LMS_CH_RX,LMS_CH_1,calibr_bandw_ch1,rf_freq,lna_path_ch1);
+ device_handler::getInstance().set_nco(stored.device_number,LMS_CH_RX,LMS_CH_1,nco_freq_ch1,0,cmix_mode_ch1);
}
}
+ // 14. Initialize stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1)
+ {
+ this->init_stream(stored.device_number,stored.channel,stored.samp_rate);
+ }
+
+ // 15. Initialize both channels streams (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2 && stored.device_type == 2)
+ {
+ this->init_stream(stored.device_number,LMS_CH_0,stored.samp_rate);
+ this->init_stream(stored.device_number,LMS_CH_1,stored.samp_rate);
+ }
std::cout << "---------------------------------------------------------------" << std::endl;
}
source_impl::~source_impl()
{
- device_handler::getInstance().close_device(stored.device_number);
+ // Stop and destroy stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1)
+ {
+ LMS_StopStream(&streamId[stored.channel]);
+ LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number),&streamId[stored.channel]);
+ }
+ // Stop and destroy stream for channels 0 & 1 (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2)
+ {
+ LMS_StopStream(&streamId[LMS_CH_0]);
+ LMS_StopStream(&streamId[LMS_CH_1]);
+ LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number),&streamId[LMS_CH_0]);
+ LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number),&streamId[LMS_CH_1]);
+ }
+ device_handler::getInstance().close_device(stored.device_number,source_block);
}
- bool source_impl::start(void)
- {
- // Initialize and start stream for channel 0 (if chip_mode is SISO)
- if(stored.chip_mode == 1) // If SISO configure prefered channel
- {
- this->init_stream(stored.device_number,stored.channel);
- if(LMS_StartStream(&streamId[stored.channel]) != LMS_SUCCESS)
- device_handler::getInstance().error(stored.device_number);
- }
+ bool source_impl::start(void)
+ {
+ std::unique_lock lock(device_handler::getInstance().block_mutex);
+ // Initialize and start stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1) // If SISO configure prefered channel
+ {
+ if(LMS_StartStream(&streamId[stored.channel]) != LMS_SUCCESS)
+ device_handler::getInstance().error(stored.device_number);
+ }
- // Initialize and start stream for channels 0 & 1 (if chip_mode is MIMO)
- else if(stored.chip_mode == 2 && stored.device_type == 2)
- {
- this->init_stream(stored.device_number,LMS_CH_0);
- this->init_stream(stored.device_number,LMS_CH_1);
- if(LMS_StartStream(&streamId[LMS_CH_0]) != LMS_SUCCESS)
- device_handler::getInstance().error(stored.device_number);
- if(LMS_StartStream(&streamId[LMS_CH_1]) != LMS_SUCCESS)
- device_handler::getInstance().error(stored.device_number);
- }
- return true;
- }
+ // Initialize and start stream for channels 0 & 1 (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2 && stored.device_type == 2)
+ {
+ if(LMS_StartStream(&streamId[LMS_CH_0]) != LMS_SUCCESS)
+ device_handler::getInstance().error(stored.device_number);
+ if(LMS_StartStream(&streamId[LMS_CH_1]) != LMS_SUCCESS)
+ device_handler::getInstance().error(stored.device_number);
+ }
+ std::unique_lock unlock(device_handler::getInstance().block_mutex);
+ return true;
+ }
bool source_impl::stop(void)
{
- // Stop and destroy stream for channel 0 (if chip_mode is SISO)
- if(stored.chip_mode == 1)
- {
- LMS_StopStream(&streamId[stored.channel]);
- LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number), &streamId[stored.channel]);
- }
- // Stop and destroy stream for channels 0 & 1 (if chip_mode is MIMO)
- else if(stored.chip_mode == 2)
- {
- LMS_StopStream(&streamId[LMS_CH_0]);
- LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number), &streamId[LMS_CH_0]);
- LMS_StopStream(&streamId[LMS_CH_1]);
- LMS_DestroyStream(device_handler::getInstance().get_device(stored.device_number), &streamId[LMS_CH_1]);
- }
- return true;
+ std::unique_lock lock(device_handler::getInstance().block_mutex);
+ // Stop stream for channel 0 (if chip_mode is SISO)
+ if(stored.chip_mode == 1)
+ {
+ LMS_StopStream(&streamId[stored.channel]);
+ }
+ // Stop streams for channels 0 & 1 (if chip_mode is MIMO)
+ else if(stored.chip_mode == 2)
+ {
+ LMS_StopStream(&streamId[LMS_CH_0]);
+ LMS_StopStream(&streamId[LMS_CH_1]);
+ }
+ std::unique_lock unlock(device_handler::getInstance().block_mutex);
+ return true;
}
int
- source_impl::work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items)
+ source_impl::general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
{
// Receive stream for channel 0 (if chip_mode is SISO)
if(stored.chip_mode == 1)
{
- int ret = LMS_RecvStream(&streamId[stored.channel],
+ //Print stream stats to debug
+ if (stream_analyzer == true && std::time(0)>t)
+ {
+ lms_stream_status_t status;
+ LMS_GetStreamStatus(&streamId[stored.channel], &status);
+ std::cout << std::endl;
+ std::cout << "RX rate: " << status.linkRate / 1e6 << " MB/s ";
+ std::cout << "dropped packets: " << status.droppedPackets << " ";
+ std::cout << "FIFO: " << 100 * status.fifoFilledCount / status.fifoSize << "% ";
+ std::cout << "underrun: " << status.underrun << " overrun: " << status.overrun;
+ std::cout << " FIFO size: " << status.fifoSize << std::endl;
+ t = std::time(0);
+ }
+
+ int ret0 = LMS_RecvStream(&streamId[stored.channel],
output_items[0],
noutput_items,
- NULL, 0);
-
- if (ret < 0)
- return 0; //call again
-
- produce(0,ret);
+ NULL, 100);
+ if(ret0 < 0)
+ {
+ return 0;
+ }
+ produce(0,ret0);
return WORK_CALLED_PRODUCE;
-
}
// Receive stream for channels 0 & 1 (if chip_mode is MIMO)
else if(stored.chip_mode == 2)
{
+ //Print stream stats to debug
+ if (stream_analyzer == true && std::time(0)>t)
+ {
+ lms_stream_status_t status;
+ LMS_GetStreamStatus(&streamId[LMS_CH_0], &status);
+ std::cout << std::endl;
+ std::cout << "RX rate: " << status.linkRate / 1e6 << " MB/s ";
+ std::cout << "dropped packets: " << status.droppedPackets << " ";
+ std::cout << "FIFO: " << 100 * status.fifoFilledCount / status.fifoSize << "% ";
+ std::cout << "underrun: " << status.underrun << " overrun: " << status.overrun << std::endl;
+ t = std::time(0);
+ }
+
int ret0 = LMS_RecvStream(&streamId[LMS_CH_0],
output_items[0],
noutput_items,
- NULL, 0);
+ NULL, 100);
int ret1 = LMS_RecvStream(&streamId[LMS_CH_1],
output_items[1],
noutput_items,
- NULL, 0);
-
- if(ret0 < 0 || ret1 < 0)
- return 0; //call again
-
- produce(0,ret0);
- produce(1,ret1);
+ NULL, 100);
+ if(ret0 <= 0 || ret1 <= 0)
+ {
+ return 0;
+ }
+ this->produce(0,ret0);
+ this->produce(1,ret1);
return WORK_CALLED_PRODUCE;
}
+ return 0;
}
// Setup stream
- void source_impl::init_stream(int device_number, int channel)
+ void source_impl::init_stream(int device_number, int channel, float samp_rate)
{
- this->streamId[channel].channel = channel;
- this->streamId[channel].fifoSize = fifosize;
- this->streamId[channel].throughputVsLatency = 0.5;
- this->streamId[channel].isTx = LMS_CH_RX;
- this->streamId[channel].dataFmt = lms_stream_t::LMS_FMT_F32;
+ streamId[channel].channel = channel;
+ streamId[channel].fifoSize = samp_rate/1e4;
+ streamId[channel].throughputVsLatency = 0.5;
+ streamId[channel].isTx = LMS_CH_RX;
+ streamId[channel].dataFmt = lms_stream_t::LMS_FMT_F32;
if (LMS_SetupStream(device_handler::getInstance().get_device(stored.device_number),&streamId[channel])!=LMS_SUCCESS)
device_handler::getInstance().error(stored.device_number);
- std::cout << "INFO: source_impl::init_stream(): source channel " << channel << " (device nr. " << device_number << ") stream setup done." << std::endl;
+ std::cout << "INFO: source_impl::init_stream(): source channel " << channel << " (device nr. " << device_number << ") stream setup done." << std::endl;
}
// Return io_signature to manage module output count
@@ -326,6 +388,75 @@ namespace gr
exit(0);
}
}
+ void source_impl::set_rf_freq(float rf_freq)
+ {
+ device_handler::getInstance().set_rf_freq(stored.device_number,stored.device_type,LMS_CH_RX,LMS_CH_0,rf_freq);
+ }
+
+ void source_impl::set_nco(float nco_freq, int cmix_mode, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "source_impl::set_nco(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_nco(stored.device_number,LMS_CH_RX,channel,nco_freq,0,cmix_mode);
+ }
+ }
+
+ void source_impl::set_lna_path(int lna_path, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "source_impl::set_lna_path(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_antenna(stored.device_number,channel,LMS_CH_RX,lna_path);
+ }
+ }
+
+ void source_impl::set_analog_filter(int analog_filter, float analog_bandw, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "source_impl::set_analog_filter(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_analog_filter(stored.device_number,LMS_CH_RX,channel,analog_filter,analog_bandw);
+ }
+ }
+
+ void source_impl::set_digital_filter(int digital_filter, float digital_bandw, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "source_impl::set_digital_filter(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_digital_filter(stored.device_number,LMS_CH_RX,channel,digital_filter,digital_bandw);
+ }
+ }
+
+ void source_impl::set_gain(int gain_dB, int channel)
+ {
+ if(stored.device_type == 1 && channel == 1)
+ {
+ // IGNORE CHANNEL 1 FOR LIMESDR-MINI
+ std::cout << "source_impl::set_gain(): INFO: Setting bypassed. LimeSDR-Mini does not support channel 1 configuration." << std::endl;
+ }
+ else
+ {
+ device_handler::getInstance().set_gain(stored.device_number,LMS_CH_RX,channel,gain_dB);
+ }
+ }
}
}
diff --git a/lib/source_impl.h b/lib/source_impl.h
index 280a297..0bdf6be 100644
--- a/lib/source_impl.h
+++ b/lib/source_impl.h
@@ -21,6 +21,7 @@
#ifndef INCLUDED_LIMESDR_SOURCE_IMPL_H
#define INCLUDED_LIMESDR_SOURCE_IMPL_H
+#include
#include
#include "common/device_handler.h"
@@ -32,24 +33,26 @@ namespace gr
{
private:
lms_stream_t streamId[2];
- uint32_t fifosize = 4096*10;
-
-
-
+
+ long t = std::time(0);
+ bool stream_analyzer = false;
+
int LMS_CH_0 = 0;
int LMS_CH_1 = 1;
int source_block = 1;
struct constant_data
{
+ std::string serial;
int device_number;
int device_type;
int chip_mode;
int channel;
+ float samp_rate;
} stored;
public:
- source_impl(int device_number,
+ source_impl(std::string serial,
int device_type,
int chip_mode,
int channel,
@@ -74,20 +77,37 @@ namespace gr
int digital_filter_ch1,
double digital_bandw_ch1,
int gain_dB_ch0,
- int gain_dB_ch1);
+ int gain_dB_ch1,
+ float nco_freq_ch0,
+ float nco_freq_ch1,
+ int cmix_mode_ch0,
+ int cmix_mode_ch1);
~source_impl();
- int work(int noutput_items,
- gr_vector_const_void_star &input_items,
- gr_vector_void_star &output_items);
+ int general_work(int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
bool start(void);
-
- bool stop(void);
- void init_stream(int device_number, int channel);
+ bool stop(void);
inline gr::io_signature::sptr args_to_io_signature(int channel_number);
+
+ void init_stream(int device_number, int channel, float samp_rate);
+
+ void set_rf_freq(float rf_freq);
+
+ void set_lna_path(int lna_path, int channel);
+
+ void set_nco(float nco_freq, int cmix_mode, int channel);
+
+ void set_analog_filter(int analog_filter, float analog_bandw, int channel);
+
+ void set_digital_filter(int digital_filter, float digital_bandw, int channel);
+
+ void set_gain(int gain_dB, int channel);
};
}
}
diff --git a/windows/GNU_Radio/bin/LimeSuite.dll b/windows/GNU_Radio/bin/LimeSuite.dll
new file mode 100644
index 0000000..233ce41
Binary files /dev/null and b/windows/GNU_Radio/bin/LimeSuite.dll differ
diff --git a/windows/GNU_Radio/bin/gnuradio-limesdr.dll b/windows/GNU_Radio/bin/gnuradio-limesdr.dll
new file mode 100644
index 0000000..b50bf2a
Binary files /dev/null and b/windows/GNU_Radio/bin/gnuradio-limesdr.dll differ
diff --git a/windows/GNU_Radio/lib/site-packages/limesdr/__init__.pyc b/windows/GNU_Radio/lib/site-packages/limesdr/__init__.pyc
new file mode 100644
index 0000000..3c8a71d
Binary files /dev/null and b/windows/GNU_Radio/lib/site-packages/limesdr/__init__.pyc differ
diff --git a/windows/GNU_Radio/lib/site-packages/limesdr/__init__.pyo b/windows/GNU_Radio/lib/site-packages/limesdr/__init__.pyo
new file mode 100644
index 0000000..3c8a71d
Binary files /dev/null and b/windows/GNU_Radio/lib/site-packages/limesdr/__init__.pyo differ
diff --git a/windows/GNU_Radio/lib/site-packages/limesdr/_limesdr_swig.pyd b/windows/GNU_Radio/lib/site-packages/limesdr/_limesdr_swig.pyd
new file mode 100644
index 0000000..6934dad
Binary files /dev/null and b/windows/GNU_Radio/lib/site-packages/limesdr/_limesdr_swig.pyd differ
diff --git a/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.py b/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.py
new file mode 100644
index 0000000..1268fb6
--- /dev/null
+++ b/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.py
@@ -0,0 +1,956 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 3.0.12
+#
+# Do not make changes to this file unless you know what you are doing--modify
+# the SWIG interface file instead.
+
+from sys import version_info as _swig_python_version_info
+if _swig_python_version_info >= (2, 7, 0):
+ def swig_import_helper():
+ import importlib
+ pkg = __name__.rpartition('.')[0]
+ mname = '.'.join((pkg, '_limesdr_swig')).lstrip('.')
+ try:
+ return importlib.import_module(mname)
+ except ImportError:
+ return importlib.import_module('_limesdr_swig')
+ _limesdr_swig = swig_import_helper()
+ del swig_import_helper
+elif _swig_python_version_info >= (2, 6, 0):
+ def swig_import_helper():
+ from os.path import dirname
+ import imp
+ fp = None
+ try:
+ fp, pathname, description = imp.find_module('_limesdr_swig', [dirname(__file__)])
+ except ImportError:
+ import _limesdr_swig
+ return _limesdr_swig
+ try:
+ _mod = imp.load_module('_limesdr_swig', fp, pathname, description)
+ finally:
+ if fp is not None:
+ fp.close()
+ return _mod
+ _limesdr_swig = swig_import_helper()
+ del swig_import_helper
+else:
+ import _limesdr_swig
+del _swig_python_version_info
+
+try:
+ _swig_property = property
+except NameError:
+ pass # Python < 2.2 doesn't have 'property'.
+
+try:
+ import builtins as __builtin__
+except ImportError:
+ import __builtin__
+
+def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
+ if (name == "thisown"):
+ return self.this.own(value)
+ if (name == "this"):
+ if type(value).__name__ == 'SwigPyObject':
+ self.__dict__[name] = value
+ return
+ method = class_type.__swig_setmethods__.get(name, None)
+ if method:
+ return method(self, value)
+ if (not static):
+ object.__setattr__(self, name, value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+
+
+def _swig_setattr(self, class_type, name, value):
+ return _swig_setattr_nondynamic(self, class_type, name, value, 0)
+
+
+def _swig_getattr(self, class_type, name):
+ if (name == "thisown"):
+ return self.this.own()
+ method = class_type.__swig_getmethods__.get(name, None)
+ if method:
+ return method(self)
+ raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
+
+
+def _swig_repr(self):
+ try:
+ strthis = "proxy of " + self.this.__repr__()
+ except __builtin__.Exception:
+ strthis = ""
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self, name, value):
+ if (name == "thisown"):
+ return self.this.own(value)
+ if hasattr(self, name) or (name == "this"):
+ set(self, name, value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
+
+def high_res_timer_now():
+ """high_res_timer_now() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_now()
+
+def high_res_timer_now_perfmon():
+ """high_res_timer_now_perfmon() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_now_perfmon()
+
+def high_res_timer_tps():
+ """high_res_timer_tps() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_tps()
+
+def high_res_timer_epoch():
+ """high_res_timer_epoch() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_epoch()
+class source(object):
+ """Proxy of C++ gr::limesdr::source class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+
+ def __init__(self, *args, **kwargs):
+ raise AttributeError("No constructor defined - class is abstract")
+ __repr__ = _swig_repr
+
+ def make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int lna_path_mini, int lna_path_ch0, int lna_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> source_sptr"""
+ return _limesdr_swig.source_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+ make = staticmethod(make)
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(source self, float rf_freq)"""
+ return _limesdr_swig.source_set_rf_freq(self, rf_freq)
+
+
+ def set_lna_path(self, lna_path, channel):
+ """set_lna_path(source self, int lna_path, int channel)"""
+ return _limesdr_swig.source_set_lna_path(self, lna_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(source self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.source_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(source self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.source_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(source self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.source_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(source self, int gain_dB, int channel)"""
+ return _limesdr_swig.source_set_gain(self, gain_dB, channel)
+
+ __swig_destroy__ = _limesdr_swig.delete_source
+ __del__ = lambda self: None
+source_swigregister = _limesdr_swig.source_swigregister
+source_swigregister(source)
+
+def source_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """source_make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int lna_path_mini, int lna_path_ch0, int lna_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> source_sptr"""
+ return _limesdr_swig.source_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+class source_sptr(object):
+ """Proxy of C++ boost::shared_ptr<(gr::limesdr::source)> class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+
+ def __init__(self, *args):
+ """
+ __init__(boost::shared_ptr<(gr::limesdr::source)> self) -> source_sptr
+ __init__(boost::shared_ptr<(gr::limesdr::source)> self, source p) -> source_sptr
+ """
+ this = _limesdr_swig.new_source_sptr(*args)
+ try:
+ self.this.append(this)
+ except __builtin__.Exception:
+ self.this = this
+
+ def __deref__(self):
+ """__deref__(source_sptr self) -> source"""
+ return _limesdr_swig.source_sptr___deref__(self)
+
+ __swig_destroy__ = _limesdr_swig.delete_source_sptr
+ __del__ = lambda self: None
+
+ def make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(source_sptr self, std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int lna_path_mini, int lna_path_ch0, int lna_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> source_sptr"""
+ return _limesdr_swig.source_sptr_make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(source_sptr self, float rf_freq)"""
+ return _limesdr_swig.source_sptr_set_rf_freq(self, rf_freq)
+
+
+ def set_lna_path(self, lna_path, channel):
+ """set_lna_path(source_sptr self, int lna_path, int channel)"""
+ return _limesdr_swig.source_sptr_set_lna_path(self, lna_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(source_sptr self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.source_sptr_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(source_sptr self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.source_sptr_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(source_sptr self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.source_sptr_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(source_sptr self, int gain_dB, int channel)"""
+ return _limesdr_swig.source_sptr_set_gain(self, gain_dB, channel)
+
+
+ def history(self):
+ """history(source_sptr self) -> unsigned int"""
+ return _limesdr_swig.source_sptr_history(self)
+
+
+ def declare_sample_delay(self, *args):
+ """
+ declare_sample_delay(source_sptr self, int which, int delay)
+ declare_sample_delay(source_sptr self, unsigned int delay)
+ """
+ return _limesdr_swig.source_sptr_declare_sample_delay(self, *args)
+
+
+ def sample_delay(self, which):
+ """sample_delay(source_sptr self, int which) -> unsigned int"""
+ return _limesdr_swig.source_sptr_sample_delay(self, which)
+
+
+ def output_multiple(self):
+ """output_multiple(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_output_multiple(self)
+
+
+ def relative_rate(self):
+ """relative_rate(source_sptr self) -> double"""
+ return _limesdr_swig.source_sptr_relative_rate(self)
+
+
+ def start(self):
+ """start(source_sptr self) -> bool"""
+ return _limesdr_swig.source_sptr_start(self)
+
+
+ def stop(self):
+ """stop(source_sptr self) -> bool"""
+ return _limesdr_swig.source_sptr_stop(self)
+
+
+ def nitems_read(self, which_input):
+ """nitems_read(source_sptr self, unsigned int which_input) -> uint64_t"""
+ return _limesdr_swig.source_sptr_nitems_read(self, which_input)
+
+
+ def nitems_written(self, which_output):
+ """nitems_written(source_sptr self, unsigned int which_output) -> uint64_t"""
+ return _limesdr_swig.source_sptr_nitems_written(self, which_output)
+
+
+ def max_noutput_items(self):
+ """max_noutput_items(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_max_noutput_items(self)
+
+
+ def set_max_noutput_items(self, m):
+ """set_max_noutput_items(source_sptr self, int m)"""
+ return _limesdr_swig.source_sptr_set_max_noutput_items(self, m)
+
+
+ def unset_max_noutput_items(self):
+ """unset_max_noutput_items(source_sptr self)"""
+ return _limesdr_swig.source_sptr_unset_max_noutput_items(self)
+
+
+ def is_set_max_noutput_items(self):
+ """is_set_max_noutput_items(source_sptr self) -> bool"""
+ return _limesdr_swig.source_sptr_is_set_max_noutput_items(self)
+
+
+ def set_min_noutput_items(self, m):
+ """set_min_noutput_items(source_sptr self, int m)"""
+ return _limesdr_swig.source_sptr_set_min_noutput_items(self, m)
+
+
+ def min_noutput_items(self):
+ """min_noutput_items(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_min_noutput_items(self)
+
+
+ def max_output_buffer(self, i):
+ """max_output_buffer(source_sptr self, int i) -> long"""
+ return _limesdr_swig.source_sptr_max_output_buffer(self, i)
+
+
+ def set_max_output_buffer(self, *args):
+ """
+ set_max_output_buffer(source_sptr self, long max_output_buffer)
+ set_max_output_buffer(source_sptr self, int port, long max_output_buffer)
+ """
+ return _limesdr_swig.source_sptr_set_max_output_buffer(self, *args)
+
+
+ def min_output_buffer(self, i):
+ """min_output_buffer(source_sptr self, int i) -> long"""
+ return _limesdr_swig.source_sptr_min_output_buffer(self, i)
+
+
+ def set_min_output_buffer(self, *args):
+ """
+ set_min_output_buffer(source_sptr self, long min_output_buffer)
+ set_min_output_buffer(source_sptr self, int port, long min_output_buffer)
+ """
+ return _limesdr_swig.source_sptr_set_min_output_buffer(self, *args)
+
+
+ def pc_noutput_items(self):
+ """pc_noutput_items(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_noutput_items(self)
+
+
+ def pc_noutput_items_avg(self):
+ """pc_noutput_items_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_noutput_items_avg(self)
+
+
+ def pc_noutput_items_var(self):
+ """pc_noutput_items_var(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_noutput_items_var(self)
+
+
+ def pc_nproduced(self):
+ """pc_nproduced(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_nproduced(self)
+
+
+ def pc_nproduced_avg(self):
+ """pc_nproduced_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_nproduced_avg(self)
+
+
+ def pc_nproduced_var(self):
+ """pc_nproduced_var(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_nproduced_var(self)
+
+
+ def pc_input_buffers_full(self, *args):
+ """
+ pc_input_buffers_full(source_sptr self, int which) -> float
+ pc_input_buffers_full(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_input_buffers_full(self, *args)
+
+
+ def pc_input_buffers_full_avg(self, *args):
+ """
+ pc_input_buffers_full_avg(source_sptr self, int which) -> float
+ pc_input_buffers_full_avg(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_input_buffers_full_avg(self, *args)
+
+
+ def pc_input_buffers_full_var(self, *args):
+ """
+ pc_input_buffers_full_var(source_sptr self, int which) -> float
+ pc_input_buffers_full_var(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_input_buffers_full_var(self, *args)
+
+
+ def pc_output_buffers_full(self, *args):
+ """
+ pc_output_buffers_full(source_sptr self, int which) -> float
+ pc_output_buffers_full(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_output_buffers_full(self, *args)
+
+
+ def pc_output_buffers_full_avg(self, *args):
+ """
+ pc_output_buffers_full_avg(source_sptr self, int which) -> float
+ pc_output_buffers_full_avg(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_output_buffers_full_avg(self, *args)
+
+
+ def pc_output_buffers_full_var(self, *args):
+ """
+ pc_output_buffers_full_var(source_sptr self, int which) -> float
+ pc_output_buffers_full_var(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_output_buffers_full_var(self, *args)
+
+
+ def pc_work_time(self):
+ """pc_work_time(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time(self)
+
+
+ def pc_work_time_avg(self):
+ """pc_work_time_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time_avg(self)
+
+
+ def pc_work_time_var(self):
+ """pc_work_time_var(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time_var(self)
+
+
+ def pc_work_time_total(self):
+ """pc_work_time_total(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time_total(self)
+
+
+ def pc_throughput_avg(self):
+ """pc_throughput_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_throughput_avg(self)
+
+
+ def set_processor_affinity(self, mask):
+ """set_processor_affinity(source_sptr self, std::vector< int,std::allocator< int > > const & mask)"""
+ return _limesdr_swig.source_sptr_set_processor_affinity(self, mask)
+
+
+ def unset_processor_affinity(self):
+ """unset_processor_affinity(source_sptr self)"""
+ return _limesdr_swig.source_sptr_unset_processor_affinity(self)
+
+
+ def processor_affinity(self):
+ """processor_affinity(source_sptr self) -> std::vector< int,std::allocator< int > >"""
+ return _limesdr_swig.source_sptr_processor_affinity(self)
+
+
+ def active_thread_priority(self):
+ """active_thread_priority(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_active_thread_priority(self)
+
+
+ def thread_priority(self):
+ """thread_priority(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_thread_priority(self)
+
+
+ def set_thread_priority(self, priority):
+ """set_thread_priority(source_sptr self, int priority) -> int"""
+ return _limesdr_swig.source_sptr_set_thread_priority(self, priority)
+
+
+ def name(self):
+ """name(source_sptr self) -> std::string"""
+ return _limesdr_swig.source_sptr_name(self)
+
+
+ def symbol_name(self):
+ """symbol_name(source_sptr self) -> std::string"""
+ return _limesdr_swig.source_sptr_symbol_name(self)
+
+
+ def input_signature(self):
+ """input_signature(source_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.source_sptr_input_signature(self)
+
+
+ def output_signature(self):
+ """output_signature(source_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.source_sptr_output_signature(self)
+
+
+ def unique_id(self):
+ """unique_id(source_sptr self) -> long"""
+ return _limesdr_swig.source_sptr_unique_id(self)
+
+
+ def to_basic_block(self):
+ """to_basic_block(source_sptr self) -> basic_block_sptr"""
+ return _limesdr_swig.source_sptr_to_basic_block(self)
+
+
+ def check_topology(self, ninputs, noutputs):
+ """check_topology(source_sptr self, int ninputs, int noutputs) -> bool"""
+ return _limesdr_swig.source_sptr_check_topology(self, ninputs, noutputs)
+
+
+ def alias(self):
+ """alias(source_sptr self) -> std::string"""
+ return _limesdr_swig.source_sptr_alias(self)
+
+
+ def set_block_alias(self, name):
+ """set_block_alias(source_sptr self, std::string name)"""
+ return _limesdr_swig.source_sptr_set_block_alias(self, name)
+
+
+ def _post(self, which_port, msg):
+ """_post(source_sptr self, swig_int_ptr which_port, swig_int_ptr msg)"""
+ return _limesdr_swig.source_sptr__post(self, which_port, msg)
+
+
+ def message_ports_in(self):
+ """message_ports_in(source_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.source_sptr_message_ports_in(self)
+
+
+ def message_ports_out(self):
+ """message_ports_out(source_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.source_sptr_message_ports_out(self)
+
+
+ def message_subscribers(self, which_port):
+ """message_subscribers(source_sptr self, swig_int_ptr which_port) -> swig_int_ptr"""
+ return _limesdr_swig.source_sptr_message_subscribers(self, which_port)
+
+source_sptr_swigregister = _limesdr_swig.source_sptr_swigregister
+source_sptr_swigregister(source_sptr)
+
+
+source_sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id())
+source = source.make;
+
+class sink(object):
+ """Proxy of C++ gr::limesdr::sink class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+
+ def __init__(self, *args, **kwargs):
+ raise AttributeError("No constructor defined - class is abstract")
+ __repr__ = _swig_repr
+
+ def make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int pa_path_mini, int pa_path_ch0, int pa_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> sink_sptr"""
+ return _limesdr_swig.sink_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+ make = staticmethod(make)
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(sink self, float rf_freq)"""
+ return _limesdr_swig.sink_set_rf_freq(self, rf_freq)
+
+
+ def set_pa_path(self, pa_path, channel):
+ """set_pa_path(sink self, int pa_path, int channel)"""
+ return _limesdr_swig.sink_set_pa_path(self, pa_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(sink self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.sink_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(sink self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.sink_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(sink self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.sink_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(sink self, int gain_dB, int channel)"""
+ return _limesdr_swig.sink_set_gain(self, gain_dB, channel)
+
+ __swig_destroy__ = _limesdr_swig.delete_sink
+ __del__ = lambda self: None
+sink_swigregister = _limesdr_swig.sink_swigregister
+sink_swigregister(sink)
+
+def sink_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """sink_make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int pa_path_mini, int pa_path_ch0, int pa_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> sink_sptr"""
+ return _limesdr_swig.sink_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+class sink_sptr(object):
+ """Proxy of C++ boost::shared_ptr<(gr::limesdr::sink)> class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+
+ def __init__(self, *args):
+ """
+ __init__(boost::shared_ptr<(gr::limesdr::sink)> self) -> sink_sptr
+ __init__(boost::shared_ptr<(gr::limesdr::sink)> self, sink p) -> sink_sptr
+ """
+ this = _limesdr_swig.new_sink_sptr(*args)
+ try:
+ self.this.append(this)
+ except __builtin__.Exception:
+ self.this = this
+
+ def __deref__(self):
+ """__deref__(sink_sptr self) -> sink"""
+ return _limesdr_swig.sink_sptr___deref__(self)
+
+ __swig_destroy__ = _limesdr_swig.delete_sink_sptr
+ __del__ = lambda self: None
+
+ def make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(sink_sptr self, std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int pa_path_mini, int pa_path_ch0, int pa_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> sink_sptr"""
+ return _limesdr_swig.sink_sptr_make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(sink_sptr self, float rf_freq)"""
+ return _limesdr_swig.sink_sptr_set_rf_freq(self, rf_freq)
+
+
+ def set_pa_path(self, pa_path, channel):
+ """set_pa_path(sink_sptr self, int pa_path, int channel)"""
+ return _limesdr_swig.sink_sptr_set_pa_path(self, pa_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(sink_sptr self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.sink_sptr_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(sink_sptr self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.sink_sptr_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(sink_sptr self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.sink_sptr_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(sink_sptr self, int gain_dB, int channel)"""
+ return _limesdr_swig.sink_sptr_set_gain(self, gain_dB, channel)
+
+
+ def history(self):
+ """history(sink_sptr self) -> unsigned int"""
+ return _limesdr_swig.sink_sptr_history(self)
+
+
+ def declare_sample_delay(self, *args):
+ """
+ declare_sample_delay(sink_sptr self, int which, int delay)
+ declare_sample_delay(sink_sptr self, unsigned int delay)
+ """
+ return _limesdr_swig.sink_sptr_declare_sample_delay(self, *args)
+
+
+ def sample_delay(self, which):
+ """sample_delay(sink_sptr self, int which) -> unsigned int"""
+ return _limesdr_swig.sink_sptr_sample_delay(self, which)
+
+
+ def output_multiple(self):
+ """output_multiple(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_output_multiple(self)
+
+
+ def relative_rate(self):
+ """relative_rate(sink_sptr self) -> double"""
+ return _limesdr_swig.sink_sptr_relative_rate(self)
+
+
+ def start(self):
+ """start(sink_sptr self) -> bool"""
+ return _limesdr_swig.sink_sptr_start(self)
+
+
+ def stop(self):
+ """stop(sink_sptr self) -> bool"""
+ return _limesdr_swig.sink_sptr_stop(self)
+
+
+ def nitems_read(self, which_input):
+ """nitems_read(sink_sptr self, unsigned int which_input) -> uint64_t"""
+ return _limesdr_swig.sink_sptr_nitems_read(self, which_input)
+
+
+ def nitems_written(self, which_output):
+ """nitems_written(sink_sptr self, unsigned int which_output) -> uint64_t"""
+ return _limesdr_swig.sink_sptr_nitems_written(self, which_output)
+
+
+ def max_noutput_items(self):
+ """max_noutput_items(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_max_noutput_items(self)
+
+
+ def set_max_noutput_items(self, m):
+ """set_max_noutput_items(sink_sptr self, int m)"""
+ return _limesdr_swig.sink_sptr_set_max_noutput_items(self, m)
+
+
+ def unset_max_noutput_items(self):
+ """unset_max_noutput_items(sink_sptr self)"""
+ return _limesdr_swig.sink_sptr_unset_max_noutput_items(self)
+
+
+ def is_set_max_noutput_items(self):
+ """is_set_max_noutput_items(sink_sptr self) -> bool"""
+ return _limesdr_swig.sink_sptr_is_set_max_noutput_items(self)
+
+
+ def set_min_noutput_items(self, m):
+ """set_min_noutput_items(sink_sptr self, int m)"""
+ return _limesdr_swig.sink_sptr_set_min_noutput_items(self, m)
+
+
+ def min_noutput_items(self):
+ """min_noutput_items(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_min_noutput_items(self)
+
+
+ def max_output_buffer(self, i):
+ """max_output_buffer(sink_sptr self, int i) -> long"""
+ return _limesdr_swig.sink_sptr_max_output_buffer(self, i)
+
+
+ def set_max_output_buffer(self, *args):
+ """
+ set_max_output_buffer(sink_sptr self, long max_output_buffer)
+ set_max_output_buffer(sink_sptr self, int port, long max_output_buffer)
+ """
+ return _limesdr_swig.sink_sptr_set_max_output_buffer(self, *args)
+
+
+ def min_output_buffer(self, i):
+ """min_output_buffer(sink_sptr self, int i) -> long"""
+ return _limesdr_swig.sink_sptr_min_output_buffer(self, i)
+
+
+ def set_min_output_buffer(self, *args):
+ """
+ set_min_output_buffer(sink_sptr self, long min_output_buffer)
+ set_min_output_buffer(sink_sptr self, int port, long min_output_buffer)
+ """
+ return _limesdr_swig.sink_sptr_set_min_output_buffer(self, *args)
+
+
+ def pc_noutput_items(self):
+ """pc_noutput_items(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_noutput_items(self)
+
+
+ def pc_noutput_items_avg(self):
+ """pc_noutput_items_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_noutput_items_avg(self)
+
+
+ def pc_noutput_items_var(self):
+ """pc_noutput_items_var(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_noutput_items_var(self)
+
+
+ def pc_nproduced(self):
+ """pc_nproduced(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_nproduced(self)
+
+
+ def pc_nproduced_avg(self):
+ """pc_nproduced_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_nproduced_avg(self)
+
+
+ def pc_nproduced_var(self):
+ """pc_nproduced_var(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_nproduced_var(self)
+
+
+ def pc_input_buffers_full(self, *args):
+ """
+ pc_input_buffers_full(sink_sptr self, int which) -> float
+ pc_input_buffers_full(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_input_buffers_full(self, *args)
+
+
+ def pc_input_buffers_full_avg(self, *args):
+ """
+ pc_input_buffers_full_avg(sink_sptr self, int which) -> float
+ pc_input_buffers_full_avg(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_input_buffers_full_avg(self, *args)
+
+
+ def pc_input_buffers_full_var(self, *args):
+ """
+ pc_input_buffers_full_var(sink_sptr self, int which) -> float
+ pc_input_buffers_full_var(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_input_buffers_full_var(self, *args)
+
+
+ def pc_output_buffers_full(self, *args):
+ """
+ pc_output_buffers_full(sink_sptr self, int which) -> float
+ pc_output_buffers_full(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_output_buffers_full(self, *args)
+
+
+ def pc_output_buffers_full_avg(self, *args):
+ """
+ pc_output_buffers_full_avg(sink_sptr self, int which) -> float
+ pc_output_buffers_full_avg(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_output_buffers_full_avg(self, *args)
+
+
+ def pc_output_buffers_full_var(self, *args):
+ """
+ pc_output_buffers_full_var(sink_sptr self, int which) -> float
+ pc_output_buffers_full_var(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_output_buffers_full_var(self, *args)
+
+
+ def pc_work_time(self):
+ """pc_work_time(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time(self)
+
+
+ def pc_work_time_avg(self):
+ """pc_work_time_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time_avg(self)
+
+
+ def pc_work_time_var(self):
+ """pc_work_time_var(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time_var(self)
+
+
+ def pc_work_time_total(self):
+ """pc_work_time_total(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time_total(self)
+
+
+ def pc_throughput_avg(self):
+ """pc_throughput_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_throughput_avg(self)
+
+
+ def set_processor_affinity(self, mask):
+ """set_processor_affinity(sink_sptr self, std::vector< int,std::allocator< int > > const & mask)"""
+ return _limesdr_swig.sink_sptr_set_processor_affinity(self, mask)
+
+
+ def unset_processor_affinity(self):
+ """unset_processor_affinity(sink_sptr self)"""
+ return _limesdr_swig.sink_sptr_unset_processor_affinity(self)
+
+
+ def processor_affinity(self):
+ """processor_affinity(sink_sptr self) -> std::vector< int,std::allocator< int > >"""
+ return _limesdr_swig.sink_sptr_processor_affinity(self)
+
+
+ def active_thread_priority(self):
+ """active_thread_priority(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_active_thread_priority(self)
+
+
+ def thread_priority(self):
+ """thread_priority(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_thread_priority(self)
+
+
+ def set_thread_priority(self, priority):
+ """set_thread_priority(sink_sptr self, int priority) -> int"""
+ return _limesdr_swig.sink_sptr_set_thread_priority(self, priority)
+
+
+ def name(self):
+ """name(sink_sptr self) -> std::string"""
+ return _limesdr_swig.sink_sptr_name(self)
+
+
+ def symbol_name(self):
+ """symbol_name(sink_sptr self) -> std::string"""
+ return _limesdr_swig.sink_sptr_symbol_name(self)
+
+
+ def input_signature(self):
+ """input_signature(sink_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.sink_sptr_input_signature(self)
+
+
+ def output_signature(self):
+ """output_signature(sink_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.sink_sptr_output_signature(self)
+
+
+ def unique_id(self):
+ """unique_id(sink_sptr self) -> long"""
+ return _limesdr_swig.sink_sptr_unique_id(self)
+
+
+ def to_basic_block(self):
+ """to_basic_block(sink_sptr self) -> basic_block_sptr"""
+ return _limesdr_swig.sink_sptr_to_basic_block(self)
+
+
+ def check_topology(self, ninputs, noutputs):
+ """check_topology(sink_sptr self, int ninputs, int noutputs) -> bool"""
+ return _limesdr_swig.sink_sptr_check_topology(self, ninputs, noutputs)
+
+
+ def alias(self):
+ """alias(sink_sptr self) -> std::string"""
+ return _limesdr_swig.sink_sptr_alias(self)
+
+
+ def set_block_alias(self, name):
+ """set_block_alias(sink_sptr self, std::string name)"""
+ return _limesdr_swig.sink_sptr_set_block_alias(self, name)
+
+
+ def _post(self, which_port, msg):
+ """_post(sink_sptr self, swig_int_ptr which_port, swig_int_ptr msg)"""
+ return _limesdr_swig.sink_sptr__post(self, which_port, msg)
+
+
+ def message_ports_in(self):
+ """message_ports_in(sink_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.sink_sptr_message_ports_in(self)
+
+
+ def message_ports_out(self):
+ """message_ports_out(sink_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.sink_sptr_message_ports_out(self)
+
+
+ def message_subscribers(self, which_port):
+ """message_subscribers(sink_sptr self, swig_int_ptr which_port) -> swig_int_ptr"""
+ return _limesdr_swig.sink_sptr_message_subscribers(self, which_port)
+
+sink_sptr_swigregister = _limesdr_swig.sink_sptr_swigregister
+sink_sptr_swigregister(sink_sptr)
+
+
+sink_sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id())
+sink = sink.make;
+
+
+
diff --git a/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.pyc b/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.pyc
new file mode 100644
index 0000000..61aa2dd
Binary files /dev/null and b/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.pyc differ
diff --git a/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.pyo b/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.pyo
new file mode 100644
index 0000000..61aa2dd
Binary files /dev/null and b/windows/GNU_Radio/lib/site-packages/limesdr/limesdr_swig.pyo differ
diff --git a/windows/GNU_Radio/share/gnuradio/grc/blocks/limesdr_sink.xml b/windows/GNU_Radio/share/gnuradio/grc/blocks/limesdr_sink.xml
new file mode 100644
index 0000000..f973b70
--- /dev/null
+++ b/windows/GNU_Radio/share/gnuradio/grc/blocks/limesdr_sink.xml
@@ -0,0 +1,825 @@
+
+
+ LimeSuite Sink (TX)
+ limesdr_sink
+ [LimeSuite]
+ throttle
+ import limesdr
+ limesdr.sink($serial,
+ $device_type,
+ $chip_mode,
+ $channel,
+ $file_switch,
+ $filename,
+ $rf_freq,
+ $samp_rate,
+ $oversample,
+ $calibration_ch0,
+ $calibr_bandw_ch0,
+ $calibration_ch1,
+ $calibr_bandw_ch1,
+ $pa_path_mini,
+ $pa_path_ch0,
+ $pa_path_ch1,
+ $analog_filter_ch0,
+ $analog_bandw_ch0,
+ $analog_filter_ch1,
+ $analog_bandw_ch1,
+ $digital_filter_ch0,
+ $digital_bandw_ch0,
+ $digital_filter_ch1,
+ $digital_bandw_ch1,
+ $gain_dB_ch0,
+ $gain_dB_ch1,
+ $nco_freq_ch0,
+ $nco_freq_ch1,
+ $cmix_mode_ch0,
+ $cmix_mode_ch1)
+
+ set_rf_freq($rf_freq)
+ set_pa_path($pa_path_mini,0)
+ set_pa_path($pa_path_ch0,0)
+ set_pa_path($pa_path_ch1,1)
+ set_nco($nco_freq_ch0,$cmix_mode_ch0,0)
+ set_nco($nco_freq_ch1,$cmix_mode_ch1,1)
+ set_analog_filter($analog_filter_ch0,$analog_bandw_ch0,0)
+ set_analog_filter($analog_filter_ch1,$analog_bandw_ch1,1)
+ set_digital_filter($digital_filter_ch0,$digital_bandw_ch0,0)
+ set_digital_filter($digital_filter_ch1,$digital_bandw_ch1,1)
+ set_gain($gain_dB_ch0,0)
+ set_gain($gain_dB_ch1,1)
+
+
+ General
+ CH0
+ CH1
+
+
+
+ Device serial
+ serial
+
+ string
+ none
+
+
+
+ Device type
+ device_type
+ 2
+ int
+ none
+
+ LimeSDR-Mini
+ 1
+
+
+ LimeSDR-USB
+ 2
+
+
+
+
+ Chip mode
+ chip_mode
+ 1
+ int
+ none
+
+ SISO
+ 1
+
+
+ MIMO
+ 2
+
+
+
+
+ CH0
+ channel
+ 0
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $chip_mode() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ A
+ 0
+
+
+ B
+ 1
+
+
+
+
+ Load settings
+ file_switch
+ 0
+ int
+ none
+
+ NO
+ 0
+
+
+ YES
+ 1
+
+
+
+
+ File
+ filename
+
+ file_open
+
+ #if $file_switch() == 0
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ RF frequency
+ rf_freq
+ 100e6
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Sample rate
+ samp_rate
+ samp_rate
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Oversample
+ oversample
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Default
+ 0
+
+
+ 1
+ 1
+
+
+ 2
+ 2
+
+
+ 4
+ 4
+
+
+ 8
+ 8
+
+
+ 16
+ 16
+
+
+ 32
+ 32
+
+
+
+
+ CH0:NCO frequency
+ nco_freq_ch0
+ 0
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:CMIX mode
+ cmix_mode_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration
+ calibration_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration bandw.
+ calibr_bandw_ch0
+ 10e6
+ float
+
+ #if $calibration_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:PA path
+ pa_path_mini
+ 1
+ int
+
+ #if $device_type() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ Band1
+ 1
+
+
+ Band2
+ 2
+
+ CH0
+
+
+
+ CH0:PA path
+ pa_path_ch0
+ 1
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Band1
+ 1
+
+
+ Band2
+ 2
+
+ CH0
+
+
+
+ CH0:Analog filter
+ analog_filter_ch0
+ 1
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Analog filter bandw.
+ analog_bandw_ch0
+ 5e6
+ float
+
+ #if $analog_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Digital filter
+ digital_filter_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Digital filter bandw.
+ digital_bandw_ch0
+ 0
+ float
+
+ #if $digital_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Gain,dB
+ gain_dB_ch0
+ 30
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH1:NCO frequency
+ nco_freq_ch1
+ 0
+ float
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:CMIX mode
+ cmix_mode_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration
+ calibration_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration bandw.
+ calibr_bandw_ch1
+ 10e6
+ float
+
+ #if $calibration_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:PA path
+ pa_path_ch1
+ 1
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Band1
+ 1
+
+
+ Band2
+ 2
+
+ CH1
+
+
+
+ CH1:Analog filter
+ analog_filter_ch1
+ 1
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Analog filter bandw.
+ analog_bandw_ch1
+ 5e6
+ float
+
+ #if $analog_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Digital filter
+ digital_filter_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Digital filter bandw.
+ digital_bandw_ch1
+ 0
+ float
+
+ #if $digital_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Gain,dB
+ gain_dB_ch1
+ 30
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+ $device_type >= $chip_mode
+ $device_type >= 1
+ 2 >= $device_type
+
+ $chip_mode >= 1
+ 2 >= $chip_mode
+
+ $rf_freq > 0
+
+ $calibr_bandw_ch0 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch0
+
+ $calibr_bandw_ch1 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch1
+
+ $analog_bandw_ch0 >= 5e6
+ 130e6 >= $analog_bandw_ch0
+
+ $analog_bandw_ch1 >= 5e6
+ 130e6 >= $analog_bandw_ch1
+
+ $digital_bandw_ch0 >= 0
+ $samp_rate >= $digital_bandw_ch0
+
+ $digital_bandw_ch1 >= 0
+ $samp_rate >= $digital_bandw_ch1
+
+ $gain_dB_ch0 >= 0
+ 60 >= $gain_dB_ch0
+
+ $gain_dB_ch1 >= 0
+ 60 >= $gain_dB_ch1
+
+ $samp_rate > 0
+ 61.44e6 >= $samp_rate
+
+
+ in
+ complex
+ $chip_mode
+
+
+
+-------------------------------------------------------------------------------------------------------------------
+DEVICE SERIAL
+
+Device serial number obtained by running
+
+ LimeUtil --find
+
+Cannot be left blank.
+-------------------------------------------------------------------------------------------------------------------
+DEVICE TYPE
+
+This setting lets you choose from predefined device type list and loads appropriate settings for the selected device.
+Currently supported device types: LimeSDR-USB, LimeSDR-Mini.
+-------------------------------------------------------------------------------------------------------------------
+CHIP MODE
+
+Use this setting to choose between single-input and single-output (SISO)/multiple-input and multiple-output (MIMO) chip modes.
+
+Note: not all devices support MIMO mode.
+-------------------------------------------------------------------------------------------------------------------
+CH0
+
+When in SISO mode select active channel as CH0.
+
+Note: not all devices have more than one channel.
+-------------------------------------------------------------------------------------------------------------------
+LOAD SETTINGS
+
+Enable loading settings from file.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+FILE
+
+Generate .ini file with LimeSuite and select path.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+CENTER FREQUENCY
+
+Set RF center frequency for TX (both channels).
+LimeSDR-USB supports [100e3,3800e6] Hz.
+LimeSDR-Mini supports [10e6,3800e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+SAMPLE RATE
+
+Here you can select sample rate for TX.
+
+LimeSDR-USB sample rate must be no more than 61.44e6 S/s.
+LimeSDR-Mini sample rate must be no more than 30.72e6 S/s.
+
+Note: LimeSDR-Mini supports only the same sample rate for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+OVERSAMPLE
+
+Here you can select oversampling value for TX. Default value uses highest possible oversampling value.
+
+Note: LimeSDR-Mini supports only the same oversampling value for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+NCO FREQUENCY
+
+Adjust numerically controlled oscillator for each channel. 0 means that NCO is OFF.
+-------------------------------------------------------------------------------------------------------------------
+CMIX MODE
+
+Controls NCO direction for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION
+
+Turn DC offset and IQ imbalance calibration ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION BANDW.
+
+When calibration is turned ON this setting is used to set bandwidth for calibration for each channel. This value should be equal to your signal bandwidth.
+
+Calibration bandwidth range must be [2.5e6,120e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+PA PATH
+
+Select active power amplifier path of each channel.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER
+
+Turn low-pass filter ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER BANDW.
+
+Enter analog filter bandwidth for each channel.
+Analog filter bandwidth range must be [5e6,130e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER
+
+Turn digital filters (GFIR) ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER BANDW.
+
+Enter digital filter bandwidth for each channel. Bandwidth should not be higher than sample rate.
+-------------------------------------------------------------------------------------------------------------------
+GAIN
+
+Controls combined TX gain settings. Gain range must be [0,60] dB.
+-------------------------------------------------------------------------------------------------------------------
+
+
diff --git a/windows/GNU_Radio/share/gnuradio/grc/blocks/limesdr_source.xml b/windows/GNU_Radio/share/gnuradio/grc/blocks/limesdr_source.xml
new file mode 100644
index 0000000..3e436cc
--- /dev/null
+++ b/windows/GNU_Radio/share/gnuradio/grc/blocks/limesdr_source.xml
@@ -0,0 +1,833 @@
+
+
+ LimeSuite Source (RX)
+ limesdr_source
+ [LimeSuite]
+ throttle
+ import limesdr
+ limesdr.source($serial,
+ $device_type,
+ $chip_mode,
+ $channel,
+ $file_switch,
+ $filename,
+ $rf_freq,
+ $samp_rate,
+ $oversample,
+ $calibration_ch0,
+ $calibr_bandw_ch0,
+ $calibration_ch1,
+ $calibr_bandw_ch1,
+ $lna_path_mini,
+ $lna_path_ch0,
+ $lna_path_ch1,
+ $analog_filter_ch0,
+ $analog_bandw_ch0,
+ $analog_filter_ch1,
+ $analog_bandw_ch1,
+ $digital_filter_ch0,
+ $digital_bandw_ch0,
+ $digital_filter_ch1,
+ $digital_bandw_ch1,
+ $gain_dB_ch0,
+ $gain_dB_ch1,
+ $nco_freq_ch0,
+ $nco_freq_ch1,
+ $cmix_mode_ch0,
+ $cmix_mode_ch1)
+
+ set_rf_freq($rf_freq)
+ set_lna_path($lna_path_mini,0)
+ set_lna_path($lna_path_ch0,0)
+ set_lna_path($lna_path_ch1,1)
+ set_nco($nco_freq_ch0,$cmix_mode_ch0,0)
+ set_nco($nco_freq_ch1,$cmix_mode_ch1,1)
+ set_analog_filter($analog_filter_ch0,$analog_bandw_ch0,0)
+ set_analog_filter($analog_filter_ch1,$analog_bandw_ch1,1)
+ set_digital_filter($digital_filter_ch0,$digital_bandw_ch0,0)
+ set_digital_filter($digital_filter_ch1,$digital_bandw_ch1,1)
+ set_gain($gain_dB_ch0,0)
+ set_gain($gain_dB_ch1,1)
+
+
+ General
+ CH0
+ CH1
+
+
+
+ Device serial
+ serial
+
+ string
+ none
+
+
+
+ Device type
+ device_type
+ 2
+ int
+ none
+
+ LimeSDR-Mini
+ 1
+
+
+ LimeSDR-USB
+ 2
+
+
+
+
+ Chip mode
+ chip_mode
+ 1
+ int
+ none
+
+ SISO
+ 1
+
+
+ MIMO
+ 2
+
+
+
+
+ CH0
+ channel
+ 0
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $chip_mode() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ A
+ 0
+
+
+ B
+ 1
+
+
+
+
+ Load settings
+ file_switch
+ 0
+ int
+ none
+
+ NO
+ 0
+
+
+ YES
+ 1
+
+
+
+
+ File
+ filename
+
+ file_open
+
+ #if $file_switch() == 0
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ RF frequency
+ rf_freq
+ 100e6
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Sample rate
+ samp_rate
+ samp_rate
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Oversample
+ oversample
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Default
+ 0
+
+
+ 1
+ 1
+
+
+ 2
+ 2
+
+
+ 4
+ 4
+
+
+ 8
+ 8
+
+
+ 16
+ 16
+
+
+ 32
+ 32
+
+
+
+
+ CH0:NCO frequency
+ nco_freq_ch0
+ 0
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:CMIX mode
+ cmix_mode_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration
+ calibration_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration bandw.
+ calibr_bandw_ch0
+ 10e6
+ float
+
+ #if $calibration_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:LNA path
+ lna_path_mini
+ 3
+ int
+
+ #if $device_type() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ H
+ 1
+
+
+ W
+ 3
+
+ CH0
+
+
+
+ CH0:LNA path
+ lna_path_ch0
+ 2
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ H
+ 1
+
+
+ L
+ 2
+
+
+ W
+ 3
+
+ CH0
+
+
+
+ CH0:Analog filter
+ analog_filter_ch0
+ 1
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Analog filter bandw.
+ analog_bandw_ch0
+ 5e6
+ float
+
+ #if $analog_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Digital filter
+ digital_filter_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Digital filter bandw.
+ digital_bandw_ch0
+ 0
+ float
+
+ #if $digital_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Gain,dB
+ gain_dB_ch0
+ 30
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH1:NCO frequency
+ nco_freq_ch1
+ 0
+ float
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:CMIX mode
+ cmix_mode_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration
+ calibration_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration bandw.
+ calibr_bandw_ch1
+ 10e6
+ float
+
+ #if $calibration_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:LNA path
+ lna_path_ch1
+ 2
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ H
+ 1
+
+
+ L
+ 2
+
+
+ W
+ 3
+
+ CH1
+
+
+
+ CH1:Analog filter
+ analog_filter_ch1
+ 1
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Analog filter bandw.
+ analog_bandw_ch1
+ 5e6
+ float
+
+ #if $analog_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Digital filter
+ digital_filter_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Digital filter bandw.
+ digital_bandw_ch1
+ 0
+ float
+
+ #if $digital_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Gain,dB
+ gain_dB_ch1
+ 30
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+ $device_type >= $chip_mode
+ $device_type >= 1
+ 2 >= $device_type
+
+ $chip_mode >= 1
+ 2 >= $chip_mode
+
+ $rf_freq > 0
+
+ $calibr_bandw_ch0 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch0
+
+ $calibr_bandw_ch1 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch1
+
+ $analog_bandw_ch0 >= 1.5e6
+ 130e6 >= $analog_bandw_ch0
+
+ $analog_bandw_ch1 >= 1.5e6
+ 130e6 >= $analog_bandw_ch1
+
+ $digital_bandw_ch0 >= 0
+ $samp_rate >= $digital_bandw_ch0
+
+ $digital_bandw_ch1 >= 0
+ $samp_rate >= $digital_bandw_ch1
+
+ $gain_dB_ch0 >= 0
+ 70 >= $gain_dB_ch0
+
+ $gain_dB_ch1 >= 0
+ 70 >= $gain_dB_ch1
+
+ $samp_rate > 0
+ 61.44e6 >= $samp_rate
+
+
+ out
+ complex
+ $chip_mode
+
+
+
+-------------------------------------------------------------------------------------------------------------------
+DEVICE SERIAL
+
+Device serial number obtained by running
+
+ LimeUtil --find
+
+Cannot be left blank.
+-------------------------------------------------------------------------------------------------------------------
+DEVICE TYPE
+
+This setting lets you choose from predefined device type list and loads appropriate settings for the selected device.
+Currently supported device types: LimeSDR-USB, LimeSDR-Mini.
+-------------------------------------------------------------------------------------------------------------------
+CHIP MODE
+
+Use this setting to choose between single-input and single-output (SISO)/multiple-input and multiple-output (MIMO) chip modes.
+
+Note: not all devices support MIMO mode.
+-------------------------------------------------------------------------------------------------------------------
+CH0
+
+When in SISO mode select active channel as CH0.
+
+Note: not all devices have more than one channel.
+-------------------------------------------------------------------------------------------------------------------
+LOAD SETTINGS
+
+Enable loading settings from file.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+FILE
+
+Generate .ini file with LimeSuite and select path.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+RF FREQUENCY
+
+Set RF center frequency for RX (both channels).
+LimeSDR-USB supports [100e3,3800e6] Hz.
+LimeSDR-Mini supports [10e6,3800e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+SAMPLE RATE
+
+Here you can select sample rate for RX.
+
+LimeSDR-USB sample rate must be no more than 61.44e6 S/s.
+LimeSDR-Mini sample rate must be no more than 30.72e6 S/s.
+
+Note: LimeSDR-Mini supports only the same sample rate for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+OVERSAMPLE
+
+Here you can select oversampling value for RX. Default value uses highest possible oversampling value.
+
+Note: LimeSDR-Mini supports only the same oversampling value for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+NCO FREQUENCY
+
+Adjust numerically controlled oscillator for each channel. 0 means that NCO is OFF.
+-------------------------------------------------------------------------------------------------------------------
+CMIX MODE
+
+Controls NCO direction for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION
+
+Turn DC offset and IQ imbalance calibration ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION BANDW.
+
+When calibration is turned ON this setting is used to set bandwidth for calibration for each channel. This value should be equal to your signal bandwidth.
+
+Calibration bandwidth range must be [2.5e6,120e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+LNA PATH
+
+Select active low-noise amplifier path of each channel.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER
+
+Turn low-pass filter ON/OFF for each channel. When OFF device uses default values.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER BANDW.
+
+Enter analog filter bandwidth for each channel.
+Analog filter bandwidth range must be [1.5e6,130e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER
+
+Turn digital filters (GFIR) ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER BANDW.
+
+Enter digital filter bandwidth for each channel. Bandwidth should not be higher than sample rate.
+-------------------------------------------------------------------------------------------------------------------
+GAIN
+
+Controls combined RX gain settings. Gain range must be [0,70] dB.
+-------------------------------------------------------------------------------------------------------------------
+
+
diff --git a/windows/Pothos_SDR/bin/gnuradio-limesdr.dll b/windows/Pothos_SDR/bin/gnuradio-limesdr.dll
new file mode 100644
index 0000000..b5bd8bf
Binary files /dev/null and b/windows/Pothos_SDR/bin/gnuradio-limesdr.dll differ
diff --git a/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/__init__.pyc b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/__init__.pyc
new file mode 100644
index 0000000..3c8a71d
Binary files /dev/null and b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/__init__.pyc differ
diff --git a/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/__init__.pyo b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/__init__.pyo
new file mode 100644
index 0000000..3c8a71d
Binary files /dev/null and b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/__init__.pyo differ
diff --git a/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/_limesdr_swig.pyd b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/_limesdr_swig.pyd
new file mode 100644
index 0000000..2174650
Binary files /dev/null and b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/_limesdr_swig.pyd differ
diff --git a/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.py b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.py
new file mode 100644
index 0000000..1268fb6
--- /dev/null
+++ b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.py
@@ -0,0 +1,956 @@
+# This file was automatically generated by SWIG (http://www.swig.org).
+# Version 3.0.12
+#
+# Do not make changes to this file unless you know what you are doing--modify
+# the SWIG interface file instead.
+
+from sys import version_info as _swig_python_version_info
+if _swig_python_version_info >= (2, 7, 0):
+ def swig_import_helper():
+ import importlib
+ pkg = __name__.rpartition('.')[0]
+ mname = '.'.join((pkg, '_limesdr_swig')).lstrip('.')
+ try:
+ return importlib.import_module(mname)
+ except ImportError:
+ return importlib.import_module('_limesdr_swig')
+ _limesdr_swig = swig_import_helper()
+ del swig_import_helper
+elif _swig_python_version_info >= (2, 6, 0):
+ def swig_import_helper():
+ from os.path import dirname
+ import imp
+ fp = None
+ try:
+ fp, pathname, description = imp.find_module('_limesdr_swig', [dirname(__file__)])
+ except ImportError:
+ import _limesdr_swig
+ return _limesdr_swig
+ try:
+ _mod = imp.load_module('_limesdr_swig', fp, pathname, description)
+ finally:
+ if fp is not None:
+ fp.close()
+ return _mod
+ _limesdr_swig = swig_import_helper()
+ del swig_import_helper
+else:
+ import _limesdr_swig
+del _swig_python_version_info
+
+try:
+ _swig_property = property
+except NameError:
+ pass # Python < 2.2 doesn't have 'property'.
+
+try:
+ import builtins as __builtin__
+except ImportError:
+ import __builtin__
+
+def _swig_setattr_nondynamic(self, class_type, name, value, static=1):
+ if (name == "thisown"):
+ return self.this.own(value)
+ if (name == "this"):
+ if type(value).__name__ == 'SwigPyObject':
+ self.__dict__[name] = value
+ return
+ method = class_type.__swig_setmethods__.get(name, None)
+ if method:
+ return method(self, value)
+ if (not static):
+ object.__setattr__(self, name, value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+
+
+def _swig_setattr(self, class_type, name, value):
+ return _swig_setattr_nondynamic(self, class_type, name, value, 0)
+
+
+def _swig_getattr(self, class_type, name):
+ if (name == "thisown"):
+ return self.this.own()
+ method = class_type.__swig_getmethods__.get(name, None)
+ if method:
+ return method(self)
+ raise AttributeError("'%s' object has no attribute '%s'" % (class_type.__name__, name))
+
+
+def _swig_repr(self):
+ try:
+ strthis = "proxy of " + self.this.__repr__()
+ except __builtin__.Exception:
+ strthis = ""
+ return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
+
+
+def _swig_setattr_nondynamic_method(set):
+ def set_attr(self, name, value):
+ if (name == "thisown"):
+ return self.this.own(value)
+ if hasattr(self, name) or (name == "this"):
+ set(self, name, value)
+ else:
+ raise AttributeError("You cannot add attributes to %s" % self)
+ return set_attr
+
+
+
+def high_res_timer_now():
+ """high_res_timer_now() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_now()
+
+def high_res_timer_now_perfmon():
+ """high_res_timer_now_perfmon() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_now_perfmon()
+
+def high_res_timer_tps():
+ """high_res_timer_tps() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_tps()
+
+def high_res_timer_epoch():
+ """high_res_timer_epoch() -> gr::high_res_timer_type"""
+ return _limesdr_swig.high_res_timer_epoch()
+class source(object):
+ """Proxy of C++ gr::limesdr::source class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+
+ def __init__(self, *args, **kwargs):
+ raise AttributeError("No constructor defined - class is abstract")
+ __repr__ = _swig_repr
+
+ def make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int lna_path_mini, int lna_path_ch0, int lna_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> source_sptr"""
+ return _limesdr_swig.source_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+ make = staticmethod(make)
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(source self, float rf_freq)"""
+ return _limesdr_swig.source_set_rf_freq(self, rf_freq)
+
+
+ def set_lna_path(self, lna_path, channel):
+ """set_lna_path(source self, int lna_path, int channel)"""
+ return _limesdr_swig.source_set_lna_path(self, lna_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(source self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.source_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(source self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.source_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(source self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.source_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(source self, int gain_dB, int channel)"""
+ return _limesdr_swig.source_set_gain(self, gain_dB, channel)
+
+ __swig_destroy__ = _limesdr_swig.delete_source
+ __del__ = lambda self: None
+source_swigregister = _limesdr_swig.source_swigregister
+source_swigregister(source)
+
+def source_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """source_make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int lna_path_mini, int lna_path_ch0, int lna_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> source_sptr"""
+ return _limesdr_swig.source_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+class source_sptr(object):
+ """Proxy of C++ boost::shared_ptr<(gr::limesdr::source)> class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+
+ def __init__(self, *args):
+ """
+ __init__(boost::shared_ptr<(gr::limesdr::source)> self) -> source_sptr
+ __init__(boost::shared_ptr<(gr::limesdr::source)> self, source p) -> source_sptr
+ """
+ this = _limesdr_swig.new_source_sptr(*args)
+ try:
+ self.this.append(this)
+ except __builtin__.Exception:
+ self.this = this
+
+ def __deref__(self):
+ """__deref__(source_sptr self) -> source"""
+ return _limesdr_swig.source_sptr___deref__(self)
+
+ __swig_destroy__ = _limesdr_swig.delete_source_sptr
+ __del__ = lambda self: None
+
+ def make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(source_sptr self, std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int lna_path_mini, int lna_path_ch0, int lna_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> source_sptr"""
+ return _limesdr_swig.source_sptr_make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, lna_path_mini, lna_path_ch0, lna_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(source_sptr self, float rf_freq)"""
+ return _limesdr_swig.source_sptr_set_rf_freq(self, rf_freq)
+
+
+ def set_lna_path(self, lna_path, channel):
+ """set_lna_path(source_sptr self, int lna_path, int channel)"""
+ return _limesdr_swig.source_sptr_set_lna_path(self, lna_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(source_sptr self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.source_sptr_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(source_sptr self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.source_sptr_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(source_sptr self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.source_sptr_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(source_sptr self, int gain_dB, int channel)"""
+ return _limesdr_swig.source_sptr_set_gain(self, gain_dB, channel)
+
+
+ def history(self):
+ """history(source_sptr self) -> unsigned int"""
+ return _limesdr_swig.source_sptr_history(self)
+
+
+ def declare_sample_delay(self, *args):
+ """
+ declare_sample_delay(source_sptr self, int which, int delay)
+ declare_sample_delay(source_sptr self, unsigned int delay)
+ """
+ return _limesdr_swig.source_sptr_declare_sample_delay(self, *args)
+
+
+ def sample_delay(self, which):
+ """sample_delay(source_sptr self, int which) -> unsigned int"""
+ return _limesdr_swig.source_sptr_sample_delay(self, which)
+
+
+ def output_multiple(self):
+ """output_multiple(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_output_multiple(self)
+
+
+ def relative_rate(self):
+ """relative_rate(source_sptr self) -> double"""
+ return _limesdr_swig.source_sptr_relative_rate(self)
+
+
+ def start(self):
+ """start(source_sptr self) -> bool"""
+ return _limesdr_swig.source_sptr_start(self)
+
+
+ def stop(self):
+ """stop(source_sptr self) -> bool"""
+ return _limesdr_swig.source_sptr_stop(self)
+
+
+ def nitems_read(self, which_input):
+ """nitems_read(source_sptr self, unsigned int which_input) -> uint64_t"""
+ return _limesdr_swig.source_sptr_nitems_read(self, which_input)
+
+
+ def nitems_written(self, which_output):
+ """nitems_written(source_sptr self, unsigned int which_output) -> uint64_t"""
+ return _limesdr_swig.source_sptr_nitems_written(self, which_output)
+
+
+ def max_noutput_items(self):
+ """max_noutput_items(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_max_noutput_items(self)
+
+
+ def set_max_noutput_items(self, m):
+ """set_max_noutput_items(source_sptr self, int m)"""
+ return _limesdr_swig.source_sptr_set_max_noutput_items(self, m)
+
+
+ def unset_max_noutput_items(self):
+ """unset_max_noutput_items(source_sptr self)"""
+ return _limesdr_swig.source_sptr_unset_max_noutput_items(self)
+
+
+ def is_set_max_noutput_items(self):
+ """is_set_max_noutput_items(source_sptr self) -> bool"""
+ return _limesdr_swig.source_sptr_is_set_max_noutput_items(self)
+
+
+ def set_min_noutput_items(self, m):
+ """set_min_noutput_items(source_sptr self, int m)"""
+ return _limesdr_swig.source_sptr_set_min_noutput_items(self, m)
+
+
+ def min_noutput_items(self):
+ """min_noutput_items(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_min_noutput_items(self)
+
+
+ def max_output_buffer(self, i):
+ """max_output_buffer(source_sptr self, int i) -> long"""
+ return _limesdr_swig.source_sptr_max_output_buffer(self, i)
+
+
+ def set_max_output_buffer(self, *args):
+ """
+ set_max_output_buffer(source_sptr self, long max_output_buffer)
+ set_max_output_buffer(source_sptr self, int port, long max_output_buffer)
+ """
+ return _limesdr_swig.source_sptr_set_max_output_buffer(self, *args)
+
+
+ def min_output_buffer(self, i):
+ """min_output_buffer(source_sptr self, int i) -> long"""
+ return _limesdr_swig.source_sptr_min_output_buffer(self, i)
+
+
+ def set_min_output_buffer(self, *args):
+ """
+ set_min_output_buffer(source_sptr self, long min_output_buffer)
+ set_min_output_buffer(source_sptr self, int port, long min_output_buffer)
+ """
+ return _limesdr_swig.source_sptr_set_min_output_buffer(self, *args)
+
+
+ def pc_noutput_items(self):
+ """pc_noutput_items(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_noutput_items(self)
+
+
+ def pc_noutput_items_avg(self):
+ """pc_noutput_items_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_noutput_items_avg(self)
+
+
+ def pc_noutput_items_var(self):
+ """pc_noutput_items_var(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_noutput_items_var(self)
+
+
+ def pc_nproduced(self):
+ """pc_nproduced(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_nproduced(self)
+
+
+ def pc_nproduced_avg(self):
+ """pc_nproduced_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_nproduced_avg(self)
+
+
+ def pc_nproduced_var(self):
+ """pc_nproduced_var(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_nproduced_var(self)
+
+
+ def pc_input_buffers_full(self, *args):
+ """
+ pc_input_buffers_full(source_sptr self, int which) -> float
+ pc_input_buffers_full(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_input_buffers_full(self, *args)
+
+
+ def pc_input_buffers_full_avg(self, *args):
+ """
+ pc_input_buffers_full_avg(source_sptr self, int which) -> float
+ pc_input_buffers_full_avg(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_input_buffers_full_avg(self, *args)
+
+
+ def pc_input_buffers_full_var(self, *args):
+ """
+ pc_input_buffers_full_var(source_sptr self, int which) -> float
+ pc_input_buffers_full_var(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_input_buffers_full_var(self, *args)
+
+
+ def pc_output_buffers_full(self, *args):
+ """
+ pc_output_buffers_full(source_sptr self, int which) -> float
+ pc_output_buffers_full(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_output_buffers_full(self, *args)
+
+
+ def pc_output_buffers_full_avg(self, *args):
+ """
+ pc_output_buffers_full_avg(source_sptr self, int which) -> float
+ pc_output_buffers_full_avg(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_output_buffers_full_avg(self, *args)
+
+
+ def pc_output_buffers_full_var(self, *args):
+ """
+ pc_output_buffers_full_var(source_sptr self, int which) -> float
+ pc_output_buffers_full_var(source_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.source_sptr_pc_output_buffers_full_var(self, *args)
+
+
+ def pc_work_time(self):
+ """pc_work_time(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time(self)
+
+
+ def pc_work_time_avg(self):
+ """pc_work_time_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time_avg(self)
+
+
+ def pc_work_time_var(self):
+ """pc_work_time_var(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time_var(self)
+
+
+ def pc_work_time_total(self):
+ """pc_work_time_total(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_work_time_total(self)
+
+
+ def pc_throughput_avg(self):
+ """pc_throughput_avg(source_sptr self) -> float"""
+ return _limesdr_swig.source_sptr_pc_throughput_avg(self)
+
+
+ def set_processor_affinity(self, mask):
+ """set_processor_affinity(source_sptr self, std::vector< int,std::allocator< int > > const & mask)"""
+ return _limesdr_swig.source_sptr_set_processor_affinity(self, mask)
+
+
+ def unset_processor_affinity(self):
+ """unset_processor_affinity(source_sptr self)"""
+ return _limesdr_swig.source_sptr_unset_processor_affinity(self)
+
+
+ def processor_affinity(self):
+ """processor_affinity(source_sptr self) -> std::vector< int,std::allocator< int > >"""
+ return _limesdr_swig.source_sptr_processor_affinity(self)
+
+
+ def active_thread_priority(self):
+ """active_thread_priority(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_active_thread_priority(self)
+
+
+ def thread_priority(self):
+ """thread_priority(source_sptr self) -> int"""
+ return _limesdr_swig.source_sptr_thread_priority(self)
+
+
+ def set_thread_priority(self, priority):
+ """set_thread_priority(source_sptr self, int priority) -> int"""
+ return _limesdr_swig.source_sptr_set_thread_priority(self, priority)
+
+
+ def name(self):
+ """name(source_sptr self) -> std::string"""
+ return _limesdr_swig.source_sptr_name(self)
+
+
+ def symbol_name(self):
+ """symbol_name(source_sptr self) -> std::string"""
+ return _limesdr_swig.source_sptr_symbol_name(self)
+
+
+ def input_signature(self):
+ """input_signature(source_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.source_sptr_input_signature(self)
+
+
+ def output_signature(self):
+ """output_signature(source_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.source_sptr_output_signature(self)
+
+
+ def unique_id(self):
+ """unique_id(source_sptr self) -> long"""
+ return _limesdr_swig.source_sptr_unique_id(self)
+
+
+ def to_basic_block(self):
+ """to_basic_block(source_sptr self) -> basic_block_sptr"""
+ return _limesdr_swig.source_sptr_to_basic_block(self)
+
+
+ def check_topology(self, ninputs, noutputs):
+ """check_topology(source_sptr self, int ninputs, int noutputs) -> bool"""
+ return _limesdr_swig.source_sptr_check_topology(self, ninputs, noutputs)
+
+
+ def alias(self):
+ """alias(source_sptr self) -> std::string"""
+ return _limesdr_swig.source_sptr_alias(self)
+
+
+ def set_block_alias(self, name):
+ """set_block_alias(source_sptr self, std::string name)"""
+ return _limesdr_swig.source_sptr_set_block_alias(self, name)
+
+
+ def _post(self, which_port, msg):
+ """_post(source_sptr self, swig_int_ptr which_port, swig_int_ptr msg)"""
+ return _limesdr_swig.source_sptr__post(self, which_port, msg)
+
+
+ def message_ports_in(self):
+ """message_ports_in(source_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.source_sptr_message_ports_in(self)
+
+
+ def message_ports_out(self):
+ """message_ports_out(source_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.source_sptr_message_ports_out(self)
+
+
+ def message_subscribers(self, which_port):
+ """message_subscribers(source_sptr self, swig_int_ptr which_port) -> swig_int_ptr"""
+ return _limesdr_swig.source_sptr_message_subscribers(self, which_port)
+
+source_sptr_swigregister = _limesdr_swig.source_sptr_swigregister
+source_sptr_swigregister(source_sptr)
+
+
+source_sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id())
+source = source.make;
+
+class sink(object):
+ """Proxy of C++ gr::limesdr::sink class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+
+ def __init__(self, *args, **kwargs):
+ raise AttributeError("No constructor defined - class is abstract")
+ __repr__ = _swig_repr
+
+ def make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int pa_path_mini, int pa_path_ch0, int pa_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> sink_sptr"""
+ return _limesdr_swig.sink_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+ make = staticmethod(make)
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(sink self, float rf_freq)"""
+ return _limesdr_swig.sink_set_rf_freq(self, rf_freq)
+
+
+ def set_pa_path(self, pa_path, channel):
+ """set_pa_path(sink self, int pa_path, int channel)"""
+ return _limesdr_swig.sink_set_pa_path(self, pa_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(sink self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.sink_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(sink self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.sink_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(sink self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.sink_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(sink self, int gain_dB, int channel)"""
+ return _limesdr_swig.sink_set_gain(self, gain_dB, channel)
+
+ __swig_destroy__ = _limesdr_swig.delete_sink
+ __del__ = lambda self: None
+sink_swigregister = _limesdr_swig.sink_swigregister
+sink_swigregister(sink)
+
+def sink_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """sink_make(std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int pa_path_mini, int pa_path_ch0, int pa_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> sink_sptr"""
+ return _limesdr_swig.sink_make(serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+class sink_sptr(object):
+ """Proxy of C++ boost::shared_ptr<(gr::limesdr::sink)> class."""
+
+ thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag')
+ __repr__ = _swig_repr
+
+ def __init__(self, *args):
+ """
+ __init__(boost::shared_ptr<(gr::limesdr::sink)> self) -> sink_sptr
+ __init__(boost::shared_ptr<(gr::limesdr::sink)> self, sink p) -> sink_sptr
+ """
+ this = _limesdr_swig.new_sink_sptr(*args)
+ try:
+ self.this.append(this)
+ except __builtin__.Exception:
+ self.this = this
+
+ def __deref__(self):
+ """__deref__(sink_sptr self) -> sink"""
+ return _limesdr_swig.sink_sptr___deref__(self)
+
+ __swig_destroy__ = _limesdr_swig.delete_sink_sptr
+ __del__ = lambda self: None
+
+ def make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1):
+ """make(sink_sptr self, std::string serial, int device_type, int chip_mode, int channel, int file_switch, char const * filename, double rf_freq, double samp_rate, size_t oversample, int calibration_ch0, double calibr_bandw_ch0, int calibration_ch1, double calibr_bandw_ch1, int pa_path_mini, int pa_path_ch0, int pa_path_ch1, int analog_filter_ch0, double analog_bandw_ch0, int analog_filter_ch1, double analog_bandw_ch1, int digital_filter_ch0, double digital_bandw_ch0, int digital_filter_ch1, double digital_bandw_ch1, int gain_dB_ch0, int gain_dB_ch1, float nco_freq_ch0, float nco_freq_ch1, int cmix_mode_ch0, int cmix_mode_ch1) -> sink_sptr"""
+ return _limesdr_swig.sink_sptr_make(self, serial, device_type, chip_mode, channel, file_switch, filename, rf_freq, samp_rate, oversample, calibration_ch0, calibr_bandw_ch0, calibration_ch1, calibr_bandw_ch1, pa_path_mini, pa_path_ch0, pa_path_ch1, analog_filter_ch0, analog_bandw_ch0, analog_filter_ch1, analog_bandw_ch1, digital_filter_ch0, digital_bandw_ch0, digital_filter_ch1, digital_bandw_ch1, gain_dB_ch0, gain_dB_ch1, nco_freq_ch0, nco_freq_ch1, cmix_mode_ch0, cmix_mode_ch1)
+
+
+ def set_rf_freq(self, rf_freq):
+ """set_rf_freq(sink_sptr self, float rf_freq)"""
+ return _limesdr_swig.sink_sptr_set_rf_freq(self, rf_freq)
+
+
+ def set_pa_path(self, pa_path, channel):
+ """set_pa_path(sink_sptr self, int pa_path, int channel)"""
+ return _limesdr_swig.sink_sptr_set_pa_path(self, pa_path, channel)
+
+
+ def set_nco(self, nco_freq, cmix_mode, channel):
+ """set_nco(sink_sptr self, float nco_freq, int cmix_mode, int channel)"""
+ return _limesdr_swig.sink_sptr_set_nco(self, nco_freq, cmix_mode, channel)
+
+
+ def set_analog_filter(self, analog_filter, analog_bandw, channel):
+ """set_analog_filter(sink_sptr self, int analog_filter, float analog_bandw, int channel)"""
+ return _limesdr_swig.sink_sptr_set_analog_filter(self, analog_filter, analog_bandw, channel)
+
+
+ def set_digital_filter(self, digital_filter, digital_bandw, channel):
+ """set_digital_filter(sink_sptr self, int digital_filter, float digital_bandw, int channel)"""
+ return _limesdr_swig.sink_sptr_set_digital_filter(self, digital_filter, digital_bandw, channel)
+
+
+ def set_gain(self, gain_dB, channel):
+ """set_gain(sink_sptr self, int gain_dB, int channel)"""
+ return _limesdr_swig.sink_sptr_set_gain(self, gain_dB, channel)
+
+
+ def history(self):
+ """history(sink_sptr self) -> unsigned int"""
+ return _limesdr_swig.sink_sptr_history(self)
+
+
+ def declare_sample_delay(self, *args):
+ """
+ declare_sample_delay(sink_sptr self, int which, int delay)
+ declare_sample_delay(sink_sptr self, unsigned int delay)
+ """
+ return _limesdr_swig.sink_sptr_declare_sample_delay(self, *args)
+
+
+ def sample_delay(self, which):
+ """sample_delay(sink_sptr self, int which) -> unsigned int"""
+ return _limesdr_swig.sink_sptr_sample_delay(self, which)
+
+
+ def output_multiple(self):
+ """output_multiple(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_output_multiple(self)
+
+
+ def relative_rate(self):
+ """relative_rate(sink_sptr self) -> double"""
+ return _limesdr_swig.sink_sptr_relative_rate(self)
+
+
+ def start(self):
+ """start(sink_sptr self) -> bool"""
+ return _limesdr_swig.sink_sptr_start(self)
+
+
+ def stop(self):
+ """stop(sink_sptr self) -> bool"""
+ return _limesdr_swig.sink_sptr_stop(self)
+
+
+ def nitems_read(self, which_input):
+ """nitems_read(sink_sptr self, unsigned int which_input) -> uint64_t"""
+ return _limesdr_swig.sink_sptr_nitems_read(self, which_input)
+
+
+ def nitems_written(self, which_output):
+ """nitems_written(sink_sptr self, unsigned int which_output) -> uint64_t"""
+ return _limesdr_swig.sink_sptr_nitems_written(self, which_output)
+
+
+ def max_noutput_items(self):
+ """max_noutput_items(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_max_noutput_items(self)
+
+
+ def set_max_noutput_items(self, m):
+ """set_max_noutput_items(sink_sptr self, int m)"""
+ return _limesdr_swig.sink_sptr_set_max_noutput_items(self, m)
+
+
+ def unset_max_noutput_items(self):
+ """unset_max_noutput_items(sink_sptr self)"""
+ return _limesdr_swig.sink_sptr_unset_max_noutput_items(self)
+
+
+ def is_set_max_noutput_items(self):
+ """is_set_max_noutput_items(sink_sptr self) -> bool"""
+ return _limesdr_swig.sink_sptr_is_set_max_noutput_items(self)
+
+
+ def set_min_noutput_items(self, m):
+ """set_min_noutput_items(sink_sptr self, int m)"""
+ return _limesdr_swig.sink_sptr_set_min_noutput_items(self, m)
+
+
+ def min_noutput_items(self):
+ """min_noutput_items(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_min_noutput_items(self)
+
+
+ def max_output_buffer(self, i):
+ """max_output_buffer(sink_sptr self, int i) -> long"""
+ return _limesdr_swig.sink_sptr_max_output_buffer(self, i)
+
+
+ def set_max_output_buffer(self, *args):
+ """
+ set_max_output_buffer(sink_sptr self, long max_output_buffer)
+ set_max_output_buffer(sink_sptr self, int port, long max_output_buffer)
+ """
+ return _limesdr_swig.sink_sptr_set_max_output_buffer(self, *args)
+
+
+ def min_output_buffer(self, i):
+ """min_output_buffer(sink_sptr self, int i) -> long"""
+ return _limesdr_swig.sink_sptr_min_output_buffer(self, i)
+
+
+ def set_min_output_buffer(self, *args):
+ """
+ set_min_output_buffer(sink_sptr self, long min_output_buffer)
+ set_min_output_buffer(sink_sptr self, int port, long min_output_buffer)
+ """
+ return _limesdr_swig.sink_sptr_set_min_output_buffer(self, *args)
+
+
+ def pc_noutput_items(self):
+ """pc_noutput_items(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_noutput_items(self)
+
+
+ def pc_noutput_items_avg(self):
+ """pc_noutput_items_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_noutput_items_avg(self)
+
+
+ def pc_noutput_items_var(self):
+ """pc_noutput_items_var(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_noutput_items_var(self)
+
+
+ def pc_nproduced(self):
+ """pc_nproduced(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_nproduced(self)
+
+
+ def pc_nproduced_avg(self):
+ """pc_nproduced_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_nproduced_avg(self)
+
+
+ def pc_nproduced_var(self):
+ """pc_nproduced_var(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_nproduced_var(self)
+
+
+ def pc_input_buffers_full(self, *args):
+ """
+ pc_input_buffers_full(sink_sptr self, int which) -> float
+ pc_input_buffers_full(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_input_buffers_full(self, *args)
+
+
+ def pc_input_buffers_full_avg(self, *args):
+ """
+ pc_input_buffers_full_avg(sink_sptr self, int which) -> float
+ pc_input_buffers_full_avg(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_input_buffers_full_avg(self, *args)
+
+
+ def pc_input_buffers_full_var(self, *args):
+ """
+ pc_input_buffers_full_var(sink_sptr self, int which) -> float
+ pc_input_buffers_full_var(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_input_buffers_full_var(self, *args)
+
+
+ def pc_output_buffers_full(self, *args):
+ """
+ pc_output_buffers_full(sink_sptr self, int which) -> float
+ pc_output_buffers_full(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_output_buffers_full(self, *args)
+
+
+ def pc_output_buffers_full_avg(self, *args):
+ """
+ pc_output_buffers_full_avg(sink_sptr self, int which) -> float
+ pc_output_buffers_full_avg(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_output_buffers_full_avg(self, *args)
+
+
+ def pc_output_buffers_full_var(self, *args):
+ """
+ pc_output_buffers_full_var(sink_sptr self, int which) -> float
+ pc_output_buffers_full_var(sink_sptr self) -> pmt_vector_float
+ """
+ return _limesdr_swig.sink_sptr_pc_output_buffers_full_var(self, *args)
+
+
+ def pc_work_time(self):
+ """pc_work_time(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time(self)
+
+
+ def pc_work_time_avg(self):
+ """pc_work_time_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time_avg(self)
+
+
+ def pc_work_time_var(self):
+ """pc_work_time_var(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time_var(self)
+
+
+ def pc_work_time_total(self):
+ """pc_work_time_total(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_work_time_total(self)
+
+
+ def pc_throughput_avg(self):
+ """pc_throughput_avg(sink_sptr self) -> float"""
+ return _limesdr_swig.sink_sptr_pc_throughput_avg(self)
+
+
+ def set_processor_affinity(self, mask):
+ """set_processor_affinity(sink_sptr self, std::vector< int,std::allocator< int > > const & mask)"""
+ return _limesdr_swig.sink_sptr_set_processor_affinity(self, mask)
+
+
+ def unset_processor_affinity(self):
+ """unset_processor_affinity(sink_sptr self)"""
+ return _limesdr_swig.sink_sptr_unset_processor_affinity(self)
+
+
+ def processor_affinity(self):
+ """processor_affinity(sink_sptr self) -> std::vector< int,std::allocator< int > >"""
+ return _limesdr_swig.sink_sptr_processor_affinity(self)
+
+
+ def active_thread_priority(self):
+ """active_thread_priority(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_active_thread_priority(self)
+
+
+ def thread_priority(self):
+ """thread_priority(sink_sptr self) -> int"""
+ return _limesdr_swig.sink_sptr_thread_priority(self)
+
+
+ def set_thread_priority(self, priority):
+ """set_thread_priority(sink_sptr self, int priority) -> int"""
+ return _limesdr_swig.sink_sptr_set_thread_priority(self, priority)
+
+
+ def name(self):
+ """name(sink_sptr self) -> std::string"""
+ return _limesdr_swig.sink_sptr_name(self)
+
+
+ def symbol_name(self):
+ """symbol_name(sink_sptr self) -> std::string"""
+ return _limesdr_swig.sink_sptr_symbol_name(self)
+
+
+ def input_signature(self):
+ """input_signature(sink_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.sink_sptr_input_signature(self)
+
+
+ def output_signature(self):
+ """output_signature(sink_sptr self) -> io_signature_sptr"""
+ return _limesdr_swig.sink_sptr_output_signature(self)
+
+
+ def unique_id(self):
+ """unique_id(sink_sptr self) -> long"""
+ return _limesdr_swig.sink_sptr_unique_id(self)
+
+
+ def to_basic_block(self):
+ """to_basic_block(sink_sptr self) -> basic_block_sptr"""
+ return _limesdr_swig.sink_sptr_to_basic_block(self)
+
+
+ def check_topology(self, ninputs, noutputs):
+ """check_topology(sink_sptr self, int ninputs, int noutputs) -> bool"""
+ return _limesdr_swig.sink_sptr_check_topology(self, ninputs, noutputs)
+
+
+ def alias(self):
+ """alias(sink_sptr self) -> std::string"""
+ return _limesdr_swig.sink_sptr_alias(self)
+
+
+ def set_block_alias(self, name):
+ """set_block_alias(sink_sptr self, std::string name)"""
+ return _limesdr_swig.sink_sptr_set_block_alias(self, name)
+
+
+ def _post(self, which_port, msg):
+ """_post(sink_sptr self, swig_int_ptr which_port, swig_int_ptr msg)"""
+ return _limesdr_swig.sink_sptr__post(self, which_port, msg)
+
+
+ def message_ports_in(self):
+ """message_ports_in(sink_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.sink_sptr_message_ports_in(self)
+
+
+ def message_ports_out(self):
+ """message_ports_out(sink_sptr self) -> swig_int_ptr"""
+ return _limesdr_swig.sink_sptr_message_ports_out(self)
+
+
+ def message_subscribers(self, which_port):
+ """message_subscribers(sink_sptr self, swig_int_ptr which_port) -> swig_int_ptr"""
+ return _limesdr_swig.sink_sptr_message_subscribers(self, which_port)
+
+sink_sptr_swigregister = _limesdr_swig.sink_sptr_swigregister
+sink_sptr_swigregister(sink_sptr)
+
+
+sink_sptr.__repr__ = lambda self: "" % (self.name(), self.unique_id())
+sink = sink.make;
+
+
+
diff --git a/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.pyc b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.pyc
new file mode 100644
index 0000000..23b361b
Binary files /dev/null and b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.pyc differ
diff --git a/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.pyo b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.pyo
new file mode 100644
index 0000000..23b361b
Binary files /dev/null and b/windows/Pothos_SDR/lib/python2.7/site-packages/limesdr/limesdr_swig.pyo differ
diff --git a/windows/Pothos_SDR/share/gnuradio/grc/blocks/limesdr_sink.xml b/windows/Pothos_SDR/share/gnuradio/grc/blocks/limesdr_sink.xml
new file mode 100644
index 0000000..f973b70
--- /dev/null
+++ b/windows/Pothos_SDR/share/gnuradio/grc/blocks/limesdr_sink.xml
@@ -0,0 +1,825 @@
+
+
+ LimeSuite Sink (TX)
+ limesdr_sink
+ [LimeSuite]
+ throttle
+ import limesdr
+ limesdr.sink($serial,
+ $device_type,
+ $chip_mode,
+ $channel,
+ $file_switch,
+ $filename,
+ $rf_freq,
+ $samp_rate,
+ $oversample,
+ $calibration_ch0,
+ $calibr_bandw_ch0,
+ $calibration_ch1,
+ $calibr_bandw_ch1,
+ $pa_path_mini,
+ $pa_path_ch0,
+ $pa_path_ch1,
+ $analog_filter_ch0,
+ $analog_bandw_ch0,
+ $analog_filter_ch1,
+ $analog_bandw_ch1,
+ $digital_filter_ch0,
+ $digital_bandw_ch0,
+ $digital_filter_ch1,
+ $digital_bandw_ch1,
+ $gain_dB_ch0,
+ $gain_dB_ch1,
+ $nco_freq_ch0,
+ $nco_freq_ch1,
+ $cmix_mode_ch0,
+ $cmix_mode_ch1)
+
+ set_rf_freq($rf_freq)
+ set_pa_path($pa_path_mini,0)
+ set_pa_path($pa_path_ch0,0)
+ set_pa_path($pa_path_ch1,1)
+ set_nco($nco_freq_ch0,$cmix_mode_ch0,0)
+ set_nco($nco_freq_ch1,$cmix_mode_ch1,1)
+ set_analog_filter($analog_filter_ch0,$analog_bandw_ch0,0)
+ set_analog_filter($analog_filter_ch1,$analog_bandw_ch1,1)
+ set_digital_filter($digital_filter_ch0,$digital_bandw_ch0,0)
+ set_digital_filter($digital_filter_ch1,$digital_bandw_ch1,1)
+ set_gain($gain_dB_ch0,0)
+ set_gain($gain_dB_ch1,1)
+
+
+ General
+ CH0
+ CH1
+
+
+
+ Device serial
+ serial
+
+ string
+ none
+
+
+
+ Device type
+ device_type
+ 2
+ int
+ none
+
+ LimeSDR-Mini
+ 1
+
+
+ LimeSDR-USB
+ 2
+
+
+
+
+ Chip mode
+ chip_mode
+ 1
+ int
+ none
+
+ SISO
+ 1
+
+
+ MIMO
+ 2
+
+
+
+
+ CH0
+ channel
+ 0
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $chip_mode() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ A
+ 0
+
+
+ B
+ 1
+
+
+
+
+ Load settings
+ file_switch
+ 0
+ int
+ none
+
+ NO
+ 0
+
+
+ YES
+ 1
+
+
+
+
+ File
+ filename
+
+ file_open
+
+ #if $file_switch() == 0
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ RF frequency
+ rf_freq
+ 100e6
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Sample rate
+ samp_rate
+ samp_rate
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Oversample
+ oversample
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Default
+ 0
+
+
+ 1
+ 1
+
+
+ 2
+ 2
+
+
+ 4
+ 4
+
+
+ 8
+ 8
+
+
+ 16
+ 16
+
+
+ 32
+ 32
+
+
+
+
+ CH0:NCO frequency
+ nco_freq_ch0
+ 0
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:CMIX mode
+ cmix_mode_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration
+ calibration_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration bandw.
+ calibr_bandw_ch0
+ 10e6
+ float
+
+ #if $calibration_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:PA path
+ pa_path_mini
+ 1
+ int
+
+ #if $device_type() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ Band1
+ 1
+
+
+ Band2
+ 2
+
+ CH0
+
+
+
+ CH0:PA path
+ pa_path_ch0
+ 1
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Band1
+ 1
+
+
+ Band2
+ 2
+
+ CH0
+
+
+
+ CH0:Analog filter
+ analog_filter_ch0
+ 1
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Analog filter bandw.
+ analog_bandw_ch0
+ 5e6
+ float
+
+ #if $analog_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Digital filter
+ digital_filter_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Digital filter bandw.
+ digital_bandw_ch0
+ 0
+ float
+
+ #if $digital_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Gain,dB
+ gain_dB_ch0
+ 30
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH1:NCO frequency
+ nco_freq_ch1
+ 0
+ float
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:CMIX mode
+ cmix_mode_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration
+ calibration_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration bandw.
+ calibr_bandw_ch1
+ 10e6
+ float
+
+ #if $calibration_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:PA path
+ pa_path_ch1
+ 1
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Band1
+ 1
+
+
+ Band2
+ 2
+
+ CH1
+
+
+
+ CH1:Analog filter
+ analog_filter_ch1
+ 1
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Analog filter bandw.
+ analog_bandw_ch1
+ 5e6
+ float
+
+ #if $analog_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Digital filter
+ digital_filter_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Digital filter bandw.
+ digital_bandw_ch1
+ 0
+ float
+
+ #if $digital_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Gain,dB
+ gain_dB_ch1
+ 30
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+ $device_type >= $chip_mode
+ $device_type >= 1
+ 2 >= $device_type
+
+ $chip_mode >= 1
+ 2 >= $chip_mode
+
+ $rf_freq > 0
+
+ $calibr_bandw_ch0 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch0
+
+ $calibr_bandw_ch1 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch1
+
+ $analog_bandw_ch0 >= 5e6
+ 130e6 >= $analog_bandw_ch0
+
+ $analog_bandw_ch1 >= 5e6
+ 130e6 >= $analog_bandw_ch1
+
+ $digital_bandw_ch0 >= 0
+ $samp_rate >= $digital_bandw_ch0
+
+ $digital_bandw_ch1 >= 0
+ $samp_rate >= $digital_bandw_ch1
+
+ $gain_dB_ch0 >= 0
+ 60 >= $gain_dB_ch0
+
+ $gain_dB_ch1 >= 0
+ 60 >= $gain_dB_ch1
+
+ $samp_rate > 0
+ 61.44e6 >= $samp_rate
+
+
+ in
+ complex
+ $chip_mode
+
+
+
+-------------------------------------------------------------------------------------------------------------------
+DEVICE SERIAL
+
+Device serial number obtained by running
+
+ LimeUtil --find
+
+Cannot be left blank.
+-------------------------------------------------------------------------------------------------------------------
+DEVICE TYPE
+
+This setting lets you choose from predefined device type list and loads appropriate settings for the selected device.
+Currently supported device types: LimeSDR-USB, LimeSDR-Mini.
+-------------------------------------------------------------------------------------------------------------------
+CHIP MODE
+
+Use this setting to choose between single-input and single-output (SISO)/multiple-input and multiple-output (MIMO) chip modes.
+
+Note: not all devices support MIMO mode.
+-------------------------------------------------------------------------------------------------------------------
+CH0
+
+When in SISO mode select active channel as CH0.
+
+Note: not all devices have more than one channel.
+-------------------------------------------------------------------------------------------------------------------
+LOAD SETTINGS
+
+Enable loading settings from file.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+FILE
+
+Generate .ini file with LimeSuite and select path.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+CENTER FREQUENCY
+
+Set RF center frequency for TX (both channels).
+LimeSDR-USB supports [100e3,3800e6] Hz.
+LimeSDR-Mini supports [10e6,3800e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+SAMPLE RATE
+
+Here you can select sample rate for TX.
+
+LimeSDR-USB sample rate must be no more than 61.44e6 S/s.
+LimeSDR-Mini sample rate must be no more than 30.72e6 S/s.
+
+Note: LimeSDR-Mini supports only the same sample rate for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+OVERSAMPLE
+
+Here you can select oversampling value for TX. Default value uses highest possible oversampling value.
+
+Note: LimeSDR-Mini supports only the same oversampling value for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+NCO FREQUENCY
+
+Adjust numerically controlled oscillator for each channel. 0 means that NCO is OFF.
+-------------------------------------------------------------------------------------------------------------------
+CMIX MODE
+
+Controls NCO direction for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION
+
+Turn DC offset and IQ imbalance calibration ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION BANDW.
+
+When calibration is turned ON this setting is used to set bandwidth for calibration for each channel. This value should be equal to your signal bandwidth.
+
+Calibration bandwidth range must be [2.5e6,120e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+PA PATH
+
+Select active power amplifier path of each channel.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER
+
+Turn low-pass filter ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER BANDW.
+
+Enter analog filter bandwidth for each channel.
+Analog filter bandwidth range must be [5e6,130e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER
+
+Turn digital filters (GFIR) ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER BANDW.
+
+Enter digital filter bandwidth for each channel. Bandwidth should not be higher than sample rate.
+-------------------------------------------------------------------------------------------------------------------
+GAIN
+
+Controls combined TX gain settings. Gain range must be [0,60] dB.
+-------------------------------------------------------------------------------------------------------------------
+
+
diff --git a/windows/Pothos_SDR/share/gnuradio/grc/blocks/limesdr_source.xml b/windows/Pothos_SDR/share/gnuradio/grc/blocks/limesdr_source.xml
new file mode 100644
index 0000000..3e436cc
--- /dev/null
+++ b/windows/Pothos_SDR/share/gnuradio/grc/blocks/limesdr_source.xml
@@ -0,0 +1,833 @@
+
+
+ LimeSuite Source (RX)
+ limesdr_source
+ [LimeSuite]
+ throttle
+ import limesdr
+ limesdr.source($serial,
+ $device_type,
+ $chip_mode,
+ $channel,
+ $file_switch,
+ $filename,
+ $rf_freq,
+ $samp_rate,
+ $oversample,
+ $calibration_ch0,
+ $calibr_bandw_ch0,
+ $calibration_ch1,
+ $calibr_bandw_ch1,
+ $lna_path_mini,
+ $lna_path_ch0,
+ $lna_path_ch1,
+ $analog_filter_ch0,
+ $analog_bandw_ch0,
+ $analog_filter_ch1,
+ $analog_bandw_ch1,
+ $digital_filter_ch0,
+ $digital_bandw_ch0,
+ $digital_filter_ch1,
+ $digital_bandw_ch1,
+ $gain_dB_ch0,
+ $gain_dB_ch1,
+ $nco_freq_ch0,
+ $nco_freq_ch1,
+ $cmix_mode_ch0,
+ $cmix_mode_ch1)
+
+ set_rf_freq($rf_freq)
+ set_lna_path($lna_path_mini,0)
+ set_lna_path($lna_path_ch0,0)
+ set_lna_path($lna_path_ch1,1)
+ set_nco($nco_freq_ch0,$cmix_mode_ch0,0)
+ set_nco($nco_freq_ch1,$cmix_mode_ch1,1)
+ set_analog_filter($analog_filter_ch0,$analog_bandw_ch0,0)
+ set_analog_filter($analog_filter_ch1,$analog_bandw_ch1,1)
+ set_digital_filter($digital_filter_ch0,$digital_bandw_ch0,0)
+ set_digital_filter($digital_filter_ch1,$digital_bandw_ch1,1)
+ set_gain($gain_dB_ch0,0)
+ set_gain($gain_dB_ch1,1)
+
+
+ General
+ CH0
+ CH1
+
+
+
+ Device serial
+ serial
+
+ string
+ none
+
+
+
+ Device type
+ device_type
+ 2
+ int
+ none
+
+ LimeSDR-Mini
+ 1
+
+
+ LimeSDR-USB
+ 2
+
+
+
+
+ Chip mode
+ chip_mode
+ 1
+ int
+ none
+
+ SISO
+ 1
+
+
+ MIMO
+ 2
+
+
+
+
+ CH0
+ channel
+ 0
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $chip_mode() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ A
+ 0
+
+
+ B
+ 1
+
+
+
+
+ Load settings
+ file_switch
+ 0
+ int
+ none
+
+ NO
+ 0
+
+
+ YES
+ 1
+
+
+
+
+ File
+ filename
+
+ file_open
+
+ #if $file_switch() == 0
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ RF frequency
+ rf_freq
+ 100e6
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Sample rate
+ samp_rate
+ samp_rate
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+
+
+ Oversample
+ oversample
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ Default
+ 0
+
+
+ 1
+ 1
+
+
+ 2
+ 2
+
+
+ 4
+ 4
+
+
+ 8
+ 8
+
+
+ 16
+ 16
+
+
+ 32
+ 32
+
+
+
+
+ CH0:NCO frequency
+ nco_freq_ch0
+ 0
+ float
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:CMIX mode
+ cmix_mode_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration
+ calibration_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Calibration bandw.
+ calibr_bandw_ch0
+ 10e6
+ float
+
+ #if $calibration_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:LNA path
+ lna_path_mini
+ 3
+ int
+
+ #if $device_type() == 2
+ all
+ #else
+ none
+ #end if
+
+
+ H
+ 1
+
+
+ W
+ 3
+
+ CH0
+
+
+
+ CH0:LNA path
+ lna_path_ch0
+ 2
+ int
+
+ #if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ H
+ 1
+
+
+ L
+ 2
+
+
+ W
+ 3
+
+ CH0
+
+
+
+ CH0:Analog filter
+ analog_filter_ch0
+ 1
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Analog filter bandw.
+ analog_bandw_ch0
+ 5e6
+ float
+
+ #if $analog_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Digital filter
+ digital_filter_ch0
+ 0
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH0
+
+
+
+ CH0:Digital filter bandw.
+ digital_bandw_ch0
+ 0
+ float
+
+ #if $digital_filter_ch0() == 0
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH0:Gain,dB
+ gain_dB_ch0
+ 30
+ int
+
+ #if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH0
+
+
+
+ CH1:NCO frequency
+ nco_freq_ch1
+ 0
+ float
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:CMIX mode
+ cmix_mode_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ UPCONVERT
+ 0
+
+
+ DOWNCONVERT
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration
+ calibration_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Calibration bandw.
+ calibr_bandw_ch1
+ 10e6
+ float
+
+ #if $calibration_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:LNA path
+ lna_path_ch1
+ 2
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ H
+ 1
+
+
+ L
+ 2
+
+
+ W
+ 3
+
+ CH1
+
+
+
+ CH1:Analog filter
+ analog_filter_ch1
+ 1
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Analog filter bandw.
+ analog_bandw_ch1
+ 5e6
+ float
+
+ #if $analog_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Digital filter
+ digital_filter_ch1
+ 0
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+
+ OFF
+ 0
+
+
+ ON
+ 1
+
+ CH1
+
+
+
+ CH1:Digital filter bandw.
+ digital_bandw_ch1
+ 0
+ float
+
+ #if $digital_filter_ch1() == 0
+ all
+ #else if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+
+ CH1:Gain,dB
+ gain_dB_ch1
+ 30
+ int
+
+ #if $chip_mode() == 1
+ all
+ #else if $device_type() == 1
+ all
+ #else if $file_switch() == 1
+ all
+ #else
+ none
+ #end if
+
+ CH1
+
+
+ $device_type >= $chip_mode
+ $device_type >= 1
+ 2 >= $device_type
+
+ $chip_mode >= 1
+ 2 >= $chip_mode
+
+ $rf_freq > 0
+
+ $calibr_bandw_ch0 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch0
+
+ $calibr_bandw_ch1 >= 2.5e6
+ 120e6 >= $calibr_bandw_ch1
+
+ $analog_bandw_ch0 >= 1.5e6
+ 130e6 >= $analog_bandw_ch0
+
+ $analog_bandw_ch1 >= 1.5e6
+ 130e6 >= $analog_bandw_ch1
+
+ $digital_bandw_ch0 >= 0
+ $samp_rate >= $digital_bandw_ch0
+
+ $digital_bandw_ch1 >= 0
+ $samp_rate >= $digital_bandw_ch1
+
+ $gain_dB_ch0 >= 0
+ 70 >= $gain_dB_ch0
+
+ $gain_dB_ch1 >= 0
+ 70 >= $gain_dB_ch1
+
+ $samp_rate > 0
+ 61.44e6 >= $samp_rate
+
+
+ out
+ complex
+ $chip_mode
+
+
+
+-------------------------------------------------------------------------------------------------------------------
+DEVICE SERIAL
+
+Device serial number obtained by running
+
+ LimeUtil --find
+
+Cannot be left blank.
+-------------------------------------------------------------------------------------------------------------------
+DEVICE TYPE
+
+This setting lets you choose from predefined device type list and loads appropriate settings for the selected device.
+Currently supported device types: LimeSDR-USB, LimeSDR-Mini.
+-------------------------------------------------------------------------------------------------------------------
+CHIP MODE
+
+Use this setting to choose between single-input and single-output (SISO)/multiple-input and multiple-output (MIMO) chip modes.
+
+Note: not all devices support MIMO mode.
+-------------------------------------------------------------------------------------------------------------------
+CH0
+
+When in SISO mode select active channel as CH0.
+
+Note: not all devices have more than one channel.
+-------------------------------------------------------------------------------------------------------------------
+LOAD SETTINGS
+
+Enable loading settings from file.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+FILE
+
+Generate .ini file with LimeSuite and select path.
+
+Note: setting must match in LimeSuite Source and Sink for the same device.
+-------------------------------------------------------------------------------------------------------------------
+RF FREQUENCY
+
+Set RF center frequency for RX (both channels).
+LimeSDR-USB supports [100e3,3800e6] Hz.
+LimeSDR-Mini supports [10e6,3800e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+SAMPLE RATE
+
+Here you can select sample rate for RX.
+
+LimeSDR-USB sample rate must be no more than 61.44e6 S/s.
+LimeSDR-Mini sample rate must be no more than 30.72e6 S/s.
+
+Note: LimeSDR-Mini supports only the same sample rate for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+OVERSAMPLE
+
+Here you can select oversampling value for RX. Default value uses highest possible oversampling value.
+
+Note: LimeSDR-Mini supports only the same oversampling value for TX and RX.
+-------------------------------------------------------------------------------------------------------------------
+NCO FREQUENCY
+
+Adjust numerically controlled oscillator for each channel. 0 means that NCO is OFF.
+-------------------------------------------------------------------------------------------------------------------
+CMIX MODE
+
+Controls NCO direction for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION
+
+Turn DC offset and IQ imbalance calibration ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+CALIBRATION BANDW.
+
+When calibration is turned ON this setting is used to set bandwidth for calibration for each channel. This value should be equal to your signal bandwidth.
+
+Calibration bandwidth range must be [2.5e6,120e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+LNA PATH
+
+Select active low-noise amplifier path of each channel.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER
+
+Turn low-pass filter ON/OFF for each channel. When OFF device uses default values.
+-------------------------------------------------------------------------------------------------------------------
+ANALOG FILTER BANDW.
+
+Enter analog filter bandwidth for each channel.
+Analog filter bandwidth range must be [1.5e6,130e6] Hz.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER
+
+Turn digital filters (GFIR) ON/OFF for each channel.
+-------------------------------------------------------------------------------------------------------------------
+DIGITAL FILTER BANDW.
+
+Enter digital filter bandwidth for each channel. Bandwidth should not be higher than sample rate.
+-------------------------------------------------------------------------------------------------------------------
+GAIN
+
+Controls combined RX gain settings. Gain range must be [0,70] dB.
+-------------------------------------------------------------------------------------------------------------------
+
+