pythonwebserverusrp

RuntimeError: LookupError: KeyError: No devices found for ----->Device Address: b200


I got this error when I tried to run my gnuradio python program through Flask webserver. I am getting this error when I added my USRP b200 lines of code into my original "working/healthy" code. In this program I am trying to control the variables of my code through slider widgets in my Flask webserver.

Again, the USRP that I am using works just fine whenever I I run any app in my GnuRadio software itself. But when I try it through Flask it runs for a second or 2 then crashes.

Any assistance would be highly appreciated.

error Traceback:

linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown

[top_block_22] __init__: sample_rate: 0
[top_block_22] __init__: amplitude: 0
[top_block_22] __init__: frequency: 0
[top_block_22] __init__: bandwidth: 0
[top_block_22] __init__: USRPsamp_rate: 0
[top_block_22] __init__: gain: 0
[top_block_22] __init__: center_frequency: 0
-- Detected Device: B200mini
-- Operating over USB 3.
-- Initialize CODEC control...
-- Initialize Radio control...
-- Performing register loopback test... pass
-- Performing CODEC loopback test... pass
-- Setting master clock rate selection to 'automatic'.
-- Asking for clock rate 16.000000 MHz... 
-- Actually got clock rate 16.000000 MHz.
-- Performing timer loopback test... pass
gr::log :INFO: audio source - Audio sink arch: alsa

UHD Warning:
    The hardware does not support the requested TX sample rate:
    Target sample rate: 0.000000 MSps
    Actual sample rate: 0.031250 MSps
-- Asking for clock rate 32.000000 MHz... 
-- Actually got clock rate 32.000000 MHz.
-- Performing timer loopback test... pass
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU * Serving Flask app "app" (lazy loading)
U * Environment: production
UU   WARNING: This is a development server. Do not use it in a production deployment.
UU   Use a production WSGI server instead.
UU * Debug mode: on
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
UUUU * Restarting with stat
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUlinux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown

UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU[top_block_22] __init__: sample_rate: 0
[top_block_22] __init__: amplitude: 0
[top_block_22] __init__: frequency: 0
[top_block_22] __init__: bandwidth: 0
[top_block_22] __init__: USRPsamp_rate: 0
[top_block_22] __init__: gain: 0
[top_block_22] __init__: center_frequency: 0
Traceback (most recent call last):
  File "/home/fit-pc/my_flask_app/virtualenv/Slider/app.py", line 175, in <module>
    tb = top_block_22(0, 0, 0, 0, 0, 0, 0)
  File "/home/fit-pc/my_flask_app/virtualenv/Slider/app.py", line 48, in __init__
    channels=range(1),
  File "/usr/lib/python2.7/dist-packages/gnuradio/uhd/__init__.py", line 122, in constructor_interceptor
    return old_constructor(*args)
  File "/usr/lib/python2.7/dist-packages/gnuradio/uhd/uhd_swig.py", line 3012, in make
    return _uhd_swig.usrp_sink_make(*args)
RuntimeError: LookupError: KeyError: No devices found for ----->
Device Address:
    b200: 

[Finished in 85.7s with exit code 1]
[shell_cmd: python -u "/home/fit-pc/my_flask_app/virtualenv/Slider/app.py"]
[dir: /home/fit-pc/my_flask_app/virtualenv/Slider]
[path: /home/fit-pc/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]

app.py code:

from __future__ import print_function
from gnuradio import analog
from gnuradio import audio
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from optparse import OptionParser
from gnuradio import uhd
import time

