diff options
-rwxr-xr-x | apps/grgsm_decode | 2 | ||||
-rwxr-xr-x | apps/grgsm_livemon | 145 | ||||
-rw-r--r-- | apps/grgsm_livemon.grc | 42 | ||||
-rwxr-xr-x | apps/grgsm_scanner | 2 |
4 files changed, 109 insertions, 82 deletions
diff --git a/apps/grgsm_decode b/apps/grgsm_decode index 8f412bf..89c03d3 100755 --- a/apps/grgsm_decode +++ b/apps/grgsm_decode @@ -124,7 +124,7 @@ class grgsm_decoder(gr.top_block): self.connect((self.file_source, 0), (self.input_adapter, 0)) self.connect((self.input_adapter, 0), (self.receiver, 0)) if self.fc is not None: - self.msg_connect(self.offset_control, "ppm", self.input_adapter, "ppm_in") + self.msg_connect(self.offset_control, "ctrl", self.input_adapter, "ctrl_in") self.msg_connect(self.receiver, "measurements", self.offset_control, "measurements") self.msg_connect(self.receiver, "C0", self.dummy_burst_filter, "in") diff --git a/apps/grgsm_livemon b/apps/grgsm_livemon index 1d37970..cb5b55c 100755 --- a/apps/grgsm_livemon +++ b/apps/grgsm_livemon @@ -1,8 +1,11 @@ #!/usr/bin/env python2 +# -*- coding: utf-8 -*- ################################################## # GNU Radio Python Flow Graph # Title: Gr-gsm Livemon -# Generated: Wed Sep 2 21:46:35 2015 +# Author: Piotr Krysik +# Description: Interactive monitor of a single C0 channel with analysis performed by Wireshark (command to run wireshark: sudo wireshark -k -f udp -Y gsmtap -i lo) +# Generated: Fri Jul 15 13:18:50 2016 ################################################## if __name__ == '__main__': @@ -35,14 +38,14 @@ import time class grgsm_livemon(gr.top_block, Qt.QWidget): - def __init__(self, fc=939.4e6, gain=30, ppm=0, samp_rate=2000000.052982, shiftoff=400e3, args=""): + def __init__(self, args="", fc=939.4e6, gain=30, ppm=0, samp_rate=2000000.052982, shiftoff=400e3): gr.top_block.__init__(self, "Gr-gsm Livemon") Qt.QWidget.__init__(self) self.setWindowTitle("Gr-gsm Livemon") try: - self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) + self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: - pass + pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() @@ -61,6 +64,7 @@ class grgsm_livemon(gr.top_block, Qt.QWidget): ################################################## # Parameters ################################################## + self.args = args self.fc = fc self.gain = gain self.ppm = ppm @@ -109,40 +113,43 @@ class grgsm_livemon(gr.top_block, Qt.QWidget): ) 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_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_control_panel(False) -# -# if not True: -# self.qtgui_freq_sink_x_0.disable_legend() -# -# if complex == type(float()): -# self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) -# -# 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 xrange(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.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_control_panel(False) + + if not True: + self.qtgui_freq_sink_x_0.disable_legend() + + if "complex" == "float" or "complex" == "msg_float": + self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) + + 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 xrange(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_layout.addWidget(self._qtgui_freq_sink_x_0_win) - self.gsm_sdcch8_demapper_0 = grgsm.gsm_sdcch8_demapper(1) - self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([])) - self.gsm_message_printer_1 = grgsm.message_printer(pmt.intern(""), False) + self.gsm_sdcch8_demapper_0 = grgsm.gsm_sdcch8_demapper( + timeslot_nr=1, + ) + self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([]), False) + self.gsm_message_printer_1 = grgsm.message_printer(pmt.intern(""), False, + False, False) self.gsm_input_0 = grgsm.gsm_input( ppm=0, osr=4, @@ -152,17 +159,19 @@ class grgsm_livemon(gr.top_block, Qt.QWidget): self.gsm_decryption_0 = grgsm.decryption(([]), 1) self.gsm_control_channels_decoder_0_0 = grgsm.control_channels_decoder() self.gsm_control_channels_decoder_0 = grgsm.control_channels_decoder() - self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc-shiftoff) - self.gsm_bcch_ccch_demapper_0 = grgsm.gsm_bcch_ccch_demapper(0) - self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", "4729", 10000) - self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000) + self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc-shiftoff, samp_rate) + self.gsm_bcch_ccch_demapper_0 = grgsm.gsm_bcch_ccch_demapper( + timeslot_nr=0, + ) + self.blocks_socket_pdu_0_0 = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", "4729", 10000, False) + self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000, False) self.blocks_rotator_cc_0 = blocks.rotator_cc(-2*pi*shiftoff/samp_rate) ################################################## # Connections ################################################## self.msg_connect((self.gsm_bcch_ccch_demapper_0, 'bursts'), (self.gsm_control_channels_decoder_0, 'bursts')) - self.msg_connect((self.gsm_clock_offset_control_0, 'ppm'), (self.gsm_input_0, 'ppm_in')) + self.msg_connect((self.gsm_clock_offset_control_0, 'ctrl'), (self.gsm_input_0, 'ctrl_in')) self.msg_connect((self.gsm_control_channels_decoder_0, 'msgs'), (self.blocks_socket_pdu_0, 'pdus')) self.msg_connect((self.gsm_control_channels_decoder_0, 'msgs'), (self.gsm_message_printer_1, 'msgs')) self.msg_connect((self.gsm_control_channels_decoder_0_0, 'msgs'), (self.blocks_socket_pdu_0, 'pdus')) @@ -182,6 +191,13 @@ class grgsm_livemon(gr.top_block, Qt.QWidget): self.settings.setValue("geometry", self.saveGeometry()) event.accept() + + def get_args(self): + return self.args + + def set_args(self, args): + self.args = args + def get_fc(self): return self.fc @@ -210,9 +226,9 @@ class grgsm_livemon(gr.top_block, Qt.QWidget): def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.blocks_rotator_cc_0.set_phase_inc(-2*pi*self.shiftoff/self.samp_rate) - self.gsm_input_0.set_samp_rate_in(self.samp_rate) self.qtgui_freq_sink_x_0.set_frequency_range(self.fc_slider, self.samp_rate) self.rtlsdr_source_0.set_sample_rate(self.samp_rate) + self.gsm_input_0.set_samp_rate_in(self.samp_rate) def get_shiftoff(self): return self.shiftoff @@ -246,28 +262,40 @@ class grgsm_livemon(gr.top_block, Qt.QWidget): self.rtlsdr_source_0.set_center_freq(self.fc_slider-self.shiftoff, 0) -if __name__ == '__main__': +def argument_parser(): parser = OptionParser(option_class=eng_option, usage="%prog: [options]") - parser.add_option("-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(939.4e6), + parser.add_option( + "", "--args", dest="args", type="string", default="", + help="Set Device Arguments [default=%default]") + parser.add_option( + "-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(939.4e6), help="Set fc [default=%default]") - parser.add_option("-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30), + parser.add_option( + "-g", "--gain", dest="gain", type="eng_float", default=eng_notation.num_to_str(30), help="Set gain [default=%default]") - parser.add_option("-p", "--ppm", dest="ppm", type="intx", default=0, + parser.add_option( + "-p", "--ppm", dest="ppm", type="intx", default=0, help="Set ppm [default=%default]") - parser.add_option("-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(2000000.052982), + parser.add_option( + "-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(2000000.052982), help="Set samp_rate [default=%default]") - parser.add_option("-o", "--shiftoff", dest="shiftoff", type="eng_float", default=eng_notation.num_to_str(400e3), + parser.add_option( + "-o", "--shiftoff", dest="shiftoff", type="eng_float", default=eng_notation.num_to_str(400e3), help="Set shiftoff [default=%default]") - parser.add_option("", "--args", dest="args", type="string", default="", - help="Set device arguments [default=%default]") - - (options, args) = parser.parse_args() -# from distutils.version import StrictVersion -# if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): -# Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster')) - Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui','style','raster')) + return parser + + +def main(top_block_cls=grgsm_livemon, options=None): + if options is None: + options, _ = argument_parser().parse_args() + + from distutils.version import StrictVersion + if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): + style = gr.prefs().get_string('qtgui', 'style', 'raster') + Qt.QApplication.setGraphicsSystem(style) qapp = Qt.QApplication(sys.argv) - tb = grgsm_livemon(fc=options.fc, gain=options.gain, ppm=options.ppm, samp_rate=options.samp_rate, shiftoff=options.shiftoff, args=options.args) + + tb = top_block_cls(args=options.args, fc=options.fc, gain=options.gain, ppm=options.ppm, samp_rate=options.samp_rate, shiftoff=options.shiftoff) tb.start() tb.show() @@ -276,4 +304,7 @@ if __name__ == '__main__': tb.wait() qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) qapp.exec_() - tb = None # to clean up Qt widgets + + +if __name__ == '__main__': + main() diff --git a/apps/grgsm_livemon.grc b/apps/grgsm_livemon.grc index 22c30b0..9c3945d 100644 --- a/apps/grgsm_livemon.grc +++ b/apps/grgsm_livemon.grc @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<?grc format='1' created='3.7.8'?> +<?grc format='1' created='3.7.9'?> <flow_graph> <timestamp>Sat Dec 13 10:49:59 2014</timestamp> <block> @@ -9,10 +9,6 @@ <value>Piotr Krysik</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>window_size</key> <value>2280, 1024</value> </param> @@ -45,6 +41,10 @@ <value>qt_gui</value> </param> <param> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> <key>id</key> <value>grgsm_livemon</value> </param> @@ -53,10 +53,18 @@ <value>0</value> </param> <param> + <key>qt_qss_theme</key> + <value></value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> <param> + <key>run_command</key> + <value>{python} -u {filename}</value> + </param> + <param> <key>run_options</key> <value>prompt</value> </param> @@ -594,14 +602,6 @@ <key>timeslot_nr</key> <value>0</value> </param> - <param> - <key>channel_types</key> - <value>[1,2,2,2,2,2,2,2,2,2]</value> - </param> - <param> - <key>starts_fn_mod51</key> - <value>[2,6,12,16,22,26,32,36,42,46]</value> - </param> </block> <block> <key>gsm_clock_offset_control</key> @@ -645,6 +645,10 @@ <key>fc</key> <value>fc-shiftoff</value> </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> </block> <block> <key>gsm_control_channels_decoder</key> @@ -970,14 +974,6 @@ <key>timeslot_nr</key> <value>1</value> </param> - <param> - <key>channel_types</key> - <value>[8,8,8,8,8,8,8,8,136,136,136,136]</value> - </param> - <param> - <key>starts_fn_mod51</key> - <value>[0,4,8,12,16,20,24,28,32,36,40,44]</value> - </param> </block> <block> <key>import</key> @@ -2854,8 +2850,8 @@ <connection> <source_block_id>gsm_clock_offset_control_0</source_block_id> <sink_block_id>gsm_input_0</sink_block_id> - <source_key>ppm</source_key> - <sink_key>ppm_in</sink_key> + <source_key>ctrl</source_key> + <sink_key>ctrl_in</sink_key> </connection> <connection> <source_block_id>gsm_control_channels_decoder_0</source_block_id> diff --git a/apps/grgsm_scanner b/apps/grgsm_scanner index ebfdb7a..2524a63 100755 --- a/apps/grgsm_scanner +++ b/apps/grgsm_scanner @@ -84,7 +84,7 @@ class receiver_with_decoder(grgsm.hier_block): ################################################## self.msg_connect(self.gsm_bcch_ccch_demapper_0, 'bursts', self, 'bursts') self.msg_connect(self.gsm_bcch_ccch_demapper_0, 'bursts', self.gsm_control_channels_decoder_0, 'bursts') - self.msg_connect(self.gsm_clock_offset_control_0, 'ppm', self.gsm_input_0, 'ppm_in') + self.msg_connect(self.gsm_clock_offset_control_0, 'ctrl', self.gsm_input_0, 'ctrl_in') self.msg_connect(self.gsm_control_channels_decoder_0, 'msgs', self, 'msgs') self.msg_connect(self.gsm_receiver_0, 'C0', self.gsm_bcch_ccch_demapper_0, 'bursts') self.msg_connect(self.gsm_receiver_0, 'measurements', self.gsm_clock_offset_control_0, 'measurements') |