Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
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])
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
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('----------')
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
            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
Ejemplo n.º 11
0
   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"