armodel 1.7.2__py3-none-any.whl → 1.7.4__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 (54) hide show
  1. armodel/cli/arxml_dump_cli.py +1 -1
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +44 -20
  3. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +104 -30
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +12 -16
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/FlatMap.py +70 -0
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/Implementation.py +12 -9
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +29 -22
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/HardwareConfiguration.py +33 -0
  9. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/HeapUsage.py +10 -0
  10. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/SoftwareContext.py +23 -0
  11. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/StackUsage.py +93 -0
  12. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/__init__.py +39 -5
  13. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +28 -5
  14. armodel/models/M2/AUTOSARTemplates/CommonStructure/SwcBswMapping.py +48 -6
  15. armodel/models/M2/AUTOSARTemplates/GenericStructure/AbstractStructure.py +5 -5
  16. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +27 -1
  17. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +39 -0
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +17 -1
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +8 -0
  20. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +196 -5
  21. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +31 -0
  22. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +4 -3
  23. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/InstanceRefsUsage.py +17 -32
  24. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +4 -0
  25. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +17 -2
  26. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +81 -34
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +10 -1
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetCommunication.py +229 -0
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +167 -0
  30. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/NetworkEndpoint.py +225 -0
  31. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +96 -7
  32. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +47 -4
  33. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +18 -5
  34. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +7 -12
  35. armodel/models/M2/MSR/AsamHdo/BaseTypes.py +0 -1
  36. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +16 -1
  37. armodel/models/M2/MSR/CalibrationData/CalibrationValue.py +34 -3
  38. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +7 -0
  39. armodel/models/M2/MSR/DataDictionary/ServiceProcessTask.py +33 -0
  40. armodel/models/__init__.py +6 -0
  41. armodel/parser/abstract_arxml_parser.py +4 -14
  42. armodel/parser/arxml_parser.py +567 -224
  43. armodel/tests/test_armodel/models/test_ar_object.py +6 -2
  44. armodel/tests/test_armodel/models/test_ar_ref.py +2 -2
  45. armodel/tests/test_armodel/models/test_port_interface.py +4 -4
  46. armodel/tests/test_armodel/parser/test_parse_bswmd.py +48 -48
  47. armodel/writer/abstract_arxml_writer.py +2 -3
  48. armodel/writer/arxml_writer.py +566 -288
  49. {armodel-1.7.2.dist-info → armodel-1.7.4.dist-info}/METADATA +30 -2
  50. {armodel-1.7.2.dist-info → armodel-1.7.4.dist-info}/RECORD +54 -44
  51. {armodel-1.7.2.dist-info → armodel-1.7.4.dist-info}/LICENSE +0 -0
  52. {armodel-1.7.2.dist-info → armodel-1.7.4.dist-info}/WHEEL +0 -0
  53. {armodel-1.7.2.dist-info → armodel-1.7.4.dist-info}/entry_points.txt +0 -0
  54. {armodel-1.7.2.dist-info → armodel-1.7.4.dist-info}/top_level.txt +0 -0
@@ -2,13 +2,10 @@ from typing import List
2
2
  import xml.etree.ElementTree as ET
3
3
  import os
4
4
 
5
-
6
-
7
-
8
5
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
9
6
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
10
7
  from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
11
- from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuMethod, Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
8
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent, CompuMethod, Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
12
9
  from ..models.M2.MSR.AsamHdo.SpecialData import Sdg, Sd
13
10
  from ..models.M2.MSR.CalibrationData.CalibrationValue import SwValueCont, SwValues
14
11
  from ..models.M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps, SwPointerTargetProps
@@ -18,6 +15,7 @@ from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroupConte
18
15
  from ..models.M2.MSR.DataDictionary.DataDefProperties import ValueList
19
16
  from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroup
20
17
  from ..models.M2.MSR.DataDictionary.CalibrationParameter import SwCalprmAxisSet
18
+ from ..models.M2.MSR.DataDictionary.ServiceProcessTask import SwServiceArg
21
19
  from ..models.M2.MSR.Documentation.Annotation import Annotation, GeneralAnnotation
22
20
  from ..models.M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
23
21
  from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
@@ -25,15 +23,18 @@ from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName,
25
23
  from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
26
24
 
27
25
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
28
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalBehavior, BswModuleEntity, BswScheduleEvent, BswModeSenderPolicy
26
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswDataReceivedEvent, BswInternalBehavior, BswInternalTriggerOccurredEvent, BswInterruptEntity, BswModeSwitchEvent, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswModeSenderPolicy, BswTimingEvent
27
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
29
28
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
30
29
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
31
30
  from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
32
31
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
32
+ from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
33
33
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps, Code
34
34
  from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup, ModeRequestTypeMap, ModeDeclarationGroupPrototype
35
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
36
36
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import MemorySection
37
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
37
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
38
39
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
39
40
  from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceAlgorithm, DiagEventDebounceMonitorInternal, DiagnosticEventNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
@@ -46,25 +47,26 @@ from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyI
46
47
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable
47
48
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
48
49
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
49
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral
50
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Ip6AddressString, RefType, ARLiteral
50
51
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
51
52
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
52
53
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationRecordDataType, ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
53
54
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet, EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
54
55
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
55
56
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
56
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, AutosarVariableRef, VariableInAtomicSWCTypeInstanceRef
57
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, VariableInAtomicSWCTypeInstanceRef
57
58
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
58
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
60
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
59
61
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
60
62
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, RunnableEntityArgument, SwcInternalBehavior
63
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
61
64
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
62
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
63
65
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector
64
66
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
65
67
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
66
68
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
67
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, SenderReceiverInterface
69
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, DataPrototypeMapping, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, PortInterfaceMappingSet, SenderReceiverInterface, VariableAndParameterInterfaceMapping
68
70
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
69
71
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
70
72
 
@@ -73,12 +75,16 @@ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiv
73
75
  from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
74
76
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
75
77
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering
76
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, FramePort, IPduPort, ISignalPort, LinPhysicalChannel, PhysicalChannel
78
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinPhysicalChannel, PhysicalChannel
77
79
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import Frame, FrameTriggering, IPdu, IPduTiming, ISignalIPdu, ISignalTriggering, PduTriggering
78
80
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
79
81
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
80
82
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrameTriggering, RxIdentifierRange
81
83
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
84
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCommunicationController
85
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
86
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import Ipv6Configuration, NetworkEndpoint
87
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import SoAdConfig, SocketAddress
82
88
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import ISignalMapping
83
89
 
84
90
  from .abstract_arxml_parser import AbstractARXMLParser
@@ -114,7 +120,7 @@ class ARXMLParser(AbstractARXMLParser):
114
120
  return sdg
115
121
 
116
122
  def readSdgs(self, element: ET.Element, admin_data: AdminData):
117
- for child_element in self.findall(element, "./SDGS/SDG"):
123
+ for child_element in self.findall(element, "SDGS/SDG"):
118
124
  admin_data.addSdg(self.getSdg(child_element))
119
125
 
120
126
  def getAdminData(self, element: ET.Element, key: str) -> AdminData:
@@ -146,7 +152,7 @@ class ARXMLParser(AbstractARXMLParser):
146
152
  identifiable.setAdminData(self.getAdminData(element, "ADMIN-DATA"))
147
153
 
148
154
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
149
- for child_element in self.findall(element, "./L-4"):
155
+ for child_element in self.findall(element, "L-4"):
150
156
  l4 = LLongName()
151
157
  self.readARObjectAttributes(child_element, l4)
152
158
  l4.value = child_element.text
@@ -156,7 +162,7 @@ class ARXMLParser(AbstractARXMLParser):
156
162
 
157
163
  def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
158
164
  long_name = None
159
- child_element = self.find(element, "./%s" % key)
165
+ child_element = self.find(element, "%s" % key)
160
166
  if child_element is not None:
161
167
  long_name = MultilanguageLongName()
162
168
  self.readARObjectAttributes(child_element, long_name)
@@ -164,7 +170,7 @@ class ARXMLParser(AbstractARXMLParser):
164
170
  return long_name
165
171
 
166
172
  def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
167
- for child_element in self.findall(element, "./L-2"):
173
+ for child_element in self.findall(element, "L-2"):
168
174
  l2 = LOverviewParagraph()
169
175
  self.readARObjectAttributes(child_element, l2)
170
176
  l2.value = child_element.text
@@ -174,7 +180,7 @@ class ARXMLParser(AbstractARXMLParser):
174
180
 
175
181
  def getMultiLanguageOverviewParagraph(self, element: ET.Element, key: str) -> MultiLanguageOverviewParagraph:
176
182
  paragraph = None
177
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
183
+ child_element = self.find(element, key)
178
184
  if child_element is not None:
179
185
  paragraph = MultiLanguageOverviewParagraph()
180
186
  self.readARObjectAttributes(child_element, paragraph)
@@ -200,16 +206,18 @@ class ARXMLParser(AbstractARXMLParser):
200
206
  iref.setTargetComponentRef(self.getChildElementOptionalRefType(element, "TARGET-COMPONENT-REF"))
201
207
  return iref
202
208
 
203
- def getAutosarVariableInImplDatatype(self, element: ET.Element) -> AutosarVariableRef:
204
- child_element = self.find(element, "ACCESSED-VARIABLE")
209
+ def getAutosarVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
210
+ child_element = self.find(element, key)
205
211
  ref = None
206
212
  if (child_element is not None):
207
213
  ref = AutosarVariableRef()
208
- ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
214
+ #self.readARObjectAttributes(child_element, ref)
215
+ ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF"))) \
216
+ .setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
209
217
  return ref
210
218
 
211
- def getLocalVariableRef(self, element: ET.Element) -> AutosarVariableRef:
212
- child_element = self.find(element, "ACCESSED-VARIABLE")
219
+ def getLocalVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
220
+ child_element = self.find(element, key)
213
221
  ref = None
214
222
  if (child_element is not None):
215
223
  ref = AutosarVariableRef()
@@ -217,34 +225,34 @@ class ARXMLParser(AbstractARXMLParser):
217
225
  return ref
218
226
 
219
227
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
220
- for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
228
+ for child_element in self.findall(element, "%s/VARIABLE-ACCESS" % key):
221
229
  short_name = self.getShortName(child_element)
222
230
 
223
231
  self.logger.debug("readVariableAccesses %s" % short_name)
224
232
 
225
233
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
226
234
  variable_access = parent.createDataReceivePointByArgument(short_name)
227
- variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
235
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
228
236
  elif (key == "DATA-RECEIVE-POINT-BY-VALUES"):
229
237
  variable_access = parent.createDataReceivePointByValue(short_name)
230
- variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
238
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
231
239
  elif (key == "DATA-READ-ACCESSS"):
232
240
  variable_access = parent.createDataReadAccess(short_name)
233
- variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
241
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
234
242
  elif (key == "DATA-WRITE-ACCESSS"):
235
243
  variable_access = parent.createDataWriteAccess(short_name)
236
- variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
244
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
237
245
  elif (key == "DATA-SEND-POINTS"):
238
246
  variable_access = parent.createDataSendPoint(short_name)
239
- variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
247
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
240
248
  elif (key == "WRITTEN-LOCAL-VARIABLES"):
241
249
  variable_access = parent.createWrittenLocalVariable(short_name)
242
- variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
250
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
243
251
  elif (key == "READ-LOCAL-VARIABLES"):
