armodel 1.5.0__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 (76) hide show
  1. armodel/cli/arxml_dump_cli.py +13 -13
  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 +124 -14
  10. armodel/models/ar_ref.py +109 -62
  11. armodel/models/bsw_module_template.py +37 -14
  12. armodel/models/common_structure.py +132 -147
  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/can_communication.py +119 -3
  17. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  18. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  19. armodel/models/fibex/fibex_4_multiplatform.py +81 -88
  20. armodel/models/fibex/fibex_core/__init__.py +0 -0
  21. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  22. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  23. armodel/models/fibex/lin_communication.py +24 -3
  24. armodel/models/general_structure.py +101 -8
  25. armodel/models/m2/__init__.py +0 -0
  26. armodel/models/m2/autosar_templates/__init__.py +0 -0
  27. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  28. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  29. armodel/models/m2/autosar_templates/ecuc_description_template.py +268 -0
  30. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  31. armodel/models/m2/autosar_templates/sw_component_template/communication.py +316 -0
  32. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +0 -0
  33. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +149 -0
  34. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  35. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  36. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +54 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +39 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +26 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  41. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  42. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  43. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  44. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  45. armodel/models/m2/msr/__init__.py +0 -0
  46. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  47. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  48. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  49. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  50. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  51. armodel/models/m2/msr/documentation/__init__.py +0 -0
  52. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  53. armodel/models/multilanguage_data.py +15 -0
  54. armodel/models/per_instance_memory.py +34 -6
  55. armodel/models/port_prototype.py +12 -174
  56. armodel/models/sw_component.py +14 -216
  57. armodel/parser/abstract_arxml_parser.py +10 -1
  58. armodel/parser/arxml_parser.py +803 -186
  59. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  60. armodel/tests/test_armodel/models/test_ar_ref.py +3 -3
  61. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  62. armodel/tests/test_armodel/models/test_common_structure.py +3 -3
  63. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  64. armodel/tests/test_armodel/models/test_data_prototype.py +1 -1
  65. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  66. armodel/tests/test_armodel/models/test_port_interface.py +1 -1
  67. armodel/tests/test_armodel/parser/test_parse_bswmd.py +3 -3
  68. armodel/tests/test_armodel/parser/test_sw_components.py +2 -2
  69. armodel/writer/arxml_writer.py +832 -196
  70. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/METADATA +24 -1
  71. armodel-1.6.0.dist-info/RECORD +127 -0
  72. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/entry_points.txt +3 -1
  73. armodel-1.5.0.dist-info/RECORD +0 -91
  74. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/LICENSE +0 -0
  75. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/WHEEL +0 -0
  76. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/top_level.txt +0 -0
@@ -2,42 +2,57 @@ import xml.etree.cElementTree as ET
2
2
 
3
3
  from typing import List
4
4
 
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
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
+
5
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
6
28
 
7
- from ..models.fibex.can_communication import CanFrame
8
- from ..models.fibex.fibex_core import DcmIPdu, Frame, ISignal, NPdu, NmPdu
9
- from ..models.fibex.lin_communication import LinUnconditionalFrame
10
- from ..models.fibex.lin_topology import LinCluster
11
- from ..models.system_template.network_management import NmConfig
12
- from ..models.system_template.transport_protocols import CanTpConfig
13
29
  from ..models.internal_behavior import IncludedDataTypeSet, InternalBehavior
14
30
  from ..models.timing import EOCExecutableEntityRef, ExecutionOrderConstraint, SwcTiming, TimingExtension
15
31
  from ..models.data_def_properties import ValueList
16
- from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultilanguageLongName
32
+ from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultilanguageLongName
17
33
  from ..models.record_layout import SwRecordLayout, SwRecordLayoutGroup, SwRecordLayoutV
18
34
  from ..models.service_mapping import RoleBasedPortAssignment
19
35
  from ..models.service_needs import NvBlockNeeds, RoleBasedDataAssignment
20
36
  from ..models.data_prototype import ApplicationArrayElement, ApplicationCompositeElementDataPrototype, ApplicationRecordElement, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
21
37
  from ..models.bsw_module_template import BswCalledEntity, BswEvent, BswInternalBehavior, BswModeSenderPolicy, BswModuleDescription, BswModuleEntity, BswModuleEntry, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
22
38
  from ..models.ar_package import AUTOSAR
23
- from ..models.sw_component import ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, DataReceivedEvent, EcuAbstractionSwComponentType, InitEvent, 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
24
40
  from ..models.ar_package import ARPackage
25
- from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef, RVariableInAtomicSwcInstanceRef, RefType, VariableDataPrototypeInSystemInstanceRef
41
+ from ..models.ar_ref import AnyInstanceRef, ApplicationCompositeElementInPortInterfaceInstanceRef, AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef, RefType, VariableDataPrototypeInSystemInstanceRef
26
42
  from ..models.calibration import SwAxisGrouped, SwAxisIndividual, SwCalprmAxis, SwCalprmAxisSet, SwValueCont, SwValues
27
- from ..models.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, IncludedModeDeclarationGroupSet, ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
43
+ from ..models.common_structure import IncludedModeDeclarationGroupSet, ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype
28
44
  from ..models.communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
29
- from ..models.data_dictionary import SwAddrMethod, SwDataDefProps
30
45
  from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType, BaseTypeDirectDefinition, DataTypeMappingSet, ImplementationDataType, SwBaseType
31
46
  from ..models.general_structure import ARElement, AdminData, Identifiable, Limit, MultilanguageReferrable, Referrable, Sdg, SwcBswMapping, SwcBswRunnableMapping
32
- from ..models.m2_msr import CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
33
- from ..models.port_prototype import ClientComSpec, ModeSwitchReceiverComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, PPortPrototype, PortPrototype, QueuedReceiverComSpec, RPortComSpec, RPortPrototype, ReceiverComSpec, SenderComSpec, ServerComSpec
47
+
48
+ from ..models.port_prototype import PPortPrototype, PortPrototype, RPortPrototype
34
49
  from ..models.sw_component import AssemblySwConnector, CompositionSwComponentType, DelegationSwConnector, SwComponentPrototype, SwComponentType, SwConnector
35
50
  from ..models.annotation import Annotation
36
51
  from ..models.end_to_end_protection import EndToEndDescription, EndToEndProtection, EndToEndProtectionSet, EndToEndProtectionVariablePrototype
37
- from ..models.port_interface import ApplicationError, ClientServerInterface, ClientServerOperation, ModeSwitchInterface, PortInterface, SenderReceiverInterface, TriggerInterface
38
- 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
39
54
  from ..models.implementation import AutosarEngineeringObject, BswImplementation, Code, EngineeringObject, Implementation, SwcImplementation
40
- from ..models.common_structure import ConstantSpecification, ExecutableEntity, ResourceConsumption
55
+ from ..models.common_structure import ExecutableEntity, ResourceConsumption
41
56
  from ..models.sw_component import RunnableEntity, SwcInternalBehavior, TimingEvent
42
57
  from ..models.ar_object import ARLiteral
43
58
  from ..models.global_constraints import DataConstr, InternalConstrs, PhysConstrs
@@ -53,6 +68,12 @@ class ARXMLWriter(AbstractARXMLWriter):
53
68
 
54
69
  return sub_element
55
70
 
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
+
56
77
  def writeSds(self, parent: ET.Element, sdg: Sdg):
