Skip to content

Commit f5fc551

Browse files
Update ardupilot_methodic_configurator/extract_param_defaults.py
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Amilcar Lucas <amilcar.lucas@iav.de>
1 parent 086c80e commit f5fc551

1 file changed

Lines changed: 33 additions & 27 deletions

File tree

ardupilot_methodic_configurator/extract_param_defaults.py

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -196,33 +196,39 @@ def extract_firmware_version_and_vehicle_type(logfile: str) -> tuple[str, int, i
196196
msg = f"Error opening the {logfile} logfile: {e!s}"
197197
raise SystemExit(msg) from e
198198

199-
msg_fallback_result: Union[tuple[str, int, int, int], None] = None
200-
while True:
201-
m = mlog.recv_match(type=["VER", "MSG"])
202-
if m is None:
203-
break
204-
if m.get_type() == "VER":
205-
fws = str(m.FWS) # e.g. "ArduCopter V4.6.3 (3fc7011a)"
206-
vehicle_type = fws.split(maxsplit=1)[0] if fws else ""
207-
maj, min_, pat = m.Maj, m.Min, m.Pat
208-
if maj is None or min_ is None or pat is None:
209-
continue
210-
return vehicle_type, int(maj), int(min_), int(pat)
211-
# Parse each MSG; store the first parseable Vx.y one as fallback and keep scanning for VER
212-
if msg_fallback_result is None:
213-
parts = str(m.Message).split()
214-
if len(parts) >= 2 and parts[1].startswith("V"):
215-
version_parts = parts[1][1:].split(".") # Remove "V" prefix, split by "."
216-
if len(version_parts) >= 2:
217-
with contextlib.suppress(ValueError):
218-
patch_val = int(version_parts[2]) if len(version_parts) >= 3 else 0
219-
msg_fallback_result = (parts[0], int(version_parts[0]), int(version_parts[1]), patch_val)
220-
221-
if msg_fallback_result is not None:
222-
return msg_fallback_result
223-
224-
msg = f"No firmware version information found in {logfile}"
225-
raise SystemExit(msg)
199+
try:
200+
msg_fallback_result: Union[tuple[str, int, int, int], None] = None
201+
while True:
202+
m = mlog.recv_match(type=["VER", "MSG"])
203+
if m is None:
204+
break
205+
if m.get_type() == "VER":
206+
fws = str(m.FWS) # e.g. "ArduCopter V4.6.3 (3fc7011a)"
207+
vehicle_type = fws.split(maxsplit=1)[0] if fws else ""
208+
maj, min_, pat = m.Maj, m.Min, m.Pat
209+
if maj is None or min_ is None or pat is None:
210+
continue
211+
return vehicle_type, int(maj), int(min_), int(pat)
212+
# Parse each MSG; store the first parseable Vx.y one as fallback and keep scanning for VER
213+
if msg_fallback_result is None:
214+
parts = str(m.Message).split()
215+
if len(parts) >= 2 and parts[1].startswith("V"):
216+
version_parts = parts[1][1:].split(".") # Remove "V" prefix, split by "."
217+
if len(version_parts) >= 2:
218+
with contextlib.suppress(ValueError):
219+
patch_val = int(version_parts[2]) if len(version_parts) >= 3 else 0
220+
msg_fallback_result = (parts[0], int(version_parts[0]), int(version_parts[1]), patch_val)
221+
222+
if msg_fallback_result is not None:
223+
return msg_fallback_result
224+
225+
msg = f"No firmware version information found in {logfile}"
226+
raise SystemExit(msg)
227+
finally:
228+
close_method = getattr(mlog, "close", None)
229+
if callable(close_method):
230+
with contextlib.suppress(Exception):
231+
close_method()
226232

227233

228234
def missionplanner_sort(item: str) -> tuple[str, ...]:

0 commit comments

Comments
 (0)