Vadim Yanitskiy has uploaded this change for review. ( 
https://gerrit.osmocom.org/10832


Change subject: apps/grgsm_trx: migrate from getopt to argparse
......................................................................

apps/grgsm_trx: migrate from getopt to argparse

Change-Id: I24a17b4cd44db0ce95a19d7470f4f09f3c85a26d
---
M apps/grgsm_trx
1 file changed, 69 insertions(+), 106 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/gr-gsm refs/changes/32/10832/1

diff --git a/apps/grgsm_trx b/apps/grgsm_trx
index 6efed07..d57c979 100755
--- a/apps/grgsm_trx
+++ b/apps/grgsm_trx
@@ -4,6 +4,7 @@
 # GR-GSM based transceiver
 #
 # (C) 2016-2018 by Vadim Yanitskiy <axilira...@gmail.com>
+# (C) 2017-2018 by Piotr Krysik <ptrkry...@gmail.com>
 #
 # All Rights Reserved
 #
@@ -22,9 +23,10 @@
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

 import signal
-import getopt
 import sys

+from argparse import ArgumentParser
+from argparse import ArgumentTypeError
 from gnuradio import eng_notation

 from grgsm.trx import ctrl_if_bb
@@ -33,31 +35,25 @@

 COPYRIGHT = \
        "Copyright (C) 2016-2018 by Vadim Yanitskiy <axilira...@gmail.com>\n" \
-       "Copyright (C) 2017 by Piotr Krysik <ptrkry...@gmail.com>\n" \
+       "Copyright (C) 2017-2018 by Piotr Krysik <ptrkry...@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 = radio_if.SAMPLE_RATE
-       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()
+       def __init__(self, argv):
+               self.remote_addr = argv.remote_addr
+               self.bind_addr = argv.bind_addr
+               self.base_port = argv.base_port
+               self.phy_args = argv.args
+               self.phy_sample_rate = argv.sample_rate
+               self.phy_rx_gain = argv.rx_gain
+               self.phy_tx_gain = argv.tx_gain
+               self.phy_rx_antenna = argv.rx_antenna
+               self.phy_tx_antenna = argv.tx_antenna
+               self.phy_freq_offset_hz = argv.freq_offset
+               self.phy_ppm = argv.ppm

                # Set up signal handlers
                signal.signal(signal.SIGINT, self.sig_handler)
@@ -95,97 +91,64 @@
                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)

+def eng_float(value):
+       try:
+               return eng_notation.str_to_num(value)
+       except:
+               raise ArgumentTypeError("invalid engineering notation "
+                       "value: {0}".format(value))
+
+def parse_argv():
+       parser = ArgumentParser(prog = "grgsm_trx")
+
+       # TRX interface 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")
+       parser.add_argument("-s", "--sample-rate",
+               dest = "sample_rate", type = eng_float,
+               default = radio_if.SAMPLE_RATE,
+               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 (default %(default)s)")
+       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 = eng_float, default = 0,
+               help = "Shift baseband freq. (e.g. -500M)")
+       parser.add_argument("--ppm",
+               dest = "ppm", type = float, default = 0,
+               help = "Set frequency correction (default %(default)s)")
+
+       return parser.parse_args()
+
 if __name__ == '__main__':
-       app = Application()
+       print(COPYRIGHT)
+       argv = parse_argv()
+       app = Application(argv)
        app.run()

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

Gerrit-Project: gr-gsm
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I24a17b4cd44db0ce95a19d7470f4f09f3c85a26d
Gerrit-Change-Number: 10832
Gerrit-PatchSet: 1
Gerrit-Owner: Vadim Yanitskiy <axilira...@gmail.com>
Gerrit-Reviewer: Piotr Krysik <ptrkry...@gmail.com>

Reply via email to