57
78
  for sd in sdg.getSds():
58
79
  sd_tag = ET.SubElement(parent, "SD")
@@ -63,8 +84,9 @@ class ARXMLWriter(AbstractARXMLWriter):
63
84
  if sdg is not None:
64
85
  sdg_tag = ET.SubElement(parent, "SDG")
65
86
  sdg_tag.attrib['GID'] = sdg.gid
66
- self.setSdg(sdg_tag, sdg.sdg_contents_type)
67
87
  self.writeSds(sdg_tag, sdg)
88
+ for sdg_item in sdg.getSdgContentsTypes():
89
+ self.setSdg(sdg_tag, sdg_item)
68
90
 
69
91
  def writeSdgs(self, parent: ET.Element, admin_data: AdminData):
70
92
  sdgs = admin_data.getSdgs()
@@ -81,7 +103,7 @@ class ARXMLWriter(AbstractARXMLWriter):
81
103
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
82
104
  limit_tag.text = limit.value
83
105
 
84
- def writeReferable(self, element: ET.Element, referrable: Referrable):
106
+ def setReferable(self, element: ET.Element, referrable: Referrable):
85
107
  self.setARObjectAttributes(element, referrable)
86
108
  self.setShortName(element, referrable.short_name)
87
109
 
@@ -107,61 +129,77 @@ class ARXMLWriter(AbstractARXMLWriter):
107
129
  l2_tag.attrib['L'] = l2.l
108
130
  l2_tag.text = l2.value
109
131
 
110
- def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
111
- self.writeReferable(element, referrable)
112
- if referrable.long_name is not None:
113
- 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)
114
136
 
115
- def writeAdminData(self, element: ET.Element, admin_data: AdminData):
137
+ def setAdminData(self, element: ET.Element, admin_data: AdminData):
116
138
  element = ET.SubElement(element, "ADMIN-DATA")
117
139
  self.writeSdgs(element, admin_data)
118
140
 
119
- def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
120
- self.writeMultilanguageReferrable(element, identifiable)
121
- self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.desc)
122
- self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.category)
123
- if identifiable.admin_data is not None:
124
- self.writeAdminData(element, identifiable.admin_data)
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())
125
148
 
126
- def writeARElement(self, parent: ET.Element, ar_element: ARElement):
127
- self.writeIdentifiable(parent, ar_element)
149
+ def setARElement(self, parent: ET.Element, ar_element: ARElement):
150
+ self.setIdentifiable(parent, ar_element)
128
151
 
129
- def writeTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
152
+ def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
130
153
  if (acknowledge != None):
131
154
  child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
132
155
  self.setARObjectAttributes(child_element, acknowledge)
133
156
  if acknowledge.timeout != None:
134
157
  self.setChildElementOptionalFloatValue(child_element, "TIMEOUT", acknowledge.timeout)
135
158
 
136
- def writeSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
159
+ def setSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
137
160
  representations = com_spec.getCompositeNetworkRepresentations()
138
161
  if len(representations) > 0:
139
162
  child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
140
163
  for representation in representations:
141
164
  self.setCompositeNetworkRepresentation(child_element, representation)
142
- self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.data_element_ref)
143
- self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.network_representation)
144
- self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handle_out_of_range)
145
- self.writeTransmissionAcknowledgementRequest(element, com_spec.transmission_acknowledge)
146
- 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())
147
170
 
148
- def writeNonqueuedSenderComSpec(self, com_specs_tag: ET.Element, com_spec: NonqueuedSenderComSpec):
149
- com_spec_tag = ET.SubElement(com_specs_tag, "NONQUEUED-SENDER-COM-SPEC")
150
- self.setARObjectAttributes(com_spec_tag, com_spec)
151
- self.writeSenderComSpec(com_spec_tag, com_spec)
152
- 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)
153
176
 
154
- def writeServerComSpec(self, com_specs_tag: ET.Element, com_spec: ServerComSpec):
155
- com_spec_tag = ET.SubElement(com_specs_tag, "SERVER-COM-SPEC")
156
- self.setARObjectAttributes(com_spec_tag, com_spec)
157
- self.setChildElementOptionalRefType(com_spec_tag, "OPERATION-REF", com_spec.operation_ref)
158
- 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())
159
193
 
160
194
  def writePPortComSpec(self, com_specs_tag: ET.Element, com_spec: PPortComSpec):
161
195
  if isinstance(com_spec, NonqueuedSenderComSpec):
162
- self.writeNonqueuedSenderComSpec(com_specs_tag, com_spec)
196
+ self.setNonqueuedSenderComSpec(com_specs_tag, com_spec)
163
197
  elif isinstance(com_spec, ServerComSpec):
164
- 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)
165
203
  else:
166
204
  raise NotImplementedError("Unsupported PPortComSpec %s" % type(com_spec))
167
205
 
@@ -185,10 +223,10 @@ class ARXMLWriter(AbstractARXMLWriter):
185
223
  child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
186
224
  for representation in representations:
187
225
  self.setCompositeNetworkRepresentation(child_element, representation)
188
- self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.data_element_ref)
189
- self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.network_representation)
190
- self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handle_out_of_range)
191
- 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)
192
230
 
193
231
  def setSwValues(self, element: ET.Element, key: str, sw_values: SwValues):
194
232
  if sw_values is not None:
@@ -249,7 +287,7 @@ class ARXMLWriter(AbstractARXMLWriter):
249
287
  def setConstantReference(self, element: ET.Element, value_spec: ConstantReference):
250
288
  value_spec_tag = ET.SubElement(element, "CONSTANT-REFERENCE")
251
289
  self.writeValueSpecification(value_spec_tag, value_spec)
252
- self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.constant_ref)
290
+ self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.getConstantRef())
253
291
 
254
292
  def setValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
255
293
  if value_spec is not None:
@@ -277,23 +315,23 @@ class ARXMLWriter(AbstractARXMLWriter):
277
315
  child_element = ET.SubElement(element, "NONQUEUED-RECEIVER-COM-SPEC")
278
316
  self.setARObjectAttributes(child_element, com_spec)
279
317
  self.writeReceiverComSpec(child_element, com_spec)
280
- self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.alive_timeout)
281
- self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.enable_updated)
282
- self.setChildElementOptionalBooleanValue(child_element, "HANDLE-NEVER-RECEIVED", com_spec.handle_never_received)
283
- self.setChildElementOptionalLiteral(child_element, "HANDLE-TIMEOUT-TYPE", com_spec.handel_timeout_type)
284
- 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)
285
323
 
286
324
  def writeQueuedReceiverComSpec(self, element: ET.Element, com_spec: QueuedReceiverComSpec):
287
325
  child_element = ET.SubElement(element, "QUEUED-RECEIVER-COM-SPEC")
288
326
  self.setARObjectAttributes(child_element, com_spec)
289
327
  self.writeReceiverComSpec(child_element, com_spec)
290
- self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queue_length)
328
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queueLength)
291
329
 
292
330
  def writeClientComSpec(self, element: ET.Element, com_spec: ClientComSpec):
293
331
  self.logger.debug("writeClientComSpec")
294
332
  child_element = ET.SubElement(element, "CLIENT-COM-SPEC")
295
333
  self.setARObjectAttributes(child_element, com_spec)
296
- self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.operation_ref)
334
+ self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.operationRef)
297
335
 
298
336
  def writeModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
299
337
  self.logger.debug("writeModeSwitchReceiverComSpec")
@@ -316,7 +354,7 @@ class ARXMLWriter(AbstractARXMLWriter):
316
354
  def writePPortPrototype(self, ports_tag: ET.Element, prototype: PPortPrototype):
317
355
  prototype_tag = ET.SubElement(ports_tag, "P-PORT-PROTOTYPE")
318
356
 
319
- self.writeIdentifiable(prototype_tag, prototype)
357
+ self.setIdentifiable(prototype_tag, prototype)
320
358
  self.logger.debug("writePPortPrototype %s" % prototype.short_name)
321
359
 
322
360
  com_specs = prototype.getProvidedComSpecs()
@@ -330,7 +368,7 @@ class ARXMLWriter(AbstractARXMLWriter):
330
368
  def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
331
369
  self.logger.debug("writeRPortPrototype %s" % prototype.short_name)
332
370
  prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
333
- self.writeIdentifiable(prototype_tag, prototype)
371
+ self.setIdentifiable(prototype_tag, prototype)
334
372
  com_specs = prototype.getRequiredComSpecs()
335
373
  if len(com_specs) > 0:
336
374
  com_specs_tag = ET.SubElement(prototype_tag, "REQUIRED-COM-SPECS")
@@ -370,7 +408,7 @@ class ARXMLWriter(AbstractARXMLWriter):
370
408
  def writePortGroup(self, element: ET.Element, port_group: PortGroup):
371
409
  self.logger.debug("writePortGroup %s" % port_group.short_name)
372
410
  child_element = ET.SubElement(element, "PORT-GROUP")
373
- self.writeIdentifiable(child_element, port_group)
411
+ self.setIdentifiable(child_element, port_group)
374
412
  self.writePortGroupInnerGroupIRefs(child_element, port_group)
375
413
  self.writePortGroupOuterPortRefs(child_element, port_group)
376
414
 
@@ -382,7 +420,7 @@ class ARXMLWriter(AbstractARXMLWriter):
382
420
  self.writePortGroup(child_element, port_group)
383
421
 
384
422
  def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
385
- self.writeIdentifiable(element, sw_component)
423
+ self.setIdentifiable(element, sw_component)
386
424
  port_prototypes = sw_component.getPortPrototypes()
387
425
  if len(port_prototypes) > 0:
388
426
  ports_tag = ET.SubElement(element, "PORTS")
@@ -391,7 +429,7 @@ class ARXMLWriter(AbstractARXMLWriter):
391
429
 
392
430
  def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
393
431
  prototype_tag = ET.SubElement(element, "SW-COMPONENT-PROTOTYPE")
394
- self.writeIdentifiable(prototype_tag, prototype)
432
+ self.setIdentifiable(prototype_tag, prototype)
395
433
  self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.type_tref)
396
434
 
397
435
  def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
@@ -401,7 +439,7 @@ class ARXMLWriter(AbstractARXMLWriter):
401
439
 
402
440
  def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
403
441
  connector_tag = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
404
- self.writeIdentifiable(connector_tag, sw_connector)
442
+ self.setIdentifiable(connector_tag, sw_connector)
405
443
 
406
444
  if sw_connector.provider_iref is not None:
407
445
  provider_iref_tag = ET.SubElement(connector_tag, "PROVIDER-IREF")
@@ -417,7 +455,7 @@ class ARXMLWriter(AbstractARXMLWriter):
417
455
 
418
456
  def writeDelegationSwConnector(self, element: ET.Element, sw_connector: DelegationSwConnector):
419
457
  connector_tag = ET.SubElement(element, "DELEGATION-SW-CONNECTOR")
420
- self.writeIdentifiable(connector_tag, sw_connector)
458
+ self.setIdentifiable(connector_tag, sw_connector)
421
459
 
422
460
  if sw_connector.inner_port_iref is not None:
423
461
  inner_port_iref_tag = ET.SubElement(connector_tag, "INNER-PORT-IREF")
@@ -471,11 +509,33 @@ class ARXMLWriter(AbstractARXMLWriter):
471
509
  for sw_component in ar_package.getCompositionSwComponentTypes():
472
510
  self.writeCompositionSwComponentType(element, sw_component)
473
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
+
474
533
  def writeGeneralAnnotation(self, element: ET.Element, annotation: Annotation):
475
- 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())
476
537
 
477
- def writeAnnotations(self, element: ET.Element, props: SwDataDefProps) :
478
- annotations = props.getAnnotations()
538
+ def setAnnotations(self, element: ET.Element, annotations: List[Annotation]) :
479
539
  if len(annotations) > 0:
480
540
  annotations_tag = ET.SubElement(element, "ANNOTATIONS")
481
541
  for annotation in annotations:
@@ -516,6 +576,11 @@ class ARXMLWriter(AbstractARXMLWriter):
516
576
  for axis in axises:
517
577
  self.setSwCalprmAxis(child_element, axis)
518
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
+
519
584
  def setSwDataDefProps(self, element: ET.Element, key: str, sw_data_def_props: SwDataDefProps):
520
585
  if sw_data_def_props is not None:
521
586
  child_element = ET.SubElement(element, key)
@@ -523,18 +588,18 @@ class ARXMLWriter(AbstractARXMLWriter):
523
588
  sw_data_def_props_variants_tag = ET.SubElement(child_element, "SW-DATA-DEF-PROPS-VARIANTS")
524
589
  sw_data_def_props_conditional_tag = ET.SubElement(sw_data_def_props_variants_tag, "SW-DATA-DEF-PROPS-CONDITIONAL")
525
590
  self.setARObjectAttributes(sw_data_def_props_conditional_tag, sw_data_def_props.conditional)
526
- self.writeAnnotations(sw_data_def_props_conditional_tag, sw_data_def_props)
527
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "BASE-TYPE-REF", sw_data_def_props.baseTypeRef)
528
- self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-CALIBRATION-ACCESS", sw_data_def_props.swCalibrationAccess)
529
- self.setSwCalprmAxisSet(sw_data_def_props_conditional_tag, "SW-CALPRM-AXIS-SET", sw_data_def_props.swCalprmAxisSet)
530
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "COMPU-METHOD-REF", sw_data_def_props.compuMethodRef)
531
- self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-IMPL-POLICY", sw_data_def_props.swImplPolicy)
532
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", sw_data_def_props.implementationDataTypeRef)
533
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.dataConstrRef)
534
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "SW-RECORD-LAYOUT-REF", sw_data_def_props.swRecordLayoutRef)
535
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "VALUE-AXIS-DATA-TYPE-REF", sw_data_def_props.valueAxisDataTypeRef)
536
- self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "UNIT-REF", sw_data_def_props.unitRef)
537
-
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())
538
603
 
539
604
  def writeApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
540
605
  self.writeAutosarDataType(element, data_type)
@@ -543,8 +608,8 @@ class ARXMLWriter(AbstractARXMLWriter):
543
608
  self.writeApplicationDataType(element, data_type)
544
609
 
545
610
  def writeAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
546
- self.writeARElement(element, data_type)
547
- 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)
548
613
 
549
614
  def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
550
615
  self.logger.debug("writeApplicationPrimitiveDataType %s" % data_type.short_name)
@@ -552,7 +617,7 @@ class ARXMLWriter(AbstractARXMLWriter):
552
617
  self.writeApplicationDataType(data_type_tag, data_type)
553
618
 
554
619
  def setDataPrototype(self, element: ET.Element, prototype: DataPrototype):
555
- self.writeIdentifiable(element, prototype)
620
+ self.setIdentifiable(element, prototype)
556
621
 
557
622
  def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
558
623
  self.setDataPrototype(element, prototype)
@@ -591,7 +656,7 @@ class ARXMLWriter(AbstractARXMLWriter):
591
656
 
592
657
  def writeSwBaseType(self, element: ET.Element, base_type: SwBaseType):
593
658
  data_type_tag = ET.SubElement(element, "SW-BASE-TYPE")
594
- self.writeIdentifiable(data_type_tag, base_type)
659
+ self.setIdentifiable(data_type_tag, base_type)
595
660
  self.writeBaseTypeDirectDefinition(data_type_tag, base_type.baseTypeDefinition)
596
661
 
597
662
  def writeCompuScaleConstantContents(self, element: ET.Element, contents: CompuScaleConstantContents):
@@ -641,7 +706,7 @@ class ARXMLWriter(AbstractARXMLWriter):
641
706
  def writeCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
642
707
  compu_method_tag = ET.SubElement(element, "COMPU-METHOD")
643
708
  self.logger.debug("writeCompuMethods %s" % compu_method.short_name)
644
- self.writeIdentifiable(compu_method_tag, compu_method)
709
+ self.setIdentifiable(compu_method_tag, compu_method)
645
710
  self.setChildElementOptionalRefType(compu_method_tag, "UNIT-REF", compu_method.unit_ref)
646
711
  self.writeCompuInternalToPhys(compu_method_tag, compu_method)
647
712
 
@@ -672,11 +737,11 @@ class ARXMLWriter(AbstractARXMLWriter):
672
737
 
673
738
  def writeConstantSpecification(self, element: ET.Element, spec: ConstantSpecification):
674
739
  spec_tag = ET.SubElement(element, "CONSTANT-SPECIFICATION")
675
- self.writeIdentifiable(spec_tag, spec)
740
+ self.setIdentifiable(spec_tag, spec)
676
741
 
677
- if spec.value_spec is not None:
742
+ if spec.getValueSpec() is not None:
678
743
  value_spec_tag = ET.SubElement(spec_tag, "VALUE-SPEC")
679
- self.setValueSpecification(value_spec_tag, spec.value_spec)
744
+ self.setValueSpecification(value_spec_tag, spec.getValueSpec())
680
745
 
681
746
  def setInternalConstrs(self, element: ET.Element, constrs: InternalConstrs):
682
747
  if constrs is not None:
@@ -710,21 +775,24 @@ class ARXMLWriter(AbstractARXMLWriter):
710
775
 
711
776
  def writeDataConstr(self, element: ET.Element, constr: DataConstr):
712
777
  child_element = ET.SubElement(element, "DATA-CONSTR")
713
- self.writeIdentifiable(child_element, constr)
778
+ self.setIdentifiable(child_element, constr)
714
779
  self.writeDataConstrRules(child_element, constr)
715
780
 
716
781
  def writeUnit(self, element: ET.Element, unit: Unit):
717
782
  self.logger.debug("writeUnit %s" % unit.short_name)
718
783
  child_element = ET.SubElement(element, "UNIT")
719
- self.writeIdentifiable(child_element, unit)
720
- 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())
721
789
 
722
790
  def setRModeInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: RModeInAtomicSwcInstanceRef):
723
791
  child_element = ET.SubElement(element, key)
724
- self.setChildElementOptionalRefType(child_element, "BASE", iref.base_ref)
725
- self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.context_port_ref)
726
- self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.context_mode_declaration_group_prototype_ref)
727
- 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())
728
796
 
729
797
  def setPOperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: POperationInAtomicSwcInstanceRef):
730
798
  child_element = ET.SubElement(element, key)
@@ -732,7 +800,7 @@ class ARXMLWriter(AbstractARXMLWriter):
732
800
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.target_provided_operation_ref)
733
801
 
734
802
  def setRTEEvent(self, element: ET.Element, event: RTEEvent):
735
- self.writeIdentifiable(element, event)
803
+ self.setIdentifiable(element, event)
736
804
  irefs = event.getDisabledModeIRefs()
737
805
  if len(irefs) > 0:
738
806
  child_element = ET.SubElement(element, "DISABLED-MODE-IREFS")
@@ -766,14 +834,14 @@ class ARXMLWriter(AbstractARXMLWriter):
766
834
  def setRVariableInAtomicSwcInstanceRef(self, element: ET.Element, iref: RVariableInAtomicSwcInstanceRef):
767
835
  if iref is not None:
768
836
  child_element = ET.SubElement(element, "DATA-IREF")
769
- self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
770
- 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())
771
839
 
772
840
  def setDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
773
841
  if event is not None:
774
842
  child_element = ET.SubElement(element, "DATA-RECEIVED-EVENT")
775
843
  self.setRTEEvent(child_element, event)
776
- self.setRVariableInAtomicSwcInstanceRef(child_element, event.data_iref)
844
+ self.setRVariableInAtomicSwcInstanceRef(child_element, event.dataIRef)
777
845
 
778
846
  def setInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
779
847
  pass
@@ -810,7 +878,7 @@ class ARXMLWriter(AbstractARXMLWriter):
810
878
  areas_tag = ET.SubElement(element, "EXCLUSIVE-AREAS")
811
879
  for area in areas:
812
880
  child_element = ET.SubElement(areas_tag, "EXCLUSIVE-AREA")
813
- self.writeIdentifiable(child_element, area)
881
+ self.setIdentifiable(child_element, area)
814
882
 
815
883
  def writeDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
816
884
  refs = behavior.getDataTypeMappingRefs()
@@ -827,31 +895,25 @@ class ARXMLWriter(AbstractARXMLWriter):
827
895
  self.writeParameterDataPrototype(child_element, memory)
828
896
 
829
897
  def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
830
- self.writeIdentifiable(element, behavior)
898
+ self.setIdentifiable(element, behavior)
831
899
  self.writeInternalBehaviorConstantMemories(element, behavior)
832
900
  self.writeDataTypeMappingRefs(element, behavior)
833
901
  self.writeExclusiveAreas(element, behavior)
834
902
 
835
- def writeExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
836
- if entity is not None:
837
- self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.minimumStartInterval)
838
- self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.swAddrMethodRef)
839
-
840
903
  def setAutosarVariableRef(self, element: ET.Element, ref: AutosarVariableRef):
841
904
  if ref is not None:
842
905
  child_element = ET.SubElement(element, "ACCESSED-VARIABLE")
843
- if ref.autosar_variable_iref is not None:
906
+ self.setARObjectAttributes(child_element, ref)
907
+ if ref.getAutosarVariableIRef() is not None:
844
908
  child_element = ET.SubElement(child_element, "AUTOSAR-VARIABLE-IREF")
845
- self.setARObjectAttributes(child_element, ref.autosar_variable_iref)
846
- self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref.autosar_variable_iref.port_prototype_ref)
847
- self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.autosar_variable_iref.target_data_prototype_ref)
848
- if ref.local_variable_ref is not None:
849
- 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())
850
912
 
851
913
  def setVariableAccess(self, element: ET.Element, access: VariableAccess):
852
914
  child_element = ET.SubElement(element, "VARIABLE-ACCESS")
853
- self.writeIdentifiable(child_element, access)
854
- self.setAutosarVariableRef(child_element, access.accessed_variable_ref)
915
+ self.setIdentifiable(child_element, access)
916
+ self.setAutosarVariableRef(child_element, access.getAccessedVariableRef())
855
917
 
856
918
  def writeDataReadAccesses(self, element: ET.Element, entity: RunnableEntity):
857
919
  #accesses = entity.getDataReadAccesses():
@@ -864,7 +926,7 @@ class ARXMLWriter(AbstractARXMLWriter):
864
926
 
865
927
  def writeParameterAccess(self, element: ET.Element, parameter_access: ParameterAccess):
866
928
  child_element = ET.SubElement(element, "PARAMETER-ACCESS")
867
- self.writeIdentifiable(child_element, parameter_access)
929
+ self.setIdentifiable(child_element, parameter_access)
868
930
  self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.accessed_parameter)
869
931
 
870
932
  def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
@@ -902,20 +964,20 @@ class ARXMLWriter(AbstractARXMLWriter):
902
964
  for access in variables:
903
965
  self.setVariableAccess(child_element, access)
904
966
 
905
- def writeROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
967
+ def setROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
906
968
  if iref is not None:
907
969
  child_element = ET.SubElement(element, key)
908
970
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
909
971
  self.setChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF", iref.target_required_operation_ref)
910
972
 
911
- def writeServerCallPoint(self, element: ET.Element, call_point: ServerCallPoint):
912
- 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())
913
975
  self.setChildElementOptionalFloatValue(element, "TIMEOUT", call_point.timeout)
914
976
 
915
- def writeSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
977
+ def setSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
916
978
  child_element = ET.SubElement(element, "SYNCHRONOUS-SERVER-CALL-POINT")
917
- self.writeIdentifiable(child_element, call_point)
918
- self.writeServerCallPoint(child_element, call_point)
979
+ self.setIdentifiable(child_element, call_point)
980
+ self.setServerCallPoint(child_element, call_point)
919
981
 
920
982
  def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
921
983
  call_points = entity.getServerCallPoints()
@@ -923,7 +985,7 @@ class ARXMLWriter(AbstractARXMLWriter):
923
985
  child_element = ET.SubElement(element, "SERVER-CALL-POINTS")
924
986
  for call_point in call_points:
925
987
  if isinstance(call_point, SynchronousServerCallPoint):
926
- self.writeSynchronousServerCallPoint(child_element, call_point)
988
+ self.setSynchronousServerCallPoint(child_element, call_point)
927
989
  else:
928
990
  self._raiseError("Unsupported ServerCallPoint type <%s>" % type(call_point))
929
991
 
@@ -934,10 +996,18 @@ class ARXMLWriter(AbstractARXMLWriter):
934
996
  for access in variables:
935
997
  self.setVariableAccess(child_element, access)
936
998
 
937
- def setRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, iref: RModeGroupInAtomicSWCInstanceRef):
938
- child_element = ET.SubElement(element, "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
939
- self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.contextRPort)
940
- self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", iref.targetModeGroup)
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())
941
1011
 
942
1012
  def writeModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
943
1013
  points = entity.getModeAccessPoints()
@@ -945,21 +1015,43 @@ class ARXMLWriter(AbstractARXMLWriter):
945
1015
  mode_access_points_tag = ET.SubElement(element, "MODE-ACCESS-POINTS")
946
1016
  for point in points:
947
1017
  child_element = ET.SubElement(mode_access_points_tag, "MODE-ACCESS-POINT")
948
- if point.modeGroupIRef is not None:
949
- child_element = ET.SubElement(child_element, "MODE-GROUP-IREF")
950
- self.setRModeGroupInAtomicSWCInstanceRef(child_element, point.modeGroupIRef)
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))
951
1042
 
952
1043
  def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
953
1044
  if entity is not None:
954
1045
  child_element = ET.SubElement(element, "RUNNABLE-ENTITY")
955
- self.writeIdentifiable(child_element, entity)
956
- self.writeExecutableEntity(child_element, entity)
957
- 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())
958
1049
  self.writeParameterAccesses(child_element, entity)
959
1050
  self.writeDataReceivePointByArguments(child_element, entity)
960
1051
  self.writeDataSendPoints(child_element, entity)
961
1052
  self.writeDataWriteAccesses(child_element, entity)
962
1053
  self.writeModeAccessPoints(child_element, entity)
1054
+ self.writeModeSwitchPoints(child_element, entity)
963
1055
  self.writeReadLocalVariables(child_element, entity)
964
1056
  self.writeServerCallPoints(child_element, entity)
965
1057
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", entity.symbol)
@@ -991,17 +1083,17 @@ class ARXMLWriter(AbstractARXMLWriter):
991
1083
  memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
992
1084
  for memory in memories:
993
1085
  child_element = ET.SubElement(memories_tag, "PER-INSTANCE-MEMORY")
994
- self.writeIdentifiable(child_element, memory)
995
- self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.init_value)
996
- 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)
997
1089
  self.setChildElementOptionalLiteral(child_element, "TYPE", memory.type)
998
- self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.type_definition)
1090
+ self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.typeDefinition)
999
1091
 
1000
1092
  def writeParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1001
1093
  child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
1002
- self.writeIdentifiable(child_element, prototype)
1094
+ self.setIdentifiable(child_element, prototype)
1003
1095
  self.writeAutosarDataPrototype(child_element, prototype)
1004
- self.setInitValue(child_element, prototype.init_value)
1096
+ self.setInitValue(child_element, prototype.initValue)
1005
1097
 
1006
1098
  def writeParameterDataPrototypes(self, element: ET.Element, behavior: SwcInternalBehavior):
1007
1099
  prototypes = behavior.getPerInstanceParameters()
@@ -1033,7 +1125,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1033
1125
  self.setChildElementOptionalRefType(child_element, "PORT-REF", option.port_ref)
1034
1126
 
1035
1127
  def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
1036
- self.writeIdentifiable(element, dependency)
1128
+ self.setIdentifiable(element, dependency)
1037
1129
 
1038
1130
  def writeRoleBasedDataAssignment(self, element: ET.Element, assignment: RoleBasedDataAssignment):
1039
1131
  child_element = ET.SubElement(element, "ROLE-BASED-DATA-ASSIGNMENT")
@@ -1069,7 +1161,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1069
1161
  def writeNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1070
1162
  child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
1071
1163
  self.logger.debug("writeNvBlockNeeds %s" % needs.short_name)
1072
- self.writeIdentifiable(child_element, needs)
1164
+ self.setIdentifiable(child_element, needs)
1073
1165
  self.setChildElementOptionalBooleanValue(child_element, "CALC-RAM-BLOCK-CRC", needs.calc_ram_block_crc)
1074
1166
  self.setChildElementOptionalBooleanValue(child_element, "CHECK-STATIC-BLOCK-ID", needs.check_static_block_id)
1075
1167
  self.setChildElementOptionalNumericalValue(child_element, "N-DATA-SETS", needs.n_data_sets)
@@ -1169,7 +1261,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1169
1261
  def setCode(self, element: ET.SubElement, code_desc: Code):
1170
1262
  self.logger.debug("setCode %s" % code_desc.short_name)
1171
1263
  child_element = ET.SubElement(element, "CODE")
