From 01c9a6b356297863d7bb38f9ab3c0fbe9369dc27 Mon Sep 17 00:00:00 2001 From: Mathieu Schmitt Date: Mon, 27 Jan 2025 11:36:28 +0100 Subject: [PATCH 1/2] add support for ArrayArgument in commands --- src/yamcs/pymdb/xtce.py | 108 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/src/yamcs/pymdb/xtce.py b/src/yamcs/pymdb/xtce.py index c2cfe65..dcddd23 100644 --- a/src/yamcs/pymdb/xtce.py +++ b/src/yamcs/pymdb/xtce.py @@ -648,6 +648,8 @@ def add_argument_type( self.add_integer_argument_type(parent, system, name, default, data_type) elif isinstance(data_type, StringDataType): self.add_string_argument_type(parent, system, name, default, data_type) + elif isinstance(data_type, ArrayDataType): + self.add_array_argument_type(parent, system, name, data_type) else: raise ExportError(f"Unexpected data type {data_type.__class__}") @@ -860,6 +862,112 @@ def add_string_argument_type( if data_type.max_length is not None: range_el.attrib["maxInclusive"] = str(data_type.max_length) + def add_array_argument_type( + self, + parent: ET.Element, + system: System, + name: str, + data_type: ArrayDataType, + ): + el = ET.SubElement(parent, "ArrayArgumentType") + el.attrib["name"] = name + + element_type_name = f"{name}__el" + el.attrib["arrayTypeRef"] = element_type_name + + dims_el = ET.SubElement(el, "DimensionList") + dim_el = ET.SubElement(dims_el, "Dimension") + start_idx_el = ET.SubElement(dim_el, "StartingIndex") + ET.SubElement(start_idx_el, "FixedValue").text = "0" + + end_idx_el = ET.SubElement(dim_el, "EndingIndex") + if isinstance(data_type.length, DynamicInteger): + dyn_el = ET.SubElement(end_idx_el, "DynamicValue") + ref_el = ET.SubElement(dyn_el, "ArgumentInstanceRef") + parameter = data_type.length.parameter + ref_el.attrib["argumentRef"] = self.make_parameter_ref( + parameter, + start=system, + ) + adj_el = ET.SubElement(dyn_el, "LinearAdjustment") + adj_el.attrib["intercept"] = "-1" + else: + ET.SubElement(end_idx_el, "FixedValue").text = str(data_type.length - 1) + + el_type = data_type.data_type + if isinstance(el_type, AbsoluteTimeDataType): + self.add_absolute_time_argument_type( + parent, + system, + name=element_type_name, + data_type=el_type, + ) + # elif isinstance(el_type, AggregateDataType): + # self.add_aggregate_argument_type( + # parent, + # system, + # name=element_type_name, + # data_type=el_type, + # ) + elif isinstance(el_type, ArrayDataType): + self.add_array_argument_type( + parent, + system, + name=element_type_name, + data_type=el_type, + ) + elif isinstance(el_type, BinaryDataType): + self.add_binary_argument_type( + parent, + system, + name=element_type_name, + default=None, + data_type=el_type, + ) + elif isinstance(el_type, BooleanDataType): + self.add_boolean_argument_type( + parent, + system, + name=element_type_name, + default=None, + data_type=el_type, + ) + elif isinstance(el_type, EnumeratedDataType): + self.add_enumerated_argument_type( + parent, + system, + name=element_type_name, + default=None, + data_type=el_type, + ) + elif isinstance(el_type, FloatDataType): + self.add_float_argument_type( + parent, + system, + name=element_type_name, + default=None, + data_type=el_type, + ) + elif isinstance(el_type, IntegerDataType): + self.add_integer_argument_type( + parent, + system, + name=element_type_name, + default=None, + data_type=el_type, + ) + elif isinstance(el_type, StringDataType): + self.add_string_argument_type( + parent, + system, + name=element_type_name, + default=None, + data_type=el_type, + ) + else: + raise ExportError(f"Unexpected data type {el_type.__class__}") + + def add_aggregate_parameter_type( self, parent: ET.Element, From c1e8d6aa768d406bb134957460ba0a060c9b069f Mon Sep 17 00:00:00 2001 From: Mathieu Schmitt Date: Tue, 28 Jan 2025 23:16:38 +0100 Subject: [PATCH 2/2] flake8 lint --- src/yamcs/pymdb/xtce.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/yamcs/pymdb/xtce.py b/src/yamcs/pymdb/xtce.py index dcddd23..3dc0c3c 100644 --- a/src/yamcs/pymdb/xtce.py +++ b/src/yamcs/pymdb/xtce.py @@ -945,7 +945,7 @@ def add_array_argument_type( parent, system, name=element_type_name, - default=None, + default=None, data_type=el_type, ) elif isinstance(el_type, IntegerDataType): @@ -953,7 +953,7 @@ def add_array_argument_type( parent, system, name=element_type_name, - default=None, + default=None, data_type=el_type, ) elif isinstance(el_type, StringDataType): @@ -967,7 +967,6 @@ def add_array_argument_type( else: raise ExportError(f"Unexpected data type {el_type.__class__}") - def add_aggregate_parameter_type( self, parent: ET.Element,