summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gsm/Makefile.am2
-rw-r--r--utils/conv_gen.py46
2 files changed, 39 insertions, 9 deletions
diff --git a/src/gsm/Makefile.am b/src/gsm/Makefile.am
index 4ec441fd..653bdb96 100644
--- a/src/gsm/Makefile.am
+++ b/src/gsm/Makefile.am
@@ -35,6 +35,6 @@ EXTRA_DIST = libosmogsm.map
# Convolutional codes generation
gsm0503_conv.c:
- $(AM_V_GEN)python2 $(top_srcdir)/utils/conv_gen.py
+ $(AM_V_GEN)python2 $(top_srcdir)/utils/conv_gen.py gen_codes gsm
CLEANFILES = gsm0503_conv.c
diff --git a/utils/conv_gen.py b/utils/conv_gen.py
index 60580edd..e6eb50cb 100644
--- a/utils/conv_gen.py
+++ b/utils/conv_gen.py
@@ -23,7 +23,7 @@ mod_license = """
*/
"""
-import sys, os, math
+import sys, os, math, argparse
from functools import reduce
import conv_codes_gsm
@@ -254,13 +254,15 @@ def print_shared(fi, shared_polys):
code = ConvolutionalCode(0, polys, name = name)
code.print_state_and_output(fi)
-def generate_codes(codes, path, prefix):
+def generate_codes(codes, path, prefix, name):
# Open a new file for writing
- f = open(os.path.join(path, prefix + "_conv.c"), 'w')
+ f = open(os.path.join(path, name), 'w')
f.write(mod_license + "\n")
f.write("#include <stdint.h>\n")
f.write("#include <osmocom/core/conv.h>\n\n")
+ sys.stderr.write("Generating convolutional codes...\n")
+
# Print shared tables first
if hasattr(codes, "shared_polys"):
print_shared(f, codes.shared_polys)
@@ -279,12 +281,40 @@ def generate_codes(codes, path, prefix):
code.gen_tables(prefix, f, shared_tables = shared)
-if __name__ == '__main__':
- path = sys.argv[1] if len(sys.argv) > 1 else os.getcwd()
+def parse_argv():
+ parser = argparse.ArgumentParser()
- sys.stderr.write("Generating convolutional codes...\n")
+ # Positional arguments
+ parser.add_argument("action",
+ help = "what to generate",
+ choices = ["gen_codes"])
+ parser.add_argument("family",
+ help = "convolutional code family",
+ choices = ["gsm"])
- # Generate GSM specific codes
- generate_codes(conv_codes_gsm, path, "gsm0503")
+ # Optional arguments
+ parser.add_argument("-p", "--prefix",
+ help = "internal naming prefix")
+ parser.add_argument("-n", "--target-name",
+ help = "target name for generated file")
+ parser.add_argument("-P", "--target-path",
+ help = "target path for generated file")
+
+ return parser.parse_args()
+
+if __name__ == '__main__':
+ # Parse and verify arguments
+ argv = parse_argv()
+ path = argv.target_path or os.getcwd()
+
+ # Determine convolutional code family
+ if argv.family == "gsm":
+ codes = conv_codes_gsm
+ prefix = argv.prefix or "gsm0503"
+
+ # What to generate?
+ if argv.action == "gen_codes":
+ name = argv.target_name or prefix + "_conv.c"
+ generate_codes(codes, path, prefix, name)
sys.stderr.write("Generation complete.\n")