diff --git a/CMakeLists.txt b/CMakeLists.txt index a9fd553..56c1a6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -268,8 +268,7 @@ if(ENABLE_PYTHON) add_subdirectory(swig) add_subdirectory(python) add_subdirectory(grc) - #Apps not ported to Qt - #add_subdirectory(apps) + add_subdirectory(apps) endif(ENABLE_PYTHON) add_subdirectory(docs) diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 0aef374..baece8b 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -27,8 +27,8 @@ GR_PYTHON_INSTALL( GR_PYTHON_INSTALL( PROGRAMS - osmocom_fft - osmocom_siggen + # osmocom_fft + # osmocom_siggen osmocom_siggen_nogui osmocom_spectrum_sense DESTINATION ${GR_RUNTIME_DIR} diff --git a/apps/osmocom_siggen b/apps/osmocom_siggen index bd92eac..1727f44 100755 --- a/apps/osmocom_siggen +++ b/apps/osmocom_siggen @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright 2009,2011,2012 Free Software Foundation, Inc. # diff --git a/apps/osmocom_siggen_base.py b/apps/osmocom_siggen_base.py index b6e9a0c..f07f3f6 100644 --- a/apps/osmocom_siggen_base.py +++ b/apps/osmocom_siggen_base.py @@ -109,9 +109,9 @@ class gsm_source_c(gr.hier_block2): [0,0,0], ] burst = sum(chunks,[]) - burst = sum(map(list, zip(burst, (1,) * len(burst))), []) + burst = sum(list(map(list, list(zip(burst, (1,) * len(burst))))), []) burst += [1,0] * (l-148) - return map(int, burst) + return list(map(int, burst)) def gen_gsm_frame(self): return \ @@ -186,7 +186,7 @@ class top_block(gr.top_block, pubsub): try: self._sink.get_sample_rates().start() except RuntimeError: - print "Sink has no sample rates (wrong device arguments?)." + print("Sink has no sample rates (wrong device arguments?).") sys.exit(1) # Set the clock source: @@ -202,60 +202,60 @@ class top_block(gr.top_block, pubsub): if(options.gain): gain = self._sink.set_gain(options.gain) if self._verbose: - print "Set gain to:", gain + print("Set gain to:", gain) if self._verbose: gain_names = self._sink.get_gain_names() for name in gain_names: range = self._sink.get_gain_range(name) - print "%s gain range: start %d stop %d step %d" % (name, range.start(), range.stop(), range.step()) + print("%s gain range: start %d stop %d step %d" % (name, range.start(), range.stop(), range.step())) if options.gains: for tuple in options.gains.split(","): name, gain = tuple.split(":") gain = int(gain) - print "Setting gain %s to %d." % (name, gain) + print("Setting gain %s to %d." % (name, gain)) self._sink.set_gain(gain, name) if self._verbose: rates = self._sink.get_sample_rates() - print 'Supported sample rates %d-%d step %d.' % (rates.start(), rates.stop(), rates.step()) + print('Supported sample rates %d-%d step %d.' % (rates.start(), rates.stop(), rates.step())) # Set the antenna if self._verbose: - print "setting antenna..." + print("setting antenna...") if(options.antenna): ant = self._sink.set_antenna(options.antenna, 0) if self._verbose: - print "Set antenna to:", ant + print("Set antenna to:", ant) try: self.publish(FREQ_RANGE_KEY, self._sink.get_freq_range) except: - print "Couldn't publish %s" % FREQ_RANGE_KEY + print("Couldn't publish %s" % FREQ_RANGE_KEY) try: for name in self.get_gain_names(): self.publish(GAIN_RANGE_KEY(name), (lambda self=self,name=name: self._sink.get_gain_range(name))) except: - print "Couldn't publish %s" % FREQ_RANGE_KEY + print("Couldn't publish %s" % FREQ_RANGE_KEY) try: self.publish(BWIDTH_RANGE_KEY, self._sink.get_bandwidth_range) except: if self._verbose: - print "Couldn't publish %s" % BWIDTH_RANGE_KEY + print("Couldn't publish %s" % BWIDTH_RANGE_KEY) try: for name in self.get_gain_names(): self.publish(GAIN_KEY(name), (lambda self=self,name=name: self._sink.get_gain(name))) except: if self._verbose: - print "Couldn't publish GAIN_KEYs" + print("Couldn't publish GAIN_KEYs") try: self.publish(BWIDTH_KEY, self._sink.get_bandwidth) except: if self._verbose: - print "Couldn't publish %s" % BWIDTH_KEY + print("Couldn't publish %s" % BWIDTH_KEY) def get_gain_names(self): return self._sink.get_gain_names() @@ -277,7 +277,7 @@ class top_block(gr.top_block, pubsub): return True # Waveform not yet set if self._verbose: - print "Set sample rate to:", sr + print("Set sample rate to:", sr) return True @@ -286,27 +286,27 @@ class top_block(gr.top_block, pubsub): g = self[GAIN_RANGE_KEY(name)] gain = float(g.start()+g.stop())/2 if self._verbose: - print "Using auto-calculated mid-point gain" + print("Using auto-calculated mid-point gain") self[GAIN_KEY(name)] = gain return gain = self._sink.set_gain(gain, name) if self._verbose: - print "Set " + name + " gain to:", gain + print("Set " + name + " gain to:", gain) def set_bandwidth(self, bw): try: clipped_bw = self[BWIDTH_RANGE_KEY].clip(bw) except: if self._verbose: - print "couldn't clip bandwidth" + print("couldn't clip bandwidth") return if self._sink.get_bandwidth() != clipped_bw: bw = self._sink.set_bandwidth(clipped_bw) if self._verbose: - print "Set bandwidth to:", bw + print("Set bandwidth to:", bw) def set_dc_offset(self, value): correction = complex( self[DC_OFFSET_REAL], self[DC_OFFSET_IMAG] ) @@ -315,9 +315,9 @@ class top_block(gr.top_block, pubsub): self._sink.set_dc_offset( correction ) if self._verbose: - print "Set DC offset to", correction + print("Set DC offset to", correction) except RuntimeError as ex: - print ex + print(ex) def set_iq_balance(self, value): correction = complex( self[IQ_BALANCE_MAG], self[IQ_BALANCE_PHA] ) @@ -326,16 +326,16 @@ class top_block(gr.top_block, pubsub): self._sink.set_iq_balance( correction ) if self._verbose: - print "Set IQ balance to", correction + print("Set IQ balance to", correction) except RuntimeError as ex: - print ex + print(ex) def set_freq(self, freq): if freq is None: f = self[FREQ_RANGE_KEY] freq = float(f.start()+f.stop())/2.0 if self._verbose: - print "Using auto-calculated mid-point frequency" + print("Using auto-calculated mid-point frequency") self[TX_FREQ_KEY] = freq return @@ -343,22 +343,22 @@ class top_block(gr.top_block, pubsub): if freq is not None: self._freq = freq if self._verbose: - print "Set center frequency to", freq + print("Set center frequency to", freq) elif self._verbose: - print "Failed to set freq." + print("Failed to set freq.") return freq def set_freq_corr(self, ppm): if ppm is None: ppm = 0.0 if self._verbose: - print "Using frequency corrrection of", ppm + print("Using frequency corrrection of", ppm) self[FREQ_CORR_KEY] = ppm return ppm = self._sink.set_freq_corr(ppm) if self._verbose: - print "Set frequency correction to:", ppm + print("Set frequency correction to:", ppm) def set_waveform_freq(self, freq): if self[TYPE_KEY] == analog.GR_SIN_WAVE: @@ -433,24 +433,24 @@ class top_block(gr.top_block, pubsub): self.unlock() if self._verbose: - print "Set baseband modulation to:", waveforms[type] + print("Set baseband modulation to:", waveforms[type]) if type == analog.GR_SIN_WAVE: - print "Modulation frequency: %sHz" % (n2s(self[WAVEFORM_FREQ_KEY]),) - print "Initial phase:", self[WAVEFORM_OFFSET_KEY] + print("Modulation frequency: %sHz" % (n2s(self[WAVEFORM_FREQ_KEY]),)) + print("Initial phase:", self[WAVEFORM_OFFSET_KEY]) elif type == "2tone": - print "Tone 1: %sHz" % (n2s(self[WAVEFORM_FREQ_KEY]),) - print "Tone 2: %sHz" % (n2s(self[WAVEFORM2_FREQ_KEY]),) + print("Tone 1: %sHz" % (n2s(self[WAVEFORM_FREQ_KEY]),)) + print("Tone 2: %sHz" % (n2s(self[WAVEFORM2_FREQ_KEY]),)) elif type == "sweep": - print "Sweeping across %sHz to %sHz" % (n2s(-self[WAVEFORM_FREQ_KEY]/2.0),n2s(self[WAVEFORM_FREQ_KEY]/2.0)) - print "Sweep rate: %sHz" % (n2s(self[WAVEFORM2_FREQ_KEY]),) + print("Sweeping across %sHz to %sHz" % (n2s(-self[WAVEFORM_FREQ_KEY]/2.0),n2s(self[WAVEFORM_FREQ_KEY]/2.0))) + print("Sweep rate: %sHz" % (n2s(self[WAVEFORM2_FREQ_KEY]),)) elif type == "gsm": - print "GSM Burst Sequence" - print "TX amplitude:", self[AMPLITUDE_KEY] + print("GSM Burst Sequence") + print("TX amplitude:", self[AMPLITUDE_KEY]) def set_amplitude(self, amplitude): if amplitude < 0.0 or amplitude > 1.0: if self._verbose: - print "Amplitude out of range:", amplitude + print("Amplitude out of range:", amplitude) return False if self[TYPE_KEY] in (analog.GR_SIN_WAVE, analog.GR_CONST_WAVE, analog.GR_GAUSSIAN, analog.GR_UNIFORM): @@ -466,7 +466,7 @@ class top_block(gr.top_block, pubsub): return True # Waveform not yet set if self._verbose: - print "Set amplitude to:", amplitude + print("Set amplitude to:", amplitude) return True def get_options(): @@ -525,19 +525,19 @@ def get_options(): # the below does not run. def test_main(): if gr.enable_realtime_scheduling() != gr.RT_OK: - print "Note: failed to enable realtime scheduling, continuing" + print("Note: failed to enable realtime scheduling, continuing") # Grab command line options and create top block try: (options, args) = get_options() tb = top_block(options, args) - except RuntimeError, e: - print e + except RuntimeError as e: + print(e) sys.exit(1) tb.start() - raw_input('Press Enter to quit: ') + input('Press Enter to quit: ') tb.stop() tb.wait() diff --git a/apps/osmocom_siggen_nogui b/apps/osmocom_siggen_nogui index 0283fcf..5370cd0 100755 --- a/apps/osmocom_siggen_nogui +++ b/apps/osmocom_siggen_nogui @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright 2008,2009,2011,2012 Free Software Foundation, Inc. # @@ -26,19 +26,19 @@ import sys def main(): if gr.enable_realtime_scheduling() != gr.RT_OK: - print "Note: failed to enable realtime scheduling, continuing" + print("Note: failed to enable realtime scheduling, continuing") # Grab command line options and create top block try: (options, args) = osmocom_siggen.get_options() tb = osmocom_siggen.top_block(options, args) - except RuntimeError, e: - print e + except RuntimeError as e: + print(e) sys.exit(1) tb.start() - raw_input('Press Enter to quit: ') + input('Press Enter to quit: ') tb.stop() tb.wait() diff --git a/apps/osmocom_spectrum_sense b/apps/osmocom_spectrum_sense index ea365bb..9fea6f0 100755 --- a/apps/osmocom_spectrum_sense +++ b/apps/osmocom_spectrum_sense @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # # Copyright 2005,2007,2011 Free Software Foundation, Inc. # @@ -71,13 +71,13 @@ class tune(gr.feval_dd): # wait until msgq is empty before continuing while(self.tb.msgq.full_p()): - #print "msgq full, holding.." + #print("msgq full, holding..") time.sleep(0.1) return new_freq - except Exception, e: - print "tune: Exception: ", e + except Exception as e: + print("tune: Exception: ", e) class parse_msg(object): @@ -147,7 +147,7 @@ class my_top_block(gr.top_block): realtime = True else: realtime = False - print "Note: failed to enable realtime scheduling" + print("Note: failed to enable realtime scheduling") # build graph self.u = osmosdr.source(options.args) @@ -155,7 +155,7 @@ class my_top_block(gr.top_block): try: self.u.get_sample_rates().start() except RuntimeError: - print "Source has no sample rates (wrong device arguments?)." + print("Source has no sample rates (wrong device arguments?).") sys.exit(1) # Set the antenna @@ -218,7 +218,7 @@ class my_top_block(gr.top_block): options.gain = float(g.start()+g.stop())/2.0 self.set_gain(options.gain) - print "gain =", options.gain + print("gain =", options.gain) def set_next_freq(self): target_freq = self.next_freq @@ -227,7 +227,7 @@ class my_top_block(gr.top_block): self.next_freq = self.min_center_freq if not self.set_freq(target_freq): - print "Failed to set frequency to", target_freq + print("Failed to set frequency to", target_freq) sys.exit(1) return target_freq @@ -259,9 +259,9 @@ def main_loop(tb): def bin_freq(i_bin, center_freq): #hz_per_bin = tb.usrp_rate / tb.fft_size freq = center_freq - (tb.usrp_rate / 2) + (tb.channel_bandwidth * i_bin) - #print "freq original:",freq + #print("freq original:",freq) #freq = nearest_freq(freq, tb.channel_bandwidth) - #print "freq rounded:",freq + #print("freq rounded:",freq) return freq bin_start = int(tb.fft_size * ((1 - 0.75) / 2)) @@ -287,7 +287,7 @@ def main_loop(tb): power_db = 10*math.log10(m.data[i_bin]/tb.usrp_rate) - noise_floor_db if (power_db > tb.squelch_threshold) and (freq >= tb.min_freq) and (freq <= tb.max_freq): - print datetime.now(), "center_freq", center_freq, "freq", freq, "power_db", power_db, "noise_floor_db", noise_floor_db + print(datetime.now(), "center_freq", center_freq, "freq", freq, "power_db", power_db, "noise_floor_db", noise_floor_db) if __name__ == '__main__': t = ThreadClass()