Change in gr-gsm[master]: grgsm_trx: Migrated argument parsing to argparse

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Piotr Krysik gerrit-no-reply at lists.osmocom.org
Thu Sep 6 14:13:41 UTC 2018


Piotr Krysik has submitted this change and it was merged. ( https://gerrit.osmocom.org/10782 )

Change subject: grgsm_trx: Migrated argument parsing to argparse
......................................................................

grgsm_trx: Migrated argument parsing to argparse

Argparse makes adding new parameters easier and
adds consistent way of handling default values of
parameters and printing of their help info.

Change-Id: Idf99fd7a581464aa2f77fe01e721dbd162686811
---
M apps/grgsm_trx
M python/trx/radio_if.py
2 files changed, 280 insertions(+), 300 deletions(-)

Objections:
  Vadim Yanitskiy: I would prefer this is not merged as is



diff --git a/apps/grgsm_trx b/apps/grgsm_trx
index 45312e6..712b0b7 100755
--- a/apps/grgsm_trx
+++ b/apps/grgsm_trx
@@ -4,6 +4,7 @@
 # GR-GSM based transceiver
 #
 # (C) 2016-2018 by Vadim Yanitskiy <axilirator at gmail.com>
+# (C) 2017-2018 by Piotr Krysik <ptrkrysik at gmail.com>
 #
 # All Rights Reserved
 #
@@ -30,34 +31,40 @@
 from grgsm.trx import ctrl_if_bb
 from grgsm.trx import radio_if
 from grgsm.trx import fake_pm
+from argparse import ArgumentParser
 
 COPYRIGHT = \
 	"Copyright (C) 2016-2018 by Vadim Yanitskiy <axilirator at gmail.com>\n" \
-	"Copyright (C) 2017 by Piotr Krysik <ptrkrysik at gmail.com>\n" \
+	"Copyright (C) 2017-2018 by Piotr Krysik <ptrkrysik at gmail.com>\n" \
 	"License GPLv2+: GNU GPL version 2 or later " \
 	"<http://gnu.org/licenses/gpl.html>\n" \
 	"This is free software: you are free to change and redistribute it.\n" \
 	"There is NO WARRANTY, to the extent permitted by law.\n"
 
-class Application:
-	# Application variables
-	remote_addr = "127.0.0.1"
-	bind_addr = "0.0.0.0"
-	base_port = 6700
-
-	# PHY specific
-	phy_sample_rate = 4 * 1625000 / 6
-	phy_freq_offset_hz = None
-	phy_tx_antenna = "TX/RX"
-	phy_rx_antenna = "RX2"
-	phy_rx_gain = 30
-	phy_tx_gain = 10
-	phy_args = ""
-	phy_ppm = 0
-
-	def __init__(self):
-		self.print_copyright()
-		self.parse_argv()
+class grgsm_trx:
+	def __init__(self,
+				 remote_addr,
+				 bind_addr,
+				 base_port,
+				 args,
+				 sample_rate,
+				 rx_gain,
+				 tx_gain,
+				 rx_antenna,
+				 tx_antenna,
+				 freq_offset,
+				 ppm):
+		self.remote_addr = remote_addr
+		self.bind_addr = bind_addr
+		self.base_port = base_port
+		self.phy_args = args
+		self.phy_sample_rate = sample_rate
+		self.phy_rx_gain = rx_gain
+		self.phy_tx_gain = tx_gain
+		self.phy_rx_antenna = rx_antenna
+		self.phy_tx_antenna = tx_antenna
+		self.phy_freq_offset = freq_offset
+		self.phy_ppm = ppm
 
 		# Set up signal handlers
 		signal.signal(signal.SIGINT, self.sig_handler)
@@ -66,14 +73,10 @@
 		# Init Radio interface
 		self.radio = radio_if(self.phy_args, self.phy_sample_rate,
 			self.phy_rx_gain, self.phy_tx_gain, self.phy_ppm,
-			self.phy_rx_antenna, self.phy_tx_antenna,
+			self.phy_rx_antenna, self.phy_tx_antenna, self.phy_freq_offset,
 			self.bind_addr, self.remote_addr,
 			self.base_port)
 
-		# Optional frequency offset
-		if self.phy_freq_offset_hz is not None:
-			self.radio.freq_offset_hz = self.phy_freq_offset_hz
-
 		# Power measurement emulation
 		# Noise: -120 .. -105
 		# BTS: -75 .. -50
@@ -95,97 +98,73 @@
 		print("[i] Shutting down...")
 		self.radio.shutdown()
 
-	def print_copyright(self):
-		print(COPYRIGHT)
-
-	def print_help(self):
-		s  = " Usage: " + sys.argv[0] + " [options]\n\n" \
-			 " Some help...\n" \
-			 "  -h --help         this text\n\n"
-
-		# TRX specific
-		s += " TRX interface specific\n" \
-			 "  -i --remote-addr  Set remote address (default %s)\n" \
-			 "  -b --bind-addr    Set bind address (default %s)\n" \
-			 "  -p --base-port    Set base port number (default %d)\n\n"
-
-		# PHY specific
-		s += " Radio interface specific\n" \
-			 "  -a --device-args  Set device arguments\n" \
-			 "  -s --sample-rate  Set sample rate\n" \
-			 "  -g --rx-gain      Set RX gain (default %d)\n" \
-			 "  -G --tx-gain      Set TX gain (default %d)\n" \
-			 "     --rx-antenna   Set RX antenna (default %s)\n" \
-			 "     --tx-antenna   Set TX antenna (default %s)\n" \
-			 "     --freq-offset  Shift baseband freq. (e.g. -500M)\n" \
-			 "     --ppm          Set frequency correction (default %d)\n"
-
-		print(s % (
-			self.remote_addr,
-			self.bind_addr,
-			self.base_port,
-			self.phy_rx_gain,
-			self.phy_tx_gain,
-			self.phy_rx_antenna,
-			self.phy_tx_antenna,
-			self.phy_ppm))
-
-	def parse_argv(self):
-		try:
-			opts, args = getopt.getopt(sys.argv[1:],
-				"i:b:p:a:s:g:G:h",
-				["help", "remote-addr=", "bind-addr=", "base-port=",
-				"device-args=", "sample-rate=", "rx-gain=", "tx-gain=",
-				"ppm=", "rx-antenna=", "tx-antenna=", "freq-offset="])
-		except getopt.GetoptError as err:
-			# Print(help and exit)
-			self.print_help()
-			print("[!] " + str(err))
-			sys.exit(2)
-
-		for o, v in opts:
-			if o in ("-h", "--help"):
-				self.print_help()
-				sys.exit(2)
-
-			# TRX specific
-			elif o in ("-i", "--remote-addr"):
-				self.remote_addr = v
-			elif o in ("-b", "--bind-addr"):
-				self.bind_addr = v
-			elif o in ("-p", "--base-port"):
-				if int(v) >= 0 and int(v) <= 65535:
-					self.base_port = int(v)
-				else:
-					print("[!] The port number should be in range [0-65536]")
-					sys.exit(2)
-
-			# PHY specific
-			elif o in ("-a", "--device-args"):
-				self.phy_args = v
-			elif o in ("-s", "--sample-rate"):
-				self.phy_sample_rate = int(v)
-			elif o in ("-g", "--rx-gain"):
-				self.phy_rx_gain = int(v)
-			elif o in ("-G", "--tx-gain"):
-				self.phy_tx_gain = int(v)
-			elif o in ("--rx-antenna"):
-				self.phy_rx_antenna = v
-			elif o in ("--tx-antenna"):
-				self.phy_tx_antenna = v
-			elif o in ("--ppm"):
-				self.phy_ppm = int(v)
-			elif o in ("--freq-offset"):
-				# Convert /\d+(\.\d+)?(M|k)?/ to Hz
-				offset_hz = eng_notation.str_to_num(v)
-				self.phy_freq_offset_hz = offset_hz
-
 	def sig_handler(self, signum, frame):
 		print("Signal %d received" % signum)
 		if signum is signal.SIGINT:
 			self.shutdown()
 			sys.exit(0)
 
-if __name__ == '__main__':
-	app = Application()
+def parse_args():
+	description = 'Burst transceiver for GSM Mobile Station'
+	parser = ArgumentParser(prog="grgsm_trx", usage='%(prog)s [options]',
+		description=description)
+	# TRX specific
+	parser.add_argument("-i", "--remote-addr", dest="remote_addr", type=str,
+		default='127.0.0.1',
+		help="Set remote address default=%(default)s")
+	parser.add_argument("-b", "--bind-addr", dest="bind_addr", type=str,
+		default='0.0.0.0',
+		help="Set bind address default=%(default)s")
+	parser.add_argument(
+		"-p", "--base_port", dest="base_port", type=int,
+		default=6700,
+		help="Set base port number default=%(default)s")
+
+	# PHY specific
+	parser.add_argument("-a", "--args", dest="args", type=str,
+		default="",
+		help="Set Device Arguments default=%(default)s")
+	parser.add_argument("-s", "--sample-rate", dest="sample_rate", type=float,
+		default=1083333.3333333333,
+		help="Set samp_rate default=%(default)s")
+	parser.add_argument("-g", "--rx-gain", dest="rx_gain", type=float,
+		default=30,
+		help="Set RX gain default=%(default)s")
+	parser.add_argument("-G", "--tx-gain", dest="tx_gain", type=float,
+		default=10,
+		help="Set TX gain default=%(default)s")
+	parser.add_argument("--rx-antenna", dest="rx_antenna", type=str,
+		default="RX2",
+		help="Set RX antenna")
+	parser.add_argument("--tx-antenna", dest="tx_antenna", type=str,
+		default='TX/RX',
+		help="Set TX antenna default=%(default)s")
+	parser.add_argument(
+		"--freq-offset", dest="freq_offset", type=float,
+		default=0,
+		help="Shift Tx and Rx frequencies default=%(default)s")
+	parser.add_argument("--ppm", dest="ppm", type=float,
+		default=0,
+		help="Set ppm default=%(default)s")
+
+	return parser.parse_args()
+
+def main():
+	print(COPYRIGHT)
+	options = parse_args()
+	app = grgsm_trx(
+			remote_addr=options.remote_addr,
+			bind_addr=options.bind_addr,
+			base_port=options.base_port,
+			args=options.args,
+			sample_rate=options.sample_rate,
+			rx_gain=options.rx_gain,
+			tx_gain=options.tx_gain,
+			rx_antenna=options.rx_antenna,
+			tx_antenna=options.tx_antenna,
+			freq_offset=options.freq_offset,
+			ppm=options.ppm)
 	app.run()
+
+if __name__ == '__main__':
+	main()
diff --git a/python/trx/radio_if.py b/python/trx/radio_if.py
index 407e724..17a0d00 100644
--- a/python/trx/radio_if.py
+++ b/python/trx/radio_if.py
@@ -59,251 +59,252 @@
             self.message_port_pub(pmt.intern("dict_out"), pmt.to_pmt(d))
 
 class radio_if(gr.top_block):
-	# PHY specific variables
-	freq_offset_hz = None
-	rx_freq = 935e6
-	tx_freq = 890e6
-	osr = 4
+  # PHY specific variables
+  rx_freq = 935e6
+  tx_freq = 890e6
+  osr = 4
 
-	# Application state flags
-	trx_started = False
+  # Application state flags
+  trx_started = False
 
-	# GSM timings (in microseconds [uS])
-	# One timeslot duration is 576.9 μs = 15/26 ms,
-	# or 156.25 symbol periods (a symbol period is 48/13 μs)
-	GSM_SYM_PERIOD_uS = 48.0 / 13.0
-	GSM_TS_PERIOD_uS = GSM_SYM_PERIOD_uS * 156.25
-	GSM_UL_DL_SHIFT_uS = -(GSM_TS_PERIOD_uS * 3)
+  # GSM timings (in microseconds [uS])
+  # One timeslot duration is 576.9 μs = 15/26 ms,
+  # or 156.25 symbol periods (a symbol period is 48/13 μs)
+  GSM_SYM_PERIOD_uS = 48.0 / 13.0
+  GSM_TS_PERIOD_uS = GSM_SYM_PERIOD_uS * 156.25
+  GSM_UL_DL_SHIFT_uS = -(GSM_TS_PERIOD_uS * 3)
 
-	# FIXME: shall be measured (automatically?) for
-	# particular device and particular clock rate.
-	# The current value is measured for USRP B2X0 at 26e6.
-	delay_correction = (285.616 + 2 * GSM_SYM_PERIOD_uS) * 1e-6
+  # FIXME: shall be measured (automatically?) for
+  # particular device and particular clock rate.
+  # The current value is measured for USRP B2X0 at 26e6.
+  delay_correction = (285.616 + 2 * GSM_SYM_PERIOD_uS) * 1e-6
 
-	def __init__(self, phy_args, phy_sample_rate,
-			phy_rx_gain, phy_tx_gain, phy_ppm,
-			phy_rx_antenna, phy_tx_antenna,
-			trx_bind_addr, trx_remote_addr,
-			trx_base_port):
+  def __init__(self, phy_args, phy_sample_rate,
+      phy_rx_gain, phy_tx_gain, phy_ppm,
+      phy_rx_antenna, phy_tx_antenna,
+      phy_freq_offset,
+      trx_bind_addr, trx_remote_addr,
+      trx_base_port):
 
-		print("[i] Init Radio interface (L:%s:%u <-> R:%s:%u)"
-			% (trx_bind_addr, trx_base_port + 2,
-				trx_remote_addr, trx_base_port + 102))
+    print("[i] Init Radio interface (L:%s:%u <-> R:%s:%u)"
+      % (trx_bind_addr, trx_base_port + 2,
+        trx_remote_addr, trx_base_port + 102))
 
-		# PHY specific variables
-		self.sample_rate = phy_sample_rate
-		self.rx_gain = phy_rx_gain
-		self.tx_gain = phy_tx_gain
-		self.ppm = phy_ppm
+    # PHY specific variables
+    self.sample_rate = phy_sample_rate
+    self.rx_gain = phy_rx_gain
+    self.tx_gain = phy_tx_gain
+    self.phy_freq_offset = phy_freq_offset
+    self.ppm = phy_ppm
 
-		gr.top_block.__init__(self, "GR-GSM TRX")
+    gr.top_block.__init__(self, "GR-GSM TRX")
 
-		# TRX Burst Interface
-		self.trx_burst_if = grgsm.trx_burst_if(
-			trx_bind_addr, trx_remote_addr,
-			str(trx_base_port))
+    # TRX Burst Interface
+    self.trx_burst_if = grgsm.trx_burst_if(
+      trx_bind_addr, trx_remote_addr,
+      str(trx_base_port))
 
-		# RX path definition
-		self.phy_src = uhd.usrp_source(phy_args,
-			uhd.stream_args(cpu_format="fc32",
-				channels=range(1)))
+    # RX path definition
+    self.phy_src = uhd.usrp_source(phy_args,
+      uhd.stream_args(cpu_format="fc32",
+        channels=range(1)))
 
-		self.phy_src.set_clock_rate(26e6, uhd.ALL_MBOARDS)
-		self.phy_src.set_center_freq(self.rx_freq, 0)
-		self.phy_src.set_antenna(phy_rx_antenna, 0)
-		self.phy_src.set_samp_rate(phy_sample_rate)
-		self.phy_src.set_bandwidth(650e3, 0)
-		self.phy_src.set_gain(phy_rx_gain)
+    self.phy_src.set_clock_rate(26e6, uhd.ALL_MBOARDS)
+    self.phy_src.set_center_freq(self.rx_freq, 0)
+    self.phy_src.set_antenna(phy_rx_antenna, 0)
+    self.phy_src.set_samp_rate(phy_sample_rate)
+    self.phy_src.set_bandwidth(650e3, 0)
+    self.phy_src.set_gain(phy_rx_gain)
 
-		self.msg_to_tag_src = grgsm.msg_to_tag()
+    self.msg_to_tag_src = grgsm.msg_to_tag()
 
-		self.rotator_src = grgsm.controlled_rotator_cc(
-			self.calc_phase_inc(self.rx_freq))
+    self.rotator_src = grgsm.controlled_rotator_cc(
+      self.calc_phase_inc(self.rx_freq))
 
-		self.lpf = filter.fir_filter_ccf(1, firdes.low_pass(
-			1, phy_sample_rate, 125e3, 5e3, firdes.WIN_HAMMING, 6.76))
+    self.lpf = filter.fir_filter_ccf(1, firdes.low_pass(
+      1, phy_sample_rate, 125e3, 5e3, firdes.WIN_HAMMING, 6.76))
 
-		self.gsm_receiver = grgsm.receiver(self.osr, ([0]), ([]))
+    self.gsm_receiver = grgsm.receiver(self.osr, ([0]), ([]))
 
-		self.ts_filter = grgsm.burst_timeslot_filter(0)
-		self.ts_filter.set_policy(grgsm.FILTER_POLICY_DROP_ALL)
+    self.ts_filter = grgsm.burst_timeslot_filter(0)
+    self.ts_filter.set_policy(grgsm.FILTER_POLICY_DROP_ALL)
 
-		# Connections
-		self.connect(
-			(self.phy_src, 0),
-			(self.msg_to_tag_src, 0))
+    # Connections
+    self.connect(
+      (self.phy_src, 0),
+      (self.msg_to_tag_src, 0))
 
-		self.connect(
-			(self.msg_to_tag_src, 0),
-			(self.rotator_src, 0))
+    self.connect(
+      (self.msg_to_tag_src, 0),
+      (self.rotator_src, 0))
 
-		self.connect(
-			(self.rotator_src, 0),
-			(self.lpf, 0))
+    self.connect(
+      (self.rotator_src, 0),
+      (self.lpf, 0))
 
-		self.connect(
-			(self.lpf, 0),
-			(self.gsm_receiver, 0))
+    self.connect(
+      (self.lpf, 0),
+      (self.gsm_receiver, 0))
 
-		self.msg_connect(
-			(self.gsm_receiver, 'C0'),
-			(self.ts_filter, 'in'))
+    self.msg_connect(
+      (self.gsm_receiver, 'C0'),
+      (self.ts_filter, 'in'))
 
-		self.msg_connect(
-			(self.ts_filter, 'out'),
-			(self.trx_burst_if, 'bursts'))
+    self.msg_connect(
+      (self.ts_filter, 'out'),
+      (self.trx_burst_if, 'bursts'))
 
 
-		# TX Path Definition
-		self.phy_sink = uhd.usrp_sink(phy_args,
-			uhd.stream_args(cpu_format="fc32",
-				channels=range(1)), "packet_len")
+    # TX Path Definition
+    self.phy_sink = uhd.usrp_sink(phy_args,
+      uhd.stream_args(cpu_format="fc32",
+        channels=range(1)), "packet_len")
 
-		self.phy_sink.set_clock_rate(26e6, uhd.ALL_MBOARDS)
-		self.phy_sink.set_antenna(phy_tx_antenna, 0)
-		self.phy_sink.set_samp_rate(phy_sample_rate)
-		self.phy_sink.set_center_freq(self.tx_freq, 0)
-		self.phy_sink.set_gain(self.tx_gain)
+    self.phy_sink.set_clock_rate(26e6, uhd.ALL_MBOARDS)
+    self.phy_sink.set_antenna(phy_tx_antenna, 0)
+    self.phy_sink.set_samp_rate(phy_sample_rate)
+    self.phy_sink.set_center_freq(self.tx_freq, 0)
+    self.phy_sink.set_gain(self.tx_gain)
 
-		self.tx_time_setter = grgsm.txtime_setter(
-			0xffffffff, 0, 0, 0, 0, 0,
-			self.delay_correction + self.GSM_UL_DL_SHIFT_uS * 1e-6)
+    self.tx_time_setter = grgsm.txtime_setter(
+      0xffffffff, 0, 0, 0, 0, 0,
+      self.delay_correction + self.GSM_UL_DL_SHIFT_uS * 1e-6)
 
-		self.tx_burst_proc = grgsm.preprocess_tx_burst()
+    self.tx_burst_proc = grgsm.preprocess_tx_burst()
 
-		self.pdu_to_tagged_stream = blocks.pdu_to_tagged_stream(
-			blocks.byte_t, 'packet_len')
+    self.pdu_to_tagged_stream = blocks.pdu_to_tagged_stream(
+      blocks.byte_t, 'packet_len')
 
-		self.gmsk_mod = grgsm.gsm_gmsk_mod(
-			BT = 0.3, pulse_duration = 4, sps = self.osr)
+    self.gmsk_mod = grgsm.gsm_gmsk_mod(
+      BT = 0.3, pulse_duration = 4, sps = self.osr)
 
-		self.burst_shaper = digital.burst_shaper_cc(
-			(firdes.window(firdes.WIN_HANN, 16, 0)),
-			0, 20, False, "packet_len")
+    self.burst_shaper = digital.burst_shaper_cc(
+      (firdes.window(firdes.WIN_HANN, 16, 0)),
+      0, 20, False, "packet_len")
 
-		self.msg_to_tag_sink = grgsm.msg_to_tag()
+    self.msg_to_tag_sink = grgsm.msg_to_tag()
 
-		self.rotator_sink = grgsm.controlled_rotator_cc(
-			-self.calc_phase_inc(self.tx_freq))
+    self.rotator_sink = grgsm.controlled_rotator_cc(
+      -self.calc_phase_inc(self.tx_freq))
 
-		# Connections
-		self.msg_connect(
-			(self.trx_burst_if, 'bursts'),
-			(self.tx_time_setter, 'bursts_in'))
+    # Connections
+    self.msg_connect(
+      (self.trx_burst_if, 'bursts'),
+      (self.tx_time_setter, 'bursts_in'))
 
-		self.msg_connect(
-			(self.tx_time_setter, 'bursts_out'),
-			(self.tx_burst_proc, 'bursts_in'))
+    self.msg_connect(
+      (self.tx_time_setter, 'bursts_out'),
+      (self.tx_burst_proc, 'bursts_in'))
 
-		self.msg_connect(
-			(self.tx_burst_proc, 'bursts_out'),
-			(self.pdu_to_tagged_stream, 'pdus'))
+    self.msg_connect(
+      (self.tx_burst_proc, 'bursts_out'),
+      (self.pdu_to_tagged_stream, 'pdus'))
 
-		self.connect(
-			(self.pdu_to_tagged_stream, 0),
-			(self.gmsk_mod, 0))
+    self.connect(
+      (self.pdu_to_tagged_stream, 0),
+      (self.gmsk_mod, 0))
 
-		self.connect(
-			(self.gmsk_mod, 0),
-			(self.burst_shaper, 0))
+    self.connect(
+      (self.gmsk_mod, 0),
+      (self.burst_shaper, 0))
 
-		self.connect(
-			(self.burst_shaper, 0),
-			(self.msg_to_tag_sink, 0))
+    self.connect(
+      (self.burst_shaper, 0),
+      (self.msg_to_tag_sink, 0))
 
-		self.connect(
-			(self.msg_to_tag_sink, 0),
-			(self.rotator_sink, 0))
+    self.connect(
+      (self.msg_to_tag_sink, 0),
+      (self.rotator_sink, 0))
 
-		self.connect(
-			(self.rotator_sink, 0),
-			(self.phy_sink, 0))
+    self.connect(
+      (self.rotator_sink, 0),
+      (self.phy_sink, 0))
 
 
-		# RX & TX synchronization
-		self.bt_filter = grgsm.burst_type_filter([3])
-		self.burst_to_fn_time = grgsm.burst_to_fn_time()
+    # RX & TX synchronization
+    self.bt_filter = grgsm.burst_type_filter([3])
+    self.burst_to_fn_time = grgsm.burst_to_fn_time()
 
-		# Connections
-		self.msg_connect(
-			(self.gsm_receiver, 'C0'),
-			(self.bt_filter, 'bursts_in'))
+    # Connections
+    self.msg_connect(
+      (self.gsm_receiver, 'C0'),
+      (self.bt_filter, 'bursts_in'))
 
-		self.msg_connect(
-			(self.bt_filter, 'bursts_out'),
-			(self.burst_to_fn_time, 'bursts_in'))
+    self.msg_connect(
+      (self.bt_filter, 'bursts_out'),
+      (self.burst_to_fn_time, 'bursts_in'))
 
-		self.msg_connect(
-			(self.burst_to_fn_time, 'fn_time_out'),
-			(self.tx_time_setter, 'fn_time'))
+    self.msg_connect(
+      (self.burst_to_fn_time, 'fn_time_out'),
+      (self.tx_time_setter, 'fn_time'))
 
 
-		# AFC (Automatic Frequency Correction)
-		self.gsm_clck_ctrl = grgsm.clock_offset_control(
-			self.rx_freq, phy_sample_rate, osr = self.osr)
+    # AFC (Automatic Frequency Correction)
+    self.gsm_clck_ctrl = grgsm.clock_offset_control(
+      self.rx_freq, phy_sample_rate, osr = self.osr)
 
-		self.dict_toggle_sign = dict_toggle_sign()
+    self.dict_toggle_sign = dict_toggle_sign()
 
-		# Connections
-		self.msg_connect(
-			(self.gsm_receiver, 'measurements'),
-			(self.gsm_clck_ctrl, 'measurements'))
+    # Connections
+    self.msg_connect(
+      (self.gsm_receiver, 'measurements'),
+      (self.gsm_clck_ctrl, 'measurements'))
 
-		self.msg_connect(
-			(self.gsm_clck_ctrl, 'ctrl'),
-			(self.msg_to_tag_src, 'msg'))
+    self.msg_connect(
+      (self.gsm_clck_ctrl, 'ctrl'),
+      (self.msg_to_tag_src, 'msg'))
 
-		self.msg_connect(
-			(self.gsm_clck_ctrl, 'ctrl'),
-			(self.dict_toggle_sign, 'dict_in'))
+    self.msg_connect(
+      (self.gsm_clck_ctrl, 'ctrl'),
+      (self.dict_toggle_sign, 'dict_in'))
 
-		self.msg_connect(
-			(self.dict_toggle_sign, 'dict_out'),
-			(self.msg_to_tag_sink, 'msg'))
+    self.msg_connect(
+      (self.dict_toggle_sign, 'dict_out'),
+      (self.msg_to_tag_sink, 'msg'))
 
 
-		# Some UHD devices (such as UmTRX) do start the clock
-		# not from 0, so it's required to reset it manually.
-		# Resetting UHD source will also affect the sink.
-		self.phy_src.set_time_now(uhd.time_spec(0.0))
+    # Some UHD devices (such as UmTRX) do start the clock
+    # not from 0, so it's required to reset it manually.
+    # Resetting UHD source will also affect the sink.
+    self.phy_src.set_time_now(uhd.time_spec(0.0))
 
-	def shutdown(self):
-		print("[i] Shutdown Radio interface")
-		self.stop()
-		self.wait()
+  def shutdown(self):
+    print("[i] Shutdown Radio interface")
+    self.stop()
+    self.wait()
 
-	def calc_phase_inc(self, fc):
-		return self.ppm / 1.0e6 * 2 * pi * fc / self.sample_rate
+  def calc_phase_inc(self, fc):
+    return self.ppm / 1.0e6 * 2 * pi * fc / self.sample_rate
 
-	def set_rx_freq(self, fc):
-		if self.freq_offset_hz is not None:
-			fc += self.freq_offset_hz
-			print("[#] Shifting RX freq. to %s (offset is %s)"
-				% (eng_notation.num_to_str(fc),
-					eng_notation.num_to_str(self.freq_offset_hz)))
-		self.phy_src.set_center_freq(fc, 0)
-		self.rotator_src.set_phase_inc(self.calc_phase_inc(fc))
-		self.rx_freq = fc
+  def set_rx_freq(self, fc):
+    if self.phy_freq_offset != 0:
+      fc += self.phy_freq_offset
+      print("[#] Shifting RX freq. to %s (offset is %s)"
+        % (eng_notation.num_to_str(fc),
+          eng_notation.num_to_str(self.freq_offset)))
+    self.phy_src.set_center_freq(fc, 0)
+    self.rotator_src.set_phase_inc(self.calc_phase_inc(fc))
+    self.rx_freq = fc
 
-	def set_tx_freq(self, fc):
-		if self.freq_offset_hz is not None:
-			fc += self.freq_offset_hz
-			print("[#] Shifting TX freq. to %s (offset is %s)"
-				% (eng_notation.num_to_str(fc),
-					eng_notation.num_to_str(self.freq_offset_hz)))
-		self.phy_sink.set_center_freq(fc, 0)
-		self.rotator_sink.set_phase_inc(-self.calc_phase_inc(fc))
-		self.tx_freq = fc
+  def set_tx_freq(self, fc):
+    if self.phy_freq_offset != 0:
+      fc += self.phy_freq_offset
+      print("[#] Shifting TX freq. to %s (offset is %s)"
+        % (eng_notation.num_to_str(fc),
+          eng_notation.num_to_str(self.freq_offset)))
+    self.phy_sink.set_center_freq(fc, 0)
+    self.rotator_sink.set_phase_inc(-self.calc_phase_inc(fc))
+    self.tx_freq = fc
 
-	def set_rx_gain(self, gain):
-		self.phy_src.set_gain(gain, 0)
-		self.rx_gain = gain
+  def set_rx_gain(self, gain):
+    self.phy_src.set_gain(gain, 0)
+    self.rx_gain = gain
 
-	def set_tx_gain(self, gain):
-		self.phy_sink.set_gain(gain, 0)
-		self.tx_gain = gain
+  def set_tx_gain(self, gain):
+    self.phy_sink.set_gain(gain, 0)
+    self.tx_gain = gain
 
-	def set_ta(self, ta):
-		print("[i] Setting TA value %d" % ta)
-		advance_time_sec = ta * self.GSM_SYM_PERIOD_uS * 1e-6
-		self.tx_time_setter.set_timing_advance(advance_time_sec)
+  def set_ta(self, ta):
+    print("[i] Setting TA value %d" % ta)
+    advance_time_sec = ta * self.GSM_SYM_PERIOD_uS * 1e-6
+    self.tx_time_setter.set_timing_advance(advance_time_sec)

-- 
To view, visit https://gerrit.osmocom.org/10782
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: gr-gsm
Gerrit-Branch: master
Gerrit-MessageType: merged
Gerrit-Change-Id: Idf99fd7a581464aa2f77fe01e721dbd162686811
Gerrit-Change-Number: 10782
Gerrit-PatchSet: 1
Gerrit-Owner: Piotr Krysik <ptrkrysik at gmail.com>
Gerrit-Reviewer: Vadim Yanitskiy <axilirator at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20180906/d0aa1a49/attachment.htm>


More information about the gerrit-log mailing list