def mavgen(opts, args): """Generate mavlink message formatters and parsers (C and Python ) using options and args where args are a list of xml files. This function allows python scripts under Windows to control mavgen using the same interface as shell scripts under Unix""" xml = [] for fname in args: if performValidation: print("Validating %s" % fname) mavgen_validate(fname, schemaFile, opts.error_limit) else: print("Validation skipped for %s." % fname) print("Parsing %s" % fname) xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) # expand includes for x in xml[:]: for i in x.include: fname = os.path.join(os.path.dirname(x.filename), i) ## Validate XML file with XSD file if possible. if performValidation: print("Validating %s" % fname) mavgen_validate(fname, schemaFile, opts.error_limit) else: print("Validation skipped for %s." % fname) ## Parsing print("Parsing %s" % fname) xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) # include message lengths and CRCs too for idx in range(0, 256): if x.message_lengths[idx] == 0: x.message_lengths[idx] = xml[-1].message_lengths[idx] x.message_crcs[idx] = xml[-1].message_crcs[idx] x.message_names[idx] = xml[-1].message_names[idx] # work out max payload size across all includes largest_payload = 0 for x in xml: if x.largest_payload > largest_payload: largest_payload = x.largest_payload for x in xml: x.largest_payload = largest_payload if mavparse.check_duplicates(xml): sys.exit(1) print("Found %u MAVLink message types in %u XML files" % (mavparse.total_msgs(xml), len(xml))) # Convert language option to lowercase and validate opts.language = opts.language.lower() if opts.language == 'python': import mavgen_python mavgen_python.generate(opts.output, xml) elif opts.language == 'c': try: import mavgen_c except Exception: from pymavlink.generator import mavgen_c mavgen_c.generate(opts.output, xml) elif opts.language == 'wlua': try: import mavgen_wlua except Exception: from pymavlink.generator import mavgen_wlua mavgen_wlua.generate(opts.output, xml) elif opts.language == 'cs': try: import mavgen_cs except Exception: from pymavlink.generator import mavgen_cs mavgen_cs.generate(opts.output, xml) elif opts.language == 'javascript': try: import mavgen_javascript except Exception: from pymavlink.generator import mavgen_javascript mavgen_javascript.generate(opts.output, xml) elif opts.language == 'objc': try: import mavgen_objc except Exception: from pymavlink.generator import mavgen_objc mavgen_objc.generate(opts.output, xml) elif opts.language == 'go': try: import mavgen_go except Exception: from pymavlink.generator import mavgen_go mavgen_go.generate(opts.output, xml) else: print("Unsupported language %s" % opts.language)
def mavgen(opts, args) : """Generate mavlink message formatters and parsers (C and Python ) using options and args where args are a list of xml files. This function allows python scripts under Windows to control mavgen using the same interface as shell scripts under Unix""" xml = [] for fname in args: if performValidation: print("Validating %s" % fname) mavgen_validate(fname, schemaFile, opts.error_limit); else: print("Validation skipped for %s." % fname) print("Parsing %s" % fname) xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) # expand includes for x in xml[:]: for i in x.include: fname = os.path.join(os.path.dirname(x.filename), i) ## Validate XML file with XSD file if possible. if performValidation: print("Validating %s" % fname) mavgen_validate(fname, schemaFile, opts.error_limit); else: print("Validation skipped for %s." % fname) ## Parsing print("Parsing %s" % fname) xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) # include message lengths and CRCs too for idx in range(0, 256): if x.message_lengths[idx] == 0: x.message_lengths[idx] = xml[-1].message_lengths[idx] x.message_crcs[idx] = xml[-1].message_crcs[idx] x.message_names[idx] = xml[-1].message_names[idx] # work out max payload size across all includes largest_payload = 0 for x in xml: if x.largest_payload > largest_payload: largest_payload = x.largest_payload for x in xml: x.largest_payload = largest_payload if mavparse.check_duplicates(xml): sys.exit(1) print("Found %u MAVLink message types in %u XML files" % ( mavparse.total_msgs(xml), len(xml))) # Convert language option to lowercase and validate opts.language = opts.language.lower() if opts.language == 'python': import mavgen_python mavgen_python.generate(opts.output, xml) elif opts.language == 'c': try: import mavgen_c except Exception: from pymavlink.generator import mavgen_c mavgen_c.generate(opts.output, xml) elif opts.language == 'wlua': try: import mavgen_wlua except Exception: from pymavlink.generator import mavgen_wlua mavgen_wlua.generate(opts.output, xml) elif opts.language == 'cs': try: import mavgen_cs except Exception: from pymavlink.generator import mavgen_cs mavgen_cs.generate(opts.output, xml) elif opts.language == 'javascript': try: import mavgen_javascript except Exception: from pymavlink.generator import mavgen_javascript mavgen_javascript.generate(opts.output, xml) elif opts.language == 'objc': try: import mavgen_objc except Exception: from pymavlink.generator import mavgen_objc mavgen_objc.generate(opts.output, xml) elif opts.language == 'go': try: import mavgen_go except Exception: from pymavlink.generator import mavgen_go mavgen_go.generate(opts.output, xml) else: print("Unsupported language %s" % opts.language)
def mavgen(opts, args) : """Generate mavlink message formatters and parsers (C and Python ) using options and args where args are a list of xml files. This function allows python scripts under Windows to control mavgen using the same interface as shell scripts under Unix""" xml = [] # Enable validation by default, disabling it if explicitly requested if opts.validate: try: from lib.genxmlif import GenXmlIfError from lib.minixsv import pyxsval except Exception: print("WARNING: Unable to load XML validator libraries. XML validation will not be performed") opts.validate = False def mavgen_validate(fname, schema, errorLimitNumber) : """Uses minixsv to validate an XML file with a given XSD schema file. We define mavgen_validate here because it relies on the XML libs that were loaded in mavgen(), so it can't be called standalone""" # use default values of minixsv, location of the schema file must be specified in the XML file domTreeWrapper = pyxsval.parseAndValidate(fname, xsdFile=schema, errorLimit=errorLimitNumber) # Process all XML files, validating them as necessary. for fname in args: if opts.validate: print("Validating %s" % fname) mavgen_validate(fname, schemaFile, opts.error_limit); else: print("Validation skipped for %s." % fname) print("Parsing %s" % fname) xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) # expand includes for x in xml[:]: for i in x.include: fname = os.path.join(os.path.dirname(x.filename), i) ## Validate XML file with XSD file if possible. if opts.validate: print("Validating %s" % fname) mavgen_validate(fname, schemaFile, opts.error_limit); else: print("Validation skipped for %s." % fname) ## Parsing print("Parsing %s" % fname) xml.append(mavparse.MAVXML(fname, opts.wire_protocol)) # include message lengths and CRCs too for idx in range(0, 256): if x.message_lengths[idx] == 0: x.message_lengths[idx] = xml[-1].message_lengths[idx] x.message_crcs[idx] = xml[-1].message_crcs[idx] x.message_names[idx] = xml[-1].message_names[idx] # work out max payload size across all includes largest_payload = 0 for x in xml: if x.largest_payload > largest_payload: largest_payload = x.largest_payload for x in xml: x.largest_payload = largest_payload if mavparse.check_duplicates(xml): sys.exit(1) print("Found %u MAVLink message types in %u XML files" % ( mavparse.total_msgs(xml), len(xml))) # Convert language option to lowercase and validate opts.language = opts.language.lower() if opts.language == 'python': import mavgen_python mavgen_python.generate(opts.output, xml) elif opts.language == 'c': try: import mavgen_c except Exception: from pymavlink.generator import mavgen_c mavgen_c.generate(opts.output, xml) elif opts.language == 'wlua': try: import mavgen_wlua except Exception: from pymavlink.generator import mavgen_wlua mavgen_wlua.generate(opts.output, xml) elif opts.language == 'cs': try: import mavgen_cs except Exception: from pymavlink.generator import mavgen_cs mavgen_cs.generate(opts.output, xml) elif opts.language == 'javascript': try: import mavgen_javascript except Exception: from pymavlink.generator import mavgen_javascript mavgen_javascript.generate(opts.output, xml) elif opts.language == 'objc': try: import mavgen_objc except Exception: from pymavlink.generator import mavgen_objc mavgen_objc.generate(opts.output, xml) else: print("Unsupported language %s" % opts.language)