Tools: sim_vehicle.py: move metadata into _options

This centralises configuration information in _options and
removes duplication of data
This commit is contained in:
Peter Barker 2017-02-20 12:07:33 +11:00
parent fec23f6abe
commit 3be8c1e70b
1 changed files with 21 additions and 26 deletions

View File

@ -282,6 +282,7 @@ extra_mavlink_cmds: extra parameters that will be passed to mavproxy
"""
_options = {
"ArduCopter": {
"default_frame": "quad",
"frames": {
# COPTER
"+": {
@ -368,6 +369,7 @@ _options = {
},
},
"ArduPlane": {
"default_frame": "jsbsim",
"frames": {
# PLANE
"quadplane-tilttri": {
@ -425,6 +427,7 @@ _options = {
},
},
"APMrover2": {
"default_frame": "rover",
"frames": {
# ROVER
"rover": {
@ -441,6 +444,7 @@ _options = {
},
},
"ArduSub": {
"default_frame": "vectored",
"frames": {
"vectored": {
"waf_target": "bin/ardusub",
@ -448,20 +452,20 @@ _options = {
},
},
},
"AntennaTracker": {
"default_frame": "tracker",
"frames": {
"tracker": {
"waf_target": "bin/antennatracker",
},
},
},
}
_default_waf_target = {
"ArduPlane": "bin/arduplane",
"ArduCopter": "bin/arducopter",
"ArduSub": "bin/ardusub",
"APMrover2": "bin/ardurover",
"AntennaTracker": "bin/antennatracker",
}
def default_waf_target(vehicle):
"""Returns a waf target based on vehicle type, which is often determined by which directory the user is in"""
return _default_waf_target[vehicle]
default_frame = _options[vehicle]["default_frame"]
return _options[vehicle]["frames"][default_frame]["waf_target"]
def options_for_frame(frame, vehicle, opts):
@ -671,9 +675,8 @@ def start_antenna_tracker(autotest, opts):
progress("Preparing antenna tracker")
tracker_home = find_location_by_name(find_autotest_dir(), opts.tracker_location)
vehicledir = os.path.join(autotest, "../../" + "AntennaTracker")
tracker_frame_options = {
"waf_target": _default_waf_target["AntennaTracker"],
}
tracker_default_frame = _options["AntennaTracker"]["default_frame"]
tracker_frame_options = _options["AntennaTracker"]["frames"][tracker_default_frame]
do_build(vehicledir, opts, tracker_frame_options)
tracker_instance = 1
os.chdir(vehicledir)
@ -794,14 +797,6 @@ def start_mavproxy(opts, stuff):
progress("MAVProxy exited")
# determine a frame type if not specified:
default_frame_for_vehicle = {
"APMrover2": "rover",
"ArduPlane": "jsbsim",
"ArduCopter": "quad",
"ArduSub": "vectored",
"AntennaTracker": "tracker",
}
vehicle_options_string = '|'.join(_options.keys())
def generate_frame_help():
@ -819,7 +814,7 @@ parser = CompatOptionParser("sim_vehicle.py",
"you are simulating, for example, start in the ArduPlane directory to " \
"simulate ArduPlane")
parser.add_option("-v", "--vehicle", type='choice', default=None, help="vehicle type (%s)" % vehicle_options_string, choices=default_frame_for_vehicle.keys())
parser.add_option("-v", "--vehicle", type='choice', default=None, help="vehicle type (%s)" % vehicle_options_string, choices=_options.keys())
parser.add_option("-f", "--frame", type='string', default=None, help="""set vehicle frame type
%s""" % (generate_frame_help()))
@ -909,20 +904,20 @@ if cmd_opts.vehicle is None:
cwd = os.getcwd()
cmd_opts.vehicle = os.path.basename(cwd)
if cmd_opts.vehicle not in default_frame_for_vehicle:
if cmd_opts.vehicle not in _options:
# try in parent directories, useful for having config in subdirectories
cwd = os.getcwd()
while cwd:
bname = os.path.basename(cwd)
if not bname:
break
if bname in default_frame_for_vehicle:
if bname in _options:
cmd_opts.vehicle = bname
break
cwd = os.path.dirname(cwd)
# try to validate vehicle
if cmd_opts.vehicle not in default_frame_for_vehicle:
if cmd_opts.vehicle not in _options:
progress('''
** Is (%s) really your vehicle type?
Perhaps you could try -v %s
@ -932,7 +927,7 @@ You could also try changing directory to e.g. the ArduCopter subdirectory
# determine frame options (e.g. build type might be "sitl")
if cmd_opts.frame is None:
cmd_opts.frame = default_frame_for_vehicle[cmd_opts.vehicle]
cmd_opts.frame = _options[cmd_opts.vehicle]["default_frame"]
# setup ports for this instance
mavlink_port = "tcp:127.0.0.1:" + str(5760 + 10 * cmd_opts.instance)