Skip to content

Commit fcba551

Browse files
committed
feat(component editor): Import FRAME_CLASS from FC parameters into Frame.Specifications.Class
using a new FRAME_CLASS_DICT lookup, and add ESC_TELEMETRY_DICT for validating telemetry connection types.
1 parent 618d32c commit fcba551

4 files changed

Lines changed: 41 additions & 0 deletions

File tree

ardupilot_methodic_configurator/data_model_vehicle_components_import.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from typing import Any, Optional
1919

2020
from ardupilot_methodic_configurator import _
21+
from ardupilot_methodic_configurator.backend_flightcontroller_business_logic import get_frame_info
2122
from ardupilot_methodic_configurator.battery_cell_voltages import (
2223
BATTERY_CELL_VOLTAGE_TYPES,
2324
BATTERY_DEFAULT_CHEMISTRY,
@@ -168,6 +169,10 @@ def process_fc_parameters(
168169
self._verify_dict_is_uptodate(doc, MOT_PWM_TYPE_DICT, "MOT_PWM_TYPE", "values")
169170
self._verify_dict_is_uptodate(doc, RC_PROTOCOLS_DICT, "RC_PROTOCOLS", "Bitmask")
170171

172+
# Process frame information first (if available)
173+
frame_class, _ = get_frame_info(fc_parameters)
174+
self.set_component_value(("Frame", "Specifications", "Class"), str(frame_class))
175+
171176
# Process parameters in sequence
172177
self._set_gnss_type_from_fc_parameters(fc_parameters)
173178
esc_is_serial = self._set_serial_type_from_fc_parameters(fc_parameters)

ardupilot_methodic_configurator/data_model_vehicle_components_validation.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,27 @@ def get_connection_type_tuples_with_labels(connection_types: tuple[str, ...]) ->
238238
"65536": {"type": RC_PORTS + SERIAL_PORTS, "protocol": "MAVRadio"}, # Bit 16
239239
}
240240

241+
FRAME_CLASS_DICT: dict[int, str] = {
242+
0: "Undefined",
243+
1: "Quad",
244+
2: "Hexa",
245+
3: "Octa",
246+
4: "OctaQuad",
247+
5: "Y6",
248+
6: "Heli",
249+
7: "Tri",
250+
8: "SingleCopter",
251+
9: "CoaxCopter",
252+
10: "BiCopter",
253+
11: "Heli_Dual",
254+
12: "DodecaHexa",
255+
13: "HeliQuad",
256+
14: "Deca",
257+
15: "Scripting Matrix",
258+
16: "6DoF Scripting",
259+
17: "Dynamic Scripting Matrix",
260+
}
261+
241262
# ESC->FC telemetry connections
242263
ESC_TELEMETRY_DICT: dict[str, dict[str, Union[list[str], str]]] = {
243264
"0": {"type": ["None"], "protocol": "None"},

ardupilot_methodic_configurator/vehicle_components_schema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@
199199
"TOW max Kg": {
200200
"type": "number",
201201
"description": "Maximum take-off weight in kilograms"
202+
},
203+
"Class": {
204+
"type": "string",
205+
"description": "Frame class/category (e.g., Quad, Hexa, Octa, etc.)"
202206
}
203207
},
204208
"description": "Technical specifications of the vehicle frame"

tests/test_data_model_vehicle_components_import.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,17 @@ def test_system_imports_esc_aio_configuration(self, realistic_model) -> None:
304304
assert esc_type == "AIO"
305305
assert esc_protocol == "DShot600"
306306

307+
def test_user_can_import_frame_class_from_fc(self, realistic_model) -> None:
308+
"""Given FRAME_CLASS from FC, set Frame.Specifications.Class."""
309+
fc_parameters = {"FRAME_CLASS": 3, "MOT_PWM_TYPE": 6, "SERVO1_FUNCTION": 0}
310+
doc = {"MOT_PWM_TYPE": {"values": {"6": "DShot600"}}}
311+
312+
with patch.object(realistic_model, "_verify_dict_is_uptodate", return_value=True):
313+
realistic_model.process_fc_parameters(fc_parameters, doc)
314+
315+
frame_class = realistic_model.get_component_value(("Frame", "Specifications", "Class"))
316+
assert frame_class == "3"
317+
307318
def test_user_can_import_esc_connection_and_telemetry_from_serial_fc(self, realistic_model) -> None:
308319
"""
309320
Import ESC serial config into FC->ESC Connection and ESC->FC Telemetry.

0 commit comments

Comments
 (0)