armodel 1.4.3__py3-none-any.whl → 1.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. armodel/cli/arxml_dump_cli.py +14 -14
  2. armodel/cli/memory_section_cli.py +76 -0
  3. armodel/cli/system_signal_cli.py +74 -0
  4. armodel/lib/__init__.py +2 -1
  5. armodel/lib/system_signal.py +37 -0
  6. armodel/models/__init__.py +6 -3
  7. armodel/models/annotation.py +27 -3
  8. armodel/models/ar_object.py +18 -6
  9. armodel/models/ar_package.py +248 -30
  10. armodel/models/ar_ref.py +115 -45
  11. armodel/models/bsw_module_template.py +66 -28
  12. armodel/models/common_structure.py +150 -150
  13. armodel/models/communication.py +1 -1
  14. armodel/models/data_prototype.py +41 -6
  15. armodel/models/datatype.py +11 -5
  16. armodel/models/fibex/__init__.py +0 -0
  17. armodel/models/fibex/can_communication.py +122 -0
  18. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  19. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  20. armodel/models/fibex/fibex_4_multiplatform.py +138 -0
  21. armodel/models/fibex/fibex_core/__init__.py +0 -0
  22. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  23. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  24. armodel/models/fibex/fibex_core.py +341 -0
  25. armodel/models/fibex/lin_communication.py +38 -0
  26. armodel/models/fibex/lin_topology.py +7 -0
  27. armodel/models/general_structure.py +119 -10
  28. armodel/models/implementation.py +4 -5
  29. armodel/models/internal_behavior.py +63 -0
  30. armodel/models/m2/__init__.py +0 -0
  31. armodel/models/m2/autosar_templates/__init__.py +0 -0
  32. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  33. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  34. armodel/models/m2/autosar_templates/ecuc_description_template.py +268 -0
  35. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  36. armodel/models/m2/autosar_templates/sw_component_template/communication.py +316 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +0 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +149 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  41. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  42. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +54 -0
  43. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +39 -0
  44. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +26 -0
  45. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  46. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  47. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  48. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  49. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  50. armodel/models/m2/msr/__init__.py +0 -0
  51. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  52. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  53. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  54. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  55. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  56. armodel/models/m2/msr/documentation/__init__.py +0 -0
  57. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  58. armodel/models/mode_declaration.py +8 -0
  59. armodel/models/multilanguage_data.py +15 -0
  60. armodel/models/per_instance_memory.py +34 -6
  61. armodel/models/port_prototype.py +15 -159
  62. armodel/models/rpt_scenario.py +20 -0
  63. armodel/models/sw_component.py +48 -187
  64. armodel/models/system_template/__init__.py +0 -0
  65. armodel/models/system_template/network_management.py +7 -0
  66. armodel/models/system_template/transport_protocols.py +7 -0
  67. armodel/models/timing.py +91 -0
  68. armodel/parser/abstract_arxml_parser.py +11 -2
  69. armodel/parser/arxml_parser.py +1101 -227
  70. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  71. armodel/tests/test_armodel/models/test_ar_ref.py +3 -3
  72. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  73. armodel/tests/test_armodel/models/test_common_structure.py +3 -3
  74. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  75. armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
  76. armodel/tests/test_armodel/models/test_datatype.py +8 -8
  77. armodel/tests/test_armodel/models/test_port_interface.py +6 -6
  78. armodel/tests/test_armodel/parser/test_parse_bswmd.py +16 -8
  79. armodel/tests/test_armodel/parser/test_sw_components.py +6 -6
  80. armodel/writer/arxml_writer.py +1046 -181
  81. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/METADATA +48 -1
  82. armodel-1.6.0.dist-info/RECORD +127 -0
  83. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/entry_points.txt +3 -1
  84. armodel-1.4.3.dist-info/RECORD +0 -78
  85. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/LICENSE +0 -0
  86. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/WHEEL +0 -0
  87. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/top_level.txt +0 -0
@@ -2,39 +2,62 @@ import xml.etree.cElementTree as ET
2
2
 
3
3
  from typing import List
4
4
 
5
- from armodel.writer.abstract_arxml_writer import AbstractARXMLWriter
5
+ from ..models.m2.msr.data_dictionary.auxillary_objects import SwAddrMethod
6
+ from ..models.m2.msr.data_dictionary.data_def_properties import SwDataDefProps
7
+ from ..models.m2.msr.asam_hdo.units import PhysicalDimension
8
+ from ..models.m2.msr.documentation.block_elements import DocumentationBlock
9
+ from ..models.m2_msr import CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
6
10
 
11
+ from ..models.m2.autosar_templates.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ConstantSpecification, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
12
+ from ..models.m2.autosar_templates.sw_component_template.components.instance_refs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
13
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior import RunnableEntityArgument, SynchronousServerCallPoint
14
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.server_call import ServerCallPoint
15
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.data_elements import ParameterAccess, VariableAccess
16
+ from ..models.m2.autosar_templates.ecuc_description_template import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
17
+ from ..models.m2.autosar_templates.system_template.data_mapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
18
+ from ..models.m2.autosar_templates.system_template import System, SystemMapping
19
+ from ..models.m2.autosar_templates.system_template.network_management import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
20
+ from ..models.m2.autosar_templates.system_template.transport_protocols import CanTpConfig
21
+ from ..models.m2.autosar_templates.sw_component_template.communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
22
+
23
+ from ..models.fibex.fibex_4_multiplatform import Gateway, ISignalMapping
24
+ from ..models.fibex.can_communication import CanFrame, CanFrameTriggering, RxIdentifierRange
25
+ from ..models.fibex.fibex_core.core_communication import FrameTriggering, IPdu, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, PduTriggering, SecuredIPdu, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup
26
+ from ..models.fibex.lin_communication import LinFrameTriggering, LinUnconditionalFrame
27
+ from ..models.fibex.fibex_core.core_topology import AbstractCanCluster, CanCluster, EcuInstance, CanPhysicalChannel, CommunicationCluster, LinCluster, LinPhysicalChannel, PhysicalChannel
28
+
29
+ from ..models.internal_behavior import IncludedDataTypeSet, InternalBehavior
30
+ from ..models.timing import EOCExecutableEntityRef, ExecutionOrderConstraint, SwcTiming, TimingExtension
7
31
  from ..models.data_def_properties import ValueList
8
- from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultilanguageLongName
32
+ from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultilanguageLongName
9
33
  from ..models.record_layout import SwRecordLayout, SwRecordLayoutGroup, SwRecordLayoutV
10
34
  from ..models.service_mapping import RoleBasedPortAssignment
11
35
  from ..models.service_needs import NvBlockNeeds, RoleBasedDataAssignment
12
36
  from ..models.data_prototype import ApplicationArrayElement, ApplicationCompositeElementDataPrototype, ApplicationRecordElement, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
13
37
  from ..models.bsw_module_template import BswCalledEntity, BswEvent, BswInternalBehavior, BswModeSenderPolicy, BswModuleDescription, BswModuleEntity, BswModuleEntry, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
14
38
  from ..models.ar_package import AUTOSAR
15
- from ..models.sw_component import ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, DataReceivedEvent, EcuAbstractionSwComponentType, InternalTriggerOccurredEvent, OperationInvokedEvent, ParameterAccess, PortAPIOption, PortGroup, RTEEvent, ServerCallPoint, ServiceDependency, ServiceSwComponentType, SwcModeSwitchEvent, SwcServiceDependency, SynchronousServerCallPoint, VariableAccess
39
+ from ..models.sw_component import ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, DataReceivedEvent, EcuAbstractionSwComponentType, InitEvent, InternalTriggerOccurredEvent, OperationInvokedEvent, PortAPIOption, PortGroup, RTEEvent, ServiceDependency, ServiceSwComponentType, SwcModeSwitchEvent, SwcServiceDependency
16
40
  from ..models.ar_package import ARPackage
17
- from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, RModeInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef, RVariableInAtomicSwcInstanceRef, VariableDataPrototypeInSystemInstanceRef
41
+ from ..models.ar_ref import AnyInstanceRef, ApplicationCompositeElementInPortInterfaceInstanceRef, AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef, RefType, VariableDataPrototypeInSystemInstanceRef
18
42
  from ..models.calibration import SwAxisGrouped, SwAxisIndividual, SwCalprmAxis, SwCalprmAxisSet, SwValueCont, SwValues
19
- from ..models.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
43
+ from ..models.common_structure import IncludedModeDeclarationGroupSet, ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype
20
44
  from ..models.communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
21
- from ..models.data_dictionary import SwAddrMethod, SwDataDefProps
22
45
  from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType, BaseTypeDirectDefinition, DataTypeMappingSet, ImplementationDataType, SwBaseType
23
46
  from ..models.general_structure import ARElement, AdminData, Identifiable, Limit, MultilanguageReferrable, Referrable, Sdg, SwcBswMapping, SwcBswRunnableMapping
24
- from ..models.m2_msr import CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
25
- from ..models.port_prototype import ClientComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, PPortPrototype, PortPrototype, QueuedReceiverComSpec, RPortComSpec, RPortPrototype, ReceiverComSpec, SenderComSpec, ServerComSpec
47
+
48
+ from ..models.port_prototype import PPortPrototype, PortPrototype, RPortPrototype
26
49
  from ..models.sw_component import AssemblySwConnector, CompositionSwComponentType, DelegationSwConnector, SwComponentPrototype, SwComponentType, SwConnector
27
50
  from ..models.annotation import Annotation
28
51
  from ..models.end_to_end_protection import EndToEndDescription, EndToEndProtection, EndToEndProtectionSet, EndToEndProtectionVariablePrototype
29
- from ..models.port_interface import ApplicationError, ClientServerInterface, ClientServerOperation, ModeSwitchInterface, PortInterface, SenderReceiverInterface, TriggerInterface
30
- from ..models.unit import Unit
52
+ from ..models.m2.autosar_templates.sw_component_template.port_interface import ApplicationError, ClientServerInterface, ClientServerOperation, ModeSwitchInterface, PortInterface, SenderReceiverInterface, TriggerInterface
53
+ from ..models.m2.msr.asam_hdo.units import Unit
31
54
  from ..models.implementation import AutosarEngineeringObject, BswImplementation, Code, EngineeringObject, Implementation, SwcImplementation
32
- from ..models.common_structure import ConstantSpecification, ExecutableEntity, InternalBehavior, ResourceConsumption
55
+ from ..models.common_structure import ExecutableEntity, ResourceConsumption
33
56
  from ..models.sw_component import RunnableEntity, SwcInternalBehavior, TimingEvent
34
57
  from ..models.ar_object import ARLiteral
35
58
  from ..models.global_constraints import DataConstr, InternalConstrs, PhysConstrs
36
59
 
37
-
60
+ from .abstract_arxml_writer import AbstractARXMLWriter
38
61
  class ARXMLWriter(AbstractARXMLWriter):
39
62
  def __init__(self, options=None) -> None:
40
63
  super().__init__(options)
@@ -45,20 +68,32 @@ class ARXMLWriter(AbstractARXMLWriter):
45
68
 
46
69
  return sub_element
47
70
 
48
- def writeSd(self, parent: ET.Element, sdg: Sdg):
71
+ def setChildElementRxIdentifierRange(self, element: ET.Element, key: str, range: RxIdentifierRange):
72
+ if range is not None:
73
+ child_element = ET.SubElement(element, key)
74
+ self.setChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID", range.getLowerCanId())
75
+ self.setChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID", range.getUpperCanId())
76
+
77
+ def writeSds(self, parent: ET.Element, sdg: Sdg):
49
78
  for sd in sdg.getSds():
50
79
  sd_tag = ET.SubElement(parent, "SD")
51
80
  sd_tag.attrib['GID'] = sd.gid
52
81
  sd_tag.text = sd.value
53
-
54
- def writeSdg(self, parent: ET.Element, admin_data: AdminData):
82
+
83
+ def setSdg(self, parent: ET.Element, sdg: Sdg):
84
+ if sdg is not None:
85
+ sdg_tag = ET.SubElement(parent, "SDG")
86
+ sdg_tag.attrib['GID'] = sdg.gid
87
+ self.writeSds(sdg_tag, sdg)
88
+ for sdg_item in sdg.getSdgContentsTypes():
89
+ self.setSdg(sdg_tag, sdg_item)
90
+
91
+ def writeSdgs(self, parent: ET.Element, admin_data: AdminData):
55
92
  sdgs = admin_data.getSdgs()
56
93
  if len(sdgs) > 0:
57
94
  sdgs_tag = ET.SubElement(parent, "SDGS")
58
95
  for sdg in sdgs:
59
- sdg_tag = ET.SubElement(sdgs_tag, "SDG")
60
- sdg_tag.attrib['GID'] = sdg.gid
61
- self.writeSd(sdg_tag, sdg)
96
+ self.setSdg(sdgs_tag, sdg)
62
97
 
63
98
  def writeChildLimitElement(self, element: ET.Element, key: str, limit: Limit):
64
99
  if limit is not None:
@@ -68,7 +103,7 @@ class ARXMLWriter(AbstractARXMLWriter):
68
103
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
69
104
  limit_tag.text = limit.value
70
105
 
71
- def writeReferable(self, element: ET.Element, referrable: Referrable):
106
+ def setReferable(self, element: ET.Element, referrable: Referrable):
72
107
  self.setARObjectAttributes(element, referrable)
73
108
  self.setShortName(element, referrable.short_name)
74
109
 
@@ -94,61 +129,77 @@ class ARXMLWriter(AbstractARXMLWriter):
94
129
  l2_tag.attrib['L'] = l2.l
95
130
  l2_tag.text = l2.value
96
131
 
97
- def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
98
- self.writeReferable(element, referrable)
99
- if referrable.long_name is not None:
100
- self.setMultiLongName(element, "LONG-NAME", referrable.long_name)
132
+ def setMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
133
+ self.setReferable(element, referrable)
134
+ if referrable.longName is not None:
135
+ self.setMultiLongName(element, "LONG-NAME", referrable.longName)
101
136
 
102
- def writeAdminData(self, element: ET.Element, admin_data: AdminData):
137
+ def setAdminData(self, element: ET.Element, admin_data: AdminData):
103
138
  element = ET.SubElement(element, "ADMIN-DATA")
