ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | ################################################## |
| 3 | # Gnuradio Python Flow Graph |
| 4 | # Title: Airprobe File |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 5 | # Generated: Sat Jan 3 00:02:07 2015 |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 6 | ################################################## |
| 7 | |
| 8 | from gnuradio import blocks |
| 9 | from gnuradio import eng_notation |
| 10 | from gnuradio import gr |
| 11 | from gnuradio.eng_option import eng_option |
| 12 | from gnuradio.filter import firdes |
| 13 | from optparse import OptionParser |
ptrkrysik | 3be74a7 | 2014-12-13 10:11:00 +0100 | [diff] [blame] | 14 | import grgsm |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 15 | import pmt |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 16 | |
| 17 | class airprobe_file(gr.top_block): |
| 18 | |
| 19 | def __init__(self, input_file_name="input.cfile", fc=937e6, samp_rate=1e6): |
| 20 | gr.top_block.__init__(self, "Airprobe File") |
| 21 | |
| 22 | ################################################## |
| 23 | # Parameters |
| 24 | ################################################## |
| 25 | self.input_file_name = input_file_name |
| 26 | self.fc = fc |
| 27 | self.samp_rate = samp_rate |
| 28 | |
| 29 | ################################################## |
| 30 | # Variables |
| 31 | ################################################## |
| 32 | self.SDCCH = SDCCH = 6 |
| 33 | self.RACH = RACH = 3 |
| 34 | self.PCH = PCH = 5 |
| 35 | self.CHANNEL_UNKNOWN = CHANNEL_UNKNOWN = 0 |
| 36 | self.CCCH = CCCH = 2 |
| 37 | self.BCCH = BCCH = 1 |
| 38 | self.AGCH = AGCH = 4 |
| 39 | |
| 40 | ################################################## |
| 41 | # Blocks |
| 42 | ################################################## |
ptrkrysik | 3be74a7 | 2014-12-13 10:11:00 +0100 | [diff] [blame] | 43 | self.gsm_universal_ctrl_chans_demapper_0 = grgsm.universal_ctrl_chans_demapper(([2,6,12,16,22,26,32,36,42,46]), ([BCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH,CCCH])) |
| 44 | self.gsm_receiver_0 = grgsm.receiver(4, ([0]), ([])) |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 45 | self.gsm_message_printer_0 = grgsm.message_printer(pmt.intern("")) |
ptrkrysik | 3be74a7 | 2014-12-13 10:11:00 +0100 | [diff] [blame] | 46 | self.gsm_input_0 = grgsm.gsm_input( |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 47 | ppm=0, |
| 48 | osr=4, |
| 49 | fc=fc, |
| 50 | samp_rate_in=samp_rate, |
| 51 | ) |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 52 | self.gsm_control_channels_decoder_0 = grgsm.control_channels_decoder() |
| 53 | self.gsm_clock_offset_control_0 = grgsm.clock_offset_control(fc) |
| 54 | self.blocks_socket_pdu_0 = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", "4729", 10000, False) |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 55 | self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, input_file_name, False) |
| 56 | |
| 57 | ################################################## |
| 58 | # Connections |
| 59 | ################################################## |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 60 | self.connect((self.blocks_file_source_0, 0), (self.gsm_input_0, 0)) |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 61 | self.connect((self.gsm_input_0, 0), (self.gsm_receiver_0, 0)) |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 62 | |
| 63 | ################################################## |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 64 | # Message Connections |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 65 | ################################################## |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 66 | self.msg_connect(self.gsm_control_channels_decoder_0, "msgs", self.blocks_socket_pdu_0, "pdus") |
ptrkrysik | 3b77654 | 2015-01-03 00:06:39 +0100 | [diff] [blame] | 67 | self.msg_connect(self.gsm_clock_offset_control_0, "ppm", self.gsm_input_0, "ppm_in") |
| 68 | self.msg_connect(self.gsm_receiver_0, "C0", self.gsm_universal_ctrl_chans_demapper_0, "bursts") |
| 69 | self.msg_connect(self.gsm_universal_ctrl_chans_demapper_0, "bursts", self.gsm_control_channels_decoder_0, "bursts") |
| 70 | self.msg_connect(self.gsm_control_channels_decoder_0, "msgs", self.gsm_message_printer_0, "msgs") |
| 71 | self.msg_connect(self.gsm_receiver_0, "measurements", self.gsm_clock_offset_control_0, "measurements") |
ptrkrysik | a136ff5 | 2014-11-28 23:38:23 +0100 | [diff] [blame] | 72 | |
| 73 | |
| 74 | def get_input_file_name(self): |
| 75 | return self.input_file_name |
| 76 | |
| 77 | def set_input_file_name(self, input_file_name): |
| 78 | self.input_file_name = input_file_name |
| 79 | self.blocks_file_source_0.open(self.input_file_name, False) |
| 80 | |
| 81 | def get_fc(self): |
| 82 | return self.fc |
| 83 | |
| 84 | def set_fc(self, fc): |
| 85 | self.fc = fc |
| 86 | self.gsm_input_0.set_fc(self.fc) |
| 87 | |
| 88 | def get_samp_rate(self): |
| 89 | return self.samp_rate |
| 90 | |
| 91 | def set_samp_rate(self, samp_rate): |
| 92 | self.samp_rate = samp_rate |
| 93 | self.gsm_input_0.set_samp_rate_in(self.samp_rate) |
| 94 | |
| 95 | def get_SDCCH(self): |
| 96 | return self.SDCCH |
| 97 | |
| 98 | def set_SDCCH(self, SDCCH): |
| 99 | self.SDCCH = SDCCH |
| 100 | |
| 101 | def get_RACH(self): |
| 102 | return self.RACH |
| 103 | |
| 104 | def set_RACH(self, RACH): |
| 105 | self.RACH = RACH |
| 106 | |
| 107 | def get_PCH(self): |
| 108 | return self.PCH |
| 109 | |
| 110 | def set_PCH(self, PCH): |
| 111 | self.PCH = PCH |
| 112 | |
| 113 | def get_CHANNEL_UNKNOWN(self): |
| 114 | return self.CHANNEL_UNKNOWN |
| 115 | |
| 116 | def set_CHANNEL_UNKNOWN(self, CHANNEL_UNKNOWN): |
| 117 | self.CHANNEL_UNKNOWN = CHANNEL_UNKNOWN |
| 118 | |
| 119 | def get_CCCH(self): |
| 120 | return self.CCCH |
| 121 | |
| 122 | def set_CCCH(self, CCCH): |
| 123 | self.CCCH = CCCH |
| 124 | |
| 125 | def get_BCCH(self): |
| 126 | return self.BCCH |
| 127 | |
| 128 | def set_BCCH(self, BCCH): |
| 129 | self.BCCH = BCCH |
| 130 | |
| 131 | def get_AGCH(self): |
| 132 | return self.AGCH |
| 133 | |
| 134 | def set_AGCH(self, AGCH): |
| 135 | self.AGCH = AGCH |
| 136 | |
| 137 | if __name__ == '__main__': |
| 138 | parser = OptionParser(option_class=eng_option, usage="%prog: [options]") |
| 139 | parser.add_option("-i", "--input-file-name", dest="input_file_name", type="string", default="input.cfile", |
| 140 | help="Set input.cfile [default=%default]") |
| 141 | parser.add_option("-f", "--fc", dest="fc", type="eng_float", default=eng_notation.num_to_str(937e6), |
| 142 | help="Set fc [default=%default]") |
| 143 | parser.add_option("-s", "--samp-rate", dest="samp_rate", type="eng_float", default=eng_notation.num_to_str(1e6), |
| 144 | help="Set samp_rate [default=%default]") |
| 145 | (options, args) = parser.parse_args() |
| 146 | tb = airprobe_file(input_file_name=options.input_file_name, fc=options.fc, samp_rate=options.samp_rate) |
| 147 | tb.start() |
| 148 | tb.wait() |