aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2019-12-08 16:08:28 +0100
committerSylvain Munaut <tnt@246tNt.com>2020-02-16 09:52:00 +0100
commit465d2f433c61efa6eb1121e0602d2bd9c1ad67ef (patch)
tree9cb08389df88e40974c21fdff0cf8e5d3ed782ba
parentf609a44177c985b85584441c04c4bc185c06c610 (diff)
apps: Initial forward port to Python 3
Both from 2to3 and some manual tweaks from here and there. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r--CMakeLists.txt3
-rw-r--r--apps/CMakeLists.txt4
-rwxr-xr-xapps/osmocom_siggen2
-rw-r--r--apps/osmocom_siggen_base.py86
-rwxr-xr-xapps/osmocom_siggen_nogui10
-rwxr-xr-xapps/osmocom_spectrum_sense22
6 files changed, 63 insertions, 64 deletions
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()