104
- self.writeSdg(element, admin_data)
105
-
106
- def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
107
- self.writeMultilanguageReferrable(element, identifiable)
108
- self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.desc)
109
- self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.category)
110
- if identifiable.admin_data is not None:
111
- self.writeAdminData(element, identifiable.admin_data)
112
-
113
- def writeARElement(self, parent: ET.Element, ar_element: ARElement):
114
- self.writeIdentifiable(parent, ar_element)
139
+ self.writeSdgs(element, admin_data)
140
+
141
+ def setIdentifiable(self, element: ET.Element, identifiable: Identifiable):
142
+ self.setMultilanguageReferrable(element, identifiable)
143
+ self.setAnnotations(element, identifiable.getAnnotations())
144
+ self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
145
+ self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
146
+ if identifiable.getAdminData() is not None:
147
+ self.setAdminData(element, identifiable.getAdminData())
148
+
149
+ def setARElement(self, parent: ET.Element, ar_element: ARElement):
150
+ self.setIdentifiable(parent, ar_element)
115
151
 
116
- def writeTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
152
+ def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
117
153
  if (acknowledge != None):
118
154
  child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
119
155
  self.setARObjectAttributes(child_element, acknowledge)
120
156
  if acknowledge.timeout != None:
121
157
  self.setChildElementOptionalFloatValue(child_element, "TIMEOUT", acknowledge.timeout)
122
158
 
123
- def writeSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
159
+ def setSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
124
160
  representations = com_spec.getCompositeNetworkRepresentations()
125
161
  if len(representations) > 0:
126
162
  child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
127
163
  for representation in representations:
128
164
  self.setCompositeNetworkRepresentation(child_element, representation)
129
- self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.data_element_ref)
130
- self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.network_representation)
131
- self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handle_out_of_range)
132
- self.writeTransmissionAcknowledgementRequest(element, com_spec.transmission_acknowledge)
133
- self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.uses_end_to_end_protection)
165
+ self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.getDataElementRef())
166
+ self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.getNetworkRepresentation())
167
+ self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.getHandleOutOfRange())
168
+ self.setTransmissionAcknowledgementRequest(element, com_spec.getTransmissionAcknowledge())
169
+ self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.getUsesEndToEndProtection())
134
170
 
135
- def writeNonqueuedSenderComSpec(self, com_specs_tag: ET.Element, com_spec: NonqueuedSenderComSpec):
136
- com_spec_tag = ET.SubElement(com_specs_tag, "NONQUEUED-SENDER-COM-SPEC")
137
- self.setARObjectAttributes(com_spec_tag, com_spec)
138
- self.writeSenderComSpec(com_spec_tag, com_spec)
139
- self.setInitValue(com_spec_tag, com_spec.init_value)
171
+ def setNonqueuedSenderComSpec(self, element: ET.Element, com_spec: NonqueuedSenderComSpec):
172
+ child_element = ET.SubElement(element, "NONQUEUED-SENDER-COM-SPEC")
173
+ self.setARObjectAttributes(child_element, com_spec)
174
+ self.setSenderComSpec(child_element, com_spec)
175
+ self.setInitValue(child_element, com_spec.initValue)
140
176
 
141
- def writeServerComSpec(self, com_specs_tag: ET.Element, com_spec: ServerComSpec):
142
- com_spec_tag = ET.SubElement(com_specs_tag, "SERVER-COM-SPEC")
143
- self.setARObjectAttributes(com_spec_tag, com_spec)
144
- self.setChildElementOptionalRefType(com_spec_tag, "OPERATION-REF", com_spec.operation_ref)
145
- self.setChildElementOptionalNumericalValue(com_spec_tag, "QUEUE-LENGTH", com_spec.queue_length)
177
+ def setServerComSpec(self, element: ET.Element, com_spec: ServerComSpec):
178
+ child_element = ET.SubElement(element, "SERVER-COM-SPEC")
179
+ self.setARObjectAttributes(child_element, com_spec)
180
+ self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
181
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
182
+
183
+ def setQueuedSenderComSpec(self, element: ET.Element, com_spec: QueuedSenderComSpec):
184
+ child_element = ET.SubElement(element, "QUEUED-SENDER-COM-SPEC")
185
+ self.setARObjectAttributes(child_element, com_spec)
186
+ self.setSenderComSpec(child_element, com_spec)
187
+
188
+ def setModeSwitchSenderComSpec(self, element: ET.Element, com_spec: ModeSwitchSenderComSpec):
189
+ child_element = ET.SubElement(element, "MODE-SWITCH-SENDER-COM-SPEC")
190
+ self.setARObjectAttributes(child_element, com_spec)
191
+ self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
192
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
146
193
 
147
194
  def writePPortComSpec(self, com_specs_tag: ET.Element, com_spec: PPortComSpec):
148
195
  if isinstance(com_spec, NonqueuedSenderComSpec):
149
- self.writeNonqueuedSenderComSpec(com_specs_tag, com_spec)
196
+ self.setNonqueuedSenderComSpec(com_specs_tag, com_spec)
150
197
  elif isinstance(com_spec, ServerComSpec):
151
- self.writeServerComSpec(com_specs_tag, com_spec)
198
+ self.setServerComSpec(com_specs_tag, com_spec)
199
+ elif isinstance(com_spec, QueuedSenderComSpec):
200
+ self.setQueuedSenderComSpec(com_specs_tag, com_spec)
201
+ elif isinstance(com_spec, ModeSwitchSenderComSpec):
202
+ self.setModeSwitchSenderComSpec(com_specs_tag, com_spec)
152
203
  else:
153
204
  raise NotImplementedError("Unsupported PPortComSpec %s" % type(com_spec))
154
205
 
@@ -172,10 +223,10 @@ class ARXMLWriter(AbstractARXMLWriter):
172
223
  child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
173
224
  for representation in representations:
174
225
  self.setCompositeNetworkRepresentation(child_element, representation)
175
- self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.data_element_ref)
176
- self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.network_representation)
177
- self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handle_out_of_range)
178
- self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.uses_end_to_end_protection)
226
+ self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.dataElementRef)
227
+ self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.networkRepresentation)
228
+ self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handleOutOfRange)
229
+ self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.usesEndToEndProtection)
179
230
 
180
231
  def setSwValues(self, element: ET.Element, key: str, sw_values: SwValues):
181
232
  if sw_values is not None:
@@ -236,7 +287,7 @@ class ARXMLWriter(AbstractARXMLWriter):
236
287
  def setConstantReference(self, element: ET.Element, value_spec: ConstantReference):
237
288
  value_spec_tag = ET.SubElement(element, "CONSTANT-REFERENCE")
238
289
  self.writeValueSpecification(value_spec_tag, value_spec)
239
- self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.constant_ref)
290
+ self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.getConstantRef())
240
291
 
241
292
  def setValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
242
293
  if value_spec is not None:
@@ -264,23 +315,29 @@ class ARXMLWriter(AbstractARXMLWriter):
264
315
  child_element = ET.SubElement(element, "NONQUEUED-RECEIVER-COM-SPEC")
265
316
  self.setARObjectAttributes(child_element, com_spec)
266
317
  self.writeReceiverComSpec(child_element, com_spec)
267
- self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.alive_timeout)
268
- self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.enable_updated)
269
- self.setChildElementOptionalBooleanValue(child_element, "HANDLE-NEVER-RECEIVED", com_spec.handle_never_received)
270
- self.setChildElementOptionalLiteral(child_element, "HANDLE-TIMEOUT-TYPE", com_spec.handel_timeout_type)
271
- self.setInitValue(child_element, com_spec.init_value)
318
+ self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.aliveTimeout)
319
+ self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.enableUpdated)
320
+ self.setChildElementOptionalBooleanValue(child_element, "HANDLE-NEVER-RECEIVED", com_spec.handleNeverReceived)
321
+ self.setChildElementOptionalLiteral(child_element, "HANDLE-TIMEOUT-TYPE", com_spec.handleTimeoutType)
322
+ self.setInitValue(child_element, com_spec.initValue)
272
323
 
273
324
  def writeQueuedReceiverComSpec(self, element: ET.Element, com_spec: QueuedReceiverComSpec):
274
325
  child_element = ET.SubElement(element, "QUEUED-RECEIVER-COM-SPEC")
275
326
  self.setARObjectAttributes(child_element, com_spec)
276
327
  self.writeReceiverComSpec(child_element, com_spec)
277
- self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queue_length)
328
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queueLength)
278
329
 
279
330
  def writeClientComSpec(self, element: ET.Element, com_spec: ClientComSpec):
280
331
  self.logger.debug("writeClientComSpec")
281
332
  child_element = ET.SubElement(element, "CLIENT-COM-SPEC")
282
333
  self.setARObjectAttributes(child_element, com_spec)
283
- self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.operation_ref)
334
+ self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.operationRef)
335
+
336
+ def writeModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
337
+ self.logger.debug("writeModeSwitchReceiverComSpec")
338
+ child_element = ET.SubElement(element, "MODE-SWITCH-RECEIVER-COM-SPEC")
339
+ self.setARObjectAttributes(child_element, com_spec)
340
+ self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.modeGroupRef)
284
341
 
285
342
  def writeRPortComSpec(self, element: ET.Element, com_spec: RPortComSpec):
286
343
  if isinstance(com_spec, NonqueuedReceiverComSpec):
@@ -289,13 +346,15 @@ class ARXMLWriter(AbstractARXMLWriter):
289
346
  self.writeQueuedReceiverComSpec(element, com_spec)
290
347
  elif isinstance(com_spec, ClientComSpec):
291
348
  self.writeClientComSpec(element, com_spec)
349
+ elif isinstance(com_spec, ModeSwitchReceiverComSpec):
350
+ self.writeModeSwitchReceiverComSpec(element, com_spec)
292
351
  else:
293
352
  raise ValueError("Unsupported RPortComSpec %s" % type(com_spec))
294
353
 
295
354
  def writePPortPrototype(self, ports_tag: ET.Element, prototype: PPortPrototype):
296
355
  prototype_tag = ET.SubElement(ports_tag, "P-PORT-PROTOTYPE")
297
356
 
298
- self.writeIdentifiable(prototype_tag, prototype)
357
+ self.setIdentifiable(prototype_tag, prototype)
299
358
  self.logger.debug("writePPortPrototype %s" % prototype.short_name)
300
359
 
301
360
  com_specs = prototype.getProvidedComSpecs()
@@ -309,7 +368,7 @@ class ARXMLWriter(AbstractARXMLWriter):
309
368
  def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
310
369
  self.logger.debug("writeRPortPrototype %s" % prototype.short_name)
311
370
  prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
312
- self.writeIdentifiable(prototype_tag, prototype)
371
+ self.setIdentifiable(prototype_tag, prototype)
313
372
  com_specs = prototype.getRequiredComSpecs()
314
373
  if len(com_specs) > 0:
315
374
  com_specs_tag = ET.SubElement(prototype_tag, "REQUIRED-COM-SPECS")
@@ -349,7 +408,7 @@ class ARXMLWriter(AbstractARXMLWriter):
349
408
  def writePortGroup(self, element: ET.Element, port_group: PortGroup):
350
409
  self.logger.debug("writePortGroup %s" % port_group.short_name)
351
410
  child_element = ET.SubElement(element, "PORT-GROUP")
352
- self.writeIdentifiable(child_element, port_group)
411
+ self.setIdentifiable(child_element, port_group)
353
412
  self.writePortGroupInnerGroupIRefs(child_element, port_group)
354
413
  self.writePortGroupOuterPortRefs(child_element, port_group)
355
414
 
@@ -361,7 +420,7 @@ class ARXMLWriter(AbstractARXMLWriter):
361
420
  self.writePortGroup(child_element, port_group)
362
421
 
363
422
  def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
364
- self.writeIdentifiable(element, sw_component)
423
+ self.setIdentifiable(element, sw_component)
365
424
  port_prototypes = sw_component.getPortPrototypes()
366
425
  if len(port_prototypes) > 0:
367
426
  ports_tag = ET.SubElement(element, "PORTS")
@@ -370,7 +429,7 @@ class ARXMLWriter(AbstractARXMLWriter):
370
429
 
371
430
  def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
372
431
  prototype_tag = ET.SubElement(element, "SW-COMPONENT-PROTOTYPE")
373
- self.writeIdentifiable(prototype_tag, prototype)
432
+ self.setIdentifiable(prototype_tag, prototype)
374
433
  self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.type_tref)
375
434
 
376
435
  def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
@@ -380,7 +439,7 @@ class ARXMLWriter(AbstractARXMLWriter):
380
439
 
381
440
  def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
382
441
  connector_tag = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
383
- self.writeIdentifiable(connector_tag, sw_connector)
442
+ self.setIdentifiable(connector_tag, sw_connector)
384
443
 
385
444
  if sw_connector.provider_iref is not None:
386
445
  provider_iref_tag = ET.SubElement(connector_tag, "PROVIDER-IREF")
@@ -396,7 +455,7 @@ class ARXMLWriter(AbstractARXMLWriter):
396
455
 
397
456
  def writeDelegationSwConnector(self, element: ET.Element, sw_connector: DelegationSwConnector):
398
457
  connector_tag = ET.SubElement(element, "DELEGATION-SW-CONNECTOR")
399
- self.writeIdentifiable(connector_tag, sw_connector)
458
+ self.setIdentifiable(connector_tag, sw_connector)
400
459
 
401
460
  if sw_connector.inner_port_iref is not None:
402
461
  inner_port_iref_tag = ET.SubElement(connector_tag, "INNER-PORT-IREF")
@@ -450,11 +509,33 @@ class ARXMLWriter(AbstractARXMLWriter):
450
509
  for sw_component in ar_package.getCompositionSwComponentTypes():
451
510
  self.writeCompositionSwComponentType(element, sw_component)
452
511
 
512
+ def writeLParagraphs(self, element: ET.Element, paragraph: MultiLanguageParagraph):
513
+ for l1 in paragraph.getL1s():
514
+ l1_tag = ET.SubElement(element, "L-1")
515
+ self.setARObjectAttributes(l1_tag, l1)
516
+ if l1.l is not None:
517
+ l1_tag.attrib['L'] = l1.l
518
+ l1_tag.text = l1.value
519
+
520
+ def setMultiLanguageParagraphs(self, element: ET.Element, key: str, paragraphs: List[MultiLanguageParagraph]):
521
+ for paragraph in paragraphs:
522
+ child_element = ET.SubElement(element, key)
523
+ self.setARObjectAttributes(child_element, paragraph)
524
+ self.writeLParagraphs(child_element, paragraph)
525
+ return paragraphs
526
+
527
+ def setDocumentationBlock(self, element: ET.Element, key: str, block: DocumentationBlock):
528
+ if block is not None:
529
+ child_element = ET.SubElement(element, key)
530
+ self.setARObjectAttributes(child_element, block)
531
+ self.setMultiLanguageParagraphs(child_element, "P", block.getPs())
532
+
453
533
  def writeGeneralAnnotation(self, element: ET.Element, annotation: Annotation):
