[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/update-l1-utmd.py b/mcu/tools/update-l1-utmd.py
new file mode 100755
index 0000000..460618f
--- /dev/null
+++ b/mcu/tools/update-l1-utmd.py
@@ -0,0 +1,112 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+import csv
+import json
+import re
+import sys
+import logging
+import argparse
+col_tmd = 'TMD File'
+col_regex = 'regex to match Trace Class'
+col_tag = 'Expected Tag'
+def readUtmdToJson(utmd_filename):
+    with open(utmd_filename, 'r') as utmdfile:
+        j = json.load(utmdfile)
+        utmdfile.close()
+        return j
+def writeJsonToUtmd(j, utmd_filename):
+    with open(utmd_filename, 'w') as utmdfile:
+        utmdfile.write(json.dumps(j,
+            sort_keys=True,
+            ensure_ascii=True,
+            indent=2))
+        utmdfile.close()
+
+def updateUtmd(utmd_filename, csv_filename):
+    if utmd_filename.startswith('./'):
+        utmd_filename = utmd_filename[2::]
+    csvfile = open(csv_filename, 'r')
+    j = readUtmdToJson(utmd_filename)
+    if j is None:
+        logging.error('read UTMD failed')
+        sys.exit()
+    if j['traceFamily'] == 'PS':
+        logging.warning('{}-{} not L1 / L2 UTMD'.format(j['module'], j['traceFamily']))
+        sys.exit()
+    fieldnames = (col_tmd, col_regex, col_tag)
+    reader = csv.DictReader( csvfile, fieldnames)
+    logging.info('Module: {} - {}'.format(j['module'], utmd_filename))
+    debug_UH = 'Ultra-High'
+    debug_H  = 'High'
+    debug_M  = 'Medium'
+    debug_L  = 'Low'
+    debug_UL = 'Ultra-Low'
+    #update debugLevel
+    for traceClass in j['traceClassDefs']:
+        for k, v in traceClass.iteritems():
+            if k.endswith('_UH'):
+                v['debugLevel'] = debug_UH
+            elif k.endswith('_H'):
+                v['debugLevel'] = debug_H
+            elif k.endswith('_M'):
+                v['debugLevel'] = debug_M
+            elif k.endswith('_L'):
+                v['debugLevel'] = debug_L
+            elif k.endswith('_UL'):
+                v['debugLevel'] = debug_UL
+    #update tag
+    for row in reader:
+        if row[col_tmd] in utmd_filename:
+            logging.info(row)
+            for traceClass in j['traceClassDefs']:
+                for k, v in traceClass.iteritems():
+                    logging.info('Original: {} {}'.format(k, v))
+                    #default mapping for entire TMD
+                    if row[col_regex] == 'N/A':
+                        logging.info('Matching N/A: {}'.format(k))
+                        logging.info(k)
+                        logging.info(v)
+                        v['tag'] = [ row[col_tag] ]
+                    #regex to match trace class name
+                    else:
+                        logging.info('Matching regex: {} {}'.format(k, row[col_regex]))
+                        tag = re.sub(row[col_regex], row[col_tag], k)
+                        if tag:
+                            v['tag'] = [ tag ]
+                    logging.info('Changed: {} {}'.format(k, v))
+    writeJsonToUtmd(j, utmd_filename)
+
+def init_logger(log_filename):
+    logging.basicConfig(level=logging.DEBUG,
+            format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
+            datefmt='%m-%d %H:%M:%S',
+            filename=log_filename)
+    console = logging.StreamHandler()
+    console.setLevel(logging.DEBUG)
+    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
+    console.setFormatter(formatter)
+    logging.getLogger('').addHandler(console)
+
+def main():
+    parser = argparse.ArgumentParser(description='update-l1-utmd:\n\
+            Update tag of trace class',
+            #formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+            formatter_class=argparse.RawDescriptionHelpFormatter)
+    parser.add_argument("-v", action="version", version='1.0.0')
+    parser.add_argument("utmd_file",
+            help="input L1 UTMD file")
+    parser.add_argument("csv_file",
+            help="input CSV file(survey table)")
+    parser.add_argument("-l", dest="log_file",
+            help="log file",
+            default='update-l1-utmd.log',
+            action="store")
+    args = parser.parse_args()
+    if args.utmd_file is None:
+        parser.print_help()
+        quit()
+    init_logger(args.log_file)
+    updateUtmd(args.utmd_file, args.csv_file)
+if __name__ == '__main__':
+    main()
+