armodel 1.5.0__py3-none-any.whl → 1.6.1__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 (96) 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/data_models/sw_connector.py +3 -3
  5. armodel/lib/__init__.py +2 -1
  6. armodel/lib/system_signal.py +37 -0
  7. armodel/models/__init__.py +9 -4
  8. armodel/models/annotation.py +27 -3
  9. armodel/models/ar_object.py +18 -6
  10. armodel/models/ar_package.py +271 -127
  11. armodel/models/ar_ref.py +11 -166
  12. armodel/models/bsw_module_template.py +37 -14
  13. armodel/models/common_structure.py +91 -174
  14. armodel/models/communication.py +2 -2
  15. armodel/models/data_prototype.py +41 -6
  16. armodel/models/datatype.py +16 -74
  17. armodel/models/end_to_end_protection.py +1 -1
  18. armodel/models/fibex/can_communication.py +119 -3
  19. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  20. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  21. armodel/models/fibex/fibex_4_multiplatform.py +81 -88
  22. armodel/models/fibex/fibex_core/__init__.py +0 -0
  23. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  24. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  25. armodel/models/fibex/lin_communication.py +24 -3
  26. armodel/models/general_structure.py +110 -11
  27. armodel/models/internal_behavior.py +1 -1
  28. armodel/models/m2/__init__.py +0 -0
  29. armodel/models/m2/autosar_templates/__init__.py +0 -0
  30. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  31. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  32. armodel/models/m2/autosar_templates/common_structure/implementation.py +21 -0
  33. armodel/models/m2/autosar_templates/common_structure/implementation_data_types.py +148 -0
  34. armodel/models/m2/autosar_templates/ecuc_description_template.py +269 -0
  35. armodel/models/m2/autosar_templates/generic_structure/__init__.py +0 -0
  36. armodel/models/m2/autosar_templates/generic_structure/abstract_structure.py +69 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/communication.py +360 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +246 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +181 -0
  41. armodel/models/m2/autosar_templates/sw_component_template/composition/__init__.py +154 -0
  42. armodel/models/m2/autosar_templates/sw_component_template/composition/instance_refs.py +157 -0
  43. armodel/models/m2/autosar_templates/sw_component_template/data_type/__init__.py +0 -0
  44. armodel/models/m2/autosar_templates/sw_component_template/data_type/data_prototypes.py +104 -0
  45. armodel/models/m2/autosar_templates/sw_component_template/port_interface/__init__.py +243 -0
  46. armodel/models/m2/autosar_templates/sw_component_template/port_interface/instance_refs.py +39 -0
  47. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  48. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  49. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  50. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +46 -0
  51. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/instance_refs_usage.py +169 -0
  52. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +38 -0
  53. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +27 -0
  54. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  55. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  56. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  57. armodel/models/m2/autosar_templates/system_template/instance_refs.py +48 -0
  58. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  59. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  60. armodel/models/m2/msr/__init__.py +0 -0
  61. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  62. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  63. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  64. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  65. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  66. armodel/models/m2/msr/documentation/__init__.py +0 -0
  67. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  68. armodel/models/m2_msr.py +1 -0
  69. armodel/models/multilanguage_data.py +15 -0
  70. armodel/models/per_instance_memory.py +34 -6
  71. armodel/models/port_prototype.py +2 -253
  72. armodel/models/service_needs.py +3 -1
  73. armodel/models/sw_component.py +19 -358
  74. armodel/parser/__init__.py +2 -1
  75. armodel/parser/abstract_arxml_parser.py +10 -1
  76. armodel/parser/arxml_parser.py +912 -229
  77. armodel/parser/file_parser.py +43 -0
  78. armodel/tests/test_armodel/models/test_ar_package.py +6 -3
  79. armodel/tests/test_armodel/models/test_ar_ref.py +18 -16
  80. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  81. armodel/tests/test_armodel/models/test_common_structure.py +8 -7
  82. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  83. armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
  84. armodel/tests/test_armodel/models/test_datatype.py +9 -9
  85. armodel/tests/test_armodel/models/test_port_interface.py +2 -2
  86. armodel/tests/test_armodel/parser/test_parse_bswmd.py +3 -3
  87. armodel/tests/test_armodel/parser/test_sw_components.py +3 -3
  88. armodel/writer/abstract_arxml_writer.py +5 -1
  89. armodel/writer/arxml_writer.py +870 -224
  90. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/METADATA +28 -1
  91. armodel-1.6.1.dist-info/RECORD +140 -0
  92. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/entry_points.txt +3 -1
  93. armodel-1.5.0.dist-info/RECORD +0 -91
  94. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/LICENSE +0 -0
  95. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/WHEEL +0 -0
  96. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/top_level.txt +0 -0
@@ -2,42 +2,67 @@ import xml.etree.cElementTree as ET
2
2
 
3
3
  from typing import List
4
4
 
5
+ from armodel.models.m2.autosar_templates.common_structure.implementation_data_types import ImplementationDataType
6
+
7
+
8
+
9
+ from ..models.m2.msr.data_dictionary.auxillary_objects import SwAddrMethod
10
+ from ..models.m2.msr.data_dictionary.data_def_properties import SwDataDefProps
11
+ from ..models.m2.msr.asam_hdo.units import PhysicalDimension
12
+ from ..models.m2.msr.documentation.block_elements import DocumentationBlock
13
+ from ..models.m2_msr import CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
14
+
15
+ from ..models.m2.autosar_templates.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ConstantSpecification, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
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.generic_structure.abstract_structure import AnyInstanceRef
18
+ from ..models.m2.autosar_templates.sw_component_template.components import PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype
19
+ from ..models.m2.autosar_templates.sw_component_template.components.instance_refs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
20
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior import RunnableEntityArgument, SynchronousServerCallPoint
21
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.server_call import ServerCallPoint
22
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.data_elements import ParameterAccess, VariableAccess
23
+ from ..models.m2.autosar_templates.sw_component_template.composition import AssemblySwConnector, CompositionSwComponentType, DelegationSwConnector, SwComponentPrototype, SwConnector
24
+ from ..models.m2.autosar_templates.sw_component_template.composition.instance_refs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
25
+ from ..models.m2.autosar_templates.sw_component_template.port_interface.instance_refs import ApplicationCompositeElementInPortInterfaceInstanceRef
26
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.instance_refs_usage import AutosarParameterRef, AutosarVariableRef, VariableInAtomicSWCTypeInstanceRef
27
+ from ..models.m2.autosar_templates.system_template.instance_refs import VariableDataPrototypeInSystemInstanceRef
28
+ from ..models.m2.autosar_templates.sw_component_template.components.instance_refs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
29
+ from ..models.m2.autosar_templates.system_template.data_mapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
30
+ from ..models.m2.autosar_templates.system_template import System, SystemMapping
31
+ from ..models.m2.autosar_templates.system_template.network_management import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
32
+ from ..models.m2.autosar_templates.system_template.transport_protocols import CanTpConfig
33
+ from ..models.m2.autosar_templates.sw_component_template.communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
34
+
5
35
  from ..models.fibex.fibex_4_multiplatform import Gateway, ISignalMapping
36
+ from ..models.fibex.can_communication import CanFrame, CanFrameTriggering, RxIdentifierRange
37
+ from ..models.fibex.fibex_core.core_communication import FrameTriggering, IPdu, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, PduTriggering, SecuredIPdu, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup
38
+ from ..models.fibex.lin_communication import LinFrameTriggering, LinUnconditionalFrame
39
+ from ..models.fibex.fibex_core.core_topology import AbstractCanCluster, CanCluster, EcuInstance, CanPhysicalChannel, CommunicationCluster, LinCluster, LinPhysicalChannel, PhysicalChannel
6
40
 
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
41
  from ..models.internal_behavior import IncludedDataTypeSet, InternalBehavior
14
42
  from ..models.timing import EOCExecutableEntityRef, ExecutionOrderConstraint, SwcTiming, TimingExtension
15
43
  from ..models.data_def_properties import ValueList
16
- from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultilanguageLongName
44
+ from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultilanguageLongName
17
45
  from ..models.record_layout import SwRecordLayout, SwRecordLayoutGroup, SwRecordLayoutV
18
46
  from ..models.service_mapping import RoleBasedPortAssignment
19
47
  from ..models.service_needs import NvBlockNeeds, RoleBasedDataAssignment
20
- from ..models.data_prototype import ApplicationArrayElement, ApplicationCompositeElementDataPrototype, ApplicationRecordElement, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
48
+ from ..models.m2.autosar_templates.sw_component_template.data_type.data_prototypes import ApplicationArrayElement, ApplicationCompositeElementDataPrototype, ApplicationRecordElement, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
21
49
  from ..models.bsw_module_template import BswCalledEntity, BswEvent, BswInternalBehavior, BswModeSenderPolicy, BswModuleDescription, BswModuleEntity, BswModuleEntry, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
22
50
  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
51
+ from ..models.sw_component import ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, DataReceivedEvent, EcuAbstractionSwComponentType, InitEvent, InternalTriggerOccurredEvent, OperationInvokedEvent, PortAPIOption, RTEEvent, ServiceDependency, ServiceSwComponentType, SwcModeSwitchEvent, SwcServiceDependency
24
52
  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
53
+ from ..models.ar_ref import RefType
26
54
  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
55
+ from ..models.common_structure import IncludedModeDeclarationGroupSet, ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype
28
56
  from ..models.communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
29
- from ..models.data_dictionary import SwAddrMethod, SwDataDefProps
30
- from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType, BaseTypeDirectDefinition, DataTypeMappingSet, ImplementationDataType, SwBaseType
57
+ from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType, BaseTypeDirectDefinition, DataTypeMappingSet, SwBaseType
31
58
  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
34
- from ..models.sw_component import AssemblySwConnector, CompositionSwComponentType, DelegationSwConnector, SwComponentPrototype, SwComponentType, SwConnector
59
+
35
60
  from ..models.annotation import Annotation
36
61
  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
62
+ from ..models.m2.autosar_templates.sw_component_template.port_interface import ApplicationError, ClientServerInterface, ClientServerOperation, ModeSwitchInterface, PortInterface, SenderReceiverInterface, TriggerInterface
63
+ from ..models.m2.msr.asam_hdo.units import Unit
39
64
  from ..models.implementation import AutosarEngineeringObject, BswImplementation, Code, EngineeringObject, Implementation, SwcImplementation
40
- from ..models.common_structure import ConstantSpecification, ExecutableEntity, ResourceConsumption
65
+ from ..models.common_structure import ExecutableEntity, ResourceConsumption
41
66
  from ..models.sw_component import RunnableEntity, SwcInternalBehavior, TimingEvent
42
67
  from ..models.ar_object import ARLiteral
43
68
  from ..models.global_constraints import DataConstr, InternalConstrs, PhysConstrs
@@ -53,6 +78,12 @@ class ARXMLWriter(AbstractARXMLWriter):
53
78
 
54
79
  return sub_element
55
80
 
81
+ def setChildElementRxIdentifierRange(self, element: ET.Element, key: str, range: RxIdentifierRange):
82
+ if range is not None:
83
+ child_element = ET.SubElement(element, key)
84
+ self.setChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID", range.getLowerCanId())
85
+ self.setChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID", range.getUpperCanId())
86
+
56
87
  def writeSds(self, parent: ET.Element, sdg: Sdg):
57
88
  for sd in sdg.getSds():
58
89
  sd_tag = ET.SubElement(parent, "SD")
@@ -63,8 +94,9 @@ class ARXMLWriter(AbstractARXMLWriter):
63
94
  if sdg is not None:
64
95
  sdg_tag = ET.SubElement(parent, "SDG")
65
96
  sdg_tag.attrib['GID'] = sdg.gid
66
- self.setSdg(sdg_tag, sdg.sdg_contents_type)
67
97
  self.writeSds(sdg_tag, sdg)
98
+ for sdg_item in sdg.getSdgContentsTypes():
99
+ self.setSdg(sdg_tag, sdg_item)
68
100
 
69
101
  def writeSdgs(self, parent: ET.Element, admin_data: AdminData):
70
102
  sdgs = admin_data.getSdgs()
@@ -81,7 +113,7 @@ class ARXMLWriter(AbstractARXMLWriter):
81
113
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
82
114
  limit_tag.text = limit.value
83
115
 
84
- def writeReferable(self, element: ET.Element, referrable: Referrable):
116
+ def setReferable(self, element: ET.Element, referrable: Referrable):
85
117
  self.setARObjectAttributes(element, referrable)
86
118
  self.setShortName(element, referrable.short_name)
87
119
 
@@ -107,61 +139,77 @@ class ARXMLWriter(AbstractARXMLWriter):
107
139
  l2_tag.attrib['L'] = l2.l
108
140
  l2_tag.text = l2.value
109
141
 
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)
142
+ def setMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
143
+ self.setReferable(element, referrable)
144
+ if referrable.longName is not None:
145
+ self.setMultiLongName(element, "LONG-NAME", referrable.longName)
114
146
 
115
- def writeAdminData(self, element: ET.Element, admin_data: AdminData):
147
+ def setAdminData(self, element: ET.Element, admin_data: AdminData):
116
148
  element = ET.SubElement(element, "ADMIN-DATA")
117
149
  self.writeSdgs(element, admin_data)
118
150
 
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)
151
+ def setIdentifiable(self, element: ET.Element, identifiable: Identifiable):
152
+ self.setMultilanguageReferrable(element, identifiable)
153
+ self.setAnnotations(element, identifiable.getAnnotations())
154
+ self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
155
+ self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
156
+ if identifiable.getAdminData() is not None:
157
+ self.setAdminData(element, identifiable.getAdminData())
125
158
 
126
- def writeARElement(self, parent: ET.Element, ar_element: ARElement):
127
- self.writeIdentifiable(parent, ar_element)
159
+ def setARElement(self, parent: ET.Element, ar_element: ARElement):
160
+ self.setIdentifiable(parent, ar_element)
128
161
 
129
- def writeTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
162
+ def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
130
163
  if (acknowledge != None):
131
164
  child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
132
165
  self.setARObjectAttributes(child_element, acknowledge)
133
166
  if acknowledge.timeout != None:
134
167
  self.setChildElementOptionalFloatValue(child_element, "TIMEOUT", acknowledge.timeout)
135
168
 
136
- def writeSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
169
+ def setSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
137
170
  representations = com_spec.getCompositeNetworkRepresentations()
138
171
  if len(representations) > 0:
139
172
  child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
140
173
  for representation in representations:
141
174
  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)
175
+ self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.getDataElementRef())
176
+ self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.getNetworkRepresentation())
177
+ self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.getHandleOutOfRange())
178
+ self.setTransmissionAcknowledgementRequest(element, com_spec.getTransmissionAcknowledge())
179
+ self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.getUsesEndToEndProtection())
147
180
 
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)
181
+ def setNonqueuedSenderComSpec(self, element: ET.Element, com_spec: NonqueuedSenderComSpec):
182
+ child_element = ET.SubElement(element, "NONQUEUED-SENDER-COM-SPEC")
183
+ self.setARObjectAttributes(child_element, com_spec)
184
+ self.setSenderComSpec(child_element, com_spec)
185
+ self.setInitValue(child_element, com_spec.initValue)
153
186
 
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)
187
+ def setServerComSpec(self, element: ET.Element, com_spec: ServerComSpec):
188
+ child_element = ET.SubElement(element, "SERVER-COM-SPEC")
189
+ self.setARObjectAttributes(child_element, com_spec)
190
+ self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
191
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
192
+
193
+ def setQueuedSenderComSpec(self, element: ET.Element, com_spec: QueuedSenderComSpec):
194
+ child_element = ET.SubElement(element, "QUEUED-SENDER-COM-SPEC")
195
+ self.setARObjectAttributes(child_element, com_spec)
196
+ self.setSenderComSpec(child_element, com_spec)
197
+
198
+ def setModeSwitchSenderComSpec(self, element: ET.Element, com_spec: ModeSwitchSenderComSpec):
199
+ child_element = ET.SubElement(element, "MODE-SWITCH-SENDER-COM-SPEC")
200
+ self.setARObjectAttributes(child_element, com_spec)
201
+ self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
202
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
159
203
 
160
204
  def writePPortComSpec(self, com_specs_tag: ET.Element, com_spec: PPortComSpec):
161
205
  if isinstance(com_spec, NonqueuedSenderComSpec):
162
- self.writeNonqueuedSenderComSpec(com_specs_tag, com_spec)
206
+ self.setNonqueuedSenderComSpec(com_specs_tag, com_spec)
163
207
  elif isinstance(com_spec, ServerComSpec):
164
- self.writeServerComSpec(com_specs_tag, com_spec)
208
+ self.setServerComSpec(com_specs_tag, com_spec)
209
+ elif isinstance(com_spec, QueuedSenderComSpec):
210
+ self.setQueuedSenderComSpec(com_specs_tag, com_spec)
211
+ elif isinstance(com_spec, ModeSwitchSenderComSpec):
212
+ self.setModeSwitchSenderComSpec(com_specs_tag, com_spec)
165
213
  else:
166
214
  raise NotImplementedError("Unsupported PPortComSpec %s" % type(com_spec))
167
215
 
@@ -185,10 +233,10 @@ class ARXMLWriter(AbstractARXMLWriter):
185
233
  child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
186
234
  for representation in representations:
187
235
  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)
236
+ self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.dataElementRef)
237
+ self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.networkRepresentation)
238
+ self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handleOutOfRange)
239
+ self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.usesEndToEndProtection)
192
240
 
193
241
  def setSwValues(self, element: ET.Element, key: str, sw_values: SwValues):
194
242
  if sw_values is not None:
@@ -249,7 +297,7 @@ class ARXMLWriter(AbstractARXMLWriter):
249
297
  def setConstantReference(self, element: ET.Element, value_spec: ConstantReference):
250
298
  value_spec_tag = ET.SubElement(element, "CONSTANT-REFERENCE")
251
299
  self.writeValueSpecification(value_spec_tag, value_spec)
252
- self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.constant_ref)
300
+ self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.getConstantRef())
253
301
 
254
302
  def setValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
255
303
  if value_spec is not None:
@@ -277,23 +325,30 @@ class ARXMLWriter(AbstractARXMLWriter):
277
325
  child_element = ET.SubElement(element, "NONQUEUED-RECEIVER-COM-SPEC")
278
326
  self.setARObjectAttributes(child_element, com_spec)
279
327
  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)
328
+ self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.aliveTimeout)
329
+ self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.enableUpdated)
330
+ self.setChildElementOptionalBooleanValue(child_element, "HANDLE-NEVER-RECEIVED", com_spec.handleNeverReceived)
331
+ self.setChildElementOptionalLiteral(child_element, "HANDLE-TIMEOUT-TYPE", com_spec.handleTimeoutType)
332
+ self.setInitValue(child_element, com_spec.initValue)
285
333
 
286
334
  def writeQueuedReceiverComSpec(self, element: ET.Element, com_spec: QueuedReceiverComSpec):
287
335
  child_element = ET.SubElement(element, "QUEUED-RECEIVER-COM-SPEC")
288
336
  self.setARObjectAttributes(child_element, com_spec)
289
337
  self.writeReceiverComSpec(child_element, com_spec)
290
- self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queue_length)
338
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queueLength)
291
339
 
292
340
  def writeClientComSpec(self, element: ET.Element, com_spec: ClientComSpec):
293
341
  self.logger.debug("writeClientComSpec")
294
342
  child_element = ET.SubElement(element, "CLIENT-COM-SPEC")
295
343
  self.setARObjectAttributes(child_element, com_spec)
296
- self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.operation_ref)
344
+ self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
345
+
346
+ def writeParameterRequireComSpec(self, element: ET.Element, com_spec: ParameterRequireComSpec):
347
+ self.logger.debug("writeParameterRequireComSpec")
348
+ child_element = ET.SubElement(element, "PARAMETER-REQUIRE-COM-SPEC")
349
+ self.setARObjectAttributes(child_element, com_spec)
350
+ self.setChildElementOptionalRefType(child_element, "PARAMETER-REF", com_spec.parameter_ref)
351
+ self.setInitValue(child_element, com_spec.init_value)
297
352
 
298
353
  def writeModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
299
354
  self.logger.debug("writeModeSwitchReceiverComSpec")
@@ -310,13 +365,15 @@ class ARXMLWriter(AbstractARXMLWriter):
310
365
  self.writeClientComSpec(element, com_spec)
311
366
  elif isinstance(com_spec, ModeSwitchReceiverComSpec):
312
367
  self.writeModeSwitchReceiverComSpec(element, com_spec)
368
+ elif isinstance(com_spec, ParameterRequireComSpec):
369
+ self.writeParameterRequireComSpec(element, com_spec)
313
370
  else:
314
371
  raise ValueError("Unsupported RPortComSpec %s" % type(com_spec))
315
372
 
316
373
  def writePPortPrototype(self, ports_tag: ET.Element, prototype: PPortPrototype):
317
374
  prototype_tag = ET.SubElement(ports_tag, "P-PORT-PROTOTYPE")
318
375
 
319
- self.writeIdentifiable(prototype_tag, prototype)
376
+ self.setIdentifiable(prototype_tag, prototype)
320
377
  self.logger.debug("writePPortPrototype %s" % prototype.short_name)
321
378
 
322
379
  com_specs = prototype.getProvidedComSpecs()
@@ -325,18 +382,18 @@ class ARXMLWriter(AbstractARXMLWriter):
325
382
  for com_spec in com_specs:
326
383
  self.writePPortComSpec(com_specs_tag, com_spec)
327
384
 
328
- self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-INTERFACE-TREF", prototype.provided_interface_tref)
385
+ self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-INTERFACE-TREF", prototype.getProvidedInterfaceTRef())
329
386
 
330
387
  def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
331
388
  self.logger.debug("writeRPortPrototype %s" % prototype.short_name)
332
389
  prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
333
- self.writeIdentifiable(prototype_tag, prototype)
390
+ self.setIdentifiable(prototype_tag, prototype)
334
391
  com_specs = prototype.getRequiredComSpecs()
335
392
  if len(com_specs) > 0:
336
393
  com_specs_tag = ET.SubElement(prototype_tag, "REQUIRED-COM-SPECS")
337
394
  for com_spec in com_specs:
338
395
  self.writeRPortComSpec(com_specs_tag, com_spec)
339
- self.setChildElementOptionalRefType(prototype_tag, "REQUIRED-INTERFACE-TREF", prototype.required_interface_tref)
396
+ self.setChildElementOptionalRefType(prototype_tag, "REQUIRED-INTERFACE-TREF", prototype.getRequiredInterfaceTRef())
340
397
 
341
398
  def writePortPrototypes(self, ports_tag: ET.Element, port_prototypes: List[PortPrototype]):
342
399
  for port_prototype in port_prototypes:
@@ -349,8 +406,8 @@ class ARXMLWriter(AbstractARXMLWriter):
349
406
 
350
407
  def writeInnerGroupIRef(self, element: ET.Element, inner_group_iref: InnerPortGroupInCompositionInstanceRef):
351
408
  child_element = ET.SubElement(element, "INNER-GROUP-IREF")
352
- self.setChildElementOptionalRefType(child_element, "CONTEXT-REF", inner_group_iref.contextRef)
353
- self.setChildElementOptionalRefType(child_element, "TARGET-REF", inner_group_iref.targetRef)
409
+ #self.setChildElementOptionalRefType(child_element, "CONTEXT-REF", inner_group_iref.contextRef)
410
+ self.setChildElementOptionalRefType(child_element, "TARGET-REF", inner_group_iref.getTargetRef())
354
411
 
355
412
  def writePortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
356
413
  irefs = parent.getInnerGroupIRefs()
@@ -370,7 +427,7 @@ class ARXMLWriter(AbstractARXMLWriter):
370
427
  def writePortGroup(self, element: ET.Element, port_group: PortGroup):
371
428
  self.logger.debug("writePortGroup %s" % port_group.short_name)
372
429
  child_element = ET.SubElement(element, "PORT-GROUP")
373
- self.writeIdentifiable(child_element, port_group)
430
+ self.setIdentifiable(child_element, port_group)
374
431
  self.writePortGroupInnerGroupIRefs(child_element, port_group)
375
432
  self.writePortGroupOuterPortRefs(child_element, port_group)
376
433
 
@@ -382,7 +439,7 @@ class ARXMLWriter(AbstractARXMLWriter):
382
439
  self.writePortGroup(child_element, port_group)
383
440
 
384
441
  def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
385
- self.writeIdentifiable(element, sw_component)
442
+ self.setIdentifiable(element, sw_component)
386
443
  port_prototypes = sw_component.getPortPrototypes()
387
444
  if len(port_prototypes) > 0:
388
445
  ports_tag = ET.SubElement(element, "PORTS")
@@ -391,49 +448,54 @@ class ARXMLWriter(AbstractARXMLWriter):
391
448
 
392
449
  def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
393
450
  prototype_tag = ET.SubElement(element, "SW-COMPONENT-PROTOTYPE")
394
- self.writeIdentifiable(prototype_tag, prototype)
395
- self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.type_tref)
451
+ self.setIdentifiable(prototype_tag, prototype)
452
+ self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.getTypeTRef())
396
453
 
397
454
  def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
398
- components_tag = ET.SubElement(element, "COMPONENTS")
399
- for prototype in sw_component.getSwComponentPrototypes():
455
+ prototypes = sw_component.getSwComponentPrototypes()
456
+ if len(prototypes) > 0:
457
+ components_tag = ET.SubElement(element, "COMPONENTS")
458
+ for prototype in prototypes:
400
459
  self.writeSwComponentPrototype(components_tag, prototype)
401
460
 
402
461
  def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
403
462
  connector_tag = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
404
- self.writeIdentifiable(connector_tag, sw_connector)
463
+ self.setIdentifiable(connector_tag, sw_connector)
405
464
 
406
- if sw_connector.provider_iref is not None:
465
+ if sw_connector.getProviderIRef() is not None:
407
466
  provider_iref_tag = ET.SubElement(connector_tag, "PROVIDER-IREF")
408
- self.setARObjectAttributes(provider_iref_tag, sw_connector.provider_iref)
409
- self.setChildElementOptionalRefType(provider_iref_tag, "CONTEXT-COMPONENT-REF", sw_connector.provider_iref.context_component_ref)
410
- self.setChildElementOptionalRefType(provider_iref_tag, "TARGET-P-PORT-REF", sw_connector.provider_iref.target_p_port_ref)
467
+ provider_iref = sw_connector.getProviderIRef()
468
+ self.setARObjectAttributes(provider_iref_tag, provider_iref)
469
+ self.setChildElementOptionalRefType(provider_iref_tag, "CONTEXT-COMPONENT-REF", provider_iref.getContextComponentRef())
470
+ self.setChildElementOptionalRefType(provider_iref_tag, "TARGET-P-PORT-REF", provider_iref.getTargetPPortRef())
411
471
 
412
- if sw_connector.requester_iref is not None:
472
+ if sw_connector.getRequesterIRef() is not None:
413
473
  requester_iref_tag = ET.SubElement(connector_tag, "REQUESTER-IREF")
414
- self.setARObjectAttributes(requester_iref_tag, sw_connector.requester_iref)
415
- self.setChildElementOptionalRefType(requester_iref_tag, "CONTEXT-COMPONENT-REF", sw_connector.requester_iref.context_component_ref)
416
- self.setChildElementOptionalRefType(requester_iref_tag, "TARGET-R-PORT-REF", sw_connector.requester_iref.target_r_port_ref)
474
+ requester_iref = sw_connector.getRequesterIRef()
475
+ self.setARObjectAttributes(requester_iref_tag, requester_iref)
476
+ self.setChildElementOptionalRefType(requester_iref_tag, "CONTEXT-COMPONENT-REF", requester_iref.getContextComponentRef())
477
+ self.setChildElementOptionalRefType(requester_iref_tag, "TARGET-R-PORT-REF", requester_iref.getTargetRPortRef())
417
478
 
418
479
  def writeDelegationSwConnector(self, element: ET.Element, sw_connector: DelegationSwConnector):
419
480
  connector_tag = ET.SubElement(element, "DELEGATION-SW-CONNECTOR")
420
- self.writeIdentifiable(connector_tag, sw_connector)
481
+ self.setIdentifiable(connector_tag, sw_connector)
421
482
 
422
- if sw_connector.inner_port_iref is not None:
483
+ if sw_connector.getInnerPortIRref() is not None:
423
484
  inner_port_iref_tag = ET.SubElement(connector_tag, "INNER-PORT-IREF")
424
- if isinstance(sw_connector.inner_port_iref, PPortInCompositionInstanceRef):
485
+ inner_port_iref = sw_connector.getInnerPortIRref()
486
+ if isinstance(inner_port_iref, PPortInCompositionInstanceRef):
425
487
  instance_ref_tag = ET.SubElement(inner_port_iref_tag, "P-PORT-IN-COMPOSITION-INSTANCE-REF")
426
- self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-COMPONENT-REF", sw_connector.inner_port_iref.context_component_ref)
427
- self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-P-PORT-REF", sw_connector.inner_port_iref.target_p_port_ref)
428
- elif isinstance(sw_connector.inner_port_iref, RPortInCompositionInstanceRef):
488
+ self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-COMPONENT-REF", inner_port_iref.getContextComponentRef())
489
+ self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-P-PORT-REF", inner_port_iref.getTargetPPortRef())
490
+ elif isinstance(inner_port_iref, RPortInCompositionInstanceRef):
429
491
  instance_ref_tag = ET.SubElement(inner_port_iref_tag, "R-PORT-IN-COMPOSITION-INSTANCE-REF")
430
- self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-COMPONENT-REF", sw_connector.inner_port_iref.context_component_ref)
431
- self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-R-PORT-REF", sw_connector.inner_port_iref.target_r_port_ref)
492
+ self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-COMPONENT-REF", inner_port_iref.getContextComponentRef())
493
+ self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-R-PORT-REF", inner_port_iref.getTargetRPortRef())
432
494
  else:
433
- self._raiseError("Invalid inner port of DelegationSwConnector <%s>" % sw_connector.short_name)
495
+ self._raiseError("Invalid inner port of DelegationSwConnector <%s>" % sw_connector.getShortName())
434
496
 
435
- if sw_connector.outer_port_ref is not None:
436
- self.setChildElementOptionalRefType(connector_tag, "OUTER-PORT-REF", sw_connector.outer_port_ref)
497
+ if sw_connector.getOuterPortRef() is not None:
498
+ self.setChildElementOptionalRefType(connector_tag, "OUTER-PORT-REF", sw_connector.getOuterPortRef())
437
499
  #self.writeChildOptionalRefElement(requester_iref_tag, "TARGET-R-PORT-REF", sw_connector.requester_iref.target_r_port_ref)
438
500
 
439
501
  def writeSwConnector(self, element: ET.Element, sw_connector: SwConnector):
@@ -448,8 +510,13 @@ class ARXMLWriter(AbstractARXMLWriter):
448
510
  sw_connectors = sw_component.getSwConnectors()
449
511
  if len(sw_connectors) > 0:
450
512
  connectors_tag = ET.SubElement(element, "CONNECTORS")
513
+ # Change the implementation to compatible with AUTOSAR builder
451
514
  for sw_connector in sw_connectors:
452
515
  self.writeSwConnector(connectors_tag, sw_connector)
516
+ #for sw_connector in sw_component.getAssemblySwConnectors():
517
+ # self.writeSwConnector(connectors_tag, sw_connector)
518
+ #for sw_connector in sw_component.getDelegationSwConnectors():
519
+ # self.writeSwConnector(connectors_tag, sw_connector)
453
520
 
454
521
  def writeCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
455
522
  data_type_mappings = parent.getDataTypeMappings()
@@ -471,11 +538,33 @@ class ARXMLWriter(AbstractARXMLWriter):
471
538
  for sw_component in ar_package.getCompositionSwComponentTypes():
472
539
  self.writeCompositionSwComponentType(element, sw_component)
473
540
 
541
+ def writeLParagraphs(self, element: ET.Element, paragraph: MultiLanguageParagraph):
542
+ for l1 in paragraph.getL1s():
543
+ l1_tag = ET.SubElement(element, "L-1")
544
+ self.setARObjectAttributes(l1_tag, l1)
545
+ if l1.l is not None:
546
+ l1_tag.attrib['L'] = l1.l
547
+ l1_tag.text = l1.value
548
+
549
+ def setMultiLanguageParagraphs(self, element: ET.Element, key: str, paragraphs: List[MultiLanguageParagraph]):
550
+ for paragraph in paragraphs:
551
+ child_element = ET.SubElement(element, key)
552
+ self.setARObjectAttributes(child_element, paragraph)
553
+ self.writeLParagraphs(child_element, paragraph)
554
+ return paragraphs
555
+
556
+ def setDocumentationBlock(self, element: ET.Element, key: str, block: DocumentationBlock):
557
+ if block is not None:
558
+ child_element = ET.SubElement(element, key)
559
+ self.setARObjectAttributes(child_element, block)
560
+ self.setMultiLanguageParagraphs(child_element, "P", block.getPs())
561
+
474
562
  def writeGeneralAnnotation(self, element: ET.Element, annotation: Annotation):
475
- self.setMultiLongName(element, "LABEL", annotation.label)
563
+ self.setMultiLongName(element, "LABEL", annotation.getLabel())
564
+ self.setChildElementOptionalLiteral(element, "ANNOTATION-ORIGIN", annotation.getAnnotationOrigin())
565
+ self.setDocumentationBlock(element, "ANNOTATION-TEXT", annotation.getAnnotationText())
476
566
 
477
- def writeAnnotations(self, element: ET.Element, props: SwDataDefProps) :
478
- annotations = props.getAnnotations()
567
+ def setAnnotations(self, element: ET.Element, annotations: List[Annotation]) :
479
568
  if len(annotations) > 0:
480
569
  annotations_tag = ET.SubElement(element, "ANNOTATIONS")
481
570
  for annotation in annotations:
@@ -516,6 +605,11 @@ class ARXMLWriter(AbstractARXMLWriter):
516
605
  for axis in axises:
517
606
  self.setSwCalprmAxis(child_element, axis)
518
607
 
608
+ def writeSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
609
+ if props.getInvalidValue() is not None:
610
+ child_element = ET.SubElement(element, "INVALID-VALUE")
611
+ self.setValueSpecification(child_element, props.getInvalidValue())
612
+
519
613
  def setSwDataDefProps(self, element: ET.Element, key: str, sw_data_def_props: SwDataDefProps):
520
614
  if sw_data_def_props is not None:
521
615
  child_element = ET.SubElement(element, key)
@@ -523,18 +617,18 @@ class ARXMLWriter(AbstractARXMLWriter):
523
617
  sw_data_def_props_variants_tag = ET.SubElement(child_element, "SW-DATA-DEF-PROPS-VARIANTS")
524
618
  sw_data_def_props_conditional_tag = ET.SubElement(sw_data_def_props_variants_tag, "SW-DATA-DEF-PROPS-CONDITIONAL")
525
619
  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
-
620
+ self.setAnnotations(sw_data_def_props_conditional_tag, sw_data_def_props.getAnnotations())
621
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "BASE-TYPE-REF", sw_data_def_props.getBaseTypeRef())
622
+ self.writeSwDataDefProsInvalidValue(sw_data_def_props_conditional_tag, sw_data_def_props)
623
+ self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-CALIBRATION-ACCESS", sw_data_def_props.getSwCalibrationAccess())
624
+ self.setSwCalprmAxisSet(sw_data_def_props_conditional_tag, "SW-CALPRM-AXIS-SET", sw_data_def_props.getSwCalprmAxisSet())
625
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "COMPU-METHOD-REF", sw_data_def_props.getCompuMethodRef())
626
+ self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-IMPL-POLICY", sw_data_def_props.getSwImplPolicy())
627
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", sw_data_def_props.getImplementationDataTypeRef())
628
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.getDataConstrRef())
629
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "SW-RECORD-LAYOUT-REF", sw_data_def_props.getSwRecordLayoutRef())
630
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "VALUE-AXIS-DATA-TYPE-REF", sw_data_def_props.getValueAxisDataTypeRef())
631
+ self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "UNIT-REF", sw_data_def_props.getUnitRef())
538
632
 
539
633
  def writeApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
540
634
  self.writeAutosarDataType(element, data_type)
@@ -543,8 +637,8 @@ class ARXMLWriter(AbstractARXMLWriter):
543
637
  self.writeApplicationDataType(element, data_type)
544
638
 
545
639
  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)
640
+ self.setARElement(element, data_type)
641
+ self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.swDataDefProps)
548
642
 
549
643
  def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
550
644
  self.logger.debug("writeApplicationPrimitiveDataType %s" % data_type.short_name)
@@ -552,7 +646,7 @@ class ARXMLWriter(AbstractARXMLWriter):
552
646
  self.writeApplicationDataType(data_type_tag, data_type)
553
647
 
554
648
  def setDataPrototype(self, element: ET.Element, prototype: DataPrototype):
555
- self.writeIdentifiable(element, prototype)
649
+ self.setIdentifiable(element, prototype)
556
650
 
557
651
  def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
558
652
  self.setDataPrototype(element, prototype)
@@ -591,7 +685,7 @@ class ARXMLWriter(AbstractARXMLWriter):
591
685
 
592
686
  def writeSwBaseType(self, element: ET.Element, base_type: SwBaseType):
593
687
  data_type_tag = ET.SubElement(element, "SW-BASE-TYPE")
594
- self.writeIdentifiable(data_type_tag, base_type)
688
+ self.setIdentifiable(data_type_tag, base_type)
595
689
  self.writeBaseTypeDirectDefinition(data_type_tag, base_type.baseTypeDefinition)
596
690
 
597
691
  def writeCompuScaleConstantContents(self, element: ET.Element, contents: CompuScaleConstantContents):
@@ -626,6 +720,7 @@ class ARXMLWriter(AbstractARXMLWriter):
626
720
  for compu_scale in compu_scales.getCompuScales():
627
721
  child_element = ET.SubElement(compu_scales_tag, "COMPU-SCALE")
628
722
  self.setARObjectAttributes(child_element, compu_scale)
723
+ self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", compu_scale.short_label)
629
724
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", compu_scale.symbol)
630
725
  self.writeChildLimitElement(child_element, "LOWER-LIMIT", compu_scale.lowerLimit)
631
726
  self.writeChildLimitElement(child_element, "UPPER-LIMIT", compu_scale.upperLimit)
@@ -641,7 +736,7 @@ class ARXMLWriter(AbstractARXMLWriter):
641
736
  def writeCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
642
737
  compu_method_tag = ET.SubElement(element, "COMPU-METHOD")
643
738
  self.logger.debug("writeCompuMethods %s" % compu_method.short_name)
644
- self.writeIdentifiable(compu_method_tag, compu_method)
739
+ self.setIdentifiable(compu_method_tag, compu_method)
645
740
  self.setChildElementOptionalRefType(compu_method_tag, "UNIT-REF", compu_method.unit_ref)
646
741
  self.writeCompuInternalToPhys(compu_method_tag, compu_method)
647
742
 
@@ -672,11 +767,11 @@ class ARXMLWriter(AbstractARXMLWriter):
672
767
 
673
768
  def writeConstantSpecification(self, element: ET.Element, spec: ConstantSpecification):
674
769
  spec_tag = ET.SubElement(element, "CONSTANT-SPECIFICATION")
675
- self.writeIdentifiable(spec_tag, spec)
770
+ self.setIdentifiable(spec_tag, spec)
676
771
 
677
- if spec.value_spec is not None:
772
+ if spec.getValueSpec() is not None:
678
773
  value_spec_tag = ET.SubElement(spec_tag, "VALUE-SPEC")
679
- self.setValueSpecification(value_spec_tag, spec.value_spec)
774
+ self.setValueSpecification(value_spec_tag, spec.getValueSpec())
680
775
 
681
776
  def setInternalConstrs(self, element: ET.Element, constrs: InternalConstrs):
682
777
  if constrs is not None:
@@ -710,21 +805,24 @@ class ARXMLWriter(AbstractARXMLWriter):
710
805
 
711
806
  def writeDataConstr(self, element: ET.Element, constr: DataConstr):
712
807
  child_element = ET.SubElement(element, "DATA-CONSTR")
713
- self.writeIdentifiable(child_element, constr)
808
+ self.setIdentifiable(child_element, constr)
714
809
  self.writeDataConstrRules(child_element, constr)
715
810
 
716
811
  def writeUnit(self, element: ET.Element, unit: Unit):
717
812
  self.logger.debug("writeUnit %s" % unit.short_name)
718
813
  child_element = ET.SubElement(element, "UNIT")
719
- self.writeIdentifiable(child_element, unit)
720
- self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.display_name)
814
+ self.setIdentifiable(child_element, unit)
815
+ self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.getDisplayName())
816
+ self.setChildElementOptionalFloatValue(child_element, "FACTOR-SI-TO-UNIT", unit.getFactorSiToUnit())
817
+ self.setChildElementOptionalFloatValue(child_element, "OFFSET-SI-TO-UNIT", unit.getOffsetSiToUnit())
818
+ self.setChildElementOptionalRefType(child_element, "PHYSICAL-DIMENSION-REF", unit.getPhysicalDimensionRef())
721
819
 
722
820
  def setRModeInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: RModeInAtomicSwcInstanceRef):
723
821
  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)
822
+ self.setChildElementOptionalRefType(child_element, "BASE", iref.getBaseRef())
823
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.getContextPortRef())
824
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.getContextModeDeclarationGroupPrototypeRef())
825
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF", iref.getTargetModeDeclarationRef())
728
826
 
729
827
  def setPOperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: POperationInAtomicSwcInstanceRef):
730
828
  child_element = ET.SubElement(element, key)
@@ -732,7 +830,7 @@ class ARXMLWriter(AbstractARXMLWriter):
732
830
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.target_provided_operation_ref)
733
831
 
734
832
  def setRTEEvent(self, element: ET.Element, event: RTEEvent):
735
- self.writeIdentifiable(element, event)
833
+ self.setIdentifiable(element, event)
736
834
  irefs = event.getDisabledModeIRefs()
737
835
  if len(irefs) > 0:
738
836
  child_element = ET.SubElement(element, "DISABLED-MODE-IREFS")
@@ -766,14 +864,14 @@ class ARXMLWriter(AbstractARXMLWriter):
766
864
  def setRVariableInAtomicSwcInstanceRef(self, element: ET.Element, iref: RVariableInAtomicSwcInstanceRef):
767
865
  if iref is not None:
768
866
  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)
867
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
868
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF", iref.getTargetDataElementRef())
771
869
 
772
870
  def setDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
773
871
  if event is not None:
774
872
  child_element = ET.SubElement(element, "DATA-RECEIVED-EVENT")
775
873
  self.setRTEEvent(child_element, event)
776
- self.setRVariableInAtomicSwcInstanceRef(child_element, event.data_iref)
874
+ self.setRVariableInAtomicSwcInstanceRef(child_element, event.dataIRef)
777
875
 
778
876
  def setInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
779
877
  pass
@@ -810,7 +908,7 @@ class ARXMLWriter(AbstractARXMLWriter):
810
908
  areas_tag = ET.SubElement(element, "EXCLUSIVE-AREAS")
811
909
  for area in areas:
812
910
  child_element = ET.SubElement(areas_tag, "EXCLUSIVE-AREA")
813
- self.writeIdentifiable(child_element, area)
911
+ self.setIdentifiable(child_element, area)
814
912
 
815
913
  def writeDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
816
914
  refs = behavior.getDataTypeMappingRefs()
@@ -827,31 +925,25 @@ class ARXMLWriter(AbstractARXMLWriter):
827
925
  self.writeParameterDataPrototype(child_element, memory)
828
926
 
829
927
  def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
830
- self.writeIdentifiable(element, behavior)
928
+ self.setIdentifiable(element, behavior)
831
929
  self.writeInternalBehaviorConstantMemories(element, behavior)
832
930
  self.writeDataTypeMappingRefs(element, behavior)
833
931
  self.writeExclusiveAreas(element, behavior)
834
932
 
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
933
  def setAutosarVariableRef(self, element: ET.Element, ref: AutosarVariableRef):
841
934
  if ref is not None:
842
935
  child_element = ET.SubElement(element, "ACCESSED-VARIABLE")
843
- if ref.autosar_variable_iref is not None:
936
+ self.setARObjectAttributes(child_element, ref)
937
+ if ref.getAutosarVariableIRef() is not None:
844
938
  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)
939
+ self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref.getAutosarVariableIRef().getPortPrototypeRef())
940
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.getAutosarVariableIRef().getTargetDataPrototypeRef())
941
+ self.setChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF", ref.getLocalVariableRef())
850
942
 
851
943
  def setVariableAccess(self, element: ET.Element, access: VariableAccess):
852
944
  child_element = ET.SubElement(element, "VARIABLE-ACCESS")
853
- self.writeIdentifiable(child_element, access)
854
- self.setAutosarVariableRef(child_element, access.accessed_variable_ref)
945
+ self.setIdentifiable(child_element, access)
946
+ self.setAutosarVariableRef(child_element, access.getAccessedVariableRef())
855
947
 
856
948
  def writeDataReadAccesses(self, element: ET.Element, entity: RunnableEntity):
857
949
  #accesses = entity.getDataReadAccesses():
@@ -864,7 +956,7 @@ class ARXMLWriter(AbstractARXMLWriter):
864
956
 
865
957
  def writeParameterAccess(self, element: ET.Element, parameter_access: ParameterAccess):
866
958
  child_element = ET.SubElement(element, "PARAMETER-ACCESS")
867
- self.writeIdentifiable(child_element, parameter_access)
959
+ self.setIdentifiable(child_element, parameter_access)
868
960
  self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.accessed_parameter)
869
961
 
870
962
  def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
@@ -902,20 +994,20 @@ class ARXMLWriter(AbstractARXMLWriter):
902
994
  for access in variables:
903
995
  self.setVariableAccess(child_element, access)
904
996
 
905
- def writeROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
997
+ def setROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
906
998
  if iref is not None:
907
999
  child_element = ET.SubElement(element, key)
908
1000
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
909
1001
  self.setChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF", iref.target_required_operation_ref)
910
1002
 
911
- def writeServerCallPoint(self, element: ET.Element, call_point: ServerCallPoint):
912
- self.writeROperationInAtomicSwcInstanceRef(element, "OPERATION-IREF", call_point.operation_iref)
1003
+ def setServerCallPoint(self, element: ET.Element, call_point: ServerCallPoint):
1004
+ self.setROperationInAtomicSwcInstanceRef(element, "OPERATION-IREF", call_point.getOperationIRef())
913
1005
  self.setChildElementOptionalFloatValue(element, "TIMEOUT", call_point.timeout)
914
1006
 
915
- def writeSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
1007
+ def setSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
916
1008
  child_element = ET.SubElement(element, "SYNCHRONOUS-SERVER-CALL-POINT")
917
- self.writeIdentifiable(child_element, call_point)
918
- self.writeServerCallPoint(child_element, call_point)
1009
+ self.setIdentifiable(child_element, call_point)
1010
+ self.setServerCallPoint(child_element, call_point)
919
1011
 
920
1012
  def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
921
1013
  call_points = entity.getServerCallPoints()
@@ -923,7 +1015,7 @@ class ARXMLWriter(AbstractARXMLWriter):
923
1015
  child_element = ET.SubElement(element, "SERVER-CALL-POINTS")
924
1016
  for call_point in call_points:
925
1017
  if isinstance(call_point, SynchronousServerCallPoint):
926
- self.writeSynchronousServerCallPoint(child_element, call_point)
1018
+ self.setSynchronousServerCallPoint(child_element, call_point)
927
1019
  else:
928
1020
  self._raiseError("Unsupported ServerCallPoint type <%s>" % type(call_point))
929
1021
 
@@ -934,10 +1026,18 @@ class ARXMLWriter(AbstractARXMLWriter):
934
1026
  for access in variables:
935
1027
  self.setVariableAccess(child_element, access)
936
1028
 
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)
1029
+ def setRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, tag: str, iref: RModeGroupInAtomicSWCInstanceRef):
1030
+ if iref is not None:
1031
+ child_element = ET.SubElement(element, tag)
1032
+ instance_ref_tag = ET.SubElement(child_element, "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
1033
+ self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
1034
+ self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-MODE-GROUP-REF", iref.getTargetModeGroupRef())
1035
+
1036
+ def setPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, tag: str, iref: PModeGroupInAtomicSwcInstanceRef):
1037
+ if iref is not None:
1038
+ child_element = ET.SubElement(element, tag)
1039
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", iref.getContextPPortRef())
1040
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", iref.getTargetModeGroupRef())
941
1041
 
942
1042
  def writeModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
943
1043
  points = entity.getModeAccessPoints()
@@ -945,21 +1045,43 @@ class ARXMLWriter(AbstractARXMLWriter):
945
1045
  mode_access_points_tag = ET.SubElement(element, "MODE-ACCESS-POINTS")
946
1046
  for point in points:
947
1047
  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)
1048
+ self.setRModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1049
+
1050
+ def writeModeSwitchPoints(self, element: ET.Element, entity: RunnableEntity):
1051
+ points = entity.getModeSwitchPoints()
1052
+ if len(points) > 0:
1053
+ mode_access_points_tag = ET.SubElement(element, "MODE-SWITCH-POINTS")
1054
+ for point in points:
1055
+ child_element = ET.SubElement(mode_access_points_tag, "MODE-SWITCH-POINT")
1056
+ self.setIdentifiable(child_element, point)
1057
+ self.setPModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1058
+
1059
+ def setRunnableEntityArgument(self, element: ET.Element, argument: RunnableEntityArgument):
1060
+ child_element = ET.SubElement(element, "RUNNABLE-ENTITY-ARGUMENT")
1061
+ self.setChildElementOptionalLiteral(child_element, "SYMBOL", argument.getSymbol())
1062
+
1063
+ def writeRunnableEntityArguments(self, element: ET.Element, entity: RunnableEntity):
1064
+ arguments = entity.getArguments()
1065
+ if len(arguments) > 0:
1066
+ child_element = ET.SubElement(element, "ARGUMENTS")
1067
+ for argument in arguments:
1068
+ if isinstance(argument, RunnableEntityArgument):
1069
+ self.setRunnableEntityArgument(child_element, argument)
1070
+ else:
1071
+ raise NotImplementedError("Unsupported argument of Runnable Entity <%s>" % type(argument))
951
1072
 
952
1073
  def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
953
1074
  if entity is not None:
954
1075
  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)
1076
+ self.setExecutableEntity(child_element, entity)
1077
+ self.writeRunnableEntityArguments(child_element, entity)
1078
+ self.setChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY", entity.getCanBeInvokedConcurrently())
958
1079
  self.writeParameterAccesses(child_element, entity)
959
1080
  self.writeDataReceivePointByArguments(child_element, entity)
960
1081
  self.writeDataSendPoints(child_element, entity)
961
1082
  self.writeDataWriteAccesses(child_element, entity)
962
1083
  self.writeModeAccessPoints(child_element, entity)
1084
+ self.writeModeSwitchPoints(child_element, entity)
963
1085
  self.writeReadLocalVariables(child_element, entity)
964
1086
  self.writeServerCallPoints(child_element, entity)
965
1087
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", entity.symbol)
@@ -991,17 +1113,17 @@ class ARXMLWriter(AbstractARXMLWriter):
991
1113
  memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
992
1114
  for memory in memories:
993
1115
  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)
1116
+ self.setIdentifiable(child_element, memory)
1117
+ self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.initValue)
1118
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.swDataDefProps)
997
1119
  self.setChildElementOptionalLiteral(child_element, "TYPE", memory.type)
998
- self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.type_definition)
1120
+ self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.typeDefinition)
999
1121
 
1000
1122
  def writeParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1001
1123
  child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
1002
- self.writeIdentifiable(child_element, prototype)
1124
+ self.setIdentifiable(child_element, prototype)
1003
1125
  self.writeAutosarDataPrototype(child_element, prototype)
1004
- self.setInitValue(child_element, prototype.init_value)
1126
+ self.setInitValue(child_element, prototype.initValue)
1005
1127
 
1006
1128
  def writeParameterDataPrototypes(self, element: ET.Element, behavior: SwcInternalBehavior):
1007
1129
  prototypes = behavior.getPerInstanceParameters()
@@ -1033,7 +1155,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1033
1155
  self.setChildElementOptionalRefType(child_element, "PORT-REF", option.port_ref)
1034
1156
 
1035
1157
  def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
1036
- self.writeIdentifiable(element, dependency)
1158
+ self.setIdentifiable(element, dependency)
1037
1159
 
1038
1160
  def writeRoleBasedDataAssignment(self, element: ET.Element, assignment: RoleBasedDataAssignment):
1039
1161
  child_element = ET.SubElement(element, "ROLE-BASED-DATA-ASSIGNMENT")
@@ -1069,7 +1191,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1069
1191
  def writeNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1070
1192
  child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
1071
1193
  self.logger.debug("writeNvBlockNeeds %s" % needs.short_name)
1072
- self.writeIdentifiable(child_element, needs)
1194
+ self.setIdentifiable(child_element, needs)
1073
1195
  self.setChildElementOptionalBooleanValue(child_element, "CALC-RAM-BLOCK-CRC", needs.calc_ram_block_crc)
1074
1196
  self.setChildElementOptionalBooleanValue(child_element, "CHECK-STATIC-BLOCK-ID", needs.check_static_block_id)
1075
1197
  self.setChildElementOptionalNumericalValue(child_element, "N-DATA-SETS", needs.n_data_sets)