class top_block_22(gr.top_block): # PEP8: CamelCaseName for classes

    def __init__(self, sample_rate=0, amplitude=0, frequency=0, bandwidth=0, gain=0, center_frequency=0, USRPsamp_rate=0):

        gr.top_block.__init__(self, "Top Block 22")
        ##################################################
        # Variables
        ##################################################
        self.sample_rate = sample_rate
        print('[top_block_22] __init__: sample_rate:', self.sample_rate)

        self.amplitude = amplitude
        print('[top_block_22] __init__: amplitude:', self.amplitude)

        self.frequency = frequency
        print('[top_block_22] __init__: frequency:', self.frequency)

        self.bandwidth = bandwidth
        print('[top_block_22] __init__: bandwidth:', self.bandwidth)

        self.USRPsamp_rate = USRPsamp_rate
        print('[top_block_22] __init__: USRPsamp_rate:', self.USRPsamp_rate)

        self.gain = gain
        print('[top_block_22] __init__: gain:', self.gain)

        self.center_frequency = center_frequency
        print('[top_block_22] __init__: center_frequency:', self.center_frequency)
        ##################################################
        # Blocks
        ##################################################
        self.uhd_usrp_sink_0 = uhd.usrp_sink(
          ",".join(("b200", "")),
          uhd.stream_args(
            cpu_format="sc16",
            channels=range(1),
          ),
        )
        # for mute_on, mute_off
        #self.old_sample_rate = self.sample_rate
        #self.old_ampliture = self.ampliture
        #self.old_frequency = self.frequency
        #self.old_bandwidth = self.bandwidth
        ##################################################
        # Blocks
        ##################################################
        self.blocks_add_xx = blocks.add_vff(1)
        self.audio_sink = audio.sink(32000, '', True)
        self.analog_sig_source_x_0 = analog.sig_source_f(sample_rate, analog.GR_COS_WAVE, frequency, amplitude, 0)
        self.analog_noise_source_x_0 = analog.noise_source_f(analog.GR_GAUSSIAN,  amplitude, -42)
        self.uhd_usrp_sink_0.set_samp_rate(USRPsamp_rate)
        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
        self.uhd_usrp_sink_0.set_center_freq(center_frequency, 0)
        self.uhd_usrp_sink_0.set_gain(gain, 0)
        self.uhd_usrp_sink_0.set_bandwidth(bandwidth, 0)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx, 1))
        self.connect((self.analog_sig_source_x_0, 0), (self.blocks_add_xx, 0))
        self.connect((self.blocks_add_xx, 0), (self.audio_sink, 0))
        self.connect((self.analog_noise_source_x_0, 0), (self.uhd_usrp_sink_0, 0))


    def change_sample_rate(self, value=None):
        if value is not None:
            self.sample_rate = value
            print('[top_block_22] change: sample_rate:', value)
            self.analog_sig_source_x_0.set_sampling_freq(value)

    def change_amplitude(self, value=None):
        if value is not None:
            value /= 10000.
            self.amplitude = value
            print('[top_block_22] change: amplitude:', value)
            self.analog_sig_source_x_0.set_amplitude(value)
            self.analog_noise_source_x_0.set_amplitude(value)

    def change_frequency(self, value=None):
        if value is not None:
            self.frequency = value
            print('[top_block_22] change: frequency:', value)
            self.analog_sig_source_x_0.set_frequency(value)

            #TODO: change some values
    def change_bandwidth(self, value=None):
        if value is not None:
            self.bandwidth = value
            print('[top_block_22] change: bandwidth:', value)
            self.uhd_usrp_sink_0.set_bandwidth(value)
    def change_gain(self, value=None):
        if value is not None:
            self.gain = value
            print('[top_block_22] change: gain:', value)        
            self.uhd_usrp_sink_0.set_gain(value)
    def change_center_frequency(self, value=None):
        if value is not None:
            self.center_frequency = value
            print('[top_block_22] change: center_frequency:', value) 
            self.uhd_usrp_sink_0.set_center_freq(value)
    def change_USRPsamp_rate(self, value=None):
         if value is not None:
            self.USRPsamp_rate = value
            print('[top_block_22] change: USRPsamp_rate:', value)        
            self.uhd_usrp_sink_0.set_USRPsamp_rate(value)

    def change(self, sample_rate=None, amplitude=None, frequency=None, bandwidth=None, gain=None, center_frequency=None, USRPsamp_rate=None):
        #self.change_sample_rate(sample_rate)
        #self.change_amplitude(amplitude)
        #self.change_frequency(frequency)
        #self.change_bandwidth(bandwidth)
        #self.change_gain(gain)
        #self.change_center_frequency(center_frequency)
        #self.change_USRPsamp_rate(center_USRPsamp_rate)

        if sample_rate is not None:
            self.change_sample_rate(sample_rate)

        if amplitude is not None:
            self.change_amplitude(amplitude)

        if frequency is not None:
            self.change_frequency(frequency)

        if bandwidth is not None:
            self.change_bandwidth(bandwidth)
        if gain is not None:
            self.change_gain(gain)

        if center_frequency is not None:
            self.change_center_frequency(center_frequency)

        if USRPsamp_rate is not None:
            self.change_USRPsamp_rate(USRPsamp_rate)

    def turn_off(self):
        self.change(0, 0, 0, 0, 0, 0, 0)

    #def mute_on(self):
    #    # remember values
    #    self.old_sample_rate = self.sample_rate
    #    self.old_ampliture = self.ampliture
    #    self.old_frequency = self.frequency
    #    self.old_ampliture = self.gain
    #    self.old_center_frequency = self.center_frequency
    #    self.old_USRPsamp_rate = self.USRPsamp_rate
    #    # turn off sound
    #    self.change(0, 0, 0, 0, 0, 0, 0)

    #def mute_off(self):
    #    # set old values
    #    self.change(self.old_sample_rate, self.old_ampliture, self.old_frequency, self.old_gain, self.old_center_frequency, self.old_USRPsamp_rate)