454
- self.setMultiLongName(element, "LABEL", annotation.label)
534
+ self.setMultiLongName(element, "LABEL", annotation.getLabel())
535
+ self.setChildElementOptionalLiteral(element, "ANNOTATION-ORIGIN", annotation.getAnnotationOrigin())
536
+ self.setDocumentationBlock(element, "ANNOTATION-TEXT", annotation.getAnnotationText())
455
537
 
456
- def writeAnnotations(self, element: ET.Element, props: SwDataDefProps) :
457
- annotations = props.getAnnotations()
538
+ def setAnnotations(self, element: ET.Element, annotations: List[Annotation]) :
458
539
  if len(annotations) > 0:
459
540
  annotations_tag = ET.SubElement(element, "ANNOTATIONS")
460
541
  for annotation in annotations:
@@ -495,6 +576,11 @@ class ARXMLWriter(AbstractARXMLWriter):
495
576
  for axis in axises:
496
577
  self.setSwCalprmAxis(child_element, axis)
497
578
 
579
+ def writeSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
580
+ if props.getInvalidValue() is not None:
581
+ child_element = ET.SubElement(element, "INVALID-VALUE")
582
+ self.setValueSpecification(child_element, props.getInvalidValue())
583
+
498
584
  def setSwDataDefProps(self, element: ET.Element, key: str, sw_data_def_props: SwDataDefProps):
499
585
  if sw_data_def_props is not None:
500
586
  child_element = ET.SubElement(element, key)
@@ -502,18 +588,18 @@ class ARXMLWriter(AbstractARXMLWriter):
502
588
  sw_data_def_props_variants_tag = ET.SubElement(child_element, "SW-DATA-DEF-PROPS-VARIANTS")
503
589
  sw_data_def_props_conditional_tag = ET.SubElement(sw_data_def_props_variants_tag, "SW-DATA-DEF-PROPS-CONDITIONAL")
504
590
  self.setARObjectAttributes(sw_data_def_props_conditional_tag, sw_data_def_props.conditional)
505
- self.writeAnnotations(sw_data_def_props_conditional_tag, sw_data_def_props)
506
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "BASE-TYPE-REF", sw_data_def_props.baseTypeRef)
507
- self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-CALIBRATION-ACCESS", sw_data_def_props.swCalibrationAccess)
508
- self.setSwCalprmAxisSet(sw_data_def_props_conditional_tag, "SW-CALPRM-AXIS-SET", sw_data_def_props.swCalprmAxisSet)
509
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "COMPU-METHOD-REF", sw_data_def_props.compuMethodRef)
510
- self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-IMPL-POLICY", sw_data_def_props.swImplPolicy)
511
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", sw_data_def_props.implementationDataTypeRef)
512
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.dataConstrRef)
513
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "SW-RECORD-LAYOUT-REF", sw_data_def_props.swRecordLayoutRef)
514
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "VALUE-AXIS-DATA-TYPE-REF", sw_data_def_props.valueAxisDataTypeRef)
515
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "UNIT-REF", sw_data_def_props.unitRef)
516
-
591
+ self.setAnnotations(sw_data_def_props_conditional_tag, sw_data_def_props.getAnnotations())
592
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "BASE-TYPE-REF", sw_data_def_props.getBaseTypeRef())
593
+ self.writeSwDataDefProsInvalidValue(sw_data_def_props_conditional_tag, sw_data_def_props)
594
+ self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-CALIBRATION-ACCESS", sw_data_def_props.getSwCalibrationAccess())
595
+ self.setSwCalprmAxisSet(sw_data_def_props_conditional_tag, "SW-CALPRM-AXIS-SET", sw_data_def_props.getSwCalprmAxisSet())
596
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "COMPU-METHOD-REF", sw_data_def_props.getCompuMethodRef())
597
+ self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-IMPL-POLICY", sw_data_def_props.getSwImplPolicy())
598
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", sw_data_def_props.getImplementationDataTypeRef())
599
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.getDataConstrRef())
600
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "SW-RECORD-LAYOUT-REF", sw_data_def_props.getSwRecordLayoutRef())
601
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "VALUE-AXIS-DATA-TYPE-REF", sw_data_def_props.getValueAxisDataTypeRef())
602
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "UNIT-REF", sw_data_def_props.getUnitRef())
517
603
 
518
604
  def writeApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
519
605
  self.writeAutosarDataType(element, data_type)
@@ -522,8 +608,8 @@ class ARXMLWriter(AbstractARXMLWriter):
522
608
  self.writeApplicationDataType(element, data_type)
523
609
 
524
610
  def writeAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
525
- self.writeARElement(element, data_type)
526
- self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.sw_data_def_props)
611
+ self.setARElement(element, data_type)
612
+ self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.swDataDefProps)
527
613
 
528
614
  def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
529
615
  self.logger.debug("writeApplicationPrimitiveDataType %s" % data_type.short_name)
@@ -531,7 +617,7 @@ class ARXMLWriter(AbstractARXMLWriter):
531
617
  self.writeApplicationDataType(data_type_tag, data_type)
532
618
 
533
619
  def setDataPrototype(self, element: ET.Element, prototype: DataPrototype):
534
- self.writeIdentifiable(element, prototype)
620
+ self.setIdentifiable(element, prototype)
535
621
 
536
622
  def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
537
623
  self.setDataPrototype(element, prototype)
@@ -570,7 +656,7 @@ class ARXMLWriter(AbstractARXMLWriter):
570
656
 
571
657
  def writeSwBaseType(self, element: ET.Element, base_type: SwBaseType):
572
658
  data_type_tag = ET.SubElement(element, "SW-BASE-TYPE")
573
- self.writeIdentifiable(data_type_tag, base_type)
659
+ self.setIdentifiable(data_type_tag, base_type)
574
660
  self.writeBaseTypeDirectDefinition(data_type_tag, base_type.baseTypeDefinition)
575
661
 
576
662
  def writeCompuScaleConstantContents(self, element: ET.Element, contents: CompuScaleConstantContents):
@@ -620,7 +706,7 @@ class ARXMLWriter(AbstractARXMLWriter):
620
706
  def writeCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
621
707
  compu_method_tag = ET.SubElement(element, "COMPU-METHOD")
622
708
  self.logger.debug("writeCompuMethods %s" % compu_method.short_name)
623
- self.writeIdentifiable(compu_method_tag, compu_method)
709
+ self.setIdentifiable(compu_method_tag, compu_method)
624
710
  self.setChildElementOptionalRefType(compu_method_tag, "UNIT-REF", compu_method.unit_ref)
625
711
  self.writeCompuInternalToPhys(compu_method_tag, compu_method)
626
712
 
@@ -651,11 +737,11 @@ class ARXMLWriter(AbstractARXMLWriter):
651
737
 
652
738
  def writeConstantSpecification(self, element: ET.Element, spec: ConstantSpecification):
653
739
  spec_tag = ET.SubElement(element, "CONSTANT-SPECIFICATION")
654
- self.writeIdentifiable(spec_tag, spec)
740
+ self.setIdentifiable(spec_tag, spec)
655
741
 
656
- if spec.value_spec is not None:
742
+ if spec.getValueSpec() is not None:
657
743
  value_spec_tag = ET.SubElement(spec_tag, "VALUE-SPEC")
658
- self.setValueSpecification(value_spec_tag, spec.value_spec)
744
+ self.setValueSpecification(value_spec_tag, spec.getValueSpec())
659
745
 
660
746
  def setInternalConstrs(self, element: ET.Element, constrs: InternalConstrs):
661
747
  if constrs is not None:
@@ -689,21 +775,24 @@ class ARXMLWriter(AbstractARXMLWriter):
689
775
 
690
776
  def writeDataConstr(self, element: ET.Element, constr: DataConstr):
691
777
  child_element = ET.SubElement(element, "DATA-CONSTR")
692
- self.writeIdentifiable(child_element, constr)
778
+ self.setIdentifiable(child_element, constr)
693
779
  self.writeDataConstrRules(child_element, constr)
694
780
 
695
781
  def writeUnit(self, element: ET.Element, unit: Unit):
696
782
  self.logger.debug("writeUnit %s" % unit.short_name)
697
783
  child_element = ET.SubElement(element, "UNIT")
698
- self.writeIdentifiable(child_element, unit)
699
- self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.display_name)
784
+ self.setIdentifiable(child_element, unit)
785
+ self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.getDisplayName())
786
+ self.setChildElementOptionalFloatValue(child_element, "FACTOR-SI-TO-UNIT", unit.getFactorSiToUnit())
787
+ self.setChildElementOptionalFloatValue(child_element, "OFFSET-SI-TO-UNIT", unit.getOffsetSiToUnit())
788
+ self.setChildElementOptionalRefType(child_element, "PHYSICAL-DIMENSION-REF", unit.getPhysicalDimensionRef())
700
789
 
701
790
  def setRModeInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: RModeInAtomicSwcInstanceRef):
702
791
  child_element = ET.SubElement(element, key)
703
- self.setChildElementOptionalRefType(child_element, "BASE", iref.base_ref)
704
- self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.context_port_ref)
705
- self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.context_mode_declaration_group_prototype_ref)
706
- self.setChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF", iref.target_mode_declaration_ref)
792
+ self.setChildElementOptionalRefType(child_element, "BASE", iref.getBaseRef())
793
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.getContextPortRef())
794
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.getContextModeDeclarationGroupPrototypeRef())
795
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF", iref.getTargetModeDeclarationRef())
707
796
 
708
797
  def setPOperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: POperationInAtomicSwcInstanceRef):
709
798
  child_element = ET.SubElement(element, key)
@@ -711,7 +800,7 @@ class ARXMLWriter(AbstractARXMLWriter):
711
800
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.target_provided_operation_ref)
712
801
 
713
802
  def setRTEEvent(self, element: ET.Element, event: RTEEvent):
714
- self.writeIdentifiable(element, event)
803
+ self.setIdentifiable(element, event)
715
804
  irefs = event.getDisabledModeIRefs()
716
805
  if len(irefs) > 0:
717
806
  child_element = ET.SubElement(element, "DISABLED-MODE-IREFS")
@@ -745,18 +834,23 @@ class ARXMLWriter(AbstractARXMLWriter):
745
834
  def setRVariableInAtomicSwcInstanceRef(self, element: ET.Element, iref: RVariableInAtomicSwcInstanceRef):
746
835
  if iref is not None:
747
836
  child_element = ET.SubElement(element, "DATA-IREF")
748
- self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
749
- self.setChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF", iref.target_data_element_ref)
837
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
838
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF", iref.getTargetDataElementRef())
750
839
 
751
840
  def setDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
752
841
  if event is not None:
753
842
  child_element = ET.SubElement(element, "DATA-RECEIVED-EVENT")
754
843
  self.setRTEEvent(child_element, event)
755
- self.setRVariableInAtomicSwcInstanceRef(child_element, event.data_iref)
844
+ self.setRVariableInAtomicSwcInstanceRef(child_element, event.dataIRef)
756
845
 
757
846
  def setInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
758
847
  pass
759
848
 
849
+ def setInitEvent(self, element: ET.Element, event: InitEvent):
850
+ if event is not None:
851
+ child_element = ET.SubElement(element, "INIT-EVENT")
852
+ self.setRTEEvent(child_element, event)
853
+
760
854
  def writeRTEEvents(self, element: ET.Element, parent: SwcInternalBehavior):
761
855
  events = parent.getRteEvents()
762
856
  if len(events) > 0:
@@ -773,6 +867,8 @@ class ARXMLWriter(AbstractARXMLWriter):
773
867
  self.setDataReceivedEvent(child_element, event)
774
868
  elif isinstance(event, InternalTriggerOccurredEvent):
775
869
  self.setInternalTriggerOccurredEvent(child_element, event)
870
+ elif isinstance(event, InitEvent):
871
+ self.setInitEvent(child_element, event)
776
872
  else:
777
873
  raise NotImplementedError("Unsupported Event <%s>" % type(event))
778
874
 
@@ -782,7 +878,7 @@ class ARXMLWriter(AbstractARXMLWriter):
782
878
  areas_tag = ET.SubElement(element, "EXCLUSIVE-AREAS")
783
879
  for area in areas:
784
880
  child_element = ET.SubElement(areas_tag, "EXCLUSIVE-AREA")
785
- self.writeIdentifiable(child_element, area)
881
+ self.setIdentifiable(child_element, area)
786
882
 
787
883
  def writeDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
788
884
  refs = behavior.getDataTypeMappingRefs()
@@ -790,30 +886,34 @@ class ARXMLWriter(AbstractARXMLWriter):
790
886
  refs_tag = ET.SubElement(element, "DATA-TYPE-MAPPING-REFS")
791
887
  for ref in refs:
792
888
  self.setChildElementOptionalRefType(refs_tag, "DATA-TYPE-MAPPING-REF", ref)
889
+
890
+ def writeInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
891
+ memories = behavior.getConstantMemorys()
892
+ if len(memories) > 0:
893
+ child_element = ET.SubElement(element, "CONSTANT-MEMORYS")
894
+ for memory in memories:
895
+ self.writeParameterDataPrototype(child_element, memory)
793
896
 
794
897
  def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
795
- self.writeIdentifiable(element, behavior)
898
+ self.setIdentifiable(element, behavior)
899
+ self.writeInternalBehaviorConstantMemories(element, behavior)
796
900
  self.writeDataTypeMappingRefs(element, behavior)
797
901
  self.writeExclusiveAreas(element, behavior)
798
902
 
799
- def writeExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
800
- if entity is not None:
801
- self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.minimum_start_interval)
802
-
803
903
  def setAutosarVariableRef(self, element: ET.Element, ref: AutosarVariableRef):
804
904
  if ref is not None:
805
905
  child_element = ET.SubElement(element, "ACCESSED-VARIABLE")
806
- if ref.autosar_variable_iref is not None:
906
+ self.setARObjectAttributes(child_element, ref)
907
+ if ref.getAutosarVariableIRef() is not None:
807
908
  child_element = ET.SubElement(child_element, "AUTOSAR-VARIABLE-IREF")
808
- self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref.autosar_variable_iref.port_prototype_ref)
809
- self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.autosar_variable_iref.target_data_prototype_ref)
810
- if ref.local_variable_ref is not None:
811
- self.setChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF", ref.local_variable_ref)
909
+ self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref.getAutosarVariableIRef().getPortPrototypeRef())
910
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.getAutosarVariableIRef().getTargetDataPrototypeRef())
911
+ self.setChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF", ref.getLocalVariableRef())
812
912
 