@@ -1169,7 +1291,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1169
1291
  def setCode(self, element: ET.SubElement, code_desc: Code):
1170
1292
  self.logger.debug("setCode %s" % code_desc.short_name)
1171
1293
  child_element = ET.SubElement(element, "CODE")
1172
- self.writeIdentifiable(child_element, code_desc)
1294
+ self.setIdentifiable(child_element, code_desc)
1173
1295
  self.writeArtifactDescriptor(child_element, code_desc)
1174
1296
 
1175
1297
  def writeCodeDescriptors(self, element: ET.Element, impl: Implementation):
@@ -1194,7 +1316,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1194
1316
  sections_tag = ET.SubElement(element, "MEMORY-SECTIONS")
1195
1317
  for memory_section in memory_sections:
1196
1318
  child_element = ET.SubElement(sections_tag, "MEMORY-SECTION")
1197
- self.writeIdentifiable(child_element, memory_section)
1319
+ self.setIdentifiable(child_element, memory_section)
1198
1320
  self.setChildElementOptionalLiteral(child_element, "ALIGNMENT", memory_section.alignment)
1199
1321
  self.setMemorySectionOptions(child_element, memory_section.getOptions())
1200
1322
  self.setChildElementOptionalNumericalValue(child_element, "SIZE", memory_section.size)
@@ -1205,11 +1327,11 @@ class ARXMLWriter(AbstractARXMLWriter):
1205
1327
  def setResourceConsumption(self, element: ET.Element, consumption: ResourceConsumption):
1206
1328
  if consumption is not None:
1207
1329
  child_element = ET.SubElement(element, "RESOURCE-CONSUMPTION")
1208
- self.writeIdentifiable(child_element, consumption)
1330
+ self.setIdentifiable(child_element, consumption)
1209
1331
  self.writeMemorySections(child_element, consumption)
1210
1332
 
1211
1333
  def writeImplementation(self, element: ET.Element, impl: Implementation):
1212
- self.writeIdentifiable(element, impl)
1334
+ self.setIdentifiable(element, impl)
1213
1335
  self.writeCodeDescriptors(element, impl)
1214
1336
  self.setChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE", impl.programming_language)
1215
1337
  self.setResourceConsumption(element, impl.getResourceConsumption())
@@ -1272,7 +1394,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1272
1394
  def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1273
1395
  if protection is not None:
1274
1396
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
1275
- self.writeIdentifiable(child_element, protection)
1397
+ self.setIdentifiable(child_element, protection)
1276
1398
  self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
1277
1399
  self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
1278
1400
 
@@ -1287,21 +1409,21 @@ class ARXMLWriter(AbstractARXMLWriter):
1287
1409
  def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1288
1410
  self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.short_name)
1289
1411
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION-SET")
1290
- self.writeIdentifiable(child_element, protection_set)
1412
+ self.setIdentifiable(child_element, protection_set)
1291
1413
  self.writeEndToEndProtections(child_element, protection_set)
1292
1414
 
1293
1415
  def writeAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
1294
- self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1416
+ self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
1295
1417
 
1296
1418
  def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
1297
1419
  self.logger.debug("writeVariableDataPrototype %s" % prototype.short_name)
1298
1420
  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)
1421
+ self.setIdentifiable(child_element, prototype)
1422
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
1301
1423
  self.writeAutosarDataPrototype(child_element, prototype)
1302
- self.setInitValue(child_element, prototype.init_value)
1424
+ self.setInitValue(child_element, prototype.initValue)
1303
1425
 
1304
- def writeDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1426
+ def writeSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1305
1427
  data_elements = sr_interface.getDataElements()
1306
1428
  if len(data_elements) > 0:
1307
1429
  data_elements_tag = ET.SubElement(element, "DATA-ELEMENTS")
@@ -1311,12 +1433,21 @@ class ARXMLWriter(AbstractARXMLWriter):
1311
1433
  else:
1312
1434
  self._raiseError("Unsupported Data Element <%s>" % type(data_element))
1313
1435
 
1436
+ def writeSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1437
+ policies = sr_interface.getInvalidationPolicies()
1438
+ if len(policies) > 0:
1439
+ policies_tag = ET.SubElement(element, "INVALIDATION-POLICYS")
1440
+ for policy in policies:
1441
+ child_element = ET.SubElement(policies_tag, "INVALIDATION-POLICY")
1442
+ self.setChildElementOptionalRefType(child_element, "DATA-ELEMENT-REF", policy.getDataElementRef())
1443
+ self.setChildElementOptionalLiteral(child_element, "HANDLE-INVALID", policy.getHandleInvalid())
1444
+
1314
1445
  def writeSenderReceiverInterface(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1315
1446
  self.logger.debug("writeSenderReceiverInterface %s" % sr_interface.short_name)
1316
1447
  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)
1448
+ self.setIdentifiable(child_element, sr_interface)
1449
+ self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.getIsService())
1450
+ self.writeSenderReceiverInterfaceDataElements(child_element, sr_interface)
1320
1451
 
1321
1452
  def writerBswModuleDescriptionImplementedEntry(self, element: ET.Element, desc: BswModuleDescription):
1322
1453
  entries = desc.getImplementedEntries()
@@ -1327,7 +1458,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1327
1458
  self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
1328
1459
 
1329
1460
  def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1330
- self.writeIdentifiable(element, prototype)
1461
+ self.setIdentifiable(element, prototype)
1331
1462
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1332
1463
 
1333
1464
  def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
@@ -1346,9 +1477,10 @@ class ARXMLWriter(AbstractARXMLWriter):
1346
1477
  self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
1347
1478
 
1348
1479
  def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1349
- self.writeIdentifiable(element, entity)
1480
+ self.setIdentifiable(element, entity)
1350
1481
  self.writeCanEnterExclusiveAreaRefs(element, entity)
1351
- self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.minimum_start_interval)
1482
+ self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.getMinimumStartInterval())
1483
+ self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.getSwAddrMethodRef())
1352
1484
 
1353
1485
  def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
1354
1486
  mode_group_refs = entity.getManagedModeGroupRefs()
@@ -1360,7 +1492,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1360
1492
 
1361
1493
  def setBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
1362
1494
  self.setExecutableEntity(element, entity)
1363
- self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implemented_entry_ref)
1495
+ self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implementedEntryRef)
1364
1496
  self.writeBswModuleEntityManagedModeGroup(element, entity)
1365
1497
 
1366
1498
  def setBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
@@ -1386,7 +1518,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1386
1518
  self._raiseError("Unsupported BswModuleEntity <%s>" % type(entity))
1387
1519
 
1388
1520
  def setBswEvent(self, element: ET.Element, event: BswEvent):
1389
- self.writeIdentifiable(element, event)
1521
+ self.setIdentifiable(element, event)
1390
1522
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1391
1523
 
1392
1524
  def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
@@ -1453,7 +1585,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1453
1585
  def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
1454
1586
  self.logger.debug("writeBswModuleDescription %s" % desc.short_name)
1455
1587
  child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
1456
- self.writeIdentifiable(child_element, desc)
1588
+ self.setIdentifiable(child_element, desc)
1457
1589
  self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.module_id)
1458
1590
  self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
1459
1591
  self.writeProvidedModeGroup(child_element, desc)
@@ -1471,7 +1603,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1471
1603
  def writeBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
1472
1604
  self.logger.debug("writeBswModuleDescription %s" % entry.short_name)
1473
1605
  child_element = ET.SubElement(element, "BSW-MODULE-ENTRY")
1474
- self.writeIdentifiable(child_element, entry)
1606
+ self.setIdentifiable(child_element, entry)
1475
1607
  self.setChildElementOptionalNumericalValue(child_element, "SERVICE-ID", entry.service_id)
1476
1608
  self.setChildElementOptionalBooleanValue(child_element, "IS-REENTRANT", entry.is_reentrant)
1477
1609
  self.setChildElementOptionalBooleanValue(child_element, "IS-SYNCHRONOUS", entry.is_synchronous)
@@ -1498,7 +1630,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1498
1630
  def setSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1499
1631
  self.logger.debug("writeBswModuleDescription %s" % mapping.short_name)
1500
1632
  child_element = ET.SubElement(element, "SWC-BSW-MAPPING")
1501
- self.writeIdentifiable(child_element, mapping)
1633
+ self.setIdentifiable(child_element, mapping)
1502
1634
  self.setChildElementOptionalRefType(child_element, "BSW-BEHAVIOR-REF", mapping.bswBehaviorRef)
1503
1635
  self.writeSwcBswRunnableMappings(child_element, mapping)
1504
1636
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.swcBehaviorRef)
@@ -1545,15 +1677,17 @@ class ARXMLWriter(AbstractARXMLWriter):
1545
1677
  sub_elements_tag = ET.SubElement(element, "SUB-ELEMENTS")
1546
1678
  for type_element in sub_elements:
1547
1679
  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)
1680
+ self.setIdentifiable(child_element, type_element)
1681
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE", type_element.getArraySize())
1682
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", type_element.getArraySizeSemantics())
1683
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.getSwDataDefProps())
1550
1684
 
1551
1685
  def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1552
1686
  self.logger.debug("writeImplementationDataType %s" % data_type.short_name)
1553
1687
  child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
1554
1688
  self.writeAutosarDataType(child_element, data_type)
1555
- self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1556
1689
  self.writeImplementationDataTypeElements(child_element, data_type)
1690
+ self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1557
1691
 
1558
1692
  def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1559
1693
  arguments = parent.getArgumentDataPrototypes()
@@ -1561,10 +1695,11 @@ class ARXMLWriter(AbstractARXMLWriter):
1561
1695
  arguments_tag = ET.SubElement(element, "ARGUMENTS")
1562
1696
  for prototype in arguments:
1563
1697
  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)
1698
+ self.setIdentifiable(child_element, prototype)
1699
+ self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
1700
+ self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.typeTRef)
1567
1701
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
1702
+ self.setChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY", prototype.server_argument_impl_policy)
1568
1703
 
1569
1704
  def writePossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
1570
1705
  error_refs = parent.getPossbileErrorRefs()
@@ -1576,7 +1711,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1576
1711
  def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
1577
1712
  self.logger.debug("writeClientServerOperation %s" % operation.short_name)
1578
1713
  child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
1579
- self.writeIdentifiable(child_element, operation)
1714
+ self.setIdentifiable(child_element, operation)
1580
1715
  self.writeArgumentDataPrototypes(child_element, operation)
1581
1716
  self.writePossibleErrorRefs(child_element, operation)
1582
1717
 
@@ -1593,7 +1728,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1593
1728
  def writeApplicationError(self, element: ET.Element, error: ApplicationError):
1594
1729
  self.logger.debug("writeApplicationError %s" % error.short_name)
1595
1730
  child_element = ET.SubElement(element, "APPLICATION-ERROR")
1596
- self.writeIdentifiable(child_element, error)
1731
+ self.setIdentifiable(child_element, error)
1597
1732
  self.setChildElementOptionalNumericalValue(child_element, "ERROR-CODE", error.error_code)
1598
1733
 
1599
1734
  def writePossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
@@ -1607,8 +1742,8 @@ class ARXMLWriter(AbstractARXMLWriter):
1607
1742
  self._raiseError("Unsupported PossibleError %s" % type(error))
1608
1743
 
1609
1744
  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)
1745
+ self.setIdentifiable(element, port_interface)
1746
+ self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.isService)
1612
1747
  self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
1613
1748
 
1614
1749
  def writeClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
@@ -1666,7 +1801,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1666
1801
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
1667
1802
  self.logger.debug("writeSwRecordLayout %s" % layout.short_name)
1668
1803
  child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
1669
- self.writeIdentifiable(child_element, layout)
1804
+ self.setIdentifiable(child_element, layout)
1670
1805
  self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", layout.swRecordLayoutGroup)
1671
1806
 
1672
1807
  def writeSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
@@ -1705,13 +1840,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1705
1840
  def writeDataTypeMappingSet(self, element: ET.Element, mapping_set: DataTypeMappingSet):
1706
1841
  self.logger.debug("writeDataTypeMappingSet %s" % mapping_set.short_name)
1707
1842
  child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-SET")
1708
- self.writeIdentifiable(child_element, mapping_set)
1843
+ self.setIdentifiable(child_element, mapping_set)
1709
1844
  self.writeDataTypeMaps(child_element, mapping_set)
1710
1845
  self.writeModeRequestTypeMaps(child_element, mapping_set)
1711
1846
 
1712
1847
  def setModeDeclaration(self, element: ET.Element, mode_declaration: ModeDeclaration):
1713
1848
  child_element = ET.SubElement(element, "MODE-DECLARATION")
1714
- self.writeIdentifiable(child_element, mode_declaration)
1849
+ self.setIdentifiable(child_element, mode_declaration)
1715
1850
  self.setChildElementOptionalNumericalValue(child_element, "VALUE", mode_declaration.getValue())
1716
1851
 
1717
1852
  def writeModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
@@ -1724,7 +1859,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1724
1859
  def writeModeDeclarationGroup(self, element: ET.Element, group: ModeDeclarationGroup):
1725
1860
  self.logger.debug("writeModeDeclarationGroup %s" % group.short_name)
1726
1861
  child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP")
1727
- self.writeIdentifiable(child_element, group)
1862
+ self.setIdentifiable(child_element, group)
1728
1863
  self.setChildElementOptionalRefType(child_element, "INITIAL-MODE-REF", group._initial_mode_ref)
1729
1864
  self.writeModeDeclarationGroupModeDeclaration(child_element, group)