# -----------------------------------------------------------------------------

from flask import Flask, request, jsonify

app = Flask(__name__)

# start with default values 
#tb = top_block_22()
tb = top_block_22(0, 0, 0, 0, 0, 0, 0)
tb.start(True)

@app.route('/')
def index():
    return '''<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>GNURadio Slider Example</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/roundSlider/1.3.2/roundslider.min.css" rel="stylesheet" />
  <script src="https://cdnjs.cloudflare.com/ajax/libs/roundSlider/1.3.2/roundslider.min.js"></script>

<style>

.slider {
 position: absolute;
 align:center;
}    

.row1 {top:100px;}
.row2 {top:450px;}
.row3 {top:750px;}

.col1 {left:75px;}
.col2 {left:470px;}
.col3 {left:870px;}
.col1 {left:75px;}

</style>
</head>

<body>

<div id="slider1" class='slider row1 col1'></div>
<!--  <p>Sample Rate Slider</p> -->

<div id="slider2" class='slider row1 col2'></div>
<!--  <p>Amplitude Slider2</p> -->

<div id="slider3" class='slider row1 col3'></div>
<!-- <p>Frequency Slider3</p> -->

<div id="slider4" class='slider row2 col1'></div>
<!-- <p>Bandwidth Slider4</p>  -->

<div id="slider5" class='slider row2 col2'></div>
<!-- <p>Gain Slider5</p>  -->

<div id="slider6" class='slider row2 col3'></div>
<!-- <p>Center Frequency Slider6</p>  -->

<div id="slider7" class='slider row3 col1'></div>
<!-- <p>USRP Sample Rate Slider7</p>  -->

<button id="turn_off_button">TURN OFF</button>

<script>

  // create sliders

  $("#slider1").roundSlider({
    //sliderType: "min-range",
    radius: 150,
    min: 0,
    max: 1000000000000,
    value: 0, // default value at start
    //change: function(event) { $.getJSON('/valueofslider', {slide1_val: event.value}); }
    change: function(event) { $.getJSON('/set_sample_rate/' + event.value); }
  });

  $("#slider2").roundSlider({
    //sliderType: "min-range",
    radius: 150,
    min: 0,
    max: 1000,
    value: 0, // default value at start

    //change: function(event) { $.getJSON('/valueofslider', {slide2_val: event.value}); }
    change: function(event) { $.getJSON('/set_amplitude/' + event.value); }
  });

  $("#slider3").roundSlider({
    radius: 150,
    min: 0,
    max: 10000000000,
    value: 0, // default value at start
    //change: function(event) { $.getJSON('/valueofslider', {slide3_val: event.value}); }
    change: function(event) { $.getJSON('/set_frequency/' + event.value); }
  });

  $("#slider4").roundSlider({
    radius: 150,
    min: 0,
    max: 10000,
    value: 0, // default value at start
    //change: function(event) { $.getJSON('/valueofslider', {slide4_val: event.value}); }
    change: function(event) { $.getJSON('/set_bandwidth/' + event.value); }
  });

  $("#slider5").roundSlider({
    radius: 150,
    min: 0,
    max: 10000000000,
    value: 0, // default value at start
    //change: function(event) { $.getJSON('/valueofslider', {slide5_val: event.value}); }
    change: function(event) { $.getJSON('/set_gain/' + event.value); }
  });

  $("#slider6").roundSlider({
    radius: 150,
    min: 0,
    max: 10000000000,
    value: 0, // default value at start
    //change: function(event) { $.getJSON('/valueofslider', {slide6_val: event.value}); }
    change: function(event) { $.getJSON('/set_center_frequency/' + event.value); }
  });

  $("#slider7").roundSlider({
    radius: 150,
    min: 0,
    max: 10000000000,
    value: 0, // default value at start
    //change: function(event) { $.getJSON('/valueofslider', {slide7_val: event.value}); }
    change: function(event) { $.getJSON('/set_USRPsamp_rate/' + event.value); }
  });
  $("#turn_off_button").click(function(){
      // set sliders
      $("#slider1").data("roundSlider").setValue(0);
      $("#slider2").data("roundSlider").setValue(0);
      $("#slider3").data("roundSlider").setValue(0);
      $("#slider4").data("roundSlider").setValue(0);
      $("#slider5").data("roundSlider").setValue(0);
      $("#slider6").data("roundSlider").setValue(0);
      $("#slider7").data("roundSlider").setValue(0);

      // send to server
      $.getJSON('/valueofslider', {
        slide1_val: 0,
        slide2_val: 0,
        slide3_val: 0,
        slide4_val: 0,
        slide5_val: 0,
        slide6_val: 0,
        slide7_val: 0,
      });
  });

</script>

</body>
</html>'''