813
913
  def setVariableAccess(self, element: ET.Element, access: VariableAccess):
814
914
  child_element = ET.SubElement(element, "VARIABLE-ACCESS")
815
- self.writeIdentifiable(child_element, access)
816
- self.setAutosarVariableRef(child_element, access.accessed_variable_ref)
915
+ self.setIdentifiable(child_element, access)
916
+ self.setAutosarVariableRef(child_element, access.getAccessedVariableRef())
817
917
 
818
918
  def writeDataReadAccesses(self, element: ET.Element, entity: RunnableEntity):
819
919
  #accesses = entity.getDataReadAccesses():
@@ -826,7 +926,7 @@ class ARXMLWriter(AbstractARXMLWriter):
826
926
 
827
927
  def writeParameterAccess(self, element: ET.Element, parameter_access: ParameterAccess):
828
928
  child_element = ET.SubElement(element, "PARAMETER-ACCESS")
829
- self.writeIdentifiable(child_element, parameter_access)
929
+ self.setIdentifiable(child_element, parameter_access)
830
930
  self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.accessed_parameter)
831
931
 
832
932
  def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
@@ -864,20 +964,20 @@ class ARXMLWriter(AbstractARXMLWriter):
864
964
  for access in variables:
865
965
  self.setVariableAccess(child_element, access)
866
966
 
867
- def writeROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
967
+ def setROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
868
968
  if iref is not None:
869
969
  child_element = ET.SubElement(element, key)
870
970
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
871
971
  self.setChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF", iref.target_required_operation_ref)
872
972
 
873
- def writeServerCallPoint(self, element: ET.Element, call_point: ServerCallPoint):
874
- self.writeROperationInAtomicSwcInstanceRef(element, "OPERATION-IREF", call_point.operation_iref)
973
+ def setServerCallPoint(self, element: ET.Element, call_point: ServerCallPoint):
974
+ self.setROperationInAtomicSwcInstanceRef(element, "OPERATION-IREF", call_point.getOperationIRef())
875
975
  self.setChildElementOptionalFloatValue(element, "TIMEOUT", call_point.timeout)
876
976
 
877
- def writeSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
977
+ def setSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
878
978
  child_element = ET.SubElement(element, "SYNCHRONOUS-SERVER-CALL-POINT")
879
- self.writeIdentifiable(child_element, call_point)
880
- self.writeServerCallPoint(child_element, call_point)
979
+ self.setIdentifiable(child_element, call_point)
980
+ self.setServerCallPoint(child_element, call_point)
881
981
 
882
982
  def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
883
983
  call_points = entity.getServerCallPoints()
@@ -885,7 +985,7 @@ class ARXMLWriter(AbstractARXMLWriter):
885
985
  child_element = ET.SubElement(element, "SERVER-CALL-POINTS")
886
986
  for call_point in call_points:
887
987
  if isinstance(call_point, SynchronousServerCallPoint):
888
- self.writeSynchronousServerCallPoint(child_element, call_point)
988
+ self.setSynchronousServerCallPoint(child_element, call_point)
889
989
  else:
890
990
  self._raiseError("Unsupported ServerCallPoint type <%s>" % type(call_point))
891
991
 
@@ -896,16 +996,62 @@ class ARXMLWriter(AbstractARXMLWriter):
896
996
  for access in variables:
897
997
  self.setVariableAccess(child_element, access)
898
998
 
999
+ def setRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, tag: str, iref: RModeGroupInAtomicSWCInstanceRef):
1000
+ if iref is not None:
1001
+ child_element = ET.SubElement(element, tag)
1002
+ instance_ref_tag = ET.SubElement(child_element, "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
1003
+ self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
1004
+ self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-MODE-GROUP-REF", iref.getTargetModeGroupRef())
1005
+
1006
+ def setPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, tag: str, iref: PModeGroupInAtomicSwcInstanceRef):
1007
+ if iref is not None:
1008
+ child_element = ET.SubElement(element, tag)
1009
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", iref.getContextPPortRef())
1010
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", iref.getTargetModeGroupRef())
1011
+
1012
+ def writeModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
1013
+ points = entity.getModeAccessPoints()
1014
+ if len(points) > 0:
1015
+ mode_access_points_tag = ET.SubElement(element, "MODE-ACCESS-POINTS")
1016
+ for point in points:
1017
+ child_element = ET.SubElement(mode_access_points_tag, "MODE-ACCESS-POINT")
1018
+ self.setRModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1019
+
1020
+ def writeModeSwitchPoints(self, element: ET.Element, entity: RunnableEntity):
1021
+ points = entity.getModeSwitchPoints()
1022
+ if len(points) > 0:
1023
+ mode_access_points_tag = ET.SubElement(element, "MODE-SWITCH-POINTS")
1024
+ for point in points:
1025
+ child_element = ET.SubElement(mode_access_points_tag, "MODE-SWITCH-POINT")
1026
+ self.setIdentifiable(child_element, point)
1027
+ self.setPModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1028
+
1029
+ def setRunnableEntityArgument(self, element: ET.Element, argument: RunnableEntityArgument):
1030
+ child_element = ET.SubElement(element, "RUNNABLE-ENTITY-ARGUMENT")
1031
+ self.setChildElementOptionalLiteral(child_element, "SYMBOL", argument.getSymbol())
1032
+
1033
+ def writeRunnableEntityArguments(self, element: ET.Element, entity: RunnableEntity):
1034
+ arguments = entity.getArguments()
1035
+ if len(arguments) > 0:
1036
+ child_element = ET.SubElement(element, "ARGUMENTS")
1037
+ for argument in arguments:
1038
+ if isinstance(argument, RunnableEntityArgument):
1039
+ self.setRunnableEntityArgument(child_element, argument)
1040
+ else:
1041
+ raise NotImplementedError("Unsupported argument of Runnable Entity <%s>" % type(argument))
1042
+
899
1043
  def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
900
1044
  if entity is not None:
901
1045
  child_element = ET.SubElement(element, "RUNNABLE-ENTITY")
902
- self.writeIdentifiable(child_element, entity)
903
- self.writeExecutableEntity(child_element, entity)
904
- self.setChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY", entity.can_be_invoked_concurrently)
1046
+ self.setExecutableEntity(child_element, entity)
1047
+ self.writeRunnableEntityArguments(child_element, entity)
1048
+ self.setChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY", entity.getCanBeInvokedConcurrently())
905
1049
  self.writeParameterAccesses(child_element, entity)
906
1050
  self.writeDataReceivePointByArguments(child_element, entity)
907
1051
  self.writeDataSendPoints(child_element, entity)
908
1052
  self.writeDataWriteAccesses(child_element, entity)
1053
+ self.writeModeAccessPoints(child_element, entity)
1054
+ self.writeModeSwitchPoints(child_element, entity)
909
1055
  self.writeReadLocalVariables(child_element, entity)
910
1056
  self.writeServerCallPoints(child_element, entity)
911
1057
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", entity.symbol)
@@ -937,20 +1083,20 @@ class ARXMLWriter(AbstractARXMLWriter):
937
1083
  memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
938
1084
  for memory in memories:
939
1085
  child_element = ET.SubElement(memories_tag, "PER-INSTANCE-MEMORY")
940
- self.writeIdentifiable(child_element, memory)
941
- self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.init_value)
942
- self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.sw_data_def_props)
1086
+ self.setIdentifiable(child_element, memory)
1087
+ self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.initValue)
1088
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.swDataDefProps)
943
1089
  self.setChildElementOptionalLiteral(child_element, "TYPE", memory.type)
944
- self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.type_definition)
1090
+ self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.typeDefinition)
945
1091
 
946
1092
  def writeParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
947
1093
  child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
948
- self.writeIdentifiable(child_element, prototype)
1094
+ self.setIdentifiable(child_element, prototype)
949
1095
  self.writeAutosarDataPrototype(child_element, prototype)
950
- self.setInitValue(child_element, prototype.init_value)
1096
+ self.setInitValue(child_element, prototype.initValue)
951
1097
 
952
1098
  def writeParameterDataPrototypes(self, element: ET.Element, behavior: SwcInternalBehavior):
953
- prototypes = behavior.getParameterDataPrototypes()
1099
+ prototypes = behavior.getPerInstanceParameters()
954
1100
  if len(prototypes) > 0:
955
1101
  child_element = ET.SubElement(element, "PER-INSTANCE-PARAMETERS")
956
1102
  for prototype in prototypes:
@@ -979,7 +1125,7 @@ class ARXMLWriter(AbstractARXMLWriter):
979
1125
  self.setChildElementOptionalRefType(child_element, "PORT-REF", option.port_ref)
980
1126
 
981
1127
  def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
982
- self.writeIdentifiable(element, dependency)
1128
+ self.setIdentifiable(element, dependency)
983
1129
 
984
1130
  def writeRoleBasedDataAssignment(self, element: ET.Element, assignment: RoleBasedDataAssignment):
985
1131
  child_element = ET.SubElement(element, "ROLE-BASED-DATA-ASSIGNMENT")
@@ -1015,7 +1161,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1015
1161
  def writeNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1016
1162
  child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
1017
1163
  self.logger.debug("writeNvBlockNeeds %s" % needs.short_name)
1018
- self.writeIdentifiable(child_element, needs)
1164
+ self.setIdentifiable(child_element, needs)
1019
1165
  self.setChildElementOptionalBooleanValue(child_element, "CALC-RAM-BLOCK-CRC", needs.calc_ram_block_crc)
1020
1166
  self.setChildElementOptionalBooleanValue(child_element, "CHECK-STATIC-BLOCK-ID", needs.check_static_block_id)
1021
1167
  self.setChildElementOptionalNumericalValue(child_element, "N-DATA-SETS", needs.n_data_sets)
@@ -1056,6 +1202,18 @@ class ARXMLWriter(AbstractARXMLWriter):
1056
1202
  else:
1057
1203
  self._raiseError("Unsupported ServiceDependency <%s>" % type(dependency))
1058
1204
 
1205
+ def setIncludedDataTypeSets(self, element: ET.Element, sets: List[IncludedDataTypeSet]):
1206
+ if len(sets) > 0:
1207
+ include_data_type_sets_tag = ET.SubElement(element, "INCLUDED-DATA-TYPE-SETS")
1208
+ for set in sets:
1209
+ child_element = ET.SubElement(include_data_type_sets_tag, "INCLUDED-DATA-TYPE-SET")
1210
+ self.setARObjectAttributes(child_element, set)
1211
+ type_refs = set.getDataTypeRefs()
1212
+ if len(type_refs) > 0:
1213
+ data_type_refs_tag = ET.SubElement(child_element, "DATA-TYPE-REFS")
1214
+ for type_ref in type_refs:
1215
+ self.setChildElementOptionalRefType(data_type_refs_tag, "DATA-TYPE-REF", type_ref)
1216
+
1059
1217
  def writeSwcInternalBehavior(self, element: ET.Element, behavior: SwcInternalBehavior):
1060
1218
  self.logger.debug("writeSwInternalBehavior %s" % behavior.short_name)
1061
1219
 
@@ -1064,6 +1222,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1064
1222
  self.writeRTEEvents(child_element, behavior)
1065
1223
  self.writeExplicitInterRunnableVariables(child_element, behavior)
1066
1224
  self.setChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART", behavior.handle_termination_and_restart)
1225
+ self.setIncludedDataTypeSets(child_element, behavior.getIncludedDataTypeSets())
1067
1226
  self.writePerInstanceMemories(child_element, behavior)
1068
1227
  self.writeParameterDataPrototypes(child_element, behavior)
1069
1228
  self.writePortAPIOptions(child_element, behavior)
@@ -1102,7 +1261,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1102
1261
  def setCode(self, element: ET.SubElement, code_desc: Code):
1103
1262
  self.logger.debug("setCode %s" % code_desc.short_name)
1104
1263
  child_element = ET.SubElement(element, "CODE")
1105
- self.writeIdentifiable(child_element, code_desc)
1264
+ self.setIdentifiable(child_element, code_desc)
1106
1265
  self.writeArtifactDescriptor(child_element, code_desc)
1107
1266
 
1108
1267
  def writeCodeDescriptors(self, element: ET.Element, impl: Implementation):
@@ -1127,7 +1286,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1127
1286
  sections_tag = ET.SubElement(element, "MEMORY-SECTIONS")
1128
1287
  for memory_section in memory_sections:
1129
1288
  child_element = ET.SubElement(sections_tag, "MEMORY-SECTION")
1130
- self.writeIdentifiable(child_element, memory_section)
1289
+ self.setIdentifiable(child_element, memory_section)
1131
1290
  self.setChildElementOptionalLiteral(child_element, "ALIGNMENT", memory_section.alignment)
1132
1291
  self.setMemorySectionOptions(child_element, memory_section.getOptions())
1133
1292
  self.setChildElementOptionalNumericalValue(child_element, "SIZE", memory_section.size)
@@ -1138,11 +1297,11 @@ class ARXMLWriter(AbstractARXMLWriter):
1138
1297
  def setResourceConsumption(self, element: ET.Element, consumption: ResourceConsumption):
1139
1298
  if consumption is not None:
1140
1299
  child_element = ET.SubElement(element, "RESOURCE-CONSUMPTION")
1141
- self.writeIdentifiable(child_element, consumption)
1300
+ self.setIdentifiable(child_element, consumption)
1142
1301
  self.writeMemorySections(child_element, consumption)
1143
1302
 
1144
1303
  def writeImplementation(self, element: ET.Element, impl: Implementation):
1145
- self.writeIdentifiable(element, impl)
1304
+ self.setIdentifiable(element, impl)
1146
1305
  self.writeCodeDescriptors(element, impl)
1147
1306
  self.setChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE", impl.programming_language)
1148
1307
  self.setResourceConsumption(element, impl.getResourceConsumption())
@@ -1177,10 +1336,10 @@ class ARXMLWriter(AbstractARXMLWriter):
1177
1336
  def setVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element, key: str, iref: VariableDataPrototypeInSystemInstanceRef):
1178
1337
  if iref is not None:
1179
1338
  child_element = ET.SubElement(element, key)
1180
- self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPONENT-REF", iref.contextComponentRef)
1181
- self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", iref.contextCompositionRef)
1182
- self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.contextPortRef)
1183
- self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", iref.targetDataPrototypeRef)
1339
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPONENT-REF", iref.context_component_refs)
1340
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", iref.context_composition_ref)
1341
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.context_port_ref)
1342
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", iref.target_data_prototype_ref)
1184
1343
 
1185
1344
  def setEndToEndProtectionVariablePrototype(self, element: ET.Element, key: str, prototype: EndToEndProtectionVariablePrototype):
