diff --git a/Tools/autotest/common.py b/Tools/autotest/common.py index d3b24eba81..9eab374036 100644 --- a/Tools/autotest/common.py +++ b/Tools/autotest/common.py @@ -1066,6 +1066,15 @@ class AutoTest(ABC): (length, min_length)) self.progress("xml file length is %u" % length) + from lxml import objectify + xml = open(xml_filepath,'rb').read() + objectify.enable_recursive_str() + tree = objectify.fromstring(xml) + for thing in tree.logformat: + print("Got (%s)" % str(thing.get("name"))) +# for entry in tree.children: +# print("Got entry (%s)" % str(entry)) + def initialise_after_reboot_sitl(self): # after reboot stream-rates may be zero. Prompt MAVProxy to diff --git a/Tools/autotest/logger_metadata/emit_html.py b/Tools/autotest/logger_metadata/emit_html.py index 822acb9358..15ce6439c8 100644 --- a/Tools/autotest/logger_metadata/emit_html.py +++ b/Tools/autotest/logger_metadata/emit_html.py @@ -41,7 +41,7 @@ DO NOT EDIT print(' ', file=self.fh) print(" ", file=self.fh) - for f in docco.fields: + for f in docco.fields_order: if "description" in docco.fields[f]: fdesc = docco.fields[f]["description"] else: diff --git a/Tools/autotest/logger_metadata/emit_rst.py b/Tools/autotest/logger_metadata/emit_rst.py index 13133ee972..e19a143d15 100644 --- a/Tools/autotest/logger_metadata/emit_rst.py +++ b/Tools/autotest/logger_metadata/emit_rst.py @@ -39,7 +39,7 @@ This is a list of log messages which may be present in logs produced and stored print("~" * len(line), file=self.fh) rows = [] - for f in docco.fields: + for f in docco.fields_order: if "description" in docco.fields[f]: fdesc = docco.fields[f]["description"] else: diff --git a/Tools/autotest/logger_metadata/emit_xml.py b/Tools/autotest/logger_metadata/emit_xml.py index 42de0a3926..51ef3b6c69 100644 --- a/Tools/autotest/logger_metadata/emit_xml.py +++ b/Tools/autotest/logger_metadata/emit_xml.py @@ -27,7 +27,7 @@ class XMLEmitter(emitter.Emitter): print(' %s' % docco.description, file=self.fh) print(' ', file=self.fh) - for f in docco.fields: + for f in docco.fields_order: print(' ' % f, file=self.fh) if "description" in docco.fields[f]: print(' %s' % diff --git a/Tools/autotest/logger_metadata/parse.py b/Tools/autotest/logger_metadata/parse.py index fb527d02c4..18ee2d9eb6 100755 --- a/Tools/autotest/logger_metadata/parse.py +++ b/Tools/autotest/logger_metadata/parse.py @@ -3,6 +3,7 @@ from __future__ import print_function import argparse +import copy import os import re import sys @@ -14,7 +15,7 @@ import emit_xml topdir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../../') topdir = os.path.realpath(topdir) -re_loggermessage = re.compile(r"@LoggerMessage\s*:\s*(\w+)", re.MULTILINE) +re_loggermessage = re.compile(r"@LoggerMessage\s*:\s*([\w,]+)", re.MULTILINE) re_commentline = re.compile(r"\s*//") re_description = re.compile(r"\s*//\s*@Description\s*:\s*(.*)") re_url = re.compile(r"\s*//\s*@URL\s*:\s*(.*)") @@ -53,6 +54,7 @@ class LoggerDocco(object): self.url = None self.description = None self.fields = {} + self.fields_order = [] self.vehicles = None def set_description(self, desc): @@ -61,14 +63,17 @@ class LoggerDocco(object): def set_url(self, url): self.url = url - def set_field_description(self, field, description): + def ensure_field(self, field): if field not in self.fields: self.fields[field] = {} + self.fields_order.append(field) + + def set_field_description(self, field, description): + self.ensure_field(field) self.fields[field]["description"] = description def set_field_bits(self, field, bits): - if field not in self.fields: - self.fields = {} + self.ensure_field(field) self.fields[field]["bits"] = bits def set_vehicles(self, vehicles): @@ -104,6 +109,8 @@ class LoggerDocco(object): if m is None: continue name = m.group(1) + if "," in name: + name = name.split(",") state = state_inside docco = LoggerDocco.Docco(name) elif state == state_inside: @@ -140,8 +147,18 @@ class LoggerDocco(object): self.parse_file(_file) def emit_output(self): + # expand things like PIDR,PIDQ,PIDA into multiple doccos + new_doccos = [] + for docco in self.doccos: + if type(docco.name) == list: + for name in docco.name: + tmpdocco = copy.copy(docco) + tmpdocco.name = name + new_doccos.append(tmpdocco) + else: + new_doccos.append(docco) for emitter in self.emitters: - emitter.emit(self.doccos) + emitter.emit(new_doccos) def run(self): self.files = []
FieldNameDescription