@app.route('/off')
def off():
    """Turn off sound."""
    tb.turn_off()
    #return jsonify({'val': 0})
    return 'off'

@app.route('/set_sample_rate/<int:value>')
def set_sample_rate(value):
    #sound(sample_rate=value)
    tb.change_sample_rate(value)
    #return jsonify({'sample_rate': value})
    return str(value)

@app.route('/set_amplitude/<int:value>')
def set_amplitude(value):
    #sound(amplitude=value)
    tb.change_amplitude(value)
    #return jsonify({'amplitude': value})
    return str(value)

@app.route('/set_frequency/<int:value>')
def set_frequency(value):
    #sound(frequency=value)
    tb.change_frequency(value)
    #return jsonify({'frequency': value})
    return str(value)

@app.route('/set_bandwidth/<int:value>')
def set_bandwidth(value):
    #sound(frequency=value)
    tb.change_bandwidth(value)
    #return jsonify({'frequency': value})
    return str(value)

@app.route('/set_gain/<int:value>')
def set_gain(value):
    #sound(frequency=value)
    tb.change_gain(value)
    #return jsonify({'frequency': value})
    return str(value)

@app.route('/set_center_frequency/<int:value>')
def set_center_frequency(value):
    #sound(frequency=value)
    tb.change_center_frequency(value)
    #return jsonify({'frequency': value})
    return str(value)