1186
1345
  if prototype is not None:
@@ -1205,7 +1364,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1205
1364
  def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1206
1365
  if protection is not None:
1207
1366
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
1208
- self.writeIdentifiable(child_element, protection)
1367
+ self.setIdentifiable(child_element, protection)
1209
1368
  self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
1210
1369
  self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
1211
1370
 
@@ -1220,21 +1379,21 @@ class ARXMLWriter(AbstractARXMLWriter):
1220
1379
  def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1221
1380
  self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.short_name)
1222
1381
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION-SET")
1223
- self.writeIdentifiable(child_element, protection_set)
1382
+ self.setIdentifiable(child_element, protection_set)
1224
1383
  self.writeEndToEndProtections(child_element, protection_set)
1225
1384
 
1226
1385
  def writeAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
1227
- self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1386
+ self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
1228
1387
 
1229
1388
  def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
1230
1389
  self.logger.debug("writeVariableDataPrototype %s" % prototype.short_name)
1231
1390
  child_element = ET.SubElement(element, "VARIABLE-DATA-PROTOTYPE")
1232
- self.writeIdentifiable(child_element, prototype)
1233
- self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.sw_data_def_props)
1391
+ self.setIdentifiable(child_element, prototype)
1392
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
1234
1393
  self.writeAutosarDataPrototype(child_element, prototype)
1235
- self.setInitValue(child_element, prototype.init_value)
1394
+ self.setInitValue(child_element, prototype.initValue)
1236
1395
 
1237
- def writeDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1396
+ def writeSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1238
1397
  data_elements = sr_interface.getDataElements()
1239
1398
  if len(data_elements) > 0:
1240
1399
  data_elements_tag = ET.SubElement(element, "DATA-ELEMENTS")
@@ -1244,12 +1403,22 @@ class ARXMLWriter(AbstractARXMLWriter):
1244
1403
  else:
1245
1404
  self._raiseError("Unsupported Data Element <%s>" % type(data_element))
1246
1405
 
1406
+ def writeSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1407
+ policies = sr_interface.getInvalidationPolicies()
1408
+ if len(policies) > 0:
1409
+ policies_tag = ET.SubElement(element, "INVALIDATION-POLICYS")
1410
+ for policy in policies:
1411
+ child_element = ET.SubElement(policies_tag, "INVALIDATION-POLICY")
1412
+ self.setChildElementOptionalRefType(child_element, "DATA-ELEMENT-REF", policy.getDataElementRef())
1413
+ self.setChildElementOptionalLiteral(child_element, "HANDLE-INVALID", policy.getHandleInvalid())
1414
+
1247
1415
  def writeSenderReceiverInterface(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1248
1416
  self.logger.debug("writeSenderReceiverInterface %s" % sr_interface.short_name)
1249
1417
  child_element = ET.SubElement(element, "SENDER-RECEIVER-INTERFACE")
1250
- self.writeIdentifiable(child_element, sr_interface)
1251
- self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.is_service)
1252
- self.writeDataElements(child_element, sr_interface)
1418
+ self.setIdentifiable(child_element, sr_interface)
1419
+ self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.isService)
1420
+ self.writeSenderReceiverInterfaceDataElements(child_element, sr_interface)
1421
+ self.writeSenderReceiverInterfaceInvalidationPolicies(child_element, sr_interface)
1253
1422
 
1254
1423
  def writerBswModuleDescriptionImplementedEntry(self, element: ET.Element, desc: BswModuleDescription):
1255
1424
  entries = desc.getImplementedEntries()
@@ -1260,7 +1429,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1260
1429
  self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
1261
1430
 
1262
1431
  def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1263
- self.writeIdentifiable(element, prototype)
1432
+ self.setIdentifiable(element, prototype)
1264
1433
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1265
1434
 
1266
1435
  def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
@@ -1279,9 +1448,10 @@ class ARXMLWriter(AbstractARXMLWriter):
1279
1448
  self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
1280
1449
 
1281
1450
  def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1282
- self.writeIdentifiable(element, entity)
1451
+ self.setIdentifiable(element, entity)
1283
1452
  self.writeCanEnterExclusiveAreaRefs(element, entity)
1284
- self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.minimum_start_interval)
1453
+ self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.getMinimumStartInterval())
1454
+ self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.getSwAddrMethodRef())
1285
1455
 
1286
1456
  def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
1287
1457
  mode_group_refs = entity.getManagedModeGroupRefs()
@@ -1293,7 +1463,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1293
1463
 
1294
1464
  def setBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
1295
1465
  self.setExecutableEntity(element, entity)
1296
- self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implemented_entry_ref)
1466
+ self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implementedEntryRef)
1297
1467
  self.writeBswModuleEntityManagedModeGroup(element, entity)
1298
1468
 
1299
1469
  def setBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
@@ -1319,7 +1489,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1319
1489
  self._raiseError("Unsupported BswModuleEntity <%s>" % type(entity))
1320
1490
 
1321
1491
  def setBswEvent(self, element: ET.Element, event: BswEvent):
1322
- self.writeIdentifiable(element, event)
1492
+ self.setIdentifiable(element, event)
1323
1493
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1324
1494
 
1325
1495
  def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
@@ -1356,12 +1526,23 @@ class ARXMLWriter(AbstractARXMLWriter):
1356
1526
  else:
1357
1527
  self._raiseError("Unsupported ModeSenderPolicy type <%s>." % type(policy))
1358
1528
 
1529
+ def setIncludedModeDeclarationGroupSet(self, element: ET.Element, group_set: IncludedModeDeclarationGroupSet):
1530
+ child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SET")
1531
+
1532
+ def writeBswInternalBehaviorIncludedModeDeclarationGroupSets(self, element: ET.Element, behavior: BswInternalBehavior):
1533
+ group_sets = behavior.getIncludedModeDeclarationGroupSets()
1534
+ if len(group_sets) > 0:
1535
+ child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS")
1536
+ for group_set in group_sets:
1537
+ self.setIncludedModeDeclarationGroupSet(child_element, group_set)
1538
+
1359
1539
  def setBswInternalBehavior(self, element: ET.Element, behavior: BswInternalBehavior):
1360
1540
  child_element = ET.SubElement(element, "BSW-INTERNAL-BEHAVIOR")
1361
1541
  self.writeInternalBehavior(child_element, behavior)
1362
1542
  self.writeBswInternalBehaviorBswModuleEntities(child_element, behavior)
1363
1543
  self.writeBswInternalBehaviorBswEvents(child_element, behavior)
1364
1544
  self.writeBswInternalBehaviorModeSenderPolicy(child_element, behavior)
1545
+ self.writeBswInternalBehaviorIncludedModeDeclarationGroupSets(child_element, behavior)
1365
1546
 
1366
1547
  def writeBswModuleDescriptionInternalBehaviors(self, element: ET.Element, behaviors: List[InternalBehavior]):
1367
1548
  if len(behaviors) > 0:
@@ -1375,7 +1556,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1375
1556
  def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
1376
1557
  self.logger.debug("writeBswModuleDescription %s" % desc.short_name)
1377
1558
  child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
1378
- self.writeIdentifiable(child_element, desc)
1559
+ self.setIdentifiable(child_element, desc)
1379
1560
  self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.module_id)
1380
1561
  self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
1381
1562
  self.writeProvidedModeGroup(child_element, desc)
@@ -1393,7 +1574,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1393
1574
  def writeBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
1394
1575
  self.logger.debug("writeBswModuleDescription %s" % entry.short_name)
1395
1576
  child_element = ET.SubElement(element, "BSW-MODULE-ENTRY")
1396
- self.writeIdentifiable(child_element, entry)
1577
+ self.setIdentifiable(child_element, entry)
1397
1578
  self.setChildElementOptionalNumericalValue(child_element, "SERVICE-ID", entry.service_id)
1398
1579
  self.setChildElementOptionalBooleanValue(child_element, "IS-REENTRANT", entry.is_reentrant)
1399
1580
  self.setChildElementOptionalBooleanValue(child_element, "IS-SYNCHRONOUS", entry.is_synchronous)
@@ -1420,7 +1601,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1420
1601
  def setSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1421
1602
  self.logger.debug("writeBswModuleDescription %s" % mapping.short_name)
1422
1603
  child_element = ET.SubElement(element, "SWC-BSW-MAPPING")
1423
- self.writeIdentifiable(child_element, mapping)
1604
+ self.setIdentifiable(child_element, mapping)
1424
1605
  self.setChildElementOptionalRefType(child_element, "BSW-BEHAVIOR-REF", mapping.bswBehaviorRef)
1425
1606
  self.writeSwcBswRunnableMappings(child_element, mapping)
1426
1607
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.swcBehaviorRef)
@@ -1467,15 +1648,17 @@ class ARXMLWriter(AbstractARXMLWriter):
1467
1648
  sub_elements_tag = ET.SubElement(element, "SUB-ELEMENTS")
1468
1649
  for type_element in sub_elements:
1469
1650
  child_element = ET.SubElement(sub_elements_tag, "IMPLEMENTATION-DATA-TYPE-ELEMENT")
1470
- self.writeIdentifiable(child_element, type_element)
1471
- self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.sw_data_def_props)
1651
+ self.setIdentifiable(child_element, type_element)
1652
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE", type_element.getArraySize())
1653
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", type_element.getArraySizeSemantics())
1654
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.swDataDefProps)
1472
1655
 
1473
1656
  def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1474
1657
  self.logger.debug("writeImplementationDataType %s" % data_type.short_name)
1475
1658
  child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
1476
1659
  self.writeAutosarDataType(child_element, data_type)
1477
- self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1478
1660
  self.writeImplementationDataTypeElements(child_element, data_type)
1661
+ self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1479
1662
 
1480
1663
  def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1481
1664
  arguments = parent.getArgumentDataPrototypes()
@@ -1483,8 +1666,9 @@ class ARXMLWriter(AbstractARXMLWriter):
1483
1666
  arguments_tag = ET.SubElement(element, "ARGUMENTS")
1484
1667
  for prototype in arguments:
1485
1668
  child_element = ET.SubElement(arguments_tag, "ARGUMENT-DATA-PROTOTYPE")
1486
- self.writeIdentifiable(child_element, prototype)
1487
- self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.type_tref)
1669
+ self.setIdentifiable(child_element, prototype)
1670
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
1671
+ self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.typeTRef)
1488
1672
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
1489
1673
 
1490
1674
  def writePossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
@@ -1497,7 +1681,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1497
1681
  def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
1498
1682
  self.logger.debug("writeClientServerOperation %s" % operation.short_name)
1499
1683
  child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
1500
- self.writeIdentifiable(child_element, operation)
1684
+ self.setIdentifiable(child_element, operation)
1501
1685
  self.writeArgumentDataPrototypes(child_element, operation)
1502
1686
  self.writePossibleErrorRefs(child_element, operation)
1503
1687
 
@@ -1514,7 +1698,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1514
1698
  def writeApplicationError(self, element: ET.Element, error: ApplicationError):
1515
1699
  self.logger.debug("writeApplicationError %s" % error.short_name)
1516
1700
  child_element = ET.SubElement(element, "APPLICATION-ERROR")
1517
- self.writeIdentifiable(child_element, error)
1701
+ self.setIdentifiable(child_element, error)
1518
1702
  self.setChildElementOptionalNumericalValue(child_element, "ERROR-CODE", error.error_code)
1519
1703
 
1520
1704
  def writePossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
@@ -1528,8 +1712,8 @@ class ARXMLWriter(AbstractARXMLWriter):
1528
1712
  self._raiseError("Unsupported PossibleError %s" % type(error))
1529
1713
 
1530
1714
  def setPortInterface(self, element: ET.Element, port_interface: PortInterface):
1531
- self.writeIdentifiable(element, port_interface)
1532
- self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.is_service)
1715
+ self.setIdentifiable(element, port_interface)
1716
+ self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.isService)
1533
1717
  self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
1534
1718
 
1535
1719
  def writeClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
@@ -1587,7 +1771,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1587
1771
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
1588
1772
  self.logger.debug("writeSwRecordLayout %s" % layout.short_name)
1589
1773
  child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
1590
- self.writeIdentifiable(child_element, layout)
1774
+ self.setIdentifiable(child_element, layout)
1591
1775
  self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", layout.swRecordLayoutGroup)
1592
1776
 
1593
1777
  def writeSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
@@ -1619,19 +1803,20 @@ class ARXMLWriter(AbstractARXMLWriter):
1619
1803
  maps_tag = ET.SubElement(element, "MODE-REQUEST-TYPE-MAPS")
1620
1804
  for map in maps:
1621
1805
  child_element = ET.SubElement(maps_tag, "MODE-REQUEST-TYPE-MAP")
1806
+ self.setARObjectAttributes(child_element, map)
1622
1807
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.implementation_data_type_ref)
1623
1808
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", map.mode_group_ref)
1624
1809
 
1625
1810
  def writeDataTypeMappingSet(self, element: ET.Element, mapping_set: DataTypeMappingSet):
1626
1811
  self.logger.debug("writeDataTypeMappingSet %s" % mapping_set.short_name)
1627
1812
  child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-SET")
1628
- self.writeIdentifiable(child_element, mapping_set)
1813
+ self.setIdentifiable(child_element, mapping_set)
1629
1814
  self.writeDataTypeMaps(child_element, mapping_set)
1630
1815
  self.writeModeRequestTypeMaps(child_element, mapping_set)
1631
1816
 
1632
1817
  def setModeDeclaration(self, element: ET.Element, mode_declaration: ModeDeclaration):
1633
1818
  child_element = ET.SubElement(element, "MODE-DECLARATION")
1634
- self.writeIdentifiable(child_element, mode_declaration)
1819
+ self.setIdentifiable(child_element, mode_declaration)
1635
1820
  self.setChildElementOptionalNumericalValue(child_element, "VALUE", mode_declaration.getValue())
1636
1821
 
1637
1822
  def writeModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
@@ -1644,7 +1829,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1644
1829
  def writeModeDeclarationGroup(self, element: ET.Element, group: ModeDeclarationGroup):
1645
1830
  self.logger.debug("writeModeDeclarationGroup %s" % group.short_name)
1646
1831
  child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP")
1647
- self.writeIdentifiable(child_element, group)
1832
+ self.setIdentifiable(child_element, group)
1648
1833
  self.setChildElementOptionalRefType(child_element, "INITIAL-MODE-REF", group._initial_mode_ref)
1649
1834
  self.writeModeDeclarationGroupModeDeclaration(child_element, group)
1650
1835
  self.setChildElementOptionalNumericalValue(child_element, "ON-TRANSITION-VALUE", group.getOnTransitionValue())
@@ -1654,7 +1839,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1654
1839
  if len(mode_groups) > 0:
1655
1840
  mode_group = mode_groups[0]
1656
1841
  child_element = ET.SubElement(element, "MODE-GROUP")
1657
- self.writeIdentifiable(child_element, mode_group)
1842
+ self.setIdentifiable(child_element, mode_group)
1658
1843
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", mode_group.type_tref)
1659
1844
 
1660
1845
  def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
@@ -1663,6 +1848,640 @@ class ARXMLWriter(AbstractARXMLWriter):
1663
1848
  self.setPortInterface(child_element, mode_interface)
1664
1849
  self.writeModeSwitchInterfaceModeGroup(child_element, mode_interface)
1665
1850
 
1851
+ def setEOCExecutableEntityRefSuccessorRefs(self, element: ET.Element, successor_refs: List[RefType]):
1852
+ if len(successor_refs) > 0:
1853
+ child_element = ET.SubElement(element, "SUCCESSOR-REFS")
1854
+ for successor_ref in successor_refs:
1855
+ self.setChildElementOptionalRefType(child_element, "SUCCESSOR-REF", successor_ref)
1856
+
1857
+ def writeEOCExecutableEntityRef(self, element: ET.Element, entity_ref: EOCExecutableEntityRef):
1858
+ child_element = ET.SubElement(element, "EOC-EXECUTABLE-ENTITY-REF")
1859
+ self.setIdentifiable(child_element, entity_ref)
1860
+ self.setEOCExecutableEntityRefSuccessorRefs(child_element, entity_ref.getSuccessorRefs())
1861
+
1862
+ def writeExecutionOrderConstraintOrderedElement(self, element: ET.Element, constraint: ExecutionOrderConstraint):
1863
+ order_elements = constraint.getOrderedElements()
1864
+ if len(order_elements) > 0:
1865
+ child_element = ET.SubElement(element, "ORDERED-ELEMENTS")
1866
+ for order_element in order_elements:
1867
+ if isinstance(order_element, EOCExecutableEntityRef):
1868
+ self.writeEOCExecutableEntityRef(child_element, order_element)
1869
+ else:
1870
+ self._raiseError("Unsupported order element <%s>" % type(order_element))
1871
+
1872
+ def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
1873
+ self.logger.debug("writeExecutionOrderConstraint %s" % constraint.short_name)
1874
+ child_element = ET.SubElement(element, "EXECUTION-ORDER-CONSTRAINT")
1875
+ self.setIdentifiable(child_element, constraint)
1876
+ self.writeExecutionOrderConstraintOrderedElement(child_element, constraint)
1877
+
1878
+ def writeTimingRequirements(self, element: ET.Element, extension: TimingExtension):
1879
+ requirements = extension.getTimingRequirements()
1880
+ if len(requirements) > 0:
1881
+ child_element = ET.SubElement(element, "TIMING-REQUIREMENTS")
1882
+ for requirement in requirements:
1883
+ if isinstance(requirement, ExecutionOrderConstraint):
1884
+ self.writeExecutionOrderConstraint(child_element, requirement)
1885
+ else:
1886
+ self._raiseError("Unsupported timing requirement <%s>" % type(requirement))
1887
+
1888
+ def writeTimingExtension(self, element: ET.Element, extension: TimingExtension):
1889
+ self.writeTimingRequirements(element, extension)
1890
+
1891
+ def writeSwcTiming(self, element: ET.Element, timing: SwcTiming):
1892
+ self.logger.debug("writeSWcTiming %s" % timing.short_name)
1893
+ child_element = ET.SubElement(element, "SWC-TIMING")
1894
+ self.setIdentifiable(child_element, timing)
1895
+ self.writeTimingExtension(child_element, timing)
1896
+
1897
+ def writePduToFrameMappings(self, element: ET.Element, parent: Frame):
1898
+ mappings = parent.getPduToFrameMappings()
1899
+ if len(mappings) > 0:
1900
+ mappings_tags = ET.SubElement(element, "PDU-TO-FRAME-MAPPINGS")
1901
+ for mapping in mappings:
1902
+ child_element = ET.SubElement(mappings_tags, "PDU-TO-FRAME-MAPPING")
1903
+ self.setIdentifiable(child_element, mapping)
1904
+ self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.packingByteOrder)
1905
+ self.setChildElementOptionalRefType(child_element, "PDU-REF", mapping.pduRef)
1906
+ self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.startPosition)
1907
+
1908
+ def writeFrame(self, element: ET.Element, frame: Frame):
1909
+ self.setIdentifiable(element, frame)
1910
+ self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
1911
+ self.writePduToFrameMappings(element, frame)
1912
+
1913
+ def writeLinUnconditionalFrame(self, element: ET.Element, frame: LinUnconditionalFrame):
1914
+ self.logger.debug("LinUnconditionalFrame %s" % frame.short_name)
1915
+ child_element = ET.SubElement(element, "LIN-UNCONDITIONAL-FRAME")
1916
+ self.writeFrame(child_element, frame)
1917
+
1918
+ def writeNmNode(self, element: ET.Element, nm_node: NmNode):
1919
+ self.setChildElementOptionalRefType(element, "CONTROLLER-REF", nm_node.getControllerRef())
1920
+ self.setChildElementOptionalRefType(element, "NM-IF-ECU-REF", nm_node.getNmIfEcuRef())
1921
+ self.setChildElementOptionalNumericalValue(element, "NM-NODE-ID", nm_node.getNmNodeId())
1922
+
1923
+ refs = nm_node.getRxNmPduRefs()
1924
+ if len(refs) > 0:
1925
+ refs_tag = ET.SubElement(element, "RX-NM-PDU-REFS")
1926
+ for ref in refs:
1927
+ self.setChildElementOptionalRefType(refs_tag, "RX-NM-PDU-REF", ref)
1928
+
1929
+ refs = nm_node.getTxNmPduRefs()
1930
+ if len(refs) > 0:
1931
+ refs_tag = ET.SubElement(element, "TX-NM-PDU-REFS")
1932
+ for ref in refs:
1933
+ self.setChildElementOptionalRefType(refs_tag, "TX-NM-PDU-REF", ref)
1934
+
1935
+ def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
1936
+ self.logger.debug("writeCanNmNode %s" % nm_node.short_name)
1937
+ child_element = ET.SubElement(element, "CAN-NM-NODE")
1938
+ self.setIdentifiable(child_element, nm_node)
1939
+ self.writeNmNode(child_element, nm_node)
1940
+
1941
+ self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
1942
+ self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
1943
+ self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
1944
+
1945
+ def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
1946
+ nodes = parent.getNmNodes()
1947
+ if len(nodes) > 0:
1948
+ child_element = ET.SubElement(element, "NM-NODES")
1949
+ for node in nodes:
1950
+ if isinstance(node, CanNmNode):
1951
+ self.writeCanNmNode(child_element, node)
1952
+ else:
1953
+ self._raiseError("Unsupported Nm Node <%s>" % type(node))
1954
+
1955
+ def setCanNmClusterCoupling(self, element: ET.Element, coupling: CanNmClusterCoupling):
1956
+ child_element = ET.SubElement(element, "CAN-NM-CLUSTER-COUPLING")
1957
+ refs = coupling.getCoupledClusterRefs()
1958
+ if len(refs) > 0:
1959
+ refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
1960
+ for ref in refs:
1961
+ self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
1962
+
1963
+ self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
1964
+ self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
1965
+
1966
+ def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
1967
+ self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
1968
+ couplings = config.getNmClusterCouplings()
1969
+ if len(couplings) > 0:
1970
+ child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
1971
+ for coupling in couplings:
1972
+ if isinstance(coupling, CanNmClusterCoupling):
1973
+ self.setCanNmClusterCoupling(child_element, coupling)
1974
+ else:
1975
+ self._raiseError("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
1976
+
1977
+ def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
1978
+ self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
1979
+ self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
1980
+ self.setChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER", cluster.nmChannelSleepMaster)
1981
+ self.writeNmClusterNmNodes(element, cluster)
1982
+ self.setChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK", cluster.getNmSynchronizingNetwork())
1983
+
1984
+ def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
1985
+ self.logger.debug("WriteCanNmCluster %s" % cluster.short_name)
1986
+ child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
1987
+ self.setIdentifiable(child_element, cluster)
1988
+ self.writeNmCluster(child_element, cluster)
1989
+
1990
+ self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ACTIVE", cluster.getNmBusloadReductionActive())
1991
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CAR-WAKE-UP-RX-ENABLED", cluster.getNmCarWakeUpRxEnabled())
1992
+ self.setChildElementOptionalNumericalValue(child_element, "NM-CBV-POSITION", cluster.getNmCbvPosition())
1993
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CHANNEL-ACTIVE", cluster.getNmChannelActive())
1994
+ self.setChildElementOptionalFloatValue(child_element, "NM-IMMEDIATE-NM-CYCLE-TIME", cluster.getNmImmediateNmCycleTime())
1995
+ self.setChildElementOptionalNumericalValue(child_element, "NM-IMMEDIATE-NM-TRANSMISSIONS", cluster.getNmImmediateNmTransmissions())
1996
+ self.setChildElementOptionalFloatValue(child_element, "NM-MESSAGE-TIMEOUT-TIME", cluster.getNmMessageTimeoutTime())
1997
+ self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-TIME", cluster.getNmMsgCycleTime())
1998
+ self.setChildElementOptionalFloatValue(child_element, "NM-NETWORK-TIMEOUT", cluster.getNmNetworkTimeout())
1999
+ self.setChildElementOptionalNumericalValue(child_element, "NM-NID-POSITION", cluster.getNmNidPosition())
2000
+ self.setChildElementOptionalFloatValue(child_element, "NM-REMOTE-SLEEP-INDICATION-TIME", cluster.getNmRemoteSleepIndicationTime())
2001
+ self.setChildElementOptionalFloatValue(child_element, "NM-REPEAT-MESSAGE-TIME", cluster.getNmRepeatMessageTime())
2002
+ self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2003
+ self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2004
+
2005
+ def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2006
+ clusters = parent.getNmClusters()
2007
+ if len(clusters) > 0:
2008
+ child_element = ET.SubElement(element, "NM-CLUSTERS")
2009
+ for cluster in clusters:
2010
+ if isinstance(cluster, CanNmCluster):
2011
+ self.writeCanNmCluster(child_element, cluster)
2012
+ else:
2013
+ self._raiseError("Unsupported Nm Cluster <%s>" % type(cluster))
2014
+
2015
+ def writeNmConfig(self, element: ET.Element, config: NmConfig):
2016
+ self.logger.debug("WriteNmConfig %s" % config.short_name)
2017
+ child_element = ET.SubElement(element, "NM-CONFIG")
2018
+ self.setIdentifiable(child_element, config)
2019
+ self.writeNmConfigNmClusters(child_element, config)
2020
+ self.writeNmConfigNmClusterCouplings(child_element, config)
2021
+
2022
+ def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2023
+ self.logger.debug("NmPdu %s" % pdu.short_name)
2024
+ child_element = ET.SubElement(element, "NM-PDU")
2025
+ self.setIdentifiable(child_element, pdu)
2026
+ self.writeIPdu(child_element, pdu)
2027
+
2028
+ def writeNPdu(self, element: ET.Element, pdu: NPdu):
2029
+ self.logger.debug("NPdu %s" % pdu.short_name)
2030
+ child_element = ET.SubElement(element, "N-PDU")
2031
+ self.setIdentifiable(child_element, pdu)
2032
+ self.writeIPdu(child_element, pdu)
2033
+
2034
+ def writeIPdu(self, element: ET.Element, pdu: IPdu):
2035
+ self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
2036
+
2037
+ def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2038
+ self.logger.debug("DcmIPdu %s" % pdu.short_name)
2039
+ child_element = ET.SubElement(element, "DCM-I-PDU")
2040
+ self.setIdentifiable(child_element, pdu)
2041
+ self.writeIPdu(child_element, pdu)
2042
+ self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2043
+
2044
+ def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2045
+ self.logger.debug("SecuredIPdu %s" % pdu.short_name)
2046
+ child_element = ET.SubElement(element, "SECURED-I-PDU")
2047
+ self.setIdentifiable(child_element, pdu)
2048
+ self.writeIPdu(child_element, pdu)
2049
+
2050
+ def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2051
+ self.logger.debug("CanTpConfig %s" % config.short_name)
2052
+ child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2053
+ self.setIdentifiable(child_element, config)
2054
+
2055
+ def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2056
+ ref_list = triggering.getFramePortRefs()
2057
+ if len(ref_list) > 0:
2058
+ frame_port_refs_tag = ET.SubElement(element, "FRAME-PORT-REFS")
2059
+ for ref in ref_list:
2060
+ self.setChildElementOptionalRefType(frame_port_refs_tag, "FRAME-PORT-REF", ref)
2061
+ self.setChildElementOptionalRefType(element, "FRAME-REF", triggering.getFrameRef())
2062
+
2063
+ refs = triggering.getPduTriggeringRefs()
2064
+ if len(refs) > 0:
2065
+ triggerings_tag = ET.SubElement(element, "PDU-TRIGGERINGS")
2066
+ for ref in refs:
2067
+ child_element = ET.SubElement(triggerings_tag, 'PDU-TRIGGERING-REF-CONDITIONAL')
2068
+ self.setChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF", ref)
2069
+
2070
+ def writeCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2071
+ self.logger.debug("WRite CanFrameTriggering %s" % triggering.getShortName())
2072
+ child_element = ET.SubElement(element, "CAN-FRAME-TRIGGERING")
2073
+ self.setIdentifiable(child_element, triggering)
2074
+ self.writeFrameTriggering(child_element, triggering)
2075
+ self.setChildElementOptionalLiteral(child_element, "CAN-ADDRESSING-MODE", triggering.getCanAddressingMode())
2076
+ self.setChildElementOptionalBooleanValue(child_element, "CAN-FD-FRAME-SUPPORT", triggering.getCanFdFrameSupport())
2077
+ self.setChildElementOptionalLiteral(child_element, "CAN-FRAME-RX-BEHAVIOR", triggering.getCanFrameRxBehavior())
2078
+ self.setChildElementOptionalLiteral(child_element, "CAN-FRAME-TX-BEHAVIOR", triggering.getCanFrameTxBehavior())
2079
+ self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2080
+ self.setChildElementRxIdentifierRange(child_element, "RX-IDENTIFIER-RANGE", triggering.getRxIdentifierRange())
2081
+
2082
+ def writeLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2083
+ self.logger.debug("Write LinFrameTriggering %s" % triggering.getShortName())
2084
+ child_element = ET.SubElement(element, "LIN-FRAME-TRIGGERING")
2085
+ self.setIdentifiable(child_element, triggering)
2086
+ self.writeFrameTriggering(child_element, triggering)
2087
+ self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2088
+ self.setChildElementOptionalLiteral(child_element, "LIN-CHECKSUM", triggering.getLinChecksum())
2089
+
2090
+ def writeISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2091
+ self.logger.debug("Write ISignalTriggering %s" % triggering.getShortName())
2092
+ child_element = ET.SubElement(element, "I-SIGNAL-TRIGGERING")
2093
+ self.setIdentifiable(child_element, triggering)
2094
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", triggering.getISignalGroupRef())
2095
+ ref_list = triggering.getISignalPortRefs()
2096
+ if len(ref_list) > 0:
2097
+ i_signal_port_refs_tag = ET.SubElement(child_element, "I-SIGNAL-PORT-REFS")
2098
+ for ref in ref_list:
2099
+ self.setChildElementOptionalRefType(i_signal_port_refs_tag, "I-SIGNAL-PORT-REF", ref)
2100
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", triggering.getISignalRef())
2101
+
2102
+ def writePduTriggering(self, element: ET.Element, triggering: PduTriggering):
2103
+ self.logger.debug("Write PduTriggering %s" % triggering.getShortName())
2104
+ child_element = ET.SubElement(element, "PDU-TRIGGERING")
2105
+ self.setIdentifiable(child_element, triggering)
2106
+ ref_list = triggering.getIPduPortRefs()
2107
+ if len(ref_list) > 0:
2108
+ i_signal_port_refs_tag = ET.SubElement(child_element, "I-PDU-PORT-REFS")
2109
+ for ref in ref_list:
2110
+ self.setChildElementOptionalRefType(i_signal_port_refs_tag, "I-PDU-PORT-REF", ref)
2111
+ self.setChildElementOptionalRefType(child_element, "I-PDU-REF", triggering.getIPduRef())
2112
+
2113
+ refs = triggering.getISignalTriggeringRefs()
2114
+ if len(refs) > 0:
2115
+ triggerings_tag = ET.SubElement(child_element, "I-SIGNAL-TRIGGERINGS")
2116
+ for ref in refs:
2117
+ child_element = ET.SubElement(triggerings_tag, 'I-SIGNAL-TRIGGERING-REF-CONDITIONAL')
2118
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF", ref)
2119
+
2120
+ def writePhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2121
+ connectors = channel.getCommConnectorRefs()
2122
+ if len(connectors) > 0:
2123
+ connectors_tag = ET.SubElement(element, "COMM-CONNECTORS")
2124
+ for connector in connectors:
2125
+ child_element = ET.SubElement(connectors_tag, 'COMMUNICATION-CONNECTOR-REF-CONDITIONAL')
2126
+ self.setChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF", connector)
2127
+
2128
+ triggerings = channel.getFrameTriggerings()
2129
+ if len(triggerings) > 0:
2130
+ triggerings_tag = ET.SubElement(element, "FRAME-TRIGGERINGS")
2131
+ for triggering in triggerings:
2132
+ if isinstance(triggering, CanFrameTriggering):
2133
+ self.writeCanFrameTriggering(triggerings_tag, triggering)
2134
+ elif isinstance(triggering, LinFrameTriggering):
2135
+ self.writeLinFrameTriggering(triggerings_tag, triggering)
2136
+ else:
2137
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % type(triggering))
2138
+
2139
+ triggerings = channel.getISignalTriggerings()
2140
+ if len(triggerings) > 0:
2141
+ triggerings_tag = ET.SubElement(element, "I-SIGNAL-TRIGGERINGS")
2142
+ for triggering in triggerings:
2143
+ if isinstance(triggering, ISignalTriggering):
2144
+ self.writeISignalTriggering(triggerings_tag, triggering)
2145
+ else:
2146
+ raise NotImplementedError("Unsupported ISignalTriggering <%s>" % type(triggering))
2147
+
2148
+ triggerings = channel.getPduTriggerings()
2149
+ if len(triggerings) > 0:
2150
+ triggerings_tag = ET.SubElement(element, "PDU-TRIGGERINGS")
2151
+ for triggering in triggerings:
2152
+ if isinstance(triggering, PduTriggering):
2153
+ self.writePduTriggering(triggerings_tag, triggering)
2154
+ else:
2155
+ raise NotImplementedError("Unsupported PduTriggering <%s>" % type(triggering))
2156
+
2157
+ def writeCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2158
+ self.logger.debug("CanPhysicalChannel %s" % channel.short_name)
2159
+ child_element = ET.SubElement(element, "CAN-PHYSICAL-CHANNEL")
2160
+ self.setIdentifiable(child_element, channel)
2161
+ self.writePhysicalChannel(child_element, channel)
2162
+
2163
+ def writeLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2164
+ self.logger.debug("LinPhysicalChannel %s" % channel.short_name)
2165
+ child_element = ET.SubElement(element, "LIN-PHYSICAL-CHANNEL")
2166
+ self.setIdentifiable(child_element, channel)
2167
+ self.writePhysicalChannel(child_element, channel)
2168
+
2169
+ def writeCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2170
+ channels = cluster.getPhysicalChannels()
2171
+ if len(channels) > 0:
2172
+ child_element = ET.SubElement(element, "PHYSICAL-CHANNELS")
2173
+ for channel in channels:
2174
+ if isinstance(channel, CanPhysicalChannel):
2175
+ self.writeCanPhysicalChannel(child_element, channel)
2176
+ elif isinstance(channel, LinPhysicalChannel):
2177
+ self.writeLinPhysicalChannel(child_element, channel)
2178
+ else:
2179
+ raise NotImplementedError("Unsupported Physical Channel <%s>" % type(channel))
2180
+
2181
+ def writeCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
2182
+ self.setChildElementOptionalNumericalValue(element, "BAUDRATE", cluster.getBaudrate())
2183
+ self.writeCommunicationClusterPhysicalChannels(element, cluster)
2184
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-NAME", cluster.getProtocolName())
2185
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", cluster.getProtocolVersion())
2186
+
2187
+ def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2188
+ self.setChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE", cluster.getCanFdBaudrate())
2189
+
2190
+ def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
2191
+ self.logger.debug("LinCluster %s" % cluster.short_name)
2192
+ child_element = ET.SubElement(element, "LIN-CLUSTER")
2193
+ self.setIdentifiable(child_element, cluster)
2194
+ child_element = ET.SubElement(child_element, "LIN-CLUSTER-VARIANTS")
2195
+ child_element = ET.SubElement(child_element, "LIN-CLUSTER-CONDITIONAL")
2196
+ self.writeCommunicationCluster(child_element, cluster)
2197
+
2198
+ def writeCanCluster(self, element: ET.Element, cluster: CanCluster):
2199
+ self.logger.debug("CanCluster %s" % cluster.short_name)
2200
+ child_element = ET.SubElement(element, "CAN-CLUSTER")
2201
+ self.setIdentifiable(child_element, cluster)
2202
+
2203
+ child_element = ET.SubElement(child_element, "CAN-CLUSTER-VARIANTS")
2204
+ child_element = ET.SubElement(child_element, "CAN-CLUSTER-CONDITIONAL")
2205
+ self.writeCommunicationCluster(child_element, cluster)
2206
+ self.readAbstractCanCluster(child_element, cluster)
2207
+
2208
+ def writeCanFrame(self, element: ET.Element, frame: CanFrame):
2209
+ self.logger.debug("CanFrame %s" % frame.short_name)
2210
+ child_element = ET.SubElement(element, "CAN-FRAME")
2211
+ self.writeFrame(child_element, frame)
2212
+
2213
+ def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
2214
+ self.logger.debug("EcuInstance %s" % instance.short_name)
2215
+ child_element = ET.SubElement(element, "ECU-INSTANCE")
2216
+ self.setIdentifiable(child_element, instance)
2217
+
2218
+ def writeSystemSignalGroup(self, element: ET.Element, group: SystemSignalGroup):
2219
+ self.logger.debug("Write SystemSignalGroup %s" % group.short_name)
2220
+ child_element = ET.SubElement(element, "SYSTEM-SIGNAL-GROUP")
2221
+ self.setIdentifiable(child_element, group)
2222
+ signal_refs = group.getSystemSignalRefs()
2223
+ if len(signal_refs) > 0:
2224
+ signal_refs_tag = ET.SubElement(child_element, "SYSTEM-SIGNAL-REFS")
2225
+ for signal_ref in signal_refs:
2226
+ self.setChildElementOptionalRefType(signal_refs_tag, "SYSTEM-SIGNAL-REF", signal_ref)
2227
+
2228
+ def setSenderReceiverToSignalMapping(self, element: ET.Element, mapping: SenderReceiverToSignalMapping):
2229
+ child_element = ET.SubElement(element, "SENDER-RECEIVER-TO-SIGNAL-MAPPING")
2230
+ self.setVariableDataPrototypeInSystemInstanceRef(child_element, "DATA-ELEMENT-IREF", mapping.getDataElementIRef())
2231
+ self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", mapping.getSystemSignalRef())
2232
+
2233
+ def setSenderReceiverToSignalGroupMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
2234
+ child_element = ET.SubElement(element, "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING")
2235
+ self.setVariableDataPrototypeInSystemInstanceRef(child_element, "DATA-ELEMENT-IREF", mapping.getDataElementIRef())
2236
+ self.setChildElementOptionalRefType(child_element, "SIGNAL-GROUP-REF", mapping.getSignalGroupRef())
2237
+
2238
+ def writeSystemMappingDataMappings(self, element: ET.Element, system_mapping: SystemMapping):
2239
+ data_mappings = system_mapping.getDataMappings()
2240
+ if len(data_mappings) > 0:
2241
+ child_element = ET.SubElement(element, "DATA-MAPPINGS")
2242
+ for data_mapping in data_mappings:
2243
+ if isinstance(data_mapping, SenderReceiverToSignalMapping):
2244
+ self.setSenderReceiverToSignalMapping(child_element, data_mapping)
2245
+ elif isinstance(data_mapping, SenderReceiverToSignalGroupMapping):
2246
+ self.setSenderReceiverToSignalGroupMapping(child_element, data_mapping)
2247
+ else:
2248
+ raise NotImplementedError("Unsupported Data Mapping %s" % type(data_mapping))
2249
+
2250
+ def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
2251
+ self.logger.debug("Write SystemMapping %s" % mapping.short_name)
2252
+ child_element = ET.SubElement(element, "SYSTEM-MAPPING")
2253
+ self.setIdentifiable(child_element, mapping)
2254
+ self.writeSystemMappingDataMappings(child_element, mapping)
2255
+
2256
+ def writeSystemMappings(self, element: ET.Element, system: System):
2257
+ mappings = system.getMappings()
2258
+ if len(mappings) > 0:
2259
+ mappings_tag = ET.SubElement(element, "MAPPINGS")
2260
+ for mapping in mappings:
2261
+ if isinstance(mapping, SystemMapping):
2262
+ self.writeSystemMapping(mappings_tag, mapping)
2263
+ else:
2264
+ raise NotImplementedError("Unsupported Mapping %s" % type(mapping))
2265
+
2266
+ def writeSystem(self, element: ET.Element, system: System):
2267
+ self.logger.debug("Write System %s" % system.short_name)
2268
+ child_element = ET.SubElement(element, "SYSTEM")
2269
+ self.setARElement(child_element, system)
2270
+
2271
+ self.setChildElementOptionalLiteral(child_element, "ECU-EXTRACT-VERSION", system.getEcuExtractVersion())
2272
+ refs = system.getFibexElementRefs()
2273
+ if len(refs) > 0:
2274
+ fibex_elements_tag = ET.SubElement(child_element, "FIBEX-ELEMENTS")
2275
+ for ref in refs:
2276
+ fibex_element_ref_conditional_tag = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
2277
+ self.setChildElementOptionalRefType(fibex_element_ref_conditional_tag, "FIBEX-ELEMENT-REF", ref)
2278
+
2279
+ self.writeSystemMappings(child_element, system)
2280
+
2281
+ def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
2282
+ self.logger.debug("Write PhysicalDimension %s" % dimension.short_name)
2283
+ child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
2284
+ self.setARElement(child_element, dimension)
2285
+ self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
2286
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
2287
+
2288
+ def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
2289
+ if len(mappings) > 0:
2290
+ mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
2291
+ for mapping in mappings:
2292
+ child_element = ET.SubElement(mappings_tag, "I-SIGNAL-MAPPING")
2293
+ self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.sourceSignalRef)
2294
+ self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.targetSignalRef)
2295
+
2296
+ def writeGateway(self, element: ET.Element, gateway: Gateway):
2297
+ self.logger.debug("Gateway %s" % gateway.short_name)
2298
+ child_element = ET.SubElement(element, "GATEWAY")
2299
+ self.setIdentifiable(child_element, gateway)
2300
+ self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
2301
+ self.setISignalMappings(child_element, gateway.getSignalMappings())
2302
+
2303
+ def writeISignal(self, element: ET.Element, signal: ISignal):
2304
+ self.logger.debug("ISignal %s" % signal.short_name)
2305
+ child_element = ET.SubElement(element, "I-SIGNAL")
2306
+ self.setIdentifiable(child_element, signal)
2307
+ self.setChildElementOptionalLiteral(child_element, "DATA-TYPE-POLICY", signal.dataTypePolicy)
2308
+ self.setInitValue(child_element, signal.initValue)
2309
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH", signal.length)
2310
+ self.setSwDataDefProps(child_element, "NETWORK-REPRESENTATION-PROPS", signal.networkRepresentationProps)
2311
+ self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", signal.systemSignalRef)
2312
+
2313
+ def writeEcucValueCollectionEcucValues(self, element: ET.Element, collection: EcucValueCollection):
2314
+ value_refs = collection.getEcucValueRefs()
2315
+ if len(value_refs) > 0:
2316
+ ecuc_values_tag = ET.SubElement(element, "ECUC-VALUES")
2317
+ for value_ref in value_refs:
2318
+ child_element = ET.SubElement(ecuc_values_tag, "ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL")
2319
+ self.setChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF", value_ref)
2320
+
2321
+ def writeEcucValueCollection(self, element: ET.Element, collection: EcucValueCollection):
2322
+ self.logger.debug("EcucValueCollection %s" % collection.short_name)
2323
+ child_element = ET.SubElement(element, "ECUC-VALUE-COLLECTION")
2324
+ self.setIdentifiable(child_element, collection)
2325
+ self.setChildElementOptionalRefType(child_element, "ECU-EXTRACT-REF", collection.getEcuExtractRef())
2326
+ self.writeEcucValueCollectionEcucValues(child_element, collection)
2327
+
2328
+ def writeEcucContainerValueSubContainers(self, element: ET.Element, container: EcucContainerValue):
2329
+ sub_containers = container.getSubContainers()
2330
+ if len(sub_containers) > 0:
2331
+ sub_containers_tag = ET.SubElement(element, "SUB-CONTAINERS")
2332
+ for sub_container in sub_containers:
2333
+ if isinstance(sub_container, EcucContainerValue):
2334
+ self.writeEcucContainValue(sub_containers_tag, sub_container)
2335
+ else:
2336
+ raise NotImplementedError("Unsupported Sub Container %s" % type(container))
2337
+
2338
+ def writeEcucParameterValue(self, element: ET.Element, param_value: EcucParameterValue):
2339
+ self.setChildElementOptionalRefType(element, "DEFINITION-REF", param_value.getDefinitionRef())
2340
+ self.setAnnotations(element, param_value.getAnnotations())
2341
+
2342
+ def setEcucTextualParamValue(self, element: ET.Element, param_value: EcucTextualParamValue):
2343
+ child_element = ET.SubElement(element, "ECUC-TEXTUAL-PARAM-VALUE")
2344
+ self.writeEcucParameterValue(child_element, param_value)
2345
+ self.setChildElementOptionalLiteral(child_element, "VALUE", param_value.getValue())
2346
+
2347
+ def setEcucNumericalParamValue(self, element: ET.Element, param_value: EcucNumericalParamValue):
2348
+ child_element = ET.SubElement(element, "ECUC-NUMERICAL-PARAM-VALUE")
2349
+ self.writeEcucParameterValue(child_element, param_value)
2350
+ self.setChildElementOptionalNumericalValue(child_element, "VALUE", param_value.getValue())
2351
+
2352
+ def writeEcucContainerValueParameterValues(self, element: ET.Element, container_value: EcucContainerValue):
2353
+ param_values = container_value.getParameterValues()
2354
+ if len(param_values) > 0:
2355
+ child_element = ET.SubElement(element, "PARAMETER-VALUES")
2356
+ for param_value in param_values:
2357
+ if isinstance(param_value, EcucTextualParamValue):
2358
+ self.setEcucTextualParamValue(child_element, param_value)
2359
+ elif isinstance(param_value, EcucNumericalParamValue):
2360
+ self.setEcucNumericalParamValue(child_element, param_value)
2361
+ else:
2362
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % type(param_value))
2363
+
2364
+ def writeEcucAbstractReferenceValue(self, element: ET.Element, value: EcucAbstractReferenceValue):
2365
+ self.setChildElementOptionalRefType(element, "DEFINITION-REF", value.getDefinitionRef())
2366
+ self.setAnnotations(element, value.getAnnotations())
2367
+
2368
+ def setEcucReferenceValue(self, element: ET.Element, value = EcucReferenceValue()):
2369
+ child_element = ET.SubElement(element, "ECUC-REFERENCE-VALUE")
2370
+ self.writeEcucAbstractReferenceValue(child_element, value)
2371
+ self.setChildElementOptionalRefType(child_element, "VALUE-REF", value.getValueRef())
2372
+ return value
2373
+
2374
+ def setAnyInstanceRef(self, element: ET.Element, key, instance_ref: AnyInstanceRef):
2375
+ if instance_ref is not None:
2376
+ child_element = ET.SubElement(element, key)
2377
+ self.setChildElementOptionalRefType(child_element, "BASE-REF", instance_ref.getBaseRef())
2378
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF", instance_ref.getContextElementRef())
2379
+ self.setChildElementOptionalRefType(child_element, "TARGET-REF", instance_ref.getTargetRef())
2380
+ return instance_ref
2381
+
2382
+ def setEcucInstanceReferenceValue(self, element: ET.Element, value : EcucInstanceReferenceValue):
2383
+ child_element = ET.SubElement(element, "ECUC-INSTANCE-REFERENCE-VALUE")
2384
+ self.writeEcucAbstractReferenceValue(child_element, value)
2385
+ self.setAnyInstanceRef(child_element, "VALUE-IREF", value.getValueIRef())
2386
+ return value
2387
+
2388
+ def writeEcucContainerValueReferenceValues(self, element: ET.Element, container_value: EcucContainerValue):
2389
+ reference_values = container_value.getReferenceValues()
2390
+ if len(reference_values) > 0:
2391
+ child_element = ET.SubElement(element, "REFERENCE-VALUES")
2392
+ for reference_value in reference_values:
2393
+ if isinstance(reference_value, EcucReferenceValue):
2394
+ self.setEcucReferenceValue(child_element, reference_value)
2395
+ elif isinstance(reference_value, EcucInstanceReferenceValue):
2396
+ self.setEcucInstanceReferenceValue(child_element, reference_value)
2397
+ else:
2398
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % type(reference_value))
2399
+
2400
+ def writeEcucContainValue(self, element: ET.Element, container_value: EcucContainerValue):
2401
+ self.logger.debug("EcucContainerValue %s" % container_value.short_name)
2402
+ child_element = ET.SubElement(element, "ECUC-CONTAINER-VALUE")
2403
+ self.setIdentifiable(child_element, container_value)
2404
+ self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", container_value.getDefinitionRef())
2405
+ self.writeEcucContainerValueParameterValues(child_element, container_value)
2406
+ self.writeEcucContainerValueReferenceValues(child_element, container_value)
2407
+ self.writeEcucContainerValueSubContainers(child_element, container_value)
2408
+
2409
+ def writeEcucModuleConfigurationValuesContainers(self, element: ET.Element, value: EcucModuleConfigurationValues):
2410
+ containers = value.getContainers()
2411
+ if len(containers) > 0:
2412
+ containers_tag = ET.SubElement(element, "CONTAINERS")
2413
+ for container in containers:
2414
+ if isinstance(container, EcucContainerValue):
2415
+ self.writeEcucContainValue(containers_tag, container)
2416
+ else:
2417
+ raise NotImplementedError("Unsupported Container %s" % type(container))
2418
+
2419
+ def writeEcucModuleConfigurationValues(self, element: ET.Element, values: EcucModuleConfigurationValues):
2420
+ self.logger.debug("EcucModuleConfigurationValues %s" % values.short_name)
2421
+ child_element = ET.SubElement(element, "ECUC-MODULE-CONFIGURATION-VALUES")
2422
+ self.setIdentifiable(child_element, values)
2423
+ self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", values.getDefinitionRef())
2424
+ self.setChildElementOptionalLiteral(child_element, "IMPLEMENTATION-CONFIG-VARIANT", values.getImplementationConfigVariant())
2425
+ self.setChildElementOptionalRefType(child_element, "MODULE-DESCRIPTION-REF", values.getModuleDescriptionRef())
2426
+ self.writeEcucModuleConfigurationValuesContainers(child_element, values)
2427
+
2428
+ def writeISignalGroup(self, element: ET.Element, group: ISignalGroup):
2429
+ self.logger.debug("ISignalGroup %s" % group.short_name)
2430
+ child_element = ET.SubElement(element, "I-SIGNAL-GROUP")
2431
+ self.setIdentifiable(child_element, group)
2432
+ signal_refs = group.getISignalRefs()
2433
+ if len(signal_refs) > 0:
2434
+ signal_refs_tag = ET.SubElement(child_element, "I-SIGNAL-REFS")
2435
+ for signal_ref in signal_refs:
2436
+ self.setChildElementOptionalRefType(signal_refs_tag, "I-SIGNAL-REF", signal_ref)
2437
+ self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-GROUP-REF", group.getSystemSignalGroupRef())
2438
+
2439
+ def writeISignalIPduGroup(self, element: ET.Element, group: ISignalIPduGroup):
2440
+ self.logger.debug("ISignalIPduGroup %s" % group.short_name)
2441
+ child_element = ET.SubElement(element, "I-SIGNAL-I-PDU-GROUP")
2442
+ self.setIdentifiable(child_element, group)
2443
+ self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-DIRECTION", group.getCommunicationDirection())
2444
+ self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-MODE", group.getCommunicationMode())
2445
+ group_refs = group.getContainedISignalIPduGroupRefs()
2446
+ if len(group_refs) > 0:
2447
+ pdu_refs_tag = ET.SubElement(child_element, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REFS")
2448
+ for pdu_ref in group_refs:
2449
+ self.setChildElementOptionalRefType(pdu_refs_tag, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REF", pdu_ref)
2450
+ pdu_refs = group.getISignalIPduRefs()
2451
+ if len(pdu_refs) > 0:
2452
+ pdu_refs_tag = ET.SubElement(child_element, "I-SIGNAL-I-PDUS")
2453
+ for pdu_ref in pdu_refs:
2454
+ ref_conditional_tag = ET.SubElement(pdu_refs_tag, "I-SIGNAL-I-PDU-REF-CONDITIONAL")
2455
+ self.setChildElementOptionalRefType(ref_conditional_tag, "I-SIGNAL-I-PDU-REF", pdu_ref)
2456
+
2457
+ def writeSystemSignal(self, element: ET.Element, signal: SystemSignal):
2458
+ self.logger.debug("SystemSignal %s" % signal.short_name)
2459
+ child_element = ET.SubElement(element, "SYSTEM-SIGNAL")
2460
+ self.setIdentifiable(child_element, signal)
2461
+ self.setChildElementOptionalBooleanValue(child_element, "DYNAMIC-LENGTH", signal.getDynamicLength())
2462
+
2463
+ def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2464
+ mappings = parent.getISignalToPduMappings()
2465
+ if len(mappings) > 0:
2466
+ mappings_tag = ET.SubElement(element, "I-SIGNAL-TO-PDU-MAPPINGS")
2467
+ for mapping in mappings:
2468
+ child_element = ET.SubElement(mappings_tag, "I-SIGNAL-TO-I-PDU-MAPPING")
2469
+ self.setIdentifiable(child_element, mapping)
2470
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
2471
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", mapping.getISignalGroupRef())
2472
+ self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
2473
+ self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.getStartPosition())
2474
+ self.setChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY", mapping.getTransferProperty())
2475
+ self.setChildElementOptionalNumericalValue(child_element, "UPDATE-INDICATION-BIT-POSITION", mapping.getUpdateIndicationBitPosition())
2476
+
2477
+ def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
2478
+ self.logger.debug("ISignalIPdu %s" % i_pdu.short_name)
2479
+ child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
2480
+ self.setIdentifiable(child_element, i_pdu)
2481
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
2482
+ self.writeISignalToPduMappings(child_element, i_pdu)
2483
+ self.setChildElementOptionalLiteral(child_element, "UNUSED-BIT-PATTERN", i_pdu.getUnusedBitPattern())
2484
+
1666
2485
  def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
1667
2486
  if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
1668
2487
  self.writeComplexDeviceDriverSwComponentType(element, ar_element)
@@ -1720,6 +2539,52 @@ class ARXMLWriter(AbstractARXMLWriter):
1720
2539
  self.writeModeDeclarationGroup(element, ar_element)
1721
2540
  elif isinstance(ar_element, ModeSwitchInterface):
1722
2541
  self.writeModeSwitchInterface(element, ar_element)
2542
+ elif isinstance(ar_element, SwcTiming):
2543
+ self.writeSwcTiming(element, ar_element)
2544
+ elif isinstance(ar_element, LinUnconditionalFrame):
2545
+ self.writeLinUnconditionalFrame(element, ar_element)
2546
+ elif isinstance(ar_element, NmConfig):
2547
+ self.writeNmConfig(element, ar_element)
2548
+ elif isinstance(ar_element, NmPdu):
2549
+ self.writeNmPdu(element, ar_element)
2550
+ elif isinstance(ar_element, NPdu):
2551
+ self.writeNPdu(element, ar_element)
2552
+ elif isinstance(ar_element, DcmIPdu):
2553
+ self.writeDcmIPdu(element, ar_element)
2554
+ elif isinstance(ar_element, SecuredIPdu):
2555
+ self.writeSecuredIPdu(element, ar_element)
2556
+ elif isinstance(ar_element, CanTpConfig):
2557
+ self.writeCanTpConfig(element, ar_element)
2558
+ elif isinstance(ar_element, LinCluster):
2559
+ self.writeLinCluster(element, ar_element)
2560
+ elif isinstance(ar_element, CanCluster):
2561
+ self.writeCanCluster(element, ar_element)
2562
+ elif isinstance(ar_element, CanFrame):
2563
+ self.writeCanFrame(element, ar_element)
2564
+ elif isinstance(ar_element, Gateway):
2565
+ self.writeGateway(element, ar_element)
2566
+ elif isinstance(ar_element, ISignal):
2567
+ self.writeISignal(element, ar_element)
2568
+ elif isinstance(ar_element, EcucValueCollection):
2569
+ self.writeEcucValueCollection(element, ar_element)
2570
+ elif isinstance(ar_element, EcucModuleConfigurationValues):
2571
+ self.writeEcucModuleConfigurationValues(element, ar_element)
2572
+ elif isinstance(ar_element, ISignalGroup):
2573
+ self.writeISignalGroup(element, ar_element)
2574
+ elif isinstance(ar_element, ISignalIPduGroup):
2575
+ self.writeISignalIPduGroup(element, ar_element)
2576
+ elif isinstance(ar_element, SystemSignal):
2577
+ self.writeSystemSignal(element, ar_element)
2578
+ elif isinstance(ar_element, ISignalIPdu):
2579
+ self.writeISignalIPdu(element, ar_element)
2580
+ elif isinstance(ar_element, EcuInstance):
2581
+ self.writeEcuInstance(element, ar_element)
2582
+ elif isinstance(ar_element, SystemSignalGroup):
2583
+ self.writeSystemSignalGroup(element, ar_element)
2584
+ elif isinstance(ar_element, System):
2585
+ self.writeSystem(element, ar_element)
2586
+ elif isinstance(ar_element, PhysicalDimension):
2587
+ self.writePhysicalDimension(element, ar_element)
1723
2588
  else:
1724
2589
  raise NotImplementedError("Unsupported Elements of ARPackage <%s>" % type(ar_element))
1725
2590
 
@@ -1730,7 +2595,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1730
2595
  for pkg in pkgs:
1731
2596
  pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
1732
2597
 
1733
- self.writeIdentifiable(pkg_tag, pkg)
2598
+ self.setIdentifiable(pkg_tag, pkg)
1734
2599
  self.logger.debug("writeARPackage %s" % pkg.full_name)
1735
2600
 
1736
2601
  if pkg.getTotalElement() > 0: