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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. armodel/cli/arxml_dump_cli.py +13 -13
  2. armodel/cli/memory_section_cli.py +76 -0
  3. armodel/cli/system_signal_cli.py +74 -0
  4. armodel/lib/__init__.py +2 -1
  5. armodel/lib/system_signal.py +37 -0
  6. armodel/models/__init__.py +6 -3
  7. armodel/models/annotation.py +27 -3
  8. armodel/models/ar_object.py +18 -6
  9. armodel/models/ar_package.py +124 -14
  10. armodel/models/ar_ref.py +109 -62
  11. armodel/models/bsw_module_template.py +37 -14
  12. armodel/models/common_structure.py +132 -147
  13. armodel/models/communication.py +1 -1
  14. armodel/models/data_prototype.py +41 -6
  15. armodel/models/datatype.py +11 -5
  16. armodel/models/fibex/can_communication.py +119 -3
  17. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  18. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  19. armodel/models/fibex/fibex_4_multiplatform.py +81 -88
  20. armodel/models/fibex/fibex_core/__init__.py +0 -0
  21. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  22. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  23. armodel/models/fibex/lin_communication.py +24 -3
  24. armodel/models/general_structure.py +101 -8
  25. armodel/models/m2/__init__.py +0 -0
  26. armodel/models/m2/autosar_templates/__init__.py +0 -0
  27. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  28. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  29. armodel/models/m2/autosar_templates/ecuc_description_template.py +268 -0
  30. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  31. armodel/models/m2/autosar_templates/sw_component_template/communication.py +316 -0
  32. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +0 -0
  33. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +149 -0
  34. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  35. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  36. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +54 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +39 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +26 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  41. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  42. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  43. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  44. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  45. armodel/models/m2/msr/__init__.py +0 -0
  46. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  47. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  48. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  49. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  50. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  51. armodel/models/m2/msr/documentation/__init__.py +0 -0
  52. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  53. armodel/models/multilanguage_data.py +15 -0
  54. armodel/models/per_instance_memory.py +34 -6
  55. armodel/models/port_prototype.py +12 -174
  56. armodel/models/sw_component.py +14 -216
  57. armodel/parser/abstract_arxml_parser.py +10 -1
  58. armodel/parser/arxml_parser.py +803 -186
  59. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  60. armodel/tests/test_armodel/models/test_ar_ref.py +3 -3
  61. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  62. armodel/tests/test_armodel/models/test_common_structure.py +3 -3
  63. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  64. armodel/tests/test_armodel/models/test_data_prototype.py +1 -1
  65. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  66. armodel/tests/test_armodel/models/test_port_interface.py +1 -1
  67. armodel/tests/test_armodel/parser/test_parse_bswmd.py +3 -3
  68. armodel/tests/test_armodel/parser/test_sw_components.py +2 -2
  69. armodel/writer/arxml_writer.py +832 -196
  70. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/METADATA +24 -1
  71. armodel-1.6.0.dist-info/RECORD +127 -0
  72. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/entry_points.txt +3 -1
  73. armodel-1.5.0.dist-info/RECORD +0 -91
  74. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/LICENSE +0 -0
  75. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/WHEEL +0 -0
  76. {armodel-1.5.0.dist-info → armodel-1.6.0.dist-info}/top_level.txt +0 -0
@@ -1,17 +1,32 @@
1
1
  from typing import List
2
2
  import xml.etree.ElementTree as ET
3
-
4
- from armodel.models.fibex.fibex_4_multiplatform import FrameMapping, IPduMapping, ISignalMapping
5
-
6
- from ..models.fibex.fibex_core import Frame
3
+ import os
4
+
5
+ from ..models.m2.autosar_templates.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
6
+ from ..models.m2.autosar_templates.sw_component_template.components.instance_refs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
7
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior import RunnableEntityArgument
8
+ from ..models.m2.msr.data_dictionary.data_def_properties import SwDataDefProps
9
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.mode_declaration_group import ModeAccessPoint, ModeSwitchPoint
10
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.server_call import ServerCallPoint
11
+ from ..models.m2.autosar_templates.sw_component_template.communication import ClientComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
12
+ from ..models.fibex.lin_communication import LinFrameTriggering
13
+ from ..models.fibex.fibex_core.core_topology import AbstractCanCluster, CanPhysicalChannel, CommunicationCluster, LinPhysicalChannel, PhysicalChannel
14
+ from ..models.m2.msr.documentation.block_elements import DocumentationBlock
15
+ from ..models.m2.autosar_templates.system_template import System, SystemMapping
16
+ from ..models.m2.autosar_templates.system_template.data_mapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
17
+ from ..models.m2.autosar_templates.system_template.network_management import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
18
+ from ..models.fibex.can_communication import CanFrameTriggering, RxIdentifierRange
19
+ from ..models.m2.autosar_templates.ecuc_description_template import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
20
+ from ..models.fibex.fibex_4_multiplatform import ISignalMapping
21
+ from ..models.fibex.fibex_core.core_communication import Frame, FrameTriggering, IPdu, ISignalIPdu, ISignalTriggering, PduTriggering
7
22
  from ..models.internal_behavior import IncludedDataTypeSet
8
23
  from ..models.timing import ExecutionOrderConstraint, TimingExtension
9
24
  from ..models.bsw_module_template import BswModeSenderPolicy
10
- from ..models.port_interface import ModeSwitchInterface, PortInterface
25
+ from ..models.m2.autosar_templates.sw_component_template.port_interface import InvalidationPolicy, ModeSwitchInterface, PortInterface
11
26
  from ..models.common_structure import IncludedModeDeclarationGroupSet, MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
12
27
  from ..models.implementation import BswImplementation, EngineeringObject
13
28
  from ..models.general_structure import MultilanguageReferrable
14
- from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
29
+ from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultiLanguageParagraph, MultilanguageLongName
15
30
  from ..models.data_def_properties import ValueList
16
31
  from ..models.record_layout import SwRecordLayoutGroup, SwRecordLayoutGroupContent, SwRecordLayoutV
17
32
  from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, BaseTypeDirectDefinition
@@ -22,20 +37,18 @@ from ..models.service_mapping import RoleBasedPortAssignment
22
37
  from ..models.ar_package import AUTOSAR, ARPackage
23
38
  from ..models.ar_object import ARLiteral
24
39
  from ..models.service_needs import RoleBasedDataAssignment
25
- from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, RModeGroupInAtomicSWCInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
26
- from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, ModeAccessPoint, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
27
- from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype
40
+ from ..models.ar_ref import AnyInstanceRef, ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, RefType, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
41
+ from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
42
+ from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
28
43
  from ..models.port_prototype import ModeSwitchReceiverComSpec, QueuedReceiverComSpec
29
44
  from ..models.annotation import Annotation, GeneralAnnotation
30
45
  from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
31
46
 
32
- from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
47
+ from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
33
48
  from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
34
49
  from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
35
- from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
50
+ from ..models import ImplementationDataType, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
36
51
  from ..models import RPortPrototype, PPortPrototype
37
- from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
38
- from ..models import SenderComSpec, NonqueuedSenderComSpec, ServerComSpec
39
52
  from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
40
53
  from ..models import Identifiable, AdminData, Sdg, Sd
41
54
  from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
@@ -45,8 +58,6 @@ from ..models import InternalBehavior, ExecutableEntity
45
58
  from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
46
59
  from ..models import TransmissionAcknowledgementRequest
47
60
  from ..models import BswModuleDescription, BswInternalBehavior, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
48
- from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
49
- from ..models import RecordValueSpecification
50
61
  from ..models import ApplicationRecordDataType
51
62
  from ..models import SwValueCont, SwValues
52
63
 
@@ -55,29 +66,31 @@ from .abstract_arxml_parser import AbstractARXMLParser
55
66
  class ARXMLParser(AbstractARXMLParser):
56
67
  def __init__(self, options=None) -> None:
57
68
  super().__init__(options)
69
+
70
+ def getChildElementRxIdentifierRange(self, element: ET.Element, key: str) -> RxIdentifierRange:
71
+ child_element = self.find(element, key)
72
+ range = None
73
+ if child_element is not None:
74
+ range = RxIdentifierRange()
75
+ range.setLowerCanId(self.getChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID")) \
76
+ .setUpperCanId(self.getChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID"))
77
+ return range
58
78
 
59
- def getShortName(self, element: ET.Element) -> str:
60
- child_element = self.find(element, "SHORT-NAME")
61
- if child_element is None:
62
- raise ValueError("Short Name is required")
63
- return child_element.text
64
-
65
79
  def readSd(self, element: ET.Element, sdg: Sdg):
66
80
  for child_element in self.findall(element, "./SD"):
67
81
  sd = Sd()
68
82
  if 'GID' in child_element.attrib:
69
- sd.gid = child_element.attrib['GID']
70
- sd.value = child_element.text
83
+ sd.setGID(child_element.attrib['GID'])
84
+ sd.setValue(child_element.text)
71
85
  sdg.addSd(sd)
72
86
 
73
87
  def getSdg(self, element: ET.Element) -> Sdg:
74
88
  sdg = Sdg()
75
89
  if 'GID' in element.attrib:
76
- sdg.gid = element.attrib["GID"]
90
+ sdg.setGID(element.attrib["GID"])
77
91
  self.readSd(element, sdg)
78
- child_element = self.find(element, "./SDG")
79
- if child_element is not None:
80
- sdg.sdg_contents_type = self.getSdg(child_element)
92
+ for child_element in self.findall(element, "SDG"):
93
+ sdg.addSdgContentsType(self.getSdg(child_element))
81
94
  return sdg
82
95
 
83
96
  def readSdgs(self, element: ET.Element, admin_data: AdminData):
@@ -90,16 +103,21 @@ class ARXMLParser(AbstractARXMLParser):
90
103
  self.logger.debug("readAdminData")
91
104
  admin_data = AdminData()
92
105
  self.readSdgs(child_element, admin_data)
93
- identifiable.admin_data = admin_data
106
+ identifiable.setAdminData(admin_data)
94
107
 
95
108
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
96
109
  self.readElementAttributes(element, referrable)
97
- referrable.long_name = self.getMultilanguageLongName(element, "LONG-NAME")
110
+ referrable.setLongName(self.getMultilanguageLongName(element, "LONG-NAME"))
98
111
 
99
112
  def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
100
113
  self.readMultilanguageReferrable(element, identifiable)
101
- identifiable.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
102
- identifiable.desc = self.getMultiLanguageOverviewParagraph(element, "DESC")
114
+
115
+ for annotation in self.getAnnotations(element):
116
+ identifiable.addAnnotation(annotation)
117
+
118
+ identifiable.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
119
+ .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC"))
120
+
103
121
  self.readAdminData(element, identifiable)
104
122
 
105
123
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
@@ -137,24 +155,31 @@ class ARXMLParser(AbstractARXMLParser):
137
155
  self.readElementAttributes(child_element, paragraph)
138
156
  self.readLOverviewParagraph(child_element, paragraph)
139
157
  return paragraph
140
-
141
- def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
142
- child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
143
- if (child_element is not None):
158
+
159
+ def getVariableInAtomicSWCTypeInstanceRef(self, element: ET.Element) -> VariableInAtomicSWCTypeInstanceRef:
160
+ autosar_variable_iref = None
161
+ if element is not None:
144
162
  autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
145
- self.readElementAttributes(child_element, autosar_variable_iref)
146
- autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
147
- if autosar_variable_iref.port_prototype_ref is None:
148
- self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
149
- autosar_variable_iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
150
- if autosar_variable_iref.target_data_prototype_ref is None:
151
- self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
152
- accessed_variable_ref.autosar_variable_iref = autosar_variable_iref
153
-
154
- def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
155
- child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
163
+ self.readElementAttributes(element, autosar_variable_iref)
164
+ autosar_variable_iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
165
+ autosar_variable_iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
166
+ return autosar_variable_iref
167
+
168
+ def getAutosarVariableInImplDatatype(self, element: ET.Element) -> AutosarVariableRef:
169
+ child_element = self.find(element, "ACCESSED-VARIABLE")
170
+ accessed_variable_ref = None
171
+ if (child_element is not None):
172
+ accessed_variable_ref = AutosarVariableRef()
173
+ accessed_variable_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
174
+ return accessed_variable_ref
175
+
176
+ def getLocalVariableRef(self, element: ET.Element) -> AutosarVariableRef:
177
+ child_element = self.find(element, "ACCESSED-VARIABLE")
178
+ accessed_variable_ref = None
156
179
  if (child_element is not None):
157
- accessed_variable_ref.local_variable_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF")
180
+ accessed_variable_ref = AutosarVariableRef()
181
+ accessed_variable_ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
182
+ return accessed_variable_ref
158
183
 
159
184
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
160
185
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
@@ -164,25 +189,25 @@ class ARXMLParser(AbstractARXMLParser):
164
189
 
165
190
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
166
191
  variable_access = parent.createDataReceivePointByArgument(short_name)
167
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
192
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
168
193
  elif (key == "DATA-RECEIVE-POINT-BY-VALUES"):
169
194
  variable_access = parent.createDataReceivePointByValue(short_name)
170
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
195
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
171
196
  elif (key == "DATA-READ-ACCESSS"):
172
197
  variable_access = parent.createDataReadAccess(short_name)
173
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
198
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
174
199
  elif (key == "DATA-WRITE-ACCESSS"):
175
200
  variable_access = parent.createDataWriteAccess(short_name)
176
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
201
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
177
202
  elif (key == "DATA-SEND-POINTS"):
178
203
  variable_access = parent.createDataSendPoint(short_name)
179
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
204
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
180
205
  elif (key == "WRITTEN-LOCAL-VARIABLES"):
181
206
  variable_access = parent.createWrittenLocalVariable(short_name)
182
- self.readLocalVariableRef(child_element, variable_access.accessed_variable_ref)
207
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
183
208
  elif (key == "READ-LOCAL-VARIABLES"):
184
209
  variable_access = parent.createReadLocalVariable(short_name)
185
- self.readLocalVariableRef(child_element, variable_access.accessed_variable_ref)
210
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
186
211
  else:
187
212
  self._raiseError("Invalid key type <%s>" % key)
188
213
 
@@ -215,16 +240,15 @@ class ARXMLParser(AbstractARXMLParser):
215
240
  mode_group.type_tref = self.getChildElementRefType(parent.short_name, child_element, "TYPE-TREF")
216
241
 
217
242
  def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
218
- child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
219
- if child_element is not None:
220
- for ref in self.getChildElementRefTypeList(child_element, "./CAN-ENTER-EXCLUSIVE-AREA-REF"):
221
- entity.addCanEnterExclusiveAreaRef(ref)
243
+ for ref in self.getChildElementRefTypeList(element, "CAN-ENTER-EXCLUSIVE-AREA-REFS/CAN-ENTER-EXCLUSIVE-AREA-REF"):
244
+ entity.addCanEnterExclusiveAreaRef(ref)
222
245
 
223
246
  def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
224
247
  self.logger.debug("readExecutableEntity %s" % entity.short_name)
225
248
  self.readIdentifiable(element, entity)
226
249
  self.readCanEnterExclusiveAreaRefs(element, entity)
227
- entity.minimum_start_interval = self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")
250
+ entity.setMinimumStartInterval(self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")) \
251
+ .setSwAddrMethodRef(self.getChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF"))
228
252
 
229
253
  def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
230
254
  for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
@@ -234,7 +258,7 @@ class ARXMLParser(AbstractARXMLParser):
234
258
 
235
259
  def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
236
260
  self.readExecutableEntity(element, entity)
237
- entity.implemented_entry_ref = self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
261
+ entity.setImplementedEntryRef(self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF"))
238
262
  self.readBswModuleEntityManagedModeGroup(element, entity)
239
263
 
240
264
  def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
@@ -586,6 +610,11 @@ class ARXMLParser(AbstractARXMLParser):
586
610
  def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
587
611
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
588
612
 
613
+ def getRunnableEntityArgument(self, element: ET.Element) -> RunnableEntityArgument:
614
+ argument = RunnableEntityArgument()
615
+ argument.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
616
+ return argument
617
+
589
618
  def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
590
619
  accessed_parameter = None
591
620
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
@@ -613,22 +642,22 @@ class ARXMLParser(AbstractARXMLParser):
613
642
  operation_iref = ROperationInAtomicSwcInstanceRef()
614
643
  operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
615
644
  operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
616
- parent.operation_iref = operation_iref
645
+ parent.setOperationIRef(operation_iref)
617
646
 
618
647
  def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
619
648
  child_element = self.find(element, "DATA-IREF")
620
649
  if (child_element is not None):
621
650
  data_iref = RVariableInAtomicSwcInstanceRef()
622
- data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
623
- data_iref.target_data_element_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF")
624
- parent.data_iref = data_iref
651
+ data_iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
652
+ .setTargetDataElementRef(self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF"))
653
+ parent.setDataIRef(data_iref)
625
654
 
626
655
  def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
627
656
  for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
628
657
  mode_iref = RModeInAtomicSwcInstanceRef()
629
- mode_iref.context_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")
630
- mode_iref.context_mode_declaration_group_prototype_ref = self.getChildElementRefType("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
631
- mode_iref.target_mode_declaration_ref = self.getChildElementRefType("", child_element, "TARGET-MODE-DECLARATION-REF")
658
+ mode_iref.setContextPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")) \
659
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
660
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF"))
632
661
  parent.addModeIRef(mode_iref)
633
662
 
634
663
  def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -636,7 +665,7 @@ class ARXMLParser(AbstractARXMLParser):
636
665
  self.logger.debug("readSynchronousServerCallPoint %s" % short_name)
637
666
  server_call_point = parent.createSynchronousServerCallPoint(short_name)
638
667
  self.readIdentifiable(element, server_call_point)
639
- server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
668
+ server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
640
669
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
641
670
 
642
671
  def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -644,11 +673,11 @@ class ARXMLParser(AbstractARXMLParser):
644
673
  self.logger.debug("readAsynchronousServerCallPoint %s" % short_name)
645
674
  server_call_point = parent.createAsynchronousServerCallPoint(short_name)
646
675
  self.readIdentifiable(element, server_call_point)
647
- server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
676
+ server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
648
677
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
649
678
 
650
679
  def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
651
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/*", self.nsmap):
680
+ for child_element in self.findall(element, "SERVER-CALL-POINTS/*"):
652
681
  tag_name = self.getTagName(child_element.tag)
653
682
  if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
654
683
  self.readSynchronousServerCallPoint(child_element, parent)
@@ -665,10 +694,10 @@ class ARXMLParser(AbstractARXMLParser):
665
694
 
666
695
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
667
696
  iref = RModeInAtomicSwcInstanceRef()
668
- iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
669
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
670
- iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
671
- iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
697
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
698
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
699
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
700
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
672
701
  return iref
673
702
 
674
703
  def getRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> RModeGroupInAtomicSWCInstanceRef:
@@ -676,45 +705,72 @@ class ARXMLParser(AbstractARXMLParser):
676
705
  iref = None
677
706
  if child_element is not None:
678
707
  iref = RModeGroupInAtomicSWCInstanceRef()
679
- iref.contextRPort = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
680
- iref.targetModeGroup = self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF")
708
+ iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
709
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
710
+ return iref
711
+
712
+ def getPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> PModeGroupInAtomicSwcInstanceRef:
713
+ child_element = self.find(element, "MODE-GROUP-IREF")
714
+ iref = None
715
+ if child_element is not None:
716
+ iref = PModeGroupInAtomicSwcInstanceRef()
717
+ iref.setContextPPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF")) \
718
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
681
719
  return iref
682
720
 
683
721
  def readModeAccessPoints(self, element: ET.Element, parent: RunnableEntity):
684
722
  for child_element in self.findall(element, "MODE-ACCESS-POINTS/MODE-ACCESS-POINT"):
685
723
  point = ModeAccessPoint()
686
- point.modeGroupIRef = self.getRModeGroupInAtomicSWCInstanceRef(child_element)
724
+ point.setModeGroupIRef(self.getRModeGroupInAtomicSWCInstanceRef(child_element))
687
725
  parent.addModeAccessPoint(point)
688
726
 
727
+ def readModeSwitchPoints(self, element: ET.Element, parent: RunnableEntity):
728
+ for child_element in self.findall(element, "MODE-SWITCH-POINTS/MODE-SWITCH-POINT"):
729
+ point = parent.createModeSwitchPoint(self.getShortName(child_element))
730
+ point.setModeGroupIRef(self.getPModeGroupInAtomicSWCInstanceRef(child_element))
731
+
732
+ def readRunnableEntityArguments(self, element: ET.Element, entity: RunnableEntity):
733
+ for child_element in self.findall(element, "ARGUMENTS/*"):
734
+ tag_name = self.getTagName(child_element)
735
+ if tag_name == "RUNNABLE-ENTITY-ARGUMENT":
736
+ entity.addArgument(self.getRunnableEntityArgument(child_element))
737
+ else:
738
+ raise NotImplementedError("Unsupported Arguments of runnable entity <%s>" % tag_name)
739
+
740
+ def readRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
741
+ self.readExecutableEntity(element, entity)
742
+ self.readRunnableEntityArguments(element, entity)
743
+
744
+ entity.setCanBeInvokedConcurrently(self.getChildElementOptionalBooleanValue(element, "CAN-BE-INVOKED-CONCURRENTLY"))
745
+ entity.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
746
+
747
+ self.readDataReceivePointByArguments(element, entity)
748
+ self.readDataReceivePointByValues(element, entity)
749
+ self.readDataReadAccesses(element, entity)
750
+ self.readDataWriteAccesses(element, entity)
751
+ self.readDataSendPoints(element, entity)
752
+ self.readInternalBehaviorServerCallPoint(element, entity)
753
+ self.readInternalTriggeringPoints(element, entity)
754
+ self.readModeAccessPoints(element, entity)
755
+ self.readModeSwitchPoints(element, entity)
756
+ self.readParameterAccesses(element, entity)
757
+ self.readReadLocalVariables(element, entity)
758
+ self.readWrittenLocalVariables(element, entity)
759
+
689
760
  def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
690
761
  for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
691
762
  short_name = self.getShortName(child_element)
692
763
  entity = parent.createRunnableEntity(short_name)
693
764
  self.logger.debug("readRunnableEntities %s" % short_name)
694
765
 
695
- self.readExecutableEntity(child_element, entity)
696
- entity.canBeInvokedConcurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
697
- entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
698
- entity.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDR-METHOD-REF")
699
-
700
- self.readDataReceivePointByArguments(child_element, entity)
701
- self.readDataReceivePointByValues(child_element, entity)
702
- self.readDataReadAccesses(child_element, entity)
703
- self.readDataWriteAccesses(child_element, entity)
704
- self.readDataSendPoints(child_element, entity)
705
- self.readParameterAccesses(child_element, entity)
706
- self.readWrittenLocalVariables(child_element, entity)
707
- self.readReadLocalVariables(child_element, entity)
708
- self.readInternalBehaviorServerCallPoint(child_element, entity)
709
- self.readInternalTriggeringPoints(child_element, entity)
710
- self.readModeAccessPoints(child_element, entity)
766
+ self.readRunnableEntity(child_element, entity)
711
767
 
712
768
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
713
769
  iref = RModeInAtomicSwcInstanceRef()
714
- iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
715
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
716
- iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
717
- iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
770
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
771
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
772
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
773
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
718
774
  return iref
719
775
 
720
776
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
@@ -736,32 +792,35 @@ class ARXMLParser(AbstractARXMLParser):
736
792
  event = parent.createOperationInvokedEvent(short_name)
737
793
  self.readOperationIRef(element, event)
738
794
  self.readRTEEvent(element, event)
739
-
795
+
796
+ def readVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
797
+ self.readAutosarDataPrototype(element, prototype)
798
+ prototype.setInitValue(self.getInitValue(element))
799
+
740
800
  def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
741
801
  for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
742
802
  short_name = self.getShortName(child_element)
743
803
  prototype = parent.createExplicitInterRunnableVariable(short_name)
744
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
745
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
746
- prototype.init_value = self.getInitValue(child_element)
804
+ self.readVariableDataPrototype(child_element, prototype)
747
805
 
748
806
  def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
749
807
  for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
750
808
  short_name = self.getShortName(child_element)
751
809
  memory = behavior.createPerInstanceMemory(short_name)
752
810
  self.readIdentifiable(child_element, memory)
753
- memory.init_value = self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")
754
- memory.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
755
- memory.type = self.getChildElementOptionalLiteral(child_element, "TYPE")
756
- memory.type_definition = self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION")
811
+ memory.setInitValue(self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")) \
812
+ .setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")) \
813
+ .setType(self.getChildElementOptionalLiteral(child_element, "TYPE")) \
814
+ .setTypeDefinition(self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION"))
757
815
 
758
816
  def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
759
- prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
817
+ self.readDataPrototype(element, prototype)
818
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
760
819
 
761
820
  def readParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
762
821
  self.readIdentifiable(element, prototype)
763
822
  self.readAutosarDataPrototype(element, prototype)
764
- prototype.init_value = self.getInitValue(element)
823
+ prototype.setInitValue(self.getInitValue(element))
765
824
 
766
825
  def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
767
826
  for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
@@ -837,21 +896,53 @@ class ARXMLParser(AbstractARXMLParser):
837
896
  self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
838
897
 
839
898
  def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
840
- child_element = element.find("./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
841
- if (child_element is not None):
899
+ child_element = self.find(element, "SW-POINTER-TARGET-PROPS")
900
+ if child_element is not None:
842
901
  sw_pointer_target_props = SwPointerTargetProps()
843
902
  sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
844
903
  sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
845
- parent.sw_pointer_target_props = sw_pointer_target_props
904
+ parent.swPointerTargetProps = sw_pointer_target_props
905
+
906
+ def readLParagraph(self, element: ET.Element, paragraph: MultiLanguageParagraph):
907
+ for child_element in self.findall(element, "./L-1"):
908
+ l1 = LOverviewParagraph()
909
+ self.readElementAttributes(child_element, l1)
910
+ l1.value = child_element.text
911
+ if 'L' in child_element.attrib:
912
+ l1.l = child_element.attrib['L']
913
+ paragraph.addL1(l1)
914
+
915
+ def getMultiLanguageParagraphs(self, element: ET.Element, key: str) -> List[MultiLanguageParagraph]:
916
+ paragraphs = []
917
+ for child_element in self.findall(element, key):
918
+ paragraph = MultiLanguageParagraph()
919
+ self.readElementAttributes(child_element, paragraph)
920
+ self.readLParagraph(child_element, paragraph)
921
+ paragraphs.append(paragraph)
922
+ return paragraphs
923
+
924
+ def getDocumentationBlock(self, element: ET.Element, key: str) -> DocumentationBlock:
925
+ block = None
926
+ child_element = self.find(element, key)
927
+ if child_element is not None:
928
+ block = DocumentationBlock()
929
+ self.readElementAttributes(child_element, block)
930
+ for paragraph in self.getMultiLanguageParagraphs(child_element, "P"):
931
+ block.addP(paragraph)
932
+ return block
846
933
 
847
934
  def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
848
- annotation.label = self.getMultilanguageLongName(element, "LABEL")
935
+ annotation.setAnnotationOrigin(self.getChildElementOptionalLiteral(element, 'ANNOTATION-ORIGIN')) \
936
+ .setAnnotationText(self.getDocumentationBlock(element, "ANNOTATION-TEXT")) \
937
+ .setLabel(self.getMultilanguageLongName(element, "LABEL"))
849
938
 
850
- def readAnnotations(self, element: ET.Element, props: SwDataDefProps) :
939
+ def getAnnotations(self, element: ET.Element) -> List[Annotation]:
940
+ annotations = []
851
941
  for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
852
942
  annotation = Annotation()
853
943
  self.readGeneralAnnotation(child_element, annotation)
854
- props.addAnnotation(annotation)
944
+ annotations.append(annotation)
945
+ return annotations
855
946
 
856
947
  def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
857
948
  props = SwAxisIndividual()
@@ -888,6 +979,11 @@ class ARXMLParser(AbstractARXMLParser):
888
979
  if tag_name == "SW-CALPRM-AXIS":
889
980
  set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
890
981
  return set
982
+
983
+ def readSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
984
+ child_element = self.find(element, "INVALID-VALUE/*")
985
+ if child_element is not None:
986
+ props.setInvalidValue(self.getValueSpecification(child_element))
891
987
 
892
988
  def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
893
989
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
@@ -898,30 +994,36 @@ class ARXMLParser(AbstractARXMLParser):
898
994
  sw_data_def_props = SwDataDefProps()
899
995
  self.readElementAttributes(child_element, sw_data_def_props)
900
996
 
901
- self.readAnnotations(conditional_tag, sw_data_def_props)
902
- sw_data_def_props.baseTypeRef = self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")
903
- sw_data_def_props.dataConstrRef = self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")
904
- sw_data_def_props.compuMethodRef = self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")
905
- sw_data_def_props.swImplPolicy = self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")
906
- sw_data_def_props.implementationDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")
907
- sw_data_def_props.swCalibrationAccess = self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")
908
- sw_data_def_props.swCalprmAxisSet = self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")
909
- sw_data_def_props.swRecordLayoutRef = self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")
910
- sw_data_def_props.valueAxisDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")
911
- sw_data_def_props.setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
997
+ for annotation in self.getAnnotations(conditional_tag):
998
+ sw_data_def_props.addAnnotation(annotation)
999
+
1000
+ sw_data_def_props.setBaseTypeRef(self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")) \
1001
+ .setDataConstrRef(self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")) \
1002
+ .setCompuMethodRef(self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")) \
1003
+ .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1004
+ .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
1005
+ .setSwCalibrationAccess(self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")) \
1006
+ .setSwCalprmAxisSet(self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")) \
1007
+ .setSwRecordLayoutRef(self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")) \
1008
+ .setValueAxisDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")) \
1009
+ .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1010
+ self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
912
1011
  self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
913
1012
  self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
914
1013
  return sw_data_def_props
1014
+
1015
+ def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1016
+ self.readIdentifiable(element, data_type)
1017
+ data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
915
1018
 
916
1019
  def readApplicationPrimitiveDataType(self, element: ET.Element, parent: ARPackage):
917
1020
  short_name = self.getShortName(element)
918
1021
  data_type = parent.createApplicationPrimitiveDataType(short_name)
919
1022
  self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
920
- self.readIdentifiable(element, data_type)
921
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1023
+ self.readAutosarDataType(element, data_type)
922
1024
 
923
1025
  def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
924
- prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
1026
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
925
1027
 
926
1028
  def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
927
1029
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
@@ -936,7 +1038,7 @@ class ARXMLParser(AbstractARXMLParser):
936
1038
  data_type = parent.createApplicationRecordDataType(short_name)
937
1039
  self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
938
1040
  self.readIdentifiable(element, data_type)
939
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1041
+ data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
940
1042
  self.readApplicationRecordElements(element, data_type)
941
1043
 
942
1044
  def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
@@ -944,10 +1046,10 @@ class ARXMLParser(AbstractARXMLParser):
944
1046
  short_name = self.getShortName(child_element)
945
1047
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
946
1048
  self.readIdentifiable(child_element, type_element)
947
- type_element.arraySize = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")
948
- type_element.array_size_semantics = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS")
1049
+ type_element.setArraySize(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")) \
1050
+ .setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
949
1051
  self.readImplementationDataTypeElements(child_element, type_element)
950
- type_element.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1052
+ type_element.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
951
1053
 
952
1054
  def readImplementationDataType(self, element: ET.Element, parent: ARPackage):
953
1055
  short_name = self.getShortName(element)
@@ -960,7 +1062,7 @@ class ARXMLParser(AbstractARXMLParser):
960
1062
  self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
961
1063
  array_sub_element = data_type.getImplementationDataTypeElements()[0]
962
1064
  if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
963
- data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementationDataTypeRef.value)
1065
+ data_type.setArrayElementType(array_sub_element.swDataDefProps.implementationDataTypeRef.value)
964
1066
  elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
965
1067
  return
966
1068
  else:
@@ -998,10 +1100,10 @@ class ARXMLParser(AbstractARXMLParser):
998
1100
  self.readElementAttributes(element, com_spec)
999
1101
  for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1000
1102
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1001
- com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1002
- com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1003
- com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1004
- com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1103
+ com_spec.dataElementRef = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1104
+ com_spec.networkRepresentation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1105
+ com_spec.handleOutOfRange = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1106
+ com_spec.usesEndToEndProtection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1005
1107
 
1006
1108
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1007
1109
  child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
@@ -1045,7 +1147,7 @@ class ARXMLParser(AbstractARXMLParser):
1045
1147
 
1046
1148
  def getInitValue(self, element: ET.Element) -> ValueSpecification:
1047
1149
  value_spec = None
1048
- child_element = element.find("./xmlns:INIT-VALUE/*", self.nsmap)
1150
+ child_element = self.find(element, "INIT-VALUE/*")
1049
1151
  if child_element is not None:
1050
1152
  self.logger.debug("getInitValue")
1051
1153
  value_spec = self.getValueSpecification(child_element)
@@ -1061,7 +1163,7 @@ class ARXMLParser(AbstractARXMLParser):
1061
1163
  com_spec = QueuedReceiverComSpec()
1062
1164
  self.readElementAttributes(element, com_spec)
1063
1165
  self.readReceiverComSpec(element, com_spec)
1064
- com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1166
+ com_spec.queueLength = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1065
1167
  return com_spec
1066
1168
 
1067
1169
  def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
@@ -1074,11 +1176,11 @@ class ARXMLParser(AbstractARXMLParser):
1074
1176
  com_spec = NonqueuedReceiverComSpec()
1075
1177
  self.readElementAttributes(element, com_spec)
1076
1178
  self.readReceiverComSpec(element, com_spec)
1077
- com_spec.alive_timeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1078
- com_spec.enable_updated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1079
- com_spec.handle_never_received = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1080
- com_spec.handel_timeout_type = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1081
- com_spec.init_value = self.getInitValue(element)
1179
+ com_spec.aliveTimeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1180
+ com_spec.enableUpdated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1181
+ com_spec.handleNeverReceived = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1182
+ com_spec.handleTimeoutType = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1183
+ com_spec.initValue = self.getInitValue(element)
1082
1184
  return com_spec
1083
1185
 
1084
1186
  def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
@@ -1127,23 +1229,33 @@ class ARXMLParser(AbstractARXMLParser):
1127
1229
  self.readElementAttributes(element, com_spec)
1128
1230
  for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1129
1231
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1130
- com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1131
- com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1132
- com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1133
- com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
1134
- com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1232
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1233
+ .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
1234
+ .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
1235
+ .setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
1236
+ .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1135
1237
 
1136
1238
  def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
1137
1239
  com_spec = NonqueuedSenderComSpec()
1138
1240
  self.readSenderComSpec(element, com_spec)
1139
- com_spec.init_value = self.getInitValue(element)
1241
+ com_spec.setInitValue(self.getInitValue(element))
1140
1242
  return com_spec
1141
1243
 
1142
1244
  def getServerComSpec(self, element) -> ServerComSpec:
1143
1245
  com_spec = ServerComSpec()
1246
+ com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
1247
+ .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1248
+ return com_spec
1249
+
1250
+ def getQueuedSenderComSpec(self, element) -> QueuedSenderComSpec:
1251
+ com_spec = QueuedSenderComSpec()
1144
1252
  self.readSenderComSpec(element, com_spec)
1145
- com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1146
- com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1253
+ return com_spec
1254
+
1255
+ def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
1256
+ com_spec = ModeSwitchSenderComSpec()
1257
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1258
+ .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1147
1259
  return com_spec
1148
1260
 
1149
1261
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
@@ -1153,6 +1265,10 @@ class ARXMLParser(AbstractARXMLParser):
1153
1265
  parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
1154
1266
  elif tag_name == "SERVER-COM-SPEC":
1155
1267
  parent.addProvidedComSpec(self.getServerComSpec(child_element))
1268
+ elif tag_name == "QUEUED-SENDER-COM-SPEC":
1269
+ parent.addProvidedComSpec(self.getQueuedSenderComSpec(child_element))
1270
+ elif tag_name == "MODE-SWITCH-SENDER-COM-SPEC":
1271
+ parent.addProvidedComSpec(self.getModeSwitchSenderComSpec(child_element))
1156
1272
  else:
1157
1273
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1158
1274
 
@@ -1364,29 +1480,37 @@ class ARXMLParser(AbstractARXMLParser):
1364
1480
  self.readDataTypeMaps(element, mapping_set)
1365
1481
  self.readModeRequestTypeMaps(element, mapping_set)
1366
1482
 
1367
- def readDataElements(self, element: ET.Element, parent: SenderReceiverInterface):
1483
+ def readSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1368
1484
  for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
1369
1485
  short_name = self.getShortName(child_element)
1370
- prototype = parent.createDataElement(short_name)
1486
+ prototype = sr_interface.createDataElement(short_name)
1371
1487
  self.readIdentifiable(child_element, prototype)
1372
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1488
+ prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1373
1489
  self.readAutosarDataPrototype(child_element, prototype)
1374
- prototype.init_value = self.getInitValue(child_element)
1490
+ prototype.initValue = self.getInitValue(child_element)
1491
+
1492
+ def readSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1493
+ for child_element in self.findall(element, "INVALIDATION-POLICYS/INVALIDATION-POLICY"):
1494
+ policy = InvalidationPolicy()
1495
+ policy.setDataElementRef(self.getChildElementOptionalRefType(child_element, "DATA-ELEMENT-REF")) \
1496
+ .setHandleInvalid(self.getChildElementOptionalLiteral(child_element, "HANDLE-INVALID"))
1497
+ sr_interface.addInvalidationPolicy(policy)
1375
1498
 
1376
1499
  def readSenderReceiverInterfaces(self, element, parent: ARPackage):
1377
1500
  short_name = self.getShortName(element)
1378
1501
  sr_interface = parent.createSenderReceiverInterface(short_name)
1379
1502
  self.readIdentifiable(element, sr_interface)
1380
- sr_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1381
- self.readDataElements(element, sr_interface)
1503
+ sr_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1504
+ self.readSenderReceiverInterfaceDataElements(element, sr_interface)
1505
+ self.readSenderReceiverInterfaceInvalidationPolicies(element, sr_interface)
1382
1506
 
1383
1507
  def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1384
1508
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
1385
1509
  short_name = self.getShortName(child_element)
1386
1510
  prototype = ArgumentDataPrototype(property, short_name)
1387
1511
  self.readIdentifiable(child_element, prototype)
1388
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1389
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1512
+ prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1513
+ prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1390
1514
  prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1391
1515
  parent.addArgumentDataPrototype(prototype)
1392
1516
 
@@ -1411,7 +1535,7 @@ class ARXMLParser(AbstractARXMLParser):
1411
1535
  error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
1412
1536
 
1413
1537
  def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
1414
- port_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1538
+ port_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1415
1539
  port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
1416
1540
 
1417
1541
  def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
@@ -1528,14 +1652,14 @@ class ARXMLParser(AbstractARXMLParser):
1528
1652
  self.readValueSpecification(element, value_spec)
1529
1653
  child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
1530
1654
  for child_element in child_elements:
1531
- value_spec.add_element(self.getValueSpecification(child_element))
1655
+ value_spec.addElement(self.getValueSpecification(child_element))
1532
1656
  return value_spec
1533
1657
 
1534
1658
  def getConstantReference(self, element: ET.Element) -> ConstantReference:
1535
1659
  self.logger.debug("getConstantReference")
1536
1660
  value_spec = ConstantReference()
1537
1661
  self.readValueSpecification(element, value_spec)
1538
- value_spec.constant_ref = self.getChildElementOptionalRefType(element, "CONSTANT-REF")
1662
+ value_spec.setConstantRef(self.getChildElementOptionalRefType(element, "CONSTANT-REF"))
1539
1663
  return value_spec
1540
1664
 
1541
1665
  def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
@@ -1558,7 +1682,7 @@ class ARXMLParser(AbstractARXMLParser):
1558
1682
 
1559
1683
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1560
1684
  for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1561
- spec.add_field(self.getValueSpecification(child_element))
1685
+ spec.addField(self.getValueSpecification(child_element))
1562
1686
 
1563
1687
  def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1564
1688
  value_spec = RecordValueSpecification()
@@ -1571,8 +1695,8 @@ class ARXMLParser(AbstractARXMLParser):
1571
1695
  self.logger.debug("readConstantSpecification %s" % short_name)
1572
1696
  spec = parent.createConstantSpecification(short_name)
1573
1697
  self.readIdentifiable(element, spec)
1574
- for value_spec_tag in element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
1575
- spec.value_spec = self.getValueSpecification(value_spec_tag)
1698
+ for value_spec_tag in self.findall(element, "VALUE-SPEC/*"):
1699
+ spec.setValueSpec(self.getValueSpecification(value_spec_tag))
1576
1700
 
1577
1701
  def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1578
1702
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
@@ -1615,7 +1739,11 @@ class ARXMLParser(AbstractARXMLParser):
1615
1739
  self.logger.debug("readUnit %s" % short_name)
1616
1740
  unit = parent.createUnit(short_name)
1617
1741
  self.readIdentifiable(element, unit)
1618
- unit.display_name = self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")
1742
+ unit.setDisplayName(self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")) \
1743
+ .setFactorSiToUnit(self.getChildElementOptionalFloatValue(element, "FACTOR-SI-TO-UNIT")) \
1744
+ .setOffsetSiToUnit(self.getChildElementOptionalFloatValue(element, "OFFSET-SI-TO-UNIT")) \
1745
+ .setPhysicalDimensionRef(self.getChildElementOptionalRefType(element, "PHYSICAL-DIMENSION-REF"))
1746
+
1619
1747
 
1620
1748
  def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
1621
1749
  child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
@@ -1637,11 +1765,13 @@ class ARXMLParser(AbstractARXMLParser):
1637
1765
  return desc
1638
1766
 
1639
1767
  def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
1640
- iref = VariableDataPrototypeInSystemInstanceRef()
1641
- iref.context_component_refs = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1642
- iref.context_composition_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1643
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1644
- iref.target_data_prototype_ref = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1768
+ iref = None
1769
+ if element is not None:
1770
+ iref = VariableDataPrototypeInSystemInstanceRef()
1771
+ iref.context_component_refs = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1772
+ iref.context_composition_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1773
+ iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1774
+ iref.target_data_prototype_ref = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1645
1775
  return iref
1646
1776
 
1647
1777
  def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
@@ -1683,7 +1813,7 @@ class ARXMLParser(AbstractARXMLParser):
1683
1813
 
1684
1814
  def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1685
1815
  self.readIdentifiable(element, data_type)
1686
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1816
+ data_type.swDataDefProps = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1687
1817
 
1688
1818
  def readApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
1689
1819
  self.readAutosarDataType(element, data_type)
@@ -1835,11 +1965,128 @@ class ARXMLParser(AbstractARXMLParser):
1835
1965
  self.readIdentifiable(element, timing)
1836
1966
  self.readTimingExtension(element, timing)
1837
1967
 
1968
+ def readFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
1969
+ for ref in self.getChildElementRefTypeList(element, 'FRAME-PORT-REFS/FRAME-PORT-REF'):
1970
+ triggering.addFramePortRef(ref)
1971
+ triggering.setFrameRef(self.getChildElementOptionalRefType(element, "FRAME-REF"))
1972
+ for child_element in self.findall(element, 'PDU-TRIGGERINGS/PDU-TRIGGERING-REF-CONDITIONAL'):
1973
+ triggering.addPduTriggeringRef(self.getChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF"))
1974
+
1975
+ def readCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
1976
+ self.logger.debug("Read CanFrameTriggering %s" % triggering.getShortName())
1977
+ self.readIdentifiable(element, triggering)
1978
+ self.readFrameTriggering(element, triggering)
1979
+ triggering.setCanAddressingMode(self.getChildElementOptionalLiteral(element, "CAN-ADDRESSING-MODE")) \
1980
+ .setCanFdFrameSupport(self.getChildElementOptionalBooleanValue(element, "CAN-FD-FRAME-SUPPORT")) \
1981
+ .setCanFrameRxBehavior(self.getChildElementOptionalLiteral(element, "CAN-FRAME-RX-BEHAVIOR")) \
1982
+ .setCanFrameTxBehavior(self.getChildElementOptionalLiteral(element, "CAN-FRAME-TX-BEHAVIOR")) \
1983
+ .setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
1984
+ .setRxIdentifierRange(self.getChildElementRxIdentifierRange(element, "RX-IDENTIFIER-RANGE"))
1985
+
1986
+
1987
+ def readLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
1988
+ self.logger.debug("Read LinFrameTriggering %s" % triggering.getShortName())
1989
+ self.readIdentifiable(element, triggering)
1990
+ self.readFrameTriggering(element, triggering)
1991
+ triggering.setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
1992
+ .setLinChecksum(self.getChildElementOptionalLiteral(element, "LIN-CHECKSUM"))
1993
+
1994
+ def readISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
1995
+ self.logger.debug("Read ISignalTriggering %s" % triggering.getShortName())
1996
+ self.readIdentifiable(element, triggering)
1997
+ triggering.setISignalGroupRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-GROUP-REF"))
1998
+ for ref in self.getChildElementRefTypeList(element, 'I-SIGNAL-PORT-REFS/I-SIGNAL-PORT-REF'):
1999
+ triggering.addISignalPortRef(ref)
2000
+ triggering.setISignalRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-REF"))
2001
+
2002
+ def readPduTriggering(self, element: ET.Element, triggering: PduTriggering):
2003
+ self.logger.debug("Read PduTriggering %s" % triggering.getShortName())
2004
+ self.readIdentifiable(element, triggering)
2005
+ for ref in self.getChildElementRefTypeList(element, 'I-PDU-PORT-REFS/I-PDU-PORT-REF'):
2006
+ triggering.addIPduPortRef(ref)
2007
+ triggering.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF"))
2008
+ for child_element in self.findall(element, 'I-SIGNAL-TRIGGERINGS/I-SIGNAL-TRIGGERING-REF-CONDITIONAL'):
2009
+ triggering.addISignalTriggeringRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF"))
2010
+
2011
+ def readPhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2012
+ for child_element in self.findall(element, 'COMM-CONNECTORS/COMMUNICATION-CONNECTOR-REF-CONDITIONAL'):
2013
+ channel.addCommConnectorRef(self.getChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF"))
2014
+
2015
+ for child_element in self.findall(element, "FRAME-TRIGGERINGS/*"):
2016
+ tag_name = self.getTagName(child_element)
2017
+ if tag_name == "CAN-FRAME-TRIGGERING":
2018
+ triggering = channel.createCanFrameTriggering(self.getShortName(child_element))
2019
+ self.readCanFrameTriggering(child_element, triggering)
2020
+ elif tag_name == "LIN-FRAME-TRIGGERING":
2021
+ triggering = channel.createLinFrameTriggering(self.getShortName(child_element))
2022
+ self.readLinFrameTriggering(child_element, triggering)
2023
+ else:
2024
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2025
+
2026
+ for child_element in self.findall(element, "I-SIGNAL-TRIGGERINGS/*"):
2027
+ tag_name = self.getTagName(child_element)
2028
+ if tag_name == "I-SIGNAL-TRIGGERING":
2029
+ triggering = channel.createISignalTriggering(self.getShortName(child_element))
2030
+ self.readISignalTriggering(child_element, triggering)
2031
+ else:
2032
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2033
+
2034
+ for child_element in self.findall(element, "PDU-TRIGGERINGS/*"):
2035
+ tag_name = self.getTagName(child_element)
2036
+ if tag_name == "PDU-TRIGGERING":
2037
+ triggering = channel.createPduTriggering(self.getShortName(child_element))
2038
+ self.readPduTriggering(child_element, triggering)
2039
+ else:
2040
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2041
+
2042
+ def readCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2043
+ self.readIdentifiable(element, channel)
2044
+ self.readPhysicalChannel(element, channel)
2045
+
2046
+ def readLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2047
+ self.readIdentifiable(element, channel)
2048
+ self.readPhysicalChannel(element, channel)
2049
+
2050
+ def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2051
+ for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
2052
+ tag_name = self.getTagName(child_element)
2053
+ if tag_name == "CAN-PHYSICAL-CHANNEL":
2054
+ channel = cluster.createCanPhysicalChannel(self.getShortName(child_element))
2055
+ self.readCanPhysicalChannel(child_element, channel)
2056
+ elif tag_name == "LIN-PHYSICAL-CHANNEL":
2057
+ channel = cluster.createLinPhysicalChannel(self.getShortName(child_element))
2058
+ self.readLinPhysicalChannel(child_element, channel)
2059
+ else:
2060
+ raise NotImplementedError("Unsupported Physical Channel <%s>" % tag_name)
2061
+
2062
+
2063
+ def readCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
2064
+ cluster.setBaudrate(self.getChildElementOptionalNumericalValue(element, "BAUDRATE"))
2065
+ self.readCommunicationClusterPhysicalChannels(element, cluster)
2066
+ cluster.setProtocolName(self.getChildElementOptionalLiteral(element, "PROTOCOL-NAME")) \
2067
+ .setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
2068
+
2069
+ def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2070
+ cluster.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE"))
2071
+
1838
2072
  def readLinCluster(self, element: ET.Element, parent: ARPackage):
1839
2073
  short_name = self.getShortName(element)
1840
2074
  self.logger.debug("readLinCluster %s" % short_name)
1841
2075
  cluster = parent.createLinCluster(short_name)
1842
2076
  self.readIdentifiable(element, cluster)
2077
+ child_element = self.find(element, "LIN-CLUSTER-VARIANTS/LIN-CLUSTER-CONDITIONAL")
2078
+ if child_element is not None:
2079
+ self.readCommunicationCluster(child_element, cluster)
2080
+
2081
+ def readCanCluster(self, element: ET.Element, parent: ARPackage):
2082
+ short_name = self.getShortName(element)
2083
+ self.logger.debug("readCanCluster %s" % short_name)
2084
+ cluster = parent.createCanCluster(short_name)
2085
+ self.readIdentifiable(element, cluster)
2086
+ child_element = self.find(element, "CAN-CLUSTER-VARIANTS/CAN-CLUSTER-CONDITIONAL")
2087
+ if child_element is not None:
2088
+ self.readCommunicationCluster(child_element, cluster)
2089
+ self.readAbstractCanCluster(child_element, cluster)
1843
2090
 
1844
2091
  def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
1845
2092
  for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
@@ -1867,24 +2114,126 @@ class ARXMLParser(AbstractARXMLParser):
1867
2114
  self.logger.debug("readNmPdu %s" % short_name)
1868
2115
  pdu = parent.createNmPdu(short_name)
1869
2116
  self.readIdentifiable(element, pdu)
2117
+ self.readIPdu(element, pdu)
1870
2118
 
1871
2119
  def readNPdu(self, element: ET.Element, parent: ARPackage):
1872
2120
  short_name = self.getShortName(element)
1873
2121
  self.logger.debug("readNPdu %s" % short_name)
1874
2122
  pdu = parent.createNPdu(short_name)
1875
2123
  self.readIdentifiable(element, pdu)
2124
+ self.readIPdu(element, pdu)
1876
2125
 
2126
+ def readIPdu(self, element: ET.Element, pdu: IPdu):
2127
+ pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2128
+
1877
2129
  def readDcmIPdu(self, element: ET.Element, parent: ARPackage):
1878
2130
  short_name = self.getShortName(element)
1879
2131
  self.logger.debug("readDcmIPdu %s" % short_name)
1880
2132
  pdu = parent.createDcmIPdu(short_name)
1881
2133
  self.readIdentifiable(element, pdu)
2134
+ self.readIPdu(element, pdu)
2135
+ pdu.setDiagPduType(self.getChildElementOptionalLiteral(element, "DIAG-PDU-TYPE"))
2136
+
2137
+ def readSecuredIPdu(self, element: ET.Element, parent: ARPackage):
2138
+ short_name = self.getShortName(element)
2139
+ self.logger.debug("readSecuredIPdu %s" % short_name)
2140
+ pdu = parent.createSecuredIPdu(short_name)
2141
+ self.readIdentifiable(element, pdu)
2142
+ self.readIPdu(element, pdu)
2143
+
2144
+ def readNmNode(self, element: ET.Element, nm_node: NmNode):
2145
+ nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
2146
+ .setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
2147
+ .setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
2148
+ for ref in self.getChildElementRefTypeList(element, "RX-NM-PDU-REFS/RX-NM-PDU-REF"):
2149
+ nm_node.addRxNmPduRef(ref)
2150
+ for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
2151
+ nm_node.addTxNmPduRefs(ref)
2152
+
2153
+ def readCanNmNode(self, element: ET.Element, parent: NmCluster):
2154
+ short_name = self.getShortName(element)
2155
+ self.logger.debug("readCanNmNode %s" % short_name)
2156
+ nm_node = parent.createCanNmNode(short_name) # type: CanNmNode
2157
+ self.readIdentifiable(element, nm_node)
2158
+ self.readNmNode(element, nm_node)
2159
+
2160
+ nm_node.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
2161
+ .setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
2162
+ .setNmRangeConfig(self.getChildElementRxIdentifierRange(element, "NM-RANGE-CONFIG"))
2163
+
2164
+ def readNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2165
+ self.logger.debug("readNmConfigNmNodes %s" % parent.short_name)
2166
+ for child_element in self.findall(element, "NM-NODES/*"):
2167
+ tag_name = self.getTagName(child_element)
2168
+ if tag_name == "CAN-NM-NODE":
2169
+ self.readCanNmNode(child_element, parent)
2170
+ else:
2171
+ self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2172
+
2173
+ def getCanNmClusterCoupling(self, element: ET.Element) -> CanNmClusterCoupling:
2174
+ coupling = CanNmClusterCoupling()
2175
+
2176
+ for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
2177
+ coupling.addCoupledClusterRef(ref)
2178
+
2179
+ coupling.setNmBusloadReductionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ENABLED")) \
2180
+ .setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
2181
+
2182
+ return coupling
1882
2183
 
2184
+ def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
2185
+ self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
2186
+ for child_element in self.findall(element, "NM-CLUSTER-COUPLINGS/*"):
2187
+ tag_name = self.getTagName(child_element)
2188
+ if tag_name == "CAN-NM-CLUSTER-COUPLING":
2189
+ nm_config.addNmClusterCouplings(self.getCanNmClusterCoupling(child_element))
2190
+ else:
2191
+ self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2192
+
2193
+ def readNmCluster(self, element: ET.Element, cluster: NmCluster):
2194
+ cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
2195
+ .setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
2196
+ .setNmChannelSleepMaster(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER"))
2197
+ self.readNmClusterNmNodes(element, cluster)
2198
+ cluster.setNmSynchronizingNetwork(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK"))
2199
+
2200
+ def readCanNmCluster(self, element: ET.Element, parent: NmConfig):
2201
+ short_name = self.getShortName(element)
2202
+ self.logger.debug("readCanNmCluster %s" % short_name)
2203
+ cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
2204
+ self.readIdentifiable(element, cluster)
2205
+ self.readNmCluster(element, cluster)
2206
+
2207
+ cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
2208
+ .setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
2209
+ .setNmCbvPosition(self.getChildElementOptionalNumericalValue(element, "NM-CBV-POSITION")) \
2210
+ .setNmChannelActive(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-ACTIVE")) \
2211
+ .setNmImmediateNmCycleTime(self.getChildElementOptionalFloatValue(element, "NM-IMMEDIATE-NM-CYCLE-TIME")) \
2212
+ .setNmImmediateNmTransmissions(self. getChildElementOptionalNumericalValue(element, "NM-IMMEDIATE-NM-TRANSMISSIONS")) \
2213
+ .setNmMessageTimeoutTime(self.getChildElementOptionalFloatValue(element, "NM-MESSAGE-TIMEOUT-TIME")) \
2214
+ .setNmMsgCycleTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-TIME")) \
2215
+ .setNmNetworkTimeout(self.getChildElementOptionalFloatValue(element, "NM-NETWORK-TIMEOUT")) \
2216
+ .setNmNidPosition(self. getChildElementOptionalNumericalValue(element, "NM-NID-POSITION")) \
2217
+ .setNmRemoteSleepIndicationTime(self.getChildElementOptionalFloatValue(element, "NM-REMOTE-SLEEP-INDICATION-TIME")) \
2218
+ .setNmRepeatMessageTime(self.getChildElementOptionalFloatValue(element, "NM-REPEAT-MESSAGE-TIME")) \
2219
+ .setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
2220
+ .setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
2221
+
2222
+ def readNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2223
+ for child_element in self.findall(element, "NM-CLUSTERS/*"):
2224
+ tag_name = self.getTagName(child_element)
2225
+ if tag_name == "CAN-NM-CLUSTER":
2226
+ self.readCanNmCluster(child_element, parent)
2227
+ else:
2228
+ self._raiseError("Unsupported Nm Cluster <%s>" % tag_name)
2229
+
1883
2230
  def readNmConfig(self, element: ET.Element, parent: ARPackage):
1884
2231
  short_name = self.getShortName(element)
1885
2232
  self.logger.debug("NmConfig %s" % short_name)
1886
- pdu = parent.createNmConfig(short_name)
1887
- self.readIdentifiable(element, pdu)
2233
+ config = parent.createNmConfig(short_name) # type: NmConfig
2234
+ self.readIdentifiable(element, config)
2235
+ self.readNmConfigNmClusters(element, config)
2236
+ self.readNmConfigNmClusterCouplings(element, config)
1888
2237
 
1889
2238
  def readCanTpConfig(self, element: ET.Element, parent: ARPackage):
1890
2239
  short_name = self.getShortName(element)
@@ -1898,6 +2247,12 @@ class ARXMLParser(AbstractARXMLParser):
1898
2247
  frame = parent.createCanFrame(short_name)
1899
2248
  self.readFrame(element, frame)
1900
2249
 
2250
+ def readEcuInstance(self, element: ET.Element, parent: ARPackage):
2251
+ short_name = self.getShortName(element)
2252
+ self.logger.debug("EcuInstance %s" % short_name)
2253
+ instance = parent.createEcuInstance(short_name)
2254
+ self.readIdentifiable(element, instance)
2255
+
1901
2256
  '''
1902
2257
  def getFrameMappings(self, element: ET.Element) -> List[FrameMapping]:
1903
2258
  mappings = []
@@ -1949,6 +2304,261 @@ class ARXMLParser(AbstractARXMLParser):
1949
2304
  signal.networkRepresentationProps = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")
1950
2305
  signal.systemSignalRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF")
1951
2306
 
2307
+ def readEcucValueCollectionEcucValues(self, element: ET.Element, parent: EcucValueCollection):
2308
+ for child_element in self.findall(element, "ECUC-VALUES/ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL"):
2309
+ ref = self.getChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF")
2310
+ if (ref is not None):
2311
+ parent.addEcucValueRef(ref)
2312
+ self.logger.debug("EcucValue <%s> of EcucValueCollection <%s> has been added", ref.value, parent.short_name)
2313
+
2314
+ def readEcucValueCollection(self, element: ET.Element, parent: ARPackage):
2315
+ short_name = self.getShortName(element)
2316
+ self.logger.debug("EcucValueCollection %s" % short_name)
2317
+ collection = parent.createEcucValueCollection(short_name)
2318
+ self.readIdentifiable(element, collection)
2319
+ collection.setEcuExtractRef(self.getChildElementOptionalRefType(element, "ECU-EXTRACT-REF"))
2320
+ self.readEcucValueCollectionEcucValues(element, collection)
2321
+
2322
+ def readEcucParameterValue(self, element: ET.Element, param_value: EcucParameterValue):
2323
+ param_value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2324
+ for annotation in self.getAnnotations(element):
2325
+ param_value.addAnnotation(annotation)
2326
+
2327
+ def getEcucTextualParamValue(self, element: ET.Element) -> EcucTextualParamValue:
2328
+ param_value = EcucTextualParamValue()
2329
+ self.readEcucParameterValue(element, param_value)
2330
+ param_value.setValue(self.getChildElementOptionalLiteral(element, "VALUE"))
2331
+ return param_value
2332
+
2333
+ def getEcucNumericalParamValue(self, element: ET.Element) -> EcucNumericalParamValue:
2334
+ param_value = EcucNumericalParamValue()
2335
+ self.readEcucParameterValue(element, param_value)
2336
+ param_value.setValue(self.getChildElementOptionalNumericalValue(element, "VALUE"))
2337
+ return param_value
2338
+
2339
+ def readEcucContainerValueParameterValues(self, element: ET.Element, container_value: EcucContainerValue):
2340
+ for child_element in self.findall(element, "PARAMETER-VALUES/*"):
2341
+ tag_name = self.getTagName(child_element)
2342
+ if tag_name == "ECUC-TEXTUAL-PARAM-VALUE":
2343
+ container_value.addParameterValue(self.getEcucTextualParamValue(child_element))
2344
+ elif tag_name == "ECUC-NUMERICAL-PARAM-VALUE":
2345
+ container_value.addParameterValue(self.getEcucNumericalParamValue(child_element))
2346
+ else:
2347
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2348
+
2349
+ def readEcucAbstractReferenceValue(self, element: ET.Element, value: EcucAbstractReferenceValue):
2350
+ value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2351
+ for annotation in self.getAnnotations(element):
2352
+ value.addAnnotation(annotation)
2353
+
2354
+ def getEcucReferenceValue(self, element: ET.Element) -> EcucReferenceValue:
2355
+ value = EcucReferenceValue()
2356
+ self.readEcucAbstractReferenceValue(element, value)
2357
+ value.setValueRef(self.getChildElementOptionalRefType(element, "VALUE-REF"))
2358
+ return value
2359
+
2360
+ def getAnyInstanceRef(self, element: ET.Element, key) -> AnyInstanceRef:
2361
+ instance_ref = None
2362
+ child_element = self.find(element, key)
2363
+ if child_element is not None:
2364
+ instance_ref = AnyInstanceRef()
2365
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF")) \
2366
+ .setContextElementRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF")) \
2367
+ .setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
2368
+ return instance_ref
2369
+
2370
+ def getEcucInstanceReferenceValue(self, element: ET.Element) -> EcucInstanceReferenceValue:
2371
+ value = EcucInstanceReferenceValue()
2372
+ self.readEcucAbstractReferenceValue(element, value)
2373
+ value.setValueIRef(self.getAnyInstanceRef(element, "VALUE-IREF"))
2374
+ return value
2375
+
2376
+ def readEcucContainerValueReferenceValues(self, element: ET.Element, container_value: EcucContainerValue):
2377
+ for child_element in self.findall(element, "REFERENCE-VALUES/*"):
2378
+ tag_name = self.getTagName(child_element)
2379
+ if tag_name == "ECUC-REFERENCE-VALUE":
2380
+ container_value.addReferenceValue(self.getEcucReferenceValue(child_element))
2381
+ elif tag_name == "ECUC-INSTANCE-REFERENCE-VALUE":
2382
+ container_value.addReferenceValue(self.getEcucInstanceReferenceValue(child_element))
2383
+ else:
2384
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2385
+
2386
+ def readEcucContainerValue(self, element: ET.Element, container_value: EcucContainerValue):
2387
+ self.readIdentifiable(element, container_value)
2388
+ container_value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2389
+ self.readEcucContainerValueParameterValues(element, container_value)
2390
+ self.readEcucContainerValueReferenceValues(element, container_value)
2391
+ self.readEcucContainerValueSubContainers(element, container_value)
2392
+
2393
+ def readEcucContainerValueEcucContainerValue(self, element: ET.Element, parent: EcucContainerValue):
2394
+ short_name = self.getShortName(element)
2395
+ self.logger.debug("EcucContainerValue %s" % short_name)
2396
+ container_value = parent.createSubContainer(short_name)
2397
+ self.readEcucContainerValue(element, container_value)
2398
+
2399
+ def readEcucContainerValueSubContainers(self, element: ET.Element, parent: EcucContainerValue):
2400
+ for child_element in self.findall(element, "SUB-CONTAINERS/*"):
2401
+ tag_name = self.getTagName(child_element)
2402
+ if tag_name == "ECUC-CONTAINER-VALUE":
2403
+ self.readEcucContainerValueEcucContainerValue(child_element, parent)
2404
+ else:
2405
+ raise NotImplementedError("Unsupported Sub Container %s" % tag_name)
2406
+
2407
+ def readEcucModuleConfigurationValuesEcucContainerValue(self, element: ET.Element, parent: EcucModuleConfigurationValues):
2408
+ short_name = self.getShortName(element)
2409
+ self.logger.debug("EcucContainerValue %s" % short_name)
2410
+ container_value = parent.createContainer(short_name)
2411
+ self.readEcucContainerValue(element, container_value)
2412
+
2413
+ def readEcucModuleConfigurationValuesContainers(self, element: ET.Element, values: EcucModuleConfigurationValues):
2414
+ for child_element in self.findall(element, "CONTAINERS/*"):
2415
+ tag_name = self.getTagName(child_element)
2416
+ if tag_name == "ECUC-CONTAINER-VALUE":
2417
+ self.readEcucModuleConfigurationValuesEcucContainerValue(child_element, values)
2418
+ else:
2419
+ raise NotImplementedError("Unsupported Container %s" % tag_name)
2420
+
2421
+ def readEcucModuleConfigurationValues(self, element: ET.Element, parent: ARPackage):
2422
+ short_name = self.getShortName(element)
2423
+ self.logger.debug("EcucModuleConfigurationValues %s" % short_name)
2424
+ values = parent.createEcucModuleConfigurationValues(short_name)
2425
+ self.readIdentifiable(element, values)
2426
+ values.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2427
+ values.setImplementationConfigVariant(self.getChildElementOptionalLiteral(element, "IMPLEMENTATION-CONFIG-VARIANT"))
2428
+ values.setModuleDescriptionRef(self.getChildElementOptionalRefType(element, "MODULE-DESCRIPTION-REF"))
2429
+ self.readEcucModuleConfigurationValuesContainers(element, values)
2430
+
2431
+ def readPhysicalDimensions(self, element: ET.Element, parent: ARPackage):
2432
+ short_name = self.getShortName(element)
2433
+ self.logger.debug("readPhysicalDimensions %s" % short_name)
2434
+ dimension = parent.createPhysicalDimension(short_name)
2435
+ self.readIdentifiable(element, dimension)
2436
+ dimension.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
2437
+ .setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
2438
+
2439
+ '''
2440
+ def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
2441
+ mappings = []
2442
+ for child_element in self.findall(element, tag_name):
2443
+ mapping = IPduMapping()
2444
+ mapping.sourceIPduRef = self.getChildElementOptionalRefType(child_element, "SOURCE-IPDU-REF")
2445
+ mapping.targetIPduRef = self.getChildElementOptionalRefType(child_element, "TARGET-IPDU-REF")
2446
+ mappings.append(mapping)
2447
+ return mappings
2448
+ '''
2449
+
2450
+ def readISignalGroup(self, element: ET.Element, parent: ARPackage):
2451
+ short_name = self.getShortName(element)
2452
+ self.logger.debug("ISignalGroup %s" % short_name)
2453
+ group = parent.createISignalGroup(short_name)
2454
+ self.readIdentifiable(element, group)
2455
+ for ref_type in self.getChildElementRefTypeList(element, "I-SIGNAL-REFS/I-SIGNAL-REF"):
2456
+ group.addISignalRef(ref_type)
2457
+ group.systemSignalGroupRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-GROUP-REF")
2458
+
2459
+ def readSystemSignal(self, element: ET.Element, parent: ARPackage):
2460
+ short_name = self.getShortName(element)
2461
+ self.logger.debug("SystemSignal %s" % short_name)
2462
+ signal = parent.createSystemSignal(short_name)
2463
+ self.readIdentifiable(element, signal)
2464
+ signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH"))
2465
+
2466
+ def readSystemSignalGroup(self, element: ET.Element, parent: ARPackage):
2467
+ short_name = self.getShortName(element)
2468
+ self.logger.debug("SystemSignalGroup %s" % short_name)
2469
+ group = parent.createSystemSignalGroup(short_name)
2470
+ self.readIdentifiable(element, group)
2471
+ for ref_type in self.getChildElementRefTypeList(element, "SYSTEM-SIGNAL-REFS/SYSTEM-SIGNAL-REF"):
2472
+ group.addSystemSignalRefs(ref_type)
2473
+
2474
+ def readISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2475
+ for child_element in self.findall(element, "I-SIGNAL-TO-PDU-MAPPINGS/I-SIGNAL-TO-I-PDU-MAPPING"):
2476
+ short_name = self.getShortName(child_element)
2477
+ mapping = parent.createISignalToPduMappings(short_name)
2478
+ self.readIdentifiable(child_element, mapping)
2479
+ mapping.setISignalRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-REF")) \
2480
+ .setISignalGroupRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF")) \
2481
+ .setPackingByteOrder(self.getChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER")) \
2482
+ .setStartPosition(self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")) \
2483
+ .setTransferProperty(self.getChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY")) \
2484
+ .setUpdateIndicationBitPosition(self.getChildElementOptionalNumericalValue(child_element, "UPDATE-INDICATION-BIT-POSITION"))
2485
+
2486
+ def readISignalIPdu(self, element: ET.Element, parent: ARPackage):
2487
+ short_name = self.getShortName(element)
2488
+ self.logger.debug("ISignalIPdu %s" % short_name)
2489
+ i_pdu = parent.createISignalIPdu(short_name)
2490
+ self.readIdentifiable(element, i_pdu)
2491
+ i_pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2492
+ self.readISignalToPduMappings(element, i_pdu)
2493
+ i_pdu.setUnusedBitPattern(self.getChildElementOptionalLiteral(element, "UNUSED-BIT-PATTERN"))
2494
+
2495
+ def getISignalIPduRefs(self, element: ET.Element) -> List[RefType]:
2496
+ ref_types = []
2497
+ for child_element in self.findall(element, "I-SIGNAL-I-PDUS/I-SIGNAL-I-PDU-REF-CONDITIONAL"):
2498
+ ref_types.append(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-I-PDU-REF"))
2499
+ return ref_types
2500
+
2501
+ def readISignalIPduGroup(self, element: ET.Element, parent: ARPackage):
2502
+ short_name = self.getShortName(element)
2503
+ self.logger.debug("ISignalIPduGroup %s" % short_name)
2504
+ group = parent.createISignalIPduGroup(short_name)
2505
+ self.readIdentifiable(element, group)
2506
+ group.communicationDirection = self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION")
2507
+ group.communicationMode = self.getChildElementOptionalLiteral(element, "COMMUNICATION-MODE")
2508
+ for ref_type in self.getChildElementRefTypeList(element, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REFS/CONTAINED-I-SIGNAL-I-PDU-GROUP-REF"):
2509
+ group.addContainedISignalIPduGroupRef(ref_type)
2510
+ for ref_type in self.getISignalIPduRefs(element):
2511
+ group.addISignalIPduRef(ref_type)
2512
+
2513
+ def getSenderReceiverToSignalMapping(self, element: ET.Element) -> SenderReceiverToSignalMapping:
2514
+ mapping = SenderReceiverToSignalMapping()
2515
+ mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2516
+ mapping.setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
2517
+ return mapping
2518
+
2519
+ def getSenderReceiverToSignalGroupMapping(self, element: ET.Element) -> SenderReceiverToSignalGroupMapping:
2520
+ mapping = SenderReceiverToSignalGroupMapping()
2521
+ mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2522
+ mapping.setSignalGroupRef(self.getChildElementOptionalRefType(element, "SIGNAL-GROUP-REF"))
2523
+ return mapping
2524
+
2525
+ def readSystemMappingDataMappings(self, element: ET.Element, mapping: SystemMapping):
2526
+ for child_element in self.findall(element, "DATA-MAPPINGS/*"):
2527
+ tag_name = self.getTagName(child_element)
2528
+ if tag_name == "SENDER-RECEIVER-TO-SIGNAL-MAPPING":
2529
+ mapping.addDataMapping(self.getSenderReceiverToSignalMapping(child_element))
2530
+ elif tag_name == "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING":
2531
+ mapping.addDataMapping(self.getSenderReceiverToSignalGroupMapping(child_element))
2532
+ else:
2533
+ raise NotImplementedError("Unsupported Data Mapping %s" % tag_name)
2534
+
2535
+ def readSystemMapping(self, element: ET.Element, parent: System):
2536
+ short_name = self.getShortName(element)
2537
+ self.logger.debug("SystemMapping %s" % short_name)
2538
+ mapping = parent.createSystemMapping(short_name)
2539
+ self.readIdentifiable(element, mapping)
2540
+ self.readSystemMappingDataMappings(element, mapping)
2541
+
2542
+ def readSystemMappings(self, element: ET.Element, system: System):
2543
+ for child_element in self.findall(element, "MAPPINGS/*"):
2544
+ tag_name = self.getTagName(child_element)
2545
+ if tag_name == "SYSTEM-MAPPING":
2546
+ self.readSystemMapping(child_element, system)
2547
+ else:
2548
+ raise NotImplementedError("Unsupported Mapping %s" % tag_name)
2549
+
2550
+ def readSystem(self, element: ET.Element, parent: ARPackage):
2551
+ short_name = self.getShortName(element)
2552
+ self.logger.debug("System %s" % short_name)
2553
+ system = parent.createSystem(short_name)
2554
+ self.readIdentifiable(element, system)
2555
+
2556
+ system.setEcuExtractVersion(self.getChildElementOptionalLiteral(element, "ECU-EXTRACT-VERSION"))
2557
+ for child_element in self.findall(element, "FIBEX-ELEMENTS/FIBEX-ELEMENT-REF-CONDITIONAL"):
2558
+ system.addFibexElementRef(self.getChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF"))
2559
+
2560
+ self.readSystemMappings(element, system)
2561
+
1952
2562
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
1953
2563
  for child_element in self.findall(element, "./ELEMENTS/*"):
1954
2564
  tag_name = self.getTagName(child_element.tag)
@@ -2022,39 +2632,46 @@ class ARXMLParser(AbstractARXMLParser):
2022
2632
  self.readNPdu(child_element, parent)
2023
2633
  elif tag_name == "DCM-I-PDU":
2024
2634
  self.readDcmIPdu(child_element, parent)
2635
+ elif tag_name == "SECURED-I-PDU":
2636
+ self.readSecuredIPdu(child_element, parent)
2025
2637
  elif tag_name == "NM-CONFIG":
2026
2638
  self.readNmConfig(child_element, parent)
2027
2639
  elif tag_name == "CAN-TP-CONFIG":
2028
2640
  self.readCanTpConfig(child_element, parent)
2029
- elif tag_name == "SYSTEM":
2641
+ elif tag_name == "LIN-TP-CONFIG":
2030
2642
  pass
2643
+ elif tag_name == "SYSTEM":
2644
+ self.readSystem(child_element, parent)
2031
2645
  elif tag_name == "ECU-INSTANCE":
2032
- pass
2646
+ self.readEcuInstance(child_element, parent)
2033
2647
  elif tag_name == "GATEWAY":
2034
2648
  self.readGateway(child_element, parent)
2035
2649
  elif tag_name == "I-SIGNAL-I-PDU-GROUP":
2036
- pass
2650
+ self.readISignalIPduGroup(child_element, parent)
2037
2651
  elif tag_name == "CAN-CLUSTER":
2038
- pass
2652
+ self.readCanCluster(child_element, parent)
2039
2653
  elif tag_name == "CAN-FRAME":
2040
2654
  self.readCanFrame(child_element, parent)
2041
2655
  elif tag_name == "I-SIGNAL":
2042
2656
  self.readISignal(child_element, parent)
2043
- pass
2044
2657
  elif tag_name == "I-SIGNAL-GROUP":
2045
- pass
2658
+ self.readISignalGroup(child_element, parent)
2046
2659
  elif tag_name == "I-SIGNAL-I-PDU":
2047
- pass
2660
+ self.readISignalIPdu(child_element, parent)
2048
2661
  elif tag_name == "SYSTEM-SIGNAL":
2049
- pass
2662
+ self.readSystemSignal(child_element, parent)
2050
2663
  elif tag_name == "SYSTEM-SIGNAL-GROUP":
2051
- pass
2664
+ self.readSystemSignalGroup(child_element, parent)
2665
+ elif tag_name == "ECUC-VALUE-COLLECTION":
2666
+ self.readEcucValueCollection(child_element, parent)
2667
+ elif tag_name == "ECUC-MODULE-CONFIGURATION-VALUES":
2668
+ self.readEcucModuleConfigurationValues(child_element, parent)
2669
+ elif tag_name == "PHYSICAL-DIMENSION":
2670
+ self.readPhysicalDimensions(child_element, parent)
2052
2671
  else:
2053
2672
  self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
2054
2673
  #pass
2055
2674
 
2056
-
2057
-
2058
2675
  def readARPackages(self, element: ET.Element, parent: ARPackage):
2059
2676
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
2060
2677
  short_name = self.getShortName(child_element)
@@ -2068,7 +2685,7 @@ class ARXMLParser(AbstractARXMLParser):
2068
2685
 
2069
2686
 
2070
2687
  def load(self, filename, document: AUTOSAR):
2071
- self.logger.info("Load %s ..." % filename)
2688
+ self.logger.info("Load %s ..." % os.path.realpath(filename))
2072
2689
 
2073
2690
  tree = ET.parse(filename)
2074
2691
  root = tree.getroot()