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.
- armodel/cli/arxml_dump_cli.py +14 -14
- armodel/cli/memory_section_cli.py +76 -0
- armodel/cli/system_signal_cli.py +74 -0
- armodel/lib/__init__.py +2 -1
- armodel/lib/system_signal.py +37 -0
- armodel/models/__init__.py +6 -3
- armodel/models/annotation.py +27 -3
- armodel/models/ar_object.py +18 -6
- armodel/models/ar_package.py +248 -30
- armodel/models/ar_ref.py +115 -45
- armodel/models/bsw_module_template.py +66 -28
- armodel/models/common_structure.py +150 -150
- armodel/models/communication.py +1 -1
- armodel/models/data_prototype.py +41 -6
- armodel/models/datatype.py +11 -5
- armodel/models/fibex/__init__.py +0 -0
- armodel/models/fibex/can_communication.py +122 -0
- armodel/models/fibex/fibex_4_can/__init__.py +0 -0
- armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
- armodel/models/fibex/fibex_4_multiplatform.py +138 -0
- armodel/models/fibex/fibex_core/__init__.py +0 -0
- armodel/models/fibex/fibex_core/core_communication.py +627 -0
- armodel/models/fibex/fibex_core/core_topology.py +180 -0
- armodel/models/fibex/fibex_core.py +341 -0
- armodel/models/fibex/lin_communication.py +38 -0
- armodel/models/fibex/lin_topology.py +7 -0
- armodel/models/general_structure.py +119 -10
- armodel/models/implementation.py +4 -5
- armodel/models/internal_behavior.py +63 -0
- armodel/models/m2/__init__.py +0 -0
- armodel/models/m2/autosar_templates/__init__.py +0 -0
- armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
- armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
- armodel/models/m2/autosar_templates/ecuc_description_template.py +268 -0
- armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
- armodel/models/m2/autosar_templates/sw_component_template/communication.py +316 -0
- armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +0 -0
- armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +149 -0
- armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +54 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +39 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +26 -0
- armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
- armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
- armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
- armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
- armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
- armodel/models/m2/msr/__init__.py +0 -0
- armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
- armodel/models/m2/msr/asam_hdo/units.py +105 -0
- armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
- armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
- armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
- armodel/models/m2/msr/documentation/__init__.py +0 -0
- armodel/models/m2/msr/documentation/block_elements.py +18 -0
- armodel/models/mode_declaration.py +8 -0
- armodel/models/multilanguage_data.py +15 -0
- armodel/models/per_instance_memory.py +34 -6
- armodel/models/port_prototype.py +15 -159
- armodel/models/rpt_scenario.py +20 -0
- armodel/models/sw_component.py +48 -187
- armodel/models/system_template/__init__.py +0 -0
- armodel/models/system_template/network_management.py +7 -0
- armodel/models/system_template/transport_protocols.py +7 -0
- armodel/models/timing.py +91 -0
- armodel/parser/abstract_arxml_parser.py +11 -2
- armodel/parser/arxml_parser.py +1101 -227
- armodel/tests/test_armodel/models/test_ar_package.py +1 -1
- armodel/tests/test_armodel/models/test_ar_ref.py +3 -3
- armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
- armodel/tests/test_armodel/models/test_common_structure.py +3 -3
- armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
- armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
- armodel/tests/test_armodel/models/test_datatype.py +8 -8
- armodel/tests/test_armodel/models/test_port_interface.py +6 -6
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +16 -8
- armodel/tests/test_armodel/parser/test_sw_components.py +6 -6
- armodel/writer/arxml_writer.py +1046 -181
- {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/METADATA +48 -1
- armodel-1.6.0.dist-info/RECORD +127 -0
- {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/entry_points.txt +3 -1
- armodel-1.4.3.dist-info/RECORD +0 -78
- {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/LICENSE +0 -0
- {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/WHEEL +0 -0
- {armodel-1.4.3.dist-info → armodel-1.6.0.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -1,14 +1,32 @@
|
|
|
1
|
+
from typing import List
|
|
1
2
|
import xml.etree.ElementTree as ET
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
from .
|
|
6
|
-
|
|
7
|
-
from ..models.
|
|
8
|
-
from ..models.
|
|
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,
|
|
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,
|
|
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
|
|
80
|
+
for child_element in self.findall(element, "./SD"):
|
|
62
81
|
sd = Sd()
|
|
63
|
-
|
|
64
|
-
|
|
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
|
|
69
|
-
for child_element in
|
|
70
|
-
|
|
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 =
|
|
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.
|
|
82
|
-
identifiable.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.
|
|
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
|
-
|
|
91
|
-
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
131
|
-
|
|
132
|
-
if
|
|
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
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
207
|
-
|
|
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.
|
|
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.
|
|
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,
|
|
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
|
|
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.
|
|
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
|
|
645
|
+
parent.setOperationIRef(operation_iref)
|
|
575
646
|
|
|
576
647
|
def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
|
|
577
|
-
child_element =
|
|
648
|
+
child_element = self.find(element, "DATA-IREF")
|
|
578
649
|
if (child_element is not None):
|
|
579
650
|
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
580
|
-
data_iref.
|
|
581
|
-
|
|
582
|
-
parent.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.
|
|
588
|
-
|
|
589
|
-
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
619
|
-
for child_element in
|
|
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
|
|
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.
|
|
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.
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
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
|
-
|
|
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.
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
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
|
-
|
|
817
|
+
self.readDataPrototype(element, prototype)
|
|
818
|
+
prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
|
|
693
819
|
|
|
694
|
-
def readParameterDataPrototype(self, element: ET.Element,
|
|
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.
|
|
823
|
+
prototype.setInitValue(self.getInitValue(element))
|
|
700
824
|
|
|
701
|
-
def
|
|
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.
|
|
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 =
|
|
773
|
-
if
|
|
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.
|
|
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.
|
|
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
|
|
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
|
-
|
|
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.
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
sw_data_def_props.
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
880
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
934
|
-
com_spec.
|
|
935
|
-
com_spec.
|
|
936
|
-
com_spec.
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
1004
|
-
com_spec.
|
|
1005
|
-
com_spec.
|
|
1006
|
-
com_spec.
|
|
1007
|
-
com_spec.
|
|
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
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
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
|
-
|
|
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.
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
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.
|
|
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
|
|
1061
|
-
|
|
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
|
-
|
|
1273
|
+
self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
1073
1274
|
|
|
1074
1275
|
def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
|
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 =
|
|
1486
|
+
prototype = sr_interface.createDataElement(short_name)
|
|
1287
1487
|
self.readIdentifiable(child_element, prototype)
|
|
1288
|
-
prototype.
|
|
1488
|
+
prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
1289
1489
|
self.readAutosarDataPrototype(child_element, prototype)
|
|
1290
|
-
prototype.
|
|
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.
|
|
1297
|
-
self.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
1487
|
-
spec.
|
|
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.
|
|
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 =
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
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.
|
|
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 == "
|
|
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
|
-
|
|
2646
|
+
self.readEcuInstance(child_element, parent)
|
|
1777
2647
|
elif tag_name == "GATEWAY":
|
|
1778
|
-
|
|
2648
|
+
self.readGateway(child_element, parent)
|
|
1779
2649
|
elif tag_name == "I-SIGNAL-I-PDU-GROUP":
|
|
1780
|
-
|
|
2650
|
+
self.readISignalIPduGroup(child_element, parent)
|
|
1781
2651
|
elif tag_name == "CAN-CLUSTER":
|
|
1782
|
-
|
|
2652
|
+
self.readCanCluster(child_element, parent)
|
|
1783
2653
|
elif tag_name == "CAN-FRAME":
|
|
1784
|
-
|
|
2654
|
+
self.readCanFrame(child_element, parent)
|
|
1785
2655
|
elif tag_name == "I-SIGNAL":
|
|
1786
|
-
|
|
2656
|
+
self.readISignal(child_element, parent)
|
|
1787
2657
|
elif tag_name == "I-SIGNAL-GROUP":
|
|
1788
|
-
|
|
2658
|
+
self.readISignalGroup(child_element, parent)
|
|
1789
2659
|
elif tag_name == "I-SIGNAL-I-PDU":
|
|
1790
|
-
|
|
2660
|
+
self.readISignalIPdu(child_element, parent)
|
|
1791
2661
|
elif tag_name == "SYSTEM-SIGNAL":
|
|
1792
|
-
|
|
2662
|
+
self.readSystemSignal(child_element, parent)
|
|
1793
2663
|
elif tag_name == "SYSTEM-SIGNAL-GROUP":
|
|
1794
|
-
|
|
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()
|