1172
- self.writeIdentifiable(child_element, code_desc)
1264
+ self.setIdentifiable(child_element, code_desc)
1173
1265
  self.writeArtifactDescriptor(child_element, code_desc)
1174
1266
 
1175
1267
  def writeCodeDescriptors(self, element: ET.Element, impl: Implementation):
@@ -1194,7 +1286,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1194
1286
  sections_tag = ET.SubElement(element, "MEMORY-SECTIONS")
1195
1287
  for memory_section in memory_sections:
1196
1288
  child_element = ET.SubElement(sections_tag, "MEMORY-SECTION")
1197
- self.writeIdentifiable(child_element, memory_section)
1289
+ self.setIdentifiable(child_element, memory_section)
1198
1290
  self.setChildElementOptionalLiteral(child_element, "ALIGNMENT", memory_section.alignment)
1199
1291
  self.setMemorySectionOptions(child_element, memory_section.getOptions())
1200
1292
  self.setChildElementOptionalNumericalValue(child_element, "SIZE", memory_section.size)
@@ -1205,11 +1297,11 @@ class ARXMLWriter(AbstractARXMLWriter):
1205
1297
  def setResourceConsumption(self, element: ET.Element, consumption: ResourceConsumption):
1206
1298
  if consumption is not None:
1207
1299
  child_element = ET.SubElement(element, "RESOURCE-CONSUMPTION")
1208
- self.writeIdentifiable(child_element, consumption)
1300
+ self.setIdentifiable(child_element, consumption)
1209
1301
  self.writeMemorySections(child_element, consumption)
1210
1302
 
1211
1303
  def writeImplementation(self, element: ET.Element, impl: Implementation):
1212
- self.writeIdentifiable(element, impl)
1304
+ self.setIdentifiable(element, impl)
1213
1305
  self.writeCodeDescriptors(element, impl)
1214
1306
  self.setChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE", impl.programming_language)
1215
1307
  self.setResourceConsumption(element, impl.getResourceConsumption())
@@ -1272,7 +1364,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1272
1364
  def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1273
1365
  if protection is not None:
1274
1366
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
1275
- self.writeIdentifiable(child_element, protection)
1367
+ self.setIdentifiable(child_element, protection)
1276
1368
  self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
1277
1369
  self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
1278
1370
 
@@ -1287,21 +1379,21 @@ class ARXMLWriter(AbstractARXMLWriter):
1287
1379
  def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1288
1380
  self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.short_name)
1289
1381
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION-SET")
1290
- self.writeIdentifiable(child_element, protection_set)
1382
+ self.setIdentifiable(child_element, protection_set)
1291
1383
  self.writeEndToEndProtections(child_element, protection_set)
1292
1384
 
1293
1385
  def writeAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
1294
- self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1386
+ self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
1295
1387
 
1296
1388
  def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
1297
1389
  self.logger.debug("writeVariableDataPrototype %s" % prototype.short_name)
1298
1390
  child_element = ET.SubElement(element, "VARIABLE-DATA-PROTOTYPE")
1299
- self.writeIdentifiable(child_element, prototype)
1300
- 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)
1301
1393
  self.writeAutosarDataPrototype(child_element, prototype)
1302
- self.setInitValue(child_element, prototype.init_value)
1394
+ self.setInitValue(child_element, prototype.initValue)
1303
1395
 
1304
- def writeDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1396
+ def writeSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1305
1397
  data_elements = sr_interface.getDataElements()
1306
1398
  if len(data_elements) > 0:
1307
1399
  data_elements_tag = ET.SubElement(element, "DATA-ELEMENTS")
@@ -1311,12 +1403,22 @@ class ARXMLWriter(AbstractARXMLWriter):
1311
1403
  else:
1312
1404
  self._raiseError("Unsupported Data Element <%s>" % type(data_element))
1313
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
+
1314
1415
  def writeSenderReceiverInterface(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1315
1416
  self.logger.debug("writeSenderReceiverInterface %s" % sr_interface.short_name)
1316
1417
  child_element = ET.SubElement(element, "SENDER-RECEIVER-INTERFACE")
1317
- self.writeIdentifiable(child_element, sr_interface)
1318
- self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.is_service)
1319
- 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)
1320
1422
 
1321
1423
  def writerBswModuleDescriptionImplementedEntry(self, element: ET.Element, desc: BswModuleDescription):
1322
1424
  entries = desc.getImplementedEntries()
@@ -1327,7 +1429,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1327
1429
  self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
1328
1430
 
1329
1431
  def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1330
- self.writeIdentifiable(element, prototype)
1432
+ self.setIdentifiable(element, prototype)
1331
1433
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1332
1434
 
1333
1435
  def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
@@ -1346,9 +1448,10 @@ class ARXMLWriter(AbstractARXMLWriter):
1346
1448
  self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
1347
1449
 
1348
1450
  def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1349
- self.writeIdentifiable(element, entity)
1451
+ self.setIdentifiable(element, entity)
1350
1452
  self.writeCanEnterExclusiveAreaRefs(element, entity)
1351
- 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())
1352
1455
 
1353
1456
  def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
1354
1457
  mode_group_refs = entity.getManagedModeGroupRefs()
@@ -1360,7 +1463,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1360
1463
 
1361
1464
  def setBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
1362
1465
  self.setExecutableEntity(element, entity)
1363
- self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implemented_entry_ref)
1466
+ self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implementedEntryRef)
1364
1467
  self.writeBswModuleEntityManagedModeGroup(element, entity)
1365
1468
 
1366
1469
  def setBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
@@ -1386,7 +1489,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1386
1489
  self._raiseError("Unsupported BswModuleEntity <%s>" % type(entity))
1387
1490
 
1388
1491
  def setBswEvent(self, element: ET.Element, event: BswEvent):
1389
- self.writeIdentifiable(element, event)
1492
+ self.setIdentifiable(element, event)
1390
1493
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1391
1494
 
1392
1495
  def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
@@ -1453,7 +1556,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1453
1556
  def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
1454
1557
  self.logger.debug("writeBswModuleDescription %s" % desc.short_name)
1455
1558
  child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
1456
- self.writeIdentifiable(child_element, desc)
1559
+ self.setIdentifiable(child_element, desc)
1457
1560
  self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.module_id)
1458
1561
  self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
1459
1562
  self.writeProvidedModeGroup(child_element, desc)
@@ -1471,7 +1574,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1471
1574
  def writeBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
1472
1575
  self.logger.debug("writeBswModuleDescription %s" % entry.short_name)
1473
1576
  child_element = ET.SubElement(element, "BSW-MODULE-ENTRY")
1474
- self.writeIdentifiable(child_element, entry)
1577
+ self.setIdentifiable(child_element, entry)
1475
1578
  self.setChildElementOptionalNumericalValue(child_element, "SERVICE-ID", entry.service_id)
1476
1579
  self.setChildElementOptionalBooleanValue(child_element, "IS-REENTRANT", entry.is_reentrant)
1477
1580
  self.setChildElementOptionalBooleanValue(child_element, "IS-SYNCHRONOUS", entry.is_synchronous)
@@ -1498,7 +1601,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1498
1601
  def setSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1499
1602
  self.logger.debug("writeBswModuleDescription %s" % mapping.short_name)
1500
1603
  child_element = ET.SubElement(element, "SWC-BSW-MAPPING")