1730
1865
  self.setChildElementOptionalNumericalValue(child_element, "ON-TRANSITION-VALUE", group.getOnTransitionValue())
@@ -1734,7 +1869,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1734
1869
  if len(mode_groups) > 0:
1735
1870
  mode_group = mode_groups[0]
1736
1871
  child_element = ET.SubElement(element, "MODE-GROUP")
1737
- self.writeIdentifiable(child_element, mode_group)
1872
+ self.setIdentifiable(child_element, mode_group)
1738
1873
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", mode_group.type_tref)
1739
1874
 
1740
1875
  def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
@@ -1751,7 +1886,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1751
1886
 
1752
1887
  def writeEOCExecutableEntityRef(self, element: ET.Element, entity_ref: EOCExecutableEntityRef):
1753
1888
  child_element = ET.SubElement(element, "EOC-EXECUTABLE-ENTITY-REF")
1754
- self.writeIdentifiable(child_element, entity_ref)
1889
+ self.setIdentifiable(child_element, entity_ref)
1755
1890
  self.setEOCExecutableEntityRefSuccessorRefs(child_element, entity_ref.getSuccessorRefs())
1756
1891
 
1757
1892
  def writeExecutionOrderConstraintOrderedElement(self, element: ET.Element, constraint: ExecutionOrderConstraint):
@@ -1767,7 +1902,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1767
1902
  def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
1768
1903
  self.logger.debug("writeExecutionOrderConstraint %s" % constraint.short_name)
1769
1904
  child_element = ET.SubElement(element, "EXECUTION-ORDER-CONSTRAINT")
1770
- self.writeIdentifiable(child_element, constraint)
1905
+ self.setIdentifiable(child_element, constraint)
1771
1906
  self.writeExecutionOrderConstraintOrderedElement(child_element, constraint)
1772
1907
 
1773
1908
  def writeTimingRequirements(self, element: ET.Element, extension: TimingExtension):
@@ -1786,7 +1921,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1786
1921
  def writeSwcTiming(self, element: ET.Element, timing: SwcTiming):
1787
1922
  self.logger.debug("writeSWcTiming %s" % timing.short_name)
1788
1923
  child_element = ET.SubElement(element, "SWC-TIMING")
1789
- self.writeIdentifiable(child_element, timing)
1924
+ self.setIdentifiable(child_element, timing)
1790
1925
  self.writeTimingExtension(child_element, timing)
1791
1926
 
1792
1927
  def writePduToFrameMappings(self, element: ET.Element, parent: Frame):
@@ -1795,13 +1930,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1795
1930
  mappings_tags = ET.SubElement(element, "PDU-TO-FRAME-MAPPINGS")
1796
1931
  for mapping in mappings:
1797
1932
  child_element = ET.SubElement(mappings_tags, "PDU-TO-FRAME-MAPPING")
1798
- self.writeIdentifiable(child_element, mapping)
1933
+ self.setIdentifiable(child_element, mapping)
1799
1934
  self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.packingByteOrder)
1800
1935
  self.setChildElementOptionalRefType(child_element, "PDU-REF", mapping.pduRef)
1801
1936
  self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.startPosition)
1802
1937
 
1803
1938
  def writeFrame(self, element: ET.Element, frame: Frame):
1804
- self.writeIdentifiable(element, frame)
1939
+ self.setIdentifiable(element, frame)
1805
1940
  self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
1806
1941
  self.writePduToFrameMappings(element, frame)
1807
1942
 
@@ -1810,41 +1945,376 @@ class ARXMLWriter(AbstractARXMLWriter):
1810
1945
  child_element = ET.SubElement(element, "LIN-UNCONDITIONAL-FRAME")
1811
1946
  self.writeFrame(child_element, frame)
1812
1947
 
1948
+ def writeNmNode(self, element: ET.Element, nm_node: NmNode):
1949
+ self.setChildElementOptionalRefType(element, "CONTROLLER-REF", nm_node.getControllerRef())
1950
+ self.setChildElementOptionalRefType(element, "NM-IF-ECU-REF", nm_node.getNmIfEcuRef())
1951
+ self.setChildElementOptionalNumericalValue(element, "NM-NODE-ID", nm_node.getNmNodeId())
1952
+
1953
+ refs = nm_node.getRxNmPduRefs()
1954
+ if len(refs) > 0:
1955
+ refs_tag = ET.SubElement(element, "RX-NM-PDU-REFS")
1956
+ for ref in refs:
1957
+ self.setChildElementOptionalRefType(refs_tag, "RX-NM-PDU-REF", ref)
1958
+
1959
+ refs = nm_node.getTxNmPduRefs()
1960
+ if len(refs) > 0:
1961
+ refs_tag = ET.SubElement(element, "TX-NM-PDU-REFS")
1962
+ for ref in refs:
1963
+ self.setChildElementOptionalRefType(refs_tag, "TX-NM-PDU-REF", ref)
1964
+
1965
+ def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
1966
+ self.logger.debug("writeCanNmNode %s" % nm_node.short_name)
1967
+ child_element = ET.SubElement(element, "CAN-NM-NODE")
1968
+ self.setIdentifiable(child_element, nm_node)
1969
+ self.writeNmNode(child_element, nm_node)
1970
+
1971
+ self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
1972
+ self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
1973
+ self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
1974
+
1975
+ def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
1976
+ nodes = parent.getNmNodes()
1977
+ if len(nodes) > 0:
1978
+ child_element = ET.SubElement(element, "NM-NODES")
1979
+ for node in nodes:
1980
+ if isinstance(node, CanNmNode):
1981
+ self.writeCanNmNode(child_element, node)
1982
+ else:
1983
+ self._raiseError("Unsupported Nm Node <%s>" % type(node))
1984
+
1985
+ def setCanNmClusterCoupling(self, element: ET.Element, coupling: CanNmClusterCoupling):
1986
+ child_element = ET.SubElement(element, "CAN-NM-CLUSTER-COUPLING")
1987
+ refs = coupling.getCoupledClusterRefs()
1988
+ if len(refs) > 0:
1989
+ refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
1990
+ for ref in refs:
1991
+ self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
1992
+
1993
+ self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
1994
+ self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
1995
+
1996
+ def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
1997
+ self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
1998
+ couplings = config.getNmClusterCouplings()
1999
+ if len(couplings) > 0:
2000
+ child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
2001
+ for coupling in couplings:
2002
+ if isinstance(coupling, CanNmClusterCoupling):
2003
+ self.setCanNmClusterCoupling(child_element, coupling)
2004
+ else:
2005
+ self._raiseError("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2006
+
2007
+ def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
2008
+ self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
2009
+ self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
2010
+ self.setChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER", cluster.nmChannelSleepMaster)
2011
+ self.writeNmClusterNmNodes(element, cluster)
2012
+ self.setChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK", cluster.getNmSynchronizingNetwork())
2013
+
2014
+ def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2015
+ self.logger.debug("WriteCanNmCluster %s" % cluster.short_name)
2016
+ child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
2017
+ self.setIdentifiable(child_element, cluster)
2018
+ self.writeNmCluster(child_element, cluster)
2019
+
2020
+ self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ACTIVE", cluster.getNmBusloadReductionActive())
2021
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CAR-WAKE-UP-RX-ENABLED", cluster.getNmCarWakeUpRxEnabled())
2022
+ self.setChildElementOptionalNumericalValue(child_element, "NM-CBV-POSITION", cluster.getNmCbvPosition())
2023
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CHANNEL-ACTIVE", cluster.getNmChannelActive())
2024
+ self.setChildElementOptionalFloatValue(child_element, "NM-IMMEDIATE-NM-CYCLE-TIME", cluster.getNmImmediateNmCycleTime())
2025
+ self.setChildElementOptionalNumericalValue(child_element, "NM-IMMEDIATE-NM-TRANSMISSIONS", cluster.getNmImmediateNmTransmissions())
2026
+ self.setChildElementOptionalFloatValue(child_element, "NM-MESSAGE-TIMEOUT-TIME", cluster.getNmMessageTimeoutTime())
2027
+ self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-TIME", cluster.getNmMsgCycleTime())
2028
+ self.setChildElementOptionalFloatValue(child_element, "NM-NETWORK-TIMEOUT", cluster.getNmNetworkTimeout())
2029
+ self.setChildElementOptionalNumericalValue(child_element, "NM-NID-POSITION", cluster.getNmNidPosition())
2030
+ self.setChildElementOptionalFloatValue(child_element, "NM-REMOTE-SLEEP-INDICATION-TIME", cluster.getNmRemoteSleepIndicationTime())
2031
+ self.setChildElementOptionalFloatValue(child_element, "NM-REPEAT-MESSAGE-TIME", cluster.getNmRepeatMessageTime())
2032
+ self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2033
+ self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2034
+
2035
+ def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2036
+ clusters = parent.getNmClusters()
2037
+ if len(clusters) > 0:
2038
+ child_element = ET.SubElement(element, "NM-CLUSTERS")
2039
+ for cluster in clusters:
2040
+ if isinstance(cluster, CanNmCluster):
2041
+ self.writeCanNmCluster(child_element, cluster)
2042
+ else:
2043
+ self._raiseError("Unsupported Nm Cluster <%s>" % type(cluster))
2044
+
1813
2045
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
1814
- self.logger.debug("NmConfig %s" % config.short_name)
2046
+ self.logger.debug("WriteNmConfig %s" % config.short_name)
1815
2047
  child_element = ET.SubElement(element, "NM-CONFIG")
1816
- self.writeIdentifiable(child_element, config)
2048
+ self.setIdentifiable(child_element, config)
2049
+ self.writeNmConfigNmClusters(child_element, config)
2050
+ self.writeNmConfigNmClusterCouplings(child_element, config)
1817
2051
 
1818
2052
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
1819
2053
  self.logger.debug("NmPdu %s" % pdu.short_name)
1820
2054
  child_element = ET.SubElement(element, "NM-PDU")
1821
- self.writeIdentifiable(child_element, pdu)
2055
+ self.setIdentifiable(child_element, pdu)
2056
+ self.writeIPdu(child_element, pdu)
1822
2057
 
1823
2058
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
1824
2059
  self.logger.debug("NPdu %s" % pdu.short_name)
1825
2060
  child_element = ET.SubElement(element, "N-PDU")
1826
- self.writeIdentifiable(child_element, pdu)
2061
+ self.setIdentifiable(child_element, pdu)
2062
+ self.writeIPdu(child_element, pdu)
2063
+
2064
+ def writeIPdu(self, element: ET.Element, pdu: IPdu):
2065
+ self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
1827
2066
 
1828
2067
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
1829
2068
  self.logger.debug("DcmIPdu %s" % pdu.short_name)
1830
2069
  child_element = ET.SubElement(element, "DCM-I-PDU")
1831
- self.writeIdentifiable(child_element, pdu)
2070
+ self.setIdentifiable(child_element, pdu)
2071
+ self.writeIPdu(child_element, pdu)
2072
+ self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2073
+
2074
+ def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2075
+ self.logger.debug("SecuredIPdu %s" % pdu.short_name)
2076
+ child_element = ET.SubElement(element, "SECURED-I-PDU")
2077
+ self.setIdentifiable(child_element, pdu)
2078
+ self.writeIPdu(child_element, pdu)
1832
2079
 
1833
2080
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
1834
2081
  self.logger.debug("CanTpConfig %s" % config.short_name)
1835
2082
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
1836
- self.writeIdentifiable(child_element, config)
2083
+ self.setIdentifiable(child_element, config)
2084
+
2085
+ def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2086
+ ref_list = triggering.getFramePortRefs()
2087
+ if len(ref_list) > 0:
2088
+ frame_port_refs_tag = ET.SubElement(element, "FRAME-PORT-REFS")
2089
+ for ref in ref_list:
2090
+ self.setChildElementOptionalRefType(frame_port_refs_tag, "FRAME-PORT-REF", ref)
2091
+ self.setChildElementOptionalRefType(element, "FRAME-REF", triggering.getFrameRef())
2092
+
2093
+ refs = triggering.getPduTriggeringRefs()
2094
+ if len(refs) > 0:
2095
+ triggerings_tag = ET.SubElement(element, "PDU-TRIGGERINGS")
2096
+ for ref in refs:
2097
+ child_element = ET.SubElement(triggerings_tag, 'PDU-TRIGGERING-REF-CONDITIONAL')
2098
+ self.setChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF", ref)
2099
+
2100
+ def writeCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2101
+ self.logger.debug("WRite CanFrameTriggering %s" % triggering.getShortName())
2102
+ child_element = ET.SubElement(element, "CAN-FRAME-TRIGGERING")
2103
+ self.setIdentifiable(child_element, triggering)
2104
+ self.writeFrameTriggering(child_element, triggering)
2105
+ self.setChildElementOptionalLiteral(child_element, "CAN-ADDRESSING-MODE", triggering.getCanAddressingMode())
2106
+ self.setChildElementOptionalBooleanValue(child_element, "CAN-FD-FRAME-SUPPORT", triggering.getCanFdFrameSupport())
2107
+ self.setChildElementOptionalLiteral(child_element, "CAN-FRAME-RX-BEHAVIOR", triggering.getCanFrameRxBehavior())
2108
+ self.setChildElementOptionalLiteral(child_element, "CAN-FRAME-TX-BEHAVIOR", triggering.getCanFrameTxBehavior())
2109
+ self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2110
+ self.setChildElementRxIdentifierRange(child_element, "RX-IDENTIFIER-RANGE", triggering.getRxIdentifierRange())
2111
+
2112
+ def writeLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2113
+ self.logger.debug("Write LinFrameTriggering %s" % triggering.getShortName())
2114
+ child_element = ET.SubElement(element, "LIN-FRAME-TRIGGERING")
2115
+ self.setIdentifiable(child_element, triggering)
2116
+ self.writeFrameTriggering(child_element, triggering)
2117
+ self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2118
+ self.setChildElementOptionalLiteral(child_element, "LIN-CHECKSUM", triggering.getLinChecksum())
2119
+
2120
+ def writeISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2121
+ self.logger.debug("Write ISignalTriggering %s" % triggering.getShortName())
2122
+ child_element = ET.SubElement(element, "I-SIGNAL-TRIGGERING")
2123
+ self.setIdentifiable(child_element, triggering)
2124
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", triggering.getISignalGroupRef())
2125
+ ref_list = triggering.getISignalPortRefs()
2126
+ if len(ref_list) > 0:
2127
+ i_signal_port_refs_tag = ET.SubElement(child_element, "I-SIGNAL-PORT-REFS")
2128
+ for ref in ref_list:
2129
+ self.setChildElementOptionalRefType(i_signal_port_refs_tag, "I-SIGNAL-PORT-REF", ref)
2130
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", triggering.getISignalRef())
2131
+
2132
+ def writePduTriggering(self, element: ET.Element, triggering: PduTriggering):
2133
+ self.logger.debug("Write PduTriggering %s" % triggering.getShortName())
2134
+ child_element = ET.SubElement(element, "PDU-TRIGGERING")
2135
+ self.setIdentifiable(child_element, triggering)
2136
+ ref_list = triggering.getIPduPortRefs()
2137
+ if len(ref_list) > 0:
2138
+ i_signal_port_refs_tag = ET.SubElement(child_element, "I-PDU-PORT-REFS")
2139
+ for ref in ref_list:
2140
+ self.setChildElementOptionalRefType(i_signal_port_refs_tag, "I-PDU-PORT-REF", ref)
2141
+ self.setChildElementOptionalRefType(child_element, "I-PDU-REF", triggering.getIPduRef())
2142
+
2143
+ refs = triggering.getISignalTriggeringRefs()
2144
+ if len(refs) > 0:
2145
+ triggerings_tag = ET.SubElement(child_element, "I-SIGNAL-TRIGGERINGS")
2146
+ for ref in refs:
2147
+ child_element = ET.SubElement(triggerings_tag, 'I-SIGNAL-TRIGGERING-REF-CONDITIONAL')
2148
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF", ref)
2149
+
2150
+ def writePhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2151
+ connectors = channel.getCommConnectorRefs()
2152
+ if len(connectors) > 0:
2153
+ connectors_tag = ET.SubElement(element, "COMM-CONNECTORS")
2154
+ for connector in connectors:
2155
+ child_element = ET.SubElement(connectors_tag, 'COMMUNICATION-CONNECTOR-REF-CONDITIONAL')
2156
+ self.setChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF", connector)
2157
+
2158
+ triggerings = channel.getFrameTriggerings()
2159
+ if len(triggerings) > 0:
2160
+ triggerings_tag = ET.SubElement(element, "FRAME-TRIGGERINGS")
2161
+ for triggering in triggerings:
2162
+ if isinstance(triggering, CanFrameTriggering):
2163
+ self.writeCanFrameTriggering(triggerings_tag, triggering)
2164
+ elif isinstance(triggering, LinFrameTriggering):
2165
+ self.writeLinFrameTriggering(triggerings_tag, triggering)
2166
+ else:
2167
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % type(triggering))
2168
+
2169
+ triggerings = channel.getISignalTriggerings()
2170
+ if len(triggerings) > 0:
2171
+ triggerings_tag = ET.SubElement(element, "I-SIGNAL-TRIGGERINGS")
2172
+ for triggering in triggerings:
2173
+ if isinstance(triggering, ISignalTriggering):
2174
+ self.writeISignalTriggering(triggerings_tag, triggering)
2175
+ else:
2176
+ raise NotImplementedError("Unsupported ISignalTriggering <%s>" % type(triggering))
2177
+
2178
+ triggerings = channel.getPduTriggerings()
2179
+ if len(triggerings) > 0:
2180
+ triggerings_tag = ET.SubElement(element, "PDU-TRIGGERINGS")
2181
+ for triggering in triggerings:
2182
+ if isinstance(triggering, PduTriggering):
2183
+ self.writePduTriggering(triggerings_tag, triggering)
2184
+ else:
2185
+ raise NotImplementedError("Unsupported PduTriggering <%s>" % type(triggering))
2186
+
2187
+ def writeCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2188
+ self.logger.debug("CanPhysicalChannel %s" % channel.short_name)
2189
+ child_element = ET.SubElement(element, "CAN-PHYSICAL-CHANNEL")
2190
+ self.setIdentifiable(child_element, channel)
2191
+ self.writePhysicalChannel(child_element, channel)
2192
+
2193
+ def writeLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2194
+ self.logger.debug("LinPhysicalChannel %s" % channel.short_name)
2195
+ child_element = ET.SubElement(element, "LIN-PHYSICAL-CHANNEL")
2196
+ self.setIdentifiable(child_element, channel)
2197
+ self.writePhysicalChannel(child_element, channel)
2198
+
2199
+ def writeCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2200
+ channels = cluster.getPhysicalChannels()
2201
+ if len(channels) > 0:
2202
+ child_element = ET.SubElement(element, "PHYSICAL-CHANNELS")
2203
+ for channel in channels:
2204
+ if isinstance(channel, CanPhysicalChannel):
2205
+ self.writeCanPhysicalChannel(child_element, channel)
2206
+ elif isinstance(channel, LinPhysicalChannel):
2207
+ self.writeLinPhysicalChannel(child_element, channel)
2208
+ else:
2209
+ raise NotImplementedError("Unsupported Physical Channel <%s>" % type(channel))
2210
+
2211
+ def writeCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
2212
+ self.setChildElementOptionalNumericalValue(element, "BAUDRATE", cluster.getBaudrate())
2213
+ self.writeCommunicationClusterPhysicalChannels(element, cluster)
2214
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-NAME", cluster.getProtocolName())
2215
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", cluster.getProtocolVersion())
2216
+
2217
+ def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2218
+ self.setChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE", cluster.getCanFdBaudrate())
1837
2219
 
1838
2220
  def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
1839
2221
  self.logger.debug("LinCluster %s" % cluster.short_name)
1840
2222
  child_element = ET.SubElement(element, "LIN-CLUSTER")
1841
- self.writeIdentifiable(child_element, cluster)
2223
+ self.setIdentifiable(child_element, cluster)
2224
+ child_element = ET.SubElement(child_element, "LIN-CLUSTER-VARIANTS")
2225
+ child_element = ET.SubElement(child_element, "LIN-CLUSTER-CONDITIONAL")
2226
+ self.writeCommunicationCluster(child_element, cluster)
2227
+
2228
+ def writeCanCluster(self, element: ET.Element, cluster: CanCluster):
2229
+ self.logger.debug("CanCluster %s" % cluster.short_name)
2230
+ child_element = ET.SubElement(element, "CAN-CLUSTER")
2231
+ self.setIdentifiable(child_element, cluster)
2232
+
2233
+ child_element = ET.SubElement(child_element, "CAN-CLUSTER-VARIANTS")
2234
+ child_element = ET.SubElement(child_element, "CAN-CLUSTER-CONDITIONAL")
2235
+ self.writeCommunicationCluster(child_element, cluster)
2236
+ self.readAbstractCanCluster(child_element, cluster)
1842
2237
 
1843
2238
  def writeCanFrame(self, element: ET.Element, frame: CanFrame):
1844
2239
  self.logger.debug("CanFrame %s" % frame.short_name)
1845
2240
  child_element = ET.SubElement(element, "CAN-FRAME")
1846
2241
  self.writeFrame(child_element, frame)
1847
2242
 
2243
+ def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
2244
+ self.logger.debug("EcuInstance %s" % instance.short_name)
2245
+ child_element = ET.SubElement(element, "ECU-INSTANCE")
2246
+ self.setIdentifiable(child_element, instance)
2247
+
2248
+ def writeSystemSignalGroup(self, element: ET.Element, group: SystemSignalGroup):
2249
+ self.logger.debug("Write SystemSignalGroup %s" % group.short_name)
2250
+ child_element = ET.SubElement(element, "SYSTEM-SIGNAL-GROUP")
2251
+ self.setIdentifiable(child_element, group)
2252
+ signal_refs = group.getSystemSignalRefs()
2253
+ if len(signal_refs) > 0:
2254
+ signal_refs_tag = ET.SubElement(child_element, "SYSTEM-SIGNAL-REFS")
2255
+ for signal_ref in signal_refs:
2256
+ self.setChildElementOptionalRefType(signal_refs_tag, "SYSTEM-SIGNAL-REF", signal_ref)
2257
+
2258
+ def setSenderReceiverToSignalMapping(self, element: ET.Element, mapping: SenderReceiverToSignalMapping):
2259
+ child_element = ET.SubElement(element, "SENDER-RECEIVER-TO-SIGNAL-MAPPING")
2260
+ self.setVariableDataPrototypeInSystemInstanceRef(child_element, "DATA-ELEMENT-IREF", mapping.getDataElementIRef())
2261
+ self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", mapping.getSystemSignalRef())
2262
+
2263
+ def setSenderReceiverToSignalGroupMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
2264
+ child_element = ET.SubElement(element, "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING")
2265
+ self.setVariableDataPrototypeInSystemInstanceRef(child_element, "DATA-ELEMENT-IREF", mapping.getDataElementIRef())
2266
+ self.setChildElementOptionalRefType(child_element, "SIGNAL-GROUP-REF", mapping.getSignalGroupRef())
2267
+
2268
+ def writeSystemMappingDataMappings(self, element: ET.Element, system_mapping: SystemMapping):
2269
+ data_mappings = system_mapping.getDataMappings()
2270
+ if len(data_mappings) > 0:
2271
+ child_element = ET.SubElement(element, "DATA-MAPPINGS")
2272
+ for data_mapping in data_mappings:
2273
+ if isinstance(data_mapping, SenderReceiverToSignalMapping):
2274
+ self.setSenderReceiverToSignalMapping(child_element, data_mapping)
2275
+ elif isinstance(data_mapping, SenderReceiverToSignalGroupMapping):
2276
+ self.setSenderReceiverToSignalGroupMapping(child_element, data_mapping)
2277
+ else:
2278
+ raise NotImplementedError("Unsupported Data Mapping %s" % type(data_mapping))
2279
+
2280
+ def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
2281
+ self.logger.debug("Write SystemMapping %s" % mapping.short_name)
2282
+ child_element = ET.SubElement(element, "SYSTEM-MAPPING")
2283
+ self.setIdentifiable(child_element, mapping)
2284
+ self.writeSystemMappingDataMappings(child_element, mapping)
2285
+
2286
+ def writeSystemMappings(self, element: ET.Element, system: System):
2287
+ mappings = system.getMappings()
2288
+ if len(mappings) > 0:
2289
+ mappings_tag = ET.SubElement(element, "MAPPINGS")
2290
+ for mapping in mappings:
2291
+ if isinstance(mapping, SystemMapping):
2292
+ self.writeSystemMapping(mappings_tag, mapping)
2293
+ else:
2294
+ raise NotImplementedError("Unsupported Mapping %s" % type(mapping))
2295
+
2296
+ def writeSystem(self, element: ET.Element, system: System):
2297
+ self.logger.debug("Write System %s" % system.short_name)
2298
+ child_element = ET.SubElement(element, "SYSTEM")
2299
+ self.setARElement(child_element, system)
2300
+
2301
+ self.setChildElementOptionalLiteral(child_element, "ECU-EXTRACT-VERSION", system.getEcuExtractVersion())
2302
+ refs = system.getFibexElementRefs()
2303
+ if len(refs) > 0:
2304
+ fibex_elements_tag = ET.SubElement(child_element, "FIBEX-ELEMENTS")
2305
+ for ref in refs:
2306
+ fibex_element_ref_conditional_tag = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
2307
+ self.setChildElementOptionalRefType(fibex_element_ref_conditional_tag, "FIBEX-ELEMENT-REF", ref)
2308
+
2309
+ self.writeSystemMappings(child_element, system)
2310
+
2311
+ def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
2312
+ self.logger.debug("Write PhysicalDimension %s" % dimension.short_name)
2313
+ child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
2314
+ self.setARElement(child_element, dimension)
2315
+ self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
2316
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
2317
+
1848
2318
  def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
1849
2319
  if len(mappings) > 0:
1850
2320
  mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
@@ -1856,20 +2326,192 @@ class ARXMLWriter(AbstractARXMLWriter):
1856
2326
  def writeGateway(self, element: ET.Element, gateway: Gateway):
1857
2327
  self.logger.debug("Gateway %s" % gateway.short_name)
1858
2328
  child_element = ET.SubElement(element, "GATEWAY")
1859
- self.writeIdentifiable(child_element, gateway)
2329
+ self.setIdentifiable(child_element, gateway)
1860
2330
  self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
1861
2331
  self.setISignalMappings(child_element, gateway.getSignalMappings())
1862
2332
 
1863
2333
  def writeISignal(self, element: ET.Element, signal: ISignal):
1864
2334
  self.logger.debug("ISignal %s" % signal.short_name)
1865
2335
  child_element = ET.SubElement(element, "I-SIGNAL")
1866
- self.writeIdentifiable(child_element, signal)
2336
+ self.setIdentifiable(child_element, signal)
1867
2337
  self.setChildElementOptionalLiteral(child_element, "DATA-TYPE-POLICY", signal.dataTypePolicy)
