armodel 1.4.0__py3-none-any.whl → 1.4.3__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/__init__.py +2 -1
- armodel/cli/arxml_dump_cli.py +8 -6
- armodel/cli/arxml_format_cli.py +72 -0
- armodel/cli/connector_update_cli.py +11 -4
- armodel/data_models/__init__.py +0 -0
- armodel/data_models/sw_connector.py +22 -0
- armodel/lib/data_analyzer.py +1 -1
- armodel/models/__init__.py +3 -2
- armodel/models/annotation.py +20 -0
- armodel/models/ar_object.py +163 -18
- armodel/models/ar_package.py +110 -14
- armodel/models/ar_ref.py +62 -6
- armodel/models/bsw_module_template.py +97 -26
- armodel/models/calibration.py +107 -4
- armodel/models/common_structure.py +112 -37
- armodel/models/communication.py +10 -1
- armodel/models/data_def_properties.py +16 -0
- armodel/models/data_dictionary.py +46 -9
- armodel/models/data_prototype.py +24 -5
- armodel/models/datatype.py +69 -20
- armodel/models/end_to_end_protection.py +67 -0
- armodel/models/general_structure.py +25 -15
- armodel/models/global_constraints.py +4 -4
- armodel/models/implementation.py +80 -32
- armodel/models/m2_msr.py +6 -4
- armodel/models/multilanguage_data.py +42 -0
- armodel/models/per_instance_memory.py +14 -0
- armodel/models/port_interface.py +27 -4
- armodel/models/port_prototype.py +37 -17
- armodel/models/record_layout.py +118 -0
- armodel/models/service_mapping.py +11 -0
- armodel/models/service_needs.py +48 -0
- armodel/models/sw_component.py +224 -39
- armodel/parser/abstract_arxml_parser.py +248 -0
- armodel/parser/arxml_parser.py +1280 -810
- armodel/parser/connector_xlsx_parser.py +190 -0
- armodel/parser/excel_parser.py +18 -0
- armodel/tests/test_armodel/models/test_ar_object.py +152 -0
- armodel/tests/test_armodel/models/test_ar_package.py +1 -1
- armodel/tests/test_armodel/models/test_common_structure.py +2 -2
- armodel/tests/test_armodel/models/test_data_dictionary.py +7 -7
- armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
- armodel/tests/test_armodel/models/test_datatype.py +4 -4
- armodel/tests/test_armodel/models/test_general_structure.py +1 -1
- armodel/tests/test_armodel/models/test_implementation.py +26 -0
- armodel/tests/test_armodel/models/test_m2_msr.py +4 -4
- armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +70 -46
- armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
- armodel/writer/abstract_arxml_writer.py +123 -0
- armodel/writer/arxml_writer.py +1464 -350
- {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/METADATA +90 -3
- armodel-1.4.3.dist-info/RECORD +78 -0
- {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/WHEEL +1 -1
- {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/entry_points.txt +2 -0
- armodel-1.4.0.dist-info/RECORD +0 -60
- {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/LICENSE +0 -0
- {armodel-1.4.0.dist-info → armodel-1.4.3.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -1,147 +1,61 @@
|
|
|
1
|
-
|
|
1
|
+
import xml.etree.ElementTree as ET
|
|
2
|
+
|
|
3
|
+
from armodel.models.bsw_module_template import BswModeSenderPolicy
|
|
4
|
+
|
|
5
|
+
from .abstract_arxml_parser import AbstractARXMLParser
|
|
6
|
+
|
|
7
|
+
from ..models.port_interface import ModeSwitchInterface, PortInterface
|
|
8
|
+
from ..models.common_structure import MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
|
|
9
|
+
from ..models.implementation import BswImplementation, EngineeringObject
|
|
10
|
+
from ..models.general_structure import MultilanguageReferrable
|
|
11
|
+
from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
|
|
12
|
+
from ..models.data_def_properties import ValueList
|
|
13
|
+
from ..models.record_layout import SwRecordLayoutGroup, SwRecordLayoutGroupContent, SwRecordLayoutV
|
|
14
|
+
from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, BaseTypeDirectDefinition
|
|
15
|
+
from ..models.calibration import SwAxisGrouped, SwAxisIndividual, SwCalprmAxis, SwCalprmAxisSet
|
|
16
|
+
from ..models.communication import CompositeNetworkRepresentation
|
|
17
|
+
from ..models.end_to_end_protection import EndToEndDescription, EndToEndProtection, EndToEndProtectionSet, EndToEndProtectionVariablePrototype
|
|
18
|
+
from ..models.service_mapping import RoleBasedPortAssignment
|
|
19
|
+
from ..models.ar_package import AUTOSAR, ARPackage
|
|
20
|
+
from ..models.ar_object import ARLiteral
|
|
21
|
+
from ..models.service_needs import RoleBasedDataAssignment
|
|
22
|
+
from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
|
|
23
|
+
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
|
|
26
|
+
from ..models.annotation import Annotation, GeneralAnnotation
|
|
2
27
|
from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
|
|
3
28
|
|
|
4
|
-
from ..models import
|
|
5
|
-
from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
|
|
29
|
+
from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
|
|
6
30
|
from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
|
|
7
|
-
from ..models import
|
|
31
|
+
from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
|
|
8
32
|
from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
|
|
9
|
-
from ..models import
|
|
10
|
-
from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
|
|
11
|
-
from ..models import SenderComSpec, NonqueuedSenderComSpec
|
|
33
|
+
from ..models import RPortPrototype, PPortPrototype
|
|
34
|
+
from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
|
|
35
|
+
from ..models import SenderComSpec, NonqueuedSenderComSpec, ServerComSpec
|
|
12
36
|
from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
|
|
13
|
-
from ..models import
|
|
37
|
+
from ..models import Identifiable, AdminData, Sdg, Sd
|
|
14
38
|
from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
|
|
15
39
|
from ..models import DelegationSwConnector
|
|
16
|
-
from ..models import CompuMethod, CompuScale,
|
|
40
|
+
from ..models import CompuMethod, CompuScale, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
|
|
17
41
|
from ..models import InternalBehavior, ExecutableEntity
|
|
18
42
|
from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
|
|
19
43
|
from ..models import TransmissionAcknowledgementRequest
|
|
20
|
-
from ..models import
|
|
44
|
+
from ..models import BswModuleDescription, BswInternalBehavior, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
|
|
21
45
|
from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
|
|
22
|
-
from ..models import
|
|
46
|
+
from ..models import RecordValueSpecification
|
|
23
47
|
from ..models import ApplicationRecordDataType
|
|
24
48
|
from ..models import SwValueCont, SwValues
|
|
25
|
-
from ..models import ARBoolean, ARLiteral
|
|
26
|
-
from ..models import BaseType
|
|
27
49
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
import re
|
|
32
|
-
import logging
|
|
33
|
-
|
|
34
|
-
class ARXMLParser:
|
|
35
|
-
def __init__(self, options = None):
|
|
36
|
-
self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
|
|
37
|
-
self.options = {}
|
|
38
|
-
self.options['warning'] = False
|
|
39
|
-
self.logger = logging.getLogger()
|
|
50
|
+
class ARXMLParser(AbstractARXMLParser):
|
|
51
|
+
def __init__(self, options=None) -> None:
|
|
52
|
+
super().__init__(options)
|
|
40
53
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
self.options['warning'] = options['warning']
|
|
47
|
-
|
|
48
|
-
def _raiseError(self, error_msg):
|
|
49
|
-
if (self.options['warning'] == True):
|
|
50
|
-
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
51
|
-
else:
|
|
52
|
-
raise ValueError(error_msg)
|
|
53
|
-
|
|
54
|
-
def getPureTagName(self, tag):
|
|
55
|
-
return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
|
|
56
|
-
|
|
57
|
-
def readChildElement(self, short_name: str, element: ET.Element, key: str) -> str:
|
|
58
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
59
|
-
if (child_element != None):
|
|
60
|
-
return child_element.text
|
|
61
|
-
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
62
|
-
|
|
63
|
-
def readChildOptionalElement(self, element: ET.Element, key: str) -> str:
|
|
64
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
65
|
-
if (child_element != None):
|
|
66
|
-
return child_element.text
|
|
67
|
-
return None
|
|
68
|
-
|
|
69
|
-
def readChildElementLiteral(self, short_name: str, element: ET.Element, key: str) -> ARLiteral:
|
|
70
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
71
|
-
if (child_element != None):
|
|
72
|
-
literal = ARLiteral()
|
|
73
|
-
self.readElementAttributes(child_element, literal)
|
|
74
|
-
literal.value = child_element.text
|
|
75
|
-
return literal
|
|
76
|
-
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
77
|
-
|
|
78
|
-
def readChildOptionalElementLiteral(self, element: ET.Element, key: str) -> ARLiteral:
|
|
79
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
80
|
-
if (child_element != None):
|
|
81
|
-
self.logger.debug("readChildOptionalElementLiteral : %s" % child_element.text)
|
|
82
|
-
literal = ARLiteral()
|
|
83
|
-
self.readElementAttributes(child_element, literal)
|
|
84
|
-
literal.value = child_element.text
|
|
85
|
-
return literal
|
|
86
|
-
return None
|
|
87
|
-
|
|
88
|
-
def _convertStringToBooleanValue(self, value: str) -> bool:
|
|
89
|
-
if (value == "true"):
|
|
90
|
-
return True
|
|
91
|
-
return False
|
|
92
|
-
|
|
93
|
-
def readChildElementFloatValue(self, short_name: str, element: ET.Element, key: str) -> float:
|
|
94
|
-
value = self.readChildElement(short_name, element, key)
|
|
95
|
-
if (value == None):
|
|
96
|
-
return None
|
|
97
|
-
return float(value)
|
|
98
|
-
|
|
99
|
-
def readChildElementBooleanValue(self, short_name: str, element: ET.Element, key: str) -> ARBoolean:
|
|
100
|
-
literal = self.readChildElementLiteral(short_name, element, key)
|
|
101
|
-
bool_value = ARBoolean()
|
|
102
|
-
bool_value.timestamp = literal.timestamp
|
|
103
|
-
bool_value.value = self._convertStringToBooleanValue(literal.value)
|
|
104
|
-
return bool_value
|
|
105
|
-
|
|
106
|
-
def readChildOptionalElementBooleanValue(self, element: ET.Element, key: str) -> ARBoolean:
|
|
107
|
-
literal = self.readChildOptionalElementLiteral(element, key)
|
|
108
|
-
if (literal == None):
|
|
109
|
-
return None
|
|
110
|
-
bool_value = ARBoolean()
|
|
111
|
-
bool_value.timestamp = literal.timestamp
|
|
112
|
-
bool_value.value = self._convertStringToBooleanValue(literal.value)
|
|
113
|
-
return bool_value
|
|
114
|
-
|
|
115
|
-
def _convertStringToNumberValue(self, value) -> int:
|
|
116
|
-
m = re.match(r"0x([0-9a-f]+)", value, re.I)
|
|
117
|
-
if (m):
|
|
118
|
-
return int(m.group(1), 16)
|
|
119
|
-
return int(value)
|
|
120
|
-
|
|
121
|
-
def readChildElementNumberValue(self, short_name: str, element: ET.Element, key: str) -> int:
|
|
122
|
-
value = self.readChildElement(short_name, element, key)
|
|
123
|
-
return self._convertStringToNumberValue(value)
|
|
124
|
-
|
|
125
|
-
def readChildOptionalElementNumberValue(self, element: ET.Element, key: str) -> int:
|
|
126
|
-
value = self.readChildOptionalElement(element, key)
|
|
127
|
-
if (value == None):
|
|
128
|
-
return None
|
|
129
|
-
return self._convertStringToNumberValue(value)
|
|
130
|
-
|
|
131
|
-
def readChildLimitElement(self, element: ET.Element, key: str) -> Limit:
|
|
132
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
133
|
-
if (child_element != None):
|
|
134
|
-
limit = Limit()
|
|
135
|
-
if ('INTERVAL-TYPE' in child_element.attrib):
|
|
136
|
-
limit.interval_type = child_element.attrib['INTERVAL-TYPE']
|
|
137
|
-
else:
|
|
138
|
-
limit.interval_type = "CLOSED"
|
|
139
|
-
limit.value = child_element.text
|
|
140
|
-
return limit
|
|
141
|
-
return None
|
|
142
|
-
|
|
143
|
-
def readShortName(self, element: ET.Element) -> str:
|
|
144
|
-
return self.readChildElement("", element, "SHORT-NAME")
|
|
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
|
|
145
59
|
|
|
146
60
|
def readSd(self, element: ET.Element, sdg: Sdg):
|
|
147
61
|
for child_element in element.findall("./xmlns:SD", self.nsmap):
|
|
@@ -154,7 +68,8 @@ class ARXMLParser:
|
|
|
154
68
|
def readSdg(self, element: ET.Element, admin_data: AdminData):
|
|
155
69
|
for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
|
|
156
70
|
sdg = Sdg()
|
|
157
|
-
|
|
71
|
+
if 'GID' in child_element.attrib:
|
|
72
|
+
sdg.gid = child_element.attrib["GID"]
|
|
158
73
|
self.readSd(child_element, sdg)
|
|
159
74
|
admin_data.addSdg(sdg)
|
|
160
75
|
|
|
@@ -165,91 +80,73 @@ class ARXMLParser:
|
|
|
165
80
|
admin_data = AdminData()
|
|
166
81
|
self.readSdg(child_element, admin_data)
|
|
167
82
|
identifiable.admin_data = admin_data
|
|
83
|
+
|
|
84
|
+
def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
85
|
+
self.readElementAttributes(element, referrable)
|
|
86
|
+
referrable.long_name = self.getMultilanguageLongName(element, "LONG-NAME")
|
|
168
87
|
|
|
169
88
|
def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
|
|
170
|
-
self.readElementAttributes(element, identifiable)
|
|
171
89
|
self.readMultilanguageReferrable(element, identifiable)
|
|
172
|
-
identifiable.category = self.
|
|
90
|
+
identifiable.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
91
|
+
identifiable.desc = self.getMultiLanguageOverviewParagraph(element, "DESC")
|
|
173
92
|
self.readAdminData(element, identifiable)
|
|
174
|
-
|
|
175
|
-
def _readChildRefElementDestAndValue(self, element) -> RefType:
|
|
176
|
-
ref = RefType()
|
|
177
|
-
ref.dest = element.attrib['DEST']
|
|
178
|
-
ref.value = element.text
|
|
179
|
-
return ref
|
|
180
|
-
|
|
181
|
-
def readChildRefElement(self, short_name: str, element: ET.Element, key: str) -> RefType:
|
|
182
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
183
|
-
if (child_element != None):
|
|
184
|
-
return self._readChildRefElementDestAndValue(child_element)
|
|
185
|
-
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
186
|
-
|
|
187
|
-
def readChildOptionalRefElement(self, element:ET.Element, key: str) -> RefType:
|
|
188
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
189
|
-
if (child_element != None):
|
|
190
|
-
return self._readChildRefElementDestAndValue(child_element)
|
|
191
|
-
return None
|
|
192
|
-
|
|
193
|
-
def readChildRefElementList(self, element: ET.Element, key: str) -> List[RefType]:
|
|
194
|
-
child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
|
|
195
|
-
results = []
|
|
196
|
-
for child_element in child_elements:
|
|
197
|
-
ref = RefType()
|
|
198
|
-
ref.dest = child_element.attrib['DEST']
|
|
199
|
-
ref.value = child_element.text
|
|
200
|
-
results.append(ref)
|
|
201
|
-
return results
|
|
202
|
-
|
|
203
|
-
def readElementOptionalAttrib(self, element: ET.Element, key: str) -> str:
|
|
204
|
-
if key in element.attrib:
|
|
205
|
-
return element.attrib[key]
|
|
206
|
-
return None
|
|
207
93
|
|
|
208
|
-
def
|
|
94
|
+
def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
|
|
209
95
|
for child_element in element.findall("./xmlns:L-4", self.nsmap):
|
|
210
96
|
l4 = LLongName()
|
|
211
97
|
self.readElementAttributes(child_element, l4)
|
|
212
98
|
l4.value = child_element.text
|
|
213
99
|
if 'L' in child_element.attrib:
|
|
214
100
|
l4.l = child_element.attrib['L']
|
|
215
|
-
long_name.
|
|
101
|
+
long_name.addL4(l4)
|
|
216
102
|
|
|
217
|
-
def
|
|
218
|
-
|
|
103
|
+
def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
|
|
104
|
+
long_name = None
|
|
105
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
219
106
|
if child_element is not None:
|
|
220
|
-
|
|
221
|
-
self.readElementAttributes(child_element,
|
|
222
|
-
self.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
107
|
+
long_name = MultilanguageLongName()
|
|
108
|
+
self.readElementAttributes(child_element, long_name)
|
|
109
|
+
self.readLLongName(child_element, long_name)
|
|
110
|
+
return long_name
|
|
111
|
+
|
|
112
|
+
def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
|
|
113
|
+
for child_element in element.findall("./xmlns:L-2", self.nsmap):
|
|
114
|
+
l2 = LOverviewParagraph()
|
|
115
|
+
self.readElementAttributes(child_element, l2)
|
|
116
|
+
l2.value = child_element.text
|
|
117
|
+
if 'L' in child_element.attrib:
|
|
118
|
+
l2.l = child_element.attrib['L']
|
|
119
|
+
paragraph.addL2(l2)
|
|
120
|
+
|
|
121
|
+
def getMultiLanguageOverviewParagraph(self, element: ET.Element, key: str) -> MultiLanguageOverviewParagraph:
|
|
122
|
+
paragraph = None
|
|
123
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
124
|
+
if child_element is not None:
|
|
125
|
+
paragraph = MultiLanguageOverviewParagraph()
|
|
126
|
+
self.readElementAttributes(child_element, paragraph)
|
|
127
|
+
self.readLOverviewParagraph(child_element, paragraph)
|
|
128
|
+
return paragraph
|
|
232
129
|
|
|
233
130
|
def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
|
|
234
131
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
235
|
-
if (child_element
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
if
|
|
132
|
+
if (child_element is not None):
|
|
133
|
+
autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
|
|
134
|
+
autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
|
|
135
|
+
if autosar_variable_iref.port_prototype_ref is None:
|
|
239
136
|
self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
240
|
-
|
|
241
|
-
if
|
|
137
|
+
autosar_variable_iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
138
|
+
if autosar_variable_iref.target_data_prototype_ref is None:
|
|
242
139
|
self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
243
|
-
accessed_variable_ref.
|
|
140
|
+
accessed_variable_ref.autosar_variable_iref = autosar_variable_iref
|
|
244
141
|
|
|
245
142
|
def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
246
143
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
|
|
247
|
-
if (child_element
|
|
248
|
-
accessed_variable_ref.local_variable_ref = self.
|
|
144
|
+
if (child_element is not None):
|
|
145
|
+
accessed_variable_ref.local_variable_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF")
|
|
249
146
|
|
|
250
147
|
def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
|
|
251
148
|
for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
|
|
252
|
-
short_name = self.
|
|
149
|
+
short_name = self.getShortName(child_element)
|
|
253
150
|
|
|
254
151
|
self.logger.debug("readVariableAccesses %s" % short_name)
|
|
255
152
|
|
|
@@ -262,6 +159,9 @@ class ARXMLParser:
|
|
|
262
159
|
elif (key == "DATA-READ-ACCESSS"):
|
|
263
160
|
variable_access = parent.createDataReadAccess(short_name)
|
|
264
161
|
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
162
|
+
elif (key == "DATA-WRITE-ACCESSS"):
|
|
163
|
+
variable_access = parent.createDataWriteAccess(short_name)
|
|
164
|
+
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
265
165
|
elif (key == "DATA-SEND-POINTS"):
|
|
266
166
|
variable_access = parent.createDataSendPoint(short_name)
|
|
267
167
|
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
@@ -274,47 +174,60 @@ class ARXMLParser:
|
|
|
274
174
|
else:
|
|
275
175
|
self._raiseError("Invalid key type <%s>" % key)
|
|
276
176
|
|
|
277
|
-
|
|
177
|
+
self.readIdentifiable(child_element, variable_access)
|
|
278
178
|
|
|
279
179
|
def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
|
|
280
180
|
for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
|
|
281
|
-
ref = self.
|
|
282
|
-
if (ref
|
|
283
|
-
parent.
|
|
181
|
+
ref = self.getChildElementOptionalRefType(child_element, "BSW-MODULE-ENTRY-REF")
|
|
182
|
+
if (ref is not None):
|
|
183
|
+
parent.addImplementedEntry(ref)
|
|
284
184
|
self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
|
|
285
185
|
|
|
186
|
+
def readModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
|
|
187
|
+
self.readIdentifiable(element, prototype)
|
|
188
|
+
prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
189
|
+
|
|
286
190
|
def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
287
191
|
for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
288
|
-
short_name = self.
|
|
192
|
+
short_name = self.getShortName(child_element)
|
|
289
193
|
self.logger.debug("readProvidedModeGroup %s" % short_name)
|
|
290
194
|
|
|
291
195
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
292
|
-
|
|
196
|
+
self.readModeDeclarationGroupPrototype(child_element, mode_group)
|
|
293
197
|
|
|
294
198
|
def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
295
199
|
for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
296
|
-
short_name = self.
|
|
200
|
+
short_name = self.getShortName(child_element)
|
|
297
201
|
self.logger.debug("readRequiredModeGroup %s" % short_name)
|
|
298
202
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
299
|
-
mode_group.type_tref = self.
|
|
203
|
+
mode_group.type_tref = self.getChildElementRefType(parent.short_name, child_element, "TYPE-TREF")
|
|
300
204
|
|
|
301
205
|
def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
|
|
302
206
|
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
303
|
-
if child_element
|
|
304
|
-
for ref in self.
|
|
207
|
+
if child_element is not None:
|
|
208
|
+
for ref in self.getChildElementRefTypeList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
305
209
|
entity.addCanEnterExclusiveAreaRef(ref)
|
|
306
210
|
|
|
307
211
|
def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
212
|
+
self.logger.debug("readExecutableEntity %s" % entity.short_name)
|
|
213
|
+
self.readIdentifiable(element, entity)
|
|
308
214
|
self.readCanEnterExclusiveAreaRefs(element, entity)
|
|
215
|
+
entity.minimum_start_interval = self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")
|
|
216
|
+
|
|
217
|
+
def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
|
|
218
|
+
for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
|
|
219
|
+
ref_type = self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
220
|
+
if ref_type is not None:
|
|
221
|
+
entity.addManagedModeGroupRef(ref_type)
|
|
309
222
|
|
|
310
|
-
def readBswModuleEntity(self, element, entity: BswModuleEntity):
|
|
223
|
+
def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
|
|
311
224
|
self.readExecutableEntity(element, entity)
|
|
312
|
-
|
|
313
|
-
|
|
225
|
+
entity.implemented_entry_ref = self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
|
|
226
|
+
self.readBswModuleEntityManagedModeGroup(element, entity)
|
|
314
227
|
|
|
315
228
|
def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
316
229
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
|
|
317
|
-
short_name = self.
|
|
230
|
+
short_name = self.getShortName(child_element)
|
|
318
231
|
self.logger.debug("readBswCalledEntity %s" % short_name)
|
|
319
232
|
entity = parent.createBswCalledEntity(short_name)
|
|
320
233
|
|
|
@@ -322,187 +235,299 @@ class ARXMLParser:
|
|
|
322
235
|
|
|
323
236
|
def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
324
237
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
|
|
325
|
-
short_name = self.
|
|
238
|
+
short_name = self.getShortName(child_element)
|
|
326
239
|
self.logger.debug("readBswSchedulableEntity %s" % short_name)
|
|
327
240
|
entity = parent.createBswSchedulableEntity(short_name)
|
|
328
|
-
|
|
329
241
|
self.readBswModuleEntity(child_element, entity)
|
|
330
242
|
|
|
331
243
|
def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
332
|
-
event.
|
|
244
|
+
event.startsOnEventRef = self.getChildElementRefType(event.short_name, element, "STARTS-ON-EVENT-REF")
|
|
333
245
|
|
|
334
246
|
def readBswScheduleEvent(self, element, event: BswScheduleEvent):
|
|
335
247
|
self.readBswEvent(element, event)
|
|
336
248
|
|
|
337
249
|
def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
338
250
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
|
|
339
|
-
short_name = self.
|
|
251
|
+
short_name = self.getShortName(child_element)
|
|
340
252
|
self.logger.debug("readBswModeSwitchEvent %s" % short_name)
|
|
341
253
|
event = parent.createBswModeSwitchEvent(short_name)
|
|
342
|
-
|
|
254
|
+
# Read the Inherit BswScheduleEvent
|
|
343
255
|
self.readBswScheduleEvent(child_element, event)
|
|
344
256
|
|
|
345
257
|
def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
346
258
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
|
|
347
|
-
short_name = self.
|
|
259
|
+
short_name = self.getShortName(child_element)
|
|
348
260
|
self.logger.debug("readBswTimingEvent %s" % short_name)
|
|
349
261
|
event = parent.createBswTimingEvent(short_name)
|
|
350
|
-
event.period = self.
|
|
351
|
-
|
|
262
|
+
event.period = self.getChildElementOptionalFloatValue(child_element, "PERIOD")
|
|
263
|
+
# Read the Inherit BswScheduleEvent
|
|
352
264
|
self.readBswScheduleEvent(child_element, event)
|
|
353
265
|
|
|
354
266
|
def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
355
267
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
|
|
356
|
-
short_name = self.
|
|
268
|
+
short_name = self.getShortName(child_element)
|
|
357
269
|
self.logger.debug("readBswDataReceivedEvent %s" % short_name)
|
|
358
270
|
event = parent.createBswDataReceivedEvent(short_name)
|
|
359
|
-
event.data_ref = self.
|
|
360
|
-
|
|
271
|
+
event.data_ref = self.getChildElementRefType(parent.short_name, child_element, "DATA-REF")
|
|
272
|
+
# Read the Inherit BswScheduleEvent
|
|
361
273
|
self.readBswScheduleEvent(child_element, event)
|
|
362
274
|
|
|
363
275
|
def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
364
|
-
for child_element in
|
|
365
|
-
short_name = self.
|
|
276
|
+
for child_element in self.findall(element, "./EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
|
|
277
|
+
short_name = self.getShortName(child_element)
|
|
366
278
|
self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
|
|
367
279
|
event = parent.createBswInternalTriggerOccurredEvent(short_name)
|
|
368
|
-
event.event_source_ref = self.
|
|
369
|
-
|
|
280
|
+
event.event_source_ref = self.getChildElementRefType(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
281
|
+
# Read the Inherit BswScheduleEvent
|
|
370
282
|
self.readBswScheduleEvent(child_element, event)
|
|
371
283
|
|
|
284
|
+
def getBswModeSenderPolicy(self, element: ET.Element) -> BswModeSenderPolicy:
|
|
285
|
+
policy = BswModeSenderPolicy()
|
|
286
|
+
policy.setProvidedModeGroupRef(self.getChildElementOptionalRefType(element, "PROVIDED-MODE-GROUP-REF"))
|
|
287
|
+
policy.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
|
|
288
|
+
return policy
|
|
289
|
+
|
|
290
|
+
def readBswInternalBehaviorModeSenderPolicy(self, element: ET.Element, parent: BswInternalBehavior):
|
|
291
|
+
for child_element in self.findall(element, "./MODE-SENDER-POLICYS/*"):
|
|
292
|
+
tag_name = self.getTagName(child_element)
|
|
293
|
+
if tag_name == "BSW-MODE-SENDER-POLICY":
|
|
294
|
+
parent.addModeSenderPolicy(self.getBswModeSenderPolicy(child_element))
|
|
295
|
+
else:
|
|
296
|
+
self._raiseError("Unsupported ModeSenderPolicy type <%s>." % tag_name)
|
|
297
|
+
|
|
372
298
|
def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
|
|
373
299
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
374
|
-
if child_element
|
|
375
|
-
for ref in self.
|
|
300
|
+
if child_element is not None:
|
|
301
|
+
for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
376
302
|
behavior.addDataTypeMappingRef(ref)
|
|
377
303
|
|
|
378
304
|
def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
|
|
305
|
+
self.readIdentifiable(element, behavior)
|
|
379
306
|
for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
|
|
380
|
-
short_name = self.
|
|
307
|
+
short_name = self.getShortName(child_element)
|
|
381
308
|
behavior.createExclusiveArea(short_name)
|
|
382
|
-
|
|
383
309
|
self.readDataTypeMappingRefs(element, behavior)
|
|
384
310
|
|
|
385
|
-
def
|
|
311
|
+
def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
|
|
312
|
+
assignment = RoleBasedDataAssignment()
|
|
313
|
+
assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
|
|
314
|
+
assignment.used_parameter_element = self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")
|
|
315
|
+
assignment.used_pim_ref = self.getChildElementOptionalRefType(element, "USED-PIM-REF")
|
|
316
|
+
return assignment
|
|
317
|
+
|
|
318
|
+
def getRoleBasedPortAssignment(self, element: ET.Element) -> RoleBasedPortAssignment:
|
|
319
|
+
assignment = RoleBasedPortAssignment()
|
|
320
|
+
assignment.port_prototype_ref = self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF")
|
|
321
|
+
assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
|
|
322
|
+
return assignment
|
|
323
|
+
|
|
324
|
+
def readServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
|
|
325
|
+
self.readIdentifiable(element, dependency)
|
|
326
|
+
|
|
327
|
+
def readSwcServiceDependencyAssignedData(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
328
|
+
for child_element in element.findall("./xmlns:ASSIGNED-DATAS/*", self.nsmap):
|
|
329
|
+
tag_name = self.getTagName(child_element.tag)
|
|
330
|
+
if (tag_name == "ROLE-BASED-DATA-ASSIGNMENT"):
|
|
331
|
+
dependency.AddAssignedData(self.getRoleBasedDataAssignment(child_element))
|
|
332
|
+
else:
|
|
333
|
+
self._raiseError("Unsupported assigned data <%s>" % tag_name)
|
|
334
|
+
|
|
335
|
+
def readSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
336
|
+
for child_element in element.findall("./xmlns:ASSIGNED-PORTS/*", self.nsmap):
|
|
337
|
+
tag_name = self.getTagName(child_element.tag)
|
|
338
|
+
if (tag_name == "ROLE-BASED-PORT-ASSIGNMENT"):
|
|
339
|
+
dependency.AddAssignedPort(self.getRoleBasedPortAssignment(child_element))
|
|
340
|
+
else:
|
|
341
|
+
self._raiseError("Unsupported assigned ports <%s>" % tag_name)
|
|
342
|
+
|
|
343
|
+
def readNvBlockNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
344
|
+
short_name = self.getShortName(element)
|
|
345
|
+
needs = parent.createNvBlockNeeds(short_name)
|
|
346
|
+
self.logger.debug("readNvBlockNeeds %s" % short_name)
|
|
347
|
+
needs.calc_ram_block_crc = self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")
|
|
348
|
+
needs.check_static_block_id = self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")
|
|
349
|
+
needs.n_data_sets = self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")
|
|
350
|
+
needs.n_rom_blocks = self.getChildElementOptionalNumericalValue(element, "N-ROM-BLOCKS")
|
|
351
|
+
needs.readonly = self.getChildElementOptionalBooleanValue(element, "READONLY")
|
|
352
|
+
needs.reliability = self.getChildElementOptionalLiteral(element, "RELIABILITY")
|
|
353
|
+
needs.resistant_to_changed_sw = self.getChildElementOptionalBooleanValue(element, "RESISTANT-TO-CHANGED-SW")
|
|
354
|
+
needs.restore_at_start = self.getChildElementOptionalBooleanValue(element, "RESTORE-AT-START")
|
|
355
|
+
needs.store_at_shutdown = self.getChildElementOptionalBooleanValue(element, "STORE-AT-SHUTDOWN")
|
|
356
|
+
needs.write_only_once = self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")
|
|
357
|
+
needs.write_verification = self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")
|
|
358
|
+
needs.writing_priority = self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY")
|
|
359
|
+
|
|
360
|
+
def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
361
|
+
for child_element in element.findall("./xmlns:SERVICE-NEEDS/*", self.nsmap):
|
|
362
|
+
tag_name = self.getTagName(child_element.tag)
|
|
363
|
+
if tag_name == "NV-BLOCK-NEEDS":
|
|
364
|
+
self.readNvBlockNeeds(child_element, parent)
|
|
365
|
+
else:
|
|
366
|
+
self._raiseError("Unsupported service needs <%s>" % tag_name)
|
|
367
|
+
|
|
368
|
+
def readSwcServiceDependency(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
369
|
+
short_name = self.getShortName(element)
|
|
370
|
+
dependency = parent.createSwcServiceDependency(short_name)
|
|
371
|
+
self.logger.debug("readSwcServiceDependency %s" % short_name)
|
|
372
|
+
self.readServiceDependency(element, dependency)
|
|
373
|
+
self.readSwcServiceDependencyAssignedData(element, dependency)
|
|
374
|
+
self.readSwcServiceDependencyAssignedPorts(element, dependency)
|
|
375
|
+
self.readSwcServiceDependencyServiceNeeds(element, dependency)
|
|
376
|
+
|
|
377
|
+
def readSwcInternalBehaviorServiceDependencies(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
378
|
+
for child_element in element.findall("./xmlns:SERVICE-DEPENDENCYS/*", self.nsmap):
|
|
379
|
+
tag_name = self.getTagName(child_element.tag)
|
|
380
|
+
if (tag_name == "SWC-SERVICE-DEPENDENCY"):
|
|
381
|
+
self.readSwcServiceDependency(child_element, parent)
|
|
382
|
+
else:
|
|
383
|
+
self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
|
|
384
|
+
|
|
385
|
+
def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
386
386
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
|
|
387
|
-
short_name = self.
|
|
387
|
+
short_name = self.getShortName(child_element)
|
|
388
388
|
behavior = parent.createSwcInternalBehavior(short_name)
|
|
389
|
-
self.logger.debug("
|
|
389
|
+
self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
|
|
390
390
|
|
|
391
391
|
# read the internal behavior
|
|
392
392
|
self.readInternalBehavior(child_element, behavior)
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
self.
|
|
396
|
-
self.
|
|
397
|
-
self.
|
|
393
|
+
|
|
394
|
+
# read the extra SwcInternalBehavior
|
|
395
|
+
self.readSwcInternalBehaviorRunnables(child_element, behavior)
|
|
396
|
+
self.readSwcInternalBehaviorEvents(child_element, behavior)
|
|
397
|
+
self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
|
|
398
398
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
399
|
+
behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
|
|
400
|
+
self.readPerInstanceMemories(child_element, behavior)
|
|
401
|
+
self.readPerInstanceParameter(child_element, behavior)
|
|
402
|
+
self.readPortAPIOptions(child_element, behavior)
|
|
403
|
+
behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
|
|
399
404
|
|
|
400
405
|
def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
|
|
401
406
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
|
|
402
|
-
short_name = self.
|
|
407
|
+
short_name = self.getShortName(child_element)
|
|
403
408
|
behavior = parent.createBswInternalBehavior(short_name)
|
|
404
409
|
self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
|
|
405
410
|
|
|
406
411
|
# read the internal behavior
|
|
407
412
|
self.readInternalBehavior(child_element, behavior)
|
|
408
|
-
|
|
409
413
|
self.readBswCalledEntity(child_element, behavior)
|
|
410
414
|
self.readBswSchedulableEntity(child_element, behavior)
|
|
411
415
|
self.readBswModeSwitchEvent(child_element, behavior)
|
|
412
416
|
self.readBswTimingEvent(child_element, behavior)
|
|
413
417
|
self.readBswDataReceivedEvent(child_element, behavior)
|
|
414
418
|
self.readBswInternalTriggerOccurredEvent(child_element, behavior)
|
|
419
|
+
self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
|
|
415
420
|
|
|
416
421
|
def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
|
|
422
|
+
short_name = self.getShortName(element)
|
|
423
|
+
bsw_module_description = parent.createBswModuleDescription(short_name)
|
|
424
|
+
bsw_module_description.module_id = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
|
|
421
425
|
|
|
422
|
-
|
|
426
|
+
self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
|
|
423
427
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
+
self.readBswModuleDescriptionImplementedEntry(element, bsw_module_description)
|
|
429
|
+
self.readProvidedModeGroup(element, bsw_module_description)
|
|
430
|
+
self.readRequiredModeGroup(element, bsw_module_description)
|
|
431
|
+
self.readBswInternalBehavior(element, bsw_module_description)
|
|
428
432
|
|
|
429
433
|
def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
434
|
+
short_name = self.getShortName(element)
|
|
435
|
+
entry = parent.createBswModuleEntry(short_name)
|
|
436
|
+
entry.is_reentrant = self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")
|
|
437
|
+
entry.is_synchronous = self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")
|
|
438
|
+
entry.service_id = self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")
|
|
439
|
+
entry.call_type = self.getChildElementOptionalLiteral(element, "CALL-TYPE")
|
|
440
|
+
entry.execution_context = self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")
|
|
441
|
+
entry.sw_service_impl_policy = self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY")
|
|
442
|
+
|
|
443
|
+
#self.logger.debug("readBswModuleEntry \n%s" % entry)
|
|
444
|
+
self.logger.debug("readBswModuleEntry %s" % entry.short_name)
|
|
445
|
+
|
|
446
|
+
def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
|
|
447
|
+
self.readElementAttributes(element, engineering_obj)
|
|
448
|
+
engineering_obj.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
|
|
449
|
+
.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY"))
|
|
450
|
+
|
|
451
|
+
def getAutosarEngineeringObject(self, element: ET.Element) -> AutosarEngineeringObject:
|
|
452
|
+
obj = AutosarEngineeringObject()
|
|
453
|
+
self.readEngineeringObject(element, obj)
|
|
454
|
+
self.logger.debug("getAutosarEngineeringObject %s", obj.short_label)
|
|
455
|
+
return obj
|
|
442
456
|
|
|
443
457
|
def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
|
|
444
|
-
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
458
|
+
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/*", self.nsmap):
|
|
459
|
+
tag_name = self.getTagName(child_element.tag)
|
|
460
|
+
if tag_name == "AUTOSAR-ENGINEERING-OBJECT":
|
|
461
|
+
code_desc.addArtifactDescriptor(self.getAutosarEngineeringObject(child_element))
|
|
462
|
+
else:
|
|
463
|
+
self._raiseError("Unsupported Artifact Descriptor <%s>" % tag_name)
|
|
449
464
|
|
|
450
|
-
self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
|
|
451
|
-
|
|
452
465
|
def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
|
|
453
466
|
for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
|
|
454
|
-
short_name = self.
|
|
467
|
+
short_name = self.getShortName(child_element)
|
|
455
468
|
self.logger.debug("readCodeDescriptor %s" % short_name)
|
|
456
469
|
code_desc = impl.createCodeDescriptor(short_name)
|
|
470
|
+
self.readIdentifiable(child_element, code_desc)
|
|
457
471
|
self.readArtifactDescriptor(child_element, code_desc)
|
|
458
472
|
|
|
473
|
+
def readMemorySectionOptions(self, element: ET.Element, section: MemorySection):
|
|
474
|
+
child_element = element.find("./xmlns:OPTIONS", self.nsmap)
|
|
475
|
+
if child_element is not None:
|
|
476
|
+
for value in self.getChildElementLiteralValueList(child_element, "OPTION"):
|
|
477
|
+
section.addOption(value)
|
|
478
|
+
|
|
459
479
|
def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
|
|
460
480
|
for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
|
|
461
|
-
short_name = self.
|
|
481
|
+
short_name = self.getShortName(child_element)
|
|
462
482
|
memory_section = consumption.createMemorySection(short_name)
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
memory_section.
|
|
483
|
+
self.readIdentifiable(child_element, memory_section)
|
|
484
|
+
memory_section.alignment = self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")
|
|
485
|
+
self.readMemorySectionOptions(child_element, memory_section)
|
|
486
|
+
memory_section.size = self.getChildElementOptionalNumericalValue(child_element, "SIZE")
|
|
487
|
+
memory_section.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")
|
|
488
|
+
memory_section.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
467
489
|
self.logger.debug("readMemorySections %s" % memory_section.short_name)
|
|
468
490
|
|
|
469
491
|
def readResourceConsumption(self, element: ET.Element, impl: Implementation):
|
|
470
492
|
child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
|
|
471
|
-
if (child_element
|
|
472
|
-
self.
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
493
|
+
if (child_element is not None):
|
|
494
|
+
short_name = self.getShortName(child_element)
|
|
495
|
+
consumption = ResourceConsumption(impl, short_name)
|
|
496
|
+
self.readIdentifiable(child_element, consumption)
|
|
497
|
+
self.readMemorySections(child_element, consumption)
|
|
498
|
+
impl.setResourceConsumption(consumption)
|
|
477
499
|
|
|
478
500
|
def readImplementation(self, element: ET.Element, impl: Implementation):
|
|
501
|
+
self.readIdentifiable(element, impl)
|
|
479
502
|
self.readCodeDescriptor(element, impl)
|
|
480
|
-
impl.programming_language = self.
|
|
503
|
+
impl.programming_language = self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE")
|
|
481
504
|
self.readResourceConsumption(element, impl)
|
|
482
|
-
impl.sw_version = self.
|
|
483
|
-
impl.swc_bsw_mapping_ref = self.
|
|
484
|
-
impl.
|
|
485
|
-
|
|
486
|
-
def readBswImplementation(self, element: ET.Element, parent: ARPackage):
|
|
487
|
-
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
|
|
488
|
-
short_name = self.readShortName(child_element)
|
|
489
|
-
impl = parent.createBswImplementation(short_name)
|
|
490
|
-
self.logger.debug("readBswImplementation %s" % impl.short_name)
|
|
505
|
+
impl.sw_version = self.getChildElementOptionalLiteral(element, "SW-VERSION")
|
|
506
|
+
impl.swc_bsw_mapping_ref = self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")
|
|
507
|
+
impl.used_code_generator = self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")
|
|
508
|
+
impl.vendor_id = self.getChildElementOptionalNumericalValue(element, "VENDOR-ID")
|
|
491
509
|
|
|
492
|
-
|
|
510
|
+
def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
|
|
511
|
+
child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
|
|
512
|
+
if child_element is not None:
|
|
513
|
+
for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
|
|
514
|
+
parent.addVendorSpecificModuleDefRef(ref)
|
|
493
515
|
|
|
494
|
-
|
|
495
|
-
|
|
516
|
+
def readBswImplementation(self, element: ET.Element, parent: ARPackage):
|
|
517
|
+
short_name = self.getShortName(element)
|
|
518
|
+
impl = parent.createBswImplementation(short_name)
|
|
519
|
+
self.logger.debug("readBswImplementation %s" % impl.short_name)
|
|
520
|
+
self.readImplementation(element, impl)
|
|
521
|
+
impl.ar_release_version = self.getChildElementOptionalLiteral(element, "AR-RELEASE-VERSION")
|
|
522
|
+
impl.behavior_ref = self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")
|
|
523
|
+
self.readBswImplementationVendorSpecificModuleDefRefs(element, impl)
|
|
496
524
|
|
|
497
525
|
def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
self.readImplementation(child_element, impl)
|
|
504
|
-
|
|
505
|
-
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
526
|
+
short_name = self.getShortName(element)
|
|
527
|
+
impl = parent.createSwcImplementation(short_name)
|
|
528
|
+
self.logger.debug("readSwcImplementation %s" % impl.short_name)
|
|
529
|
+
self.readImplementation(element, impl)
|
|
530
|
+
impl.behavior_ref = self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")
|
|
506
531
|
|
|
507
532
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
508
533
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
@@ -513,470 +538,617 @@ class ARXMLParser:
|
|
|
513
538
|
def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
514
539
|
self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
|
|
515
540
|
|
|
541
|
+
def readDataWriteAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
542
|
+
self._readVariableAccesses(element, parent, "DATA-WRITE-ACCESSS")
|
|
543
|
+
|
|
516
544
|
def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
|
|
517
545
|
self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
|
|
518
546
|
|
|
547
|
+
def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
|
|
548
|
+
accessed_parameter = None
|
|
549
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
550
|
+
if child_element is not None:
|
|
551
|
+
accessed_parameter = AutosarParameterRef()
|
|
552
|
+
accessed_parameter.local_parameter_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF")
|
|
553
|
+
return accessed_parameter
|
|
554
|
+
|
|
555
|
+
def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
556
|
+
for child_element in element.findall("./xmlns:PARAMETER-ACCESSS/xmlns:PARAMETER-ACCESS", self.nsmap):
|
|
557
|
+
short_name = self.getShortName(child_element)
|
|
558
|
+
self.logger.debug("readParameterAccesses %s" % short_name)
|
|
559
|
+
parameter_access = parent.createParameterAccess(short_name)
|
|
560
|
+
parameter_access.accessed_parameter = self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER")
|
|
561
|
+
|
|
519
562
|
def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
520
563
|
self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
|
|
521
564
|
|
|
522
565
|
def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
523
566
|
self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
|
|
524
567
|
|
|
525
|
-
def readROperationIRef(self, element: ET.Element, parent: ServerCallPoint):
|
|
526
|
-
child_element = element.find("./xmlns
|
|
527
|
-
if (child_element
|
|
568
|
+
def readROperationIRef(self, element: ET.Element, key: str, parent: ServerCallPoint):
|
|
569
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
570
|
+
if (child_element is not None):
|
|
528
571
|
operation_iref = ROperationInAtomicSwcInstanceRef()
|
|
529
|
-
operation_iref.context_r_port_ref = self.
|
|
530
|
-
operation_iref.target_required_operation_ref = self.
|
|
572
|
+
operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
|
|
573
|
+
operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
|
|
531
574
|
parent.operation_iref = operation_iref
|
|
532
575
|
|
|
533
576
|
def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
|
|
534
|
-
child_element = element.find("./xmlns:DATA-
|
|
535
|
-
if (child_element
|
|
577
|
+
child_element = element.find("./xmlns:DATA-IREF", self.nsmap)
|
|
578
|
+
if (child_element is not None):
|
|
536
579
|
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
537
|
-
data_iref.context_r_port_ref = self.
|
|
538
|
-
data_iref.
|
|
580
|
+
data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
|
|
581
|
+
data_iref.target_data_element_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF")
|
|
539
582
|
parent.data_iref = data_iref
|
|
540
583
|
|
|
541
584
|
def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
|
|
542
585
|
for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
|
|
543
586
|
mode_iref = RModeInAtomicSwcInstanceRef()
|
|
544
|
-
mode_iref.
|
|
545
|
-
mode_iref.
|
|
546
|
-
mode_iref.
|
|
587
|
+
mode_iref.context_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")
|
|
588
|
+
mode_iref.context_mode_declaration_group_prototype_ref = self.getChildElementRefType("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
589
|
+
mode_iref.target_mode_declaration_ref = self.getChildElementRefType("", child_element, "TARGET-MODE-DECLARATION-REF")
|
|
547
590
|
parent.addModeIRef(mode_iref)
|
|
548
591
|
|
|
549
592
|
def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
593
|
+
short_name = self.getShortName(element)
|
|
594
|
+
self.logger.debug("readSynchronousServerCallPoint %s" % short_name)
|
|
595
|
+
server_call_point = parent.createSynchronousServerCallPoint(short_name)
|
|
596
|
+
self.readIdentifiable(element, server_call_point)
|
|
597
|
+
server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
|
|
598
|
+
self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
|
|
555
599
|
|
|
556
600
|
def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
601
|
+
short_name = self.getShortName(element)
|
|
602
|
+
self.logger.debug("readAsynchronousServerCallPoint %s" % short_name)
|
|
603
|
+
server_call_point = parent.createAsynchronousServerCallPoint(short_name)
|
|
604
|
+
self.readIdentifiable(element, server_call_point)
|
|
605
|
+
server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
|
|
606
|
+
self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
|
|
607
|
+
|
|
608
|
+
def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
609
|
+
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/*", self.nsmap):
|
|
610
|
+
tag_name = self.getTagName(child_element.tag)
|
|
611
|
+
if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
|
|
612
|
+
self.readSynchronousServerCallPoint(child_element, parent)
|
|
613
|
+
elif tag_name == "ASYNCHRONOUS-SERVER-CALL-POINT":
|
|
614
|
+
self.readAsynchronousServerCallPoint(child_element, parent)
|
|
615
|
+
else:
|
|
616
|
+
self._raiseError("Unsupported server call point type <%s>" % tag_name)
|
|
562
617
|
|
|
563
618
|
def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
564
619
|
for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
|
|
565
|
-
short_name = self.
|
|
620
|
+
short_name = self.getShortName(child_element)
|
|
566
621
|
point = parent.createInternalTriggeringPoint(short_name)
|
|
567
|
-
point.sw_impl_policy = self.
|
|
622
|
+
point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
|
|
568
623
|
|
|
569
|
-
def
|
|
624
|
+
def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
570
625
|
for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
|
|
571
|
-
short_name = self.
|
|
572
|
-
|
|
573
|
-
runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
574
|
-
runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
|
|
575
|
-
|
|
626
|
+
short_name = self.getShortName(child_element)
|
|
627
|
+
entity = parent.createRunnableEntity(short_name)
|
|
576
628
|
self.logger.debug("readRunnableEntities %s" % short_name)
|
|
577
|
-
|
|
578
|
-
self.
|
|
579
|
-
self.
|
|
580
|
-
self.
|
|
581
|
-
|
|
582
|
-
self.
|
|
583
|
-
self.
|
|
584
|
-
self.
|
|
585
|
-
self.
|
|
586
|
-
self.
|
|
629
|
+
|
|
630
|
+
self.readExecutableEntity(child_element, entity)
|
|
631
|
+
entity.can_be_invoked_concurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
632
|
+
entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
633
|
+
|
|
634
|
+
self.readDataReceivePointByArguments(child_element, entity)
|
|
635
|
+
self.readDataReceivePointByValues(child_element, entity)
|
|
636
|
+
self.readDataReadAccesses(child_element, entity)
|
|
637
|
+
self.readDataWriteAccesses(child_element, entity)
|
|
638
|
+
self.readDataSendPoints(child_element, entity)
|
|
639
|
+
self.readParameterAccesses(child_element, entity)
|
|
640
|
+
self.readWrittenLocalVariables(child_element, entity)
|
|
641
|
+
self.readReadLocalVariables(child_element, entity)
|
|
642
|
+
self.readInternalBehaviorServerCallPoint(child_element, entity)
|
|
643
|
+
self.readInternalTriggeringPoint(child_element, entity)
|
|
644
|
+
|
|
645
|
+
def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
|
|
646
|
+
iref = RModeInAtomicSwcInstanceRef()
|
|
647
|
+
iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
|
|
648
|
+
iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
|
|
649
|
+
iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
650
|
+
iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
|
|
651
|
+
return iref
|
|
587
652
|
|
|
588
653
|
def readRTEEvent(self, element: ET.Element, event: RTEEvent):
|
|
589
|
-
|
|
654
|
+
self.readIdentifiable(element, event)
|
|
655
|
+
event.start_on_event_ref = self.getChildElementOptionalRefType(element, "START-ON-EVENT-REF")
|
|
656
|
+
for child_element in element.findall("./xmlns:DISABLED-MODE-IREFS/xmlns:DISABLED-MODE-IREF", self.nsmap):
|
|
657
|
+
iref = self.getRModeInAtomicSwcInstanceRef(child_element)
|
|
658
|
+
event.addDisabledModeIRef(iref)
|
|
590
659
|
|
|
591
660
|
def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
|
|
592
661
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
593
|
-
if (child_element
|
|
662
|
+
if (child_element is not None):
|
|
594
663
|
parent.operation_iref = POperationInAtomicSwcInstanceRef()
|
|
595
|
-
parent.operation_iref.context_p_port_ref = self.
|
|
596
|
-
parent.operation_iref.target_provided_operation_ref = self.
|
|
597
|
-
|
|
598
|
-
def
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
664
|
+
parent.operation_iref.context_p_port_ref = self.getChildElementRefType(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
|
|
665
|
+
parent.operation_iref.target_provided_operation_ref = self.getChildElementRefType(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
|
|
666
|
+
|
|
667
|
+
def readOperationInvokedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
668
|
+
short_name = self.getShortName(element)
|
|
669
|
+
event = parent.createOperationInvokedEvent(short_name)
|
|
670
|
+
self.readOperationIRef(element, event)
|
|
671
|
+
self.readRTEEvent(element, event)
|
|
672
|
+
|
|
605
673
|
def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
606
674
|
for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
607
|
-
short_name = self.
|
|
675
|
+
short_name = self.getShortName(child_element)
|
|
608
676
|
prototype = parent.createExplicitInterRunnableVariable(short_name)
|
|
609
|
-
self.
|
|
610
|
-
prototype.type_tref = self.
|
|
677
|
+
prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
678
|
+
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
679
|
+
prototype.init_value = self.getInitValue(child_element)
|
|
680
|
+
|
|
681
|
+
def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
682
|
+
for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
|
|
683
|
+
short_name = self.getShortName(child_element)
|
|
684
|
+
memory = behavior.createPerInstanceMemory(short_name)
|
|
685
|
+
self.readIdentifiable(child_element, memory)
|
|
686
|
+
memory.init_value = self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")
|
|
687
|
+
memory.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
688
|
+
memory.type = self.getChildElementOptionalLiteral(child_element, "TYPE")
|
|
689
|
+
memory.type_definition = self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION")
|
|
690
|
+
|
|
691
|
+
def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
|
|
692
|
+
prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
693
|
+
|
|
694
|
+
def readParameterDataPrototype(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
695
|
+
short_name = self.getShortName(element)
|
|
696
|
+
prototype = behavior.createParameterDataPrototype(short_name)
|
|
697
|
+
self.readIdentifiable(element, prototype)
|
|
698
|
+
self.readAutosarDataPrototype(element, prototype)
|
|
699
|
+
prototype.init_value = self.getInitValue(element)
|
|
700
|
+
|
|
701
|
+
def readPerInstanceParameter(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
702
|
+
for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
|
|
703
|
+
self.readParameterDataPrototype(child_element, behavior)
|
|
611
704
|
|
|
705
|
+
def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
|
|
706
|
+
argument_value = PortDefinedArgumentValue()
|
|
707
|
+
child_element = element.find("./xmlns:VALUE/*", self.nsmap)
|
|
708
|
+
if child_element is not None:
|
|
709
|
+
argument_value.value = self.getValueSpecification(child_element)
|
|
710
|
+
argument_value.value_type = self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF")
|
|
711
|
+
return argument_value
|
|
712
|
+
|
|
713
|
+
def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
714
|
+
for child_element in element.findall("./xmlns:PORT-API-OPTIONS/xmlns:PORT-API-OPTION", self.nsmap):
|
|
715
|
+
option = PortAPIOption()
|
|
716
|
+
option.enable_take_address = self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")
|
|
717
|
+
option.indirect_api = self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")
|
|
718
|
+
option.port_ref = self.getChildElementOptionalRefType(child_element, "PORT-REF")
|
|
719
|
+
for argument_value_tag in child_element.findall("./xmlns:PORT-ARG-VALUES/xmlns:PORT-DEFINED-ARGUMENT-VALUE", self.nsmap):
|
|
720
|
+
option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
|
|
721
|
+
behavior.addPortAPIOption(option)
|
|
722
|
+
|
|
612
723
|
def readInitEvents(self, element, parent: SwcInternalBehavior):
|
|
613
724
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
|
|
614
|
-
short_name = self.
|
|
725
|
+
short_name = self.getShortName(child_element)
|
|
615
726
|
event = parent.createInitEvent(short_name)
|
|
616
|
-
|
|
617
727
|
self.readRTEEvent(child_element, event)
|
|
618
728
|
|
|
619
|
-
def
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
offset = self.readChildOptionalElement(child_element, "OFFSET")
|
|
627
|
-
if (offset != None):
|
|
628
|
-
event.offset = (float)(offset)
|
|
629
|
-
event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
|
|
729
|
+
def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
730
|
+
short_name = self.getShortName(element)
|
|
731
|
+
event = parent.createTimingEvent(short_name)
|
|
732
|
+
self.readRTEEvent(element, event)
|
|
733
|
+
event.offset = self.getChildElementOptionalFloatValue(element, "OFFSET")
|
|
734
|
+
event.period = self.getChildElementOptionalFloatValue(element, "PERIOD")
|
|
630
735
|
|
|
631
736
|
def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
self.readRTEEvent(child_element, event)
|
|
637
|
-
self.readRVariableInAtomicSwcInstanceRef(child_element, event)
|
|
737
|
+
short_name = self.getShortName(element)
|
|
738
|
+
event = parent.createDataReceivedEvent(short_name)
|
|
739
|
+
self.readRTEEvent(element, event)
|
|
740
|
+
self.readRVariableInAtomicSwcInstanceRef(element, event)
|
|
638
741
|
|
|
639
742
|
def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
self.readRModeInAtomicSwcInstanceRef(child_element, event)
|
|
743
|
+
short_name = self.getShortName(element)
|
|
744
|
+
event = parent.createSwcModeSwitchEvent(short_name)
|
|
745
|
+
self.readRTEEvent(element, event)
|
|
746
|
+
event.activation = self.getChildElementOptionalLiteral(element, "ACTIVATION")
|
|
747
|
+
self.readRModeInAtomicSwcInstanceRef(element, event)
|
|
646
748
|
|
|
647
749
|
def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
750
|
+
short_name = self.getShortName(element)
|
|
751
|
+
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
752
|
+
self.readRTEEvent(element, event)
|
|
753
|
+
event.event_source_ref = self.getChildElementRefType(parent.short_name, element, "EVENT-SOURCE-REF")
|
|
754
|
+
|
|
755
|
+
def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
756
|
+
for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
|
|
757
|
+
tag_name = self.getTagName(child_element.tag)
|
|
758
|
+
if tag_name == "TIMING-EVENT":
|
|
759
|
+
self.readTimingEvent(child_element, parent)
|
|
760
|
+
elif tag_name == "SWC-MODE-SWITCH-EVENT":
|
|
761
|
+
self.readSwcModeSwitchEvent(child_element, parent)
|
|
762
|
+
elif tag_name == "OPERATION-INVOKED-EVENT":
|
|
763
|
+
self.readOperationInvokedEvent(child_element, parent)
|
|
764
|
+
elif tag_name == "DATA-RECEIVED-EVENT":
|
|
765
|
+
self.readDataReceivedEvent(child_element, parent)
|
|
766
|
+
elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
|
|
767
|
+
self.readInternalTriggerOccurredEvent(child_element, parent)
|
|
768
|
+
else:
|
|
769
|
+
self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
|
|
658
770
|
|
|
659
|
-
|
|
771
|
+
def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
|
|
772
|
+
child_element = element.find("./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
|
|
773
|
+
if (child_element is not None):
|
|
660
774
|
sw_pointer_target_props = SwPointerTargetProps()
|
|
661
|
-
sw_pointer_target_props.target_category = self.
|
|
662
|
-
self.
|
|
775
|
+
sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
|
|
776
|
+
sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
663
777
|
parent.sw_pointer_target_props = sw_pointer_target_props
|
|
664
778
|
|
|
665
|
-
def
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
self.
|
|
696
|
-
|
|
697
|
-
|
|
779
|
+
def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
|
|
780
|
+
annotation.label = self.getMultilanguageLongName(element, "LABEL")
|
|
781
|
+
|
|
782
|
+
def readAnnotations(self, element: ET.Element, props: SwDataDefProps) :
|
|
783
|
+
for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
|
|
784
|
+
annotation = Annotation()
|
|
785
|
+
self.readGeneralAnnotation(child_element, annotation)
|
|
786
|
+
props.addAnnotation(annotation)
|
|
787
|
+
|
|
788
|
+
def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
|
|
789
|
+
props = SwAxisIndividual()
|
|
790
|
+
self.readElementAttributes(element, props)
|
|
791
|
+
props.setInputVariableTypeRef(self.getChildElementOptionalRefType(element, "INPUT-VARIABLE-TYPE-REF")) \
|
|
792
|
+
.setCompuMethodRef(self.getChildElementOptionalRefType(element, "COMPU-METHOD-REF")) \
|
|
793
|
+
.setSwMaxAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MAX-AXIS-POINTS")) \
|
|
794
|
+
.setSwMinAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MIN-AXIS-POINTS")) \
|
|
795
|
+
.setDataConstrRef(self.getChildElementOptionalRefType(element, "DATA-CONSTR-REF"))
|
|
796
|
+
return props
|
|
797
|
+
|
|
798
|
+
def getSwAxisGrouped(self, element: ET.Element) -> SwAxisGrouped:
|
|
799
|
+
props = SwAxisGrouped()
|
|
800
|
+
props.setSharedAxisTypeRef(self.getChildElementOptionalRefType(element, "SHARED-AXIS-TYPE-REF"))
|
|
801
|
+
return props
|
|
802
|
+
|
|
803
|
+
def getSwCalprmAxis(self, element: ET.Element) -> SwCalprmAxis:
|
|
804
|
+
axis = SwCalprmAxis()
|
|
805
|
+
axis.sw_axis_index = self.getChildElementOptionalNumericalValue(element, "SW-AXIS-INDEX")
|
|
806
|
+
axis.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
807
|
+
child_element = element.find("./xmlns:SW-AXIS-INDIVIDUAL", self.nsmap)
|
|
808
|
+
if child_element is not None:
|
|
809
|
+
axis.sw_calprm_axis_type_props = self.getSwAxisIndividual(child_element)
|
|
810
|
+
child_element = element.find("./xmlns:SW-AXIS-GROUPED", self.nsmap)
|
|
811
|
+
if child_element is not None:
|
|
812
|
+
axis.sw_calprm_axis_type_props = self.getSwAxisGrouped(child_element)
|
|
813
|
+
|
|
814
|
+
return axis
|
|
815
|
+
|
|
816
|
+
def getSwCalprmAxisSet(self, element: ET.Element, key: str) -> SwCalprmAxisSet:
|
|
817
|
+
set = SwCalprmAxisSet()
|
|
818
|
+
for child_element in element.findall("./xmlns:%s/*" % key, self.nsmap):
|
|
819
|
+
tag_name = self.getTagName(child_element.tag)
|
|
820
|
+
if tag_name == "SW-CALPRM-AXIS":
|
|
821
|
+
set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
|
|
822
|
+
return set
|
|
823
|
+
|
|
824
|
+
def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
|
|
825
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
826
|
+
sw_data_def_props = None
|
|
827
|
+
if child_element is not None:
|
|
828
|
+
conditional_tag = child_element.find("./xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
|
|
829
|
+
if conditional_tag is not None:
|
|
830
|
+
sw_data_def_props = SwDataDefProps()
|
|
831
|
+
self.readElementAttributes(child_element, sw_data_def_props)
|
|
832
|
+
|
|
833
|
+
self.readAnnotations(conditional_tag, sw_data_def_props)
|
|
834
|
+
sw_data_def_props.baseTypeRef = self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")
|
|
835
|
+
sw_data_def_props.dataConstrRef = self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")
|
|
836
|
+
sw_data_def_props.compuMethodRef = self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")
|
|
837
|
+
sw_data_def_props.swImplPolicy = self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")
|
|
838
|
+
sw_data_def_props.implementationDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
839
|
+
sw_data_def_props.swCalibrationAccess = self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")
|
|
840
|
+
sw_data_def_props.swCalprmAxisSet = self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")
|
|
841
|
+
sw_data_def_props.swRecordLayoutRef = self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")
|
|
842
|
+
sw_data_def_props.valueAxisDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")
|
|
843
|
+
sw_data_def_props.setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
|
|
844
|
+
self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
|
|
845
|
+
self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
|
|
846
|
+
return sw_data_def_props
|
|
847
|
+
|
|
848
|
+
def readApplicationPrimitiveDataType(self, element: ET.Element, parent: ARPackage):
|
|
849
|
+
short_name = self.getShortName(element)
|
|
850
|
+
data_type = parent.createApplicationPrimitiveDataType(short_name)
|
|
851
|
+
self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
|
|
852
|
+
self.readIdentifiable(element, data_type)
|
|
853
|
+
data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
|
|
854
|
+
|
|
855
|
+
def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
|
|
856
|
+
prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
698
857
|
|
|
699
858
|
def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
|
|
700
859
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
|
|
701
|
-
short_name = self.
|
|
860
|
+
short_name = self.getShortName(child_element)
|
|
702
861
|
record_element = parent.createApplicationRecordElement(short_name)
|
|
703
862
|
self.logger.debug("readApplicationRecordElements %s" % short_name)
|
|
704
863
|
self.readIdentifiable(child_element, record_element)
|
|
705
|
-
|
|
864
|
+
self.readApplicationCompositeElementDataPrototype(child_element, record_element)
|
|
706
865
|
|
|
707
866
|
def readApplicationRecordDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
def readImplementationDataTypeElements(self, element: ET.Element, parent: ARElement):
|
|
867
|
+
short_name = self.getShortName(element)
|
|
868
|
+
data_type = parent.createApplicationRecordDataType(short_name)
|
|
869
|
+
self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
|
|
870
|
+
self.readIdentifiable(element, data_type)
|
|
871
|
+
data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
|
|
872
|
+
self.readApplicationRecordElements(element, data_type)
|
|
873
|
+
|
|
874
|
+
def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
|
|
717
875
|
for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
|
|
718
|
-
short_name = self.
|
|
876
|
+
short_name = self.getShortName(child_element)
|
|
719
877
|
type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
|
|
720
878
|
self.readIdentifiable(child_element, type_element)
|
|
721
|
-
type_element.
|
|
722
|
-
type_element.array_size_semantics = self.
|
|
879
|
+
type_element.arraySize = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")
|
|
880
|
+
type_element.array_size_semantics = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS")
|
|
723
881
|
self.readImplementationDataTypeElements(child_element, type_element)
|
|
724
|
-
self.
|
|
725
|
-
|
|
726
|
-
def
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
if (data_type.
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
743
|
-
|
|
744
|
-
def readBaseTypeDirectDefinition(self, element: ET.Element, parent: BaseType):
|
|
745
|
-
parent.base_type_definition.base_type_size = int(self.readChildOptionalElement(element, "BASE-TYPE-SIZE"))
|
|
746
|
-
parent.base_type_definition.base_type_encoding = self.readChildOptionalElementLiteral(element, "BASE-TYPE-ENCODING")
|
|
747
|
-
parent.base_type_definition.native_declaration = self.readChildOptionalElementLiteral(element, "NATIVE-DECLARATION")
|
|
748
|
-
|
|
749
|
-
def readSwBaseTypes(self, element: ET.Element, parent: ARPackage):
|
|
750
|
-
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
|
|
751
|
-
short_name = self.readShortName(child_element)
|
|
752
|
-
data_type = parent.createSwBaseType(short_name)
|
|
753
|
-
self.readIdentifiable(child_element, data_type)
|
|
754
|
-
self.readBaseTypeDirectDefinition(child_element, data_type)
|
|
755
|
-
|
|
756
|
-
def readClientComSpec(self, element: ET.Element, parent: RPortPrototype):
|
|
757
|
-
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
|
|
758
|
-
try:
|
|
759
|
-
com_spec = ClientComSpec()
|
|
760
|
-
self.readElementAttributes(child_element, com_spec)
|
|
761
|
-
com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
|
|
762
|
-
parent.addRequiredComSpec(com_spec)
|
|
763
|
-
except ValueError as err:
|
|
764
|
-
self.logger.error(parent.short_name + ": " + str(err))
|
|
882
|
+
type_element.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
883
|
+
|
|
884
|
+
def readImplementationDataType(self, element: ET.Element, parent: ARPackage):
|
|
885
|
+
short_name = self.getShortName(element)
|
|
886
|
+
data_type = parent.createImplementationDataType(short_name)
|
|
887
|
+
self.readAutosarDataType(element, data_type)
|
|
888
|
+
self.readImplementationDataTypeElements(element, data_type)
|
|
889
|
+
data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
|
|
890
|
+
if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
|
|
891
|
+
if (len(data_type.getImplementationDataTypeElements()) < 1):
|
|
892
|
+
self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
|
|
893
|
+
array_sub_element = data_type.getImplementationDataTypeElements()[0]
|
|
894
|
+
if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
|
|
895
|
+
data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementationDataTypeRef.value)
|
|
896
|
+
elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
|
|
897
|
+
return
|
|
898
|
+
else:
|
|
899
|
+
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
765
900
|
|
|
766
|
-
def
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
self.
|
|
770
|
-
|
|
771
|
-
|
|
901
|
+
def readBaseTypeDirectDefinition(self, element: ET.Element, definition: BaseTypeDirectDefinition):
|
|
902
|
+
definition.base_type_size = self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")
|
|
903
|
+
definition.base_type_encoding = self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")
|
|
904
|
+
definition.mem_alignment = self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")
|
|
905
|
+
definition.native_declaration = self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION")
|
|
906
|
+
|
|
907
|
+
def readSwBaseType(self, element: ET.Element, parent: ARPackage):
|
|
908
|
+
short_name = self.getShortName(element)
|
|
909
|
+
data_type = parent.createSwBaseType(short_name)
|
|
910
|
+
self.readIdentifiable(element, data_type)
|
|
911
|
+
self.readBaseTypeDirectDefinition(element, data_type.baseTypeDefinition)
|
|
772
912
|
|
|
773
|
-
def
|
|
913
|
+
def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
|
|
914
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
915
|
+
iref = None
|
|
916
|
+
if child_element is not None:
|
|
917
|
+
iref = ApplicationCompositeElementInPortInterfaceInstanceRef()
|
|
918
|
+
iref.root_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF")
|
|
919
|
+
iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
920
|
+
return iref
|
|
921
|
+
|
|
922
|
+
def getCompositeNetworkRepresentation(self, element: ET.Element) -> CompositeNetworkRepresentation:
|
|
923
|
+
self.logger.debug("getCompositeNetworkRepresentation")
|
|
924
|
+
representation = CompositeNetworkRepresentation()
|
|
925
|
+
representation.leaf_element_iref = self.getApplicationCompositeElementInPortInterfaceInstanceRef(element, "LEAF-ELEMENT-IREF")
|
|
926
|
+
representation.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
|
|
927
|
+
return representation
|
|
928
|
+
|
|
929
|
+
def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
|
|
930
|
+
self.readElementAttributes(element, com_spec)
|
|
931
|
+
for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
|
|
932
|
+
com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
|
|
933
|
+
com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
|
|
934
|
+
com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
|
|
935
|
+
com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
|
|
936
|
+
com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
937
|
+
|
|
938
|
+
def getSwValues(self, element: ET.Element, key: str) -> SwValues:
|
|
774
939
|
child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
|
|
775
940
|
if child_element is None:
|
|
776
941
|
return None
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
return
|
|
783
|
-
|
|
784
|
-
def
|
|
942
|
+
sw_values = SwValues()
|
|
943
|
+
self.readElementAttributes(child_element, sw_values)
|
|
944
|
+
for v in self.getChildElementFloatValueList(child_element, "V"):
|
|
945
|
+
sw_values.addV(v)
|
|
946
|
+
sw_values.vt = self.getChildElementOptionalLiteral(child_element, "VT")
|
|
947
|
+
return sw_values
|
|
948
|
+
|
|
949
|
+
def getValueList(self, element: ET.Element, key: str) -> ValueList:
|
|
950
|
+
value_list = None
|
|
951
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
|
|
952
|
+
if child_element is not None:
|
|
953
|
+
self.logger.debug("getValueList %s" % key)
|
|
954
|
+
value_list = ValueList()
|
|
955
|
+
self.readElementAttributes(child_element, value_list)
|
|
956
|
+
value_list.v = self.getChildElementOptionalFloatValue(child_element, "V")
|
|
957
|
+
return value_list
|
|
958
|
+
|
|
959
|
+
def getSwValueCont(self, element: ET.Element) -> SwValueCont:
|
|
785
960
|
cont = None
|
|
786
961
|
child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
|
|
787
962
|
if child_element is not None:
|
|
963
|
+
self.logger.debug("getSwValueCont")
|
|
788
964
|
cont = SwValueCont()
|
|
789
|
-
|
|
790
|
-
cont.
|
|
791
|
-
|
|
792
|
-
self.
|
|
965
|
+
self.readElementAttributes(child_element, cont)
|
|
966
|
+
cont.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
|
|
967
|
+
cont.sw_arraysize = self.getValueList(child_element, "SW-ARRAYSIZE")
|
|
968
|
+
cont.sw_values_phys = self.getSwValues(child_element, "SW-VALUES-PHYS")
|
|
793
969
|
return cont
|
|
794
970
|
|
|
795
|
-
def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
|
|
796
|
-
value_spec.short_label = self.readChildOptionalElement(element, "SHORT-LABEL")
|
|
797
|
-
self.readElementAttributes(element, value_spec)
|
|
798
|
-
|
|
799
|
-
self.logger.debug("readValueSpecification")
|
|
800
|
-
|
|
801
971
|
def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
|
|
802
972
|
self.readValueSpecification(element, value_spec)
|
|
803
|
-
value_spec.category = self.
|
|
804
|
-
value_spec.sw_value_cont = self.
|
|
973
|
+
value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
974
|
+
value_spec.sw_value_cont = self.getSwValueCont(element)
|
|
805
975
|
|
|
806
976
|
self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
|
|
807
977
|
|
|
808
|
-
def
|
|
809
|
-
self.readValueSpecification(element, value_spec)
|
|
810
|
-
value_spec.value = self.readChildOptionalElement(element, "VALUE")
|
|
811
|
-
|
|
812
|
-
self.logger.debug("readTextValueSpecification Value: %s" % value_spec.value)
|
|
813
|
-
|
|
814
|
-
def readNumericalValueSpecification(self, element: ET.Element, value_spec: NumericalValueSpecification):
|
|
815
|
-
self.readValueSpecification(element, value_spec)
|
|
816
|
-
value_spec.value = self.readChildOptionalElement(element, "VALUE")
|
|
817
|
-
|
|
818
|
-
self.logger.debug("readNumericalValueSpecification Value: %s" % value_spec.value)
|
|
819
|
-
|
|
820
|
-
def readArrayValueSpecification(self, element: ET.Element, value_spec: ArrayValueSpecification):
|
|
821
|
-
self.readValueSpecification(element, value_spec)
|
|
822
|
-
|
|
823
|
-
child_elements = element.findall("./xmlns:ELEMENTS/xmlns:NUMERICAL-VALUE-SPECIFICATION", self.nsmap)
|
|
824
|
-
for child_element in child_elements:
|
|
825
|
-
sub_element = NumericalValueSpecification()
|
|
826
|
-
self.readNumericalValueSpecification(child_element, sub_element)
|
|
827
|
-
value_spec.add_element(sub_element)
|
|
828
|
-
|
|
829
|
-
self.logger.debug("readArrayValueSpecification")
|
|
830
|
-
|
|
831
|
-
def readConstantReference(self, element: ET.Element, value_spec: ConstantReference):
|
|
832
|
-
self.readValueSpecification(element, value_spec)
|
|
833
|
-
|
|
834
|
-
value_spec.constant_ref = self.readChildOptionalRefElement(element, "CONSTANT-REF")
|
|
835
|
-
|
|
836
|
-
def readInitValue(self, element: ET.Element) -> ValueSpecification:
|
|
978
|
+
def getInitValue(self, element: ET.Element) -> ValueSpecification:
|
|
837
979
|
value_spec = None
|
|
838
|
-
child_element = element.find("./xmlns:INIT-VALUE", self.nsmap)
|
|
980
|
+
child_element = element.find("./xmlns:INIT-VALUE/*", self.nsmap)
|
|
839
981
|
if child_element is not None:
|
|
840
|
-
self.logger.debug("
|
|
841
|
-
|
|
842
|
-
if value_spec_tag is not None:
|
|
843
|
-
value_spec = ApplicationValueSpecification()
|
|
844
|
-
self.readApplicationValueSpecification(value_spec_tag, value_spec)
|
|
845
|
-
return value_spec
|
|
846
|
-
value_spec_tag = child_element.find("./xmlns:TEXT-VALUE-SPECIFICATION", self.nsmap)
|
|
847
|
-
if value_spec_tag is not None:
|
|
848
|
-
value_spec = TextValueSpecification()
|
|
849
|
-
self.readTextValueSpecification(value_spec_tag, value_spec)
|
|
850
|
-
return value_spec
|
|
851
|
-
value_spec_tag = child_element.find("./xmlns:NUMERICAL-VALUE-SPECIFICATION", self.nsmap)
|
|
852
|
-
if value_spec_tag is not None:
|
|
853
|
-
value_spec = NumericalValueSpecification()
|
|
854
|
-
self.readNumericalValueSpecification(value_spec_tag, value_spec)
|
|
855
|
-
return value_spec
|
|
856
|
-
value_spec_tag = child_element.find("./xmlns:ARRAY-VALUE-SPECIFICATION", self.nsmap)
|
|
857
|
-
if value_spec_tag is not None:
|
|
858
|
-
value_spec = ArrayValueSpecification()
|
|
859
|
-
self.readArrayValueSpecification(value_spec_tag, value_spec)
|
|
860
|
-
return value_spec
|
|
861
|
-
value_spec_tag = child_element.find("./xmlns:CONSTANT-REFERENCE", self.nsmap)
|
|
862
|
-
if value_spec_tag is not None:
|
|
863
|
-
value_spec = ConstantReference()
|
|
864
|
-
self.readConstantReference(value_spec_tag, value_spec)
|
|
865
|
-
return value_spec
|
|
866
|
-
|
|
982
|
+
self.logger.debug("getInitValue")
|
|
983
|
+
value_spec = self.getValueSpecification(child_element)
|
|
867
984
|
return value_spec
|
|
985
|
+
|
|
986
|
+
def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
|
|
987
|
+
com_spec = ClientComSpec()
|
|
988
|
+
self.readElementAttributes(element, com_spec)
|
|
989
|
+
com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
|
|
990
|
+
return com_spec
|
|
991
|
+
|
|
992
|
+
def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
|
|
993
|
+
com_spec = QueuedReceiverComSpec()
|
|
994
|
+
self.readElementAttributes(element, com_spec)
|
|
995
|
+
self.readReceiverComSpec(element, com_spec)
|
|
996
|
+
com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
|
|
997
|
+
return com_spec
|
|
998
|
+
|
|
999
|
+
def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
|
|
1000
|
+
com_spec = NonqueuedReceiverComSpec()
|
|
1001
|
+
self.readElementAttributes(element, com_spec)
|
|
1002
|
+
self.readReceiverComSpec(element, com_spec)
|
|
1003
|
+
com_spec.alive_timeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
|
|
1004
|
+
com_spec.enable_updated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
|
|
1005
|
+
com_spec.handle_never_received = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
|
|
1006
|
+
com_spec.handel_timeout_type = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
|
|
1007
|
+
com_spec.init_value = self.getInitValue(element)
|
|
1008
|
+
return com_spec
|
|
1009
|
+
|
|
1010
|
+
def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
|
|
1011
|
+
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/*", self.nsmap):
|
|
1012
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1013
|
+
if tag_name == "NONQUEUED-RECEIVER-COM-SPEC":
|
|
1014
|
+
parent.addRequiredComSpec(self.getNonqueuedReceiverComSpec(child_element))
|
|
1015
|
+
elif tag_name == "CLIENT-COM-SPEC":
|
|
1016
|
+
parent.addRequiredComSpec(self.getClientComSpec(child_element))
|
|
1017
|
+
elif tag_name == "QUEUED-RECEIVER-COM-SPEC":
|
|
1018
|
+
parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
|
|
1019
|
+
else:
|
|
1020
|
+
self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
868
1021
|
|
|
869
|
-
def
|
|
870
|
-
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
|
|
871
|
-
com_spec = NonqueuedReceiverComSpec()
|
|
872
|
-
|
|
873
|
-
self.readElementAttributes(child_element, com_spec)
|
|
874
|
-
self.readReceiverComSpec(child_element, com_spec)
|
|
875
|
-
try:
|
|
876
|
-
# FIXME:
|
|
877
|
-
com_spec.alive_timeout = self.readChildElementFloatValue("", child_element, "ALIVE-TIMEOUT")
|
|
878
|
-
com_spec.enable_updated = self.readChildElementBooleanValue("", child_element, "ENABLE-UPDATE")
|
|
879
|
-
com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
|
|
880
|
-
com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
|
|
881
|
-
except ValueError as err:
|
|
882
|
-
self.logger.error(parent.short_name + ": " + str(err))
|
|
883
|
-
|
|
884
|
-
com_spec.init_value = self.readInitValue(child_element)
|
|
885
|
-
|
|
886
|
-
parent.addRequiredComSpec(com_spec)
|
|
887
|
-
|
|
888
|
-
def readRPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
1022
|
+
def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
889
1023
|
for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
|
|
890
|
-
short_name = self.
|
|
1024
|
+
short_name = self.getShortName(child_element)
|
|
891
1025
|
self.logger.debug("readRPortPrototype %s" % short_name)
|
|
892
|
-
|
|
893
1026
|
prototype = parent.createRPortPrototype(short_name)
|
|
894
|
-
self.
|
|
895
|
-
prototype.required_interface_tref = self.
|
|
1027
|
+
self.readIdentifiable(child_element, prototype)
|
|
1028
|
+
prototype.required_interface_tref = self.getChildElementOptionalRefType(child_element, "REQUIRED-INTERFACE-TREF")
|
|
896
1029
|
|
|
897
|
-
self.
|
|
898
|
-
self.readNonqueuedReceiverComSpec(child_element, prototype)
|
|
1030
|
+
self.readRequiredComSpec(child_element, prototype)
|
|
899
1031
|
|
|
900
1032
|
def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
|
|
901
1033
|
child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
|
|
902
|
-
if (child_element
|
|
1034
|
+
if (child_element is not None):
|
|
903
1035
|
acknowledge = TransmissionAcknowledgementRequest()
|
|
904
1036
|
self.readElementAttributes(child_element, acknowledge)
|
|
905
|
-
acknowledge.timeout = self.
|
|
1037
|
+
acknowledge.timeout = self.getChildElementOptionalFloatValue(child_element, "TIMEOUT")
|
|
906
1038
|
return acknowledge
|
|
907
1039
|
return None
|
|
908
1040
|
|
|
909
|
-
def readSenderComSpec(self, element, com_spec: SenderComSpec):
|
|
910
|
-
# FIXME:
|
|
1041
|
+
def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
|
|
911
1042
|
self.readElementAttributes(element, com_spec)
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
self.
|
|
915
|
-
com_spec.
|
|
1043
|
+
for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
|
|
1044
|
+
com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
|
|
1045
|
+
com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
|
|
1046
|
+
com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
|
|
1047
|
+
com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
|
|
916
1048
|
com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
|
|
917
|
-
com_spec.uses_end_to_end_protection = self.
|
|
918
|
-
|
|
919
|
-
def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
|
|
920
|
-
for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
|
|
921
|
-
com_spec = NonqueuedSenderComSpec()
|
|
922
|
-
self.readSenderComSpec(child_element, com_spec)
|
|
923
|
-
|
|
924
|
-
com_spec.init_value = self.readInitValue(child_element)
|
|
1049
|
+
com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
925
1050
|
|
|
926
|
-
|
|
1051
|
+
def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
|
|
1052
|
+
com_spec = NonqueuedSenderComSpec()
|
|
1053
|
+
self.readSenderComSpec(element, com_spec)
|
|
1054
|
+
com_spec.init_value = self.getInitValue(element)
|
|
1055
|
+
return com_spec
|
|
1056
|
+
|
|
1057
|
+
def getServerComSpec(self, element) -> ServerComSpec:
|
|
1058
|
+
com_spec = ServerComSpec()
|
|
1059
|
+
self.readSenderComSpec(element, com_spec)
|
|
1060
|
+
com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
|
|
1061
|
+
com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
|
|
1062
|
+
return com_spec
|
|
1063
|
+
|
|
1064
|
+
def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
|
|
1065
|
+
for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/*", self.nsmap):
|
|
1066
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1067
|
+
if tag_name == "NONQUEUED-SENDER-COM-SPEC":
|
|
1068
|
+
parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
|
|
1069
|
+
elif tag_name == "SERVER-COM-SPEC":
|
|
1070
|
+
parent.addProvidedComSpec(self.getServerComSpec(child_element))
|
|
1071
|
+
else:
|
|
1072
|
+
raise NotImplementedError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
927
1073
|
|
|
928
|
-
def readPPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
1074
|
+
def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
929
1075
|
for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
|
|
930
|
-
short_name = self.
|
|
1076
|
+
short_name = self.getShortName(child_element)
|
|
931
1077
|
self.logger.debug("readPPortPrototype %s" % short_name)
|
|
932
|
-
|
|
933
1078
|
prototype = parent.createPPortPrototype(short_name)
|
|
934
|
-
self.
|
|
935
|
-
prototype.provided_interface_tref = self.
|
|
936
|
-
|
|
1079
|
+
self.readIdentifiable(child_element, prototype)
|
|
1080
|
+
prototype.provided_interface_tref = self.getChildElementOptionalRefType(child_element, "PROVIDED-INTERFACE-TREF")
|
|
1081
|
+
|
|
1082
|
+
self.readProvidedComSpec(child_element, prototype)
|
|
1083
|
+
|
|
1084
|
+
def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
|
|
1085
|
+
for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
|
|
1086
|
+
inner_group_iref = InnerPortGroupInCompositionInstanceRef()
|
|
1087
|
+
inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
|
|
1088
|
+
inner_group_iref.targetRef = self.getChildElementOptionalRefType(child_element, "TARGET-REF")
|
|
1089
|
+
parent.addInnerGroupIRef(inner_group_iref)
|
|
1090
|
+
|
|
1091
|
+
def readPortGroupOuterPortRefs(self, element: ET.Element, parent: PortGroup):
|
|
1092
|
+
for child_element in element.findall("./xmlns:OUTER-PORTS/xmlns:PORT-PROTOTYPE-REF-CONDITIONAL", self.nsmap):
|
|
1093
|
+
parent.addOuterPortRef(self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF"))
|
|
1094
|
+
|
|
1095
|
+
def readPortGroup(self, element: ET.Element, parent: SwComponentType):
|
|
1096
|
+
short_name = self.getShortName(element)
|
|
1097
|
+
self.logger.debug("readPortGroup %s" % short_name)
|
|
1098
|
+
port_group = parent.createPortGroup(short_name)
|
|
1099
|
+
self.readIdentifiable(element, port_group)
|
|
1100
|
+
self.readPortGroupInnerGroupIRefs(element, port_group)
|
|
1101
|
+
self.readPortGroupOuterPortRefs(element, port_group)
|
|
1102
|
+
|
|
1103
|
+
def readSwComponentTypePortGroups(self, element: ET.Element, parent: SwComponentType):
|
|
1104
|
+
for child_element in element.findall("./xmlns:PORT-GROUPS/*", self.nsmap):
|
|
1105
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1106
|
+
if tag_name == "PORT-GROUP":
|
|
1107
|
+
self.readPortGroup(child_element, parent)
|
|
1108
|
+
else:
|
|
1109
|
+
self._raiseError("Unsupported Port Group type: %s" % tag_name)
|
|
937
1110
|
|
|
938
|
-
def readSwComponentType(self, element, parent: SwComponentType):
|
|
1111
|
+
def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
|
|
1112
|
+
self.readIdentifiable(element, parent)
|
|
939
1113
|
self.readRPortPrototype(element, parent)
|
|
940
1114
|
self.readPPortPrototype(element, parent)
|
|
1115
|
+
self.readSwComponentTypePortGroups(element, parent)
|
|
941
1116
|
|
|
942
1117
|
def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
|
|
943
1118
|
self.readSwComponentType(element, parent)
|
|
944
|
-
self.
|
|
945
|
-
|
|
946
|
-
def
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
def readPPortInCompositionInstanceRef(self, element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
|
|
978
|
-
p_port_in_composition_instance_ref.context_component_ref = self.readChildOptionalRefElement(element, "CONTEXT-COMPONENT-REF")
|
|
979
|
-
p_port_in_composition_instance_ref.target_p_port_ref = self.readChildOptionalRefElement(element, "TARGET-P-PORT-REF")
|
|
1119
|
+
self.readSwcInternalBehavior(element, parent)
|
|
1120
|
+
|
|
1121
|
+
def readEcuAbstractionSwComponent(self, element, parent: ARPackage):
|
|
1122
|
+
short_name = self.getShortName(element)
|
|
1123
|
+
sw_component = parent.createEcuAbstractionSwComponentType(short_name)
|
|
1124
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1125
|
+
|
|
1126
|
+
def readApplicationSwComponentTypes(self, element: ET.Element, parent: ARPackage):
|
|
1127
|
+
short_name = self.getShortName(element)
|
|
1128
|
+
sw_component = parent.createApplicationSwComponentType(short_name)
|
|
1129
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1130
|
+
|
|
1131
|
+
def readComplexDeviceDriverSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1132
|
+
short_name = self.getShortName(element)
|
|
1133
|
+
sw_component = parent.createComplexDeviceDriverSwComponentType(short_name)
|
|
1134
|
+
self.logger.debug("readComplexDeviceDriverSwComponentType <%s>" % short_name)
|
|
1135
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1136
|
+
|
|
1137
|
+
def readSensorActuatorSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1138
|
+
short_name = self.getShortName(element)
|
|
1139
|
+
sw_component = parent.createSensorActuatorSwComponentType(short_name)
|
|
1140
|
+
self.logger.debug("readSensorActuatorSwComponentType <%s>" % short_name)
|
|
1141
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1142
|
+
|
|
1143
|
+
def readServiceSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1144
|
+
short_name = self.getShortName(element)
|
|
1145
|
+
sw_component = parent.createServiceSwComponentType(short_name)
|
|
1146
|
+
self.logger.debug("readServiceSwComponentType <%s>" % short_name)
|
|
1147
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1148
|
+
|
|
1149
|
+
def readPPortInCompositionInstanceRef(self, element: ET.Element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
|
|
1150
|
+
p_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1151
|
+
p_port_in_composition_instance_ref.target_p_port_ref = self.getChildElementOptionalRefType(element, "TARGET-P-PORT-REF")
|
|
980
1152
|
|
|
981
1153
|
self.logger.debug("PPortInCompositionInstanceRef")
|
|
982
1154
|
self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
|
|
@@ -985,8 +1157,8 @@ class ARXMLParser:
|
|
|
985
1157
|
% (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
|
|
986
1158
|
|
|
987
1159
|
def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
|
|
988
|
-
r_port_in_composition_instance_ref.context_component_ref = self.
|
|
989
|
-
r_port_in_composition_instance_ref.target_r_port_ref = self.
|
|
1160
|
+
r_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1161
|
+
r_port_in_composition_instance_ref.target_r_port_ref = self.getChildElementOptionalRefType(element, "TARGET-R-PORT-REF")
|
|
990
1162
|
|
|
991
1163
|
self.logger.debug("RPortInCompositionInstanceRef")
|
|
992
1164
|
self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
|
|
@@ -994,44 +1166,44 @@ class ARXMLParser:
|
|
|
994
1166
|
self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
|
|
995
1167
|
% (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
|
|
996
1168
|
|
|
997
|
-
def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
|
|
1169
|
+
def readAssemblySwConnectorProviderIRef(self, element: ET.Element, parent: AssemblySwConnector):
|
|
998
1170
|
child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
|
|
999
|
-
if (child_element
|
|
1171
|
+
if (child_element is not None):
|
|
1000
1172
|
provide_iref = PPortInCompositionInstanceRef()
|
|
1001
1173
|
self.readElementAttributes(child_element, provide_iref)
|
|
1002
1174
|
self.readPPortInCompositionInstanceRef(child_element, provide_iref)
|
|
1003
1175
|
parent.provider_iref = provide_iref
|
|
1004
1176
|
|
|
1005
|
-
def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
|
|
1177
|
+
def readAssemblySwConnectorRequesterIRef(self, element: ET.Element, parent: AssemblySwConnector):
|
|
1006
1178
|
child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
|
|
1007
|
-
if (child_element
|
|
1179
|
+
if (child_element is not None):
|
|
1008
1180
|
requester_iref = RPortInCompositionInstanceRef()
|
|
1009
1181
|
self.readElementAttributes(child_element, requester_iref)
|
|
1010
1182
|
self.readRPortInCompositionInstanceRef(child_element, requester_iref)
|
|
1011
1183
|
parent.requester_iref = requester_iref
|
|
1012
1184
|
|
|
1013
|
-
def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
|
|
1185
|
+
def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
1014
1186
|
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
|
|
1015
|
-
short_name = self.
|
|
1187
|
+
short_name = self.getShortName(child_element)
|
|
1016
1188
|
self.logger.debug("readAssemblySwConnectors %s" % short_name)
|
|
1017
1189
|
|
|
1018
1190
|
connector = parent.createAssemblySwConnector(short_name)
|
|
1019
|
-
self.
|
|
1191
|
+
self.readIdentifiable(child_element, connector)
|
|
1020
1192
|
self.readAssemblySwConnectorProviderIRef(child_element, connector)
|
|
1021
1193
|
self.readAssemblySwConnectorRequesterIRef(child_element, connector)
|
|
1022
1194
|
|
|
1023
1195
|
def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
|
|
1024
1196
|
inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
|
|
1025
|
-
if (inner_port_iref_element
|
|
1197
|
+
if (inner_port_iref_element is not None):
|
|
1026
1198
|
child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
|
|
1027
|
-
if (child_element
|
|
1199
|
+
if (child_element is not None):
|
|
1028
1200
|
r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
|
|
1029
1201
|
self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
|
|
1030
1202
|
parent.inner_port_iref = r_port_in_composition_instance_ref
|
|
1031
1203
|
return
|
|
1032
1204
|
|
|
1033
1205
|
child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
|
|
1034
|
-
if (child_element
|
|
1206
|
+
if (child_element is not None):
|
|
1035
1207
|
p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
|
|
1036
1208
|
self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
|
|
1037
1209
|
parent.inner_port_iref = p_port_in_composition_instance_ref
|
|
@@ -1041,111 +1213,126 @@ class ARXMLParser:
|
|
|
1041
1213
|
|
|
1042
1214
|
def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
|
|
1043
1215
|
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
|
|
1044
|
-
short_name = self.
|
|
1216
|
+
short_name = self.getShortName(child_element)
|
|
1045
1217
|
self.logger.debug("readDelegationSwConnectors %s" % short_name)
|
|
1046
1218
|
|
|
1047
1219
|
connector = parent.createDelegationSwConnector(short_name)
|
|
1048
|
-
self.
|
|
1220
|
+
self.readIdentifiable(child_element, connector)
|
|
1049
1221
|
self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
|
|
1050
1222
|
|
|
1051
1223
|
if connector.inner_port_iref == None and connector.outer_port_iref == None:
|
|
1052
1224
|
self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
|
|
1053
1225
|
|
|
1054
|
-
connector.outer_port_ref = self.
|
|
1226
|
+
connector.outer_port_ref = self.getChildElementOptionalRefType(child_element, "OUTER-PORT-REF")
|
|
1055
1227
|
self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
|
|
1056
1228
|
% (connector.outer_port_ref.dest, connector.outer_port_ref.value))
|
|
1057
1229
|
|
|
1058
1230
|
def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
1059
1231
|
for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
|
|
1060
|
-
short_name = self.
|
|
1232
|
+
short_name = self.getShortName(child_element)
|
|
1061
1233
|
self.logger.debug("readSwComponentPrototypes %s" % short_name)
|
|
1062
|
-
|
|
1063
1234
|
prototype = parent.createSwComponentPrototype(short_name)
|
|
1064
|
-
self.
|
|
1065
|
-
prototype.type_tref = self.
|
|
1235
|
+
self.readIdentifiable(child_element, prototype)
|
|
1236
|
+
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
1066
1237
|
|
|
1067
|
-
def
|
|
1238
|
+
def readCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
1068
1239
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
1069
1240
|
self.logger.debug("readDataTypeMappingSet")
|
|
1070
|
-
if child_element
|
|
1071
|
-
for ref in self.
|
|
1241
|
+
if child_element is not None:
|
|
1242
|
+
for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
1072
1243
|
parent.addDataTypeMapping(ref)
|
|
1073
1244
|
|
|
1074
|
-
def
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1245
|
+
def readCompositionSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1246
|
+
short_name = self.getShortName(element)
|
|
1247
|
+
self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
|
|
1248
|
+
|
|
1249
|
+
sw_component = parent.createCompositionSwComponentType(short_name)
|
|
1250
|
+
self.readIdentifiable(element, sw_component)
|
|
1251
|
+
self.readSwComponentType(element, sw_component)
|
|
1252
|
+
self.readSwComponentPrototypes(element, sw_component)
|
|
1253
|
+
self.readAssemblySwConnectors(element, sw_component)
|
|
1254
|
+
self.readDelegationSwConnectors(element, sw_component)
|
|
1255
|
+
self.readCompositionSwComponentTypeDataTypeMappingSet(element, sw_component)
|
|
1078
1256
|
|
|
1079
|
-
|
|
1080
|
-
self.readIdentifiable(child_element, sw_component)
|
|
1081
|
-
self.readSwComponentType(child_element, sw_component)
|
|
1082
|
-
self.readSwComponentPrototypes(child_element, sw_component)
|
|
1083
|
-
self.readAssemblySwConnectors(child_element, sw_component)
|
|
1084
|
-
self.readDelegationSwConnectors(child_element, sw_component)
|
|
1085
|
-
self.readDataTypeMappingSet(child_element, sw_component)
|
|
1257
|
+
self.logger.debug("ReadCompositionSwComponentTypes: <%s> (Done)" % short_name)
|
|
1086
1258
|
|
|
1087
|
-
def
|
|
1259
|
+
def readDataTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
1088
1260
|
for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
|
|
1089
1261
|
data_type_map = DataTypeMap()
|
|
1090
|
-
|
|
1091
|
-
data_type_map.
|
|
1262
|
+
self.readElementAttributes(child_element, data_type_map)
|
|
1263
|
+
data_type_map.application_data_type_ref = self.getChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF")
|
|
1264
|
+
data_type_map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
1092
1265
|
parent.addDataTypeMap(data_type_map)
|
|
1093
1266
|
# add the data type map to global namespace
|
|
1094
1267
|
AUTOSAR.getInstance().addDataTypeMap(data_type_map)
|
|
1095
1268
|
|
|
1096
|
-
def
|
|
1097
|
-
for child_element in element.findall("./xmlns:
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
self.
|
|
1101
|
-
|
|
1102
|
-
|
|
1269
|
+
def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
1270
|
+
for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
|
|
1271
|
+
map = ModeRequestTypeMap()
|
|
1272
|
+
map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
1273
|
+
map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
|
|
1274
|
+
parent.addModeRequestTypeMap(map)
|
|
1275
|
+
|
|
1276
|
+
def readDataTypeMappingSet(self, element: ET.Element, parent: ARPackage):
|
|
1277
|
+
short_name = self.getShortName(element)
|
|
1278
|
+
mapping_set = parent.createDataTypeMappingSet(short_name)
|
|
1279
|
+
self.readIdentifiable(element, mapping_set)
|
|
1280
|
+
self.readDataTypeMaps(element, mapping_set)
|
|
1281
|
+
self.readModeRequestTypeMaps(element, mapping_set)
|
|
1282
|
+
|
|
1283
|
+
def readDataElements(self, element: ET.Element, parent: SenderReceiverInterface):
|
|
1103
1284
|
for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
1104
|
-
short_name = self.
|
|
1285
|
+
short_name = self.getShortName(child_element)
|
|
1105
1286
|
prototype = parent.createDataElement(short_name)
|
|
1106
|
-
self.
|
|
1107
|
-
prototype.
|
|
1287
|
+
self.readIdentifiable(child_element, prototype)
|
|
1288
|
+
prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
1289
|
+
self.readAutosarDataPrototype(child_element, prototype)
|
|
1290
|
+
prototype.init_value = self.getInitValue(child_element)
|
|
1108
1291
|
|
|
1109
1292
|
def readSenderReceiverInterfaces(self, element, parent: ARPackage):
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1293
|
+
short_name = self.getShortName(element)
|
|
1294
|
+
sr_interface = parent.createSenderReceiverInterface(short_name)
|
|
1295
|
+
self.readIdentifiable(element, sr_interface)
|
|
1296
|
+
sr_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
|
|
1297
|
+
self.readDataElements(element, sr_interface)
|
|
1114
1298
|
|
|
1115
1299
|
def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
|
|
1116
1300
|
for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
|
|
1117
|
-
short_name = self.
|
|
1301
|
+
short_name = self.getShortName(child_element)
|
|
1118
1302
|
prototype = ArgumentDataPrototype(property, short_name)
|
|
1119
|
-
prototype.type_tref = self.
|
|
1120
|
-
prototype.direction = self.
|
|
1303
|
+
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
1304
|
+
prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
|
|
1121
1305
|
parent.addArgumentDataPrototype(prototype)
|
|
1122
1306
|
|
|
1123
1307
|
def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
|
|
1124
1308
|
child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
|
|
1125
|
-
if child_element
|
|
1126
|
-
for ref in self.
|
|
1309
|
+
if child_element is not None:
|
|
1310
|
+
for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
|
|
1127
1311
|
parent.addPossibleErrorRef(ref)
|
|
1128
1312
|
|
|
1129
1313
|
def readOperations(self, element: ET.Element, parent: ClientServerInterface):
|
|
1130
1314
|
for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
|
|
1131
|
-
short_name = self.
|
|
1315
|
+
short_name = self.getShortName(child_element)
|
|
1132
1316
|
operation = parent.createOperation(short_name)
|
|
1133
1317
|
self.readArgumentDataPrototypes(child_element, operation)
|
|
1134
1318
|
self.readPossibleErrorRefs(child_element, operation)
|
|
1135
1319
|
|
|
1136
1320
|
def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
|
|
1137
1321
|
for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
|
|
1138
|
-
short_name = self.
|
|
1322
|
+
short_name = self.getShortName(child_element)
|
|
1139
1323
|
error = parent.createApplicationError(short_name)
|
|
1140
|
-
error.error_code = self.
|
|
1324
|
+
error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
|
|
1325
|
+
|
|
1326
|
+
def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
|
|
1327
|
+
port_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
|
|
1328
|
+
port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
|
|
1141
1329
|
|
|
1142
|
-
def
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
self.readPossibleErrors(child_element, cs_interface)
|
|
1330
|
+
def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
|
|
1331
|
+
short_name = self.getShortName(element)
|
|
1332
|
+
cs_interface = parent.createClientServerInterface(short_name)
|
|
1333
|
+
self.readPortInterface(element, cs_interface)
|
|
1334
|
+
self.readOperations(element, cs_interface)
|
|
1335
|
+
self.readPossibleErrors(element, cs_interface)
|
|
1149
1336
|
|
|
1150
1337
|
def readCompuConst(self, element: ET.Element, parent: CompuScale):
|
|
1151
1338
|
child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
|
|
@@ -1154,8 +1341,9 @@ class ARXMLParser:
|
|
|
1154
1341
|
contents = CompuScaleConstantContents()
|
|
1155
1342
|
contents.compu_const = CompuConst()
|
|
1156
1343
|
contents.compu_const.compu_const_content_type = CompuConstTextContent()
|
|
1157
|
-
contents.compu_const.compu_const_content_type.vt =
|
|
1158
|
-
|
|
1344
|
+
contents.compu_const.compu_const_content_type.vt = ARLiteral()
|
|
1345
|
+
contents.compu_const.compu_const_content_type.vt.setValue(child_element.text)
|
|
1346
|
+
parent.compuScaleContents = contents
|
|
1159
1347
|
|
|
1160
1348
|
def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
|
|
1161
1349
|
for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
|
|
@@ -1172,7 +1360,7 @@ class ARXMLParser:
|
|
|
1172
1360
|
contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
|
|
1173
1361
|
self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
|
|
1174
1362
|
self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
|
|
1175
|
-
parent.
|
|
1363
|
+
parent.compuScaleContents = contents
|
|
1176
1364
|
|
|
1177
1365
|
def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
|
|
1178
1366
|
self.readCompuConst(element, parent)
|
|
@@ -1181,165 +1369,446 @@ class ARXMLParser:
|
|
|
1181
1369
|
def readCompuScales(self, element: ET.Element, parent: CompuScales):
|
|
1182
1370
|
for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
|
|
1183
1371
|
compu_scale = CompuScale()
|
|
1184
|
-
|
|
1185
|
-
compu_scale.
|
|
1372
|
+
self.readElementAttributes(child_element, compu_scale)
|
|
1373
|
+
compu_scale.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
1374
|
+
compu_scale.lowerLimit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1375
|
+
compu_scale.upperLimit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1186
1376
|
self.readCompuScaleContents(child_element, compu_scale)
|
|
1187
1377
|
parent.addCompuScale(compu_scale)
|
|
1188
1378
|
|
|
1189
1379
|
def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
|
|
1190
1380
|
child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
|
|
1191
|
-
if (child_element
|
|
1381
|
+
if (child_element is not None):
|
|
1192
1382
|
parent.compu_internal_to_phys = Compu()
|
|
1193
1383
|
self.readElementAttributes(child_element, parent.compu_internal_to_phys)
|
|
1194
1384
|
parent.compu_internal_to_phys.compu_content = CompuScales()
|
|
1195
1385
|
self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
|
|
1196
1386
|
|
|
1197
|
-
def
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
self.readCompuInternalToPhys(child_element, compu_method)
|
|
1387
|
+
def readCompuMethod(self, element: ET.Element, parent: ARPackage):
|
|
1388
|
+
short_name = self.getShortName(element)
|
|
1389
|
+
self.logger.debug("readCompuMethods %s" % short_name)
|
|
1390
|
+
compu_method = parent.createCompuMethod(short_name)
|
|
1391
|
+
self.readIdentifiable(element, compu_method)
|
|
1392
|
+
compu_method.unit_ref = self.getChildElementOptionalRefType(element, "UNIT-REF")
|
|
1393
|
+
self.readCompuInternalToPhys(element, compu_method)
|
|
1205
1394
|
|
|
1206
1395
|
def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
|
|
1207
1396
|
for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
|
|
1208
1397
|
mapping = SwcBswRunnableMapping()
|
|
1209
|
-
mapping.
|
|
1210
|
-
mapping.
|
|
1398
|
+
mapping.bswEntityRef = self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")
|
|
1399
|
+
mapping.swcRunnableRef = self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF")
|
|
1211
1400
|
parent.addRunnableMapping(mapping)
|
|
1212
1401
|
|
|
1213
1402
|
def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
|
|
1403
|
+
short_name = self.getShortName(element)
|
|
1404
|
+
self.logger.debug("readSwcBswMappings %s" % short_name)
|
|
1405
|
+
swc_bsw_mapping = parent.createSwcBswMapping(short_name)
|
|
1406
|
+
swc_bsw_mapping.bswBehaviorRef = self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF")
|
|
1407
|
+
self.readSwcBswRunnableMappings(element, swc_bsw_mapping)
|
|
1408
|
+
swc_bsw_mapping.swcBehaviorRef = self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF")
|
|
1221
1409
|
|
|
1222
1410
|
def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
|
|
1227
|
-
if child_element is not None:
|
|
1228
|
-
sw_value_cont = SwValueCont()
|
|
1229
|
-
sw_value_cont.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
|
|
1230
|
-
sw_value_cont.sw_values_phys = self.readSwValues(child_element, "SW-VALUES-PHYS")
|
|
1231
|
-
spec.sw_value_cont = sw_value_cont
|
|
1411
|
+
self.readElementAttributes(element, value_spec)
|
|
1412
|
+
value_spec.short_label = self.getChildElementOptionalLiteral(element, "SHORT-LABEL")
|
|
1413
|
+
self.logger.debug("readValueSpecification")
|
|
1232
1414
|
|
|
1233
|
-
def
|
|
1415
|
+
def getApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
|
|
1416
|
+
self.logger.debug("getApplicationValueSpecification")
|
|
1234
1417
|
value_spec = ApplicationValueSpecification()
|
|
1235
1418
|
self.readValueSpecification(element, value_spec)
|
|
1236
|
-
value_spec.category = self.
|
|
1237
|
-
self.
|
|
1419
|
+
value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
1420
|
+
value_spec.sw_value_cont = self.getSwValueCont(element)
|
|
1421
|
+
return value_spec
|
|
1422
|
+
|
|
1423
|
+
def getNumericalValueSpecification(self, element: ET.Element) -> NumericalValueSpecification:
|
|
1424
|
+
self.logger.debug("getNumericalValueSpecification")
|
|
1425
|
+
value_spec = NumericalValueSpecification()
|
|
1426
|
+
self.readValueSpecification(element, value_spec)
|
|
1427
|
+
value_spec.value = self.getChildElementOptionalFloatValue(element, "VALUE")
|
|
1428
|
+
return value_spec
|
|
1429
|
+
|
|
1430
|
+
def getTextValueSpecification(self, element: ET.Element) -> TextValueSpecification:
|
|
1431
|
+
self.logger.debug("getTextValueSpecification")
|
|
1432
|
+
value_spec = TextValueSpecification()
|
|
1433
|
+
self.readValueSpecification(element, value_spec)
|
|
1434
|
+
value_spec.value = self.getChildElementOptionalLiteral(element, "VALUE")
|
|
1435
|
+
return value_spec
|
|
1436
|
+
|
|
1437
|
+
def getArrayValueSpecification(self, element: ET.Element) -> ArrayValueSpecification:
|
|
1438
|
+
self.logger.debug("getArrayValueSpecification")
|
|
1439
|
+
value_spec = ArrayValueSpecification()
|
|
1440
|
+
self.readValueSpecification(element, value_spec)
|
|
1441
|
+
child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
|
|
1442
|
+
for child_element in child_elements:
|
|
1443
|
+
value_spec.add_element(self.getValueSpecification(child_element))
|
|
1444
|
+
return value_spec
|
|
1445
|
+
|
|
1446
|
+
def getConstantReference(self, element: ET.Element) -> ConstantReference:
|
|
1447
|
+
self.logger.debug("getConstantReference")
|
|
1448
|
+
value_spec = ConstantReference()
|
|
1449
|
+
self.readValueSpecification(element, value_spec)
|
|
1450
|
+
value_spec.constant_ref = self.getChildElementOptionalRefType(element, "CONSTANT-REF")
|
|
1451
|
+
return value_spec
|
|
1452
|
+
|
|
1453
|
+
def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
|
|
1454
|
+
tag_name = self.getTagName(element.tag)
|
|
1455
|
+
if tag_name == "APPLICATION-VALUE-SPECIFICATION":
|
|
1456
|
+
value_spec = self.getApplicationValueSpecification(element)
|
|
1457
|
+
elif tag_name == "RECORD-VALUE-SPECIFICATION":
|
|
1458
|
+
value_spec = self.getRecordValueSpecification(element)
|
|
1459
|
+
elif tag_name == "NUMERICAL-VALUE-SPECIFICATION":
|
|
1460
|
+
value_spec = self.getNumericalValueSpecification(element)
|
|
1461
|
+
elif tag_name == "ARRAY-VALUE-SPECIFICATION":
|
|
1462
|
+
value_spec = self.getArrayValueSpecification(element)
|
|
1463
|
+
elif tag_name == "TEXT-VALUE-SPECIFICATION":
|
|
1464
|
+
value_spec = self.getTextValueSpecification(element)
|
|
1465
|
+
elif tag_name == "CONSTANT-REFERENCE":
|
|
1466
|
+
value_spec = self.getConstantReference(element)
|
|
1467
|
+
else:
|
|
1468
|
+
raise NotImplementedError("Unsupported RecordValueSpecificationField %s" % tag_name)
|
|
1238
1469
|
return value_spec
|
|
1239
1470
|
|
|
1240
1471
|
def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
|
|
1241
1472
|
for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
|
|
1242
|
-
|
|
1243
|
-
value_spec = self.readApplicationValueSpecification(child_element)
|
|
1244
|
-
elif child_element.tag == "{http://autosar.org/schema/r4.0}RECORD-VALUE-SPECIFICATION":
|
|
1245
|
-
value_spec = self.readRecordValueSpecification(child_element)
|
|
1246
|
-
else:
|
|
1247
|
-
raise NotImplementedError("Unsupported VALUE-SPEC %s" % child_element.tag)
|
|
1248
|
-
spec.add_field(value_spec)
|
|
1473
|
+
spec.add_field(self.getValueSpecification(child_element))
|
|
1249
1474
|
|
|
1250
|
-
def
|
|
1475
|
+
def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
|
|
1251
1476
|
value_spec = RecordValueSpecification()
|
|
1252
1477
|
self.readValueSpecification(element, value_spec)
|
|
1253
1478
|
self.readRecordValueSpecificationFields(element, value_spec)
|
|
1254
1479
|
return value_spec
|
|
1255
1480
|
|
|
1256
1481
|
def readConstantSpecification(self, element: ET.Element, parent: ARPackage):
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
if value_spec_tag.tag == "{http://autosar.org/schema/r4.0}APPLICATION-VALUE-SPECIFICATION":
|
|
1264
|
-
spec.value_spec = self.readApplicationValueSpecification(value_spec_tag)
|
|
1265
|
-
elif value_spec_tag.tag == "{http://autosar.org/schema/r4.0}RECORD-VALUE-SPECIFICATION":
|
|
1266
|
-
spec.value_spec = self.readRecordValueSpecification(value_spec_tag)
|
|
1267
|
-
else:
|
|
1268
|
-
raise NotImplementedError("Unsupported VALUE-SPEC %s" % value_spec_tag.tag)
|
|
1482
|
+
short_name = self.getShortName(element)
|
|
1483
|
+
self.logger.debug("readConstantSpecification %s" % short_name)
|
|
1484
|
+
spec = parent.createConstantSpecification(short_name)
|
|
1485
|
+
self.readIdentifiable(element, spec)
|
|
1486
|
+
for value_spec_tag in element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
|
|
1487
|
+
spec.value_spec = self.getValueSpecification(value_spec_tag)
|
|
1269
1488
|
|
|
1270
1489
|
def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
|
|
1271
1490
|
child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
|
|
1272
1491
|
if child_element is not None:
|
|
1273
1492
|
constrs = InternalConstrs()
|
|
1274
|
-
|
|
1275
|
-
constrs.
|
|
1276
|
-
|
|
1493
|
+
self.readElementAttributes(child_element, constrs)
|
|
1494
|
+
constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1495
|
+
constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1496
|
+
parent.internalConstrs = constrs
|
|
1277
1497
|
|
|
1278
1498
|
def readPhysConstrs(self, element: ET.Element, parent: DataConstrRule):
|
|
1279
1499
|
child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
|
|
1280
1500
|
if child_element is not None:
|
|
1281
1501
|
constrs = PhysConstrs()
|
|
1282
|
-
|
|
1283
|
-
constrs.
|
|
1284
|
-
constrs.
|
|
1285
|
-
|
|
1502
|
+
self.readElementAttributes(child_element, constrs)
|
|
1503
|
+
constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1504
|
+
constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1505
|
+
constrs.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
|
|
1506
|
+
parent.physConstrs = constrs
|
|
1286
1507
|
|
|
1287
1508
|
def readDataConstrRule(self, element: ET.Element, parent: DataConstr):
|
|
1288
1509
|
for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
|
|
1289
1510
|
self.logger.debug("readDataConstrRule")
|
|
1290
1511
|
rule = DataConstrRule()
|
|
1512
|
+
self.readElementAttributes(child_element, rule)
|
|
1513
|
+
rule.constrLevel = self.getChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL")
|
|
1291
1514
|
self.readInternalConstrs(child_element, rule)
|
|
1292
1515
|
self.readPhysConstrs(child_element, rule)
|
|
1293
1516
|
parent.addDataConstrRule(rule)
|
|
1294
1517
|
|
|
1295
1518
|
def readDataConstr(self, element: ET.Element, parent: ARPackage):
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
self.readDataConstrRule(child_element, constr)
|
|
1519
|
+
short_name = self.getShortName(element)
|
|
1520
|
+
self.logger.debug("readDataConstr %s" % short_name)
|
|
1521
|
+
constr = parent.createDataConstr(short_name)
|
|
1522
|
+
self.readIdentifiable(element, constr)
|
|
1523
|
+
self.readDataConstrRule(element, constr)
|
|
1302
1524
|
|
|
1303
1525
|
def readUnit(self, element: ET.Element, parent: ARPackage):
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1526
|
+
short_name = self.getShortName(element)
|
|
1527
|
+
self.logger.debug("readUnit %s" % short_name)
|
|
1528
|
+
unit = parent.createUnit(short_name)
|
|
1529
|
+
self.readIdentifiable(element, unit)
|
|
1530
|
+
unit.display_name = self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")
|
|
1531
|
+
|
|
1532
|
+
def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
|
|
1533
|
+
child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
|
|
1534
|
+
if child_element is not None:
|
|
1535
|
+
for value in self.getChildElementNumericalValueList(child_element, "DATA-ID"):
|
|
1536
|
+
parent.addDataId(value)
|
|
1537
|
+
|
|
1538
|
+
def getEndToEndDescription(self, element: ET.Element, key: str) -> EndToEndDescription:
|
|
1539
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
1540
|
+
desc = None
|
|
1541
|
+
if (child_element is not None):
|
|
1542
|
+
desc = EndToEndDescription()
|
|
1543
|
+
desc.category = self.getChildElementOptionalLiteral(child_element, "CATEGORY")
|
|
1544
|
+
self.readEndToEndDescriptionDataId(child_element, desc)
|
|
1545
|
+
desc.dataIdMode = self.getChildElementOptionalNumericalValue(child_element, "DATA-ID-MODE")
|
|
1546
|
+
desc.maxDeltaCounterInit = self.getChildElementOptionalNumericalValue(child_element, "MAX-DELTA-COUNTER-INIT")
|
|
1547
|
+
desc.crcOffset = self.getChildElementOptionalNumericalValue(child_element, "CRC-OFFSET")
|
|
1548
|
+
desc.counterOffset = self.getChildElementOptionalNumericalValue(child_element, "COUNTER-OFFSET")
|
|
1549
|
+
return desc
|
|
1550
|
+
|
|
1551
|
+
def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
|
|
1552
|
+
iref = VariableDataPrototypeInSystemInstanceRef()
|
|
1553
|
+
iref.contextComponentRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1554
|
+
iref.contextCompositionRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
|
|
1555
|
+
iref.contextPortRef = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
|
|
1556
|
+
iref.targetDataPrototypeRef = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
|
|
1557
|
+
return iref
|
|
1558
|
+
|
|
1559
|
+
def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
|
|
1560
|
+
prototype = EndToEndProtectionVariablePrototype()
|
|
1561
|
+
for child_element in element.findall("./xmlns:RECEIVER-IREFS/xmlns:RECEIVER-IREF", self.nsmap):
|
|
1562
|
+
prototype.addReceiverIref(self.getVariableDataPrototypeInSystemInstanceRef(child_element))
|
|
1563
|
+
child_element = element.find("./xmlns:SENDER-IREF", self.nsmap)
|
|
1564
|
+
if child_element is not None:
|
|
1565
|
+
prototype.senderIRef = self.getVariableDataPrototypeInSystemInstanceRef(child_element)
|
|
1566
|
+
return prototype
|
|
1567
|
+
|
|
1568
|
+
def readEndToEndProtectionVariablePrototypes(self, element: ET.Element, parent: EndToEndProtection):
|
|
1569
|
+
for child_element in element.findall("./xmlns:END-TO-END-PROTECTION-VARIABLE-PROTOTYPES/*", self.nsmap):
|
|
1570
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1571
|
+
if tag_name == "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE":
|
|
1572
|
+
parent.addEndToEndProtectionVariablePrototype(self.getEndToEndProtectionVariablePrototype(child_element))
|
|
1573
|
+
else:
|
|
1574
|
+
self._raiseError("Unsupported End To End Protection Variable Prototype <%s>" % tag_name)
|
|
1575
|
+
|
|
1576
|
+
def readEndToEndProtection(self, element: ET.Element, parent: EndToEndProtectionSet):
|
|
1577
|
+
short_name = self.getShortName(element)
|
|
1578
|
+
self.logger.debug("readEndToEndProtection %s" % short_name)
|
|
1579
|
+
protection = parent.createEndToEndProtection(short_name)
|
|
1580
|
+
self.readIdentifiable(element, protection)
|
|
1581
|
+
protection.endToEndProfile = self.getEndToEndDescription(element, "END-TO-END-PROFILE")
|
|
1582
|
+
self.readEndToEndProtectionVariablePrototypes(element, protection)
|
|
1583
|
+
|
|
1584
|
+
def readEndToEndProtections(self, element: ET.Element, parent: EndToEndProtectionSet):
|
|
1585
|
+
for child_element in element.findall("./xmlns:END-TO-END-PROTECTIONS/*", self.nsmap):
|
|
1586
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1587
|
+
if tag_name == "END-TO-END-PROTECTION":
|
|
1588
|
+
self.readEndToEndProtection(child_element, parent)
|
|
1589
|
+
|
|
1590
|
+
def readEndToEndProtectionSet(self, element: ET.Element, parent: ARPackage):
|
|
1591
|
+
short_name = self.getShortName(element)
|
|
1592
|
+
self.logger.debug("readEndToEndProtectionSet %s" % short_name)
|
|
1593
|
+
protection_set = parent.createEndToEndProtectionSet(short_name)
|
|
1594
|
+
self.readEndToEndProtections(element, protection_set)
|
|
1595
|
+
|
|
1596
|
+
def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
|
|
1597
|
+
self.readIdentifiable(element, data_type)
|
|
1598
|
+
data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
|
|
1599
|
+
|
|
1600
|
+
def readApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
|
|
1601
|
+
self.readAutosarDataType(element, data_type)
|
|
1602
|
+
|
|
1603
|
+
def readApplicationCompositeDataType(self, element: ET.Element, data_type: ApplicationCompositeDataType):
|
|
1604
|
+
self.readApplicationDataType(element, data_type)
|
|
1605
|
+
|
|
1606
|
+
def readDataPrototype(self, element: ET.Element, prototype: DataPrototype):
|
|
1607
|
+
self.readIdentifiable(element, prototype)
|
|
1608
|
+
|
|
1609
|
+
def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
|
|
1610
|
+
self.readDataPrototype(element, prototype)
|
|
1611
|
+
prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
1612
|
+
|
|
1613
|
+
def readApplicationArrayElement(self, element: ET.Element, parent: ApplicationArrayDataType):
|
|
1614
|
+
child_element = element.find("./xmlns:ELEMENT", self.nsmap)
|
|
1615
|
+
if child_element is not None:
|
|
1616
|
+
short_name = self.getShortName(child_element)
|
|
1617
|
+
self.logger.debug("readApplicationArrayElement %s" % short_name)
|
|
1618
|
+
array_element = parent.createApplicationArrayElement(short_name)
|
|
1619
|
+
self.readApplicationCompositeElementDataPrototype(child_element, array_element)
|
|
1620
|
+
array_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
|
|
1621
|
+
array_element.setMaxNumberOfElements(self.getChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS"))
|
|
1622
|
+
|
|
1623
|
+
def readApplicationArrayDataType(self, element: ET.Element, parent: ARPackage):
|
|
1624
|
+
short_name = self.getShortName(element)
|
|
1625
|
+
self.logger.debug("readApplicationArrayDataType %s" % short_name)
|
|
1626
|
+
data_type = parent.createApplicationArrayDataType(short_name)
|
|
1627
|
+
self.readApplicationCompositeDataType(element, data_type)
|
|
1628
|
+
self.readApplicationArrayElement(element, data_type)
|
|
1629
|
+
|
|
1630
|
+
def getSwRecordLayoutV(self, element: ET.Element, key: str) -> SwRecordLayoutV:
|
|
1631
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
1632
|
+
layout_v = None
|
|
1633
|
+
if child_element is not None:
|
|
1634
|
+
layout_v = SwRecordLayoutV()
|
|
1635
|
+
layout_v.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
1636
|
+
.setBaseTypeRef(self.getChildElementOptionalRefType(child_element, "BASE-TYPE-REF")) \
|
|
1637
|
+
.setSwRecordLayoutVAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
|
|
1638
|
+
.setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
|
|
1639
|
+
.setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
|
|
1640
|
+
return layout_v
|
|
1641
|
+
|
|
1642
|
+
def getSwRecordLayoutGroup(self, element: ET.Element, key: str) -> SwRecordLayoutGroup:
|
|
1643
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
1644
|
+
group = None
|
|
1645
|
+
if child_element is not None:
|
|
1646
|
+
group = SwRecordLayoutGroup()
|
|
1647
|
+
group.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
1648
|
+
.setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY")) \
|
|
1649
|
+
.setSwRecordLayoutGroupAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
|
|
1650
|
+
.setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
|
|
1651
|
+
.setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
|
|
1652
|
+
.setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO")) \
|
|
1653
|
+
|
|
1654
|
+
group_content = SwRecordLayoutGroupContent()
|
|
1655
|
+
group_content.swRecordLayoutGroup = self.getSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP")
|
|
1656
|
+
group_content.swRecordLayoutV = self.getSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V")
|
|
1657
|
+
|
|
1658
|
+
if group_content.swRecordLayoutGroup is not None:
|
|
1659
|
+
group.setSwRecordLayoutGroupContentType(group_content)
|
|
1660
|
+
elif group_content.swRecordLayoutV is not None:
|
|
1661
|
+
group.setSwRecordLayoutGroupContentType(group_content)
|
|
1662
|
+
|
|
1663
|
+
return group
|
|
1664
|
+
|
|
1665
|
+
def readSwRecordLayout(self, element: ET.Element, parent: ARPackage):
|
|
1666
|
+
short_name = self.getShortName(element)
|
|
1667
|
+
self.logger.debug("readSwRecordLayout %s" % short_name)
|
|
1668
|
+
layout = parent.createSwRecordLayout(short_name)
|
|
1669
|
+
self.readIdentifiable(element, layout)
|
|
1670
|
+
layout.setSwRecordLayoutGroup(self.getSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP"))
|
|
1671
|
+
|
|
1672
|
+
def readSwAddrMethod(self, element: ET.Element, parent: ARPackage):
|
|
1673
|
+
short_name = self.getShortName(element)
|
|
1674
|
+
self.logger.debug("readSwAddrMethod %s" % short_name)
|
|
1675
|
+
layout = parent.createSwAddrMethod(short_name)
|
|
1676
|
+
|
|
1677
|
+
def readTriggerInterface(self, element: ET.Element, parent: ARPackage):
|
|
1678
|
+
short_name = self.getShortName(element)
|
|
1679
|
+
self.logger.debug("readTriggerInterface %s" % short_name)
|
|
1680
|
+
trigger_if = parent.createTriggerInterface(short_name)
|
|
1681
|
+
|
|
1682
|
+
def readModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
|
|
1683
|
+
for child_element in element.findall("./xmlns:MODE-DECLARATIONS/xmlns:MODE-DECLARATION", self.nsmap):
|
|
1684
|
+
short_name = self.getShortName(child_element)
|
|
1685
|
+
declaration = parent.createModeDeclaration(short_name)
|
|
1686
|
+
declaration.setValue(self.getChildElementOptionalNumericalValue(child_element, "VALUE"))
|
|
1687
|
+
|
|
1688
|
+
def readModeDeclarationGroup(self, element: ET.Element, parent: ARPackage):
|
|
1689
|
+
short_name = self.getShortName(element)
|
|
1690
|
+
self.logger.debug("readModeDeclarationGroup %s" % short_name)
|
|
1691
|
+
group = parent.createModeDeclarationGroup(short_name)
|
|
1692
|
+
self.readIdentifiable(element, group)
|
|
1693
|
+
self.readModeDeclarationGroupModeDeclaration(element, group)
|
|
1694
|
+
group.setInitialModeRef(self.getChildElementOptionalRefType(element, "INITIAL-MODE-REF"))
|
|
1695
|
+
group.setOnTransitionValue(self.getChildElementOptionalNumericalValue(element, "ON-TRANSITION-VALUE"))
|
|
1696
|
+
|
|
1697
|
+
def readModeSwitchInterfaceModeGroup(self, element: ET.Element, parent: ModeSwitchInterface):
|
|
1698
|
+
child_element = self.find(element, "MODE-GROUP")
|
|
1699
|
+
if child_element is not None:
|
|
1700
|
+
short_name = self.getShortName(child_element)
|
|
1701
|
+
mode_group = parent.createModeGroup(short_name)
|
|
1702
|
+
self.readIdentifiable(child_element, mode_group)
|
|
1703
|
+
mode_group.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
1704
|
+
|
|
1705
|
+
def readModeSwitchInterface(self, element: ET.Element, parent: ARPackage):
|
|
1706
|
+
short_name = self.getShortName(element)
|
|
1707
|
+
self.logger.debug("readModeSwitchInterface %s" % short_name)
|
|
1708
|
+
mode_interface = parent.createModeSwitchInterface(short_name)
|
|
1709
|
+
self.readPortInterface(element, mode_interface)
|
|
1710
|
+
self.readModeSwitchInterfaceModeGroup(element, mode_interface)
|
|
1711
|
+
|
|
1712
|
+
def readARPackageElements(self, element: ET.Element, parent: ARPackage):
|
|
1713
|
+
for child_element in self.findall(element, "./ELEMENTS/*"):
|
|
1714
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1715
|
+
if tag_name == "COMPOSITION-SW-COMPONENT-TYPE":
|
|
1716
|
+
self.readCompositionSwComponentType(child_element, parent)
|
|
1717
|
+
elif tag_name == "COMPLEX-DEVICE-DRIVER-SW-COMPONENT-TYPE":
|
|
1718
|
+
self.readComplexDeviceDriverSwComponentType(child_element, parent)
|
|
1719
|
+
elif tag_name == "SWC-IMPLEMENTATION":
|
|
1720
|
+
self.readSwcImplementation(child_element, parent)
|
|
1721
|
+
elif tag_name == "APPLICATION-PRIMITIVE-DATA-TYPE":
|
|
1722
|
+
self.readApplicationPrimitiveDataType(child_element, parent)
|
|
1723
|
+
elif tag_name == "APPLICATION-RECORD-DATA-TYPE":
|
|
1724
|
+
self.readApplicationRecordDataTypes(child_element, parent)
|
|
1725
|
+
elif tag_name == "SW-BASE-TYPE":
|
|
1726
|
+
self.readSwBaseType(child_element, parent)
|
|
1727
|
+
elif tag_name == "COMPU-METHOD":
|
|
1728
|
+
self.readCompuMethod(child_element, parent)
|
|
1729
|
+
elif tag_name == "CONSTANT-SPECIFICATION":
|
|
1730
|
+
self.readConstantSpecification(child_element, parent)
|
|
1731
|
+
elif tag_name == "DATA-CONSTR":
|
|
1732
|
+
self.readDataConstr(child_element, parent)
|
|
1733
|
+
elif tag_name == "END-TO-END-PROTECTION-SET":
|
|
1734
|
+
self.readEndToEndProtectionSet(child_element, parent)
|
|
1735
|
+
elif tag_name == "SENDER-RECEIVER-INTERFACE":
|
|
1736
|
+
self.readSenderReceiverInterfaces(child_element, parent)
|
|
1737
|
+
elif tag_name == "UNIT":
|
|
1738
|
+
self.readUnit(child_element, parent)
|
|
1739
|
+
elif tag_name == "BSW-MODULE-DESCRIPTION":
|
|
1740
|
+
self.readBswModuleDescription(child_element, parent)
|
|
1741
|
+
elif tag_name == "BSW-MODULE-ENTRY":
|
|
1742
|
+
self.readBswModuleEntry(child_element, parent)
|
|
1743
|
+
elif tag_name == "SWC-BSW-MAPPING":
|
|
1744
|
+
self.readSwcBswMappings(child_element, parent)
|
|
1745
|
+
elif tag_name == "BSW-IMPLEMENTATION":
|
|
1746
|
+
self.readBswImplementation(child_element, parent)
|
|
1747
|
+
elif tag_name == "IMPLEMENTATION-DATA-TYPE":
|
|
1748
|
+
self.readImplementationDataType(child_element, parent)
|
|
1749
|
+
elif tag_name == "CLIENT-SERVER-INTERFACE":
|
|
1750
|
+
self.readClientServerInterface(child_element, parent)
|
|
1751
|
+
elif tag_name == "APPLICATION-SW-COMPONENT-TYPE":
|
|
1752
|
+
self.readApplicationSwComponentTypes(child_element, parent)
|
|
1753
|
+
elif tag_name == "ECU-ABSTRACTION-SW-COMPONENT-TYPE":
|
|
1754
|
+
self.readEcuAbstractionSwComponent(child_element, parent)
|
|
1755
|
+
elif tag_name == "APPLICATION-ARRAY-DATA-TYPE":
|
|
1756
|
+
self.readApplicationArrayDataType(child_element, parent)
|
|
1757
|
+
elif tag_name == "SW-RECORD-LAYOUT":
|
|
1758
|
+
self.readSwRecordLayout(child_element, parent)
|
|
1759
|
+
elif tag_name == "SW-ADDR-METHOD":
|
|
1760
|
+
self.readSwAddrMethod(child_element, parent)
|
|
1761
|
+
elif tag_name == "TRIGGER-INTERFACE":
|
|
1762
|
+
self.readTriggerInterface(child_element, parent)
|
|
1763
|
+
elif tag_name == "SERVICE-SW-COMPONENT-TYPE":
|
|
1764
|
+
self.readServiceSwComponentType(child_element, parent)
|
|
1765
|
+
elif tag_name == "SENSOR-ACTUATOR-SW-COMPONENT-TYPE":
|
|
1766
|
+
self.readSensorActuatorSwComponentType(child_element, parent)
|
|
1767
|
+
elif tag_name == "DATA-TYPE-MAPPING-SET":
|
|
1768
|
+
self.readDataTypeMappingSet(child_element, parent)
|
|
1769
|
+
elif tag_name == "MODE-DECLARATION-GROUP":
|
|
1770
|
+
self.readModeDeclarationGroup(child_element, parent)
|
|
1771
|
+
elif tag_name == "MODE-SWITCH-INTERFACE":
|
|
1772
|
+
self.readModeSwitchInterface(child_element, parent)
|
|
1773
|
+
elif tag_name == "SYSTEM":
|
|
1774
|
+
pass
|
|
1775
|
+
elif tag_name == "ECU-INSTANCE":
|
|
1776
|
+
pass
|
|
1777
|
+
elif tag_name == "GATEWAY":
|
|
1778
|
+
pass
|
|
1779
|
+
elif tag_name == "I-SIGNAL-I-PDU-GROUP":
|
|
1780
|
+
pass
|
|
1781
|
+
elif tag_name == "CAN-CLUSTER":
|
|
1782
|
+
pass
|
|
1783
|
+
elif tag_name == "CAN-FRAME":
|
|
1784
|
+
pass
|
|
1785
|
+
elif tag_name == "I-SIGNAL":
|
|
1786
|
+
pass
|
|
1787
|
+
elif tag_name == "I-SIGNAL-GROUP":
|
|
1788
|
+
pass
|
|
1789
|
+
elif tag_name == "I-SIGNAL-I-PDU":
|
|
1790
|
+
pass
|
|
1791
|
+
elif tag_name == "SYSTEM-SIGNAL":
|
|
1792
|
+
pass
|
|
1793
|
+
elif tag_name == "SYSTEM-SIGNAL-GROUP":
|
|
1794
|
+
pass
|
|
1795
|
+
else:
|
|
1796
|
+
self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
|
|
1797
|
+
#pass
|
|
1798
|
+
|
|
1799
|
+
|
|
1310
1800
|
|
|
1311
1801
|
def readARPackages(self, element: ET.Element, parent: ARPackage):
|
|
1312
1802
|
for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
|
|
1313
|
-
short_name = self.
|
|
1803
|
+
short_name = self.getShortName(child_element)
|
|
1314
1804
|
ar_package = parent.createARPackage(short_name)
|
|
1315
1805
|
|
|
1316
1806
|
self.logger.debug("readARPackages %s" % ar_package.full_name)
|
|
1317
1807
|
|
|
1318
|
-
self.
|
|
1319
|
-
|
|
1320
|
-
self.readSenderReceiverInterfaces(child_element, ar_package)
|
|
1321
|
-
self.readClientServerInterfaces(child_element, ar_package)
|
|
1322
|
-
self.readDataTypeMappingSets(child_element, ar_package)
|
|
1808
|
+
self.readIdentifiable(child_element, ar_package)
|
|
1809
|
+
self.readARPackageElements(child_element, ar_package)
|
|
1323
1810
|
self.readARPackages(child_element, ar_package)
|
|
1324
|
-
|
|
1325
|
-
self.readApplicationRecordDataTypes(child_element, ar_package)
|
|
1326
|
-
self.readImplementationDataTypes(child_element, ar_package)
|
|
1327
|
-
self.readSwBaseTypes(child_element, ar_package)
|
|
1328
|
-
self.readCompuMethods(child_element, ar_package)
|
|
1329
|
-
self.readEcuAbstractionSwComponents(child_element, ar_package)
|
|
1330
|
-
self.readApplicationSwComponentTypes(child_element, ar_package)
|
|
1331
|
-
self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
|
|
1332
|
-
self.readSensorActuatorSwComponentType(child_element, ar_package)
|
|
1333
|
-
self.readServiceSwComponentTypes(child_element, ar_package)
|
|
1334
|
-
self.readCompositionSwComponentTypes(child_element, ar_package)
|
|
1335
|
-
self.readBswModuleDescription(child_element, ar_package)
|
|
1336
|
-
self.readBswModuleEntry(child_element, ar_package)
|
|
1337
|
-
self.readSwcBswMappings(child_element, ar_package)
|
|
1338
|
-
self.readBswImplementation(child_element, ar_package)
|
|
1339
|
-
self.readSwcImplementation(child_element, ar_package)
|
|
1340
|
-
self.readConstantSpecification(child_element, ar_package)
|
|
1341
|
-
self.readDataConstr(child_element, ar_package)
|
|
1342
|
-
self.readUnit(child_element, ar_package)
|
|
1811
|
+
|
|
1343
1812
|
|
|
1344
1813
|
def load(self, filename, document: AUTOSAR):
|
|
1345
1814
|
self.logger.info("Load %s ..." % filename)
|
|
@@ -1349,4 +1818,5 @@ class ARXMLParser:
|
|
|
1349
1818
|
if (self.getPureTagName(root.tag) != "AUTOSAR"):
|
|
1350
1819
|
self._raiseError("Invalid ARXML file <%s>" % filename)
|
|
1351
1820
|
|
|
1821
|
+
self.getAUTOSARInfo(root, document)
|
|
1352
1822
|
self.readARPackages(root, document)
|