@app.route('/set_USRPsamp_rate/<int:value>')
def set_USRPsamp_rate(value):
    #sound(frequency=value)
    tb.change_USRPsamp_rate(value)
    #return jsonify({'frequency': value})
    return str(value)

@app.route('/valueofslider')
def slide():
    sample_rate = request.args.get('slide1_val', None)
    amplitude   = request.args.get('slide2_val', None)
    frequency   = request.args.get('slide3_val', None)
    bandwidth   = request.args.get('slide4_val', None)
    gain   = request.args.get('slide5_val', None)
    center_frequency   = request.args.get('slide6_val', None)
    USRPsamp_rate   = request.args.get('slide7_val', None)

    sound(
        sample_rate=sample_rate, 
        amplitude=amplitude, 
        frequency=frequency,
        bandwidth=bandwidth,
        gain=gain,
        center_frequency=center_frequency,
        USRPsamp_rate=USRPsamp_rate,

    )

    #return jsonify({
    #        'sample_rate': sample_rate, 
    #        'amplitude': amplitude,
    #        'frequency ': frequency ,
    #        'bandwidth': bandwidth, 
    #        'gain': gain,
    #        'center_frequency ': center_frequency ,
    #        'USRPsamp_rate ': USRPsamp_rate ,
    #        })

    return 'sample_rate: {}, amplitude: {}, frequency: {}, bandwidth: {}, gain: {}, center_frequency: {}, USRPsamp_rate: {}'.format(sample_rate, amplitude, frequency, bandwidth )

def sound(sample_rate=None, amplitude=None, frequency=None, bandwidth=None, gain=None, center_frequency=None, USRPsamp_rate=None):
    """version which uses `change()`"""

    if sample_rate is not None:
        sample_rate = int(sample_rate)
        tb.change_sample_rate(sample_rate)

    if amplitude is not None:
        amplitude = int(amplitude)
        tb.change_amplitude(amplitude)

    if frequency is not None:
        frequency = int(frequency )
        tb.change_frequency(frequency )

    if bandwidth is not None:
        bandwidth = int(bandwidth )
        tb.change_bandwidth(bandwidth )

    if gain is not None:
        gain = int(gain )
        tb.change_gain(gain )

    if center_frequency is not None:
        center_frequency = int(center_frequency )
        tb.change_center_frequency(center_frequency )

    if USRPsamp_rate is not None:
        USRPsamp_rate = int(USRPsamp_rate )
        tb.change_USRPsamp_rate(USRPsamp_rate )


    print('[sound] sample_rate:', sample_rate)
    print('[sound] amplitude:', amplitude)
    print('[sound] frequency:', frequency)
    print('[sound] bandwidth:', bandwidth)
    print('[sound] gain:', gain)
    print('[sound] center_frequency:', center_frequency)
    print('[sound] center_frequency:', USRPsamp_rate)
    #if tb: # if tb is not None
    #    tb.change(sample_rate, amplitude, frequency, bandwidth, gain, center_frequency, USRPsamp_rate)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

Update:

Here is the USRP code that works without problems:

if __name__ == '__main__':
    import ctypes
    import sys
    if sys.platform.startswith('linux'):
        try:
            x11 = ctypes.cdll.LoadLibrary('libX11.so')
            x11.XInitThreads()
        except:
            print "Warning: failed to XInitThreads()"

from gnuradio import analog
from gnuradio import audio
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import uhd
from gnuradio import wxgui
from gnuradio.eng_option import eng_option
from gnuradio.fft import window
from gnuradio.filter import firdes
from gnuradio.wxgui import fftsink2
from grc_gnuradio import wxgui as grc_wxgui
from optparse import OptionParser
import time
import wx


class broadband_noise(grc_wxgui.top_block_gui):

    def __init__(self):
        grc_wxgui.top_block_gui.__init__(self, title="Broadband Noise")
        _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
        self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 16000000
        self.gain = gain = 50
        self.center_frequency = center_frequency = 88e6
        self.bandwidth = bandwidth = 75000

        ##################################################
        # Blocks
        ##################################################
        self.wxgui_fftsink2_0 = fftsink2.fft_sink_f(
            self.GetWin(),
            baseband_freq=0,
            y_per_div=10,
            y_divs=10,
            ref_level=0,
            ref_scale=2.0,
            sample_rate=samp_rate,
            fft_size=1024,
            fft_rate=15,
            average=False,
            avg_alpha=None,
            title='FFT Plot',
            peak_hold=False,
        )
        self.Add(self.wxgui_fftsink2_0.win)
        self.uhd_usrp_sink_0 = uhd.usrp_sink(
            ",".join(("", "")),
            uhd.stream_args(
                cpu_format="sc16",
                channels=range(1),
            ),
        )
        self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
        self.uhd_usrp_sink_0.set_center_freq(center_frequency, 0)
        self.uhd_usrp_sink_0.set_gain(gain, 0)
        self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
        self.uhd_usrp_sink_0.set_bandwidth(bandwidth, 0)
        self.blocks_add_xx_0 = blocks.add_vff(1)
        self.audio_sink_0 = audio.sink(samp_rate, '', True)
        self.analog_sig_source_x_0 = analog.sig_source_f(samp_rate, analog.GR_COS_WAVE, 1000, 1, 0)
        self.analog_noise_source_x_0 = analog.noise_source_f(analog.GR_GAUSSIAN, 1, 0)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 1))
        self.connect((self.analog_sig_source_x_0, 0), (self.blocks_add_xx_0, 0))
        self.connect((self.blocks_add_xx_0, 0), (self.audio_sink_0, 0))
        self.connect((self.blocks_add_xx_0, 0), (self.uhd_usrp_sink_0, 0))
        self.connect((self.blocks_add_xx_0, 0), (self.wxgui_fftsink2_0, 0))

    def get_samp_rate(self):
        return self.samp_rate

    def set_samp_rate(self, samp_rate):
        self.samp_rate = samp_rate
        self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate)
        self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
        self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate)

    def get_gain(self):
        return self.gain

    def set_gain(self, gain):
        self.gain = gain
        self.uhd_usrp_sink_0.set_gain(self.gain, 0)


    def get_center_frequency(self):
        return self.center_frequency

    def set_center_frequency(self, center_frequency):
        self.center_frequency = center_frequency
        self.uhd_usrp_sink_0.set_center_freq(self.center_frequency, 0)

    def get_bandwidth(self):
        return self.bandwidth

    def set_bandwidth(self, bandwidth):
        self.bandwidth = bandwidth
        self.uhd_usrp_sink_0.set_bandwidth(self.bandwidth, 0)


def main(top_block_cls=broadband_noise, options=None):

    tb = top_block_cls()
    tb.Start(True)
    tb.Wait()


if __name__ == '__main__':
    main()

Update:

uhd_find_devices output:

fit-pc@fitpc-fitlet2:~$ uhd_find_devices
linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown

-- UHD Device 0
Device Address:
    type: b200
    name: B200mini
    serial: 3164B8E
    product: B200mini

Update:

uhd_find_devices output from/within Flask env.:

fit-pc@fitpc-fitlet2:~/my_flask_app/virtualenv$ uhd_find_devices
linux; GNU C++ version 7.3.0; Boost_106501; UHD_003.010.003.000-0-unknown

--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    type: b200
    name: B200mini
    serial: 3164B8E
    product: B200mini

Update:

Image of Error location


Solution

  • upon closer inspection, the console output indicates you're trying to create another USRP handler after the first one got created, and holds the access to the USRP.

    This can easily happen in Server systems where multiple, potentially concurrent requests are made.

    I don't know how intimately enough how flask works but you'll need to interact with only one instance of your USRP sink (or source). It says something about "restarting with..." and that won't work.

    You'll need to construct the USRP-handling object once, and keep it between requests.

    (also, your sampling rate won't work, but you probably know that already, it's in the console output, too)