1868
2338
  self.setInitValue(child_element, signal.initValue)
1869
2339
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH", signal.length)
1870
2340
  self.setSwDataDefProps(child_element, "NETWORK-REPRESENTATION-PROPS", signal.networkRepresentationProps)
1871
2341
  self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", signal.systemSignalRef)
1872
2342
 
2343
+ def writeEcucValueCollectionEcucValues(self, element: ET.Element, collection: EcucValueCollection):
2344
+ value_refs = collection.getEcucValueRefs()
2345
+ if len(value_refs) > 0:
2346
+ ecuc_values_tag = ET.SubElement(element, "ECUC-VALUES")
2347
+ for value_ref in value_refs:
2348
+ child_element = ET.SubElement(ecuc_values_tag, "ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL")
2349
+ self.setChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF", value_ref)
2350
+
2351
+ def writeEcucValueCollection(self, element: ET.Element, collection: EcucValueCollection):
2352
+ self.logger.debug("EcucValueCollection %s" % collection.short_name)
2353
+ child_element = ET.SubElement(element, "ECUC-VALUE-COLLECTION")
2354
+ self.setIdentifiable(child_element, collection)
2355
+ self.setChildElementOptionalRefType(child_element, "ECU-EXTRACT-REF", collection.getEcuExtractRef())
2356
+ self.writeEcucValueCollectionEcucValues(child_element, collection)
2357
+
2358
+ def writeEcucContainerValueSubContainers(self, element: ET.Element, container: EcucContainerValue):
2359
+ sub_containers = container.getSubContainers()
2360
+ if len(sub_containers) > 0:
2361
+ sub_containers_tag = ET.SubElement(element, "SUB-CONTAINERS")
2362
+ for sub_container in sub_containers:
2363
+ if isinstance(sub_container, EcucContainerValue):
2364
+ self.writeEcucContainValue(sub_containers_tag, sub_container)
2365
+ else:
2366
+ raise NotImplementedError("Unsupported Sub Container %s" % type(container))
2367
+
2368
+ def writeEcucParameterValue(self, element: ET.Element, param_value: EcucParameterValue):
2369
+ self.setChildElementOptionalRefType(element, "DEFINITION-REF", param_value.getDefinitionRef())
2370
+ self.setAnnotations(element, param_value.getAnnotations())
2371
+
2372
+ def setEcucTextualParamValue(self, element: ET.Element, param_value: EcucTextualParamValue):
2373
+ child_element = ET.SubElement(element, "ECUC-TEXTUAL-PARAM-VALUE")
2374
+ self.writeEcucParameterValue(child_element, param_value)
2375
+ self.setChildElementOptionalLiteral(child_element, "VALUE", param_value.getValue())
2376
+
2377
+ def setEcucNumericalParamValue(self, element: ET.Element, param_value: EcucNumericalParamValue):
2378
+ child_element = ET.SubElement(element, "ECUC-NUMERICAL-PARAM-VALUE")
2379
+ self.writeEcucParameterValue(child_element, param_value)
2380
+ self.setChildElementOptionalNumericalValue(child_element, "VALUE", param_value.getValue())
2381
+
2382
+ def writeEcucContainerValueParameterValues(self, element: ET.Element, container_value: EcucContainerValue):
2383
+ param_values = container_value.getParameterValues()
2384
+ if len(param_values) > 0:
2385
+ child_element = ET.SubElement(element, "PARAMETER-VALUES")
2386
+ for param_value in param_values:
2387
+ if isinstance(param_value, EcucTextualParamValue):
2388
+ self.setEcucTextualParamValue(child_element, param_value)
2389
+ elif isinstance(param_value, EcucNumericalParamValue):
2390
+ self.setEcucNumericalParamValue(child_element, param_value)
2391
+ else:
2392
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % type(param_value))
2393
+
2394
+ def writeEcucAbstractReferenceValue(self, element: ET.Element, value: EcucAbstractReferenceValue):
2395
+ self.setChildElementOptionalRefType(element, "DEFINITION-REF", value.getDefinitionRef())
2396
+ self.setAnnotations(element, value.getAnnotations())
2397
+
2398
+ def setEcucReferenceValue(self, element: ET.Element, value = EcucReferenceValue()):
2399
+ child_element = ET.SubElement(element, "ECUC-REFERENCE-VALUE")
2400
+ self.writeEcucAbstractReferenceValue(child_element, value)
2401
+ self.setChildElementOptionalRefType(child_element, "VALUE-REF", value.getValueRef())
2402
+ return value
2403
+
2404
+ def setAnyInstanceRef(self, element: ET.Element, key, instance_ref: AnyInstanceRef):
2405
+ if instance_ref is not None:
2406
+ child_element = ET.SubElement(element, key)
2407
+ self.setChildElementOptionalRefType(child_element, "BASE-REF", instance_ref.getBaseRef())
2408
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF", instance_ref.getContextElementRef())
2409
+ self.setChildElementOptionalRefType(child_element, "TARGET-REF", instance_ref.getTargetRef())
2410
+ return instance_ref
2411
+
2412
+ def setEcucInstanceReferenceValue(self, element: ET.Element, value : EcucInstanceReferenceValue):
2413
+ child_element = ET.SubElement(element, "ECUC-INSTANCE-REFERENCE-VALUE")
2414
+ self.writeEcucAbstractReferenceValue(child_element, value)
2415
+ self.setAnyInstanceRef(child_element, "VALUE-IREF", value.getValueIRef())
2416
+ return value
2417
+
2418
+ def writeEcucContainerValueReferenceValues(self, element: ET.Element, container_value: EcucContainerValue):
2419
+ reference_values = container_value.getReferenceValues()
2420
+ if len(reference_values) > 0:
2421
+ child_element = ET.SubElement(element, "REFERENCE-VALUES")
2422
+ for reference_value in reference_values:
2423
+ if isinstance(reference_value, EcucReferenceValue):
2424
+ self.setEcucReferenceValue(child_element, reference_value)
2425
+ elif isinstance(reference_value, EcucInstanceReferenceValue):
2426
+ self.setEcucInstanceReferenceValue(child_element, reference_value)
2427
+ else:
2428
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % type(reference_value))
2429
+
2430
+ def writeEcucContainValue(self, element: ET.Element, container_value: EcucContainerValue):
2431
+ self.logger.debug("EcucContainerValue %s" % container_value.short_name)
2432
+ child_element = ET.SubElement(element, "ECUC-CONTAINER-VALUE")
2433
+ self.setIdentifiable(child_element, container_value)
2434
+ self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", container_value.getDefinitionRef())
2435
+ self.writeEcucContainerValueParameterValues(child_element, container_value)
2436
+ self.writeEcucContainerValueReferenceValues(child_element, container_value)
2437
+ self.writeEcucContainerValueSubContainers(child_element, container_value)
2438
+
2439
+ def writeEcucModuleConfigurationValuesContainers(self, element: ET.Element, value: EcucModuleConfigurationValues):
2440
+ containers = value.getContainers()
2441
+ if len(containers) > 0:
2442
+ containers_tag = ET.SubElement(element, "CONTAINERS")
2443
+ for container in containers:
2444
+ if isinstance(container, EcucContainerValue):
2445
+ self.writeEcucContainValue(containers_tag, container)
2446
+ else:
2447
+ raise NotImplementedError("Unsupported Container %s" % type(container))
2448
+
2449
+ def writeEcucModuleConfigurationValues(self, element: ET.Element, values: EcucModuleConfigurationValues):
2450
+ self.logger.debug("EcucModuleConfigurationValues %s" % values.short_name)
2451
+ child_element = ET.SubElement(element, "ECUC-MODULE-CONFIGURATION-VALUES")
2452
+ self.setIdentifiable(child_element, values)
2453
+ self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", values.getDefinitionRef())
2454
+ self.setChildElementOptionalLiteral(child_element, "IMPLEMENTATION-CONFIG-VARIANT", values.getImplementationConfigVariant())
2455
+ self.setChildElementOptionalRefType(child_element, "MODULE-DESCRIPTION-REF", values.getModuleDescriptionRef())
2456
+ self.writeEcucModuleConfigurationValuesContainers(child_element, values)
2457
+
2458
+ def writeISignalGroup(self, element: ET.Element, group: ISignalGroup):
2459
+ self.logger.debug("ISignalGroup %s" % group.short_name)
2460
+ child_element = ET.SubElement(element, "I-SIGNAL-GROUP")
2461
+ self.setIdentifiable(child_element, group)
2462
+ signal_refs = group.getISignalRefs()
2463
+ if len(signal_refs) > 0:
2464
+ signal_refs_tag = ET.SubElement(child_element, "I-SIGNAL-REFS")
2465
+ for signal_ref in signal_refs:
2466
+ self.setChildElementOptionalRefType(signal_refs_tag, "I-SIGNAL-REF", signal_ref)
2467
+ self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-GROUP-REF", group.getSystemSignalGroupRef())
2468
+
2469
+ def writeISignalIPduGroup(self, element: ET.Element, group: ISignalIPduGroup):
2470
+ self.logger.debug("ISignalIPduGroup %s" % group.short_name)
2471
+ child_element = ET.SubElement(element, "I-SIGNAL-I-PDU-GROUP")
2472
+ self.setIdentifiable(child_element, group)
2473
+ self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-DIRECTION", group.getCommunicationDirection())
2474
+ self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-MODE", group.getCommunicationMode())
2475
+ group_refs = group.getContainedISignalIPduGroupRefs()
2476
+ if len(group_refs) > 0:
2477
+ pdu_refs_tag = ET.SubElement(child_element, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REFS")
2478
+ for pdu_ref in group_refs:
2479
+ self.setChildElementOptionalRefType(pdu_refs_tag, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REF", pdu_ref)
2480
+ pdu_refs = group.getISignalIPduRefs()
2481
+ if len(pdu_refs) > 0:
2482
+ pdu_refs_tag = ET.SubElement(child_element, "I-SIGNAL-I-PDUS")
2483
+ for pdu_ref in pdu_refs:
2484
+ ref_conditional_tag = ET.SubElement(pdu_refs_tag, "I-SIGNAL-I-PDU-REF-CONDITIONAL")
2485
+ self.setChildElementOptionalRefType(ref_conditional_tag, "I-SIGNAL-I-PDU-REF", pdu_ref)
2486
+
2487
+ def writeSystemSignal(self, element: ET.Element, signal: SystemSignal):
2488
+ self.logger.debug("SystemSignal %s" % signal.short_name)
2489
+ child_element = ET.SubElement(element, "SYSTEM-SIGNAL")
2490
+ self.setIdentifiable(child_element, signal)
2491
+ self.setChildElementOptionalBooleanValue(child_element, "DYNAMIC-LENGTH", signal.getDynamicLength())
2492
+
2493
+ def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2494
+ mappings = parent.getISignalToPduMappings()
2495
+ if len(mappings) > 0:
2496
+ mappings_tag = ET.SubElement(element, "I-SIGNAL-TO-PDU-MAPPINGS")
2497
+ for mapping in mappings:
2498
+ child_element = ET.SubElement(mappings_tag, "I-SIGNAL-TO-I-PDU-MAPPING")
2499
+ self.setIdentifiable(child_element, mapping)
2500
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
2501
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", mapping.getISignalGroupRef())
2502
+ self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
2503
+ self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.getStartPosition())
2504
+ self.setChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY", mapping.getTransferProperty())
2505
+ self.setChildElementOptionalNumericalValue(child_element, "UPDATE-INDICATION-BIT-POSITION", mapping.getUpdateIndicationBitPosition())
2506
+
2507
+ def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
2508
+ self.logger.debug("ISignalIPdu %s" % i_pdu.short_name)
2509
+ child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
2510
+ self.setIdentifiable(child_element, i_pdu)
2511
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
2512
+ self.writeISignalToPduMappings(child_element, i_pdu)
2513
+ self.setChildElementOptionalLiteral(child_element, "UNUSED-BIT-PATTERN", i_pdu.getUnusedBitPattern())
2514
+
1873
2515
  def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
1874
2516
  if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
1875
2517
  self.writeComplexDeviceDriverSwComponentType(element, ar_element)
@@ -1939,10 +2581,14 @@ class ARXMLWriter(AbstractARXMLWriter):
1939
2581
  self.writeNPdu(element, ar_element)
1940
2582
  elif isinstance(ar_element, DcmIPdu):
1941
2583
  self.writeDcmIPdu(element, ar_element)
2584
+ elif isinstance(ar_element, SecuredIPdu):
2585
+ self.writeSecuredIPdu(element, ar_element)
1942
2586
  elif isinstance(ar_element, CanTpConfig):
1943
2587
  self.writeCanTpConfig(element, ar_element)
1944
2588
  elif isinstance(ar_element, LinCluster):
1945
2589
  self.writeLinCluster(element, ar_element)
2590
+ elif isinstance(ar_element, CanCluster):
2591
+ self.writeCanCluster(element, ar_element)
1946
2592
  elif isinstance(ar_element, CanFrame):
1947
2593
  self.writeCanFrame(element, ar_element)
1948
2594
  elif isinstance(ar_element, Gateway):
@@ -1959,7 +2605,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1959
2605
  for pkg in pkgs:
1960
2606
  pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
1961
2607
 
1962
- self.writeIdentifiable(pkg_tag, pkg)
2608
+ self.setIdentifiable(pkg_tag, pkg)
1963
2609
  self.logger.debug("writeARPackage %s" % pkg.full_name)
1964
2610
 
1965
2611
  if pkg.getTotalElement() > 0: