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)
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'])
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'])
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)
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)
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)
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
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
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)
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)
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)
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
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
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")
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)
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()
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()
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)
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])
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)
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])
def token_file(self): return os.path.join(mp_util.dot_mavproxy('ublox'), "api_token")
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)
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)
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
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())) ])