244
252
  variable_access = parent.createReadLocalVariable(short_name)
245
- variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
253
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
246
254
  else:
247
- self._raiseError("Invalid key type <%s>" % key)
255
+ self.notImplemented("Unsupported Variable Accesss <%s>" % key)
248
256
 
249
257
  self.readIdentifiable(child_element, variable_access)
250
258
 
@@ -286,71 +294,45 @@ class ARXMLParser(AbstractARXMLParser):
286
294
  .setSwAddrMethodRef(self.getChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF"))
287
295
 
288
296
  def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
289
- for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
297
+ for child_element in self.findall(element, "sMANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
290
298
  ref_type = self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF")
291
299
  if ref_type is not None:
292
300
  entity.addManagedModeGroupRef(ref_type)
293
301
 
294
- def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
295
- self.readExecutableEntity(element, entity)
296
- entity.setImplementedEntryRef(self.getChildElementRefType(entity.getShortName(), element, "IMPLEMENTED-ENTRY-REF"))
297
- self.readBswModuleEntityManagedModeGroup(element, entity)
298
-
299
- def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
300
- for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
301
- short_name = self.getShortName(child_element)
302
- self.logger.debug("readBswCalledEntity %s" % short_name)
303
- entity = parent.createBswCalledEntity(short_name)
304
-
305
- self.readBswModuleEntity(child_element, entity)
306
-
307
- def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
308
- for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
309
- short_name = self.getShortName(child_element)
310
- self.logger.debug("readBswSchedulableEntity %s" % short_name)
311
- entity = parent.createBswSchedulableEntity(short_name)
312
- self.readBswModuleEntity(child_element, entity)
302
+
313
303
 
314
304
  def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
315
- event.startsOnEventRef = self.getChildElementRefType(event.getShortName(), element, "STARTS-ON-EVENT-REF")
305
+ event.startsOnEventRef = self.getChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF")
316
306
 
317
307
  def readBswScheduleEvent(self, element, event: BswScheduleEvent):
318
308
  self.readBswEvent(element, event)
319
309
 
320
- def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
321
- for child_element in self.findall(element, "EVENTS/BSW-MODE-SWITCH-EVENT"):
322
- short_name = self.getShortName(child_element)
323
- self.logger.debug("readBswModeSwitchEvent %s" % short_name)
324
- event = parent.createBswModeSwitchEvent(short_name)
325
- # Read the Inherit BswScheduleEvent
326
- self.readBswScheduleEvent(child_element, event)
327
-
328
- def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
329
- for child_element in self.findall(element, "EVENTS/BSW-TIMING-EVENT"):
330
- short_name = self.getShortName(child_element)
331
- self.logger.debug("read BswTimingEvent %s" % short_name)
332
- event = parent.createBswTimingEvent(short_name)
333
- event.setPeriod(self.getChildElementOptionalTimeValue(child_element, "PERIOD"))
334
- # Read the Inherit BswScheduleEvent
335
- self.readBswScheduleEvent(child_element, event)
336
-
337
- def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
338
- for child_element in self.findall(element, "EVENTS/BSW-DATA-RECEIVED-EVENT"):
339
- short_name = self.getShortName(child_element)
340
- self.logger.debug("readBswDataReceivedEvent %s" % short_name)
341
- event = parent.createBswDataReceivedEvent(short_name)
342
- event.dataRef = self.getChildElementRefType(parent.getShortName(), child_element, "DATA-REF")
343
- # Read the Inherit BswScheduleEvent
344
- self.readBswScheduleEvent(child_element, event)
345
-
346
- def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
347
- for child_element in self.findall(element, "EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
348
- short_name = self.getShortName(child_element)
349
- self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
350
- event = parent.createBswInternalTriggerOccurredEvent(short_name)
351
- event.eventSourceRef = self.getChildElementRefType(parent.getShortName(), child_element, "EVENT-SOURCE-REF")
352
- # Read the Inherit BswScheduleEvent
353
- self.readBswScheduleEvent(child_element, event)
310
+ def readBswModeSwitchEvent(self, element: ET.Element, event: BswModeSwitchEvent):
311
+ self.logger.debug("read BswModeSwitchEvent %s" % event.getShortName())
312
+ # Read the Inherit BswScheduleEvent
313
+ self.readBswScheduleEvent(element, event)
314
+
315
+ def readBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
316
+ self.logger.debug("read BswTimingEvent %s" % event.getShortName())
317
+ # Read the Inherit BswScheduleEvent
318
+ self.readBswScheduleEvent(element, event)
319
+ event.setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
320
+ if event.getPeriod() is None:
321
+ self.logger.warning("Period of BswTimingEvent <%s> is invalid." % event.getShortName())
322
+ else:
323
+ self.logger.debug(" Period: <%f, %s>" % (event.getPeriod().getValue(), event.getPeriod().getText()))
324
+
325
+ def readBswDataReceivedEvent(self, element: ET.Element, event: BswDataReceivedEvent):
326
+ self.logger.debug("read BswTimingEvent %s" % event.getShortName())
327
+ # Read the Inherit BswScheduleEvent
328
+ self.readBswScheduleEvent(element, event)
329
+ event.setDataRef(self.getChildElementOptionalRefType(element, "DATA-REF"))
330
+
331
+ def readBswInternalTriggerOccurredEvent(self, element: ET.Element, event: BswInternalTriggerOccurredEvent):
332
+ self.logger.debug("read BswTimingEvent %s" % event.getShortName())
333
+ # Read the Inherit BswScheduleEvent
334
+ self.readBswScheduleEvent(element, event)
335
+ event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
354
336
 
355
337
  def getBswModeSenderPolicy(self, element: ET.Element) -> BswModeSenderPolicy:
356
338
  policy = BswModeSenderPolicy()
@@ -367,13 +349,13 @@ class ARXMLParser(AbstractARXMLParser):
367
349
  self._raiseError("Unsupported ModeSenderPolicy type <%s>." % tag_name)
368
350
 
369
351
  def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
370
- child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
352
+ child_element = self.find(element, "DATA-TYPE-MAPPING-REFS")
371
353
  if child_element is not None:
372
- for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
354
+ for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
373
355
  behavior.addDataTypeMappingRef(ref)
374
356
 
375
357
  def readInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
376
- for child_element in element.findall("./xmlns:CONSTANT-MEMORYS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
358
+ for child_element in self.findall(element, "CONSTANT-MEMORYS/PARAMETER-DATA-PROTOTYPE"):
377
359
  short_name = self.getShortName(child_element)
378
360
  prototype = behavior.createConstantMemory(short_name)
379
361
  self.readParameterDataPrototype(child_element, prototype)
@@ -381,7 +363,7 @@ class ARXMLParser(AbstractARXMLParser):
381
363
  def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
382
364
  self.readIdentifiable(element, behavior)
383
365
  self.readInternalBehaviorConstantMemories(element, behavior)
384
- for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
366
+ for child_element in self.findall(element, "EXCLUSIVE-AREAS/EXCLUSIVE-AREA"):
385
367
  short_name = self.getShortName(child_element)
386
368
  behavior.createExclusiveArea(short_name)
387
369
  self.readDataTypeMappingRefs(element, behavior)
@@ -389,6 +371,7 @@ class ARXMLParser(AbstractARXMLParser):
389
371
  def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
390
372
  assignment = RoleBasedDataAssignment()
391
373
  assignment.setRole(self.getChildElementOptionalLiteral(element, "ROLE")) \
374
+ .setUsedDataElement(self.getAutosarVariableRef(element, "USED-DATA-ELEMENT")) \
392
375
  .setUsedParameterElement(self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")) \
393
376
  .setUsedPimRef(self.getChildElementOptionalRefType(element, "USED-PIM-REF"))
394
377
  return assignment
@@ -423,7 +406,7 @@ class ARXMLParser(AbstractARXMLParser):
423
406
  self._raiseError("Unsupported assigned data <%s>" % tag_name)
424
407
 
425
408
  def readSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
426
- for child_element in element.findall("./xmlns:ASSIGNED-PORTS/*", self.nsmap):
409
+ for child_element in self.findall(element, "ASSIGNED-PORTS/*"):
427
410
  tag_name = self.getTagName(child_element.tag)
428
411
  if (tag_name == "ROLE-BASED-PORT-ASSIGNMENT"):
429
412
  dependency.AddAssignedPort(self.getRoleBasedPortAssignment(child_element))
@@ -434,6 +417,7 @@ class ARXMLParser(AbstractARXMLParser):
434
417
  short_name = self.getShortName(element)
435
418
  needs = parent.createNvBlockNeeds(short_name)
436
419
  self.logger.debug("read NvBlockNeeds %s" % short_name)
420
+ self.readIdentifiable(element, needs)
437
421
  needs.setCalcRamBlockCrc(self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")) \
438
422
  .setCheckStaticBlockId(self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")) \
439
423
  .setNDataSets(self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")) \
@@ -451,18 +435,21 @@ class ARXMLParser(AbstractARXMLParser):
451
435
  .setUseCRCCompMechanism(self.getChildElementOptionalBooleanValue(element, "USE-CRC-COMP-MECHANISM")) \
452
436
  .setWriteOnlyOnce(self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")) \
453
437
  .setWriteVerification(self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")) \
438
+ .setWritingFrequency(self.getChildElementOptionalPositiveInteger(element, "WRITING-FREQUENCY")) \
454
439
  .setWritingPriority(self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY"))
455
440
 
456
441
  def reaDiagnosticCommunicationManagerNeeds(self, element: ET.Element, parent: SwcServiceDependency):
457
442
  short_name = self.getShortName(element)
458
443
  needs = parent.createDiagnosticCommunicationManagerNeeds(short_name)
459
444
  self.logger.debug("read DiagnosticCommunicationManagerNeeds %s" % short_name)
445
+ self.readIdentifiable(element, needs)
460
446
  needs.setServiceRequestCallbackType(self.getChildElementOptionalLiteral(element, "SERVICE-REQUEST-CALLBACK-TYPE"))
461
447
 
462
448
  def readDiagnosticRoutineNeeds(self, element: ET.Element, parent: SwcServiceDependency):
463
449
  short_name = self.getShortName(element)
464
450
  needs = parent.createDiagnosticRoutineNeeds(short_name)
465
451
  self.logger.debug("read DiagnosticRoutineNeeds %s" % short_name)
452
+ self.readIdentifiable(element, needs)
466
453
  needs.setDiagRoutineType(self.getChildElementOptionalLiteral(element, "DIAG-ROUTINE-TYPE")) \
467
454
  .setRidNumber(self.getChildElementOptionalIntegerValue(element, "RID-NUMBER"))
468
455
 
@@ -470,6 +457,7 @@ class ARXMLParser(AbstractARXMLParser):
470
457
  short_name = self.getShortName(element)
471
458
  needs = parent.createDiagnosticValueNeeds(short_name)
472
459
  self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
460
+ self.readIdentifiable(element, needs)
473
461
  needs.setDataLength(self.getChildElementOptionalPositiveInteger(element, "DATA-LENGTH")) \
474
462
  .setDiagnosticValueAccess(self.getChildElementOptionalLiteral(element, "DIAGNOSTIC-VALUE-ACCESS")) \
475
463
  .setDidNumber(self.getChildElementOptionalIntegerValue(element, "DID-NUMBER")) \
@@ -491,20 +479,34 @@ class ARXMLParser(AbstractARXMLParser):
491
479
  def readDiagnosticEventNeeds(self, element: ET.Element, parent: SwcServiceDependency):
492
480
  short_name = self.getShortName(element)
493
481
  needs = parent.createDiagnosticEventNeeds(short_name)
494
- self.logger.debug("read DiagnosticEventNeeds %s" % short_name)
495
-
482
+ self.logger.debug("Read DiagnosticEventNeeds %s" % short_name)
483
+ self.readIdentifiable(element, needs)
496
484
  self.readDiagEventDebounceAlgorithm(element, needs)
497
485
  needs.setDtcKind(self.getChildElementOptionalLiteral(element, "DTC-KIND")) \
498
- .setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
486
+ .setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
487
+
488
+ def readDiagnosticEventInfoNeeds(self, element: ET.Element, parent: SwcServiceDependency):
489
+ short_name = self.getShortName(element)
490
+ needs = parent.createDiagnosticEventInfoNeeds(short_name)
491
+ self.logger.debug("Read DiagnosticEventInfoNeeds %s" % short_name)
492
+ self.readIdentifiable(element, needs)
493
+ needs.setUdsDtcNumber(self.getChildElementOptionalPositiveInteger(element, "UDS-DTC-NUMBER"))
499
494
 
500
495
  def readCryptoServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
501
496
  short_name = self.getShortName(element)
502
497
  needs = parent.createCryptoServiceNeeds(short_name)
503
- self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
498
+ self.logger.debug("Read DiagnosticValueNeeds %s" % short_name)
499
+ self.readIdentifiable(element, needs)
504
500
  needs.setMaximumKeyLength(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-KEY-LENGTH"))
505
501
 
502
+ def readEcuStateMgrUserNeeds(self, element: ET.Element, parent: SwcServiceDependency):
503
+ short_name = self.getShortName(element)
504
+ needs = parent.createEcuStateMgrUserNeeds(short_name)
505
+ self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
506
+ self.readIdentifiable(element, needs)
507
+
506
508
  def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
507
- for child_element in element.findall("./xmlns:SERVICE-NEEDS/*", self.nsmap):
509
+ for child_element in self.findall(element, "SERVICE-NEEDS/*"):
508
510
  tag_name = self.getTagName(child_element.tag)
509
511
  if tag_name == "NV-BLOCK-NEEDS":
510
512
  self.readNvBlockNeeds(child_element, parent)
@@ -516,40 +518,56 @@ class ARXMLParser(AbstractARXMLParser):
516
518
  self.readDiagnosticValueNeeds(child_element, parent)
517
519
  elif tag_name == "DIAGNOSTIC-EVENT-NEEDS":
518
520
  self.readDiagnosticEventNeeds(child_element, parent)
521
+ elif tag_name == "DIAGNOSTIC-EVENT-INFO-NEEDS":
522
+ self.readDiagnosticEventInfoNeeds(child_element, parent)
519
523
  elif tag_name == "CRYPTO-SERVICE-NEEDS":
520
524
  self.readCryptoServiceNeeds(child_element, parent)
525
+ elif tag_name == "ECU-STATE-MGR-USER-NEEDS":
526
+ self.readEcuStateMgrUserNeeds(child_element, parent)
521
527
  else:
522
528
  self.notImplemented("Unsupported service needs <%s>" % tag_name)
523
529
 
524
530
  def readSwcServiceDependency(self, element: ET.Element, parent: SwcInternalBehavior):
525
531
  short_name = self.getShortName(element)
526
532
  dependency = parent.createSwcServiceDependency(short_name)
527
- self.logger.debug("readSwcServiceDependency %s" % short_name)
533
+ self.logger.debug("read SwcServiceDependency %s" % short_name)
528
534
  self.readServiceDependency(element, dependency)
529
535
  self.readSwcServiceDependencyAssignedData(element, dependency)
530
536
  self.readSwcServiceDependencyAssignedPorts(element, dependency)
531
537
  self.readSwcServiceDependencyServiceNeeds(element, dependency)
532
538
 
533
539
  def readSwcInternalBehaviorServiceDependencies(self, element: ET.Element, parent: SwcInternalBehavior):
534
- for child_element in element.findall("./xmlns:SERVICE-DEPENDENCYS/*", self.nsmap):
540
+ for child_element in self.findall(element, "SERVICE-DEPENDENCYS/*"):
535
541
  tag_name = self.getTagName(child_element.tag)
536
542
  if (tag_name == "SWC-SERVICE-DEPENDENCY"):
537
543
  self.readSwcServiceDependency(child_element, parent)
538
544
  else:
539
- self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
545
+ self.notImplemented("Unsupported Service Dependencies <%s>" % tag_name)
540
546
 
541
547
  def getIncludedDataTypeSets(self, element: ET.Element) -> List[IncludedDataTypeSet]:
542
548
  include_data_type_sets = []
543
- for child_element in self.findall(element, "./INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
549
+ for child_element in self.findall(element, "INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
544
550
  include_data_type_set = IncludedDataTypeSet()
545
551
  self.readARObjectAttributes(child_element, include_data_type_set)
546
- for ref_type in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-REFS/DATA-TYPE-REF"):
552
+ for ref_type in self.getChildElementRefTypeList(child_element, "DATA-TYPE-REFS/DATA-TYPE-REF"):
547
553
  include_data_type_set.addDataTypeRef(ref_type)
548
554
  include_data_type_sets.append(include_data_type_set)
549
555
  return include_data_type_sets
556
+
557
+ def readSwcInternalBehaviorArTypedPerInstanceMemories(self, element: ET.Element, parent: SwcInternalBehavior):
558
+ for child_element in self.findall(element, "AR-TYPED-PER-INSTANCE-MEMORYS/VARIABLE-DATA-PROTOTYPE"):
559
+ short_name = self.getShortName(child_element)
560
+ prototype = parent.createArTypedPerInstanceMemory(short_name)
561
+ self.readVariableDataPrototype(child_element, prototype)
562
+
563
+ def readSwcInternalBehaviorSharedParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
564
+ for child_element in self.findall(element, "SHARED-PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
565
+ short_name = self.getShortName(child_element)
566
+ prototype = behavior.createSharedParameter(short_name)
567
+ self.readParameterDataPrototype(child_element, prototype)
550
568
 
551
569
  def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
552
- for child_element in self.findall(element, "./INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
570
+ for child_element in self.findall(element, "INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
553
571
  short_name = self.getShortName(child_element)
554
572
  behavior = parent.createSwcInternalBehavior(short_name)
555
573
  self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
@@ -558,41 +576,90 @@ class ARXMLParser(AbstractARXMLParser):
558
576
  self.readInternalBehavior(child_element, behavior)
559
577
 
560
578
  # read the extra SwcInternalBehavior
579
+ self.readSwcInternalBehaviorArTypedPerInstanceMemories(child_element, behavior)
561
580
  self.readSwcInternalBehaviorRunnables(child_element, behavior)
562
581
  self.readSwcInternalBehaviorEvents(child_element, behavior)
563
582
  self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
564
583
  self.readExplicitInterRunnableVariables(child_element, behavior)
565
- for data_type_set in self.getIncludedDataTypeSets(child_element):
566
- behavior.addIncludedDataTypeSet(data_type_set)
567
- behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
584
+
585
+ behavior.setHandleTerminationAndRestart(self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART"))
568
586
  self.readPerInstanceMemories(child_element, behavior)
569
587
  self.readPerInstanceParameters(child_element, behavior)
570
588
  self.readPortAPIOptions(child_element, behavior)
571
- behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
589
+ self.readSwcInternalBehaviorSharedParameters(child_element, behavior)
590
+ behavior.setSupportsMultipleInstantiation(self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION"))
572
591
 
573
592
  def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
574
593
  group_sets = []
575
594
  for child_element in self.findall(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS/INCLUDED-MODE-DECLARATION-GROUP-SET"):
576
595
  group_set = IncludedModeDeclarationGroupSet()
577
- for ref_type in self.getChildElementRefTypeList(child_element, "./MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
596
+ for ref_type in self.getChildElementRefTypeList(child_element, "MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
578
597
  group_set.addModeDeclarationGroupRef(ref_type)
579
598
  group_sets.append(group_set)
580
599
  return group_sets
600
+
601
+ def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
602
+ self.readExecutableEntity(element, entity)
603
+ entity.setImplementedEntryRef(self.getChildElementRefType(entity.getShortName(), element, "IMPLEMENTED-ENTRY-REF"))
604
+ self.readBswModuleEntityManagedModeGroup(element, entity)
605
+
606
+ def readBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
607
+ self.logger.debug("read BswCalledEntity %s" % entity.getShortName())
608
+ self.readBswModuleEntity(element, entity)
609
+
610
+ def readBswSchedulableEntity(self, element: ET.Element, entity: BswSchedulableEntity):
611
+ self.logger.debug("read BswSchedulableEntity %s" % entity.getShortName())
612
+ self.readBswModuleEntity(element, entity)
613
+
614
+ def readBswInterruptEntity(self, element: ET.Element, entity: BswInterruptEntity):
615
+ self.logger.debug("read BswSchedulableEntity %s" % entity.getShortName())
616
+ self.readBswModuleEntity(element, entity)
617
+ entity.setInterruptCategory(self.getChildElementOptionalLiteral(element, "INTERRUPT-CATEGORY")) \
618
+ .setInterruptSource(self.getChildElementOptionalLiteral(element, "INTERRUPT-SOURCE"))
619
+
620
+ def readBswInternalBehaviorEntities(self, element: ET.Element, behavior: BswInternalBehavior):
621
+ for child_element in self.findall(element, "ENTITYS/*"):
622
+ tag_name = self.getTagName(child_element)
623
+ if tag_name == "BSW-CALLED-ENTITY":
624
+ entity = behavior.createBswCalledEntity(self.getShortName(child_element))
625
+ self.readBswCalledEntity(child_element, entity)
626
+ elif tag_name == "BSW-SCHEDULABLE-ENTITY":
627
+ entity = behavior.createBswSchedulableEntity(self.getShortName(child_element))
628
+ self.readBswSchedulableEntity(child_element, entity)
629
+ elif tag_name == "BSW-INTERRUPT-ENTITY":
630
+ entity = behavior.createBswInterruptEntity(self.getShortName(child_element))
631
+ self.readBswInterruptEntity(child_element, entity)
632
+ else:
633
+ self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
634
+
635
+ def readBswInternalBehaviorEvents(self, element: ET.Element, behavior: BswInternalBehavior):
636
+ for child_element in self.findall(element, "EVENTS/*"):
637
+ tag_name = self.getTagName(child_element)
638
+ if tag_name == "BSW-MODE-SWITCH-EVENT":
639
+ event = behavior.createBswModeSwitchEvent(self.getShortName(child_element))
640
+ self.readBswModeSwitchEvent(child_element, event)
641
+ elif tag_name == "BSW-TIMING-EVENT":
642
+ event = behavior.createBswTimingEvent(self.getShortName(child_element))
643
+ self.readBswTimingEvent(child_element, event)
644
+ elif tag_name == "BSW-DATA-RECEIVED-EVENT":
645
+ event = behavior.createBswDataReceivedEvent(self.getShortName(child_element))
646
+ self.readBswDataReceivedEvent(child_element, event)
647
+ elif tag_name == "BSW-INTERNAL-TRIGGER-OCCURRED-EVENT":
648
+ event = behavior.createBswInternalTriggerOccurredEvent(self.getShortName(child_element))
649
+ self.readBswInternalTriggerOccurredEvent(child_element, event)
650
+ else:
651
+ self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
581
652
 
582
653
  def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
583
- for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
654
+ for child_element in self.findall(element, "INTERNAL-BEHAVIORS/BSW-INTERNAL-BEHAVIOR"):
584
655
  short_name = self.getShortName(child_element)
585
656
  behavior = parent.createBswInternalBehavior(short_name)
586
- self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
657
+ self.logger.debug("read BswInternalBehavior %s" % behavior.full_name)
587
658
 
588
659
  # read the internal behavior
589
660
  self.readInternalBehavior(child_element, behavior)
590
- self.readBswCalledEntity(child_element, behavior)
591
- self.readBswSchedulableEntity(child_element, behavior)
592
- self.readBswModeSwitchEvent(child_element, behavior)
593
- self.readBswTimingEvent(child_element, behavior)
594
- self.readBswDataReceivedEvent(child_element, behavior)
595
- self.readBswInternalTriggerOccurredEvent(child_element, behavior)
661
+ self.readBswInternalBehaviorEntities(child_element, behavior)
662
+ self.readBswInternalBehaviorEvents(child_element, behavior)
596
663
  self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
597
664
  for group_set in self.getIncludedModeDeclarationGroupSets(child_element):
598
665
  behavior.addIncludedModeDeclarationGroupSet(group_set)
@@ -600,27 +667,42 @@ class ARXMLParser(AbstractARXMLParser):
600
667
  def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
601
668
  short_name = self.getShortName(element)
602
669
  bsw_module_description = parent.createBswModuleDescription(short_name)
603
- bsw_module_description.module_id = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
670
+ bsw_module_description.moduleId = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
604
671
 
605
- self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
672
+ self.logger.debug("read BswModuleDescription %s" % bsw_module_description.full_name)
606
673
 
607
674
  self.readBswModuleDescriptionImplementedEntry(element, bsw_module_description)
608
675
  self.readProvidedModeGroup(element, bsw_module_description)
609
676
  self.readRequiredModeGroup(element, bsw_module_description)
610
677
  self.readBswInternalBehavior(element, bsw_module_description)
611
678
 
679
+ def readSwServiceArg(self, element: ET.Element, arg: SwServiceArg):
680
+ self.logger.debug("Read SwServiceArg <%s>" % arg.getShortName())
681
+ arg.setDirection(self.getChildElementOptionalLiteral(element, "DIRECTION")) \
682
+ .setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
683
+
684
+ def readBswModuleEntryArguments(self, element: ET.Element, entry: BswModuleEntry):
685
+ for child_element in self.findall(element, "ARGUMENTS/*"):
686
+ tag_name = self.getTagName(child_element)
687
+ if tag_name == "SW-SERVICE-ARG":
688
+ arg = entry.createArgument(self.getShortName(child_element))
689
+ self.readSwServiceArg(child_element, arg)
690
+ else:
691
+ self.notImplemented("Unsupported Argument <%s>" % tag_name)
692
+
612
693
  def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
613
694
  short_name = self.getShortName(element)
614
695
  entry = parent.createBswModuleEntry(short_name)
615
- entry.is_reentrant = self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")
616
- entry.is_synchronous = self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")
617
- entry.service_id = self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")
618
- entry.call_type = self.getChildElementOptionalLiteral(element, "CALL-TYPE")
619
- entry.execution_context = self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")
620
- entry.sw_service_impl_policy = self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY")
696
+ self.readIdentifiable(element, entry)
697
+ self.readBswModuleEntryArguments(element, entry)
698
+ entry.setIsReentrant(self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")) \
699
+ .setIsSynchronous(self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")) \
700
+ .setServiceId(self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")) \
701
+ .setCallType(self.getChildElementOptionalLiteral(element, "CALL-TYPE")) \
702
+ .setExecutionContext(self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")) \
703
+ .setSwServiceImplPolicy(self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY"))
621
704
 
622
- #self.logger.debug("readBswModuleEntry \n%s" % entry)
623
- self.logger.debug("readBswModuleEntry %s" % entry.getShortName())
705
+ self.logger.debug("read BswModuleEntry %s" % entry.getShortName())
624
706
 
625
707
  def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
626
708
  self.readARObjectAttributes(element, engineering_obj)
@@ -634,7 +716,7 @@ class ARXMLParser(AbstractARXMLParser):
634
716
  return obj
635
717
 
636
718
  def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
637
- for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/*", self.nsmap):
719
+ for child_element in self.findall(element, "ARTIFACT-DESCRIPTORS/*"):
638
720
  tag_name = self.getTagName(child_element.tag)
639
721
  if tag_name == "AUTOSAR-ENGINEERING-OBJECT":
640
722
  code_desc.addArtifactDescriptor(self.getAutosarEngineeringObject(child_element))
@@ -642,7 +724,7 @@ class ARXMLParser(AbstractARXMLParser):
642
724
  self._raiseError("Unsupported Artifact Descriptor <%s>" % tag_name)
643
725
 
644
726
  def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
645
- for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
727
+ for child_element in self.findall(element, "CODE-DESCRIPTORS/CODE"):
646
728
  short_name = self.getShortName(child_element)
647
729
  self.logger.debug("readCodeDescriptor %s" % short_name)
648
730
  code_desc = impl.createCodeDescriptor(short_name)
@@ -650,13 +732,13 @@ class ARXMLParser(AbstractARXMLParser):
650
732
  self.readArtifactDescriptor(child_element, code_desc)
651
733
 
652
734
  def readMemorySectionOptions(self, element: ET.Element, section: MemorySection):
653
- child_element = element.find("./xmlns:OPTIONS", self.nsmap)
735
+ child_element = self.find(element, "OPTIONS")
654
736
  if child_element is not None:
655
737
  for value in self.getChildElementLiteralValueList(child_element, "OPTION"):
656
738
  section.addOption(value)
657
739
 
658
740
  def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
659
- for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
741
+ for child_element in self.findall(element, "MEMORY-SECTIONS/MEMORY-SECTION"):
660
742
  memory_section = consumption.createMemorySection(self.getShortName(child_element))
661
743
  self.readIdentifiable(child_element, memory_section)
662
744
  memory_section.setAlignment(self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")) \
@@ -665,32 +747,48 @@ class ARXMLParser(AbstractARXMLParser):
665
747
  memory_section.setSize(self.getChildElementOptionalNumericalValue(child_element, "SIZE")) \
666
748
  .setSwAddrMethodRef(self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")) \
667
749
  .setSymbol(self.getChildElementOptionalLiteral(child_element, "SYMBOL"))
668
- self.logger.debug("readMemorySections %s" % memory_section.getShortName())
750
+ self.logger.debug("read MemorySections %s" % memory_section.getShortName())
751
+
752
+ def readStackUsage(self, element: ET.Element, usage: StackUsage):
753
+ self.logger.debug("read StackUsage %s" % usage.getShortName())
754
+ self.readIdentifiable(element, usage)
755
+
756
+ def readRoughEstimateStackUsage(self, element: ET.Element, usage: RoughEstimateStackUsage):
757
+ self.readStackUsage(element, usage)
758
+ usage.setMemoryConsumption(self.getChildElementOptionalPositiveInteger(element, "MEMORY-CONSUMPTION"))
759
+
760
+ def readStackUsages(self, element: ET.Element, consumption: ResourceConsumption):
761
+ for child_element in self.findall(element, "STACK-USAGES/*"):
762
+ tag_name = self.getTagName(child_element)
763
+ if tag_name == "ROUGH-ESTIMATE-STACK-USAGE":
764
+ usage = consumption.createRoughEstimateStackUsage(self.getShortName(child_element))
765
+ self.readRoughEstimateStackUsage(child_element, usage)
766
+ else:
767
+ self.notImplemented("Unsupported Stack Usages: <%s>" % tag_name)
669
768
 
670
769
  def readResourceConsumption(self, element: ET.Element, impl: Implementation):
671
- child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
770
+ child_element = self.find(element, "RESOURCE-CONSUMPTION")
672
771
  if (child_element is not None):
673
- short_name = self.getShortName(child_element)
674
- consumption = ResourceConsumption(impl, short_name)
772
+ consumption = impl.createResourceConsumption(self.getShortName(child_element))
675
773
  self.readIdentifiable(child_element, consumption)
676
774
  self.readMemorySections(child_element, consumption)
677
- impl.setResourceConsumption(consumption)
775
+ self.readStackUsages(child_element, consumption)
678
776
 
679
777
  def readImplementation(self, element: ET.Element, impl: Implementation):
680
778
  self.readIdentifiable(element, impl)
681
779
  self.readCodeDescriptor(element, impl)
682
- impl.programmingLanguage = self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE")
780
+ impl.setProgrammingLanguage(self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE"))
683
781
  self.readResourceConsumption(element, impl)
684
- impl.swVersion = self.getChildElementOptionalLiteral(element, "SW-VERSION")
685
- impl.swcBswMappingRef = self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")
686
- impl.usedCodeGenerator = self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")
687
- impl.vendorId = self.getChildElementOptionalNumericalValue(element, "VENDOR-ID")
782
+ impl.setSwVersion(self.getChildElementOptionalLiteral(element, "SW-VERSION")) \
783
+ .setSwcBswMappingRef(self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")) \
784
+ .setUsedCodeGenerator(self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")) \
785
+ .setVendorId(self.getChildElementOptionalNumericalValue(element, "VENDOR-ID"))
688
786
 
689
- def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
690
- child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
787
+ def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, impl: BswImplementation):
788
+ child_element = self.find(element, "VENDOR-SPECIFIC-MODULE-DEF-REFS")
691
789
  if child_element is not None:
692
- for ref in self.getChildElementRefTypeList(child_element, "./VENDOR-SPECIFIC-MODULE-DEF-REF"):
693
- parent.addVendorSpecificModuleDefRef(ref)
790
+ for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
791
+ impl.addVendorSpecificModuleDefRef(ref)
694
792
 
695
793
  def readBswImplementation(self, element: ET.Element, parent: ARPackage):
696
794
  short_name = self.getShortName(element)
@@ -727,21 +825,21 @@ class ARXMLParser(AbstractARXMLParser):
727
825
  argument = RunnableEntityArgument()
728
826
  argument.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
729
827
  return argument
730
-
828
+
731
829
  def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
732
- accessed_parameter = None
733
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
830
+ parameter = None
831
+ child_element = self.find(element, key)
734
832
  if child_element is not None:
735
- accessed_parameter = AutosarParameterRef()
736
- accessed_parameter.local_parameter_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF")
737
- return accessed_parameter
833
+ parameter = AutosarParameterRef()
834
+ parameter.setLocalParameterRef(self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF"))
835
+ return parameter
738
836
 
739
837
  def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
740
- for child_element in element.findall("./xmlns:PARAMETER-ACCESSS/xmlns:PARAMETER-ACCESS", self.nsmap):
838
+ for child_element in self.findall(element, "PARAMETER-ACCESSS/PARAMETER-ACCESS"):
741
839
  short_name = self.getShortName(child_element)
742
840
  self.logger.debug("readParameterAccesses %s" % short_name)
743
841
  parameter_access = parent.createParameterAccess(short_name)
744
- parameter_access.accessed_parameter = self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER")
842
+ parameter_access.setAccessedParameter(self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER"))
745
843
 
746
844
  def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
747
845
  self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
@@ -897,7 +995,7 @@ class ARXMLParser(AbstractARXMLParser):
897
995
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
898
996
  self.readIdentifiable(element, event)
899
997
  event.startOnEventRef = self.getChildElementOptionalRefType(element, "START-ON-EVENT-REF")
900
- for child_element in element.findall("./xmlns:DISABLED-MODE-IREFS/xmlns:DISABLED-MODE-IREF", self.nsmap):
998
+ for child_element in self.findall(element, "DISABLED-MODE-IREFS/DISABLED-MODE-IREF"):
901
999
  iref = self.getRModeInAtomicSwcInstanceRef(child_element)
902
1000
  event.addDisabledModeIRef(iref)
903
1001
 
@@ -919,7 +1017,7 @@ class ARXMLParser(AbstractARXMLParser):
919
1017
  def readVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
920
1018
  self.readAutosarDataPrototype(element, prototype)
921
1019
  prototype.setInitValue(self.getInitValue(element))
922
-
1020
+
923
1021
  def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
924
1022
  for child_element in self.findall(element, "EXPLICIT-INTER-RUNNABLE-VARIABLES/VARIABLE-DATA-PROTOTYPE"):
925
1023
  short_name = self.getShortName(child_element)
@@ -944,7 +1042,7 @@ class ARXMLParser(AbstractARXMLParser):
944
1042
  self.readIdentifiable(element, prototype)
945
1043
  self.readAutosarDataPrototype(element, prototype)
946
1044
  prototype.setInitValue(self.getInitValue(element))
947
-
1045
+
948
1046
  def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
949
1047
  for child_element in self.findall(element, "PER-INSTANCE-PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
950
1048
  short_name = self.getShortName(child_element)
@@ -955,16 +1053,17 @@ class ARXMLParser(AbstractARXMLParser):
955
1053
  argument_value = PortDefinedArgumentValue()
956
1054
  child_element = self.find(element, "VALUE/*")
957
1055
  if child_element is not None:
958
- argument_value.value = self.getValueSpecification(child_element)
959
- argument_value.valueTypeTRef = self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF")
1056
+ argument_value.setValue(self.getValueSpecification(child_element, self.getTagName(child_element)))
1057
+ argument_value.setValueTypeTRef(self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF"))
960
1058
  return argument_value
961
1059
 
962
1060
  def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
963
1061
  for child_element in self.findall(element, "PORT-API-OPTIONS/PORT-API-OPTION"):
964
1062
  option = PortAPIOption()
965
- option.enableTakeAddress = self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")
966
- option.indirectAPI = self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")
967
- option.portRef = self.getChildElementOptionalRefType(child_element, "PORT-REF")
1063
+ option.setEnableTakeAddress(self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")) \
1064
+ .setErrorHandling(self.getChildElementOptionalLiteral(child_element, "ERROR-HANDLING")) \
1065
+ .setIndirectAPI(self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")) \
1066
+ .setPortRef(self.getChildElementOptionalRefType(child_element, "PORT-REF"))
968
1067
  for argument_value_tag in self.findall(child_element, "PORT-ARG-VALUES/PORT-DEFINED-ARGUMENT-VALUE"):
969
1068
  option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
970
1069
  behavior.addPortAPIOption(option)
@@ -1026,6 +1125,15 @@ class ARXMLParser(AbstractARXMLParser):
1026
1125
  else:
1027
1126
  self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
1028
1127
 
1128
+ def getSwPointerTargetProps(self, element: ET.Element, key: str) -> SwPointerTargetProps:
1129
+ child_element = self.find(element, key)
1130
+ props = None
1131
+ if child_element is not None:
1132
+ props = SwPointerTargetProps()
1133
+ props.setTargetCategory(self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")) \
1134
+ .setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS"))
1135
+ return props
1136
+
1029
1137
  def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
1030
1138
  child_element = self.find(element, "SW-POINTER-TARGET-PROPS")
1031
1139
  if child_element is not None:
@@ -1165,7 +1273,7 @@ class ARXMLParser(AbstractARXMLParser):
1165
1273
  def readSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
1166
1274
  child_element = self.find(element, "INVALID-VALUE/*")
1167
1275
  if child_element is not None:
1168
- props.setInvalidValue(self.getValueSpecification(child_element))
1276
+ props.setInvalidValue(self.getValueSpecification(child_element, self.getTagName(child_element)))
1169
1277
 
1170
1278
  def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
1171
1279
  child_element = self.find(element, key)
@@ -1186,13 +1294,15 @@ class ARXMLParser(AbstractARXMLParser):
1186
1294
  .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1187
1295
  .setSwIntendedResolution(self.getChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION")) \
1188
1296
  .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
1297
+ .setStepSize(self.getChildElementOptionalFloatValue(conditional_tag, "STEP-SIZE")) \
1189
1298
  .setSwCalibrationAccess(self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")) \
1190
1299
  .setSwCalprmAxisSet(self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")) \
1300
+ .setSwPointerTargetProps(self.getSwPointerTargetProps(conditional_tag, "SW-POINTER-TARGET-PROPS")) \
1191
1301
  .setSwRecordLayoutRef(self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")) \
1192
1302
  .setValueAxisDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")) \
1193
- .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1303
+ .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1194
1304
  self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
1195
- self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1305
+ #self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1196
1306
  self.readARObjectAttributes(conditional_tag, sw_data_def_props.conditional)
1197
1307
  return sw_data_def_props
1198
1308
 
@@ -1272,16 +1382,17 @@ class ARXMLParser(AbstractARXMLParser):
1272
1382
  '''
1273
1383
 
1274
1384
  def readBaseTypeDirectDefinition(self, element: ET.Element, definition: BaseTypeDirectDefinition):
1275
- definition.baseTypeSize = self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")
1276
- definition.baseTypeEncoding = self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")
1277
- definition.memAlignment = self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")
1278
- definition.nativeDeclaration = self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION")
1385
+ definition.setBaseTypeSize(self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")) \
1386
+ .setBaseTypeEncoding(self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")) \
1387
+ .setByteOrder(self.getChildElementOptionalLiteral(element, "BYTE-ORDER")) \
1388
+ .setMemAlignment(self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")) \
1389
+ .setNativeDeclaration(self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION"))
1279
1390
 
1280
1391
  def readSwBaseType(self, element: ET.Element, parent: ARPackage):
1281
1392
  short_name = self.getShortName(element)
1282
1393
  data_type = parent.createSwBaseType(short_name)
1283
1394
  self.readIdentifiable(element, data_type)
1284
- self.readBaseTypeDirectDefinition(element, data_type.baseTypeDefinition)
1395
+ self.readBaseTypeDirectDefinition(element, data_type.getBaseTypeDefinition())
1285
1396
 
1286
1397
  def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
1287
1398
  child_element = self.find(element, key)
@@ -1310,7 +1421,7 @@ class ARXMLParser(AbstractARXMLParser):
1310
1421
  .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1311
1422
 
1312
1423
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1313
- child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
1424
+ child_element = self.find(element, key)
1314
1425
  if child_element is None:
1315
1426
  return None
1316
1427
  sw_values = SwValues()
@@ -1322,30 +1433,30 @@ class ARXMLParser(AbstractARXMLParser):
1322
1433
 
1323
1434
  def getValueList(self, element: ET.Element, key: str) -> ValueList:
1324
1435
  value_list = None
1325
- child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
1436
+ child_element = self.find(element, key)
1326
1437
  if child_element is not None:
1327
1438
  self.logger.debug("getValueList %s" % key)
1328
1439
  value_list = ValueList()
1329
1440
  self.readARObjectAttributes(child_element, value_list)
1330
- value_list.v = self.getChildElementOptionalFloatValue(child_element, "V")
1441
+ value_list.setV(self.getChildElementOptionalFloatValue(child_element, "V"))
1331
1442
  return value_list
1332
1443
 
1333
1444
  def getSwValueCont(self, element: ET.Element) -> SwValueCont:
1334
1445
  cont = None
1335
- child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
1446
+ child_element = self.find(element, "SW-VALUE-CONT")
1336
1447
  if child_element is not None:
1337
1448
  self.logger.debug("getSwValueCont")
1338
1449
  cont = SwValueCont()
1339
1450
  self.readARObjectAttributes(child_element, cont)
1340
- cont.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
1341
- cont.sw_arraysize = self.getValueList(child_element, "SW-ARRAYSIZE")
1342
- cont.sw_values_phys = self.getSwValues(child_element, "SW-VALUES-PHYS")
1451
+ cont.setUnitRef(self.getChildElementOptionalRefType(child_element, "UNIT-REF")) \
1452
+ .setSwArraysize(self.getValueList(child_element, "SW-ARRAYSIZE")) \
1453
+ .setSwValuesPhys(self.getSwValues(child_element, "SW-VALUES-PHYS"))
1343
1454
  return cont
1344
1455
 
1345
1456
  def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
1346
1457
  self.readValueSpecification(element, value_spec)
1347
- value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
1348
- value_spec.sw_value_cont = self.getSwValueCont(element)
1458
+ value_spec.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
1459
+ .setSwValueCont(self.getSwValueCont(element))
1349
1460
 
1350
1461
  self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
1351
1462
 
@@ -1354,7 +1465,7 @@ class ARXMLParser(AbstractARXMLParser):
1354
1465
  child_element = self.find(element, "INIT-VALUE/*")
1355
1466
  if child_element is not None:
1356
1467
  self.logger.debug("getInitValue")
1357
- value_spec = self.getValueSpecification(child_element)
1468
+ value_spec = self.getValueSpecification(child_element, self.getTagName(child_element))
1358
1469
  return value_spec
1359
1470
 
1360
1471
  def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
@@ -1380,7 +1491,9 @@ class ARXMLParser(AbstractARXMLParser):
1380
1491
  def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
1381
1492
  com_spec = ModeSwitchReceiverComSpec()
1382
1493
  self.readARObjectAttributes(element, com_spec)
1383
- com_spec.modeGroupRef = self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")
1494
+ com_spec.setEnhancedModeApi(self.getChildElementOptionalBooleanValue(element, "ENHANCED-MODE-API")) \
1495
+ .setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1496
+ .setSupportsAsynchronousModeSwitch(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH"))
1384
1497
  return com_spec
1385
1498
 
1386
1499
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
@@ -1390,6 +1503,7 @@ class ARXMLParser(AbstractARXMLParser):
1390
1503
  com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")) \
1391
1504
  .setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")) \
1392
1505
  .setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")) \
1506
+ .setFilter(self.getDataFilter(element, "FILTER")) \
1393
1507
  .setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")) \
1394
1508
  .setInitValue(self.getInitValue(element))
1395
1509
  return com_spec
@@ -1454,7 +1568,7 @@ class ARXMLParser(AbstractARXMLParser):
1454
1568
  self._raiseError("Unsupported Port Prototype <%s>" % tag_name)
1455
1569
 
1456
1570
  def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
1457
- child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
1571
+ child_element = self.find(element, "TRANSMISSION-ACKNOWLEDGE")
1458
1572
  if (child_element is not None):
1459
1573
  acknowledge = TransmissionAcknowledgementRequest()
1460
1574
  self.readARObjectAttributes(child_element, acknowledge)
@@ -1464,7 +1578,7 @@ class ARXMLParser(AbstractARXMLParser):
1464
1578
 
1465
1579
  def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
1466
1580
  self.readARObjectAttributes(element, com_spec)
1467
- for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1581
+ for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1468
1582
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1469
1583
  com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1470
1584
  .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
@@ -1497,7 +1611,7 @@ class ARXMLParser(AbstractARXMLParser):
1497
1611
  return com_spec
1498
1612
 
1499
1613
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
1500
- for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/*", self.nsmap):
1614
+ for child_element in self.findall(element, "PROVIDED-COM-SPECS/*"):
1501
1615
  tag_name = self.getTagName(child_element.tag)
1502
1616
  if tag_name == "NONQUEUED-SENDER-COM-SPEC":
1503
1617
  parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
@@ -1530,7 +1644,7 @@ class ARXMLParser(AbstractARXMLParser):
1530
1644
  self.readPortGroupOuterPortRefs(element, port_group)
1531
1645
 
1532
1646
  def readSwComponentTypePortGroups(self, element: ET.Element, parent: SwComponentType):
1533
- for child_element in element.findall("./xmlns:PORT-GROUPS/*", self.nsmap):
1647
+ for child_element in self.findall(element, "PORT-GROUPS/*"):
1534
1648
  tag_name = self.getTagName(child_element.tag)
1535
1649
  if tag_name == "PORT-GROUP":
1536
1650
  self.readPortGroup(child_element, parent)
@@ -1611,12 +1725,13 @@ class ARXMLParser(AbstractARXMLParser):
1611
1725
  parent.setRequesterIRef(requester_iref)
1612
1726
 
1613
1727
  def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
1614
- for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
1728
+ for child_element in self.findall(element, "CONNECTORS/ASSEMBLY-SW-CONNECTOR"):
1615
1729
  short_name = self.getShortName(child_element)
1616
1730
  self.logger.debug("readAssemblySwConnectors %s" % short_name)
1617
1731
 
1618
1732
  connector = parent.createAssemblySwConnector(short_name)
1619
1733
  self.readIdentifiable(child_element, connector)
1734
+ connector.setMappingRef(self.getChildElementOptionalRefType(child_element, "MAPPING-REF"))
1620
1735
  self.readAssemblySwConnectorProviderIRef(child_element, connector)
1621
1736
  self.readAssemblySwConnectorRequesterIRef(child_element, connector)
1622
1737
 
@@ -1749,7 +1864,7 @@ class ARXMLParser(AbstractARXMLParser):
1749
1864
  prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1750
1865
  prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1751
1866
  prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1752
- prototype.server_argument_impl_policy = self.getChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY")
1867
+ prototype.serverArgumentImplPolicy = self.getChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY")
1753
1868
  parent.addArgumentDataPrototype(prototype)
1754
1869
 
1755
1870
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
@@ -1798,6 +1913,33 @@ class ARXMLParser(AbstractARXMLParser):
1798
1913
  self.readOperations(element, cs_interface)
1799
1914
  self.readPossibleErrors(element, cs_interface)
1800
1915
 
1916
+ def getCompuConstContent(self, element: ET.Element) -> CompuConstContent:
1917
+ child_element = self.find(element, "*")
1918
+ content = None
1919
+ if child_element is not None:
1920
+ tag_name = self.getTagName(child_element)
1921
+ if tag_name == "VF":
1922
+ content = CompuConstFormulaContent()
1923
+ content.setVf(self.getChildElementOptionalLiteral(element, "VF"))
1924
+ elif tag_name == "V":
1925
+ content = CompuConstNumericContent()
1926
+ content.setV(self.getChildElementOptionalNumericalValue(element, "V"))
1927
+ elif tag_name == "VT":
1928
+ content = CompuConstTextContent()
1929
+ content.setVt(self.getChildElementOptionalLiteral(element, "VT"))
1930
+ else:
1931
+ self.notImplemented("Unsupported CompuConstContent <%s>" % tag_name)
1932
+ return content
1933
+
1934
+ def getCompuConst(self, element: ET.Element, key: str) -> CompuConst:
1935
+ compu_const = None
1936
+ child_element = self.find(element, key)
1937
+ if (child_element is not None):
1938
+ compu_const = CompuConst()
1939
+ self.readARObjectAttributes(child_element, compu_const)
1940
+ compu_const.setCompuConstContentType(self.getCompuConstContent(child_element))
1941
+ return compu_const
1942
+
1801
1943
  def readCompuConst(self, element: ET.Element, parent: CompuScale):
1802
1944
  child_element = self.find(element, "COMPU-CONST/VT")
1803
1945
  if (child_element is not None):
@@ -1845,46 +1987,40 @@ class ARXMLParser(AbstractARXMLParser):
1845
1987
  self.readCompuScaleContents(child_element, compu_scale)
1846
1988
  compu_scales.addCompuScale(compu_scale)
1847
1989
  return compu_scales
1848
-
1849
- def readCompuInternalToPhys(self, element: ET.Element, compu_method: CompuMethod):
1850
- child_element = self.find(element, "COMPU-INTERNAL-TO-PHYS")
1851
- if (child_element is not None):
1852
- compu = Compu()
1853
- self.readARObjectAttributes(child_element, compu)
1854
- compu.setCompuContent(self.getCompuScales(child_element))
1855
- compu_method.setCompuInternalToPhys(compu)
1856
-
1857
- def readCompuPhysToInternal(self, element: ET.Element, compu_method: CompuMethod):
1858
- child_element = self.find(element, "COMPU-PHYS-TO-INTERNAL")
1990
+
1991
+ def getCompu(self, element: ET.Element, key: str) -> Compu:
1992
+ child_element = self.find(element, key)
1993
+ compu = None
1859
1994
  if (child_element is not None):
1860
1995
  compu = Compu()
1861
1996
  self.readARObjectAttributes(child_element, compu)
1862
- compu.setCompuContent(self.getCompuScales(child_element))
1863
- compu_method.setCompuPhysToInternal(compu)
1997
+ compu.setCompuContent(self.getCompuScales(child_element))
1998
+ compu.setCompuDefaultValue(self.getCompuConst(child_element, "COMPU-DEFAULT-VALUE"))
1999
+ return compu
1864
2000
 
1865
2001
  def readCompuMethod(self, element: ET.Element, parent: ARPackage):
1866
2002
  short_name = self.getShortName(element)
1867
2003
  self.logger.debug("readCompuMethods %s" % short_name)
1868
2004
  compu_method = parent.createCompuMethod(short_name)
1869
2005
  self.readIdentifiable(element, compu_method)
1870
- compu_method.setUnitRef(self.getChildElementOptionalRefType(element, "UNIT-REF"))
1871
- self.readCompuInternalToPhys(element, compu_method)
1872
- self.readCompuPhysToInternal(element, compu_method)
2006
+ compu_method.setUnitRef(self.getChildElementOptionalRefType(element, "UNIT-REF")) \
2007
+ .setCompuInternalToPhys(self.getCompu(element, "COMPU-INTERNAL-TO-PHYS")) \
2008
+ .setCompuPhysToInternal(self.getCompu(element, "COMPU-PHYS-TO-INTERNAL"))
1873
2009
 
1874
2010
  def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
1875
- for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
2011
+ for child_element in self.findall(element, "RUNNABLE-MAPPINGS/SWC-BSW-RUNNABLE-MAPPING"):
1876
2012
  mapping = SwcBswRunnableMapping()
1877
- mapping.bswEntityRef = self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")
1878
- mapping.swcRunnableRef = self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF")
2013
+ mapping.setBswEntityRef(self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")) \
2014
+ .setSwcRunnableRef(self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF"))
1879
2015
  parent.addRunnableMapping(mapping)
1880
2016
 
1881
2017
  def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
1882
2018
  short_name = self.getShortName(element)
1883
- self.logger.debug("readSwcBswMappings %s" % short_name)
2019
+ self.logger.debug("read SwcBswMappings %s" % short_name)
1884
2020
  swc_bsw_mapping = parent.createSwcBswMapping(short_name)
1885
- swc_bsw_mapping.bswBehaviorRef = self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF")
2021
+ swc_bsw_mapping.setBswBehaviorRef(self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF"))
1886
2022
  self.readSwcBswRunnableMappings(element, swc_bsw_mapping)
1887
- swc_bsw_mapping.swcBehaviorRef = self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF")
2023
+ swc_bsw_mapping.setSwcBehaviorRef(self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF"))
1888
2024
 
1889
2025
  def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
1890
2026
  self.readARObjectAttributes(element, value_spec)
@@ -1922,7 +2058,7 @@ class ARXMLParser(AbstractARXMLParser):
1922
2058
  self.readValueSpecification(element, value_spec)
1923
2059
  child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
1924
2060
  for child_element in child_elements:
1925
- value_spec.addElement(self.getValueSpecification(child_element))
2061
+ value_spec.addElement(self.getValueSpecification(child_element, self.getTagName(child_element)))
1926
2062
  return value_spec
1927
2063
 
1928
2064
  def getConstantReference(self, element: ET.Element) -> ConstantReference:
@@ -1932,8 +2068,7 @@ class ARXMLParser(AbstractARXMLParser):
1932
2068
  value_spec.setConstantRef(self.getChildElementOptionalRefType(element, "CONSTANT-REF"))
1933
2069
  return value_spec
1934
2070
 
1935
- def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
1936
- tag_name = self.getTagName(element.tag)
2071
+ def getValueSpecification(self, element: ET.Element, tag_name: str) -> ValueSpecification:
1937
2072
  if tag_name == "APPLICATION-VALUE-SPECIFICATION":
1938
2073
  value_spec = self.getApplicationValueSpecification(element)
1939
2074
  elif tag_name == "RECORD-VALUE-SPECIFICATION":
@@ -1952,7 +2087,7 @@ class ARXMLParser(AbstractARXMLParser):
1952
2087
 
1953
2088
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1954
2089
  for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1955
- spec.addField(self.getValueSpecification(child_element))
2090
+ spec.addField(self.getValueSpecification(child_element, self.getTagName(child_element)))
1956
2091
 
1957
2092
  def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1958
2093
  value_spec = RecordValueSpecification()
@@ -1965,8 +2100,8 @@ class ARXMLParser(AbstractARXMLParser):
1965
2100
  self.logger.debug("readConstantSpecification %s" % short_name)
1966
2101
  spec = parent.createConstantSpecification(short_name)
1967
2102
  self.readIdentifiable(element, spec)
1968
- for value_spec_tag in self.findall(element, "VALUE-SPEC/*"):
1969
- spec.setValueSpec(self.getValueSpecification(value_spec_tag))
2103
+ for child_element in self.findall(element, "VALUE-SPEC/*"):
2104
+ spec.setValueSpec(self.getValueSpecification(child_element, self.getTagName(child_element)))
1970
2105
 
1971
2106
  def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1972
2107
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
@@ -2340,6 +2475,119 @@ class ARXMLParser(AbstractARXMLParser):
2340
2475
  self.readIdentifiable(element, channel)
2341
2476
  self.readPhysicalChannel(element, channel)
2342
2477
 
2478
+ def getIpv6Configuration(self, element: ET.Element) -> Ipv6Configuration:
2479
+ configuration = None
2480
+ if element is not None:
2481
+ configuration = Ipv6Configuration()
2482
+ configuration.setAssignmentPriority(self.getChildElementOptionalPositiveInteger(element, "ASSIGNMENT-PRIORITY")) \
2483
+ .setDefaultRouter(self.getChildElementOptionalLiteral(element, "DEFAULT-ROUTER")) \
2484
+ .setEnableAnycast(self.getChildElementOptionalBooleanValue(element, "ENABLE-ANYCAST")) \
2485
+ .setHopCount(self.getChildElementOptionalPositiveInteger(element, "HOP-COUNT")) \
2486
+ .setIpAddressPrefixLength(self.getChildElementOptionalPositiveInteger(element, "IP-ADDRESS-PREFIX-LENGTH")) \
2487
+ .setIpv6Address(self.getChildElementOptionalLiteral(element, "IPV-6-ADDRESS")) \
2488
+ .setIpv6AddressSource(self.getChildElementOptionalLiteral(element, "IPV-6-ADDRESS-SOURCE"))
2489
+ return configuration
2490
+
2491
+ def readNetworkEndPointNetworkEndPointAddress(self, element: ET.Element, end_point: NetworkEndpoint):
2492
+ for child_element in self.findall(element, "NETWORK-ENDPOINT-ADDRESSES/*"):
2493
+ tag_name = self.getTagName(child_element)
2494
+ if tag_name == "IPV-6-CONFIGURATION":
2495
+ end_point.addNetworkEndpointAddress(self.getIpv6Configuration(child_element))
2496
+ else:
2497
+ self.notImplemented("Unsupported Network EndPoint Address <%s>" % tag_name)
2498
+
2499
+ def readNetworkEndPoint(self, element: ET.Element, end_point: NetworkEndpoint):
2500
+ self.readIdentifiable(element, end_point)
2501
+ self.readNetworkEndPointNetworkEndPointAddress(element, end_point)
2502
+ end_point.setPriority(self.getChildElementOptionalPositiveInteger(element, "PRIORITY"))
2503
+
2504
+ def readEthernetPhysicalChannelNetworkEndPoints(self, element: ET.Element, channel: EthernetPhysicalChannel):
2505
+ for child_element in self.findall(element, "NETWORK-ENDPOINTS/NETWORK-ENDPOINT"):
2506
+ end_point = channel.createNetworkEndPoint(self.getShortName(child_element))
2507
+ self.readNetworkEndPoint(child_element, end_point)
2508
+
2509
+ def getSocketConnectionIpduIdentifier(self, element: ET.Element) -> SocketConnectionIpduIdentifier:
2510
+ identifier = None
2511
+ if element is not None:
2512
+ identifier = SocketConnectionIpduIdentifier()
2513
+ identifier.setHeaderId(self.getChildElementOptionalPositiveInteger(element, "HEADER-ID")) \
2514
+ .setPduCollectionSemantics(self.getChildElementOptionalLiteral(element, "PDU-COLLECTION-SEMANTICS")) \
2515
+ .setPduCollectionTrigger(self.getChildElementOptionalLiteral(element, "PDU-COLLECTION-TRIGGER")) \
2516
+ .setPduRef(self.getChildElementOptionalRefType(element, "PDU-REF")) \
2517
+ .setPduTriggeringRef(self.getChildElementOptionalRefType(element, "PDU-TRIGGERING-REF"))
2518
+ return identifier
2519
+
2520
+ def getSocketConnectionPdus(self, element: ET.Element) -> List[SocketConnectionIpduIdentifier]:
2521
+ pdus = []
2522
+ for child_element in self.findall(element, "PDUS/*"):
2523
+ tag_name = self.getTagName(child_element)
2524
+ if tag_name == "SOCKET-CONNECTION-IPDU-IDENTIFIER":
2525
+ pdus.append(self.getSocketConnectionIpduIdentifier(child_element))
2526
+ else:
2527
+ self.notImplemented("Unsupported Pdu <%s>" % tag_name)
2528
+ return pdus
2529
+
2530
+ def getSocketConnection(self, element: ET.Element) -> SocketConnection:
2531
+ connection = None
2532
+ if element is not None:
2533
+ connection = SocketConnection()
2534
+ connection.setClientPortRef(self.getChildElementOptionalRefType(element, "CLIENT-PORT-REF"))
2535
+ for pdu in self.getSocketConnectionPdus(element):
2536
+ connection.addPdu(pdu)
2537
+ connection.setPduCollectionMaxBufferSize(self.getChildElementOptionalPositiveInteger(element, "PDU-COLLECTION-MAX-BUFFER-SIZE")) \
2538
+ .setPduCollectionTimeout(self.getChildElementOptionalTimeValue(element, "PDU-COLLECTION-TIMEOUT")) \
2539
+ .setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
2540
+ return connection
2541
+
2542
+ def readSocketConnectionBundleConnections(self, element: ET.Element, bundle: SocketConnectionBundle):
2543
+ for child_element in self.findall(element, "BUNDLED-CONNECTIONS/*"):
2544
+ tag_name = self.getTagName(child_element)
2545
+ if tag_name == "SOCKET-CONNECTION":
2546
+ bundle.addBundledConnection(self.getSocketConnection(child_element))
2547
+ else:
2548
+ self.notImplemented("Unsupported Bundled Connection <%s>" % tag_name)
2549
+
2550
+ def readSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
2551
+ self.readSocketConnectionBundleConnections(element, bundle)
2552
+ bundle.setServerPortRef(self.getChildElementOptionalRefType(element, "SERVER-PORT-REF"))
2553
+
2554
+ def readSoAdConfigConnectionBundles(self, element: ET.Element, config: SoAdConfig):
2555
+ for child_element in self.findall(element, "CONNECTION-BUNDLES/*"):
2556
+ tag_name = self.getTagName(child_element)
2557
+ if tag_name == "SOCKET-CONNECTION-BUNDLE":
2558
+ bundle = config.createSocketConnectionBundle(self.getShortName(child_element))
2559
+ self.readSocketConnectionBundle(child_element, bundle)
2560
+ else:
2561
+ self.notImplemented("Unsupported Connection Bundle <%s>" % tag_name)
2562
+
2563
+ def readSocketAddress(self, element: ET.Element, address: SocketAddress):
2564
+ self.readSocketConnectionBundleConnections(element, address)
2565
+ address.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF"))
2566
+
2567
+ def readSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
2568
+ for child_element in self.findall(element, "SOCKET-ADDRESSS/*"):
2569
+ tag_name = self.getTagName(child_element)
2570
+ if tag_name == "SOCKET-ADDRESS":
2571
+ bundle = config.createSocketAddress(self.getShortName(child_element))
2572
+ self.readSocketAddress(child_element, bundle)
2573
+ else:
2574
+ self.notImplemented("Unsupported Connection Bundle <%s>" % tag_name)
2575
+
2576
+ def getSoAdConfig(self, element: ET.Element, key: str) -> SoAdConfig:
2577
+ child_element = self.find(element, key)
2578
+ config = None
2579
+ if child_element is not None:
2580
+ config = SoAdConfig()
2581
+ self.readSoAdConfigConnectionBundles(child_element, config)
2582
+ self.readSoAdConfigSocketAddresses(child_element, config)
2583
+ return config
2584
+
2585
+ def readEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2586
+ self.readIdentifiable(element, channel)
2587
+ self.readPhysicalChannel(element, channel)
2588
+ self.readEthernetPhysicalChannelNetworkEndPoints(element, channel)
2589
+ channel.setSoAdConfig(self.getSoAdConfig(element, "SO-AD-CONFIG"))
2590
+
2343
2591
  def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2344
2592
  for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
2345
2593
  tag_name = self.getTagName(child_element)
@@ -2349,6 +2597,9 @@ class ARXMLParser(AbstractARXMLParser):
2349
2597
  elif tag_name == "LIN-PHYSICAL-CHANNEL":
2350
2598
  channel = cluster.createLinPhysicalChannel(self.getShortName(child_element))
2351
2599
  self.readLinPhysicalChannel(child_element, channel)
2600
+ elif tag_name == "ETHERNET-PHYSICAL-CHANNEL":
2601
+ channel = cluster.createEthernetPhysicalChannel(self.getShortName(child_element))
2602
+ self.readEthernetPhysicalChannel(child_element, channel)
2352
2603
  else:
2353
2604
  self.notImplemented("Unsupported Physical Channel <%s>" % tag_name)
2354
2605
 
@@ -2382,6 +2633,15 @@ class ARXMLParser(AbstractARXMLParser):
2382
2633
  self.readCommunicationCluster(child_element, cluster)
2383
2634
  self.readAbstractCanCluster(child_element, cluster)
2384
2635
 
2636
+ def readEthernetCluster(self, element: ET.Element, parent: ARPackage):
2637
+ short_name = self.getShortName(element)
2638
+ self.logger.debug("Read EthernetCluster %s" % short_name)
2639
+ cluster = parent.createEthernetCluster(short_name)
2640
+ self.readIdentifiable(element, cluster)
2641
+ child_element = self.find(element, "ETHERNET-CLUSTER-VARIANTS/ETHERNET-CLUSTER-CONDITIONAL")
2642
+ if child_element is not None:
2643
+ self.readCommunicationCluster(child_element, cluster)
2644
+
2385
2645
  def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
2386
2646
  for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
2387
2647
  short_name = self.getShortName(child_element)
@@ -2542,7 +2802,11 @@ class ARXMLParser(AbstractARXMLParser):
2542
2802
  self.readFrame(element, frame)
2543
2803
 
2544
2804
  def readCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
2545
- self.logger.debug("read CanCommunicationController %s" % controller.getShortName())
2805
+ self.logger.debug("Read CanCommunicationController %s" % controller.getShortName())
2806
+ self.readIdentifiable(element, controller)
2807
+
2808
+ def readEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
2809
+ self.logger.debug("Read CanCommunicationController %s" % controller.getShortName())
2546
2810
  self.readIdentifiable(element, controller)
2547
2811
 
2548
2812
  def readEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
@@ -2552,6 +2816,9 @@ class ARXMLParser(AbstractARXMLParser):
2552
2816
  if tag_name == "CAN-COMMUNICATION-CONTROLLER":
2553
2817
  controller = instance.createCanCommunicationController(self.getShortName(child_element))
2554
2818
  self.readCanCommunicationController(child_element, controller)
2819
+ elif tag_name == "ETHERNET-COMMUNICATION-CONTROLLER":
2820
+ controller = instance.createEthernetCommunicationController(self.getShortName(child_element))
2821
+ self.readEthernetCommunicationController(child_element, controller)
2555
2822
  else:
2556
2823
  self._raiseError("Unsupported Communication Controller <%s>" % tag_name)
2557
2824
 
@@ -2592,6 +2859,9 @@ class ARXMLParser(AbstractARXMLParser):
2592
2859
  def readCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2593
2860
  self.readCommunicationConnector(element, connector)
2594
2861
 
2862
+ def readEthernetCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2863
+ self.readCommunicationConnector(element, connector)
2864
+
2595
2865
  def readEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
2596
2866
  self.logger.debug("readEcuInstanceCommControllers %s" % instance.getShortName())
2597
2867
  for child_element in self.findall(element, "CONNECTORS/*"):
@@ -2599,8 +2869,11 @@ class ARXMLParser(AbstractARXMLParser):
2599
2869
  if tag_name == "CAN-COMMUNICATION-CONNECTOR":
2600
2870
  connector = instance.createCanCommunicationConnector(self.getShortName(child_element))
2601
2871
  self.readCanCommunicationConnector(child_element, connector)
2872
+ elif tag_name == "ETHERNET-COMMUNICATION-CONNECTOR":
2873
+ connector = instance.createEthernetCommunicationConnector(self.getShortName(child_element))
2874
+ self.readEthernetCommunicationConnector(child_element, connector)
2602
2875
  else:
2603
- self._raiseError("Unsupported Communication Controller <%s>" % tag_name)
2876
+ self._raiseError("Unsupported Communication Connector <%s>" % tag_name)
2604
2877
 
2605
2878
  def readEcuInstance(self, element: ET.Element, parent: ARPackage):
2606
2879
  short_name = self.getShortName(element)
@@ -2662,6 +2935,7 @@ class ARXMLParser(AbstractARXMLParser):
2662
2935
  signal = parent.createISignal(short_name)
2663
2936
  self.readIdentifiable(element, signal)
2664
2937
  signal.setDataTypePolicy(self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")) \
2938
+ .setISignalType(self.getChildElementOptionalLiteral(element, "I-SIGNAL-TYPE")) \
2665
2939
  .setInitValue(self.getInitValue(element)) \
2666
2940
  .setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
2667
2941
  .setNetworkRepresentationProps(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")) \
@@ -2725,9 +2999,10 @@ class ARXMLParser(AbstractARXMLParser):
2725
2999
  child_element = self.find(element, key)
2726
3000
  if child_element is not None:
2727
3001
  instance_ref = AnyInstanceRef()
2728
- instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF")) \
2729
- .setContextElementRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF")) \
2730
- .setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
3002
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF"))
3003
+ for ref in self.getChildElementRefTypeList(child_element, "CONTEXT-ELEMENT-REF"):
3004
+ instance_ref.addContextElementRef(ref)
3005
+ instance_ref.setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
2731
3006
  return instance_ref
2732
3007
 
2733
3008
  def getEcucInstanceReferenceValue(self, element: ET.Element) -> EcucInstanceReferenceValue:
@@ -2825,7 +3100,8 @@ class ARXMLParser(AbstractARXMLParser):
2825
3100
  self.logger.debug("SystemSignal %s" % short_name)
2826
3101
  signal = parent.createSystemSignal(short_name)
2827
3102
  self.readIdentifiable(element, signal)
2828
- signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH"))
3103
+ signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH")) \
3104
+ .setPhysicalProps(self.getSwDataDefProps(element, "PHYSICAL-PROPS"))
2829
3105
 
2830
3106
  def readSystemSignalGroup(self, element: ET.Element, parent: ARPackage):
2831
3107
  short_name = self.getShortName(element)
@@ -2878,6 +3154,8 @@ class ARXMLParser(AbstractARXMLParser):
2878
3154
  child_element = self.find(element, key)
2879
3155
  if child_element is not None:
2880
3156
  timing = CyclicTiming()
3157
+ timing.setTimeOffset(self.getTimeRangeType(child_element, "TIME-OFFSET")) \
3158
+ .setTimePeriod(self.getTimeRangeType(child_element, "TIME-PERIOD"))
2881
3159
  return timing
2882
3160
 
2883
3161
  def getEventControlledTiming(self, element: ET.Element, key: str) -> EventControlledTiming:
@@ -2895,8 +3173,8 @@ class ARXMLParser(AbstractARXMLParser):
2895
3173
  if child_element is not None:
2896
3174
  self.logger.debug("Get TransmissionModeTiming of <%s>" % key)
2897
3175
  timing = TransmissionModeTiming()
2898
- #timing.getCyclicTiming(child_element, "")
2899
- timing.setEventControlledTiming(self.getEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING"))
3176
+ timing.setCyclicTiming(self.getCyclicTiming(child_element, "CYCLIC-TIMING")) \
3177
+ .setEventControlledTiming(self.getEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING"))
2900
3178
  return timing
2901
3179
 
2902
3180
  def getTransmissionModeDeclaration(self, element: ET.Element, key: str) -> TransmissionModeDeclaration:
@@ -2914,7 +3192,8 @@ class ARXMLParser(AbstractARXMLParser):
2914
3192
  child_element = self.find(element, "I-PDU-TIMING-SPECIFICATIONS/I-PDU-TIMING")
2915
3193
  if child_element is not None:
2916
3194
  timing = IPduTiming()
2917
- timing.setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
3195
+ timing.setMinimumDelay(self.getChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY")) \
3196
+ .setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
2918
3197
  return timing
2919
3198
 
2920
3199
  def readISignalIPdu(self, element: ET.Element, parent: ARPackage):
@@ -2947,8 +3226,9 @@ class ARXMLParser(AbstractARXMLParser):
2947
3226
 
2948
3227
  def getSenderReceiverToSignalMapping(self, element: ET.Element) -> SenderReceiverToSignalMapping:
2949
3228
  mapping = SenderReceiverToSignalMapping()
2950
- mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2951
- mapping.setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
3229
+ mapping.setCommunicationDirection(self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION")) \
3230
+ .setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF"))) \
3231
+ .setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
2952
3232
  return mapping
2953
3233
 
2954
3234
  def getSenderReceiverToSignalGroupMapping(self, element: ET.Element) -> SenderReceiverToSignalGroupMapping:
@@ -3005,7 +3285,9 @@ class ARXMLParser(AbstractARXMLParser):
3005
3285
  self.logger.debug("Read RootSwCompositionPrototype %s" % short_name)
3006
3286
  prototype = system.createRootSoftwareComposition(short_name)
3007
3287
  self.readIdentifiable(child_element, prototype)
3008
- prototype.setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
3288
+ prototype.setFlatMapRef(self.getChildElementOptionalRefType(child_element, "FLAT-MAP-REF")) \
3289
+ .setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
3290
+
3009
3291
 
3010
3292
  def readSystem(self, element: ET.Element, parent: ARPackage):
3011
3293
  short_name = self.getShortName(element)
@@ -3032,8 +3314,63 @@ class ARXMLParser(AbstractARXMLParser):
3032
3314
  frame = parent.createLifeCycleInfoSet(short_name)
3033
3315
  self.readIdentifiable(element, frame)
3034
3316
 
3317
+ def readFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
3318
+ self.logger.debug("Read LifeCycleInfoSet %s" % desc.getShortName())
3319
+ self.readIdentifiable(element, desc)
3320
+ desc.setUpstreamReferenceIRef(self.getAnyInstanceRef(element, "UPSTREAM-REFERENCE-IREF")) \
3321
+ .setEcuExtractReferenceIRef(self.getAnyInstanceRef(element, "ECU-EXTRACT-REFERENCE-IREF"))
3322
+
3323
+ def readFlatMapInstances(self, element: ET.Element, map: FlatMap):
3324
+ for child_element in self.findall(element, "INSTANCES/*"):
3325
+ tag_name = self.getTagName(child_element)
3326
+ if tag_name == "FLAT-INSTANCE-DESCRIPTOR":
3327
+ desc = map.createFlatInstanceDescriptor(self.getShortName(child_element))
3328
+ self.readFlatInstanceDescriptor(child_element, desc)
3329
+ else:
3330
+ self.notImplemented("Unsupported Flat Map Instances <%s>" % tag_name)
3331
+
3332
+ def readFlatMap(self, element: ET.Element, parent: ARPackage):
3333
+ short_name = self.getShortName(element)
3334
+ self.logger.debug("Read FlatMap %s" % short_name)
3335
+ map = parent.createFlatMap(short_name)
3336
+ self.readIdentifiable(element, map)
3337
+ self.readFlatMapInstances(element, map)
3338
+
3339
+ def getDataPrototypeMappings(self, element: ET.Element, key: str) -> List[DataPrototypeMapping]:
3340
+ mappings = []
3341
+ for child_element in self.findall(element, "%s/DATA-PROTOTYPE-MAPPING" % key):
3342
+ mapping = DataPrototypeMapping()
3343
+ mapping.setFirstDataPrototypeRef(self.getChildElementOptionalRefType(child_element, "FIRST-DATA-PROTOTYPE-REF")) \
3344
+ .setSecondDataPrototypeRef(self.getChildElementOptionalRefType(child_element, "SECOND-DATA-PROTOTYPE-REF"))
3345
+ mappings.append(mapping)
3346
+ return mappings
3347
+
3348
+ def getVariableAndParameterInterfaceMapping(self, element: ET.Element, mapping: VariableAndParameterInterfaceMapping):
3349
+ self.logger.debug("get VariableAndParameterInterfaceMapping %s" % mapping.getShortName())
3350
+ self.readIdentifiable(element, mapping)
3351
+ for item in self.getDataPrototypeMappings(element, "DATA-MAPPINGS"):
3352
+ mapping.addDataMapping(item)
3353
+
3354
+ def readPortInterfaceMappings(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
3355
+ for child_element in self.findall(element, "PORT-INTERFACE-MAPPINGS/*"):
3356
+ tag_name = self.getTagName(child_element)
3357
+ if tag_name == "VARIABLE-AND-PARAMETER-INTERFACE-MAPPING":
3358
+ mapping = mapping_set.createVariableAndParameterInterfaceMapping(self.getShortName(child_element))
3359
+ self.getVariableAndParameterInterfaceMapping(child_element, mapping)
3360
+ else:
3361
+ self.notImplemented("Unsupported PortInterfaceMapping <%s>" % tag_name)
3362
+
3363
+ def readPortInterfaceMappingSet(self, element: ET.Element, parent: ARPackage):
3364
+ short_name = self.getShortName(element)
3365
+ self.logger.debug("Read PortInterfaceMappingSet %s" % short_name)
3366
+ mapping_set = parent.createPortInterfaceMappingSet(short_name)
3367
+ self.readIdentifiable(element, mapping_set)
3368
+ self.readPortInterfaceMappings(element, mapping_set)
3369
+
3370
+
3371
+
3035
3372
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
3036
- for child_element in self.findall(element, "./ELEMENTS/*"):
3373
+ for child_element in self.findall(element, "ELEMENTS/*"):
3037
3374
  tag_name = self.getTagName(child_element.tag)
3038
3375
  if tag_name == "COMPOSITION-SW-COMPONENT-TYPE":
3039
3376
  self.readCompositionSwComponentType(child_element, parent)
@@ -3147,8 +3484,14 @@ class ARXMLParser(AbstractARXMLParser):
3147
3484
  self.readGenericEthernetFrame(child_element, parent)
3148
3485
  elif tag_name == "LIFE-CYCLE-INFO-SET":
3149
3486
  self.readLifeCycleInfoSet(child_element, parent)
3487
+ elif tag_name == "FLAT-MAP":
3488
+ self.readFlatMap(child_element, parent)
3489
+ elif tag_name == "PORT-INTERFACE-MAPPING-SET":
3490
+ self.readPortInterfaceMappingSet(child_element, parent)
3491
+ elif tag_name == "ETHERNET-CLUSTER":
3492
+ self.readEthernetCluster(child_element, parent)
3150
3493
  else:
3151
- self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
3494
+ self.notImplemented("Unsupported element type of ARPackage <%s>" % tag_name)
3152
3495
 
3153
3496
  def readReferenceBases(self, element: ET.Element, parent: ARPackage):
3154
3497
  self.logger.debug("Read ReferenceBases")