1501
- self.writeIdentifiable(child_element, mapping)
1604
+ self.setIdentifiable(child_element, mapping)
1502
1605
  self.setChildElementOptionalRefType(child_element, "BSW-BEHAVIOR-REF", mapping.bswBehaviorRef)
1503
1606
  self.writeSwcBswRunnableMappings(child_element, mapping)
1504
1607
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.swcBehaviorRef)
@@ -1545,15 +1648,17 @@ class ARXMLWriter(AbstractARXMLWriter):
1545
1648
  sub_elements_tag = ET.SubElement(element, "SUB-ELEMENTS")
1546
1649
  for type_element in sub_elements:
1547
1650
  child_element = ET.SubElement(sub_elements_tag, "IMPLEMENTATION-DATA-TYPE-ELEMENT")
1548
- self.writeIdentifiable(child_element, type_element)
1549
- 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)
1550
1655
 
1551
1656
  def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1552
1657
  self.logger.debug("writeImplementationDataType %s" % data_type.short_name)
1553
1658
  child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
1554
1659
  self.writeAutosarDataType(child_element, data_type)
1555
- self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1556
1660
  self.writeImplementationDataTypeElements(child_element, data_type)
1661
+ self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1557
1662
 
1558
1663
  def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1559
1664
  arguments = parent.getArgumentDataPrototypes()
@@ -1561,9 +1666,9 @@ class ARXMLWriter(AbstractARXMLWriter):
1561
1666
  arguments_tag = ET.SubElement(element, "ARGUMENTS")
1562
1667
  for prototype in arguments:
1563
1668
  child_element = ET.SubElement(arguments_tag, "ARGUMENT-DATA-PROTOTYPE")
1564
- self.writeIdentifiable(child_element, prototype)
1565
- self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.sw_data_def_props)
1566
- 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)
1567
1672
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
1568
1673
 
1569
1674
  def writePossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
@@ -1576,7 +1681,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1576
1681
  def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
1577
1682
  self.logger.debug("writeClientServerOperation %s" % operation.short_name)
1578
1683
  child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
1579
- self.writeIdentifiable(child_element, operation)
1684
+ self.setIdentifiable(child_element, operation)
1580
1685
  self.writeArgumentDataPrototypes(child_element, operation)
1581
1686
  self.writePossibleErrorRefs(child_element, operation)
1582
1687
 
@@ -1593,7 +1698,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1593
1698
  def writeApplicationError(self, element: ET.Element, error: ApplicationError):
1594
1699
  self.logger.debug("writeApplicationError %s" % error.short_name)
1595
1700
  child_element = ET.SubElement(element, "APPLICATION-ERROR")
1596
- self.writeIdentifiable(child_element, error)
1701
+ self.setIdentifiable(child_element, error)
1597
1702
  self.setChildElementOptionalNumericalValue(child_element, "ERROR-CODE", error.error_code)
1598
1703
 
1599
1704
  def writePossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
@@ -1607,8 +1712,8 @@ class ARXMLWriter(AbstractARXMLWriter):
1607
1712
  self._raiseError("Unsupported PossibleError %s" % type(error))
1608
1713
 
1609
1714
  def setPortInterface(self, element: ET.Element, port_interface: PortInterface):
1610
- self.writeIdentifiable(element, port_interface)
1611
- self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.is_service)
1715
+ self.setIdentifiable(element, port_interface)
1716
+ self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.isService)
1612
1717
  self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
1613
1718
 
1614
1719
  def writeClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
@@ -1666,7 +1771,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1666
1771
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
1667
1772
  self.logger.debug("writeSwRecordLayout %s" % layout.short_name)
1668
1773
  child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
1669
- self.writeIdentifiable(child_element, layout)
1774
+ self.setIdentifiable(child_element, layout)
1670
1775
  self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", layout.swRecordLayoutGroup)
1671
1776
 
1672
1777
  def writeSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
@@ -1705,13 +1810,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1705
1810
  def writeDataTypeMappingSet(self, element: ET.Element, mapping_set: DataTypeMappingSet):
1706
1811
  self.logger.debug("writeDataTypeMappingSet %s" % mapping_set.short_name)
1707
1812
  child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-SET")
1708
- self.writeIdentifiable(child_element, mapping_set)
1813
+ self.setIdentifiable(child_element, mapping_set)
1709
1814
  self.writeDataTypeMaps(child_element, mapping_set)
1710
1815
  self.writeModeRequestTypeMaps(child_element, mapping_set)
1711
1816
 
1712
1817
  def setModeDeclaration(self, element: ET.Element, mode_declaration: ModeDeclaration):
1713
1818
  child_element = ET.SubElement(element, "MODE-DECLARATION")
1714
- self.writeIdentifiable(child_element, mode_declaration)
1819
+ self.setIdentifiable(child_element, mode_declaration)
1715
1820
  self.setChildElementOptionalNumericalValue(child_element, "VALUE", mode_declaration.getValue())
1716
1821
 
1717
1822
  def writeModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
@@ -1724,7 +1829,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1724
1829
  def writeModeDeclarationGroup(self, element: ET.Element, group: ModeDeclarationGroup):
1725
1830
  self.logger.debug("writeModeDeclarationGroup %s" % group.short_name)
1726
1831
  child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP")
1727
- self.writeIdentifiable(child_element, group)
1832
+ self.setIdentifiable(child_element, group)
1728
1833
  self.setChildElementOptionalRefType(child_element, "INITIAL-MODE-REF", group._initial_mode_ref)
1729
1834
  self.writeModeDeclarationGroupModeDeclaration(child_element, group)
1730
1835
  self.setChildElementOptionalNumericalValue(child_element, "ON-TRANSITION-VALUE", group.getOnTransitionValue())
@@ -1734,7 +1839,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1734
1839
  if len(mode_groups) > 0:
1735
1840
  mode_group = mode_groups[0]
1736
1841
  child_element = ET.SubElement(element, "MODE-GROUP")
1737
- self.writeIdentifiable(child_element, mode_group)
1842
+ self.setIdentifiable(child_element, mode_group)
1738
1843
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", mode_group.type_tref)
1739
1844
 
1740
1845
  def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
@@ -1751,7 +1856,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1751
1856
 
1752
1857
  def writeEOCExecutableEntityRef(self, element: ET.Element, entity_ref: EOCExecutableEntityRef):
1753
1858
  child_element = ET.SubElement(element, "EOC-EXECUTABLE-ENTITY-REF")
1754
- self.writeIdentifiable(child_element, entity_ref)
1859
+ self.setIdentifiable(child_element, entity_ref)
1755
1860
  self.setEOCExecutableEntityRefSuccessorRefs(child_element, entity_ref.getSuccessorRefs())
1756
1861
 
1757
1862
  def writeExecutionOrderConstraintOrderedElement(self, element: ET.Element, constraint: ExecutionOrderConstraint):
@@ -1767,7 +1872,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1767
1872
  def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
1768
1873
  self.logger.debug("writeExecutionOrderConstraint %s" % constraint.short_name)
1769
1874
  child_element = ET.SubElement(element, "EXECUTION-ORDER-CONSTRAINT")
1770
- self.writeIdentifiable(child_element, constraint)
1875
+ self.setIdentifiable(child_element, constraint)
1771
1876
  self.writeExecutionOrderConstraintOrderedElement(child_element, constraint)
1772
1877
 
1773
1878
  def writeTimingRequirements(self, element: ET.Element, extension: TimingExtension):
