Skip to content

Commit 24c4079

Browse files
committed
FEATURE: Automaticaly use vehicle and version dependent apm.pdef.xml URLs
1 parent 34bdea1 commit 24c4079

7 files changed

+30
-12
lines changed

MethodicConfigurator/ardupilot_methodic_configurator.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ def main():
123123
FlightControllerInfoWindow(flight_controller)
124124

125125
try:
126-
local_filesystem = LocalFilesystem(args.vehicle_dir, vehicle_type, args.allow_editing_template_files)
126+
local_filesystem = LocalFilesystem(args.vehicle_dir, vehicle_type, flight_controller.info.flight_sw_version,
127+
args.allow_editing_template_files)
127128
except SystemExit as exp:
128129
show_error_message("Fatal error reading parameter files", f"{exp}")
129130
raise

MethodicConfigurator/backend_filesystem.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,11 @@ class LocalFilesystem(VehicleComponents, ConfigurationSteps): # pylint: disable
9494
param_default_dict (dict): A dictionary of default parameter values.
9595
doc_dict (dict): A dictionary containing documentation for each parameter.
9696
"""
97-
def __init__(self, vehicle_dir: str, vehicle_type: str, allow_editing_template_files: bool = False):
97+
def __init__(self, vehicle_dir: str, vehicle_type: str, fw_version: str, allow_editing_template_files: bool):
9898
self.file_parameters = None
9999
VehicleComponents.__init__(self)
100100
ConfigurationSteps.__init__(self, vehicle_dir, vehicle_type)
101+
self.fw_version = fw_version
101102
self.allow_editing_template_files = allow_editing_template_files
102103
if vehicle_dir is not None:
103104
self.re_init(vehicle_dir, vehicle_type)
@@ -119,7 +120,23 @@ def re_init(self, vehicle_dir: str, vehicle_type: str):
119120

120121
# Read ArduPilot parameter documentation
121122
xml_dir = vehicle_dir if os_path.isdir(vehicle_dir) else os_path.dirname(os_path.realpath(vehicle_dir))
122-
xml_root, self.param_default_dict = get_xml_data(BASE_URL + vehicle_type + "/", xml_dir, PARAM_DEFINITION_XML_FILE)
123+
vehicle_parm_subdir = {
124+
"ArduCopter": "versioned/Copter/stable-",
125+
"ArduPlane": "versioned/Plane/stable-",
126+
"Rover": "versioned/Rover/stable-",
127+
"ArduSub": "versioned/Sub/stable-",
128+
"AntennaTracker": "versioned/Tracker/stable-",
129+
# Not yet versioned in the https://autotest.ardupilot.org/Parameters server
130+
'AP_Periph': 'versioned/Periph/stable-',
131+
'Blimp': 'versioned/Blimp/stable-',
132+
'Heli': 'versioned/Heli/stable-',
133+
'SITL': 'versioned/SITL/stable-'
134+
}
135+
if self.fw_version:
136+
xml_url = BASE_URL + vehicle_parm_subdir[vehicle_type] + self.fw_version + "/"
137+
else:
138+
xml_url = BASE_URL + vehicle_type + "/"
139+
xml_root, self.param_default_dict = get_xml_data(xml_url, xml_dir, PARAM_DEFINITION_XML_FILE)
123140
self.doc_dict = create_doc_dict(xml_root, vehicle_type, TOOLTIP_MAX_LENGTH)
124141

125142
self.__extend_and_reformat_parameter_documentation_metadata()

MethodicConfigurator/frontend_tkinter_component_editor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,6 @@ def validate_data(self): # pylint: disable=too-many-branches
425425

426426
logging_basicConfig(level=logging_getLevelName(args.loglevel), format='%(asctime)s - %(levelname)s - %(message)s')
427427

428-
filesystem = LocalFilesystem(args.vehicle_dir, args.vehicle_type, args.allow_editing_template_files)
428+
filesystem = LocalFilesystem(args.vehicle_dir, args.vehicle_type, None, args.allow_editing_template_files)
429429
app = ComponentEditorWindow(VERSION, filesystem)
430430
app.root.mainloop()

MethodicConfigurator/frontend_tkinter_component_editor_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,6 @@ def add_argparse_arguments(parser):
199199

200200
logging_basicConfig(level=logging_getLevelName(args.loglevel), format='%(asctime)s - %(levelname)s - %(message)s')
201201

202-
filesystem = LocalFilesystem(args.vehicle_dir, args.vehicle_type, args.allow_editing_template_files)
202+
filesystem = LocalFilesystem(args.vehicle_dir, args.vehicle_type, None, args.allow_editing_template_files)
203203
app = ComponentEditorWindowBase(VERSION, filesystem)
204204
app.root.mainloop()

MethodicConfigurator/frontend_tkinter_directory_selection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@ def main():
412412
logging_warning("This main is for testing and development only, usually the VehicleDirectorySelectionWindow is"
413413
" called from another script")
414414

415-
local_filesystem = LocalFilesystem(args.vehicle_dir, args.vehicle_type, args.allow_editing_template_files)
415+
local_filesystem = LocalFilesystem(args.vehicle_dir, args.vehicle_type, None, args.allow_editing_template_files)
416416

417417
# Get the list of intermediate parameter files files that will be processed sequentially
418418
files = list(local_filesystem.file_parameters.keys())

MethodicConfigurator/frontend_tkinter_template_overview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ def main():
147147
vehicle_type = "ArduCopter"
148148

149149
try:
150-
local_filesystem = LocalFilesystem(args.vehicle_dir, vehicle_type, args.allow_editing_template_files)
150+
local_filesystem = LocalFilesystem(args.vehicle_dir, vehicle_type, None, args.allow_editing_template_files)
151151
except SystemExit as expt:
152152
show_error_message("Fatal error reading parameter files", f"{expt}")
153153
raise

unittests/backend_filesystem_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def test_read_params_from_files(self, mock_listdir, mock_isdir):
3232
LocalFilesystem.load_param_file_into_dict = mock_load_param_file_into_dict
3333

3434
# Call the method under test
35-
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type')
35+
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type', None, False)
3636
result = lfs.read_params_from_files()
3737

3838
# Assertions
@@ -42,7 +42,7 @@ def test_read_params_from_files(self, mock_listdir, mock_isdir):
4242
mock_load_param_file_into_dict.assert_called_once_with('vehicle_dir/02_test.param')
4343

4444
def test_str_to_bool(self):
45-
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type')
45+
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type', None, False)
4646
self.assertTrue(lfs.str_to_bool('true'))
4747
self.assertTrue(lfs.str_to_bool('yes'))
4848
self.assertTrue(lfs.str_to_bool('1'))
@@ -59,7 +59,7 @@ def test_re_init(self, mock_read_params_from_files, mock_listdir, mock_isdir):
5959
mock_listdir.return_value = ['00_default.param', '01_ignore_readonly.param', '02_test.param']
6060
mock_read_params_from_files.return_value = {'02_test.param': {'TEST_PARAM': 'value'}}
6161

62-
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type')
62+
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type', None, False)
6363
lfs.re_init('new_vehicle_dir', 'new_vehicle_type')
6464

6565
self.assertEqual(lfs.vehicle_dir, 'new_vehicle_dir')
@@ -70,7 +70,7 @@ def test_re_init(self, mock_read_params_from_files, mock_listdir, mock_isdir):
7070

7171
def test_write_summary_files(self):
7272
# Initialize LocalFilesystem with the test directory
73-
# lfs = LocalFilesystem(self.test_dir, "vehicle_type")
73+
# lfs = LocalFilesystem(self.test_dir, "vehicle_type", None, False)
7474

7575
# Call the method under test
7676
# Assuming you have a method to write summary files
@@ -98,7 +98,7 @@ def test_copy_template_files_to_new_vehicle_dir(self, mock_copy2, mock_copytree,
9898
mock_join.side_effect = lambda *args: '/'.join(args)
9999

100100
# Initialize LocalFilesystem
101-
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type')
101+
lfs = LocalFilesystem('vehicle_dir', 'vehicle_type', None, False)
102102

103103
# Call the method under test
104104
lfs.copy_template_files_to_new_vehicle_dir('template_dir', 'new_vehicle_dir')

0 commit comments

Comments
 (0)