#!/usr/bin/env python2 # -*- coding: utf-8 -*- ################################################## # GNU Radio Python Flow Graph # Title: Top Block # Generated: Sat Apr 18 16:20:12 2020 ################################################## 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 eng_notation from gnuradio import gr from gnuradio.eng_option import eng_option from gnuradio.filter import firdes from gnuradio.wxgui import forms from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import soapy import wx class top_block(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.f_ctr_fine = f_ctr_fine = 0e3 self.f_ctr_coarse = f_ctr_coarse = 500e6 self.samp_rate = samp_rate = 2e6 self.rx_ftune = rx_ftune = 500e6 self.power_tx_dB = power_tx_dB = 0 self.offset_Hz = offset_Hz = 0 self.f_tune = f_tune = f_ctr_coarse + f_ctr_fine self.f_fine = f_fine = 0 ################################################## # Blocks ################################################## _power_tx_dB_sizer = wx.BoxSizer(wx.VERTICAL) self._power_tx_dB_text_box = forms.text_box( parent=self.GetWin(), sizer=_power_tx_dB_sizer, value=self.power_tx_dB, callback=self.set_power_tx_dB, label='Tx-Power', converter=forms.float_converter(), proportion=0, ) self._power_tx_dB_slider = forms.slider( parent=self.GetWin(), sizer=_power_tx_dB_sizer, value=self.power_tx_dB, callback=self.set_power_tx_dB, minimum=0, maximum=1, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_power_tx_dB_sizer) self.soapy_sink_0 = \ soapy.sink(1, "driver=remote,remote=moon,remote:driver=uhd", '', samp_rate, "fc32", '') self.soapy_sink_0.set_frequency(0, f_tune) self.soapy_sink_0.set_gain(0, power_tx_dB*40) self.soapy_sink_0.set_gain_mode(0, False) self._rx_ftune_chooser = forms.drop_down( parent=self.GetWin(), value=self.rx_ftune, callback=self.set_rx_ftune, label='rx_ftune', choices=[100e6, 200e6, 300e6, 433.92e6, 500e6, 700e6, 900e6], labels=['100 MHz','200 MHz','300 MHz','400 MHz','500 MHz','700 MHz','900 MHz'], ) self.Add(self._rx_ftune_chooser) _f_fine_sizer = wx.BoxSizer(wx.VERTICAL) self._f_fine_text_box = forms.text_box( parent=self.GetWin(), sizer=_f_fine_sizer, value=self.f_fine, callback=self.set_f_fine, label='f_fine', converter=forms.float_converter(), proportion=0, ) self._f_fine_slider = forms.slider( parent=self.GetWin(), sizer=_f_fine_sizer, value=self.f_fine, callback=self.set_f_fine, minimum=-100e3, maximum=100e3, num_steps=200, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_f_fine_sizer) _f_ctr_fine_sizer = wx.BoxSizer(wx.VERTICAL) self._f_ctr_fine_text_box = forms.text_box( parent=self.GetWin(), sizer=_f_ctr_fine_sizer, value=self.f_ctr_fine, callback=self.set_f_ctr_fine, label='f_ctr_fine', converter=forms.float_converter(), proportion=0, ) self._f_ctr_fine_slider = forms.slider( parent=self.GetWin(), sizer=_f_ctr_fine_sizer, value=self.f_ctr_fine, callback=self.set_f_ctr_fine, minimum=-1000e3, maximum=1000e3, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_f_ctr_fine_sizer) _f_ctr_coarse_sizer = wx.BoxSizer(wx.VERTICAL) self._f_ctr_coarse_text_box = forms.text_box( parent=self.GetWin(), sizer=_f_ctr_coarse_sizer, value=self.f_ctr_coarse, callback=self.set_f_ctr_coarse, label='f_ctr_coarse', converter=forms.float_converter(), proportion=0, ) self._f_ctr_coarse_slider = forms.slider( parent=self.GetWin(), sizer=_f_ctr_coarse_sizer, value=self.f_ctr_coarse, callback=self.set_f_ctr_coarse, minimum=88e6, maximum=1000e6, num_steps=20, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_f_ctr_coarse_sizer) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 0, 0.5, 0) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.soapy_sink_0, 0)) def get_f_ctr_fine(self): return self.f_ctr_fine def set_f_ctr_fine(self, f_ctr_fine): self.f_ctr_fine = f_ctr_fine self.set_f_tune(self.f_ctr_coarse + self.f_ctr_fine) self._f_ctr_fine_slider.set_value(self.f_ctr_fine) self._f_ctr_fine_text_box.set_value(self.f_ctr_fine) def get_f_ctr_coarse(self): return self.f_ctr_coarse def set_f_ctr_coarse(self, f_ctr_coarse): self.f_ctr_coarse = f_ctr_coarse self.set_f_tune(self.f_ctr_coarse + self.f_ctr_fine) self._f_ctr_coarse_slider.set_value(self.f_ctr_coarse) self._f_ctr_coarse_text_box.set_value(self.f_ctr_coarse) def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate) def get_rx_ftune(self): return self.rx_ftune def set_rx_ftune(self, rx_ftune): self.rx_ftune = rx_ftune self._rx_ftune_chooser.set_value(self.rx_ftune) def get_power_tx_dB(self): return self.power_tx_dB def set_power_tx_dB(self, power_tx_dB): self.power_tx_dB = power_tx_dB self._power_tx_dB_slider.set_value(self.power_tx_dB) self._power_tx_dB_text_box.set_value(self.power_tx_dB) self.soapy_sink_0.set_gain(0, self.power_tx_dB*40) def get_offset_Hz(self): return self.offset_Hz def set_offset_Hz(self, offset_Hz): self.offset_Hz = offset_Hz def get_f_tune(self): return self.f_tune def set_f_tune(self, f_tune): self.f_tune = f_tune self.soapy_sink_0.set_frequency(0, self.f_tune) def get_f_fine(self): return self.f_fine def set_f_fine(self, f_fine): self.f_fine = f_fine self._f_fine_slider.set_value(self.f_fine) self._f_fine_text_box.set_value(self.f_fine) def main(top_block_cls=top_block, options=None): tb = top_block_cls() tb.Start(True) tb.Wait() if __name__ == '__main__': main()