def generateHeaders(self): # Verify settings rex = re.compile(".*\\.xml$", re.IGNORECASE) if not self.xml_value.get(): tkinter.messagebox.showerror('Error Generating Headers','An XML message definition file must be specified.') return if not self.out_value.get(): tkinter.messagebox.showerror('Error Generating Headers', 'An output directory must be specified.') return if os.path.isdir(self.out_value.get()): if not tkinter.messagebox.askokcancel('Overwrite Headers?','The output directory \'{0}\' already exists. Headers may be overwritten if they already exist.'.format(self.out_value.get())): return # Generate headers opts = mavgen.Opts(self.out_value.get(), wire_protocol=self.protocol_value.get(), language=self.language_value.get(), validate=self.validate_value.get(), error_limit=error_limit, strict_units=self.strict_units_value.get()); args = [self.xml_value.get()] try: mavgen.mavgen(opts,args) tkinter.messagebox.showinfo('Successfully Generated Headers', 'Headers generated successfully.') except Exception as ex: exStr = formatErrorMessage(str(ex)); tkinter.messagebox.showerror('Error Generating Headers','{0!s}'.format(exStr)) return
def run(definition, out_val, language): opts = mavgen.Opts(out_val, wire_protocol=mavgen.DEFAULT_WIRE_PROTOCOL, language=language, validate=True, error_limit=5) mavgen.mavgen(opts, [definition])
def run(self): from pymavlink.generator import mavgen class mavgen_options: language = 'C' wire_protocol = '2.0' validate = False output = self.env.get_flat('OUTPUT_DIR') xml = self.inputs[0].abspath() if mavgen.mavgen(mavgen_options(), [xml]): return 0 return 1
def generate_headers(xml_value, lang, out_value): # Verify settings rex = re.compile(".*\\.xml$", re.IGNORECASE) if not xml_value: print( 'Error Generating Headers: An XML message definition file must be specified.' ) return if not out_value: print( 'Error Generating Headers: An output directory must be specified.') return if not lang: print('Error Generating Headers: No language selected.') # Generate headers opts = mavgen.Opts(out_value, wire_protocol=mavparse.PROTOCOL_2_0, language=lang, validate=mavgen.DEFAULT_VALIDATE, error_limit=5, strict_units=mavgen.DEFAULT_STRICT_UNITS) args = [xml_value] try: print opts print args mavgen.mavgen(opts, args) print('Successfully Generated Headers', 'Headers generated successfully.') except Exception as ex: exStr = format_error_message(str(ex)) print('Error Generating Headers', '{0!s}'.format(exStr)) return
def run(self): sys.path.insert(0,self.env.get_flat('MAVLINK_DIR')) from pymavlink.generator import mavgen class mavgen_options: language = 'C' wire_protocol = '2.0' validate = False output = self.env.get_flat('OUTPUT_DIR') xml = self.inputs[0].abspath() if mavgen.mavgen(mavgen_options(), [xml]): return 0 return 1
def generatePymavlinkCLibrary(): print('----------') print('Generate pymavlink-mavgen C library') # import generator sys.path.insert(0, pymavlink_pathtorepository) from pymavlink.generator import mavgen from pymavlink.generator import mavparse #recreate out directory print('----------') print('kill dir', pymavlink_outputdirectory) try: shutil.rmtree(pymavlink_outputdirectory) except: pass os.mkdir(pymavlink_outputdirectory) #generate pymavlink-mavgen C library print('----------') opts = mavgen.Opts(pymavlink_outputdirectory, wire_protocol=mavparse.PROTOCOL_2_0, language='C', validate=mavgen.DEFAULT_VALIDATE, error_limit=5, strict_units=mavgen.DEFAULT_STRICT_UNITS) try: mavgen.mavgen(opts, [xmlfile]) print('Successfully Generated Headers', 'Headers generated successfully.') except Exception as ex: exStr = str(ex) print('Error Generating Headers', '{0!s}'.format(exStr)) exit() print('----------')
parser.add_argument("--lang", dest="language", choices=mavgen.supportedLanguages, default=mavgen.DEFAULT_LANGUAGE, help="language of generated code [default: %(default)s]") parser.add_argument("--wire-protocol", choices=[ mavparse.PROTOCOL_0_9, mavparse.PROTOCOL_1_0, mavparse.PROTOCOL_2_0 ], default=mavgen.DEFAULT_WIRE_PROTOCOL, help="MAVLink protocol version. [default: %(default)s]") parser.add_argument( "--no-validate", action="store_false", dest="validate", default=mavgen.DEFAULT_VALIDATE, help= "Do not perform XML validation. Can speed up code generation if XML files are known to be correct." ) parser.add_argument("--error-limit", default=mavgen.DEFAULT_ERROR_LIMIT, help="maximum number of validation errors to display") parser.add_argument("definitions", metavar="XML", nargs="+", help="MAVLink definitions") args = parser.parse_args() mavgen.mavgen(args, args.definitions)
parser = ArgumentParser(description="This tool generate implementations from MAVLink message definitions") parser.add_argument("-o", "--output", default="mavlink", help="output directory.") parser.add_argument( "--lang", dest="language", choices=mavgen.supportedLanguages, default=mavgen.DEFAULT_LANGUAGE, help="language of generated code [default: %(default)s]", ) parser.add_argument( "--wire-protocol", choices=[mavparse.PROTOCOL_0_9, mavparse.PROTOCOL_1_0, mavparse.PROTOCOL_2_0], default=mavgen.DEFAULT_WIRE_PROTOCOL, help="MAVLink protocol version. [default: %(default)s]", ) parser.add_argument( "--no-validate", action="store_false", dest="validate", default=mavgen.DEFAULT_VALIDATE, help="Do not perform XML validation. Can speed up code generation if XML files are known to be correct.", ) parser.add_argument( "--error-limit", default=mavgen.DEFAULT_ERROR_LIMIT, help="maximum number of validation errors to display" ) parser.add_argument("definitions", metavar="XML", nargs="+", help="MAVLink definitions") args = parser.parse_args() mavgen.mavgen(args, args.definitions)
start = fsize.index('[') end = fsize.index(']') if start >= end or end != len(fsize) - 1: raise ValueError('Array has wrong format') regex = b"\[([0-9]+)\]$" arr_size = re.search(regex, fsize).group(0) times = int(arr_size[1:len(arr_size) - 1]) fsize = fsize[:start] except ValueError as err: print(err.args) size += times * lengths[fsize] padding = block_size - (size % block_size) attrib = {'type': 'uint8_t[{}]'.format(padding), 'name': 'padding'} new_field = ET.SubElement(child, 'field', attrib) new_field.text = "Padding for encryption" attrib = {'type': 'uint8_t[16]', 'name': 'tag'} new_field = ET.SubElement(child, 'field', attrib) new_field.text = "128 bit message signature" tree.write('output.xml') opts = mavgen.Opts("test/", wire_protocol=1.0, language=C) mavgen.mavgen(opts, 'output.xml') # python -m pymavlink.tools.mavgen --lang=C --wire-protocol=2.0 --output=generated/include/mavlink/v2.0 message_definitions/v1.0/common.xml
or line == "Y\n" or line == "y\n": print "Proceeding" remove_include_files(target_directory+'/common') remove_include_files(target_directory+'/matrixpilot') print "Finished removing C include files for", xml_file_base else : print "Your answer is No. Exiting Program" sys.exit() opts = options(lang = "C", output=target_directory, \ wire_protocol=protocol, error_limit=200, validate=True) args = [] args.append(source_xml_file) print "About to generate C include files" mavgen(opts, args) opts = options(lang = "python", \ output="../dialects/"+"v10/"+xml_file_base+".py", \ wire_protocol=protocol, error_limit=200,validate=True) print "About to generate python parsers and save them into ../dialects/v10/ directory" mavgen(opts,args) print "All C headers and Python parsers now generated" ##### End of Main program to generate MAVLink C and Python files #### ##### Copy new XML message definitions to main trunk directories source_directory = "../../message_definitions/V1.0" target_directory = "../../../../../MAVLink/message_definitions"