Example #1
0
    def load_definitions(self):
        self.log('Loading joystick definitions', 1)

        self.joydefs = []
        search = []

        userjoysticks = os.environ.get(
            'MAVPROXY_JOYSTICK_DIR',
            mp_util.dot_mavproxy('joysticks'))
        if userjoysticks is not None and os.path.isdir(userjoysticks):
            search.append(userjoysticks)

        search.append(pkg_resources.resource_filename(__name__, 'joysticks'))

        for path in search:
            self.log('Looking for joystick definitions in {}'.format(path),
                     2)
            path = os.path.expanduser(path)
            for dirpath, dirnames, filenames in os.walk(path):
                for joyfile in filenames:
                    root, ext = os.path.splitext(joyfile)
                    if ext[1:] not in ['yml', 'yaml', 'json']:
                        continue

                    joypath = os.path.join(dirpath, joyfile)
                    self.log('Loading definition from {}'.format(joypath), 2)
                    with open(joypath, 'r') as fd:
                        joydef = yaml.safe_load(fd)
                        joydef['path'] = joypath
                        self.joydefs.append(joydef)
Example #2
0
    def __init__(self, mpstate):
        """Initialise module"""
        super(ublox, self).__init__(mpstate, "ublox", "")
        self.auto = True
        self.verbose = False
        self.api_token = self.read_api_token()

        self.auto_failed = None

        self.last_auto = 0
        self.fix_type = 0
        self.time_boot_ms = 0
        self.mga_offline_last_check = 0
        self.mga_offline_data_uploaded = None
        self.state_dir = mp_util.dot_mavproxy('ublox')
        self.mga_cachedir = os.path.join(self.state_dir, "mga")
        try:
            os.makedirs(self.mga_cachedir)
        except OSError as e:
            if e.errno != 17:
                raise e
        self.mga_dbd_cachefile = os.path.join(self.mga_cachedir, "dbd.ubx")
        self.mga_offline = ub.mga.MGAOfflineCache(cachefile=os.path.join(
            self.mga_cachedir, "offline.ubx"),
                                                  token=self.api_token)
        if self.mga_offline.should_request_fresh_data():
            print("Apparently should request fresh data")
#        self.mga_offline.start_update_thread()
        self.ublox_settings = mp_settings.MPSettings([
            ('verbose', bool, False),
            ('auto', bool, False),
        ])
        self.add_command('ublox', self.cmd_ublox, "ublox module",
                         ['status', 'set (AUTO)', 'reset', 'mga'])
Example #3
0
    def __init__(self, mpstate):
        """Initialise module"""
        super(ublox, self).__init__(mpstate, "ublox", "")
        self.auto = True
        self.verbose = False
        self.api_token = self.read_api_token()

        self.auto_failed = None

        self.last_auto = 0
        self.fix_type = 0
        self.time_boot_ms = 0
        self.mga_offline_last_check = 0
        self.mga_offline_data_uploaded = None
        self.state_dir = mp_util.dot_mavproxy('ublox')
        self.mga_cachedir = os.path.join(self.state_dir, "mga")
        try:
            os.makedirs(self.mga_cachedir)
        except OSError as e:
            if e.errno != 17:
                raise e
        self.mga_dbd_cachefile = os.path.join(self.mga_cachedir, "dbd.ubx")
        self.mga_offline = ub.mga.MGAOfflineCache(cachefile=os.path.join(self.mga_cachedir, "offline.ubx"), token=self.api_token)
        if self.mga_offline.should_request_fresh_data():
            print("Apparently should request fresh data")
#        self.mga_offline.start_update_thread()
        self.ublox_settings = mp_settings.MPSettings(
            [ ('verbose', bool, False),
              ('auto', bool, False),
          ])
        self.add_command('ublox', self.cmd_ublox, "ublox module", ['status','set (AUTO)', 'reset', 'mga'])
Example #4
0
 def param_help_download(self):
     '''download XML files for parameters'''
     import multiprocessing
     files = []
     for vehicle in ['APMrover2', 'ArduCopter', 'ArduPlane']:
         url = 'http://autotest.diydrones.com/Parameters/%s/apm.pdef.xml' % vehicle
         path = mp_util.dot_mavproxy("%s.xml" % vehicle)
         files.append((url, path))
         url = 'http://autotest.diydrones.com/%s-defaults.parm' % vehicle
         path = mp_util.dot_mavproxy("%s-defaults.parm" % vehicle)
         files.append((url, path))
     try:
         child = multiprocessing.Process(target=mp_util.download_files, args=(files,))
         child.start()
     except Exception as e:
         print(e)
Example #5
0
    def load_definitions(self):
        self.log('Loading joystick definitions', 1)

        self.joydefs = []
        search = []

        userjoysticks = os.environ.get('MAVPROXY_JOYSTICK_DIR',
                                       mp_util.dot_mavproxy('joysticks'))
        if userjoysticks is not None and os.path.isdir(userjoysticks):
            search.append(userjoysticks)

        search.append(pkg_resources.resource_filename(__name__, 'joysticks'))

        for path in search:
            self.log('Looking for joystick definitions in {}'.format(path), 2)
            path = os.path.expanduser(path)
            for dirpath, dirnames, filenames in os.walk(path):
                for joyfile in filenames:
                    root, ext = os.path.splitext(joyfile)
                    if ext[1:] not in ['yml', 'yaml', 'json']:
                        continue

                    joypath = os.path.join(dirpath, joyfile)
                    self.log('Loading definition from {}'.format(joypath), 2)
                    with open(joypath, 'r') as fd:
                        joydef = yaml.safe_load(fd)
                        joydef['path'] = joypath
                        self.joydefs.append(joydef)
