px4_param_def to QGC fix

This commit is contained in:
mswingtra
2015-08-28 11:06:12 +02:00
parent 17287ddd2c
commit 9d5ea4bceb
2 changed files with 17 additions and 9 deletions
+9 -7
View File
@@ -1,5 +1,7 @@
import sys import sys
import re import re
global default_var
default_var = {}
class ParameterGroup(object): class ParameterGroup(object):
""" """
@@ -98,6 +100,7 @@ class SourceParser(object):
re_comment_end = re.compile(r'(.*?)\s*\*\/') re_comment_end = re.compile(r'(.*?)\s*\*\/')
re_parameter_definition = re.compile(r'PARAM_DEFINE_([A-Z_][A-Z0-9_]*)\s*\(([A-Z_][A-Z0-9_]*)\s*,\s*([^ ,\)]+)\s*\)\s*;') re_parameter_definition = re.compile(r'PARAM_DEFINE_([A-Z_][A-Z0-9_]*)\s*\(([A-Z_][A-Z0-9_]*)\s*,\s*([^ ,\)]+)\s*\)\s*;')
re_px4_parameter_definition = re.compile(r'PX4_PARAM_DEFINE_([A-Z_][A-Z0-9_]*)\s*\(([A-Z_][A-Z0-9_]*)\s*\)\s*;') re_px4_parameter_definition = re.compile(r'PX4_PARAM_DEFINE_([A-Z_][A-Z0-9_]*)\s*\(([A-Z_][A-Z0-9_]*)\s*\)\s*;')
re_px4_param_default_definition = re.compile(r'#define\s*PARAM_([A-Z_][A-Z0-9_]*)\s*([^ ,\)]+)\s*')
re_cut_type_specifier = re.compile(r'[a-z]+$') re_cut_type_specifier = re.compile(r'[a-z]+$')
re_is_a_number = re.compile(r'^-?[0-9\.]') re_is_a_number = re.compile(r'^-?[0-9\.]')
re_remove_dots = re.compile(r'\.+$') re_remove_dots = re.compile(r'\.+$')
@@ -114,13 +117,6 @@ class SourceParser(object):
def __init__(self): def __init__(self):
self.param_groups = {} self.param_groups = {}
def GetSupportedExtensions(self):
"""
Returns list of supported file extensions that can be parsed by this
parser.
"""
return [".cpp", ".c"]
def Parse(self, contents): def Parse(self, contents):
""" """
Incrementally parse program contents and append all found parameters Incrementally parse program contents and append all found parameters
@@ -193,6 +189,10 @@ class SourceParser(object):
name = None name = None
defval = "" defval = ""
# Non-empty line outside the comment # Non-empty line outside the comment
m = self.re_px4_param_default_definition.match(line)
if m:
name_m, defval_m = m.group(1,2)
default_var[name_m] = defval_m
m = self.re_parameter_definition.match(line) m = self.re_parameter_definition.match(line)
if m: if m:
tp, name, defval = m.group(1, 2, 3) tp, name, defval = m.group(1, 2, 3)
@@ -200,6 +200,8 @@ class SourceParser(object):
m = self.re_px4_parameter_definition.match(line) m = self.re_px4_parameter_definition.match(line)
if m: if m:
tp, name = m.group(1, 2) tp, name = m.group(1, 2)
if default_var.has_key(name+'_DEFAULT'):
defval = default_var[name+'_DEFAULT']
if tp is not None: if tp is not None:
# Remove trailing type specifier from numbers: 0.1f => 0.1 # Remove trailing type specifier from numbers: 0.1f => 0.1
if defval != "" and self.re_is_a_number.match(defval): if defval != "" and self.re_is_a_number.match(defval):
+8 -2
View File
@@ -13,10 +13,16 @@ class SourceScanner(object):
Scans provided path and passes all found contents to the parser using Scans provided path and passes all found contents to the parser using
parser.Parse method. parser.Parse method.
""" """
extensions = tuple(parser.GetSupportedExtensions()) extensions1 = tuple([".h"])
extensions2 = tuple([".cpp", ".c"])
for dirname, dirnames, filenames in os.walk(srcdir): for dirname, dirnames, filenames in os.walk(srcdir):
for filename in filenames: for filename in filenames:
if filename.endswith(extensions): if filename.endswith(extensions1):
path = os.path.join(dirname, filename)
if not self.ScanFile(path, parser):
return False
for filename in filenames:
if filename.endswith(extensions2):
path = os.path.join(dirname, filename) path = os.path.join(dirname, filename)
if not self.ScanFile(path, parser): if not self.ScanFile(path, parser):
return False return False