def test_008_complete_prefix_fnr_fcount (self): """ Complete bursts, no prefix, with frame number, frame count, and ignoring dummy bursts Bursts 4-7 are dummy bursts """ framenumbers_input = [2569043, 2569044, 2569045, 2569046, 1099602, 1099603, 1099604, 1099605] timeslots_input = [2, 2, 2, 2, 4, 4, 4, 4] bursts_input = [ "0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000" ] expected_lines = [ "test_008: 2569043 3967625: 0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "test_008: 2569044 3967658: 0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "test_008: 2569045 3967691: 0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "test_008: 2569046 3967724: 0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000" ] src = grgsm.burst_source(framenumbers_input, timeslots_input, bursts_input) printer = grgsm.bursts_printer(pmt.intern("test_008: "), True, True, False, True) self.tb.msg_connect(src, "out", printer, "bursts") self.tb.run() self.assertEqual(self.getOutput(), self.getOutputExpected(expected_lines))
def test_002_complete_bursts_prefix (self): """ Complete bursts, with a string prefix """ framenumbers_input = [2569043, 2569044, 2569045, 2569046] timeslots_input = [2, 2, 2, 2] bursts_input = [ "0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000" ] expected_lines = [ "Test 0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "Test 0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "Test 0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "Test 0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000" ] src = grgsm.burst_source(framenumbers_input, timeslots_input, bursts_input) printer = grgsm.bursts_printer(pmt.intern("Test "), False, False, False, False) self.tb.msg_connect(src, "out", printer, "bursts") self.tb.run() self.assertEqual(self.getOutput(), self.getOutputExpected(expected_lines))
def test_005_complete_bursts_fnr_fcount (self): """ Complete bursts, no prefix, with frame number and frame count """ framenumbers_input = [2569043, 2569044, 2569045, 2569046] timeslots_input = [2, 2, 2, 2] bursts_input = [ "0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000" ] expected_lines = [ "2569043 3967625: 0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "2569044 3967658: 0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "2569045 3967691: 0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "2569046 3967724: 0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000" ] src = grgsm.burst_source(framenumbers_input, timeslots_input, bursts_input) printer = grgsm.bursts_printer(pmt.intern(""), True, True, False, False) self.tb.msg_connect(src, "out", printer, "bursts") self.tb.run() self.assertEqual(self.getOutput(), self.getOutputExpected(expected_lines))
def test_006_payload_prefix_fnr_fcount (self): """ Payload only, no prefix, with frame number and frame count Bursts 4-7 are dummy bursts """ framenumbers_input = [2569043, 2569044, 2569045, 2569046, 1099602, 1099603, 1099604, 1099605] timeslots_input = [2, 2, 2, 2, 4, 4, 4, 4] bursts_input = [ "0001100000010010011110111110011111000000001010001111000000001000110101110010000011010111100101101010000001111010100010110111101011101011100000101000", "0001000101111101111110000010100001011011111010111110101011101000110101110010000011010111110110111101101111110000011011010111011111001011101000011000", "0000001000011110111110101011001000110000000000110110101100011000110101110010000011010111001010100101011111001000111100000100000111111000000101110000", "0001101010111110010001010110101100000011101100011111110100101000110101110010000011010111111000000001010010111001111111011001000000001001000011101000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000", "0001111101101110110000010100100111000001001000100000001111100011100010111000101110001010111010010100011001100111001111010011111000100101111101010000" ] expected_lines = [ "test_006: 2569043 3967625: 110000001001001111011111001111100000000101000111100000000100101101010000001111010100010110111101011101011100000101", "test_006: 2569044 3967658: 100010111110111111000001010000101101111101011111010101110110110111101101111110000011011010111011111001011101000011", "test_006: 2569045 3967691: 000100001111011111010101100100011000000000011011010110001001010100101011111001000111100000100000111111000000101110", "test_006: 2569046 3967724: 110101011111001000101011010110000001110110001111111010010111000000001010010111001111111011001000000001001000011101", "test_006: 1099602 1699146: 111110110111011000001010010011100000100100010000000111110111010010100011001100111001111010011111000100101111101010", "test_006: 1099603 1699179: 111110110111011000001010010011100000100100010000000111110111010010100011001100111001111010011111000100101111101010", "test_006: 1099604 1699212: 111110110111011000001010010011100000100100010000000111110111010010100011001100111001111010011111000100101111101010", "test_006: 1099605 1699245: 111110110111011000001010010011100000100100010000000111110111010010100011001100111001111010011111000100101111101010" ] src = grgsm.burst_source(framenumbers_input, timeslots_input, bursts_input) printer = grgsm.bursts_printer(pmt.intern("test_006: "), True, True, True, False) self.tb.msg_connect(src, "out", printer, "bursts") self.tb.run() self.assertEqual(self.getOutput(), self.getOutputExpected(expected_lines))
def __init__(self, fc, gain, samp_rate, ppm, arfcn, cfile=None, burst_file=None, band=None, verbose=False, rec_length=None): gr.top_block.__init__(self, "Gr-gsm Capture") ################################################## # Parameters ################################################## self.fc = fc self.gain = gain self.samp_rate = samp_rate self.ppm = ppm self.arfcn = arfcn self.cfile = cfile self.burst_file = burst_file self.band = band self.verbose = verbose self.shiftoff = shiftoff = 400e3 self.rec_length = rec_length ################################################## # Processing Blocks ################################################## self.rtlsdr_source = osmosdr.source( args="numchan=" + str(1) + " " + "" ) self.rtlsdr_source.set_sample_rate(samp_rate) self.rtlsdr_source.set_center_freq(fc - shiftoff, 0) self.rtlsdr_source.set_freq_corr(ppm, 0) self.rtlsdr_source.set_dc_offset_mode(2, 0) self.rtlsdr_source.set_iq_balance_mode(2, 0) self.rtlsdr_source.set_gain_mode(True, 0) self.rtlsdr_source.set_gain(gain, 0) self.rtlsdr_source.set_if_gain(20, 0) self.rtlsdr_source.set_bb_gain(20, 0) self.rtlsdr_source.set_antenna("", 0) self.rtlsdr_source.set_bandwidth(250e3+abs(shiftoff), 0) self.blocks_rotator = blocks.rotator_cc(-2*pi*shiftoff/samp_rate) if self.rec_length is not None: self.blocks_head_0 = blocks.head(gr.sizeof_gr_complex, int(samp_rate*rec_length)) if self.verbose or self.burst_file: self.gsm_receiver = grgsm.receiver(4, ([self.arfcn]), ([])) self.gsm_input = grgsm.gsm_input( ppm=0, osr=4, fc=fc, samp_rate_in=samp_rate, ) self.gsm_clock_offset_control = grgsm.clock_offset_control(fc-shiftoff) if self.burst_file: self.gsm_burst_file_sink = grgsm.burst_file_sink(self.burst_file) if self.cfile: self.blocks_file_sink = blocks.file_sink(gr.sizeof_gr_complex*1, self.cfile, False) self.blocks_file_sink.set_unbuffered(False) if self.verbose: self.gsm_bursts_printer_0 = grgsm.bursts_printer(pmt.intern(""), False, False, False, False) ################################################## # Connections ################################################## if self.rec_length is not None: #if recording length is defined connect head block after the source self.connect((self.rtlsdr_source, 0), (self.blocks_head_0, 0)) self.connect((self.blocks_head_0, 0), (self.blocks_rotator, 0)) else: self.connect((self.rtlsdr_source, 0), (self.blocks_rotator, 0)) if self.cfile: self.connect((self.blocks_rotator, 0), (self.blocks_file_sink, 0)) if self.verbose or self.burst_file: self.connect((self.gsm_input, 0), (self.gsm_receiver, 0)) self.connect((self.blocks_rotator, 0), (self.gsm_input, 0)) self.msg_connect(self.gsm_clock_offset_control, "ppm", self.gsm_input, "ppm_in") self.msg_connect(self.gsm_receiver, "measurements", self.gsm_clock_offset_control, "measurements") if self.burst_file: self.msg_connect(self.gsm_receiver, "C0", self.gsm_burst_file_sink, "in") if self.verbose: self.msg_connect(self.gsm_receiver, "C0", self.gsm_bursts_printer_0, "bursts")
def __init__(self, fc, gain, samp_rate, ppm, arfcn, cfile=None, burst_file=None, band=None, verbose=False, rec_length=None, args=""): gr.top_block.__init__(self, "Gr-gsm Capture") ################################################## # Parameters ################################################## self.fc = fc self.gain = gain self.samp_rate = samp_rate self.ppm = ppm self.arfcn = arfcn self.cfile = cfile self.burst_file = burst_file self.band = band self.verbose = verbose self.shiftoff = shiftoff = 400e3 self.rec_length = rec_length ################################################## # Processing Blocks ################################################## self.rtlsdr_source = osmosdr.source( args="numchan=" + str(1) + " " + "" ) self.rtlsdr_source.set_sample_rate(samp_rate) self.rtlsdr_source.set_center_freq(fc - shiftoff, 0) self.rtlsdr_source.set_freq_corr(ppm, 0) self.rtlsdr_source.set_dc_offset_mode(2, 0) self.rtlsdr_source.set_iq_balance_mode(2, 0) self.rtlsdr_source.set_gain_mode(True, 0) self.rtlsdr_source.set_gain(gain, 0) self.rtlsdr_source.set_if_gain(20, 0) self.rtlsdr_source.set_bb_gain(20, 0) self.rtlsdr_source.set_antenna("", 0) self.rtlsdr_source.set_bandwidth(250e3+abs(shiftoff), 0) self.blocks_rotator = blocks.rotator_cc(-2*pi*shiftoff/samp_rate) if self.rec_length is not None: self.blocks_head_0 = blocks.head(gr.sizeof_gr_complex, int(samp_rate*rec_length)) if self.verbose or self.burst_file: self.gsm_receiver = grgsm.receiver(4, ([self.arfcn]), ([])) self.gsm_input = grgsm.gsm_input( ppm=0, osr=4, fc=fc, samp_rate_in=samp_rate, ) self.gsm_clock_offset_control = grgsm.clock_offset_control(fc-shiftoff) if self.burst_file: self.gsm_burst_file_sink = grgsm.burst_file_sink(self.burst_file) if self.cfile: self.blocks_file_sink = blocks.file_sink(gr.sizeof_gr_complex*1, self.cfile, False) self.blocks_file_sink.set_unbuffered(False) if self.verbose: self.gsm_bursts_printer_0 = grgsm.bursts_printer(pmt.intern(""), False, False, False, False) ################################################## # Connections ################################################## if self.rec_length is not None: #if recording length is defined connect head block after the source self.connect((self.rtlsdr_source, 0), (self.blocks_head_0, 0)) self.connect((self.blocks_head_0, 0), (self.blocks_rotator, 0)) else: self.connect((self.rtlsdr_source, 0), (self.blocks_rotator, 0)) if self.cfile: self.connect((self.blocks_rotator, 0), (self.blocks_file_sink, 0)) if self.verbose or self.burst_file: self.connect((self.gsm_input, 0), (self.gsm_receiver, 0)) self.connect((self.blocks_rotator, 0), (self.gsm_input, 0)) self.msg_connect(self.gsm_clock_offset_control, "ppm", self.gsm_input, "ppm_in") self.msg_connect(self.gsm_receiver, "measurements", self.gsm_clock_offset_control, "measurements") if self.burst_file: self.msg_connect(self.gsm_receiver, "C0", self.gsm_burst_file_sink, "in") if self.verbose: self.msg_connect(self.gsm_receiver, "C0", self.gsm_bursts_printer_0, "bursts")
def __init__(self, filename, samp_rate, arfcn, chan_mode='BCCH', udp_port=4000, max_timeslot=0, verbose=True, args="", connectToSelf=False): """ """ gr.top_block.__init__(self, "FileAnalyzer") ################################################## # Parameters ################################################## self.arfcn = arfcn for band in grgsm.arfcn.get_bands(): if grgsm.arfcn.is_valid_arfcn(self.arfcn, band): self.fc = grgsm.arfcn.arfcn2downlink(arfcn, band) break self.samp_rate = samp_rate self.arfcn = arfcn self.udp_port = udp_port self.verbose = verbose self.cfile = filename.encode('utf-8') self.max_timeslot = max_timeslot self.chan_mode = chan_mode ################################################## # Processing Blocks ################################################## self.file_source = blocks.file_source(gr.sizeof_gr_complex * 1, self.cfile, False) self.receiver = grgsm.receiver(4, ([0]), ([])) if self.fc is not None: self.input_adapter = grgsm.gsm_input(ppm=0, osr=4, fc=self.fc, samp_rate_in=self.samp_rate) self.offset_control = grgsm.clock_offset_control(self.fc) else: self.input_adapter = grgsm.gsm_input(ppm=0, osr=4, samp_rate_in=self.samp_rate) self.bursts_printer = grgsm.bursts_printer(pmt.intern(""), True, True, True, True) self.timeslot_filters = [] for i in range(0, self.max_timeslot + 1): self.timeslot_filters.append(grgsm.burst_timeslot_filter(i)) self.dummy_burst_filters = [] for i in range(0, self.max_timeslot + 1): self.dummy_burst_filters.append(grgsm.dummy_burst_filter()) self.other_demappers = [] #Control channel demapper for timeslot 0 self.control_demapper = grgsm.gsm_bcch_ccch_demapper(0) #Demapping other timeslots than 0 to BCCH does not really make sense # if self.chan_mode == 'BCCH': # #Control channel demapper for other timeslots # for i in range(1, self.timeslot + 1): # self.other_demappers.append(grgsm.universal_ctrl_chans_demapper(0, ([2,6,12,16,22,26,32,36,42,46]), ([1,2,2,2,2,2,2,2,2,2]))) # #self.bcch_demapper = grgsm.universal_ctrl_chans_demapper(0, ([2,6,12,16,22,26,32,36,42,46]), ([1,2,2,2,2,2,2,2,2,2])) # #This is for a newer version of grgsm # #self.bcch_demapper = grgsm.gsm_bcch_ccch_demapper(self.timeslot) if self.chan_mode == 'BCCH_SDCCH4': for i in range(1, self.max_timeslot + 1): self.other_demappers.append(grgsm.gsm_sdcch4_demapper(i)) elif self.chan_mode == 'SDCCH8': for i in range(1, self.max_timeslot + 1): #self.other_demappers.append(grgsm.universal_ctrl_chans_demapper(i, ([0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44]), ([8, 8, 8, 8, 8, 8, 8, 8, 136, 136, 136, 136]))) self.other_demappers.append(grgsm.gsm_sdcch8_demapper(i)) # else: #Defaults to SDCCH8 for i in range(1, self.max_timeslot + 1): #self.other_demappers.append(grgsm.universal_ctrl_chans_demapper(i, ([0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44]), ([8, 8, 8, 8, 8, 8, 8, 8, 136, 136, 136, 136]))) self.other_demappers.append(grgsm.gsm_sdcch8_demapper(i)) self.decoders = [] for i in range(0, self.max_timeslot + 1): self.decoders.append(grgsm.control_channels_decoder()) #Server socket if connectToSelf: self.serversocket = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", str(self.udp_port), 10000) self.socket_pdu = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", str(self.udp_port), 10000) if self.verbose: self.message_printer = grgsm.message_printer( pmt.intern(""), True, True, False) ################################################## # Asynch Message Connections ################################################## 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.receiver, "measurements", self.offset_control, "measurements") #for df in self.dummy_burst_filters: # self.msg_connect(self.receiver, "C0", df, "in") #self.msg_connect(self.receiver, "C0", self.dummy_burst_filter, "in") #for index, tf in enumerate(self.dummy_burst_filters): # self.msg_connect(self.dummy_burst_filters[index], "out", self.timeslot_filters[index], "in") #self.msg_connect(self.dummy_burst_filter, "out", self.timeslot_filter, "in") #if self.print_bursts: #for tf in self.timeslot_filters: # self.msg_connect(tf, "out", self.bursts_printer, 'bursts') #self.msg_connect(self.timeslot_filter, "out", self.bursts_printer, 'bursts') #Connect the timeslot 0 demapper and decoder #self.msg_connect(self.timeslot_filters[0], "out", self.control_demapper, "bursts") self.msg_connect(self.receiver, "C0", self.control_demapper, "bursts") self.msg_connect(self.control_demapper, "bursts", self.decoders[0], "bursts") self.msg_connect(self.decoders[0], "msgs", self.socket_pdu, "pdus") if self.verbose: self.msg_connect(self.decoders[0], "msgs", self.message_printer, "msgs") #Connect the demappers and decoders for the other timeslots for i in range(1, self.max_timeslot + 1): self.msg_connect(self.receiver, "C0", self.other_demappers[i - 1], "bursts") #self.msg_connect(self.timeslot_filters[i], "out", self.other_demappers[i - 1], "bursts") self.msg_connect(self.other_demappers[i - 1], "bursts", self.decoders[i], "bursts") self.msg_connect(self.decoders[i], "msgs", self.socket_pdu, "pdus") if self.verbose: self.msg_connect(self.decoders[i], "msgs", self.message_printer, "msgs")
def __init__(self, filename, samp_rate, arfcn, chan_mode='BCCH', udp_port=4000, max_timeslot=0, verbose=True, args="", connectToSelf=False): """ """ gr.top_block.__init__(self, "FileAnalyzer") ################################################## # Parameters ################################################## self.arfcn = arfcn for band in grgsm.arfcn.get_bands(): if grgsm.arfcn.is_valid_arfcn(self.arfcn, band): self.fc = grgsm.arfcn.arfcn2downlink(arfcn, band) break self.samp_rate = samp_rate self.arfcn = arfcn self.udp_port = udp_port self.verbose = verbose self.cfile = filename.encode('utf-8') self.max_timeslot = max_timeslot self.chan_mode = chan_mode ################################################## # Processing Blocks ################################################## self.file_source = blocks.file_source(gr.sizeof_gr_complex*1, self.cfile, False) self.receiver = grgsm.receiver(4, ([0]), ([])) if self.fc is not None: self.input_adapter = grgsm.gsm_input(ppm=0, osr=4, fc=self.fc, samp_rate_in=self.samp_rate) self.offset_control = grgsm.clock_offset_control(self.fc) else: self.input_adapter = grgsm.gsm_input(ppm=0, osr=4, samp_rate_in=self.samp_rate) self.bursts_printer = grgsm.bursts_printer(pmt.intern(""), True, True, True, True) self.timeslot_filters = [] for i in range(0, self.max_timeslot + 1): self.timeslot_filters.append(grgsm.burst_timeslot_filter(i)) self.dummy_burst_filters = [] for i in range(0, self.max_timeslot + 1): self.dummy_burst_filters.append(grgsm.dummy_burst_filter()) self.other_demappers = [] #Control channel demapper for timeslot 0 self.control_demapper = grgsm.gsm_bcch_ccch_demapper(0) #Demapping other timeslots than 0 to BCCH does not really make sense # if self.chan_mode == 'BCCH': # #Control channel demapper for other timeslots # for i in range(1, self.timeslot + 1): # self.other_demappers.append(grgsm.universal_ctrl_chans_demapper(0, ([2,6,12,16,22,26,32,36,42,46]), ([1,2,2,2,2,2,2,2,2,2]))) # #self.bcch_demapper = grgsm.universal_ctrl_chans_demapper(0, ([2,6,12,16,22,26,32,36,42,46]), ([1,2,2,2,2,2,2,2,2,2])) # #This is for a newer version of grgsm # #self.bcch_demapper = grgsm.gsm_bcch_ccch_demapper(self.timeslot) if self.chan_mode == 'BCCH_SDCCH4': for i in range(1, self.max_timeslot + 1): self.other_demappers.append(grgsm.gsm_sdcch4_demapper(i)) elif self.chan_mode == 'SDCCH8': for i in range(1, self.max_timeslot + 1): #self.other_demappers.append(grgsm.universal_ctrl_chans_demapper(i, ([0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44]), ([8, 8, 8, 8, 8, 8, 8, 8, 136, 136, 136, 136]))) self.other_demappers.append(grgsm.gsm_sdcch8_demapper(i)) # else: #Defaults to SDCCH8 for i in range(1, self.max_timeslot + 1): #self.other_demappers.append(grgsm.universal_ctrl_chans_demapper(i, ([0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44]), ([8, 8, 8, 8, 8, 8, 8, 8, 136, 136, 136, 136]))) self.other_demappers.append(grgsm.gsm_sdcch8_demapper(i)) self.decoders = [] for i in range(0, self.max_timeslot + 1): self.decoders.append(grgsm.control_channels_decoder()) #Server socket if connectToSelf: self.serversocket = blocks.socket_pdu("UDP_SERVER", "127.0.0.1", str(self.udp_port), 10000) self.socket_pdu = blocks.socket_pdu("UDP_CLIENT", "127.0.0.1", str(self.udp_port), 10000) if self.verbose: self.message_printer = grgsm.message_printer(pmt.intern(""), True, True, False) ################################################## # Asynch Message Connections ################################################## 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.receiver, "measurements", self.offset_control, "measurements") #for df in self.dummy_burst_filters: # self.msg_connect(self.receiver, "C0", df, "in") #self.msg_connect(self.receiver, "C0", self.dummy_burst_filter, "in") #for index, tf in enumerate(self.dummy_burst_filters): # self.msg_connect(self.dummy_burst_filters[index], "out", self.timeslot_filters[index], "in") #self.msg_connect(self.dummy_burst_filter, "out", self.timeslot_filter, "in") #if self.print_bursts: #for tf in self.timeslot_filters: # self.msg_connect(tf, "out", self.bursts_printer, 'bursts') #self.msg_connect(self.timeslot_filter, "out", self.bursts_printer, 'bursts') #Connect the timeslot 0 demapper and decoder #self.msg_connect(self.timeslot_filters[0], "out", self.control_demapper, "bursts") self.msg_connect(self.receiver, "C0", self.control_demapper, "bursts") self.msg_connect(self.control_demapper, "bursts", self.decoders[0], "bursts") self.msg_connect(self.decoders[0], "msgs", self.socket_pdu, "pdus") if self.verbose: self.msg_connect(self.decoders[0], "msgs", self.message_printer, "msgs") #Connect the demappers and decoders for the other timeslots for i in range(1, self.max_timeslot + 1): self.msg_connect(self.receiver, "C0", self.other_demappers[i-1], "bursts") #self.msg_connect(self.timeslot_filters[i], "out", self.other_demappers[i - 1], "bursts") self.msg_connect(self.other_demappers[i - 1], "bursts", self.decoders[i], "bursts") self.msg_connect(self.decoders[i], "msgs", self.socket_pdu, "pdus") if self.verbose: self.msg_connect(self.decoders[i], "msgs", self.message_printer, "msgs")