Example #6
0
 def param_help(self, args):
     '''show help on a parameter'''
     if len(args) == 0:
         print("Usage: param help PARAMETER_NAME")
         return
     path = mp_util.dot_mavproxy("%s.xml" % self.vehicle_name)
     if not os.path.exists(path):
         print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name)
         return
     xml = open(path).read()
     from lxml import objectify
     objectify.enable_recursive_str()
     tree = objectify.fromstring(xml)
     htree = {}
     for p in tree.vehicles.parameters.param:
         n = p.get('name').split(':')[1]
         htree[n] = p
     for lib in tree.libraries.parameters:
         for p in lib.param:
             n = p.get('name')
             htree[n] = p
     for h in args:
         if h in htree:
             help = htree[h]
             print("%s: %s\n" % (h, help.get('humanName')))
             print(help.get('documentation'))
             try:
                 vchild = help.getchildren()[0]
                 print("\nValues: ")
                 for v in vchild.value:
                     print("\t%s : %s" % (v.get('code'), str(v)))
             except Exception as e:
                 pass
         else:
             print("Parameter '%s' not found in documentation" % h)
Example #7
0
 def param_help_tree(self):
     '''return a "help tree", a map between a parameter and its metadata.  May return None if help is not available'''
     if self.xml_filepath is not None:
         print("param: using xml_filepath=%s" % self.xml_filepath)
         path = self.xml_filepath
     else:
         if self.vehicle_name is None:
             print("Unknown vehicle type")
             return None
         path = mp_util.dot_mavproxy("%s.xml" % self.vehicle_name)
         if not os.path.exists(path):
             print("Please run 'param download' first (vehicle_name=%s)" %
                   self.vehicle_name)
             return None
     if not os.path.exists(path):
         print("Param XML (%s) does not exist" % path)
         return None
     xml = open(path, 'rb').read()
     from lxml import objectify
     objectify.enable_recursive_str()
     tree = objectify.fromstring(xml)
     htree = {}
     for p in tree.vehicles.parameters.param:
         n = p.get('name').split(':')[1]
         htree[n] = p
     for lib in tree.libraries.parameters:
         for p in lib.param:
             n = p.get('name')
             htree[n] = p
     return htree
Example #8
0
 def param_help_tree(self):
     '''return a "help tree", a map between a parameter and its metadata.  May return None if help is not available'''
     if self.xml_filepath is not None:
         print("param: using xml_filepath=%s" % self.xml_filepath)
         path = self.xml_filepath
     else:
         if self.vehicle_name is None:
             print("Unknown vehicle type")
             return None
         path = mp_util.dot_mavproxy("%s.xml" % self.vehicle_name)
         if not os.path.exists(path):
             print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name)
             return None
     if not os.path.exists(path):
         print("Param XML (%s) does not exist" % path)
         return None
     xml = open(path,'rb').read()
     from lxml import objectify
     objectify.enable_recursive_str()
     tree = objectify.fromstring(xml)
     htree = {}
     for p in tree.vehicles.parameters.param:
         n = p.get('name').split(':')[1]
         htree[n] = p
     for lib in tree.libraries.parameters:
         for p in lib.param:
             n = p.get('name')
             htree[n] = p
     return htree
Example #9
0
 def param_help_download(self):
     '''download XML files for parameters'''
     import multiprocessing
     files = []
     for vehicle in ['APMrover2', 'ArduCopter', 'ArduPlane']:
         url = 'http://autotest.ardupilot.org/Parameters/%s/apm.pdef.xml' % vehicle
         path = mp_util.dot_mavproxy("%s.xml" % vehicle)
         files.append((url, path))
         url = 'http://autotest.ardupilot.org/%s-defaults.parm' % vehicle
         path = mp_util.dot_mavproxy("%s-defaults.parm" % vehicle)
         files.append((url, path))
     try:
         child = multiprocessing.Process(target=mp_util.download_files, args=(files,))
         child.start()
     except Exception as e:
         print(e)
Example #10
0
 def param_help_download(self):
     '''download XML files for parameters'''
     files = []
     for vehicle in ['Rover', 'ArduCopter', 'ArduPlane', 'ArduSub', 'AntennaTracker']:
         url = 'http://autotest.ardupilot.org/Parameters/%s/apm.pdef.xml.gz' % vehicle
         path = mp_util.dot_mavproxy("%s.xml" % vehicle)
         files.append((url, path))
         url = 'http://autotest.ardupilot.org/%s-defaults.parm' % vehicle
         if vehicle != 'AntennaTracker':
             # defaults not generated for AntennaTracker ATM
             path = mp_util.dot_mavproxy("%s-defaults.parm" % vehicle)
             files.append((url, path))
     try:
         child = multiproc.Process(target=mp_util.download_files, args=(files,))
         child.start()
     except Exception as e:
         print(e)
