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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. armodel/cli/arxml_dump_cli.py +14 -14
  2. armodel/cli/memory_section_cli.py +76 -0
  3. armodel/cli/system_signal_cli.py +74 -0
  4. armodel/lib/__init__.py +2 -1
  5. armodel/lib/system_signal.py +37 -0
  6. armodel/models/__init__.py +6 -3
  7. armodel/models/annotation.py +27 -3
  8. armodel/models/ar_object.py +18 -6
  9. armodel/models/ar_package.py +248 -30
  10. armodel/models/ar_ref.py +115 -45
  11. armodel/models/bsw_module_template.py +66 -28
  12. armodel/models/common_structure.py +150 -150
  13. armodel/models/communication.py +1 -1
  14. armodel/models/data_prototype.py +41 -6
  15. armodel/models/datatype.py +11 -5
  16. armodel/models/fibex/__init__.py +0 -0
  17. armodel/models/fibex/can_communication.py +122 -0
  18. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  19. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  20. armodel/models/fibex/fibex_4_multiplatform.py +138 -0
  21. armodel/models/fibex/fibex_core/__init__.py +0 -0
  22. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  23. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  24. armodel/models/fibex/fibex_core.py +341 -0
  25. armodel/models/fibex/lin_communication.py +38 -0
  26. armodel/models/fibex/lin_topology.py +7 -0
  27. armodel/models/general_structure.py +119 -10
  28. armodel/models/implementation.py +4 -5
  29. armodel/models/internal_behavior.py +63 -0
  30. armodel/models/m2/__init__.py +0 -0
  31. armodel/models/m2/autosar_templates/__init__.py +0 -0
  32. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  33. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  34. armodel/models/m2/autosar_templates/ecuc_description_template.py +268 -0
  35. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  36. armodel/models/m2/autosar_templates/sw_component_template/communication.py +316 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +0 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +149 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  41. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  42. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +54 -0
  43. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +39 -0
  44. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +26 -0
  45. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  46. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  47. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  48. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  49. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  50. armodel/models/m2/msr/__init__.py +0 -0
  51. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  52. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  53. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  54. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  55. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  56. armodel/models/m2/msr/documentation/__init__.py +0 -0
  57. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  58. armodel/models/mode_declaration.py +8 -0
  59. armodel/models/multilanguage_data.py +15 -0
  60. armodel/models/per_instance_memory.py +34 -6
  61. armodel/models/port_prototype.py +15 -159
  62. armodel/models/rpt_scenario.py +20 -0
  63. armodel/models/sw_component.py +48 -187
  64. armodel/models/system_template/__init__.py +0 -0
  65. armodel/models/system_template/network_management.py +7 -0
  66. armodel/models/system_template/transport_protocols.py +7 -0
  67. armodel/models/timing.py +91 -0
  68. armodel/parser/abstract_arxml_parser.py +11 -2
  69. armodel/parser/arxml_parser.py +1101 -227
  70. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  71. armodel/tests/test_armodel/models/test_ar_ref.py +3 -3
  72. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  73. armodel/tests/test_armodel/models/test_common_structure.py +3 -3
  74. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  75. armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
  76. armodel/tests/test_armodel/models/test_datatype.py +8 -8
  77. armodel/tests/test_armodel/models/test_port_interface.py +6 -6
  78. armodel/tests/test_armodel/parser/test_parse_bswmd.py +16 -8
  79. armodel/tests/test_armodel/parser/test_sw_components.py +6 -6
  80. armodel/writer/arxml_writer.py +1046 -181
  81. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/METADATA +48 -1
  82. armodel-1.6.0.dist-info/RECORD +127 -0
  83. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/entry_points.txt +3 -1
  84. armodel-1.4.3.dist-info/RECORD +0 -78
  85. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/LICENSE +0 -0
  86. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/WHEEL +0 -0
  87. {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,32 @@
1
+ from typing import List
1
2
  import xml.etree.ElementTree as ET
2
-
3
- from armodel.models.bsw_module_template import BswModeSenderPolicy
4
-
5
- from .abstract_arxml_parser import AbstractARXMLParser
6
-
7
- from ..models.port_interface import ModeSwitchInterface, PortInterface
8
- from ..models.common_structure import MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
3
+ import os
4
+
5
+ from ..models.m2.autosar_templates.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
6
+ from ..models.m2.autosar_templates.sw_component_template.components.instance_refs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
7
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior import RunnableEntityArgument
8
+ from ..models.m2.msr.data_dictionary.data_def_properties import SwDataDefProps
9
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.mode_declaration_group import ModeAccessPoint, ModeSwitchPoint
10
+ from ..models.m2.autosar_templates.sw_component_template.swc_internal_behavior.server_call import ServerCallPoint
11
+ from ..models.m2.autosar_templates.sw_component_template.communication import ClientComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
12
+ from ..models.fibex.lin_communication import LinFrameTriggering
13
+ from ..models.fibex.fibex_core.core_topology import AbstractCanCluster, CanPhysicalChannel, CommunicationCluster, LinPhysicalChannel, PhysicalChannel
14
+ from ..models.m2.msr.documentation.block_elements import DocumentationBlock
15
+ from ..models.m2.autosar_templates.system_template import System, SystemMapping
16
+ from ..models.m2.autosar_templates.system_template.data_mapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
17
+ from ..models.m2.autosar_templates.system_template.network_management import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
18
+ from ..models.fibex.can_communication import CanFrameTriggering, RxIdentifierRange
19
+ from ..models.m2.autosar_templates.ecuc_description_template import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
20
+ from ..models.fibex.fibex_4_multiplatform import ISignalMapping
21
+ from ..models.fibex.fibex_core.core_communication import Frame, FrameTriggering, IPdu, ISignalIPdu, ISignalTriggering, PduTriggering
22
+ from ..models.internal_behavior import IncludedDataTypeSet
23
+ from ..models.timing import ExecutionOrderConstraint, TimingExtension
24
+ from ..models.bsw_module_template import BswModeSenderPolicy
25
+ from ..models.m2.autosar_templates.sw_component_template.port_interface import InvalidationPolicy, ModeSwitchInterface, PortInterface
26
+ from ..models.common_structure import IncludedModeDeclarationGroupSet, MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
9
27
  from ..models.implementation import BswImplementation, EngineeringObject
10
28
  from ..models.general_structure import MultilanguageReferrable
11
- from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
29
+ from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultiLanguageParagraph, MultilanguageLongName
12
30
  from ..models.data_def_properties import ValueList
13
31
  from ..models.record_layout import SwRecordLayoutGroup, SwRecordLayoutGroupContent, SwRecordLayoutV
14
32
  from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, BaseTypeDirectDefinition
@@ -19,20 +37,18 @@ from ..models.service_mapping import RoleBasedPortAssignment
19
37
  from ..models.ar_package import AUTOSAR, ARPackage
20
38
  from ..models.ar_object import ARLiteral
21
39
  from ..models.service_needs import RoleBasedDataAssignment
22
- from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
40
+ from ..models.ar_ref import AnyInstanceRef, ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, RefType, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
23
41
  from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
24
- from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype
25
- from ..models.port_prototype import QueuedReceiverComSpec
42
+ from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
43
+ from ..models.port_prototype import ModeSwitchReceiverComSpec, QueuedReceiverComSpec
26
44
  from ..models.annotation import Annotation, GeneralAnnotation
27
45
  from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
28
46
 
29
- from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
47
+ from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
30
48
  from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
31
49
  from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
32
- from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
50
+ from ..models import ImplementationDataType, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
33
51
  from ..models import RPortPrototype, PPortPrototype
34
- from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
35
- from ..models import SenderComSpec, NonqueuedSenderComSpec, ServerComSpec
36
52
  from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
37
53
  from ..models import Identifiable, AdminData, Sdg, Sd
38
54
  from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
@@ -42,57 +58,70 @@ from ..models import InternalBehavior, ExecutableEntity
42
58
  from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
43
59
  from ..models import TransmissionAcknowledgementRequest
44
60
  from ..models import BswModuleDescription, BswInternalBehavior, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
45
- from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
46
- from ..models import RecordValueSpecification
47
61
  from ..models import ApplicationRecordDataType
48
62
  from ..models import SwValueCont, SwValues
49
63
 
64
+ from .abstract_arxml_parser import AbstractARXMLParser
65
+
50
66
  class ARXMLParser(AbstractARXMLParser):
51
67
  def __init__(self, options=None) -> None:
52
68
  super().__init__(options)
69
+
70
+ def getChildElementRxIdentifierRange(self, element: ET.Element, key: str) -> RxIdentifierRange:
71
+ child_element = self.find(element, key)
72
+ range = None
73
+ if child_element is not None:
74
+ range = RxIdentifierRange()
75
+ range.setLowerCanId(self.getChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID")) \
76
+ .setUpperCanId(self.getChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID"))
77
+ return range
53
78
 
54
- def getShortName(self, element: ET.Element) -> str:
55
- child_element = self.find(element, "SHORT-NAME")
56
- if child_element is None:
57
- raise ValueError("Short Name is required")
58
- return child_element.text
59
-
60
79
  def readSd(self, element: ET.Element, sdg: Sdg):
61
- for child_element in element.findall("./xmlns:SD", self.nsmap):
80
+ for child_element in self.findall(element, "./SD"):
62
81
  sd = Sd()
63
- sd.gid = child_element.attrib['GID']
64
- sd.value = child_element.text
65
-
82
+ if 'GID' in child_element.attrib:
83
+ sd.setGID(child_element.attrib['GID'])
84
+ sd.setValue(child_element.text)
66
85
  sdg.addSd(sd)
86
+
87
+ def getSdg(self, element: ET.Element) -> Sdg:
88
+ sdg = Sdg()
89
+ if 'GID' in element.attrib:
90
+ sdg.setGID(element.attrib["GID"])
91
+ self.readSd(element, sdg)
92
+ for child_element in self.findall(element, "SDG"):
93
+ sdg.addSdgContentsType(self.getSdg(child_element))
94
+ return sdg
67
95
 
68
- def readSdg(self, element: ET.Element, admin_data: AdminData):
69
- for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
70
- sdg = Sdg()
71
- if 'GID' in child_element.attrib:
72
- sdg.gid = child_element.attrib["GID"]
73
- self.readSd(child_element, sdg)
74
- admin_data.addSdg(sdg)
96
+ def readSdgs(self, element: ET.Element, admin_data: AdminData):
97
+ for child_element in self.findall(element, "./SDGS/SDG"):
98
+ admin_data.addSdg(self.getSdg(child_element))
75
99
 
76
100
  def readAdminData(self, element: ET.Element, identifiable: Identifiable):
77
- child_element = element.find("./xmlns:ADMIN-DATA", self.nsmap)
101
+ child_element = self.find(element, "./ADMIN-DATA")
78
102
  if child_element is not None:
79
103
  self.logger.debug("readAdminData")
80
104
  admin_data = AdminData()
81
- self.readSdg(child_element, admin_data)
82
- identifiable.admin_data = admin_data
105
+ self.readSdgs(child_element, admin_data)
106
+ identifiable.setAdminData(admin_data)
83
107
 
84
108
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
85
109
  self.readElementAttributes(element, referrable)
86
- referrable.long_name = self.getMultilanguageLongName(element, "LONG-NAME")
110
+ referrable.setLongName(self.getMultilanguageLongName(element, "LONG-NAME"))
87
111
 
88
112
  def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
89
113
  self.readMultilanguageReferrable(element, identifiable)
90
- identifiable.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
91
- identifiable.desc = self.getMultiLanguageOverviewParagraph(element, "DESC")
114
+
115
+ for annotation in self.getAnnotations(element):
116
+ identifiable.addAnnotation(annotation)
117
+
118
+ identifiable.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
119
+ .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC"))
120
+
92
121
  self.readAdminData(element, identifiable)
93
122
 
94
123
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
95
- for child_element in element.findall("./xmlns:L-4", self.nsmap):
124
+ for child_element in self.findall(element, "./L-4"):
96
125
  l4 = LLongName()
97
126
  self.readElementAttributes(child_element, l4)
98
127
  l4.value = child_element.text
@@ -102,7 +131,7 @@ class ARXMLParser(AbstractARXMLParser):
102
131
 
103
132
  def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
104
133
  long_name = None
105
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
134
+ child_element = self.find(element, "./%s" % key)
106
135
  if child_element is not None:
107
136
  long_name = MultilanguageLongName()
108
137
  self.readElementAttributes(child_element, long_name)
@@ -110,7 +139,7 @@ class ARXMLParser(AbstractARXMLParser):
110
139
  return long_name
111
140
 
112
141
  def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
113
- for child_element in element.findall("./xmlns:L-2", self.nsmap):
142
+ for child_element in self.findall(element, "./L-2"):
114
143
  l2 = LOverviewParagraph()
115
144
  self.readElementAttributes(child_element, l2)
116
145
  l2.value = child_element.text
@@ -126,23 +155,31 @@ class ARXMLParser(AbstractARXMLParser):
126
155
  self.readElementAttributes(child_element, paragraph)
127
156
  self.readLOverviewParagraph(child_element, paragraph)
128
157
  return paragraph
129
-
130
- def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
131
- child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
132
- if (child_element is not None):
158
+
159
+ def getVariableInAtomicSWCTypeInstanceRef(self, element: ET.Element) -> VariableInAtomicSWCTypeInstanceRef:
160
+ autosar_variable_iref = None
161
+ if element is not None:
133
162
  autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
134
- autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
135
- if autosar_variable_iref.port_prototype_ref is None:
136
- self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
137
- autosar_variable_iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
138
- if autosar_variable_iref.target_data_prototype_ref is None:
139
- self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
140
- accessed_variable_ref.autosar_variable_iref = autosar_variable_iref
141
-
142
- def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
143
- child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
163
+ self.readElementAttributes(element, autosar_variable_iref)
164
+ autosar_variable_iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
165
+ autosar_variable_iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
166
+ return autosar_variable_iref
167
+
168
+ def getAutosarVariableInImplDatatype(self, element: ET.Element) -> AutosarVariableRef:
169
+ child_element = self.find(element, "ACCESSED-VARIABLE")
170
+ accessed_variable_ref = None
171
+ if (child_element is not None):
172
+ accessed_variable_ref = AutosarVariableRef()
173
+ accessed_variable_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
174
+ return accessed_variable_ref
175
+
176
+ def getLocalVariableRef(self, element: ET.Element) -> AutosarVariableRef:
177
+ child_element = self.find(element, "ACCESSED-VARIABLE")
178
+ accessed_variable_ref = None
144
179
  if (child_element is not None):
145
- accessed_variable_ref.local_variable_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF")
180
+ accessed_variable_ref = AutosarVariableRef()
181
+ accessed_variable_ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
182
+ return accessed_variable_ref
146
183
 
147
184
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
148
185
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
@@ -152,25 +189,25 @@ class ARXMLParser(AbstractARXMLParser):
152
189
 
153
190
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
154
191
  variable_access = parent.createDataReceivePointByArgument(short_name)
155
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
192
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
156
193
  elif (key == "DATA-RECEIVE-POINT-BY-VALUES"):
157
194
  variable_access = parent.createDataReceivePointByValue(short_name)
158
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
195
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
159
196
  elif (key == "DATA-READ-ACCESSS"):
160
197
  variable_access = parent.createDataReadAccess(short_name)
161
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
198
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
162
199
  elif (key == "DATA-WRITE-ACCESSS"):
163
200
  variable_access = parent.createDataWriteAccess(short_name)
164
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
201
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
165
202
  elif (key == "DATA-SEND-POINTS"):
166
203
  variable_access = parent.createDataSendPoint(short_name)
167
- self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
204
+ variable_access.setAccessedVariableRef(self.getAutosarVariableInImplDatatype(child_element))
168
205
  elif (key == "WRITTEN-LOCAL-VARIABLES"):
169
206
  variable_access = parent.createWrittenLocalVariable(short_name)
170
- self.readLocalVariableRef(child_element, variable_access.accessed_variable_ref)
207
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
171
208
  elif (key == "READ-LOCAL-VARIABLES"):
172
209
  variable_access = parent.createReadLocalVariable(short_name)
173
- self.readLocalVariableRef(child_element, variable_access.accessed_variable_ref)
210
+ variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
174
211
  else:
175
212
  self._raiseError("Invalid key type <%s>" % key)
176
213
 
@@ -203,16 +240,15 @@ class ARXMLParser(AbstractARXMLParser):
203
240
  mode_group.type_tref = self.getChildElementRefType(parent.short_name, child_element, "TYPE-TREF")
204
241
 
205
242
  def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
206
- child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
207
- if child_element is not None:
208
- for ref in self.getChildElementRefTypeList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
209
- entity.addCanEnterExclusiveAreaRef(ref)
243
+ for ref in self.getChildElementRefTypeList(element, "CAN-ENTER-EXCLUSIVE-AREA-REFS/CAN-ENTER-EXCLUSIVE-AREA-REF"):
244
+ entity.addCanEnterExclusiveAreaRef(ref)
210
245
 
211
246
  def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
212
247
  self.logger.debug("readExecutableEntity %s" % entity.short_name)
213
248
  self.readIdentifiable(element, entity)
214
249
  self.readCanEnterExclusiveAreaRefs(element, entity)
215
- entity.minimum_start_interval = self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")
250
+ entity.setMinimumStartInterval(self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")) \
251
+ .setSwAddrMethodRef(self.getChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF"))
216
252
 
217
253
  def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
218
254
  for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
@@ -222,7 +258,7 @@ class ARXMLParser(AbstractARXMLParser):
222
258
 
223
259
  def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
224
260
  self.readExecutableEntity(element, entity)
225
- entity.implemented_entry_ref = self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
261
+ entity.setImplementedEntryRef(self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF"))
226
262
  self.readBswModuleEntityManagedModeGroup(element, entity)
227
263
 
228
264
  def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
@@ -298,11 +334,18 @@ class ARXMLParser(AbstractARXMLParser):
298
334
  def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
299
335
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
300
336
  if child_element is not None:
301
- for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
337
+ for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
302
338
  behavior.addDataTypeMappingRef(ref)
303
339
 
340
+ def readInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
341
+ for child_element in element.findall("./xmlns:CONSTANT-MEMORYS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
342
+ short_name = self.getShortName(child_element)
343
+ prototype = behavior.createConstantMemory(short_name)
344
+ self.readParameterDataPrototype(child_element, prototype)
345
+
304
346
  def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
305
- self.readIdentifiable(element, behavior)
347
+ self.readIdentifiable(element, behavior)
348
+ self.readInternalBehaviorConstantMemories(element, behavior)
306
349
  for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
307
350
  short_name = self.getShortName(child_element)
308
351
  behavior.createExclusiveArea(short_name)
@@ -382,8 +425,18 @@ class ARXMLParser(AbstractARXMLParser):
382
425
  else:
383
426
  self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
384
427
 
428
+ def getIncludedDataTypeSets(self, element: ET.Element) -> List[IncludedDataTypeSet]:
429
+ include_data_type_sets = []
430
+ for child_element in self.findall(element, "./INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
431
+ include_data_type_set = IncludedDataTypeSet()
432
+ self.readElementAttributes(child_element, include_data_type_set)
433
+ for ref_type in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-REFS/DATA-TYPE-REF"):
434
+ include_data_type_set.addDataTypeRef(ref_type)
435
+ include_data_type_sets.append(include_data_type_set)
436
+ return include_data_type_sets
437
+
385
438
  def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
386
- for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
439
+ for child_element in self.findall(element, "./INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
387
440
  short_name = self.getShortName(child_element)
388
441
  behavior = parent.createSwcInternalBehavior(short_name)
389
442
  self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
@@ -396,12 +449,23 @@ class ARXMLParser(AbstractARXMLParser):
396
449
  self.readSwcInternalBehaviorEvents(child_element, behavior)
397
450
  self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
398
451
  self.readExplicitInterRunnableVariables(child_element, behavior)
452
+ for data_type_set in self.getIncludedDataTypeSets(child_element):
453
+ behavior.addIncludedDataTypeSet(data_type_set)
399
454
  behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
400
455
  self.readPerInstanceMemories(child_element, behavior)
401
- self.readPerInstanceParameter(child_element, behavior)
456
+ self.readPerInstanceParameters(child_element, behavior)
402
457
  self.readPortAPIOptions(child_element, behavior)
403
458
  behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
404
459
 
460
+ def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
461
+ group_sets = []
462
+ for child_element in self.findall(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS/INCLUDED-MODE-DECLARATION-GROUP-SET"):
463
+ group_set = IncludedModeDeclarationGroupSet()
464
+ for ref_type in self.getChildElementRefTypeList(child_element, "./MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
465
+ group_set.addModeDeclarationGroupRef(ref_type)
466
+ group_sets.append(group_set)
467
+ return group_sets
468
+
405
469
  def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
406
470
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
407
471
  short_name = self.getShortName(child_element)
@@ -417,6 +481,8 @@ class ARXMLParser(AbstractARXMLParser):
417
481
  self.readBswDataReceivedEvent(child_element, behavior)
418
482
  self.readBswInternalTriggerOccurredEvent(child_element, behavior)
419
483
  self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
484
+ for group_set in self.getIncludedModeDeclarationGroupSets(child_element):
485
+ behavior.addIncludedModeDeclarationGroupSet(group_set)
420
486
 
421
487
  def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
422
488
  short_name = self.getShortName(element)
@@ -510,7 +576,7 @@ class ARXMLParser(AbstractARXMLParser):
510
576
  def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
511
577
  child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
512
578
  if child_element is not None:
513
- for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
579
+ for ref in self.getChildElementRefTypeList(child_element, "./VENDOR-SPECIFIC-MODULE-DEF-REF"):
514
580
  parent.addVendorSpecificModuleDefRef(ref)
515
581
 
516
582
  def readBswImplementation(self, element: ET.Element, parent: ARPackage):
@@ -544,6 +610,11 @@ class ARXMLParser(AbstractARXMLParser):
544
610
  def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
545
611
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
546
612
 
613
+ def getRunnableEntityArgument(self, element: ET.Element) -> RunnableEntityArgument:
614
+ argument = RunnableEntityArgument()
615
+ argument.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
616
+ return argument
617
+
547
618
  def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
548
619
  accessed_parameter = None
549
620
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
@@ -571,22 +642,22 @@ class ARXMLParser(AbstractARXMLParser):
571
642
  operation_iref = ROperationInAtomicSwcInstanceRef()
572
643
  operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
573
644
  operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
574
- parent.operation_iref = operation_iref
645
+ parent.setOperationIRef(operation_iref)
575
646
 
576
647
  def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
577
- child_element = element.find("./xmlns:DATA-IREF", self.nsmap)
648
+ child_element = self.find(element, "DATA-IREF")
578
649
  if (child_element is not None):
579
650
  data_iref = RVariableInAtomicSwcInstanceRef()
580
- data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
581
- data_iref.target_data_element_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF")
582
- parent.data_iref = data_iref
651
+ data_iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
652
+ .setTargetDataElementRef(self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF"))
653
+ parent.setDataIRef(data_iref)
583
654
 
584
655
  def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
585
656
  for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
586
657
  mode_iref = RModeInAtomicSwcInstanceRef()
587
- mode_iref.context_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")
588
- mode_iref.context_mode_declaration_group_prototype_ref = self.getChildElementRefType("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
589
- mode_iref.target_mode_declaration_ref = self.getChildElementRefType("", child_element, "TARGET-MODE-DECLARATION-REF")
658
+ mode_iref.setContextPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")) \
659
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
660
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF"))
590
661
  parent.addModeIRef(mode_iref)
591
662
 
592
663
  def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -594,7 +665,7 @@ class ARXMLParser(AbstractARXMLParser):
594
665
  self.logger.debug("readSynchronousServerCallPoint %s" % short_name)
595
666
  server_call_point = parent.createSynchronousServerCallPoint(short_name)
596
667
  self.readIdentifiable(element, server_call_point)
597
- server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
668
+ server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
598
669
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
599
670
 
600
671
  def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -602,11 +673,11 @@ class ARXMLParser(AbstractARXMLParser):
602
673
  self.logger.debug("readAsynchronousServerCallPoint %s" % short_name)
603
674
  server_call_point = parent.createAsynchronousServerCallPoint(short_name)
604
675
  self.readIdentifiable(element, server_call_point)
605
- server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
676
+ server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
606
677
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
607
678
 
608
679
  def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
609
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/*", self.nsmap):
680
+ for child_element in self.findall(element, "SERVER-CALL-POINTS/*"):
610
681
  tag_name = self.getTagName(child_element.tag)
611
682
  if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
612
683
  self.readSynchronousServerCallPoint(child_element, parent)
@@ -615,39 +686,91 @@ class ARXMLParser(AbstractARXMLParser):
615
686
  else:
616
687
  self._raiseError("Unsupported server call point type <%s>" % tag_name)
617
688
 
618
- def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
619
- for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
689
+ def readInternalTriggeringPoints(self, element: ET.Element, parent: RunnableEntity):
690
+ for child_element in self.findall(element, "INTERNAL-TRIGGERING-POINTS/INTERNAL-TRIGGERING-POINT"):
620
691
  short_name = self.getShortName(child_element)
621
692
  point = parent.createInternalTriggeringPoint(short_name)
622
693
  point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
623
694
 
695
+ def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
696
+ iref = RModeInAtomicSwcInstanceRef()
697
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
698
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
699
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
700
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
701
+ return iref
702
+
703
+ def getRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> RModeGroupInAtomicSWCInstanceRef:
704
+ child_element = self.find(element, "MODE-GROUP-IREF/R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
705
+ iref = None
706
+ if child_element is not None:
707
+ iref = RModeGroupInAtomicSWCInstanceRef()
708
+ iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
709
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
710
+ return iref
711
+
712
+ def getPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> PModeGroupInAtomicSwcInstanceRef:
713
+ child_element = self.find(element, "MODE-GROUP-IREF")
714
+ iref = None
715
+ if child_element is not None:
716
+ iref = PModeGroupInAtomicSwcInstanceRef()
717
+ iref.setContextPPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF")) \
718
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
719
+ return iref
720
+
721
+ def readModeAccessPoints(self, element: ET.Element, parent: RunnableEntity):
722
+ for child_element in self.findall(element, "MODE-ACCESS-POINTS/MODE-ACCESS-POINT"):
723
+ point = ModeAccessPoint()
724
+ point.setModeGroupIRef(self.getRModeGroupInAtomicSWCInstanceRef(child_element))
725
+ parent.addModeAccessPoint(point)
726
+
727
+ def readModeSwitchPoints(self, element: ET.Element, parent: RunnableEntity):
728
+ for child_element in self.findall(element, "MODE-SWITCH-POINTS/MODE-SWITCH-POINT"):
729
+ point = parent.createModeSwitchPoint(self.getShortName(child_element))
730
+ point.setModeGroupIRef(self.getPModeGroupInAtomicSWCInstanceRef(child_element))
731
+
732
+ def readRunnableEntityArguments(self, element: ET.Element, entity: RunnableEntity):
733
+ for child_element in self.findall(element, "ARGUMENTS/*"):
734
+ tag_name = self.getTagName(child_element)
735
+ if tag_name == "RUNNABLE-ENTITY-ARGUMENT":
736
+ entity.addArgument(self.getRunnableEntityArgument(child_element))
737
+ else:
738
+ raise NotImplementedError("Unsupported Arguments of runnable entity <%s>" % tag_name)
739
+
740
+ def readRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
741
+ self.readExecutableEntity(element, entity)
742
+ self.readRunnableEntityArguments(element, entity)
743
+
744
+ entity.setCanBeInvokedConcurrently(self.getChildElementOptionalBooleanValue(element, "CAN-BE-INVOKED-CONCURRENTLY"))
745
+ entity.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
746
+
747
+ self.readDataReceivePointByArguments(element, entity)
748
+ self.readDataReceivePointByValues(element, entity)
749
+ self.readDataReadAccesses(element, entity)
750
+ self.readDataWriteAccesses(element, entity)
751
+ self.readDataSendPoints(element, entity)
752
+ self.readInternalBehaviorServerCallPoint(element, entity)
753
+ self.readInternalTriggeringPoints(element, entity)
754
+ self.readModeAccessPoints(element, entity)
755
+ self.readModeSwitchPoints(element, entity)
756
+ self.readParameterAccesses(element, entity)
757
+ self.readReadLocalVariables(element, entity)
758
+ self.readWrittenLocalVariables(element, entity)
759
+
624
760
  def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
625
- for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
761
+ for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
626
762
  short_name = self.getShortName(child_element)
627
763
  entity = parent.createRunnableEntity(short_name)
628
764
  self.logger.debug("readRunnableEntities %s" % short_name)
629
765
 
630
- self.readExecutableEntity(child_element, entity)
631
- entity.can_be_invoked_concurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
632
- entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
633
-
634
- self.readDataReceivePointByArguments(child_element, entity)
635
- self.readDataReceivePointByValues(child_element, entity)
636
- self.readDataReadAccesses(child_element, entity)
637
- self.readDataWriteAccesses(child_element, entity)
638
- self.readDataSendPoints(child_element, entity)
639
- self.readParameterAccesses(child_element, entity)
640
- self.readWrittenLocalVariables(child_element, entity)
641
- self.readReadLocalVariables(child_element, entity)
642
- self.readInternalBehaviorServerCallPoint(child_element, entity)
643
- self.readInternalTriggeringPoint(child_element, entity)
766
+ self.readRunnableEntity(child_element, entity)
644
767
 
645
768
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
646
769
  iref = RModeInAtomicSwcInstanceRef()
647
- iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
648
- iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
649
- iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
650
- iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
770
+ iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
771
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
772
+ .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
773
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
651
774
  return iref
652
775
 
653
776
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
@@ -669,38 +792,41 @@ class ARXMLParser(AbstractARXMLParser):
669
792
  event = parent.createOperationInvokedEvent(short_name)
670
793
  self.readOperationIRef(element, event)
671
794
  self.readRTEEvent(element, event)
672
-
795
+
796
+ def readVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
797
+ self.readAutosarDataPrototype(element, prototype)
798
+ prototype.setInitValue(self.getInitValue(element))
799
+
673
800
  def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
674
801
  for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
675
802
  short_name = self.getShortName(child_element)
676
803
  prototype = parent.createExplicitInterRunnableVariable(short_name)
677
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
678
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
679
- prototype.init_value = self.getInitValue(child_element)
804
+ self.readVariableDataPrototype(child_element, prototype)
680
805
 
681
806
  def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
682
807
  for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
683
808
  short_name = self.getShortName(child_element)
684
809
  memory = behavior.createPerInstanceMemory(short_name)
685
810
  self.readIdentifiable(child_element, memory)
686
- memory.init_value = self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")
687
- memory.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
688
- memory.type = self.getChildElementOptionalLiteral(child_element, "TYPE")
689
- memory.type_definition = self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION")
811
+ memory.setInitValue(self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")) \
812
+ .setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")) \
813
+ .setType(self.getChildElementOptionalLiteral(child_element, "TYPE")) \
814
+ .setTypeDefinition(self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION"))
690
815
 
691
816
  def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
692
- prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
817
+ self.readDataPrototype(element, prototype)
818
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
693
819
 
694
- def readParameterDataPrototype(self, element: ET.Element, behavior: SwcInternalBehavior):
695
- short_name = self.getShortName(element)
696
- prototype = behavior.createParameterDataPrototype(short_name)
820
+ def readParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
697
821
  self.readIdentifiable(element, prototype)
698
822
  self.readAutosarDataPrototype(element, prototype)
699
- prototype.init_value = self.getInitValue(element)
823
+ prototype.setInitValue(self.getInitValue(element))
700
824
 
701
- def readPerInstanceParameter(self, element: ET.Element, behavior: SwcInternalBehavior):
825
+ def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
702
826
  for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
703
- self.readParameterDataPrototype(child_element, behavior)
827
+ short_name = self.getShortName(child_element)
828
+ prototype = behavior.createPerInstanceParameter(short_name)
829
+ self.readParameterDataPrototype(child_element, prototype)
704
830
 
705
831
  def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
706
832
  argument_value = PortDefinedArgumentValue()
@@ -720,12 +846,6 @@ class ARXMLParser(AbstractARXMLParser):
720
846
  option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
721
847
  behavior.addPortAPIOption(option)
722
848
 
723
- def readInitEvents(self, element, parent: SwcInternalBehavior):
724
- for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
725
- short_name = self.getShortName(child_element)
726
- event = parent.createInitEvent(short_name)
727
- self.readRTEEvent(child_element, event)
728
-
729
849
  def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
730
850
  short_name = self.getShortName(element)
731
851
  event = parent.createTimingEvent(short_name)
@@ -752,6 +872,11 @@ class ARXMLParser(AbstractARXMLParser):
752
872
  self.readRTEEvent(element, event)
753
873
  event.event_source_ref = self.getChildElementRefType(parent.short_name, element, "EVENT-SOURCE-REF")
754
874
 
875
+ def readInitEvent(self, element, parent: SwcInternalBehavior):
876
+ short_name = self.getShortName(element)
877
+ event = parent.createInitEvent(short_name)
878
+ self.readRTEEvent(element, event)
879
+
755
880
  def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
756
881
  for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
757
882
  tag_name = self.getTagName(child_element.tag)
@@ -765,25 +890,59 @@ class ARXMLParser(AbstractARXMLParser):
765
890
  self.readDataReceivedEvent(child_element, parent)
766
891
  elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
767
892
  self.readInternalTriggerOccurredEvent(child_element, parent)
893
+ elif tag_name == "INIT-EVENT":
894
+ self.readInitEvent(child_element, parent)
768
895
  else:
769
896
  self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
770
897
 
771
898
  def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
772
- child_element = element.find("./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
773
- if (child_element is not None):
899
+ child_element = self.find(element, "SW-POINTER-TARGET-PROPS")
900
+ if child_element is not None:
774
901
  sw_pointer_target_props = SwPointerTargetProps()
775
902
  sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
776
903
  sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
777
- parent.sw_pointer_target_props = sw_pointer_target_props
904
+ parent.swPointerTargetProps = sw_pointer_target_props
905
+
906
+ def readLParagraph(self, element: ET.Element, paragraph: MultiLanguageParagraph):
907
+ for child_element in self.findall(element, "./L-1"):
908
+ l1 = LOverviewParagraph()
909
+ self.readElementAttributes(child_element, l1)
910
+ l1.value = child_element.text
911
+ if 'L' in child_element.attrib:
912
+ l1.l = child_element.attrib['L']
913
+ paragraph.addL1(l1)
914
+
915
+ def getMultiLanguageParagraphs(self, element: ET.Element, key: str) -> List[MultiLanguageParagraph]:
916
+ paragraphs = []
917
+ for child_element in self.findall(element, key):
918
+ paragraph = MultiLanguageParagraph()
919
+ self.readElementAttributes(child_element, paragraph)
920
+ self.readLParagraph(child_element, paragraph)
921
+ paragraphs.append(paragraph)
922
+ return paragraphs
923
+
924
+ def getDocumentationBlock(self, element: ET.Element, key: str) -> DocumentationBlock:
925
+ block = None
926
+ child_element = self.find(element, key)
927
+ if child_element is not None:
928
+ block = DocumentationBlock()
929
+ self.readElementAttributes(child_element, block)
930
+ for paragraph in self.getMultiLanguageParagraphs(child_element, "P"):
931
+ block.addP(paragraph)
932
+ return block
778
933
 
779
934
  def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
780
- annotation.label = self.getMultilanguageLongName(element, "LABEL")
935
+ annotation.setAnnotationOrigin(self.getChildElementOptionalLiteral(element, 'ANNOTATION-ORIGIN')) \
936
+ .setAnnotationText(self.getDocumentationBlock(element, "ANNOTATION-TEXT")) \
937
+ .setLabel(self.getMultilanguageLongName(element, "LABEL"))
781
938
 
782
- def readAnnotations(self, element: ET.Element, props: SwDataDefProps) :
939
+ def getAnnotations(self, element: ET.Element) -> List[Annotation]:
940
+ annotations = []
783
941
  for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
784
942
  annotation = Annotation()
785
943
  self.readGeneralAnnotation(child_element, annotation)
786
- props.addAnnotation(annotation)
944
+ annotations.append(annotation)
945
+ return annotations
787
946
 
788
947
  def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
789
948
  props = SwAxisIndividual()
@@ -820,6 +979,11 @@ class ARXMLParser(AbstractARXMLParser):
820
979
  if tag_name == "SW-CALPRM-AXIS":
821
980
  set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
822
981
  return set
982
+
983
+ def readSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
984
+ child_element = self.find(element, "INVALID-VALUE/*")
985
+ if child_element is not None:
986
+ props.setInvalidValue(self.getValueSpecification(child_element))
823
987
 
824
988
  def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
825
989
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
@@ -830,30 +994,36 @@ class ARXMLParser(AbstractARXMLParser):
830
994
  sw_data_def_props = SwDataDefProps()
831
995
  self.readElementAttributes(child_element, sw_data_def_props)
832
996
 
833
- self.readAnnotations(conditional_tag, sw_data_def_props)
834
- sw_data_def_props.baseTypeRef = self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")
835
- sw_data_def_props.dataConstrRef = self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")
836
- sw_data_def_props.compuMethodRef = self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")
837
- sw_data_def_props.swImplPolicy = self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")
838
- sw_data_def_props.implementationDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")
839
- sw_data_def_props.swCalibrationAccess = self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")
840
- sw_data_def_props.swCalprmAxisSet = self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")
841
- sw_data_def_props.swRecordLayoutRef = self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")
842
- sw_data_def_props.valueAxisDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")
843
- sw_data_def_props.setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
997
+ for annotation in self.getAnnotations(conditional_tag):
998
+ sw_data_def_props.addAnnotation(annotation)
999
+
1000
+ sw_data_def_props.setBaseTypeRef(self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")) \
1001
+ .setDataConstrRef(self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")) \
1002
+ .setCompuMethodRef(self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")) \
1003
+ .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1004
+ .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
1005
+ .setSwCalibrationAccess(self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")) \
1006
+ .setSwCalprmAxisSet(self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")) \
1007
+ .setSwRecordLayoutRef(self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")) \
1008
+ .setValueAxisDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")) \
1009
+ .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1010
+ self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
844
1011
  self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
845
1012
  self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
846
1013
  return sw_data_def_props
1014
+
1015
+ def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1016
+ self.readIdentifiable(element, data_type)
1017
+ data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
847
1018
 
848
1019
  def readApplicationPrimitiveDataType(self, element: ET.Element, parent: ARPackage):
849
1020
  short_name = self.getShortName(element)
850
1021
  data_type = parent.createApplicationPrimitiveDataType(short_name)
851
1022
  self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
852
- self.readIdentifiable(element, data_type)
853
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1023
+ self.readAutosarDataType(element, data_type)
854
1024
 
855
1025
  def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
856
- prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
1026
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
857
1027
 
858
1028
  def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
859
1029
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
@@ -868,7 +1038,7 @@ class ARXMLParser(AbstractARXMLParser):
868
1038
  data_type = parent.createApplicationRecordDataType(short_name)
869
1039
  self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
870
1040
  self.readIdentifiable(element, data_type)
871
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1041
+ data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
872
1042
  self.readApplicationRecordElements(element, data_type)
873
1043
 
874
1044
  def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
@@ -876,10 +1046,10 @@ class ARXMLParser(AbstractARXMLParser):
876
1046
  short_name = self.getShortName(child_element)
877
1047
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
878
1048
  self.readIdentifiable(child_element, type_element)
879
- type_element.arraySize = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")
880
- type_element.array_size_semantics = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS")
1049
+ type_element.setArraySize(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")) \
1050
+ .setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
881
1051
  self.readImplementationDataTypeElements(child_element, type_element)
882
- type_element.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1052
+ type_element.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
883
1053
 
884
1054
  def readImplementationDataType(self, element: ET.Element, parent: ARPackage):
885
1055
  short_name = self.getShortName(element)
@@ -892,7 +1062,7 @@ class ARXMLParser(AbstractARXMLParser):
892
1062
  self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
893
1063
  array_sub_element = data_type.getImplementationDataTypeElements()[0]
894
1064
  if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
895
- data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementationDataTypeRef.value)
1065
+ data_type.setArrayElementType(array_sub_element.swDataDefProps.implementationDataTypeRef.value)
896
1066
  elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
897
1067
  return
898
1068
  else:
@@ -930,10 +1100,10 @@ class ARXMLParser(AbstractARXMLParser):
930
1100
  self.readElementAttributes(element, com_spec)
931
1101
  for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
932
1102
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
933
- com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
934
- com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
935
- com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
936
- com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1103
+ com_spec.dataElementRef = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1104
+ com_spec.networkRepresentation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1105
+ com_spec.handleOutOfRange = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1106
+ com_spec.usesEndToEndProtection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
937
1107
 
938
1108
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
939
1109
  child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
@@ -977,7 +1147,7 @@ class ARXMLParser(AbstractARXMLParser):
977
1147
 
978
1148
  def getInitValue(self, element: ET.Element) -> ValueSpecification:
979
1149
  value_spec = None
980
- child_element = element.find("./xmlns:INIT-VALUE/*", self.nsmap)
1150
+ child_element = self.find(element, "INIT-VALUE/*")
981
1151
  if child_element is not None:
982
1152
  self.logger.debug("getInitValue")
983
1153
  value_spec = self.getValueSpecification(child_element)
@@ -986,25 +1156,31 @@ class ARXMLParser(AbstractARXMLParser):
986
1156
  def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
987
1157
  com_spec = ClientComSpec()
988
1158
  self.readElementAttributes(element, com_spec)
989
- com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1159
+ com_spec.operationRef = self.getChildElementOptionalRefType(element, "OPERATION-REF")
990
1160
  return com_spec
991
1161
 
992
1162
  def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
993
1163
  com_spec = QueuedReceiverComSpec()
994
1164
  self.readElementAttributes(element, com_spec)
995
1165
  self.readReceiverComSpec(element, com_spec)
996
- com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1166
+ com_spec.queueLength = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1167
+ return com_spec
1168
+
1169
+ def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
1170
+ com_spec = ModeSwitchReceiverComSpec()
1171
+ self.readElementAttributes(element, com_spec)
1172
+ com_spec.modeGroupRef = self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")
997
1173
  return com_spec
998
1174
 
999
1175
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1000
1176
  com_spec = NonqueuedReceiverComSpec()
1001
1177
  self.readElementAttributes(element, com_spec)
1002
1178
  self.readReceiverComSpec(element, com_spec)
1003
- com_spec.alive_timeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1004
- com_spec.enable_updated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1005
- com_spec.handle_never_received = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1006
- com_spec.handel_timeout_type = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1007
- com_spec.init_value = self.getInitValue(element)
1179
+ com_spec.aliveTimeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1180
+ com_spec.enableUpdated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1181
+ com_spec.handleNeverReceived = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1182
+ com_spec.handleTimeoutType = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1183
+ com_spec.initValue = self.getInitValue(element)
1008
1184
  return com_spec
1009
1185
 
1010
1186
  def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
@@ -1016,18 +1192,29 @@ class ARXMLParser(AbstractARXMLParser):
1016
1192
  parent.addRequiredComSpec(self.getClientComSpec(child_element))
1017
1193
  elif tag_name == "QUEUED-RECEIVER-COM-SPEC":
1018
1194
  parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
1195
+ elif tag_name == "MODE-SWITCH-RECEIVER-COM-SPEC":
1196
+ parent.addRequiredComSpec(self.getModeSwitchReceiverComSpec(child_element))
1019
1197
  else:
1020
1198
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1021
1199
 
1022
1200
  def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1023
- for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
1024
- short_name = self.getShortName(child_element)
1025
- self.logger.debug("readRPortPrototype %s" % short_name)
1026
- prototype = parent.createRPortPrototype(short_name)
1027
- self.readIdentifiable(child_element, prototype)
1028
- prototype.required_interface_tref = self.getChildElementOptionalRefType(child_element, "REQUIRED-INTERFACE-TREF")
1201
+ short_name = self.getShortName(element)
1202
+ self.logger.debug("readRPortPrototype %s" % short_name)
1203
+ prototype = parent.createRPortPrototype(short_name)
1204
+ self.readIdentifiable(element, prototype)
1205
+ prototype.required_interface_tref = self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF")
1029
1206
 
1030
- self.readRequiredComSpec(child_element, prototype)
1207
+ self.readRequiredComSpec(element, prototype)
1208
+
1209
+ def readAtomicSwComponentTypePorts(self, element: ET.Element, sw_component: AtomicSwComponentType):
1210
+ for child_element in element.findall("./xmlns:PORTS/*", self.nsmap):
1211
+ tag_name = self.getTagName(child_element)
1212
+ if tag_name == "P-PORT-PROTOTYPE":
1213
+ self.readPPortPrototype(child_element, sw_component)
1214
+ elif tag_name == "R-PORT-PROTOTYPE":
1215
+ self.readRPortPrototype(child_element, sw_component)
1216
+ else:
1217
+ self._raiseError("Unsupported Port Prototype <%s>" % tag_name)
1031
1218
 
1032
1219
  def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
1033
1220
  child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
@@ -1042,23 +1229,33 @@ class ARXMLParser(AbstractARXMLParser):
1042
1229
  self.readElementAttributes(element, com_spec)
1043
1230
  for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1044
1231
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1045
- com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1046
- com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1047
- com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1048
- com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
1049
- com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1232
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1233
+ .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
1234
+ .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
1235
+ .setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
1236
+ .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1050
1237
 
1051
1238
  def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
1052
1239
  com_spec = NonqueuedSenderComSpec()
1053
1240
  self.readSenderComSpec(element, com_spec)
1054
- com_spec.init_value = self.getInitValue(element)
1241
+ com_spec.setInitValue(self.getInitValue(element))
1055
1242
  return com_spec
1056
1243
 
1057
1244
  def getServerComSpec(self, element) -> ServerComSpec:
1058
1245
  com_spec = ServerComSpec()
1246
+ com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
1247
+ .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1248
+ return com_spec
1249
+
1250
+ def getQueuedSenderComSpec(self, element) -> QueuedSenderComSpec:
1251
+ com_spec = QueuedSenderComSpec()
1059
1252
  self.readSenderComSpec(element, com_spec)
1060
- com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1061
- com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1253
+ return com_spec
1254
+
1255
+ def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
1256
+ com_spec = ModeSwitchSenderComSpec()
1257
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1258
+ .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1062
1259
  return com_spec
1063
1260
 
1064
1261
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
@@ -1068,18 +1265,21 @@ class ARXMLParser(AbstractARXMLParser):
1068
1265
  parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
1069
1266
  elif tag_name == "SERVER-COM-SPEC":
1070
1267
  parent.addProvidedComSpec(self.getServerComSpec(child_element))
1268
+ elif tag_name == "QUEUED-SENDER-COM-SPEC":
1269
+ parent.addProvidedComSpec(self.getQueuedSenderComSpec(child_element))
1270
+ elif tag_name == "MODE-SWITCH-SENDER-COM-SPEC":
1271
+ parent.addProvidedComSpec(self.getModeSwitchSenderComSpec(child_element))
1071
1272
  else:
1072
- raise NotImplementedError("Unsupported RequiredComSpec <%s>" % tag_name)
1273
+ self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1073
1274
 
1074
1275
  def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1075
- for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
1076
- short_name = self.getShortName(child_element)
1077
- self.logger.debug("readPPortPrototype %s" % short_name)
1078
- prototype = parent.createPPortPrototype(short_name)
1079
- self.readIdentifiable(child_element, prototype)
1080
- prototype.provided_interface_tref = self.getChildElementOptionalRefType(child_element, "PROVIDED-INTERFACE-TREF")
1276
+ short_name = self.getShortName(element)
1277
+ self.logger.debug("readPPortPrototype %s" % short_name)
1278
+ prototype = parent.createPPortPrototype(short_name)
1279
+ self.readIdentifiable(element, prototype)
1280
+ prototype.provided_interface_tref = self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF")
1081
1281
 
1082
- self.readProvidedComSpec(child_element, prototype)
1282
+ self.readProvidedComSpec(element, prototype)
1083
1283
 
1084
1284
  def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
1085
1285
  for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
@@ -1110,8 +1310,7 @@ class ARXMLParser(AbstractARXMLParser):
1110
1310
 
1111
1311
  def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
1112
1312
  self.readIdentifiable(element, parent)
1113
- self.readRPortPrototype(element, parent)
1114
- self.readPPortPrototype(element, parent)
1313
+ self.readAtomicSwComponentTypePorts(element, parent)
1115
1314
  self.readSwComponentTypePortGroups(element, parent)
1116
1315
 
1117
1316
  def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
@@ -1239,7 +1438,7 @@ class ARXMLParser(AbstractARXMLParser):
1239
1438
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
1240
1439
  self.logger.debug("readDataTypeMappingSet")
1241
1440
  if child_element is not None:
1242
- for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
1441
+ for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
1243
1442
  parent.addDataTypeMapping(ref)
1244
1443
 
1245
1444
  def readCompositionSwComponentType(self, element: ET.Element, parent: ARPackage):
@@ -1269,6 +1468,7 @@ class ARXMLParser(AbstractARXMLParser):
1269
1468
  def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1270
1469
  for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
1271
1470
  map = ModeRequestTypeMap()
1471
+ self.readElementAttributes(child_element, map)
1272
1472
  map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1273
1473
  map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
1274
1474
  parent.addModeRequestTypeMap(map)
@@ -1280,40 +1480,51 @@ class ARXMLParser(AbstractARXMLParser):
1280
1480
  self.readDataTypeMaps(element, mapping_set)
1281
1481
  self.readModeRequestTypeMaps(element, mapping_set)
1282
1482
 
1283
- def readDataElements(self, element: ET.Element, parent: SenderReceiverInterface):
1483
+ def readSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1284
1484
  for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
1285
1485
  short_name = self.getShortName(child_element)
1286
- prototype = parent.createDataElement(short_name)
1486
+ prototype = sr_interface.createDataElement(short_name)
1287
1487
  self.readIdentifiable(child_element, prototype)
1288
- prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1488
+ prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1289
1489
  self.readAutosarDataPrototype(child_element, prototype)
1290
- prototype.init_value = self.getInitValue(child_element)
1490
+ prototype.initValue = self.getInitValue(child_element)
1491
+
1492
+ def readSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1493
+ for child_element in self.findall(element, "INVALIDATION-POLICYS/INVALIDATION-POLICY"):
1494
+ policy = InvalidationPolicy()
1495
+ policy.setDataElementRef(self.getChildElementOptionalRefType(child_element, "DATA-ELEMENT-REF")) \
1496
+ .setHandleInvalid(self.getChildElementOptionalLiteral(child_element, "HANDLE-INVALID"))
1497
+ sr_interface.addInvalidationPolicy(policy)
1291
1498
 
1292
1499
  def readSenderReceiverInterfaces(self, element, parent: ARPackage):
1293
1500
  short_name = self.getShortName(element)
1294
1501
  sr_interface = parent.createSenderReceiverInterface(short_name)
1295
1502
  self.readIdentifiable(element, sr_interface)
1296
- sr_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1297
- self.readDataElements(element, sr_interface)
1503
+ sr_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1504
+ self.readSenderReceiverInterfaceDataElements(element, sr_interface)
1505
+ self.readSenderReceiverInterfaceInvalidationPolicies(element, sr_interface)
1298
1506
 
1299
1507
  def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1300
1508
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
1301
1509
  short_name = self.getShortName(child_element)
1302
1510
  prototype = ArgumentDataPrototype(property, short_name)
1303
- prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1511
+ self.readIdentifiable(child_element, prototype)
1512
+ prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1513
+ prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1304
1514
  prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1305
1515
  parent.addArgumentDataPrototype(prototype)
1306
1516
 
1307
1517
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
1308
1518
  child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
1309
1519
  if child_element is not None:
1310
- for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
1520
+ for ref in self.getChildElementRefTypeList(child_element, "./POSSIBLE-ERROR-REF"):
1311
1521
  parent.addPossibleErrorRef(ref)
1312
1522
 
1313
1523
  def readOperations(self, element: ET.Element, parent: ClientServerInterface):
1314
1524
  for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
1315
1525
  short_name = self.getShortName(child_element)
1316
1526
  operation = parent.createOperation(short_name)
1527
+ self.readIdentifiable(child_element, operation)
1317
1528
  self.readArgumentDataPrototypes(child_element, operation)
1318
1529
  self.readPossibleErrorRefs(child_element, operation)
1319
1530
 
@@ -1324,12 +1535,13 @@ class ARXMLParser(AbstractARXMLParser):
1324
1535
  error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
1325
1536
 
1326
1537
  def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
1327
- port_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1538
+ port_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1328
1539
  port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
1329
1540
 
1330
1541
  def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
1331
1542
  short_name = self.getShortName(element)
1332
1543
  cs_interface = parent.createClientServerInterface(short_name)
1544
+ self.readIdentifiable(element, cs_interface)
1333
1545
  self.readPortInterface(element, cs_interface)
1334
1546
  self.readOperations(element, cs_interface)
1335
1547
  self.readPossibleErrors(element, cs_interface)
@@ -1440,14 +1652,14 @@ class ARXMLParser(AbstractARXMLParser):
1440
1652
  self.readValueSpecification(element, value_spec)
1441
1653
  child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
1442
1654
  for child_element in child_elements:
1443
- value_spec.add_element(self.getValueSpecification(child_element))
1655
+ value_spec.addElement(self.getValueSpecification(child_element))
1444
1656
  return value_spec
1445
1657
 
1446
1658
  def getConstantReference(self, element: ET.Element) -> ConstantReference:
1447
1659
  self.logger.debug("getConstantReference")
1448
1660
  value_spec = ConstantReference()
1449
1661
  self.readValueSpecification(element, value_spec)
1450
- value_spec.constant_ref = self.getChildElementOptionalRefType(element, "CONSTANT-REF")
1662
+ value_spec.setConstantRef(self.getChildElementOptionalRefType(element, "CONSTANT-REF"))
1451
1663
  return value_spec
1452
1664
 
1453
1665
  def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
@@ -1470,7 +1682,7 @@ class ARXMLParser(AbstractARXMLParser):
1470
1682
 
1471
1683
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1472
1684
  for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1473
- spec.add_field(self.getValueSpecification(child_element))
1685
+ spec.addField(self.getValueSpecification(child_element))
1474
1686
 
1475
1687
  def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1476
1688
  value_spec = RecordValueSpecification()
@@ -1483,8 +1695,8 @@ class ARXMLParser(AbstractARXMLParser):
1483
1695
  self.logger.debug("readConstantSpecification %s" % short_name)
1484
1696
  spec = parent.createConstantSpecification(short_name)
1485
1697
  self.readIdentifiable(element, spec)
1486
- for value_spec_tag in element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
1487
- spec.value_spec = self.getValueSpecification(value_spec_tag)
1698
+ for value_spec_tag in self.findall(element, "VALUE-SPEC/*"):
1699
+ spec.setValueSpec(self.getValueSpecification(value_spec_tag))
1488
1700
 
1489
1701
  def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1490
1702
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
@@ -1527,7 +1739,11 @@ class ARXMLParser(AbstractARXMLParser):
1527
1739
  self.logger.debug("readUnit %s" % short_name)
1528
1740
  unit = parent.createUnit(short_name)
1529
1741
  self.readIdentifiable(element, unit)
1530
- unit.display_name = self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")
1742
+ unit.setDisplayName(self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")) \
1743
+ .setFactorSiToUnit(self.getChildElementOptionalFloatValue(element, "FACTOR-SI-TO-UNIT")) \
1744
+ .setOffsetSiToUnit(self.getChildElementOptionalFloatValue(element, "OFFSET-SI-TO-UNIT")) \
1745
+ .setPhysicalDimensionRef(self.getChildElementOptionalRefType(element, "PHYSICAL-DIMENSION-REF"))
1746
+
1531
1747
 
1532
1748
  def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
1533
1749
  child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
@@ -1549,11 +1765,13 @@ class ARXMLParser(AbstractARXMLParser):
1549
1765
  return desc
1550
1766
 
1551
1767
  def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
1552
- iref = VariableDataPrototypeInSystemInstanceRef()
1553
- iref.contextComponentRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1554
- iref.contextCompositionRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1555
- iref.contextPortRef = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1556
- iref.targetDataPrototypeRef = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1768
+ iref = None
1769
+ if element is not None:
1770
+ iref = VariableDataPrototypeInSystemInstanceRef()
1771
+ iref.context_component_refs = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1772
+ iref.context_composition_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1773
+ iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1774
+ iref.target_data_prototype_ref = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1557
1775
  return iref
1558
1776
 
1559
1777
  def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
@@ -1595,7 +1813,7 @@ class ARXMLParser(AbstractARXMLParser):
1595
1813
 
1596
1814
  def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1597
1815
  self.readIdentifiable(element, data_type)
1598
- data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1816
+ data_type.swDataDefProps = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
1599
1817
 
1600
1818
  def readApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
1601
1819
  self.readAutosarDataType(element, data_type)
@@ -1709,6 +1927,638 @@ class ARXMLParser(AbstractARXMLParser):
1709
1927
  self.readPortInterface(element, mode_interface)
1710
1928
  self.readModeSwitchInterfaceModeGroup(element, mode_interface)
1711
1929
 
1930
+ def readEOCExecutableEntityRef(self, element: ET.Element, constraint: ExecutionOrderConstraint):
1931
+ short_name = self.getShortName(element)
1932
+ self.logger.debug("readEocExecutableEntityRef %s" % short_name)
1933
+ entity_ref = constraint.createEOCExecutableEntityRef(short_name)
1934
+ self.readIdentifiable(element, entity_ref)
1935
+ for ref in self.getChildElementRefTypeList(element, "SUCCESSOR-REFS/SUCCESSOR-REF"):
1936
+ entity_ref.addSuccessorRef(ref)
1937
+
1938
+ def readExecutionOrderConstraintOrderedElement(self, element: ET.Element, constrain: ExecutionOrderConstraint):
1939
+ for child_element in self.findall(element, "ORDERED-ELEMENTS/*"):
1940
+ tag_name = self.getTagName(child_element)
1941
+ if tag_name == "EOC-EXECUTABLE-ENTITY-REF":
1942
+ self.readEOCExecutableEntityRef(child_element, constrain)
1943
+ else:
1944
+ self._raiseError("Unsupported order element <%s>." % tag_name)
1945
+
1946
+ def readExecutionOrderConstraint(self, element: ET.Element, extension: TimingExtension):
1947
+ short_name = self.getShortName(element)
1948
+ self.logger.debug("readExecutionOrderConstraint %s" % short_name)
1949
+ constraint = extension.createExecutionOrderConstraint(short_name)
1950
+ self.readIdentifiable(element, constraint)
1951
+ self.readExecutionOrderConstraintOrderedElement(element, constraint)
1952
+
1953
+ def readTimingExtension(self, element: ET.Element, extension: TimingExtension):
1954
+ for child_element in self.findall(element, "TIMING-REQUIREMENTS/*"):
1955
+ tag_name = self.getTagName(child_element)
1956
+ if tag_name == "EXECUTION-ORDER-CONSTRAINT":
1957
+ self.readExecutionOrderConstraint(child_element, extension)
1958
+ else:
1959
+ self._raiseError("Unsupported timing requirement <%s>" % tag_name)
1960
+
1961
+ def readSwcTiming(self, element: ET.Element, parent: ARPackage):
1962
+ short_name = self.getShortName(element)
1963
+ self.logger.debug("readSwcTiming %s" % short_name)
1964
+ timing = parent.createSwcTiming(short_name)
1965
+ self.readIdentifiable(element, timing)
1966
+ self.readTimingExtension(element, timing)
1967
+
1968
+ def readFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
1969
+ for ref in self.getChildElementRefTypeList(element, 'FRAME-PORT-REFS/FRAME-PORT-REF'):
1970
+ triggering.addFramePortRef(ref)
1971
+ triggering.setFrameRef(self.getChildElementOptionalRefType(element, "FRAME-REF"))
1972
+ for child_element in self.findall(element, 'PDU-TRIGGERINGS/PDU-TRIGGERING-REF-CONDITIONAL'):
1973
+ triggering.addPduTriggeringRef(self.getChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF"))
1974
+
1975
+ def readCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
1976
+ self.logger.debug("Read CanFrameTriggering %s" % triggering.getShortName())
1977
+ self.readIdentifiable(element, triggering)
1978
+ self.readFrameTriggering(element, triggering)
1979
+ triggering.setCanAddressingMode(self.getChildElementOptionalLiteral(element, "CAN-ADDRESSING-MODE")) \
1980
+ .setCanFdFrameSupport(self.getChildElementOptionalBooleanValue(element, "CAN-FD-FRAME-SUPPORT")) \
1981
+ .setCanFrameRxBehavior(self.getChildElementOptionalLiteral(element, "CAN-FRAME-RX-BEHAVIOR")) \
1982
+ .setCanFrameTxBehavior(self.getChildElementOptionalLiteral(element, "CAN-FRAME-TX-BEHAVIOR")) \
1983
+ .setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
1984
+ .setRxIdentifierRange(self.getChildElementRxIdentifierRange(element, "RX-IDENTIFIER-RANGE"))
1985
+
1986
+
1987
+ def readLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
1988
+ self.logger.debug("Read LinFrameTriggering %s" % triggering.getShortName())
1989
+ self.readIdentifiable(element, triggering)
1990
+ self.readFrameTriggering(element, triggering)
1991
+ triggering.setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
1992
+ .setLinChecksum(self.getChildElementOptionalLiteral(element, "LIN-CHECKSUM"))
1993
+
1994
+ def readISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
1995
+ self.logger.debug("Read ISignalTriggering %s" % triggering.getShortName())
1996
+ self.readIdentifiable(element, triggering)
1997
+ triggering.setISignalGroupRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-GROUP-REF"))
1998
+ for ref in self.getChildElementRefTypeList(element, 'I-SIGNAL-PORT-REFS/I-SIGNAL-PORT-REF'):
1999
+ triggering.addISignalPortRef(ref)
2000
+ triggering.setISignalRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-REF"))
2001
+
2002
+ def readPduTriggering(self, element: ET.Element, triggering: PduTriggering):
2003
+ self.logger.debug("Read PduTriggering %s" % triggering.getShortName())
2004
+ self.readIdentifiable(element, triggering)
2005
+ for ref in self.getChildElementRefTypeList(element, 'I-PDU-PORT-REFS/I-PDU-PORT-REF'):
2006
+ triggering.addIPduPortRef(ref)
2007
+ triggering.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF"))
2008
+ for child_element in self.findall(element, 'I-SIGNAL-TRIGGERINGS/I-SIGNAL-TRIGGERING-REF-CONDITIONAL'):
2009
+ triggering.addISignalTriggeringRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF"))
2010
+
2011
+ def readPhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2012
+ for child_element in self.findall(element, 'COMM-CONNECTORS/COMMUNICATION-CONNECTOR-REF-CONDITIONAL'):
2013
+ channel.addCommConnectorRef(self.getChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF"))
2014
+
2015
+ for child_element in self.findall(element, "FRAME-TRIGGERINGS/*"):
2016
+ tag_name = self.getTagName(child_element)
2017
+ if tag_name == "CAN-FRAME-TRIGGERING":
2018
+ triggering = channel.createCanFrameTriggering(self.getShortName(child_element))
2019
+ self.readCanFrameTriggering(child_element, triggering)
2020
+ elif tag_name == "LIN-FRAME-TRIGGERING":
2021
+ triggering = channel.createLinFrameTriggering(self.getShortName(child_element))
2022
+ self.readLinFrameTriggering(child_element, triggering)
2023
+ else:
2024
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2025
+
2026
+ for child_element in self.findall(element, "I-SIGNAL-TRIGGERINGS/*"):
2027
+ tag_name = self.getTagName(child_element)
2028
+ if tag_name == "I-SIGNAL-TRIGGERING":
2029
+ triggering = channel.createISignalTriggering(self.getShortName(child_element))
2030
+ self.readISignalTriggering(child_element, triggering)
2031
+ else:
2032
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2033
+
2034
+ for child_element in self.findall(element, "PDU-TRIGGERINGS/*"):
2035
+ tag_name = self.getTagName(child_element)
2036
+ if tag_name == "PDU-TRIGGERING":
2037
+ triggering = channel.createPduTriggering(self.getShortName(child_element))
2038
+ self.readPduTriggering(child_element, triggering)
2039
+ else:
2040
+ raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2041
+
2042
+ def readCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2043
+ self.readIdentifiable(element, channel)
2044
+ self.readPhysicalChannel(element, channel)
2045
+
2046
+ def readLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2047
+ self.readIdentifiable(element, channel)
2048
+ self.readPhysicalChannel(element, channel)
2049
+
2050
+ def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2051
+ for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
2052
+ tag_name = self.getTagName(child_element)
2053
+ if tag_name == "CAN-PHYSICAL-CHANNEL":
2054
+ channel = cluster.createCanPhysicalChannel(self.getShortName(child_element))
2055
+ self.readCanPhysicalChannel(child_element, channel)
2056
+ elif tag_name == "LIN-PHYSICAL-CHANNEL":
2057
+ channel = cluster.createLinPhysicalChannel(self.getShortName(child_element))
2058
+ self.readLinPhysicalChannel(child_element, channel)
2059
+ else:
2060
+ raise NotImplementedError("Unsupported Physical Channel <%s>" % tag_name)
2061
+
2062
+
2063
+ def readCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
2064
+ cluster.setBaudrate(self.getChildElementOptionalNumericalValue(element, "BAUDRATE"))
2065
+ self.readCommunicationClusterPhysicalChannels(element, cluster)
2066
+ cluster.setProtocolName(self.getChildElementOptionalLiteral(element, "PROTOCOL-NAME")) \
2067
+ .setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
2068
+
2069
+ def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2070
+ cluster.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE"))
2071
+
2072
+ def readLinCluster(self, element: ET.Element, parent: ARPackage):
2073
+ short_name = self.getShortName(element)
2074
+ self.logger.debug("readLinCluster %s" % short_name)
2075
+ cluster = parent.createLinCluster(short_name)
2076
+ self.readIdentifiable(element, cluster)
2077
+ child_element = self.find(element, "LIN-CLUSTER-VARIANTS/LIN-CLUSTER-CONDITIONAL")
2078
+ if child_element is not None:
2079
+ self.readCommunicationCluster(child_element, cluster)
2080
+
2081
+ def readCanCluster(self, element: ET.Element, parent: ARPackage):
2082
+ short_name = self.getShortName(element)
2083
+ self.logger.debug("readCanCluster %s" % short_name)
2084
+ cluster = parent.createCanCluster(short_name)
2085
+ self.readIdentifiable(element, cluster)
2086
+ child_element = self.find(element, "CAN-CLUSTER-VARIANTS/CAN-CLUSTER-CONDITIONAL")
2087
+ if child_element is not None:
2088
+ self.readCommunicationCluster(child_element, cluster)
2089
+ self.readAbstractCanCluster(child_element, cluster)
2090
+
2091
+ def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
2092
+ for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
2093
+ short_name = self.getShortName(child_element)
2094
+ self.logger.debug("readPduToFrameMapping %s" % short_name)
2095
+ mapping = parent.createPduToFrameMapping(short_name)
2096
+ self.readIdentifiable(child_element, mapping)
2097
+ mapping.packingByteOrder = self.getChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER")
2098
+ mapping.pduRef = self.getChildElementOptionalRefType(child_element, "PDU-REF")
2099
+ mapping.startPosition = self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")
2100
+
2101
+ def readFrame(self, element: ET.Element, frame: Frame):
2102
+ self.readIdentifiable(element, frame)
2103
+ frame.frameLength = self.getChildElementOptionalNumericalValue(element, "FRAME-LENGTH")
2104
+ self.readPduToFrameMappings(element, frame)
2105
+
2106
+ def readLinUnconditionalFrame(self, element: ET.Element, parent: ARPackage):
2107
+ short_name = self.getShortName(element)
2108
+ self.logger.debug("LinUnconditionalFrame %s" % short_name)
2109
+ frame = parent.createLinUnconditionalFrame(short_name)
2110
+ self.readFrame(element, frame)
2111
+
2112
+ def readNmPdu(self, element: ET.Element, parent: ARPackage):
2113
+ short_name = self.getShortName(element)
2114
+ self.logger.debug("readNmPdu %s" % short_name)
2115
+ pdu = parent.createNmPdu(short_name)
2116
+ self.readIdentifiable(element, pdu)
2117
+ self.readIPdu(element, pdu)
2118
+
2119
+ def readNPdu(self, element: ET.Element, parent: ARPackage):
2120
+ short_name = self.getShortName(element)
2121
+ self.logger.debug("readNPdu %s" % short_name)
2122
+ pdu = parent.createNPdu(short_name)
2123
+ self.readIdentifiable(element, pdu)
2124
+ self.readIPdu(element, pdu)
2125
+
2126
+ def readIPdu(self, element: ET.Element, pdu: IPdu):
2127
+ pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2128
+
2129
+ def readDcmIPdu(self, element: ET.Element, parent: ARPackage):
2130
+ short_name = self.getShortName(element)
2131
+ self.logger.debug("readDcmIPdu %s" % short_name)
2132
+ pdu = parent.createDcmIPdu(short_name)
2133
+ self.readIdentifiable(element, pdu)
2134
+ self.readIPdu(element, pdu)
2135
+ pdu.setDiagPduType(self.getChildElementOptionalLiteral(element, "DIAG-PDU-TYPE"))
2136
+
2137
+ def readSecuredIPdu(self, element: ET.Element, parent: ARPackage):
2138
+ short_name = self.getShortName(element)
2139
+ self.logger.debug("readSecuredIPdu %s" % short_name)
2140
+ pdu = parent.createSecuredIPdu(short_name)
2141
+ self.readIdentifiable(element, pdu)
2142
+ self.readIPdu(element, pdu)
2143
+
2144
+ def readNmNode(self, element: ET.Element, nm_node: NmNode):
2145
+ nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
2146
+ .setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
2147
+ .setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
2148
+ for ref in self.getChildElementRefTypeList(element, "RX-NM-PDU-REFS/RX-NM-PDU-REF"):
2149
+ nm_node.addRxNmPduRef(ref)
2150
+ for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
2151
+ nm_node.addTxNmPduRefs(ref)
2152
+
2153
+ def readCanNmNode(self, element: ET.Element, parent: NmCluster):
2154
+ short_name = self.getShortName(element)
2155
+ self.logger.debug("readCanNmNode %s" % short_name)
2156
+ nm_node = parent.createCanNmNode(short_name) # type: CanNmNode
2157
+ self.readIdentifiable(element, nm_node)
2158
+ self.readNmNode(element, nm_node)
2159
+
2160
+ nm_node.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
2161
+ .setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
2162
+ .setNmRangeConfig(self.getChildElementRxIdentifierRange(element, "NM-RANGE-CONFIG"))
2163
+
2164
+ def readNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2165
+ self.logger.debug("readNmConfigNmNodes %s" % parent.short_name)
2166
+ for child_element in self.findall(element, "NM-NODES/*"):
2167
+ tag_name = self.getTagName(child_element)
2168
+ if tag_name == "CAN-NM-NODE":
2169
+ self.readCanNmNode(child_element, parent)
2170
+ else:
2171
+ self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2172
+
2173
+ def getCanNmClusterCoupling(self, element: ET.Element) -> CanNmClusterCoupling:
2174
+ coupling = CanNmClusterCoupling()
2175
+
2176
+ for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
2177
+ coupling.addCoupledClusterRef(ref)
2178
+
2179
+ coupling.setNmBusloadReductionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ENABLED")) \
2180
+ .setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
2181
+
2182
+ return coupling
2183
+
2184
+ def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
2185
+ self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
2186
+ for child_element in self.findall(element, "NM-CLUSTER-COUPLINGS/*"):
2187
+ tag_name = self.getTagName(child_element)
2188
+ if tag_name == "CAN-NM-CLUSTER-COUPLING":
2189
+ nm_config.addNmClusterCouplings(self.getCanNmClusterCoupling(child_element))
2190
+ else:
2191
+ self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2192
+
2193
+ def readNmCluster(self, element: ET.Element, cluster: NmCluster):
2194
+ cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
2195
+ .setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
2196
+ .setNmChannelSleepMaster(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER"))
2197
+ self.readNmClusterNmNodes(element, cluster)
2198
+ cluster.setNmSynchronizingNetwork(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK"))
2199
+
2200
+ def readCanNmCluster(self, element: ET.Element, parent: NmConfig):
2201
+ short_name = self.getShortName(element)
2202
+ self.logger.debug("readCanNmCluster %s" % short_name)
2203
+ cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
2204
+ self.readIdentifiable(element, cluster)
2205
+ self.readNmCluster(element, cluster)
2206
+
2207
+ cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
2208
+ .setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
2209
+ .setNmCbvPosition(self.getChildElementOptionalNumericalValue(element, "NM-CBV-POSITION")) \
2210
+ .setNmChannelActive(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-ACTIVE")) \
2211
+ .setNmImmediateNmCycleTime(self.getChildElementOptionalFloatValue(element, "NM-IMMEDIATE-NM-CYCLE-TIME")) \
2212
+ .setNmImmediateNmTransmissions(self. getChildElementOptionalNumericalValue(element, "NM-IMMEDIATE-NM-TRANSMISSIONS")) \
2213
+ .setNmMessageTimeoutTime(self.getChildElementOptionalFloatValue(element, "NM-MESSAGE-TIMEOUT-TIME")) \
2214
+ .setNmMsgCycleTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-TIME")) \
2215
+ .setNmNetworkTimeout(self.getChildElementOptionalFloatValue(element, "NM-NETWORK-TIMEOUT")) \
2216
+ .setNmNidPosition(self. getChildElementOptionalNumericalValue(element, "NM-NID-POSITION")) \
2217
+ .setNmRemoteSleepIndicationTime(self.getChildElementOptionalFloatValue(element, "NM-REMOTE-SLEEP-INDICATION-TIME")) \
2218
+ .setNmRepeatMessageTime(self.getChildElementOptionalFloatValue(element, "NM-REPEAT-MESSAGE-TIME")) \
2219
+ .setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
2220
+ .setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
2221
+
2222
+ def readNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2223
+ for child_element in self.findall(element, "NM-CLUSTERS/*"):
2224
+ tag_name = self.getTagName(child_element)
2225
+ if tag_name == "CAN-NM-CLUSTER":
2226
+ self.readCanNmCluster(child_element, parent)
2227
+ else:
2228
+ self._raiseError("Unsupported Nm Cluster <%s>" % tag_name)
2229
+
2230
+ def readNmConfig(self, element: ET.Element, parent: ARPackage):
2231
+ short_name = self.getShortName(element)
2232
+ self.logger.debug("NmConfig %s" % short_name)
2233
+ config = parent.createNmConfig(short_name) # type: NmConfig
2234
+ self.readIdentifiable(element, config)
2235
+ self.readNmConfigNmClusters(element, config)
2236
+ self.readNmConfigNmClusterCouplings(element, config)
2237
+
2238
+ def readCanTpConfig(self, element: ET.Element, parent: ARPackage):
2239
+ short_name = self.getShortName(element)
2240
+ self.logger.debug("CanTpConfig %s" % short_name)
2241
+ pdu = parent.createCanTpConfig(short_name)
2242
+ self.readIdentifiable(element, pdu)
2243
+
2244
+ def readCanFrame(self, element: ET.Element, parent: ARPackage):
2245
+ short_name = self.getShortName(element)
2246
+ self.logger.debug("CanFrame %s" % short_name)
2247
+ frame = parent.createCanFrame(short_name)
2248
+ self.readFrame(element, frame)
2249
+
2250
+ def readEcuInstance(self, element: ET.Element, parent: ARPackage):
2251
+ short_name = self.getShortName(element)
2252
+ self.logger.debug("EcuInstance %s" % short_name)
2253
+ instance = parent.createEcuInstance(short_name)
2254
+ self.readIdentifiable(element, instance)
2255
+
2256
+ '''
2257
+ def getFrameMappings(self, element: ET.Element) -> List[FrameMapping]:
2258
+ mappings = []
2259
+ for child_element in self.findall(element, 'FRAME-MAPPINGS/'):
2260
+ mapping = FrameMapping()
2261
+ mapping.sourceFrameRef = self.getChildElementOptionalRefType(child_element, "SOURCE-FRAME-REF")
2262
+ mapping.targetFrameRef = self.getChildElementOptionalRefType(child_element, "TARGET-FRAME-REF")
2263
+ mappings.append(mapping)
2264
+ return mappings
2265
+ '''
2266
+
2267
+ def getISignalMappings(self, element: ET.Element) -> List[ISignalMapping]:
2268
+ mappings = []
2269
+ for child_element in self.findall(element, "SIGNAL-MAPPINGS/I-SIGNAL-MAPPING"):
2270
+ mapping = ISignalMapping()
2271
+ mapping.sourceSignalRef = self.getChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF")
2272
+ mapping.targetSignalRef = self.getChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF")
2273
+ mappings.append(mapping)
2274
+ return mappings
2275
+
2276
+ '''
2277
+ def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
2278
+ mappings = []
2279
+ for child_element in self.findall(element, tag_name):
2280
+ mapping = IPduMapping()
2281
+ mapping.sourceIPduRef = self.getChildElementOptionalRefType(child_element, "SOURCE-IPDU-REF")
2282
+ mapping.targetIPduRef = self.getChildElementOptionalRefType(child_element, "TARGET-IPDU-REF")
2283
+ mappings.append(mapping)
2284
+ return mappings
2285
+ '''
2286
+
2287
+ def readGateway(self, element: ET.Element, parent: ARPackage):
2288
+ short_name = self.getShortName(element)
2289
+ self.logger.debug("Gateway %s" % short_name)
2290
+ gateway = parent.createGateway(short_name)
2291
+ self.readIdentifiable(element, gateway)
2292
+ gateway.ecuRef = self.getChildElementOptionalRefType(element, "ECU-REF")
2293
+ for mapping in self.getISignalMappings(element):
2294
+ gateway.addSignalMapping(mapping)
2295
+
2296
+ def readISignal(self, element: ET.Element, parent: ARPackage):
2297
+ short_name = self.getShortName(element)
2298
+ self.logger.debug("ISignal %s" % short_name)
2299
+ signal = parent.createISignal(short_name)
2300
+ self.readIdentifiable(element, signal)
2301
+ signal.dataTypePolicy = self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")
2302
+ signal.initValue = self.getInitValue(element)
2303
+ signal.length = self.getChildElementOptionalNumericalValue(element, "LENGTH")
2304
+ signal.networkRepresentationProps = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")
2305
+ signal.systemSignalRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF")
2306
+
2307
+ def readEcucValueCollectionEcucValues(self, element: ET.Element, parent: EcucValueCollection):
2308
+ for child_element in self.findall(element, "ECUC-VALUES/ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL"):
2309
+ ref = self.getChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF")
2310
+ if (ref is not None):
2311
+ parent.addEcucValueRef(ref)
2312
+ self.logger.debug("EcucValue <%s> of EcucValueCollection <%s> has been added", ref.value, parent.short_name)
2313
+
2314
+ def readEcucValueCollection(self, element: ET.Element, parent: ARPackage):
2315
+ short_name = self.getShortName(element)
2316
+ self.logger.debug("EcucValueCollection %s" % short_name)
2317
+ collection = parent.createEcucValueCollection(short_name)
2318
+ self.readIdentifiable(element, collection)
2319
+ collection.setEcuExtractRef(self.getChildElementOptionalRefType(element, "ECU-EXTRACT-REF"))
2320
+ self.readEcucValueCollectionEcucValues(element, collection)
2321
+
2322
+ def readEcucParameterValue(self, element: ET.Element, param_value: EcucParameterValue):
2323
+ param_value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2324
+ for annotation in self.getAnnotations(element):
2325
+ param_value.addAnnotation(annotation)
2326
+
2327
+ def getEcucTextualParamValue(self, element: ET.Element) -> EcucTextualParamValue:
2328
+ param_value = EcucTextualParamValue()
2329
+ self.readEcucParameterValue(element, param_value)
2330
+ param_value.setValue(self.getChildElementOptionalLiteral(element, "VALUE"))
2331
+ return param_value
2332
+
2333
+ def getEcucNumericalParamValue(self, element: ET.Element) -> EcucNumericalParamValue:
2334
+ param_value = EcucNumericalParamValue()
2335
+ self.readEcucParameterValue(element, param_value)
2336
+ param_value.setValue(self.getChildElementOptionalNumericalValue(element, "VALUE"))
2337
+ return param_value
2338
+
2339
+ def readEcucContainerValueParameterValues(self, element: ET.Element, container_value: EcucContainerValue):
2340
+ for child_element in self.findall(element, "PARAMETER-VALUES/*"):
2341
+ tag_name = self.getTagName(child_element)
2342
+ if tag_name == "ECUC-TEXTUAL-PARAM-VALUE":
2343
+ container_value.addParameterValue(self.getEcucTextualParamValue(child_element))
2344
+ elif tag_name == "ECUC-NUMERICAL-PARAM-VALUE":
2345
+ container_value.addParameterValue(self.getEcucNumericalParamValue(child_element))
2346
+ else:
2347
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2348
+
2349
+ def readEcucAbstractReferenceValue(self, element: ET.Element, value: EcucAbstractReferenceValue):
2350
+ value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2351
+ for annotation in self.getAnnotations(element):
2352
+ value.addAnnotation(annotation)
2353
+
2354
+ def getEcucReferenceValue(self, element: ET.Element) -> EcucReferenceValue:
2355
+ value = EcucReferenceValue()
2356
+ self.readEcucAbstractReferenceValue(element, value)
2357
+ value.setValueRef(self.getChildElementOptionalRefType(element, "VALUE-REF"))
2358
+ return value
2359
+
2360
+ def getAnyInstanceRef(self, element: ET.Element, key) -> AnyInstanceRef:
2361
+ instance_ref = None
2362
+ child_element = self.find(element, key)
2363
+ if child_element is not None:
2364
+ instance_ref = AnyInstanceRef()
2365
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF")) \
2366
+ .setContextElementRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF")) \
2367
+ .setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
2368
+ return instance_ref
2369
+
2370
+ def getEcucInstanceReferenceValue(self, element: ET.Element) -> EcucInstanceReferenceValue:
2371
+ value = EcucInstanceReferenceValue()
2372
+ self.readEcucAbstractReferenceValue(element, value)
2373
+ value.setValueIRef(self.getAnyInstanceRef(element, "VALUE-IREF"))
2374
+ return value
2375
+
2376
+ def readEcucContainerValueReferenceValues(self, element: ET.Element, container_value: EcucContainerValue):
2377
+ for child_element in self.findall(element, "REFERENCE-VALUES/*"):
2378
+ tag_name = self.getTagName(child_element)
2379
+ if tag_name == "ECUC-REFERENCE-VALUE":
2380
+ container_value.addReferenceValue(self.getEcucReferenceValue(child_element))
2381
+ elif tag_name == "ECUC-INSTANCE-REFERENCE-VALUE":
2382
+ container_value.addReferenceValue(self.getEcucInstanceReferenceValue(child_element))
2383
+ else:
2384
+ raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2385
+
2386
+ def readEcucContainerValue(self, element: ET.Element, container_value: EcucContainerValue):
2387
+ self.readIdentifiable(element, container_value)
2388
+ container_value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2389
+ self.readEcucContainerValueParameterValues(element, container_value)
2390
+ self.readEcucContainerValueReferenceValues(element, container_value)
2391
+ self.readEcucContainerValueSubContainers(element, container_value)
2392
+
2393
+ def readEcucContainerValueEcucContainerValue(self, element: ET.Element, parent: EcucContainerValue):
2394
+ short_name = self.getShortName(element)
2395
+ self.logger.debug("EcucContainerValue %s" % short_name)
2396
+ container_value = parent.createSubContainer(short_name)
2397
+ self.readEcucContainerValue(element, container_value)
2398
+
2399
+ def readEcucContainerValueSubContainers(self, element: ET.Element, parent: EcucContainerValue):
2400
+ for child_element in self.findall(element, "SUB-CONTAINERS/*"):
2401
+ tag_name = self.getTagName(child_element)
2402
+ if tag_name == "ECUC-CONTAINER-VALUE":
2403
+ self.readEcucContainerValueEcucContainerValue(child_element, parent)
2404
+ else:
2405
+ raise NotImplementedError("Unsupported Sub Container %s" % tag_name)
2406
+
2407
+ def readEcucModuleConfigurationValuesEcucContainerValue(self, element: ET.Element, parent: EcucModuleConfigurationValues):
2408
+ short_name = self.getShortName(element)
2409
+ self.logger.debug("EcucContainerValue %s" % short_name)
2410
+ container_value = parent.createContainer(short_name)
2411
+ self.readEcucContainerValue(element, container_value)
2412
+
2413
+ def readEcucModuleConfigurationValuesContainers(self, element: ET.Element, values: EcucModuleConfigurationValues):
2414
+ for child_element in self.findall(element, "CONTAINERS/*"):
2415
+ tag_name = self.getTagName(child_element)
2416
+ if tag_name == "ECUC-CONTAINER-VALUE":
2417
+ self.readEcucModuleConfigurationValuesEcucContainerValue(child_element, values)
2418
+ else:
2419
+ raise NotImplementedError("Unsupported Container %s" % tag_name)
2420
+
2421
+ def readEcucModuleConfigurationValues(self, element: ET.Element, parent: ARPackage):
2422
+ short_name = self.getShortName(element)
2423
+ self.logger.debug("EcucModuleConfigurationValues %s" % short_name)
2424
+ values = parent.createEcucModuleConfigurationValues(short_name)
2425
+ self.readIdentifiable(element, values)
2426
+ values.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
2427
+ values.setImplementationConfigVariant(self.getChildElementOptionalLiteral(element, "IMPLEMENTATION-CONFIG-VARIANT"))
2428
+ values.setModuleDescriptionRef(self.getChildElementOptionalRefType(element, "MODULE-DESCRIPTION-REF"))
2429
+ self.readEcucModuleConfigurationValuesContainers(element, values)
2430
+
2431
+ def readPhysicalDimensions(self, element: ET.Element, parent: ARPackage):
2432
+ short_name = self.getShortName(element)
2433
+ self.logger.debug("readPhysicalDimensions %s" % short_name)
2434
+ dimension = parent.createPhysicalDimension(short_name)
2435
+ self.readIdentifiable(element, dimension)
2436
+ dimension.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
2437
+ .setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
2438
+
2439
+ '''
2440
+ def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
2441
+ mappings = []
2442
+ for child_element in self.findall(element, tag_name):
2443
+ mapping = IPduMapping()
2444
+ mapping.sourceIPduRef = self.getChildElementOptionalRefType(child_element, "SOURCE-IPDU-REF")
2445
+ mapping.targetIPduRef = self.getChildElementOptionalRefType(child_element, "TARGET-IPDU-REF")
2446
+ mappings.append(mapping)
2447
+ return mappings
2448
+ '''
2449
+
2450
+ def readISignalGroup(self, element: ET.Element, parent: ARPackage):
2451
+ short_name = self.getShortName(element)
2452
+ self.logger.debug("ISignalGroup %s" % short_name)
2453
+ group = parent.createISignalGroup(short_name)
2454
+ self.readIdentifiable(element, group)
2455
+ for ref_type in self.getChildElementRefTypeList(element, "I-SIGNAL-REFS/I-SIGNAL-REF"):
2456
+ group.addISignalRef(ref_type)
2457
+ group.systemSignalGroupRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-GROUP-REF")
2458
+
2459
+ def readSystemSignal(self, element: ET.Element, parent: ARPackage):
2460
+ short_name = self.getShortName(element)
2461
+ self.logger.debug("SystemSignal %s" % short_name)
2462
+ signal = parent.createSystemSignal(short_name)
2463
+ self.readIdentifiable(element, signal)
2464
+ signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH"))
2465
+
2466
+ def readSystemSignalGroup(self, element: ET.Element, parent: ARPackage):
2467
+ short_name = self.getShortName(element)
2468
+ self.logger.debug("SystemSignalGroup %s" % short_name)
2469
+ group = parent.createSystemSignalGroup(short_name)
2470
+ self.readIdentifiable(element, group)
2471
+ for ref_type in self.getChildElementRefTypeList(element, "SYSTEM-SIGNAL-REFS/SYSTEM-SIGNAL-REF"):
2472
+ group.addSystemSignalRefs(ref_type)
2473
+
2474
+ def readISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2475
+ for child_element in self.findall(element, "I-SIGNAL-TO-PDU-MAPPINGS/I-SIGNAL-TO-I-PDU-MAPPING"):
2476
+ short_name = self.getShortName(child_element)
2477
+ mapping = parent.createISignalToPduMappings(short_name)
2478
+ self.readIdentifiable(child_element, mapping)
2479
+ mapping.setISignalRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-REF")) \
2480
+ .setISignalGroupRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF")) \
2481
+ .setPackingByteOrder(self.getChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER")) \
2482
+ .setStartPosition(self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")) \
2483
+ .setTransferProperty(self.getChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY")) \
2484
+ .setUpdateIndicationBitPosition(self.getChildElementOptionalNumericalValue(child_element, "UPDATE-INDICATION-BIT-POSITION"))
2485
+
2486
+ def readISignalIPdu(self, element: ET.Element, parent: ARPackage):
2487
+ short_name = self.getShortName(element)
2488
+ self.logger.debug("ISignalIPdu %s" % short_name)
2489
+ i_pdu = parent.createISignalIPdu(short_name)
2490
+ self.readIdentifiable(element, i_pdu)
2491
+ i_pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2492
+ self.readISignalToPduMappings(element, i_pdu)
2493
+ i_pdu.setUnusedBitPattern(self.getChildElementOptionalLiteral(element, "UNUSED-BIT-PATTERN"))
2494
+
2495
+ def getISignalIPduRefs(self, element: ET.Element) -> List[RefType]:
2496
+ ref_types = []
2497
+ for child_element in self.findall(element, "I-SIGNAL-I-PDUS/I-SIGNAL-I-PDU-REF-CONDITIONAL"):
2498
+ ref_types.append(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-I-PDU-REF"))
2499
+ return ref_types
2500
+
2501
+ def readISignalIPduGroup(self, element: ET.Element, parent: ARPackage):
2502
+ short_name = self.getShortName(element)
2503
+ self.logger.debug("ISignalIPduGroup %s" % short_name)
2504
+ group = parent.createISignalIPduGroup(short_name)
2505
+ self.readIdentifiable(element, group)
2506
+ group.communicationDirection = self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION")
2507
+ group.communicationMode = self.getChildElementOptionalLiteral(element, "COMMUNICATION-MODE")
2508
+ for ref_type in self.getChildElementRefTypeList(element, "CONTAINED-I-SIGNAL-I-PDU-GROUP-REFS/CONTAINED-I-SIGNAL-I-PDU-GROUP-REF"):
2509
+ group.addContainedISignalIPduGroupRef(ref_type)
2510
+ for ref_type in self.getISignalIPduRefs(element):
2511
+ group.addISignalIPduRef(ref_type)
2512
+
2513
+ def getSenderReceiverToSignalMapping(self, element: ET.Element) -> SenderReceiverToSignalMapping:
2514
+ mapping = SenderReceiverToSignalMapping()
2515
+ mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2516
+ mapping.setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
2517
+ return mapping
2518
+
2519
+ def getSenderReceiverToSignalGroupMapping(self, element: ET.Element) -> SenderReceiverToSignalGroupMapping:
2520
+ mapping = SenderReceiverToSignalGroupMapping()
2521
+ mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2522
+ mapping.setSignalGroupRef(self.getChildElementOptionalRefType(element, "SIGNAL-GROUP-REF"))
2523
+ return mapping
2524
+
2525
+ def readSystemMappingDataMappings(self, element: ET.Element, mapping: SystemMapping):
2526
+ for child_element in self.findall(element, "DATA-MAPPINGS/*"):
2527
+ tag_name = self.getTagName(child_element)
2528
+ if tag_name == "SENDER-RECEIVER-TO-SIGNAL-MAPPING":
2529
+ mapping.addDataMapping(self.getSenderReceiverToSignalMapping(child_element))
2530
+ elif tag_name == "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING":
2531
+ mapping.addDataMapping(self.getSenderReceiverToSignalGroupMapping(child_element))
2532
+ else:
2533
+ raise NotImplementedError("Unsupported Data Mapping %s" % tag_name)
2534
+
2535
+ def readSystemMapping(self, element: ET.Element, parent: System):
2536
+ short_name = self.getShortName(element)
2537
+ self.logger.debug("SystemMapping %s" % short_name)
2538
+ mapping = parent.createSystemMapping(short_name)
2539
+ self.readIdentifiable(element, mapping)
2540
+ self.readSystemMappingDataMappings(element, mapping)
2541
+
2542
+ def readSystemMappings(self, element: ET.Element, system: System):
2543
+ for child_element in self.findall(element, "MAPPINGS/*"):
2544
+ tag_name = self.getTagName(child_element)
2545
+ if tag_name == "SYSTEM-MAPPING":
2546
+ self.readSystemMapping(child_element, system)
2547
+ else:
2548
+ raise NotImplementedError("Unsupported Mapping %s" % tag_name)
2549
+
2550
+ def readSystem(self, element: ET.Element, parent: ARPackage):
2551
+ short_name = self.getShortName(element)
2552
+ self.logger.debug("System %s" % short_name)
2553
+ system = parent.createSystem(short_name)
2554
+ self.readIdentifiable(element, system)
2555
+
2556
+ system.setEcuExtractVersion(self.getChildElementOptionalLiteral(element, "ECU-EXTRACT-VERSION"))
2557
+ for child_element in self.findall(element, "FIBEX-ELEMENTS/FIBEX-ELEMENT-REF-CONDITIONAL"):
2558
+ system.addFibexElementRef(self.getChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF"))
2559
+
2560
+ self.readSystemMappings(element, system)
2561
+
1712
2562
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
1713
2563
  for child_element in self.findall(element, "./ELEMENTS/*"):
1714
2564
  tag_name = self.getTagName(child_element.tag)
@@ -1770,34 +2620,58 @@ class ARXMLParser(AbstractARXMLParser):
1770
2620
  self.readModeDeclarationGroup(child_element, parent)
1771
2621
  elif tag_name == "MODE-SWITCH-INTERFACE":
1772
2622
  self.readModeSwitchInterface(child_element, parent)
1773
- elif tag_name == "SYSTEM":
2623
+ elif tag_name == "SWC-TIMING":
2624
+ self.readSwcTiming(child_element, parent)
2625
+ elif tag_name == "LIN-CLUSTER":
2626
+ self.readLinCluster(child_element, parent)
2627
+ elif tag_name == "LIN-UNCONDITIONAL-FRAME":
2628
+ self.readLinUnconditionalFrame(child_element, parent)
2629
+ elif tag_name == "NM-PDU":
2630
+ self.readNmPdu(child_element, parent)
2631
+ elif tag_name == "N-PDU":
2632
+ self.readNPdu(child_element, parent)
2633
+ elif tag_name == "DCM-I-PDU":
2634
+ self.readDcmIPdu(child_element, parent)
2635
+ elif tag_name == "SECURED-I-PDU":
2636
+ self.readSecuredIPdu(child_element, parent)
2637
+ elif tag_name == "NM-CONFIG":
2638
+ self.readNmConfig(child_element, parent)
2639
+ elif tag_name == "CAN-TP-CONFIG":
2640
+ self.readCanTpConfig(child_element, parent)
2641
+ elif tag_name == "LIN-TP-CONFIG":
1774
2642
  pass
2643
+ elif tag_name == "SYSTEM":
2644
+ self.readSystem(child_element, parent)
1775
2645
  elif tag_name == "ECU-INSTANCE":
1776
- pass
2646
+ self.readEcuInstance(child_element, parent)
1777
2647
  elif tag_name == "GATEWAY":
1778
- pass
2648
+ self.readGateway(child_element, parent)
1779
2649
  elif tag_name == "I-SIGNAL-I-PDU-GROUP":
1780
- pass
2650
+ self.readISignalIPduGroup(child_element, parent)
1781
2651
  elif tag_name == "CAN-CLUSTER":
1782
- pass
2652
+ self.readCanCluster(child_element, parent)
1783
2653
  elif tag_name == "CAN-FRAME":
1784
- pass
2654
+ self.readCanFrame(child_element, parent)
1785
2655
  elif tag_name == "I-SIGNAL":
1786
- pass
2656
+ self.readISignal(child_element, parent)
1787
2657
  elif tag_name == "I-SIGNAL-GROUP":
1788
- pass
2658
+ self.readISignalGroup(child_element, parent)
1789
2659
  elif tag_name == "I-SIGNAL-I-PDU":
1790
- pass
2660
+ self.readISignalIPdu(child_element, parent)
1791
2661
  elif tag_name == "SYSTEM-SIGNAL":
1792
- pass
2662
+ self.readSystemSignal(child_element, parent)
1793
2663
  elif tag_name == "SYSTEM-SIGNAL-GROUP":
1794
- pass
2664
+ self.readSystemSignalGroup(child_element, parent)
2665
+ elif tag_name == "ECUC-VALUE-COLLECTION":
2666
+ self.readEcucValueCollection(child_element, parent)
2667
+ elif tag_name == "ECUC-MODULE-CONFIGURATION-VALUES":
2668
+ self.readEcucModuleConfigurationValues(child_element, parent)
2669
+ elif tag_name == "PHYSICAL-DIMENSION":
2670
+ self.readPhysicalDimensions(child_element, parent)
1795
2671
  else:
1796
2672
  self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
1797
2673
  #pass
1798
2674
 
1799
-
1800
-
1801
2675
  def readARPackages(self, element: ET.Element, parent: ARPackage):
1802
2676
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
1803
2677
  short_name = self.getShortName(child_element)
@@ -1811,7 +2685,7 @@ class ARXMLParser(AbstractARXMLParser):
1811
2685
 
1812
2686
 
1813
2687
  def load(self, filename, document: AUTOSAR):
1814
- self.logger.info("Load %s ..." % filename)
2688
+ self.logger.info("Load %s ..." % os.path.realpath(filename))
1815
2689
 
1816
2690
  tree = ET.parse(filename)
1817
2691
  root = tree.getroot()