From 3d89f5e4c2016f4b7b4b85f41b7e3024825dc9c6 Mon Sep 17 00:00:00 2001 From: Pieter Robyns Date: Tue, 30 Nov 2021 20:49:04 -0500 Subject: [PATCH] Fix lora_receive_file_nogui.py Remove lora_receive_realtime.py and lora_receive_file.py because they are generated automatically by the grcs --- .gitignore | 2 + apps/lora_receive_file.py | 237 ---------------- apps/lora_receive_file_nogui.py | 2 +- apps/lora_receive_realtime.grc | 468 ++++++++++++++++++++++++++++++-- apps/lora_receive_realtime.py | 244 ----------------- 5 files changed, 444 insertions(+), 509 deletions(-) delete mode 100755 apps/lora_receive_file.py delete mode 100755 apps/lora_receive_realtime.py diff --git a/.gitignore b/.gitignore index cf4769f..c7c6a4b 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ apps/test-suites apps/test-trace.* python/lora_decoder.py apps/test-results-paper +apps/lora_receive_realtime.py +apps/lora_receive_file.py diff --git a/apps/lora_receive_file.py b/apps/lora_receive_file.py deleted file mode 100755 index 970db16..0000000 --- a/apps/lora_receive_file.py +++ /dev/null @@ -1,237 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# -# SPDX-License-Identifier: GPL-3.0 -# -# GNU Radio Python Flow Graph -# Title: Lora Receive File -# GNU Radio version: 3.9.4.0 - -from distutils.version import 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 -import pmt -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 -import lora - - - -from gnuradio import qtgui - -class lora_receive_file(gr.top_block, Qt.QWidget): - - def __init__(self): - gr.top_block.__init__(self, "Lora Receive File", catch_exceptions=True) - Qt.QWidget.__init__(self) - self.setWindowTitle("Lora Receive File") - 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", "lora_receive_file") - - 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.sf = sf = 7 - self.bw = bw = 125000 - self.target_freq = target_freq = 868.1e6 - self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) - self.samp_rate = samp_rate = 10e6 - self.capture_freq = capture_freq = 866.0e6 - self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) - - ################################################## - # Blocks - ################################################## - self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( - 1024, #size - window.WIN_BLACKMAN_hARRIS, #wintype - capture_freq, #fc - samp_rate, #bw - "", #name - 1, - None # parent - ) - self.qtgui_freq_sink_x_0.set_update_time(0.10) - self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) - self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') - self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") - self.qtgui_freq_sink_x_0.enable_autoscale(False) - self.qtgui_freq_sink_x_0.enable_grid(False) - self.qtgui_freq_sink_x_0.set_fft_average(1.0) - self.qtgui_freq_sink_x_0.enable_axis_labels(True) - self.qtgui_freq_sink_x_0.enable_control_panel(False) - self.qtgui_freq_sink_x_0.set_fft_window_normalized(False) - - - - labels = ['', '', '', '', '', - '', '', '', '', ''] - widths = [1, 1, 1, 1, 1, - 1, 1, 1, 1, 1] - colors = ["blue", "red", "green", "black", "cyan", - "magenta", "yellow", "dark red", "dark green", "dark blue"] - alphas = [1.0, 1.0, 1.0, 1.0, 1.0, - 1.0, 1.0, 1.0, 1.0, 1.0] - - for i in range(1): - if len(labels[i]) == 0: - self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i)) - else: - self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) - self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) - self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) - self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) - - self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.qwidget(), Qt.QWidget) - self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win) - self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, [target_freq], bw, sf, False, 4, True, False, False, 10, False, False) - self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) - self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, 'counting_cr4_sf7.cfile', True, 0, 0) - self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL) - - - - ################################################## - # Connections - ################################################## - self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0)) - self.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) - self.connect((self.blocks_throttle_0, 0), (self.qtgui_freq_sink_x_0, 0)) - - - def closeEvent(self, event): - self.settings = Qt.QSettings("GNU Radio", "lora_receive_file") - self.settings.setValue("geometry", self.saveGeometry()) - self.stop() - self.wait() - - event.accept() - - def get_sf(self): - return self.sf - - def set_sf(self, sf): - self.sf = sf - self.set_bitrate(self.sf * (1 / (2**self.sf / float(self.bw)))) - self.set_symbols_per_sec(float(self.bw) / (2**self.sf)) - self.lora_lora_receiver_0.set_sf(self.sf) - - def get_bw(self): - return self.bw - - def set_bw(self, bw): - self.bw = bw - self.set_bitrate(self.sf * (1 / (2**self.sf / float(self.bw)))) - self.set_symbols_per_sec(float(self.bw) / (2**self.sf)) - - def get_target_freq(self): - return self.target_freq - - def set_target_freq(self, target_freq): - self.target_freq = target_freq - - def get_symbols_per_sec(self): - return self.symbols_per_sec - - def set_symbols_per_sec(self, symbols_per_sec): - self.symbols_per_sec = symbols_per_sec - - 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_freq_sink_x_0.set_frequency_range(self.capture_freq, self.samp_rate) - - def get_capture_freq(self): - return self.capture_freq - - def set_capture_freq(self, capture_freq): - self.capture_freq = capture_freq - self.lora_lora_receiver_0.set_center_freq(self.capture_freq) - self.qtgui_freq_sink_x_0.set_frequency_range(self.capture_freq, self.samp_rate) - - def get_bitrate(self): - return self.bitrate - - def set_bitrate(self, bitrate): - self.bitrate = bitrate - - - - -def main(top_block_cls=lora_receive_file, 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() diff --git a/apps/lora_receive_file_nogui.py b/apps/lora_receive_file_nogui.py index c8f6def..12d98c1 100755 --- a/apps/lora_receive_file_nogui.py +++ b/apps/lora_receive_file_nogui.py @@ -82,7 +82,7 @@ if __name__ == '__main__': transmit_freq = meta_capture["lora:frequency"] sf = meta_capture["lora:sf"] cr = meta_capture["lora:cr"] - bw = meta_capture["lora:bw"] + bw = int(meta_capture["lora:bw"]) prlen = meta_capture["lora:prlen"] crc = meta_capture["lora:crc"] implicit = meta_capture["lora:implicit"] diff --git a/apps/lora_receive_realtime.grc b/apps/lora_receive_realtime.grc index d480668..6b51dbc 100644 --- a/apps/lora_receive_realtime.grc +++ b/apps/lora_receive_realtime.grc @@ -11,7 +11,7 @@ options: gen_linking: dynamic generate_options: qt_gui hier_block_src_path: '.:' - id: lora_receive_file + id: lora_receive_realtime max_nouts: '0' output_language: python placement: (0,0) @@ -116,28 +116,6 @@ blocks: coordinate: [184, 76] rotation: 0 state: enabled -- name: blocks_file_source_0 - id: blocks_file_source - parameters: - affinity: '' - alias: '' - begin_tag: pmt.PMT_NIL - comment: '' - file: counting_cr4_sf7.cfile - length: '0' - maxoutbuf: '0' - minoutbuf: '0' - offset: '0' - repeat: 'True' - type: complex - vlen: '1' - states: - bus_sink: false - bus_source: false - bus_structure: null - coordinate: [8, 164.0] - rotation: 0 - state: enabled - name: blocks_throttle_0 id: blocks_throttle parameters: @@ -154,7 +132,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [240, 196.0] + coordinate: [264, 188.0] rotation: 0 state: enabled - name: lora_lora_receiver_0 @@ -182,7 +160,7 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [448, 148.0] + coordinate: [480, 148.0] rotation: 0 state: enabled - name: qtgui_freq_sink_x_0 @@ -263,14 +241,450 @@ blocks: bus_sink: false bus_source: false bus_structure: null - coordinate: [440, 304.0] + coordinate: [480, 288.0] + rotation: 0 + state: true +- name: uhd_usrp_source_0 + id: uhd_usrp_source + parameters: + affinity: '' + alias: '' + ant0: '"RX2"' + ant1: '"RX2"' + ant10: '"RX2"' + ant11: '"RX2"' + ant12: '"RX2"' + ant13: '"RX2"' + ant14: '"RX2"' + ant15: '"RX2"' + ant16: '"RX2"' + ant17: '"RX2"' + ant18: '"RX2"' + ant19: '"RX2"' + ant2: '"RX2"' + ant20: '"RX2"' + ant21: '"RX2"' + ant22: '"RX2"' + ant23: '"RX2"' + ant24: '"RX2"' + ant25: '"RX2"' + ant26: '"RX2"' + ant27: '"RX2"' + ant28: '"RX2"' + ant29: '"RX2"' + ant3: '"RX2"' + ant30: '"RX2"' + ant31: '"RX2"' + ant4: '"RX2"' + ant5: '"RX2"' + ant6: '"RX2"' + ant7: '"RX2"' + ant8: '"RX2"' + ant9: '"RX2"' + bw0: '0' + bw1: '0' + bw10: '0' + bw11: '0' + bw12: '0' + bw13: '0' + bw14: '0' + bw15: '0' + bw16: '0' + bw17: '0' + bw18: '0' + bw19: '0' + bw2: '0' + bw20: '0' + bw21: '0' + bw22: '0' + bw23: '0' + bw24: '0' + bw25: '0' + bw26: '0' + bw27: '0' + bw28: '0' + bw29: '0' + bw3: '0' + bw30: '0' + bw31: '0' + bw4: '0' + bw5: '0' + bw6: '0' + bw7: '0' + bw8: '0' + bw9: '0' + center_freq0: '0' + center_freq1: '0' + center_freq10: '0' + center_freq11: '0' + center_freq12: '0' + center_freq13: '0' + center_freq14: '0' + center_freq15: '0' + center_freq16: '0' + center_freq17: '0' + center_freq18: '0' + center_freq19: '0' + center_freq2: '0' + center_freq20: '0' + center_freq21: '0' + center_freq22: '0' + center_freq23: '0' + center_freq24: '0' + center_freq25: '0' + center_freq26: '0' + center_freq27: '0' + center_freq28: '0' + center_freq29: '0' + center_freq3: '0' + center_freq30: '0' + center_freq31: '0' + center_freq4: '0' + center_freq5: '0' + center_freq6: '0' + center_freq7: '0' + center_freq8: '0' + center_freq9: '0' + clock_rate: 0e0 + clock_source0: '' + clock_source1: '' + clock_source2: '' + clock_source3: '' + clock_source4: '' + clock_source5: '' + clock_source6: '' + clock_source7: '' + comment: '' + dc_offs0: 0+0j + dc_offs1: 0+0j + dc_offs10: 0+0j + dc_offs11: 0+0j + dc_offs12: 0+0j + dc_offs13: 0+0j + dc_offs14: 0+0j + dc_offs15: 0+0j + dc_offs16: 0+0j + dc_offs17: 0+0j + dc_offs18: 0+0j + dc_offs19: 0+0j + dc_offs2: 0+0j + dc_offs20: 0+0j + dc_offs21: 0+0j + dc_offs22: 0+0j + dc_offs23: 0+0j + dc_offs24: 0+0j + dc_offs25: 0+0j + dc_offs26: 0+0j + dc_offs27: 0+0j + dc_offs28: 0+0j + dc_offs29: 0+0j + dc_offs3: 0+0j + dc_offs30: 0+0j + dc_offs31: 0+0j + dc_offs4: 0+0j + dc_offs5: 0+0j + dc_offs6: 0+0j + dc_offs7: 0+0j + dc_offs8: 0+0j + dc_offs9: 0+0j + dc_offs_enb0: default + dc_offs_enb1: default + dc_offs_enb10: default + dc_offs_enb11: default + dc_offs_enb12: default + dc_offs_enb13: default + dc_offs_enb14: default + dc_offs_enb15: default + dc_offs_enb16: default + dc_offs_enb17: default + dc_offs_enb18: default + dc_offs_enb19: default + dc_offs_enb2: default + dc_offs_enb20: default + dc_offs_enb21: default + dc_offs_enb22: default + dc_offs_enb23: default + dc_offs_enb24: default + dc_offs_enb25: default + dc_offs_enb26: default + dc_offs_enb27: default + dc_offs_enb28: default + dc_offs_enb29: default + dc_offs_enb3: default + dc_offs_enb30: default + dc_offs_enb31: default + dc_offs_enb4: default + dc_offs_enb5: default + dc_offs_enb6: default + dc_offs_enb7: default + dc_offs_enb8: default + dc_offs_enb9: default + dev_addr: '""' + dev_args: '' + gain0: '0' + gain1: '0' + gain10: '0' + gain11: '0' + gain12: '0' + gain13: '0' + gain14: '0' + gain15: '0' + gain16: '0' + gain17: '0' + gain18: '0' + gain19: '0' + gain2: '0' + gain20: '0' + gain21: '0' + gain22: '0' + gain23: '0' + gain24: '0' + gain25: '0' + gain26: '0' + gain27: '0' + gain28: '0' + gain29: '0' + gain3: '0' + gain30: '0' + gain31: '0' + gain4: '0' + gain5: '0' + gain6: '0' + gain7: '0' + gain8: '0' + gain9: '0' + gain_type0: default + gain_type1: default + gain_type10: default + gain_type11: default + gain_type12: default + gain_type13: default + gain_type14: default + gain_type15: default + gain_type16: default + gain_type17: default + gain_type18: default + gain_type19: default + gain_type2: default + gain_type20: default + gain_type21: default + gain_type22: default + gain_type23: default + gain_type24: default + gain_type25: default + gain_type26: default + gain_type27: default + gain_type28: default + gain_type29: default + gain_type3: default + gain_type30: default + gain_type31: default + gain_type4: default + gain_type5: default + gain_type6: default + gain_type7: default + gain_type8: default + gain_type9: default + iq_imbal0: 0+0j + iq_imbal1: 0+0j + iq_imbal10: 0+0j + iq_imbal11: 0+0j + iq_imbal12: 0+0j + iq_imbal13: 0+0j + iq_imbal14: 0+0j + iq_imbal15: 0+0j + iq_imbal16: 0+0j + iq_imbal17: 0+0j + iq_imbal18: 0+0j + iq_imbal19: 0+0j + iq_imbal2: 0+0j + iq_imbal20: 0+0j + iq_imbal21: 0+0j + iq_imbal22: 0+0j + iq_imbal23: 0+0j + iq_imbal24: 0+0j + iq_imbal25: 0+0j + iq_imbal26: 0+0j + iq_imbal27: 0+0j + iq_imbal28: 0+0j + iq_imbal29: 0+0j + iq_imbal3: 0+0j + iq_imbal30: 0+0j + iq_imbal31: 0+0j + iq_imbal4: 0+0j + iq_imbal5: 0+0j + iq_imbal6: 0+0j + iq_imbal7: 0+0j + iq_imbal8: 0+0j + iq_imbal9: 0+0j + iq_imbal_enb0: default + iq_imbal_enb1: default + iq_imbal_enb10: default + iq_imbal_enb11: default + iq_imbal_enb12: default + iq_imbal_enb13: default + iq_imbal_enb14: default + iq_imbal_enb15: default + iq_imbal_enb16: default + iq_imbal_enb17: default + iq_imbal_enb18: default + iq_imbal_enb19: default + iq_imbal_enb2: default + iq_imbal_enb20: default + iq_imbal_enb21: default + iq_imbal_enb22: default + iq_imbal_enb23: default + iq_imbal_enb24: default + iq_imbal_enb25: default + iq_imbal_enb26: default + iq_imbal_enb27: default + iq_imbal_enb28: default + iq_imbal_enb29: default + iq_imbal_enb3: default + iq_imbal_enb30: default + iq_imbal_enb31: default + iq_imbal_enb4: default + iq_imbal_enb5: default + iq_imbal_enb6: default + iq_imbal_enb7: default + iq_imbal_enb8: default + iq_imbal_enb9: default + lo_export0: 'False' + lo_export1: 'False' + lo_export10: 'False' + lo_export11: 'False' + lo_export12: 'False' + lo_export13: 'False' + lo_export14: 'False' + lo_export15: 'False' + lo_export16: 'False' + lo_export17: 'False' + lo_export18: 'False' + lo_export19: 'False' + lo_export2: 'False' + lo_export20: 'False' + lo_export21: 'False' + lo_export22: 'False' + lo_export23: 'False' + lo_export24: 'False' + lo_export25: 'False' + lo_export26: 'False' + lo_export27: 'False' + lo_export28: 'False' + lo_export29: 'False' + lo_export3: 'False' + lo_export30: 'False' + lo_export31: 'False' + lo_export4: 'False' + lo_export5: 'False' + lo_export6: 'False' + lo_export7: 'False' + lo_export8: 'False' + lo_export9: 'False' + lo_source0: internal + lo_source1: internal + lo_source10: internal + lo_source11: internal + lo_source12: internal + lo_source13: internal + lo_source14: internal + lo_source15: internal + lo_source16: internal + lo_source17: internal + lo_source18: internal + lo_source19: internal + lo_source2: internal + lo_source20: internal + lo_source21: internal + lo_source22: internal + lo_source23: internal + lo_source24: internal + lo_source25: internal + lo_source26: internal + lo_source27: internal + lo_source28: internal + lo_source29: internal + lo_source3: internal + lo_source30: internal + lo_source31: internal + lo_source4: internal + lo_source5: internal + lo_source6: internal + lo_source7: internal + lo_source8: internal + lo_source9: internal + maxoutbuf: '0' + minoutbuf: '0' + nchan: '1' + num_mboards: '1' + otw: '' + rx_agc0: Default + rx_agc1: Default + rx_agc10: Default + rx_agc11: Default + rx_agc12: Default + rx_agc13: Default + rx_agc14: Default + rx_agc15: Default + rx_agc16: Default + rx_agc17: Default + rx_agc18: Default + rx_agc19: Default + rx_agc2: Default + rx_agc20: Default + rx_agc21: Default + rx_agc22: Default + rx_agc23: Default + rx_agc24: Default + rx_agc25: Default + rx_agc26: Default + rx_agc27: Default + rx_agc28: Default + rx_agc29: Default + rx_agc3: Default + rx_agc30: Default + rx_agc31: Default + rx_agc4: Default + rx_agc5: Default + rx_agc6: Default + rx_agc7: Default + rx_agc8: Default + rx_agc9: Default + samp_rate: samp_rate + sd_spec0: '' + sd_spec1: '' + sd_spec2: '' + sd_spec3: '' + sd_spec4: '' + sd_spec5: '' + sd_spec6: '' + sd_spec7: '' + show_lo_controls: 'False' + start_time: '-1.0' + stream_args: '' + stream_chans: '[]' + sync: sync + time_source0: '' + time_source1: '' + time_source2: '' + time_source3: '' + time_source4: '' + time_source5: '' + time_source6: '' + time_source7: '' + type: fc32 + states: + bus_sink: false + bus_source: false + bus_structure: null + coordinate: [64, 152.0] rotation: 0 state: true connections: -- [blocks_file_source_0, '0', blocks_throttle_0, '0'] - [blocks_throttle_0, '0', lora_lora_receiver_0, '0'] - [blocks_throttle_0, '0', qtgui_freq_sink_x_0, '0'] +- [uhd_usrp_source_0, '0', blocks_throttle_0, '0'] metadata: file_format: 1 diff --git a/apps/lora_receive_realtime.py b/apps/lora_receive_realtime.py deleted file mode 100755 index 9474bc5..0000000 --- a/apps/lora_receive_realtime.py +++ /dev/null @@ -1,244 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# -# SPDX-License-Identifier: GPL-3.0 -# -# GNU Radio Python Flow Graph -# Title: Lora Receive Realtime -# GNU Radio version: 3.8.0.0 - -from distutils.version import 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 gr -import sys -import signal -from argparse import ArgumentParser -from gnuradio.eng_arg import eng_float, intx -from gnuradio import eng_notation -import lora -import osmosdr -import time -from gnuradio import qtgui - -class lora_receive_realtime(gr.top_block, Qt.QWidget): - - def __init__(self): - gr.top_block.__init__(self, "Lora Receive Realtime") - Qt.QWidget.__init__(self) - self.setWindowTitle("Lora Receive Realtime") - 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", "lora_receive_realtime") - - 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.sf = sf = 11 - self.bw = bw = 125000 - self.target_freq = target_freq = 868.1e6 - self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) - self.samp_rate = samp_rate = 1e6 - self.decimation = decimation = 1 - self.capture_freq = capture_freq = 868e6 - self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) - - ################################################## - # Blocks - ################################################## - self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( - 1024, #size - firdes.WIN_BLACKMAN_hARRIS, #wintype - capture_freq, #fc - samp_rate, #bw - "", #name - 1 - ) - self.qtgui_freq_sink_x_0.set_update_time(0.10) - self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) - self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') - self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") - self.qtgui_freq_sink_x_0.enable_autoscale(False) - self.qtgui_freq_sink_x_0.enable_grid(False) - self.qtgui_freq_sink_x_0.set_fft_average(1.0) - self.qtgui_freq_sink_x_0.enable_axis_labels(True) - self.qtgui_freq_sink_x_0.enable_control_panel(False) - - - - labels = ['', '', '', '', '', - '', '', '', '', ''] - widths = [1, 1, 1, 1, 1, - 1, 1, 1, 1, 1] - colors = ["blue", "red", "green", "black", "cyan", - "magenta", "yellow", "dark red", "dark green", "dark blue"] - alphas = [1.0, 1.0, 1.0, 1.0, 1.0, - 1.0, 1.0, 1.0, 1.0, 1.0] - - for i in range(1): - if len(labels[i]) == 0: - self.qtgui_freq_sink_x_0.set_line_label(i, "Data {0}".format(i)) - else: - self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) - self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) - self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) - self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) - - self._qtgui_freq_sink_x_0_win = sip.wrapinstance(self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) - self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win) - self.osmosdr_source_0 = osmosdr.source( - args="numchan=" + str(1) + " " + '' - ) - self.osmosdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t()) - self.osmosdr_source_0.set_sample_rate(samp_rate) - self.osmosdr_source_0.set_center_freq(capture_freq, 0) - self.osmosdr_source_0.set_freq_corr(0, 0) - self.osmosdr_source_0.set_gain(10, 0) - self.osmosdr_source_0.set_if_gain(20, 0) - self.osmosdr_source_0.set_bb_gain(20, 0) - self.osmosdr_source_0.set_antenna('', 0) - self.osmosdr_source_0.set_bandwidth(0, 0) - self.lora_message_socket_sink_0 = lora.message_socket_sink('127.0.0.1', 40868, 0) - self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, [target_freq], bw, sf, False, 4, True, False, False, decimation, False, False) - - - - ################################################## - # Connections - ################################################## - self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) - self.connect((self.osmosdr_source_0, 0), (self.lora_lora_receiver_0, 0)) - self.connect((self.osmosdr_source_0, 0), (self.qtgui_freq_sink_x_0, 0)) - - def closeEvent(self, event): - self.settings = Qt.QSettings("GNU Radio", "lora_receive_realtime") - self.settings.setValue("geometry", self.saveGeometry()) - event.accept() - - def get_sf(self): - return self.sf - - def set_sf(self, sf): - self.sf = sf - self.set_bitrate(self.sf * (1 / (2**self.sf / float(self.bw)))) - self.set_symbols_per_sec(float(self.bw) / (2**self.sf)) - self.lora_lora_receiver_0.set_sf(self.sf) - - def get_bw(self): - return self.bw - - def set_bw(self, bw): - self.bw = bw - self.set_bitrate(self.sf * (1 / (2**self.sf / float(self.bw)))) - self.set_symbols_per_sec(float(self.bw) / (2**self.sf)) - - def get_target_freq(self): - return self.target_freq - - def set_target_freq(self, target_freq): - self.target_freq = target_freq - - def get_symbols_per_sec(self): - return self.symbols_per_sec - - def set_symbols_per_sec(self, symbols_per_sec): - self.symbols_per_sec = symbols_per_sec - - def get_samp_rate(self): - return self.samp_rate - - def set_samp_rate(self, samp_rate): - self.samp_rate = samp_rate - self.osmosdr_source_0.set_sample_rate(self.samp_rate) - self.qtgui_freq_sink_x_0.set_frequency_range(self.capture_freq, self.samp_rate) - - def get_decimation(self): - return self.decimation - - def set_decimation(self, decimation): - self.decimation = decimation - - def get_capture_freq(self): - return self.capture_freq - - def set_capture_freq(self, capture_freq): - self.capture_freq = capture_freq - self.lora_lora_receiver_0.set_center_freq(self.capture_freq) - self.osmosdr_source_0.set_center_freq(self.capture_freq, 0) - self.qtgui_freq_sink_x_0.set_frequency_range(self.capture_freq, self.samp_rate) - - def get_bitrate(self): - return self.bitrate - - def set_bitrate(self, bitrate): - self.bitrate = bitrate - - - -def main(top_block_cls=lora_receive_realtime, 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): - 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) - - def quitting(): - tb.stop() - tb.wait() - qapp.aboutToQuit.connect(quitting) - qapp.exec_() - - -if __name__ == '__main__': - main()