Example #11
0
 def param_help_download(self):
     '''download XML files for parameters'''
     files = []
     for vehicle in ['APMrover2', 'ArduCopter', 'ArduPlane', 'ArduSub', 'AntennaTracker']:
         url = 'http://autotest.ardupilot.org/Parameters/%s/apm.pdef.xml' % vehicle
         path = mp_util.dot_mavproxy("%s.xml" % vehicle)
         files.append((url, path))
         url = 'http://autotest.ardupilot.org/%s-defaults.parm' % vehicle
         if vehicle != 'AntennaTracker':
             # defaults not generated for AntennaTracker ATM
             path = mp_util.dot_mavproxy("%s-defaults.parm" % vehicle)
             files.append((url, path))
     try:
         child = multiproc.Process(target=mp_util.download_files, args=(files,))
         child.start()
     except Exception as e:
         print(e)
Example #12
0
def param_help_download():
    '''download XML files for parameters'''
    for vehicle in ['APMrover2', 'ArduCopter', 'ArduPlane']:
        url = 'http://autotest.diydrones.com/Parameters/%s/apm.pdef.xml' % vehicle
        path = mp_util.dot_mavproxy("%s.xml" % vehicle)
        print("Downloading %s to %s" % (url, path))
        xml = mp_util.download_url(url)
        try:
            open(path, mode='w').write(xml)
        except Exception as e:
            print("Failed to save %s" % path)
    def find_manifests(self):
        '''locate manifests and return filepaths thereof'''
        manifest_dir = mp_util.dot_mavproxy()

        ret = []
        for file in os.listdir(manifest_dir):
            try:
                file.index("manifest")
                ret.append(os.path.join(manifest_dir, file))
            except ValueError:
                pass
        return ret
Example #14
0
    def find_manifests(self):
        '''locate manifests and return filepaths thereof'''
        manifest_dir = mp_util.dot_mavproxy()

        ret = []
        for file in os.listdir(manifest_dir):
            try:
                file.index("manifest")
                ret.append(os.path.join(manifest_dir,file))
            except ValueError:
                pass
        return ret
Example #15
0
    def manifest_download(self):
        '''download manifest files'''
        if self.downloaders_lock.acquire(False):
            if len(self.downloaders):
                # there already exist downloader threads
                self.downloaders_lock.release()
                return

            for url in ['http://firmware.ardupilot.org/manifest.json']:
                filename = self.make_safe_filename_from_url(url)
                path = mp_util.dot_mavproxy("manifest-%s" % filename)
                self.downloaders[url] = threading.Thread(target=self.download_url, args=(url, path))
                self.downloaders[url].start()
            self.downloaders_lock.release()
        else:
            print("fw: Failed to acquire download lock")
Example #16
0
def load_graphs():
    '''load graphs from mavgraphs.xml'''
    mestate.graphs = []
    gfiles = ['mavgraphs.xml']
    for dirname, dirnames, filenames in os.walk(mp_util.dot_mavproxy()):
        for filename in filenames:
            if filename.lower().endswith('.xml'):
                gfiles.append(os.path.join(dirname, filename))

    for file in gfiles:
        if not os.path.exists(file):
            continue
        # skip parameter files.  They specify an encoding, and under
        # Python3 this leads to a warning from etree
        if os.path.basename(file) in [
                "ArduSub.xml", "ArduPlane.xml", "APMrover2.xml",
                "ArduCopter.xml", "AntennaTracker.xml"
        ]:
            continue
        graphs = load_graph_xml(open(file).read(), file)
        if graphs:
            mestate.graphs.extend(graphs)
            mestate.console.writeln("Loaded %s" % file)
    # also load the built in graphs
    try:
        dlist = pkg_resources.resource_listdir("MAVProxy", "tools/graphs")
        for f in dlist:
            raw = pkg_resources.resource_stream("MAVProxy",
                                                "tools/graphs/%s" % f).read()
            graphs = load_graph_xml(raw, None)
            if graphs:
                mestate.graphs.extend(graphs)
                mestate.console.writeln("Loaded %s" % f)
    except Exception:
        #we're in a Windows exe, where pkg_resources doesn't work
        import pkgutil
        for f in [
                "ekf3Graphs.xml", "ekfGraphs.xml", "mavgraphs.xml",
                "mavgraphs2.xml"
        ]:
            raw = pkgutil.get_data('MAVProxy', 'tools//graphs//' + f)
            graphs = load_graph_xml(raw, None)
            if graphs:
                mestate.graphs.extend(graphs)
                mestate.console.writeln("Loaded %s" % f)
    mestate.graphs = sorted(mestate.graphs, key=lambda g: g.name)
    def manifest_download(self):
        '''download manifest files'''
        if self.downloaders_lock.acquire(False):
            if len(self.downloaders):
                # there already exist downloader threads
                self.downloaders_lock.release()
                return

            for url in ['https://firmware.ardupilot.org/manifest.json']:
                filename = self.make_safe_filename_from_url(url)
                path = mp_util.dot_mavproxy("manifest-%s" % filename)
                self.downloaders[url] = threading.Thread(
                    target=self.download_url, args=(url, path))
                self.downloaders[url].start()
            self.downloaders_lock.release()
        else:
            print("fw: Failed to acquire download lock")
 def param_help(self, args):
     '''show help on a parameter'''
     if len(args) == 0:
         print("Usage: param help PARAMETER_NAME")
         return
     if self.vehicle_name is None:
         print("Unknown vehicle type")
         return
     path = mp_util.dot_mavproxy("%s.xml" % self.vehicle_name)
     if not os.path.exists(path):
         print("Please run 'param download' first (vehicle_name=%s)" %
               self.vehicle_name)
         return
     xml = open(path).read()
     from lxml import objectify
     objectify.enable_recursive_str()
     tree = objectify.fromstring(xml)
     htree = {}
     for p in tree.vehicles.parameters.param:
         n = p.get('name').split(':')[1]
         htree[n] = p
     for lib in tree.libraries.parameters:
         for p in lib.param:
             n = p.get('name')
             htree[n] = p
     for h in args:
         if h in htree:
             help = htree[h]
             print("%s: %s\n" % (h, help.get('humanName')))
             print(help.get('documentation'))
             try:
                 print("\n")
                 for f in help.field:
                     print("%s : %s" % (f.get('name'), str(f)))
             except Exception as e:
                 pass
             try:
                 vchild = help.getchildren()[0]
                 print("\nValues: ")
                 for v in vchild.value:
                     print("\t%s : %s" % (v.get('code'), str(v)))
             except Exception as e:
                 pass
         else:
             print("Parameter '%s' not found in documentation" % h)
Example #19
0
def save_graph(graphdef):
    '''save a graph as XML'''
    if graphdef.filename is None:
        graphdef.filename = os.path.join(mp_util.dot_mavproxy(),
                                         'mavgraphs.xml')
    contents = None
    try:
        contents = open(graphdef.filename).read()
        graphs = load_graph_xml(contents, graphdef.filename, load_all=True)
    except Exception as ex:
        graphs = []
        print(ex)
    if contents is not None and len(graphs) == 0:
        print("Unable to parse %s" % graphdef.filename)
        return
    if contents is not None:
        try:
            open(graphdef.filename + ".bak", 'w').write(contents)
        except Exception:
            pass
    found_name = False
    for i in range(len(graphs)):
        if graphs[i].name == graphdef.name:
            graphs[i] = graphdef
            found_name = True
            break
    if not found_name:
        graphs.append(graphdef)
    pipe_console_input.send("Saving %u graphs to %s" %
                            (len(graphs), graphdef.filename))
    f = open(graphdef.filename, "w")
    f.write("<graphs>\n\n")
    for g in graphs:
        f.write(" <graph name='%s'>\n" % g.name.strip())
        if g.description is None:
            g.description = ''
        f.write("  <description>%s</description>\n" % g.description.strip())
        for e in g.expressions:
            e = xml_escape(e)
            f.write("  <expression>%s</expression>\n" % e.strip())
        f.write(" </graph>\n\n")
    f.write("</graphs>\n")
    f.close()
Example #20
0
    def __init__(self, mpstate):
        """Initialise module"""
        super(EvJoy, self).__init__(mpstate, 'evjoy',
                                       'A flexible evjoy driver without the pygame baggage.')

        self.evjoy = None

        self.init_settings()
        self.init_commands()

        search = []
        userdir = os.environ.get('MAVPROXY_EVJOY_DIR')
        if userdir is not None and os.path.isdir(userdir):
            search.append(userdir)
        userdir = mp_util.dot_mavproxy('evjoy')
        if userdir is not None and os.path.isdir(userdir):
            search.append(userdir)
        search.append(pkg_resources.resource_filename(__name__, 'joysticks'))
        self.search = search

        self.probe()
