Skip to content

Commit 3b629f1

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. dation.py
1 parent 57c1e3f commit 3b629f1

4 files changed

Lines changed: 40 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
@@ -17,6 +17,7 @@
1717
from typing import Any, Optional
1818

1919
from ardupilot_methodic_configurator import _
20+
from ardupilot_methodic_configurator.backend_flightcontroller_business_logic import get_frame_info
2021
from ardupilot_methodic_configurator.battery_cell_voltages import (
2122
BATTERY_CELL_VOLTAGE_TYPES,
2223
BATTERY_DEFAULT_CHEMISTRY,
@@ -183,6 +184,10 @@ def process_fc_parameters(
183184
self._verify_dict_is_uptodate(doc, get_esc_connection_sub_dict(fw_type), "MOT_PWM_TYPE", "values")
184185
self._verify_dict_is_uptodate(doc, RC_PROTOCOLS_DICT, "RC_PROTOCOLS", "Bitmask")
185186

187+
# Process frame information first (if available)
188+
frame_class, _ = get_frame_info(fc_parameters)
189+
self.set_component_value(("Frame", "Specifications", "Class"), str(frame_class))
190+
186191
# Process parameters in sequence
187192
self._set_gnss_type_from_fc_parameters(fc_parameters)
188193
esc_is_serial = self._set_serial_type_from_fc_parameters(fc_parameters)

ardupilot_methodic_configurator/data_model_vehicle_components_validation.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,26 @@ def get_esc_connection_sub_dict(
319319
"65536": {"type": RC_PORTS + SERIAL_PORTS, "protocol": "MAVRadio"}, # Bit 16
320320
}
321321

322+
FRAME_CLASS_DICT: dict[int, str] = {
323+
0: "Undefined",
324+
1: "Quad",
325+
2: "Hexa",
326+
3: "Octa",
327+
4: "OctaQuad",
328+
5: "Y6",
329+
6: "Heli",
330+
7: "Tri",
331+
8: "SingleCopter",
332+
9: "CoaxCopter",
333+
10: "BiCopter",
334+
11: "Heli_Dual",
335+
12: "DodecaHexa",
336+
13: "HeliQuad",
337+
14: "Deca",
338+
15: "Scripting Matrix",
339+
16: "6DoF Scripting",
340+
17: "Dynamic Scripting Matrix",
341+
}
322342

323343
class ComponentDataModelValidation(ComponentDataModelBase):
324344
"""

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
@@ -309,6 +309,17 @@ def test_system_imports_esc_aio_configuration(self, realistic_model) -> None:
309309
assert esc_type == "AIO"
310310
assert esc_protocol == "DShot600"
311311

312+
def test_user_can_import_frame_class_from_fc(self, realistic_model) -> None:
313+
"""Given FRAME_CLASS from FC, set Frame.Specifications.Class."""
314+
fc_parameters = {"FRAME_CLASS": 3, "MOT_PWM_TYPE": 6, "SERVO1_FUNCTION": 0}
315+
doc = {"MOT_PWM_TYPE": {"values": {"6": "DShot600"}}}
316+
317+
with patch.object(realistic_model, "_verify_dict_is_uptodate", return_value=True):
318+
realistic_model.process_fc_parameters(fc_parameters, doc)
319+
320+
frame_class = realistic_model.get_component_value(("Frame", "Specifications", "Class"))
321+
assert frame_class == "3"
322+
312323
def test_user_can_import_esc_connection_and_telemetry_from_serial_fc(self, realistic_model) -> None:
313324
"""
314325
Import ESC serial config into FC->ESC Connection and ESC->FC Telemetry.

0 commit comments

Comments
 (0)