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(" FieldName | Description |
---|
",
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 = []