@@ -1786,7 +1891,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1786
1891
  def writeSwcTiming(self, element: ET.Element, timing: SwcTiming):
1787
1892
  self.logger.debug("writeSWcTiming %s" % timing.short_name)
1788
1893
  child_element = ET.SubElement(element, "SWC-TIMING")
1789
- self.writeIdentifiable(child_element, timing)
1894
+ self.setIdentifiable(child_element, timing)
1790
1895
  self.writeTimingExtension(child_element, timing)
1791
1896
 
1792
1897
  def writePduToFrameMappings(self, element: ET.Element, parent: Frame):
@@ -1795,13 +1900,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1795
1900
  mappings_tags = ET.SubElement(element, "PDU-TO-FRAME-MAPPINGS")
1796
1901
  for mapping in mappings:
1797
1902
  child_element = ET.SubElement(mappings_tags, "PDU-TO-FRAME-MAPPING")
1798
- self.writeIdentifiable(child_element, mapping)
1903
+ self.setIdentifiable(child_element, mapping)
1799
1904
  self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.packingByteOrder)
1800
1905
  self.setChildElementOptionalRefType(child_element, "PDU-REF", mapping.pduRef)
1801
1906
  self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.startPosition)
1802
1907
 
1803
1908
  def writeFrame(self, element: ET.Element, frame: Frame):
1804
- self.writeIdentifiable(element, frame)
1909
+ self.setIdentifiable(element, frame)
1805
1910
  self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
1806
1911
  self.writePduToFrameMappings(element, frame)
1807
1912
 
@@ -1810,41 +1915,376 @@ class ARXMLWriter(AbstractARXMLWriter):
1810
1915
  child_element = ET.SubElement(element, "LIN-UNCONDITIONAL-FRAME")
1811
1916
  self.writeFrame(child_element, frame)
1812
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
+
1813
2015
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
1814
- self.logger.debug("NmConfig %s" % config.short_name)
2016
+ self.logger.debug("WriteNmConfig %s" % config.short_name)
1815
2017
  child_element = ET.SubElement(element, "NM-CONFIG")
1816
- self.writeIdentifiable(child_element, config)
2018
+ self.setIdentifiable(child_element, config)
2019
+ self.writeNmConfigNmClusters(child_element, config)
2020
+ self.writeNmConfigNmClusterCouplings(child_element, config)
1817
2021
 
1818
2022
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
1819
2023
  self.logger.debug("NmPdu %s" % pdu.short_name)
1820
2024
  child_element = ET.SubElement(element, "NM-PDU")
1821
- self.writeIdentifiable(child_element, pdu)
2025
+ self.setIdentifiable(child_element, pdu)
2026
+ self.writeIPdu(child_element, pdu)
1822
2027
 
1823
2028
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
1824
2029
  self.logger.debug("NPdu %s" % pdu.short_name)
1825
2030
  child_element = ET.SubElement(element, "N-PDU")
1826
- self.writeIdentifiable(child_element, 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())
1827
2036
 
1828
2037
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
1829
2038
  self.logger.debug("DcmIPdu %s" % pdu.short_name)
1830
2039
  child_element = ET.SubElement(element, "DCM-I-PDU")
1831
- self.writeIdentifiable(child_element, 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)
1832
2049
 
1833
2050
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
1834
2051
  self.logger.debug("CanTpConfig %s" % config.short_name)
1835
2052
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
1836
- self.writeIdentifiable(child_element, 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())
1837
2189
 
1838
2190
  def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
1839
2191
  self.logger.debug("LinCluster %s" % cluster.short_name)
1840
2192
  child_element = ET.SubElement(element, "LIN-CLUSTER")
1841
- self.writeIdentifiable(child_element, 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)
1842
2207
 
1843
2208
  def writeCanFrame(self, element: ET.Element, frame: CanFrame):
1844
2209
  self.logger.debug("CanFrame %s" % frame.short_name)
1845
2210
  child_element = ET.SubElement(element, "CAN-FRAME")
1846
2211
  self.writeFrame(child_element, frame)
1847
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
+
1848
2288
  def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
1849
2289
  if len(mappings) > 0:
1850
2290
  mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
@@ -1856,20 +2296,192 @@ class ARXMLWriter(AbstractARXMLWriter):
1856
2296
  def writeGateway(self, element: ET.Element, gateway: Gateway):
1857
2297
  self.logger.debug("Gateway %s" % gateway.short_name)
1858
2298
  child_element = ET.SubElement(element, "GATEWAY")
1859
- self.writeIdentifiable(child_element, gateway)
2299
+ self.setIdentifiable(child_element, gateway)
1860
2300
  self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
1861
2301
  self.setISignalMappings(child_element, gateway.getSignalMappings())
1862
2302
 
1863
2303
  def writeISignal(self, element: ET.Element, signal: ISignal):
1864
2304
  self.logger.debug("ISignal %s" % signal.short_name)
1865
2305
  child_element = ET.SubElement(element, "I-SIGNAL")
1866
- self.writeIdentifiable(child_element, signal)
2306
+ self.setIdentifiable(child_element, signal)
1867
2307
  self.setChildElementOptionalLiteral(child_element, "DATA-TYPE-POLICY", signal.dataTypePolicy)
1868
2308
  self.setInitValue(child_element, signal.initValue)
1869
2309
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH", signal.length)
1870
2310
  self.setSwDataDefProps(child_element, "NETWORK-REPRESENTATION-PROPS", signal.networkRepresentationProps)
1871
2311
  self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", signal.systemSignalRef)
1872
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
+
1873
2485
  def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
1874
2486
  if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
1875
2487
  self.writeComplexDeviceDriverSwComponentType(element, ar_element)
@@ -1939,16 +2551,40 @@ class ARXMLWriter(AbstractARXMLWriter):
1939
2551
  self.writeNPdu(element, ar_element)
1940
2552
  elif isinstance(ar_element, DcmIPdu):
1941
2553
  self.writeDcmIPdu(element, ar_element)
2554
+ elif isinstance(ar_element, SecuredIPdu):
2555
+ self.writeSecuredIPdu(element, ar_element)
1942
2556
  elif isinstance(ar_element, CanTpConfig):
1943
2557
  self.writeCanTpConfig(element, ar_element)
1944
2558
  elif isinstance(ar_element, LinCluster):
1945
2559
  self.writeLinCluster(element, ar_element)
2560
+ elif isinstance(ar_element, CanCluster):
2561
+ self.writeCanCluster(element, ar_element)
1946
2562
  elif isinstance(ar_element, CanFrame):
1947
2563
  self.writeCanFrame(element, ar_element)
1948
2564
  elif isinstance(ar_element, Gateway):
1949
2565
  self.writeGateway(element, ar_element)
1950
2566
  elif isinstance(ar_element, ISignal):
1951
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)
1952
2588
  else:
1953
2589
  raise NotImplementedError("Unsupported Elements of ARPackage <%s>" % type(ar_element))
1954
2590
 
@@ -1959,7 +2595,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1959
2595
  for pkg in pkgs:
1960
2596
  pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
1961
2597
 
1962
- self.writeIdentifiable(pkg_tag, pkg)
2598
+ self.setIdentifiable(pkg_tag, pkg)
1963
2599
  self.logger.debug("writeARPackage %s" % pkg.full_name)
1964
2600
 
1965
2601
  if pkg.getTotalElement() > 0: