Browse Source

Airframe generator: Also generate autostart listing

sbg
Lorenz Meier 10 years ago
parent
commit
fde0c65d77
  1. 2
      Tools/px4airframes/__init__.py
  2. 55
      Tools/px4airframes/rcout.py
  3. 8
      Tools/px4airframes/srcparser.py
  4. 2
      Tools/px4airframes/xmlout.py
  5. 14
      Tools/px_process_airframes.py

2
Tools/px4airframes/__init__.py

@ -1 +1 @@
__all__ = ["srcscanner", "srcparser", "xmlout", "dokuwikiout", "dokuwikirpc"] __all__ = ["srcscanner", "srcparser", "xmlout", "rcout"]

55
Tools/px4airframes/rcout.py

@ -0,0 +1,55 @@
from xml.sax.saxutils import escape
import codecs
class RCOutput():
def __init__(self, groups, board):
result = ( "#\n"
"#\n"
"# THIS FILE IS AUTO-GENERATED. DO NOT EDIT!\n"
"#\n"
"#\n"
"# SYS_AUTOSTART = 0 means no autostart (default)\n"
"#\n"
"# AUTOSTART PARTITION:\n"
"# 0 .. 999 Reserved (historical)\n"
"# 1000 .. 1999 Simulation setups\n"
"# 2000 .. 2999 Standard planes\n"
"# 3000 .. 3999 Flying wing\n"
"# 4000 .. 4999 Quadrotor x\n"
"# 5000 .. 5999 Quadrotor +\n"
"# 6000 .. 6999 Hexarotor x\n"
"# 7000 .. 7999 Hexarotor +\n"
"# 8000 .. 8999 Octorotor x\n"
"# 9000 .. 9999 Octorotor +\n"
"# 10000 .. 10999 Quadrotor Wide arm / H frame\n"
"# 11000 .. 11999 Hexa Cox\n"
"# 12000 .. 12999 Octo Cox\n"
"# 13000 .. 13999 VTOL\n"
"# 14000 .. 14999 Tri Y\n"
"\n")
for group in groups:
result += "# GROUP: %s \n\n" % group.GetName()
for param in group.GetParams():
name = param.GetName()
path = param.GetPath().rsplit('/', 1)[1]
id_val = param.GetId()
name = param.GetFieldValue("short_desc")
long_desc = param.GetFieldValue("long_desc")
result += "#\n"
result += "# %s\n" % name
result += "if param compare SYS_AUTOSTART %s\n" % id_val
result += "then\n"
result += " sh /etc/init.d/%s\n" % path
result += "fi\n"
#if long_desc is not None:
# result += "# %s\n" % long_desc
result += "\n"
result += "\n"
self.output = result;
def Save(self, filename):
with codecs.open(filename, 'w', 'utf-8') as f:
f.write(self.output)

8
Tools/px4airframes/srcparser.py

@ -46,14 +46,18 @@ class Parameter(object):
# all others == 0 (sorted alphabetically) # all others == 0 (sorted alphabetically)
} }
def __init__(self, name, airframe_type, airframe_id, maintainer): def __init__(self, path, name, airframe_type, airframe_id, maintainer):
self.fields = {} self.fields = {}
self.outputs = {} self.outputs = {}
self.path = path
self.name = name self.name = name
self.type = airframe_type self.type = airframe_type
self.id = airframe_id self.id = airframe_id
self.maintainer = maintainer self.maintainer = maintainer
def GetPath(self):
return self.path
def GetName(self): def GetName(self):
return self.name return self.name
@ -259,7 +263,7 @@ class SourceParser(object):
return False return False
# We already know this is an airframe config, so add it # We already know this is an airframe config, so add it
param = Parameter(airframe_name, airframe_type, airframe_id, maintainer) param = Parameter(path, airframe_name, airframe_type, airframe_id, maintainer)
# Done with file, store # Done with file, store
for tag in tags: for tag in tags:

2
Tools/px4airframes/xmlout.py

@ -50,7 +50,7 @@ class XMLOutput():
elif (group.GetName() == "Simulation"): elif (group.GetName() == "Simulation"):
xml_group.attrib["image"] = "AirframeSimulation.png" xml_group.attrib["image"] = "AirframeSimulation.png"
else: else:
xml_group.attrib["image"] = "AirframeStandardPlane.png" xml_group.attrib["image"] = ""
for param in group.GetParams(): for param in group.GetParams():
if (last_param_name == param.GetName() and not board_specific_param_set) or last_param_name != param.GetName(): if (last_param_name == param.GetName() and not board_specific_param_set) or last_param_name != param.GetName():
xml_param = ET.SubElement(xml_group, "airframe") xml_param = ET.SubElement(xml_group, "airframe")

14
Tools/px_process_airframes.py

@ -46,7 +46,7 @@ from __future__ import print_function
import sys import sys
import os import os
import argparse import argparse
from px4airframes import srcscanner, srcparser, xmlout from px4airframes import srcscanner, srcparser, xmlout, rcout
def main(): def main():
# Parse command line arguments # Parse command line arguments
@ -61,6 +61,11 @@ def main():
metavar="FILENAME", metavar="FILENAME",
help="Create XML file" help="Create XML file"
" (default FILENAME: airframes.xml)") " (default FILENAME: airframes.xml)")
parser.add_argument("-s", "--start-script",
nargs='?',
const="rc.autostart",
metavar="FILENAME",
help="Create start script file")
parser.add_argument("-b", "--board", parser.add_argument("-b", "--board",
nargs='?', nargs='?',
const="", const="",
@ -69,7 +74,7 @@ def main():
args = parser.parse_args() args = parser.parse_args()
# Check for valid command # Check for valid command
if not (args.xml): if not (args.xml) and not (args.start_script):
print("Error: You need to specify at least one output method!\n") print("Error: You need to specify at least one output method!\n")
parser.print_usage() parser.print_usage()
sys.exit(1) sys.exit(1)
@ -93,6 +98,11 @@ def main():
out = xmlout.XMLOutput(param_groups, args.board) out = xmlout.XMLOutput(param_groups, args.board)
out.Save(args.xml) out.Save(args.xml)
if args.start_script:
print("Creating start script " + args.start_script)
out = rcout.RCOutput(param_groups, args.board)
out.Save(args.start_script)
print("All done!") print("All done!")

Loading…
Cancel
Save