You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.1 KiB
63 lines
2.1 KiB
#!/usr/bin/env python |
|
""" |
|
Param source code generation script. |
|
""" |
|
from __future__ import print_function |
|
import xml.etree.ElementTree as ET |
|
import codecs |
|
import argparse |
|
from jinja2 import Environment, FileSystemLoader |
|
import os |
|
|
|
def generate(xml_file, dest='.', modules=None): |
|
""" |
|
Generate px4 param source from xml. |
|
|
|
@param xml_file: input parameter xml file |
|
@param dest: Destination directory for generated files |
|
@param modules: The list of px4 modules to search for params. |
|
None means to scan everything. |
|
""" |
|
# pylint: disable=broad-except |
|
tree = ET.parse(xml_file) |
|
root = tree.getroot() |
|
|
|
params = [] |
|
for group in root: |
|
if group.tag == "group" and "no_code_generation" not in group.attrib: |
|
for param in group: |
|
scope_ = param.find('scope').text |
|
if (modules is not None) and (not scope_ in modules): |
|
continue |
|
params.append(param) |
|
|
|
params = sorted(params, key=lambda name: name.attrib["name"]) |
|
|
|
script_path = os.path.dirname(os.path.realpath(__file__)) |
|
|
|
# for jinja docs see: http://jinja.pocoo.org/docs/2.9/api/ |
|
env = Environment( |
|
loader=FileSystemLoader(os.path.join(script_path, 'templates'))) |
|
|
|
if not os.path.isdir(dest): |
|
os.path.mkdir(dest) |
|
|
|
template_files = [ |
|
'px4_parameters.h.jinja', |
|
'px4_parameters.c.jinja', |
|
] |
|
for template_file in template_files: |
|
template = env.get_template(template_file) |
|
with open(os.path.join( |
|
dest, template_file.replace('.jinja','')), 'w') as fid: |
|
fid.write(template.render(params=params)) |
|
|
|
if __name__ == "__main__": |
|
arg_parser = argparse.ArgumentParser() |
|
arg_parser.add_argument("--xml", help="parameter xml file") |
|
arg_parser.add_argument("--modules", help="px4 module list", default=None) |
|
arg_parser.add_argument("--dest", help="destination path", default=os.path.curdir) |
|
args = arg_parser.parse_args() |
|
generate(xml_file=args.xml, modules=args.modules, dest=args.dest) |
|
|
|
# vim: set et fenc=utf-8 ff=unix sts=4 sw=4 ts=4 :
|
|
|