Example #21
0
 def param_help_tree(self):
     '''return a "help tree", a map between a parameter and its metadata.  May return None if help is not available'''
     if self.xml_filepath is not None:
         path = self.xml_filepath
     elif self.vehicle_name is not None:
         path = mp_util.dot_mavproxy("%s.xml" % self.vehicle_name)
         if not os.path.exists(path):
             self.param_help_download()
     else:
         return
     try:
         xml = open(path, 'rb').read()
         from lxml import objectify
         objectify.enable_recursive_str()
         tree = objectify.fromstring(xml)
         for p in tree.vehicles.parameters.param:
             n = p.get('name').split(':')[1]
             self.htree[n] = p
         for lib in tree.libraries.parameters:
             for p in lib.param:
                 n = p.get('name')
                 self.htree[n] = p
     except Exception as e:
         print(e)
    def handle_command(self, master, mpstate, args):
        '''handle parameter commands'''
        param_wildcard = "*"
        usage = "Usage: param <fetch|set|show|load|preload|forceload|diff|download|help>"
        if len(args) < 1:
            print(usage)
            return
        if args[0] == "fetch":
            if len(args) == 1:
                master.param_fetch_all()
                self.mav_param_set = set()
                print("Requested parameter list")
            else:
                for p in self.mav_param.keys():
                    if fnmatch.fnmatch(p, args[1].upper()):
                        master.param_fetch_one(p)
                        self.fetch_one += 1
                        print("Requested parameter %s" % p)
        elif args[0] == "save":
            if len(args) < 2:
                print("usage: param save <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.save(args[1], param_wildcard, verbose=True)
        elif args[0] == "diff":
            wildcard = '*'
            if len(args) < 2 or args[1].find('*') != -1:
                if self.vehicle_name is None:
                    print("Unknown vehicle type")
                    return
                filename = mp_util.dot_mavproxy("%s-defaults.parm" %
                                                self.vehicle_name)
                if not os.path.exists(filename):
                    print(
                        "Please run 'param download' first (vehicle_name=%s)" %
                        self.vehicle_name)
                    return
                if len(args) >= 2:
                    wildcard = args[1]
            else:
                filename = args[1]
                if len(args) == 3:
                    wildcard = args[2]
            print("%-16.16s %12.12s %12.12s" %
                  ('Parameter', 'Defaults', 'Current'))
            self.mav_param.diff(filename, wildcard=wildcard)
        elif args[0] == "set":
            if len(args) < 2:
                print("Usage: param set PARMNAME VALUE")
                return
            if len(args) == 2:
                self.mav_param.show(args[1])
                return
            param = args[1]
            value = args[2]
            if value.startswith('0x'):
                value = int(value, base=16)
            if not param.upper() in self.mav_param:
                print("Unable to find parameter '%s'" % param)
                return
            self.mav_param.mavset(master, param.upper(), value, retries=3)
            print "set ppp"

            if (param.upper() == "WP_LOITER_RAD"
                    or param.upper() == "LAND_BREAK_PATH"):
                #need to redraw rally points
                mpstate.module('rally').rallyloader.last_change = time.time()
                #need to redraw loiter points
                mpstate.module('wp').wploader.last_change = time.time()

        elif args[0] == "load":
            if len(args) < 2:
                print("Usage: param load <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.load(args[1], param_wildcard, master)
        elif args[0] == "preload":
            if len(args) < 2:
                print("Usage: param preload <filename>")
                return
            self.mav_param.load(args[1])
        elif args[0] == "forceload":
            if len(args) < 2:
                print("Usage: param forceload <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.load(args[1], param_wildcard, master, check=False)
        elif args[0] == "download":
            self.param_help_download()
        elif args[0] == "help":
            self.param_help(args[1:])
        elif args[0] == "show":
            if len(args) > 1:
                pattern = args[1]
            else:
                pattern = "*"
            self.mav_param.show(pattern)
        else:
            print(usage)
Example #23
0
 def cmd_param(self, args):
     '''control parameters'''
     state = self
     param_wildcard = "*"
     if len(args) < 1:
         print("usage: param <fetch|set|show|diff|download|help>")
         return
     if args[0] == "fetch":
         if len(args) == 1:
             self.master.param_fetch_all()
             state.mav_param_set = set()
             print("Requested parameter list")
         else:
             for p in self.mav_param.keys():
                 if fnmatch.fnmatch(p, args[1].upper()):
                     self.master.param_fetch_one(p)
                     state.fetch_one += 1
                     print("Requested parameter %s" % p)
     elif args[0] == "save":
         if len(args) < 2:
             print("usage: param save <filename> [wildcard]")
             return
         if len(args) > 2:
             param_wildcard = args[2]
         else:
             param_wildcard = "*"
         self.mav_param.save(args[1], param_wildcard, verbose=True)
     elif args[0] == "diff":
         wildcard = '*'
         if len(args) < 2 or args[1].find('*') != -1:
             filename = mp_util.dot_mavproxy("%s-defaults.parm" % self.vehicle_name)
             if not os.path.exists(filename):
                 print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name)
                 return
             if len(args) >= 2:
                 wildcard = args[1]
         else:
             filename = args[1]
             if len(args) == 3:
                 wildcard = args[2]
         print("%-16.16s %12.12s %12.12s" % ('Parameter', 'Defaults', 'Current'))
         self.mav_param.diff(filename, wildcard=wildcard)
     elif args[0] == "set":
         if len(args) < 2:
             print("Usage: param set PARMNAME VALUE")
             return
         if len(args) == 2:
             self.mav_param.show(args[1])            
             return
         param = args[1]
         value = args[2]
         if not param.upper() in self.mav_param:
             print("Unable to find parameter '%s'" % param)
             return
         self.mpstate.functions.param_set(param, value)
     elif args[0] == "load":
         if len(args) < 2:
             print("Usage: param load <filename> [wildcard]")
             return
         if len(args) > 2:
             param_wildcard = args[2]
         else:
             param_wildcard = "*"
         self.mav_param.load(args[1], param_wildcard, self.master)
     elif args[0] == "download":
         self.param_help_download()
     elif args[0] == "help":
         self.param_help(args[1:])
     elif args[0] == "show":
         if len(args) > 1:
             pattern = args[1]
         else:
             pattern = "*"
         self.mav_param.show(pattern)
     else:
         print("Unknown subcommand '%s' (try 'fetch', 'save', 'set', 'show', 'load', 'help')" % args[0])
Example #24
0
    def handle_command(self, master, mpstate, args):
        '''handle parameter commands'''
        param_wildcard = "*"
        usage="Usage: param <fetch|save|set|show|load|preload|forceload|diff|download|help>"
        if len(args) < 1:
            print(usage)
            return
        if args[0] == "fetch":
            if len(args) == 1:
                master.param_fetch_all()
                self.mav_param_set = set()
                print("Requested parameter list")
            else:
                for p in self.mav_param.keys():
                    if fnmatch.fnmatch(p, args[1].upper()):
                        master.param_fetch_one(p)
                        if p not in self.fetch_one:
                            self.fetch_one[p] = 0
                        self.fetch_one[p] += 1
                        print("Requested parameter %s" % p)
        elif args[0] == "save":
            if len(args) < 2:
                print("usage: param save <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.save(args[1], param_wildcard, verbose=True)
        elif args[0] == "diff":
            wildcard = '*'
            if len(args) < 2 or args[1].find('*') != -1:
                if self.vehicle_name is None:
                    print("Unknown vehicle type")
                    return
                filename = mp_util.dot_mavproxy("%s-defaults.parm" % self.vehicle_name)
                if not os.path.exists(filename):
                    print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name)
                    return
                if len(args) >= 2:
                    wildcard = args[1]
            else:
                filename = args[1]
                if len(args) == 3:
                    wildcard = args[2]
            print("%-16.16s %12.12s %12.12s" % ('Parameter', 'Defaults', 'Current'))
            self.mav_param.diff(filename, wildcard=wildcard)
        elif args[0] == "set":
            if len(args) < 2:
                print("Usage: param set PARMNAME VALUE")
                return
            if len(args) == 2:
                self.mav_param.show(args[1])
                return
            param = args[1]
            value = args[2]
            if value.startswith('0x'):
                value = int(value, base=16)
            if not param.upper() in self.mav_param:
                print("Unable to find parameter '%s'" % param)
                return
            self.mav_param.mavset(master, param.upper(), value, retries=3)

            if (param.upper() == "WP_LOITER_RAD" or param.upper() == "LAND_BREAK_PATH"):
                #need to redraw rally points
                mpstate.module('rally').rallyloader.last_change = time.time()
                #need to redraw loiter points
                mpstate.module('wp').wploader.last_change = time.time()

        elif args[0] == "load":
            if len(args) < 2:
                print("Usage: param load <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.load(args[1], param_wildcard, master)
        elif args[0] == "preload":
            if len(args) < 2:
                print("Usage: param preload <filename>")
                return
            self.mav_param.load(args[1])
        elif args[0] == "forceload":
            if len(args) < 2:
                print("Usage: param forceload <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.load(args[1], param_wildcard, master, check=False)
        elif args[0] == "download":
            self.param_help_download()
        elif args[0] == "apropos":
            self.param_apropos(args[1:])
        elif args[0] == "help":
            self.param_help(args[1:])
        elif args[0] == "show":
            if len(args) > 1:
                pattern = args[1]
            else:
                pattern = "*"
            self.mav_param.show(pattern)
        elif args[0] == "status":
            print("Have %u/%u params" % (len(self.mav_param_set), self.mav_param_count))
        else:
            print(usage)
Example #25
0
def cmd_param(args):
    '''control parameters'''
    state = mpstate.param_state
    param_wildcard = "*"
    if len(args) < 1:
        print("usage: param <fetch|set|show|diff|download|help>")
        return
    if args[0] == "fetch":
        if len(args) == 1:
            mpstate.master().param_fetch_all()
            state.mav_param_set = set()
            print("Requested parameter list")
        else:
            for p in mpstate.mav_param.keys():
                if fnmatch.fnmatch(p, args[1].upper()):
                    mpstate.master().param_fetch_one(p)
                    state.fetch_one += 1
                    print("Requested parameter %s" % p)
    elif args[0] == "save":
        if len(args) < 2:
            print("usage: param save <filename> [wildcard]")
            return
        if len(args) > 2:
            param_wildcard = args[2]
        else:
            param_wildcard = "*"
        mpstate.mav_param.save(args[1], param_wildcard, verbose=True)
    elif args[0] == "diff":
        wildcard = '*'
        if len(args) < 2 or args[1].find('*') != -1:
            filename = mp_util.dot_mavproxy("%s-defaults.parm" %
                                            mpstate.vehicle_name)
            if not os.path.exists(filename):
                print("Please run 'param download' first (vehicle_name=%s)" %
                      mpstate.vehicle_name)
                return
            if len(args) >= 2:
                wildcard = args[1]
        else:
            filename = args[1]
            if len(args) == 3:
                wildcard = args[2]
        print("%-16.16s %12.12s %12.12s" %
              ('Parameter', 'Defaults', 'Current'))
        mpstate.mav_param.diff(filename, wildcard=wildcard)
    elif args[0] == "set":
        if len(args) != 3:
            print("Usage: param set PARMNAME VALUE")
            return
        param = args[1]
        value = args[2]
        if not param.upper() in mpstate.mav_param:
            print("Unable to find parameter '%s'" % param)
            return
        mpstate.functions.param_set(param, value)
    elif args[0] == "load":
        if len(args) < 2:
            print("Usage: param load <filename> [wildcard]")
            return
        if len(args) > 2:
            param_wildcard = args[2]
        else:
            param_wildcard = "*"
        mpstate.mav_param.load(args[1], param_wildcard, mpstate.master())
    elif args[0] == "download":
        param_help_download()
    elif args[0] == "help":
        param_help(args[1:])
    elif args[0] == "show":
        if len(args) > 1:
            pattern = args[1]
        else:
            pattern = "*"
        mpstate.mav_param.show(pattern)
    else:
        print(
            "Unknown subcommand '%s' (try 'fetch', 'save', 'set', 'show', 'load', 'help')"
            % args[0])
Example #26
0
 def token_file(self):
     return os.path.join(mp_util.dot_mavproxy('ublox'), "api_token")
Example #27
0
 def token_file(self):
     return os.path.join(mp_util.dot_mavproxy('ublox'), "api_token")
Example #28
0
    def handle_command(self, master, mpstate, args):
        '''handle parameter commands'''
        param_wildcard = "*"
        usage="Usage: param <fetch|ftp|save|set|show|load|preload|forceload|diff|download|check|help>"
        if len(args) < 1:
            print(usage)
            return
        if args[0] == "fetch":
            if len(args) == 1:
                self.fetch_all(master)
                if self.ftp_started:
                    print("Requested parameter list (ftp)")
                else:
                    print("Requested parameter list")
            else:
                found = False
                pname = args[1].upper()
                for p in self.mav_param.keys():
                    if fnmatch.fnmatch(p, pname):
                        master.param_fetch_one(p)
                        if p not in self.fetch_one:
                            self.fetch_one[p] = 0
                        self.fetch_one[p] += 1
                        found = True
                        print("Requested parameter %s" % p)
                if not found and args[1].find('*') == -1:
                    master.param_fetch_one(pname)
                    if pname not in self.fetch_one:
                        self.fetch_one[pname] = 0
                    self.fetch_one[pname] += 1
                    print("Requested parameter %s" % pname)
        elif args[0] == "ftp":
            self.ftp_start()

        elif args[0] == "save":
            if len(args) < 2:
                print("usage: param save <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.save(args[1].strip('"'), param_wildcard, verbose=True)
        elif args[0] == "diff":
            wildcard = '*'
            if len(args) < 2 or args[1].find('*') != -1:
                if self.vehicle_name is None:
                    print("Unknown vehicle type")
                    return
                filename = mp_util.dot_mavproxy("%s-defaults.parm" % self.vehicle_name)
                if not os.path.exists(filename):
                    print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name)
                    return
                if len(args) >= 2:
                    wildcard = args[1]
            else:
                filename = args[1]
                if len(args) == 3:
                    wildcard = args[2]
            print("%-16.16s %12.12s %12.12s" % ('Parameter', 'Defaults', 'Current'))
            self.mav_param.diff(filename, wildcard=wildcard)
        elif args[0] == "set":
            if len(args) < 2:
                print("Usage: param set PARMNAME VALUE")
                return
            if len(args) == 2:
                self.mav_param.show(args[1])
                return
            param = args[1]
            value = args[2]
            if value.startswith('0x'):
                value = int(value, base=16)
            if not param.upper() in self.mav_param:
                print("Unable to find parameter '%s'" % param)
                return
            uname = param.upper()
            ptype = None
            if uname in self.param_types:
                ptype = self.param_types[uname]
            self.mav_param.mavset(master, uname, value, retries=3, parm_type=ptype)

            if (param.upper() == "WP_LOITER_RAD" or param.upper() == "LAND_BREAK_PATH"):
                #need to redraw rally points
                mpstate.module('rally').set_last_change(time.time())
                #need to redraw loiter points
                mpstate.module('wp').wploader.last_change = time.time()

        elif args[0] == "load":
            if len(args) < 2:
                print("Usage: param load <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.load(args[1].strip('"'), param_wildcard, master)
        elif args[0] == "preload":
            if len(args) < 2:
                print("Usage: param preload <filename>")
                return
            self.mav_param.load(args[1].strip('"'))
        elif args[0] == "forceload":
            if len(args) < 2:
                print("Usage: param forceload <filename> [wildcard]")
                return
            if len(args) > 2:
                param_wildcard = args[2]
            else:
                param_wildcard = "*"
            self.mav_param.load(args[1].strip('"'), param_wildcard, master, check=False)
        elif args[0] == "download":
            self.param_help_download()
        elif args[0] == "apropos":
            self.param_apropos(args[1:])
        elif args[0] == "check":
            self.param_check(args[1:])
        elif args[0] == "help":
            self.param_help(args[1:])
        elif args[0] == "set_xml_filepath":
            self.param_set_xml_filepath(args[1:])
        elif args[0] == "show":
            if len(args) > 1:
                pattern = args[1]
            else:
                pattern = "*"
            self.mav_param.show(pattern)
        elif args[0] == "status":
            print("Have %u/%u params" % (len(self.mav_param_set), self.mav_param_count))
        else:
            print(usage)
Example #29
0
 def handle_command(self, master, args):
     '''handle parameter commands'''
     param_wildcard = "*"
     usage="Usage: param <fetch|set|show|load|preload|forceload|diff|download|help>"
     if len(args) < 1:
         print(usage)
         return
     if args[0] == "fetch":
         if len(args) == 1:
             master.param_fetch_all()
             self.mav_param_set = set()
             print("Requested parameter list")
         else:
             for p in self.mav_param.keys():
                 if fnmatch.fnmatch(p, args[1].upper()):
                     master.param_fetch_one(p)
                     self.fetch_one += 1
                     print("Requested parameter %s" % p)
     elif args[0] == "save":
         if len(args) < 2:
             print("usage: param save <filename> [wildcard]")
             return
         if len(args) > 2:
             param_wildcard = args[2]
         else:
             param_wildcard = "*"
         self.mav_param.save(args[1], param_wildcard, verbose=True)
     elif args[0] == "diff":
         wildcard = '*'
         if len(args) < 2 or args[1].find('*') != -1:
             if self.vehicle_name is None:
                 print("Unknown vehicle type")
                 return
             filename = mp_util.dot_mavproxy("%s-defaults.parm" % self.vehicle_name)
             if not os.path.exists(filename):
                 print("Please run 'param download' first (vehicle_name=%s)" % self.vehicle_name)
                 return
             if len(args) >= 2:
                 wildcard = args[1]
         else:
             filename = args[1]
             if len(args) == 3:
                 wildcard = args[2]
         print("%-16.16s %12.12s %12.12s" % ('Parameter', 'Defaults', 'Current'))
         self.mav_param.diff(filename, wildcard=wildcard)
     elif args[0] == "set":
         if len(args) < 2:
             print("Usage: param set PARMNAME VALUE")
             return
         if len(args) == 2:
             self.mav_param.show(args[1])            
             return
         param = args[1]
         value = args[2]
         if not param.upper() in self.mav_param:
             print("Unable to find parameter '%s'" % param)
             return
         self.mav_param.mavset(master, param.upper(), value, retries=3)
     elif args[0] == "load":
         if len(args) < 2:
             print("Usage: param load <filename> [wildcard]")
             return
         if len(args) > 2:
             param_wildcard = args[2]
         else:
             param_wildcard = "*"
         self.mav_param.load(args[1], param_wildcard, master)
     elif args[0] == "preload":
         if len(args) < 2:
             print("Usage: param preload <filename>")
             return
         self.mav_param.load(args[1])
     elif args[0] == "forceload":
         if len(args) < 2:
             print("Usage: param forceload <filename> [wildcard]")
             return
         if len(args) > 2:
             param_wildcard = args[2]
         else:
             param_wildcard = "*"
         self.mav_param.load(args[1], param_wildcard, master, check=False)
     elif args[0] == "download":
         self.param_help_download()
     elif args[0] == "help":
         self.param_help(args[1:])
     elif args[0] == "show":
         if len(args) > 1:
             pattern = args[1]
         else:
             pattern = "*"
         self.mav_param.show(pattern)
     else:
         print(usage)
Example #30
0
        mestate.console.write('#')

if __name__ == "__main__":
    multiproc.freeze_support()
    from argparse import ArgumentParser
    parser = ArgumentParser(description=__doc__)
    parser.add_argument("--version", action='store_true', help="show version")
    parser.add_argument("files", metavar="<FILE>", nargs="?")
    args = parser.parse_args()

    if args.version:
        #pkg_resources doesn't work in the windows exe build, so read the version file
        try:
            version = pkg_resources.require("mavproxy")[0].version
        except Exception as e:
            start_script = mp_util.dot_mavproxy("version.txt")
            f = open(start_script, 'r')
            version = f.readline()
        print("MAVExplorer Version: " + version)
        sys.exit(1)
    
    mestate = MEState()
    setup_file_menu()

    mestate.rl = rline.rline("MAV> ", mestate)

    #If specified, open the log file
    if args.files is not None and len(args.files) != 0:
        loadfile(args.files)

    # run main loop as a thread
Example #31
0
    def __init__(self, mpstate):
        super(HelpModule, self).__init__(mpstate,
                                         "mavhelp",
                                         "Help and version information",
                                         public=True)
        self.enabled = False
        self.add_command('mavhelp', self.cmd_help,
                         "help and version information", "<about|site>")
        self.have_list = False

        #versioning info
        #pkg_resources doesn't work in the windows exe build, so read the version file
        try:
            import pkg_resources
            self.version = pkg_resources.Environment()["mavproxy"][0].version
        except:
            start_script = mp_util.dot_mavproxy("version.txt")
            f = open(start_script, 'r')
            self.version = f.readline()
        self.host = platform.system() + platform.release()
        self.pythonversion = str(platform.python_version())
        if mp_util.has_wxpython:
            self.wxVersion = str(wx.__version__)
        else:
            self.wxVersion = ''

        #check for updates, if able
        pypi = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')
        available = None
        try:
            available = pypi.package_releases('MAVProxy')
        except socket.gaierror:
            pass

        if available:
            self.newversion = available[0]
        else:
            self.newversion = 'Error finding update'

        #and format the update string
        if not isinstance(self.newversion, basestring):
            self.newversion = "Error finding update"
        elif re.search('[a-zA-Z]', self.newversion):
            self.newversion = "Error finding update: " + self.newversion
        elif self.newversion.strip() == self.version.strip():
            self.newversion = "Running latest version"
        else:
            self.newversion = "New version " + self.newversion + " available (currently running " + self.version + ")"

        if mp_util.has_wxpython:
            self.menu_added_console = False
            self.menu = MPMenuSubMenu(
                'Help',
                items=[
                    MPMenuItem(
                        'MAVProxy website',
                        'MAVProxy website',
                        '',
                        handler=MPMenuOpenWeblink(
                            'https://ardupilot.org/mavproxy/index.html')),
                    MPMenuItem('Check for Updates',
                               'Check for Updates',
                               '',
                               handler=MPMenuChildMessageDialog(
                                   title="Updates", message=self.newversion)),
                    MPMenuItem('About',
                               'About',
                               '',
                               handler=MPMenuChildMessageDialog(
                                   title="About MAVProxy",
                                   message=self.about_string()))
                ])