| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| |
| # |
| # SPDX-License-Identifier: GPL-3.0 |
| # |
| # GNU Radio Python Flow Graph |
| # Title: Calibration Waveform Viewer |
| # GNU Radio version: 3.10.1.1 |
| |
| from packaging.version import Version as StrictVersion |
| |
| 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 PyQt5 import Qt |
| from gnuradio import qtgui |
| from gnuradio.filter import firdes |
| import sip |
| from gnuradio import blocks |
| from gnuradio import filter |
| from gnuradio import gr |
| from gnuradio.fft import window |
| import sys |
| import signal |
| from argparse import ArgumentParser |
| from gnuradio.eng_arg import eng_float, intx |
| from gnuradio import eng_notation |
| from gnuradio import network |
| from xmlrpc.server import SimpleXMLRPCServer |
| import threading |
| |
| |
| |
| from gnuradio import qtgui |
| |
| class CalibrationViewer(gr.top_block, Qt.QWidget): |
| |
| def __init__(self): |
| gr.top_block.__init__(self, "Calibration Waveform Viewer", catch_exceptions=True) |
| Qt.QWidget.__init__(self) |
| self.setWindowTitle("Calibration Waveform Viewer") |
| qtgui.util.check_set_qss() |
| try: |
| self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) |
| except: |
| pass |
| self.top_scroll_layout = Qt.QVBoxLayout() |
| self.setLayout(self.top_scroll_layout) |
| self.top_scroll = Qt.QScrollArea() |
| self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) |
| self.top_scroll_layout.addWidget(self.top_scroll) |
| self.top_scroll.setWidgetResizable(True) |
| self.top_widget = Qt.QWidget() |
| self.top_scroll.setWidget(self.top_widget) |
| self.top_layout = Qt.QVBoxLayout(self.top_widget) |
| self.top_grid_layout = Qt.QGridLayout() |
| self.top_layout.addLayout(self.top_grid_layout) |
| |
| self.settings = Qt.QSettings("GNU Radio", "CalibrationViewer") |
| |
| try: |
| if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): |
| self.restoreGeometry(self.settings.value("geometry").toByteArray()) |
| else: |
| self.restoreGeometry(self.settings.value("geometry")) |
| except: |
| pass |
| |
| ################################################## |
| # Variables |
| ################################################## |
| self.samp_rate = samp_rate = 1e6 |
| self.center_freq = center_freq = 0 |
| |
| ################################################## |
| # Blocks |
| ################################################## |
| self.xmlrpc_server_0 = SimpleXMLRPCServer(('localhost', 8080), allow_none=True) |
| self.xmlrpc_server_0.register_instance(self) |
| self.xmlrpc_server_0_thread = threading.Thread(target=self.xmlrpc_server_0.serve_forever) |
| self.xmlrpc_server_0_thread.daemon = True |
| self.xmlrpc_server_0_thread.start() |
| self.rational_resampler_xxx_0 = filter.rational_resampler_ccc( |
| interpolation=2, |
| decimation=1, |
| taps=[], |
| fractional_bw=0) |
| self.qtgui_sink_x_0 = qtgui.sink_c( |
| 1024, #fftsize |
| window.WIN_BLACKMAN_hARRIS, #wintype |
| center_freq, #fc |
| samp_rate*2, #bw |
| "", #name |
| True, #plotfreq |
| True, #plotwaterfall |
| False, #plottime |
| False, #plotconst |
| None # parent |
| ) |
| self.qtgui_sink_x_0.set_update_time(1.0/10) |
| self._qtgui_sink_x_0_win = sip.wrapinstance(self.qtgui_sink_x_0.qwidget(), Qt.QWidget) |
| |
| self.qtgui_sink_x_0.enable_rf_freq(False) |
| |
| self.top_layout.addWidget(self._qtgui_sink_x_0_win) |
| self.network_tcp_source_0 = network.tcp_source.tcp_source(itemsize=gr.sizeof_gr_complex*1,addr='127.0.0.1',port=1234,server=True) |
| self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) |
| |
| |
| ################################################## |
| # Connections |
| ################################################## |
| self.connect((self.blocks_throttle_0, 0), (self.rational_resampler_xxx_0, 0)) |
| self.connect((self.network_tcp_source_0, 0), (self.blocks_throttle_0, 0)) |
| self.connect((self.rational_resampler_xxx_0, 0), (self.qtgui_sink_x_0, 0)) |
| |
| |
| def closeEvent(self, event): |
| self.settings = Qt.QSettings("GNU Radio", "CalibrationViewer") |
| self.settings.setValue("geometry", self.saveGeometry()) |
| self.stop() |
| self.wait() |
| |
| event.accept() |
| |
| def get_samp_rate(self): |
| return self.samp_rate |
| |
| def set_samp_rate(self, samp_rate): |
| self.samp_rate = samp_rate |
| self.blocks_throttle_0.set_sample_rate(self.samp_rate) |
| self.qtgui_sink_x_0.set_frequency_range(self.center_freq, self.samp_rate*2) |
| |
| def get_center_freq(self): |
| return self.center_freq |
| |
| def set_center_freq(self, center_freq): |
| self.center_freq = center_freq |
| self.qtgui_sink_x_0.set_frequency_range(self.center_freq, self.samp_rate*2) |
| |
| |
| |
| |
| def main(top_block_cls=CalibrationViewer, options=None): |
| |
| if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): |
| style = gr.prefs().get_string('qtgui', 'style', 'raster') |
| Qt.QApplication.setGraphicsSystem(style) |
| qapp = Qt.QApplication(sys.argv) |
| |
| tb = top_block_cls() |
| |
| tb.start() |
| |
| tb.show() |
| |
| def sig_handler(sig=None, frame=None): |
| tb.stop() |
| tb.wait() |
| |
| Qt.QApplication.quit() |
| |
| signal.signal(signal.SIGINT, sig_handler) |
| signal.signal(signal.SIGTERM, sig_handler) |
| |
| timer = Qt.QTimer() |
| timer.start(500) |
| timer.timeout.connect(lambda: None) |
| |
| qapp.exec_() |
| |
| if __name__ == '__main__': |
| main() |