armodel 1.2.0__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- armodel/cli/arxml_dump_cli.py +8 -8
- armodel/cli/connector2xlsx_cli.py +75 -0
- armodel/cli/connector_update_cli.py +70 -0
- armodel/cli/swc_list_cli.py +81 -0
- armodel/lib/__init__.py +3 -0
- armodel/lib/cli_args_parser.py +36 -0
- armodel/lib/data_analyzer.py +34 -0
- armodel/lib/sw_component.py +34 -0
- armodel/models/__init__.py +6 -1
- armodel/models/ar_object.py +40 -1
- armodel/models/ar_package.py +35 -1
- armodel/models/ar_ref.py +12 -2
- armodel/models/bsw_module_template.py +3 -2
- armodel/models/calibration.py +16 -0
- armodel/models/common_structure.py +92 -0
- armodel/models/communication.py +8 -0
- armodel/models/datatype.py +23 -5
- armodel/models/general_structure.py +48 -3
- armodel/models/global_constraints.py +40 -0
- armodel/models/m2_msr.py +76 -2
- armodel/models/port_prototype.py +21 -16
- armodel/models/sw_component.py +49 -18
- armodel/models/unit.py +14 -0
- armodel/parser/arxml_parser.py +595 -151
- armodel/parser/excel_parser.py +0 -0
- armodel/report/__init__.py +1 -0
- armodel/report/connector_xls_report.py +76 -0
- armodel/report/excel_report.py +42 -0
- armodel/tests/__init__.py +0 -0
- armodel/tests/test_armodel/__init__.py +0 -0
- armodel/tests/test_armodel/models/__init__.py +0 -0
- armodel/tests/test_armodel/models/test_ar_package.py +294 -0
- armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
- armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
- armodel/tests/test_armodel/models/test_common_structure.py +73 -0
- armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
- armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
- armodel/tests/test_armodel/models/test_datatype.py +239 -0
- armodel/tests/test_armodel/models/test_general_structure.py +50 -0
- armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
- armodel/tests/test_armodel/models/test_port_interface.py +198 -0
- armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
- armodel/tests/test_armodel/parser/__init__.py +0 -0
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +168 -0
- armodel/writer/__init__.py +1 -0
- armodel/writer/arxml_writer.py +641 -0
- {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/METADATA +69 -5
- armodel-1.4.0.dist-info/RECORD +60 -0
- {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/WHEEL +1 -1
- armodel-1.4.0.dist-info/entry_points.txt +5 -0
- armodel-1.2.0.dist-info/RECORD +0 -27
- armodel-1.2.0.dist-info/entry_points.txt +0 -3
- {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/LICENSE +0 -0
- {armodel-1.2.0.dist-info → armodel-1.4.0.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from ..models.unit import Unit
|
|
2
|
+
from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
|
|
3
|
+
|
|
1
4
|
from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
|
|
2
5
|
from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
|
|
3
6
|
from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
|
|
@@ -7,14 +10,23 @@ from ..models import DataPrototype, RPortPrototype, PPortPrototype
|
|
|
7
10
|
from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec, QueuedReceiverComSpec
|
|
8
11
|
from ..models import SenderComSpec, NonqueuedSenderComSpec
|
|
9
12
|
from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
|
|
10
|
-
from ..models import AutosarDataType, ARElement
|
|
11
|
-
from ..models import AssemblySwConnector,
|
|
12
|
-
from ..models import
|
|
13
|
+
from ..models import AutosarDataType, ARElement, Identifiable, AdminData, Sdg, Sd, MultilanguageReferrable, Referrable, LLongName, MultilanguageLongName
|
|
14
|
+
from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
|
|
15
|
+
from ..models import DelegationSwConnector
|
|
16
|
+
from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
|
|
13
17
|
from ..models import InternalBehavior, ExecutableEntity
|
|
14
18
|
from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
|
|
19
|
+
from ..models import TransmissionAcknowledgementRequest
|
|
15
20
|
from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
|
|
21
|
+
from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
|
|
22
|
+
from ..models import ConstantSpecification, RecordValueSpecification
|
|
23
|
+
from ..models import ApplicationRecordDataType
|
|
24
|
+
from ..models import SwValueCont, SwValues
|
|
25
|
+
from ..models import ARBoolean, ARLiteral
|
|
26
|
+
from ..models import BaseType
|
|
16
27
|
|
|
17
28
|
from typing import List
|
|
29
|
+
from colorama import Fore
|
|
18
30
|
import xml.etree.ElementTree as ET
|
|
19
31
|
import re
|
|
20
32
|
import logging
|
|
@@ -24,6 +36,7 @@ class ARXMLParser:
|
|
|
24
36
|
self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
|
|
25
37
|
self.options = {}
|
|
26
38
|
self.options['warning'] = False
|
|
39
|
+
self.logger = logging.getLogger()
|
|
27
40
|
|
|
28
41
|
self._processOptions(options=options)
|
|
29
42
|
|
|
@@ -31,49 +44,73 @@ class ARXMLParser:
|
|
|
31
44
|
if options:
|
|
32
45
|
if 'warning' in options:
|
|
33
46
|
self.options['warning'] = options['warning']
|
|
34
|
-
|
|
35
47
|
|
|
36
48
|
def _raiseError(self, error_msg):
|
|
37
49
|
if (self.options['warning'] == True):
|
|
38
|
-
|
|
50
|
+
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
39
51
|
else:
|
|
40
52
|
raise ValueError(error_msg)
|
|
41
53
|
|
|
42
54
|
def getPureTagName(self, tag):
|
|
43
55
|
return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
|
|
44
56
|
|
|
45
|
-
def readChildElement(self, short_name: str, element, key: str) -> str:
|
|
57
|
+
def readChildElement(self, short_name: str, element: ET.Element, key: str) -> str:
|
|
46
58
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
47
59
|
if (child_element != None):
|
|
48
60
|
return child_element.text
|
|
49
61
|
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
50
62
|
|
|
51
|
-
def readChildOptionalElement(self, element, key) -> str:
|
|
63
|
+
def readChildOptionalElement(self, element: ET.Element, key: str) -> str:
|
|
52
64
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
53
65
|
if (child_element != None):
|
|
54
66
|
return child_element.text
|
|
55
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))
|
|
56
77
|
|
|
57
|
-
def
|
|
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:
|
|
58
89
|
if (value == "true"):
|
|
59
90
|
return True
|
|
60
91
|
return False
|
|
61
|
-
|
|
62
|
-
def readChildElementFloatValue(self, short_name, element, key) -> float:
|
|
92
|
+
|
|
93
|
+
def readChildElementFloatValue(self, short_name: str, element: ET.Element, key: str) -> float:
|
|
63
94
|
value = self.readChildElement(short_name, element, key)
|
|
64
95
|
if (value == None):
|
|
65
96
|
return None
|
|
66
97
|
return float(value)
|
|
67
98
|
|
|
68
|
-
def readChildElementBooleanValue(self, short_name, element, key) ->
|
|
69
|
-
|
|
70
|
-
|
|
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
|
|
71
105
|
|
|
72
|
-
def readChildOptionalElementBooleanValue(self, element, key) ->
|
|
73
|
-
|
|
74
|
-
if (
|
|
106
|
+
def readChildOptionalElementBooleanValue(self, element: ET.Element, key: str) -> ARBoolean:
|
|
107
|
+
literal = self.readChildOptionalElementLiteral(element, key)
|
|
108
|
+
if (literal == None):
|
|
75
109
|
return None
|
|
76
|
-
|
|
110
|
+
bool_value = ARBoolean()
|
|
111
|
+
bool_value.timestamp = literal.timestamp
|
|
112
|
+
bool_value.value = self._convertStringToBooleanValue(literal.value)
|
|
113
|
+
return bool_value
|
|
77
114
|
|
|
78
115
|
def _convertStringToNumberValue(self, value) -> int:
|
|
79
116
|
m = re.match(r"0x([0-9a-f]+)", value, re.I)
|
|
@@ -81,17 +118,17 @@ class ARXMLParser:
|
|
|
81
118
|
return int(m.group(1), 16)
|
|
82
119
|
return int(value)
|
|
83
120
|
|
|
84
|
-
def readChildElementNumberValue(self, short_name, element, key) -> int:
|
|
121
|
+
def readChildElementNumberValue(self, short_name: str, element: ET.Element, key: str) -> int:
|
|
85
122
|
value = self.readChildElement(short_name, element, key)
|
|
86
123
|
return self._convertStringToNumberValue(value)
|
|
87
124
|
|
|
88
|
-
def readChildOptionalElementNumberValue(self, element, key) -> int:
|
|
125
|
+
def readChildOptionalElementNumberValue(self, element: ET.Element, key: str) -> int:
|
|
89
126
|
value = self.readChildOptionalElement(element, key)
|
|
90
127
|
if (value == None):
|
|
91
128
|
return None
|
|
92
129
|
return self._convertStringToNumberValue(value)
|
|
93
130
|
|
|
94
|
-
def readChildLimitElement(self, element, key) -> Limit:
|
|
131
|
+
def readChildLimitElement(self, element: ET.Element, key: str) -> Limit:
|
|
95
132
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
96
133
|
if (child_element != None):
|
|
97
134
|
limit = Limit()
|
|
@@ -102,9 +139,38 @@ class ARXMLParser:
|
|
|
102
139
|
limit.value = child_element.text
|
|
103
140
|
return limit
|
|
104
141
|
return None
|
|
105
|
-
|
|
106
|
-
def readShortName(self, element) -> str:
|
|
142
|
+
|
|
143
|
+
def readShortName(self, element: ET.Element) -> str:
|
|
107
144
|
return self.readChildElement("", element, "SHORT-NAME")
|
|
145
|
+
|
|
146
|
+
def readSd(self, element: ET.Element, sdg: Sdg):
|
|
147
|
+
for child_element in element.findall("./xmlns:SD", self.nsmap):
|
|
148
|
+
sd = Sd()
|
|
149
|
+
sd.gid = child_element.attrib['GID']
|
|
150
|
+
sd.value = child_element.text
|
|
151
|
+
|
|
152
|
+
sdg.addSd(sd)
|
|
153
|
+
|
|
154
|
+
def readSdg(self, element: ET.Element, admin_data: AdminData):
|
|
155
|
+
for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
|
|
156
|
+
sdg = Sdg()
|
|
157
|
+
sdg.gid = child_element.attrib["GID"]
|
|
158
|
+
self.readSd(child_element, sdg)
|
|
159
|
+
admin_data.addSdg(sdg)
|
|
160
|
+
|
|
161
|
+
def readAdminData(self, element: ET.Element, identifiable: Identifiable):
|
|
162
|
+
child_element = element.find("./xmlns:ADMIN-DATA", self.nsmap)
|
|
163
|
+
if child_element is not None:
|
|
164
|
+
self.logger.debug("readAdminData")
|
|
165
|
+
admin_data = AdminData()
|
|
166
|
+
self.readSdg(child_element, admin_data)
|
|
167
|
+
identifiable.admin_data = admin_data
|
|
168
|
+
|
|
169
|
+
def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
|
|
170
|
+
self.readElementAttributes(element, identifiable)
|
|
171
|
+
self.readMultilanguageReferrable(element, identifiable)
|
|
172
|
+
identifiable.category = self.readChildOptionalElement(element, "CATEGORY")
|
|
173
|
+
self.readAdminData(element, identifiable)
|
|
108
174
|
|
|
109
175
|
def _readChildRefElementDestAndValue(self, element) -> RefType:
|
|
110
176
|
ref = RefType()
|
|
@@ -112,19 +178,19 @@ class ARXMLParser:
|
|
|
112
178
|
ref.value = element.text
|
|
113
179
|
return ref
|
|
114
180
|
|
|
115
|
-
def readChildRefElement(self, short_name, element, key) -> RefType:
|
|
181
|
+
def readChildRefElement(self, short_name: str, element: ET.Element, key: str) -> RefType:
|
|
116
182
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
117
183
|
if (child_element != None):
|
|
118
184
|
return self._readChildRefElementDestAndValue(child_element)
|
|
119
185
|
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
120
186
|
|
|
121
|
-
def readChildOptionalRefElement(self, element, key) -> RefType:
|
|
187
|
+
def readChildOptionalRefElement(self, element:ET.Element, key: str) -> RefType:
|
|
122
188
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
123
189
|
if (child_element != None):
|
|
124
190
|
return self._readChildRefElementDestAndValue(child_element)
|
|
125
191
|
return None
|
|
126
192
|
|
|
127
|
-
def readChildRefElementList(self, element, key) -> List[RefType]:
|
|
193
|
+
def readChildRefElementList(self, element: ET.Element, key: str) -> List[RefType]:
|
|
128
194
|
child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
|
|
129
195
|
results = []
|
|
130
196
|
for child_element in child_elements:
|
|
@@ -133,13 +199,47 @@ class ARXMLParser:
|
|
|
133
199
|
ref.value = child_element.text
|
|
134
200
|
results.append(ref)
|
|
135
201
|
return results
|
|
136
|
-
|
|
137
|
-
def
|
|
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
|
+
|
|
208
|
+
def readMultilanguageLongName(self, element: ET.Element, long_name: MultilanguageLongName):
|
|
209
|
+
for child_element in element.findall("./xmlns:L-4", self.nsmap):
|
|
210
|
+
l4 = LLongName()
|
|
211
|
+
self.readElementAttributes(child_element, l4)
|
|
212
|
+
l4.value = child_element.text
|
|
213
|
+
if 'L' in child_element.attrib:
|
|
214
|
+
l4.l = child_element.attrib['L']
|
|
215
|
+
long_name.add_l4(l4)
|
|
216
|
+
|
|
217
|
+
def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
218
|
+
child_element = element.find("./xmlns:LONG-NAME", self.nsmap)
|
|
219
|
+
if child_element is not None:
|
|
220
|
+
referrable.long_name = MultilanguageLongName()
|
|
221
|
+
self.readElementAttributes(child_element, referrable.long_name)
|
|
222
|
+
self.readMultilanguageLongName(child_element, referrable.long_name)
|
|
223
|
+
|
|
224
|
+
def readElementAttributes(self, element: ET.Element, ar_object: ARObject):
|
|
225
|
+
ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
|
|
226
|
+
ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
|
|
227
|
+
|
|
228
|
+
if ar_object.timestamp is not None:
|
|
229
|
+
self.logger.debug("Timestamp: %s" % ar_object.timestamp)
|
|
230
|
+
if ar_object.uuid is not None:
|
|
231
|
+
self.logger.debug("UUID: %s" % ar_object.uuid)
|
|
232
|
+
|
|
233
|
+
def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
|
|
138
234
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
139
235
|
if (child_element != None):
|
|
140
236
|
autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
|
|
141
237
|
autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
|
|
142
|
-
autosar_variable_in_impl_datatype.
|
|
238
|
+
if autosar_variable_in_impl_datatype.port_prototype_ref is None:
|
|
239
|
+
self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
240
|
+
autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildOptionalRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
241
|
+
if autosar_variable_in_impl_datatype.target_data_prototype_ref is None:
|
|
242
|
+
self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
143
243
|
accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
|
|
144
244
|
|
|
145
245
|
def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
@@ -147,9 +247,12 @@ class ARXMLParser:
|
|
|
147
247
|
if (child_element != None):
|
|
148
248
|
accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
|
|
149
249
|
|
|
150
|
-
def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
|
|
250
|
+
def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
|
|
151
251
|
for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
|
|
152
252
|
short_name = self.readShortName(child_element)
|
|
253
|
+
|
|
254
|
+
self.logger.debug("readVariableAccesses %s" % short_name)
|
|
255
|
+
|
|
153
256
|
if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
|
|
154
257
|
variable_access = parent.createDataReceivePointByArgument(short_name)
|
|
155
258
|
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
@@ -171,35 +274,37 @@ class ARXMLParser:
|
|
|
171
274
|
else:
|
|
172
275
|
self._raiseError("Invalid key type <%s>" % key)
|
|
173
276
|
|
|
174
|
-
|
|
277
|
+
# self.readIdentifiable(child_element, variable_access)
|
|
278
|
+
|
|
279
|
+
def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
|
|
175
280
|
for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
|
|
176
281
|
ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
|
|
177
282
|
if (ref != None):
|
|
178
283
|
parent.implemented_entry_refs.append(ref)
|
|
179
|
-
|
|
284
|
+
self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
|
|
180
285
|
|
|
181
|
-
def readProvidedModeGroup(self, element, parent: BswModuleDescription):
|
|
286
|
+
def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
182
287
|
for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
183
288
|
short_name = self.readShortName(child_element)
|
|
184
|
-
|
|
289
|
+
self.logger.debug("readProvidedModeGroup %s" % short_name)
|
|
185
290
|
|
|
186
291
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
187
292
|
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
188
293
|
|
|
189
|
-
def readRequiredModeGroup(self, element, parent: BswModuleDescription):
|
|
294
|
+
def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
190
295
|
for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
191
296
|
short_name = self.readShortName(child_element)
|
|
192
|
-
|
|
297
|
+
self.logger.debug("readRequiredModeGroup %s" % short_name)
|
|
193
298
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
194
299
|
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
195
300
|
|
|
196
|
-
def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
|
|
301
|
+
def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
|
|
197
302
|
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
198
303
|
if child_element != None:
|
|
199
304
|
for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
200
305
|
entity.addCanEnterExclusiveAreaRef(ref)
|
|
201
306
|
|
|
202
|
-
def readExecutableEntity(self, element, entity: ExecutableEntity):
|
|
307
|
+
def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
203
308
|
self.readCanEnterExclusiveAreaRefs(element, entity)
|
|
204
309
|
|
|
205
310
|
def readBswModuleEntity(self, element, entity: BswModuleEntity):
|
|
@@ -207,81 +312,81 @@ class ARXMLParser:
|
|
|
207
312
|
|
|
208
313
|
entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
|
|
209
314
|
|
|
210
|
-
def readBswCalledEntity(self, element, parent: BswInternalBehavior):
|
|
315
|
+
def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
211
316
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
|
|
212
317
|
short_name = self.readShortName(child_element)
|
|
213
|
-
|
|
318
|
+
self.logger.debug("readBswCalledEntity %s" % short_name)
|
|
214
319
|
entity = parent.createBswCalledEntity(short_name)
|
|
215
320
|
|
|
216
321
|
self.readBswModuleEntity(child_element, entity)
|
|
217
322
|
|
|
218
|
-
def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
|
|
323
|
+
def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
219
324
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
|
|
220
325
|
short_name = self.readShortName(child_element)
|
|
221
|
-
|
|
326
|
+
self.logger.debug("readBswSchedulableEntity %s" % short_name)
|
|
222
327
|
entity = parent.createBswSchedulableEntity(short_name)
|
|
223
328
|
|
|
224
329
|
self.readBswModuleEntity(child_element, entity)
|
|
225
330
|
|
|
226
|
-
def readBswEvent(self, element, event: BswScheduleEvent):
|
|
331
|
+
def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
227
332
|
event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
|
|
228
333
|
|
|
229
334
|
def readBswScheduleEvent(self, element, event: BswScheduleEvent):
|
|
230
335
|
self.readBswEvent(element, event)
|
|
231
336
|
|
|
232
|
-
def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
|
|
337
|
+
def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
233
338
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
|
|
234
339
|
short_name = self.readShortName(child_element)
|
|
235
|
-
|
|
340
|
+
self.logger.debug("readBswModeSwitchEvent %s" % short_name)
|
|
236
341
|
event = parent.createBswModeSwitchEvent(short_name)
|
|
237
342
|
|
|
238
343
|
self.readBswScheduleEvent(child_element, event)
|
|
239
344
|
|
|
240
|
-
def readBswTimingEvent(self, element, parent: BswInternalBehavior):
|
|
345
|
+
def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
241
346
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
|
|
242
347
|
short_name = self.readShortName(child_element)
|
|
243
|
-
|
|
348
|
+
self.logger.debug("readBswTimingEvent %s" % short_name)
|
|
244
349
|
event = parent.createBswTimingEvent(short_name)
|
|
245
350
|
event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
|
|
246
351
|
|
|
247
352
|
self.readBswScheduleEvent(child_element, event)
|
|
248
353
|
|
|
249
|
-
def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
|
|
354
|
+
def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
250
355
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
|
|
251
356
|
short_name = self.readShortName(child_element)
|
|
252
|
-
|
|
357
|
+
self.logger.debug("readBswDataReceivedEvent %s" % short_name)
|
|
253
358
|
event = parent.createBswDataReceivedEvent(short_name)
|
|
254
359
|
event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
|
|
255
360
|
|
|
256
361
|
self.readBswScheduleEvent(child_element, event)
|
|
257
362
|
|
|
258
|
-
def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
|
|
363
|
+
def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
259
364
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
260
365
|
short_name = self.readShortName(child_element)
|
|
261
|
-
|
|
366
|
+
self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
|
|
262
367
|
event = parent.createBswInternalTriggerOccurredEvent(short_name)
|
|
263
368
|
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
264
369
|
|
|
265
370
|
self.readBswScheduleEvent(child_element, event)
|
|
266
371
|
|
|
267
|
-
def readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
|
|
372
|
+
def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
|
|
268
373
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
269
374
|
if child_element != None:
|
|
270
375
|
for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
271
376
|
behavior.addDataTypeMappingRef(ref)
|
|
272
377
|
|
|
273
|
-
def readInternalBehavior(self, element, behavior: InternalBehavior):
|
|
378
|
+
def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
|
|
274
379
|
for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
|
|
275
380
|
short_name = self.readShortName(child_element)
|
|
276
381
|
behavior.createExclusiveArea(short_name)
|
|
277
382
|
|
|
278
383
|
self.readDataTypeMappingRefs(element, behavior)
|
|
279
384
|
|
|
280
|
-
def readSwInternalBehavior(self, element, parent: AtomicSwComponentType):
|
|
385
|
+
def readSwInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
281
386
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
|
|
282
387
|
short_name = self.readShortName(child_element)
|
|
283
388
|
behavior = parent.createSwcInternalBehavior(short_name)
|
|
284
|
-
|
|
389
|
+
self.logger.debug("readSwInternalBehavior %s" % behavior.full_name)
|
|
285
390
|
|
|
286
391
|
# read the internal behavior
|
|
287
392
|
self.readInternalBehavior(child_element, behavior)
|
|
@@ -292,11 +397,11 @@ class ARXMLParser:
|
|
|
292
397
|
self.readInternalTriggerOccurredEvent(child_element, behavior)
|
|
293
398
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
294
399
|
|
|
295
|
-
def readBswInternalBehavior(self, element, parent: BswModuleDescription):
|
|
400
|
+
def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
|
|
296
401
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
|
|
297
402
|
short_name = self.readShortName(child_element)
|
|
298
403
|
behavior = parent.createBswInternalBehavior(short_name)
|
|
299
|
-
|
|
404
|
+
self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
|
|
300
405
|
|
|
301
406
|
# read the internal behavior
|
|
302
407
|
self.readInternalBehavior(child_element, behavior)
|
|
@@ -308,20 +413,20 @@ class ARXMLParser:
|
|
|
308
413
|
self.readBswDataReceivedEvent(child_element, behavior)
|
|
309
414
|
self.readBswInternalTriggerOccurredEvent(child_element, behavior)
|
|
310
415
|
|
|
311
|
-
def readBswModuleDescription(self, element, parent: ARPackage):
|
|
416
|
+
def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
|
|
312
417
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-DESCRIPTION", self.nsmap):
|
|
313
418
|
short_name = self.readShortName(child_element)
|
|
314
419
|
bsw_module_description = parent.createBswModuleDescription(short_name)
|
|
315
420
|
bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
|
|
316
421
|
|
|
317
|
-
|
|
422
|
+
self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
|
|
318
423
|
|
|
319
424
|
self.readBswModuleDescriptionImplementedEntry(child_element, bsw_module_description)
|
|
320
425
|
self.readProvidedModeGroup(child_element, bsw_module_description)
|
|
321
426
|
self.readRequiredModeGroup(child_element, bsw_module_description)
|
|
322
427
|
self.readBswInternalBehavior(child_element, bsw_module_description)
|
|
323
428
|
|
|
324
|
-
def readBswModuleEntry(self, element, parent: ARPackage):
|
|
429
|
+
def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
|
|
325
430
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
|
|
326
431
|
short_name = self.readShortName(child_element)
|
|
327
432
|
entry = parent.createBswModuleEntry(short_name)
|
|
@@ -332,26 +437,26 @@ class ARXMLParser:
|
|
|
332
437
|
entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
|
|
333
438
|
entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
|
|
334
439
|
|
|
335
|
-
#
|
|
336
|
-
|
|
440
|
+
#self.logger.debug("readBswModuleEntry \n%s" % entry)
|
|
441
|
+
self.logger.debug("readBswModuleEntry %s" % entry.short_name)
|
|
337
442
|
|
|
338
|
-
def readArtifactDescriptor(self, element, code_desc: Code):
|
|
443
|
+
def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
|
|
339
444
|
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
|
|
340
445
|
artifact_desc = AutosarEngineeringObject()
|
|
341
446
|
artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
|
|
342
|
-
|
|
447
|
+
self.readIdentifiable(child_element, artifact_desc)
|
|
343
448
|
code_desc.addArtifactDescriptor(artifact_desc)
|
|
344
449
|
|
|
345
|
-
|
|
450
|
+
self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
|
|
346
451
|
|
|
347
|
-
def readCodeDescriptor(self, element, impl: Implementation):
|
|
452
|
+
def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
|
|
348
453
|
for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
|
|
349
454
|
short_name = self.readShortName(child_element)
|
|
350
|
-
|
|
455
|
+
self.logger.debug("readCodeDescriptor %s" % short_name)
|
|
351
456
|
code_desc = impl.createCodeDescriptor(short_name)
|
|
352
457
|
self.readArtifactDescriptor(child_element, code_desc)
|
|
353
458
|
|
|
354
|
-
def readMemorySections(self, element, consumption: ResourceConsumption):
|
|
459
|
+
def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
|
|
355
460
|
for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
|
|
356
461
|
short_name = self.readShortName(child_element)
|
|
357
462
|
memory_section = consumption.createMemorySection(short_name)
|
|
@@ -359,9 +464,9 @@ class ARXMLParser:
|
|
|
359
464
|
if (alignment != None):
|
|
360
465
|
memory_section.alignment = alignment
|
|
361
466
|
memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
|
|
362
|
-
|
|
467
|
+
self.logger.debug("readMemorySections %s" % memory_section.short_name)
|
|
363
468
|
|
|
364
|
-
def readResourceConsumption(self, element, impl: Implementation):
|
|
469
|
+
def readResourceConsumption(self, element: ET.Element, impl: Implementation):
|
|
365
470
|
child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
|
|
366
471
|
if (child_element == None):
|
|
367
472
|
self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
|
|
@@ -370,7 +475,7 @@ class ARXMLParser:
|
|
|
370
475
|
impl.resource_consumption = ResourceConsumption(impl, short_name)
|
|
371
476
|
self.readMemorySections(child_element, impl.resource_consumption)
|
|
372
477
|
|
|
373
|
-
def readImplementation(self, element, impl: Implementation):
|
|
478
|
+
def readImplementation(self, element: ET.Element, impl: Implementation):
|
|
374
479
|
self.readCodeDescriptor(element, impl)
|
|
375
480
|
impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
|
|
376
481
|
self.readResourceConsumption(element, impl)
|
|
@@ -378,22 +483,22 @@ class ARXMLParser:
|
|
|
378
483
|
impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
|
|
379
484
|
impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
|
|
380
485
|
|
|
381
|
-
def readBswImplementation(self, element, parent: ARPackage):
|
|
486
|
+
def readBswImplementation(self, element: ET.Element, parent: ARPackage):
|
|
382
487
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
|
|
383
488
|
short_name = self.readShortName(child_element)
|
|
384
489
|
impl = parent.createBswImplementation(short_name)
|
|
385
|
-
|
|
490
|
+
self.logger.debug("readBswImplementation %s" % impl.short_name)
|
|
386
491
|
|
|
387
492
|
self.readImplementation(child_element, impl)
|
|
388
493
|
|
|
389
494
|
impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
|
|
390
495
|
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
391
496
|
|
|
392
|
-
def readSwcImplementation(self, element, parent: ARPackage):
|
|
497
|
+
def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
|
|
393
498
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
|
|
394
499
|
short_name = self.readShortName(child_element)
|
|
395
500
|
impl = parent.createSwcImplementation(short_name)
|
|
396
|
-
|
|
501
|
+
self.logger.debug("readSwcImplementation %s" % impl.short_name)
|
|
397
502
|
|
|
398
503
|
self.readImplementation(child_element, impl)
|
|
399
504
|
|
|
@@ -402,22 +507,22 @@ class ARXMLParser:
|
|
|
402
507
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
403
508
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
404
509
|
|
|
405
|
-
def readDataReceivePointByValues(self, element, parent: RunnableEntity):
|
|
510
|
+
def readDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
|
|
406
511
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-VALUES")
|
|
407
512
|
|
|
408
|
-
def readDataReadAccesses(self, element, parent: RunnableEntity):
|
|
513
|
+
def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
409
514
|
self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
|
|
410
515
|
|
|
411
|
-
def readDataSendPoints(self, element, parent: RunnableEntity):
|
|
516
|
+
def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
|
|
412
517
|
self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
|
|
413
518
|
|
|
414
|
-
def readWrittenLocalVariables(self, element, parent: RunnableEntity):
|
|
519
|
+
def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
415
520
|
self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
|
|
416
521
|
|
|
417
|
-
def readReadLocalVariables(self, element, parent: RunnableEntity):
|
|
522
|
+
def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
418
523
|
self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
|
|
419
524
|
|
|
420
|
-
def readROperationIRef(self, element, parent: ServerCallPoint):
|
|
525
|
+
def readROperationIRef(self, element: ET.Element, parent: ServerCallPoint):
|
|
421
526
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
422
527
|
if (child_element != None):
|
|
423
528
|
operation_iref = ROperationInAtomicSwcInstanceRef()
|
|
@@ -425,7 +530,7 @@ class ARXMLParser:
|
|
|
425
530
|
operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
|
|
426
531
|
parent.operation_iref = operation_iref
|
|
427
532
|
|
|
428
|
-
def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
|
|
533
|
+
def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
|
|
429
534
|
child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
|
|
430
535
|
if (child_element != None):
|
|
431
536
|
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
@@ -433,7 +538,7 @@ class ARXMLParser:
|
|
|
433
538
|
data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
|
|
434
539
|
parent.data_iref = data_iref
|
|
435
540
|
|
|
436
|
-
def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
|
|
541
|
+
def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
|
|
437
542
|
for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
|
|
438
543
|
mode_iref = RModeInAtomicSwcInstanceRef()
|
|
439
544
|
mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
|
|
@@ -441,33 +546,35 @@ class ARXMLParser:
|
|
|
441
546
|
mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
|
|
442
547
|
parent.addModeIRef(mode_iref)
|
|
443
548
|
|
|
444
|
-
def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
|
|
549
|
+
def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
445
550
|
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
|
|
446
551
|
short_name = self.readShortName(child_element)
|
|
447
552
|
serverCallPoint = parent.createSynchronousServerCallPoint(short_name)
|
|
448
553
|
serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
|
|
449
554
|
self.readROperationIRef(child_element, serverCallPoint)
|
|
450
555
|
|
|
451
|
-
def readAsynchronousServerCallPoint(self, element, parent: RunnableEntity):
|
|
556
|
+
def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
452
557
|
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:ASYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
|
|
453
558
|
short_name = self.readShortName(child_element)
|
|
454
559
|
serverCallPoint = parent.createAsynchronousServerCallPoint(short_name)
|
|
455
560
|
serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
|
|
456
561
|
self.readROperationIRef(child_element, serverCallPoint)
|
|
457
562
|
|
|
458
|
-
def readInternalTriggeringPoint(self, element, parent: RunnableEntity):
|
|
563
|
+
def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
459
564
|
for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
|
|
460
565
|
short_name = self.readShortName(child_element)
|
|
461
566
|
point = parent.createInternalTriggeringPoint(short_name)
|
|
462
567
|
point.sw_impl_policy = self.readChildOptionalElement(child_element, "SW-IMPL-POLICY")
|
|
463
568
|
|
|
464
|
-
def readRunnableEntities(self, element, parent: SwcInternalBehavior):
|
|
569
|
+
def readRunnableEntities(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
465
570
|
for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
|
|
466
571
|
short_name = self.readShortName(child_element)
|
|
467
572
|
runnable = parent.createRunnableEntity(short_name)
|
|
468
573
|
runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
469
574
|
runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
|
|
470
575
|
|
|
576
|
+
self.logger.debug("readRunnableEntities %s" % short_name)
|
|
577
|
+
|
|
471
578
|
self.readDataReceivePointByArguments(child_element, runnable)
|
|
472
579
|
self.readDataReceivePointByValues(child_element, runnable)
|
|
473
580
|
self.readDataReadAccesses(child_element, runnable)
|
|
@@ -478,24 +585,24 @@ class ARXMLParser:
|
|
|
478
585
|
self.readAsynchronousServerCallPoint(child_element, runnable)
|
|
479
586
|
self.readInternalTriggeringPoint(child_element, runnable)
|
|
480
587
|
|
|
481
|
-
def readRTEEvent(self, element, event: RTEEvent):
|
|
588
|
+
def readRTEEvent(self, element: ET.Element, event: RTEEvent):
|
|
482
589
|
event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
|
|
483
590
|
|
|
484
|
-
def readOperationIRef(self, element, parent: OperationInvokedEvent):
|
|
591
|
+
def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
|
|
485
592
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
486
593
|
if (child_element != None):
|
|
487
594
|
parent.operation_iref = POperationInAtomicSwcInstanceRef()
|
|
488
595
|
parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
|
|
489
596
|
parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
|
|
490
597
|
|
|
491
|
-
def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
|
|
598
|
+
def readOperationInvokedEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
492
599
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
|
|
493
600
|
short_name = self.readShortName(child_element)
|
|
494
601
|
event = parent.createOperationInvokedEvent(short_name)
|
|
495
602
|
self.readOperationIRef(child_element, event)
|
|
496
603
|
self.readRTEEvent(child_element, event)
|
|
497
604
|
|
|
498
|
-
def readExplicitInterRunnableVariables(self, element, parent: SwcInternalBehavior):
|
|
605
|
+
def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
499
606
|
for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
500
607
|
short_name = self.readShortName(child_element)
|
|
501
608
|
prototype = parent.createExplicitInterRunnableVariable(short_name)
|
|
@@ -509,7 +616,7 @@ class ARXMLParser:
|
|
|
509
616
|
|
|
510
617
|
self.readRTEEvent(child_element, event)
|
|
511
618
|
|
|
512
|
-
def readTimingEvents(self, element, parent: SwcInternalBehavior):
|
|
619
|
+
def readTimingEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
513
620
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
|
|
514
621
|
short_name = self.readShortName(child_element)
|
|
515
622
|
event = parent.createTimingEvent(short_name)
|
|
@@ -521,7 +628,7 @@ class ARXMLParser:
|
|
|
521
628
|
event.offset = (float)(offset)
|
|
522
629
|
event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
|
|
523
630
|
|
|
524
|
-
def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
|
|
631
|
+
def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
525
632
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
|
|
526
633
|
short_name = self.readShortName(child_element)
|
|
527
634
|
event = parent.createDataReceivedEvent(short_name)
|
|
@@ -529,7 +636,7 @@ class ARXMLParser:
|
|
|
529
636
|
self.readRTEEvent(child_element, event)
|
|
530
637
|
self.readRVariableInAtomicSwcInstanceRef(child_element, event)
|
|
531
638
|
|
|
532
|
-
def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
|
|
639
|
+
def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
533
640
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
|
|
534
641
|
short_name = self.readShortName(child_element)
|
|
535
642
|
event = parent.createSwcModeSwitchEvent(short_name)
|
|
@@ -537,7 +644,7 @@ class ARXMLParser:
|
|
|
537
644
|
self.readRTEEvent(child_element, event)
|
|
538
645
|
self.readRModeInAtomicSwcInstanceRef(child_element, event)
|
|
539
646
|
|
|
540
|
-
def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
|
|
647
|
+
def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
541
648
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
542
649
|
short_name = self.readShortName(child_element)
|
|
543
650
|
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
@@ -545,7 +652,7 @@ class ARXMLParser:
|
|
|
545
652
|
self.readRTEEvent(child_element, event)
|
|
546
653
|
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
547
654
|
|
|
548
|
-
def readSwPointerTargetProps(self, element, parent: ARElement):
|
|
655
|
+
def readSwPointerTargetProps(self, element: ET.Element, parent: ARElement):
|
|
549
656
|
child_element = element.find(
|
|
550
657
|
"./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
|
|
551
658
|
|
|
@@ -555,7 +662,20 @@ class ARXMLParser:
|
|
|
555
662
|
self.readSwDataDefProps(child_element, sw_pointer_target_props)
|
|
556
663
|
parent.sw_pointer_target_props = sw_pointer_target_props
|
|
557
664
|
|
|
558
|
-
def
|
|
665
|
+
def parseSwDataDefProps(self, element: ET.Element) -> SwDataDefProps:
|
|
666
|
+
child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
|
|
667
|
+
|
|
668
|
+
if (child_element != None):
|
|
669
|
+
sw_data_def_props = SwDataDefProps()
|
|
670
|
+
sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
|
|
671
|
+
sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
|
|
672
|
+
sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
|
|
673
|
+
sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
674
|
+
sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
|
|
675
|
+
self.readSwPointerTargetProps(child_element, sw_data_def_props)
|
|
676
|
+
return sw_data_def_props
|
|
677
|
+
|
|
678
|
+
def readSwDataDefProps(self, element: ET.Element, parent: AutosarDataType):
|
|
559
679
|
child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
|
|
560
680
|
|
|
561
681
|
if (child_element != None):
|
|
@@ -568,37 +688,46 @@ class ARXMLParser:
|
|
|
568
688
|
self.readSwPointerTargetProps(child_element, sw_data_def_props)
|
|
569
689
|
parent.sw_data_def_props = sw_data_def_props
|
|
570
690
|
|
|
571
|
-
def readApplicationPrimitiveDataTypes(self, element, parent: ARPackage):
|
|
691
|
+
def readApplicationPrimitiveDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
572
692
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-PRIMITIVE-DATA-TYPE", self.nsmap):
|
|
573
693
|
short_name = self.readShortName(child_element)
|
|
574
694
|
data_type = parent.createApplicationPrimitiveDataType(short_name)
|
|
575
|
-
|
|
695
|
+
self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
|
|
696
|
+
self.readIdentifiable(child_element, data_type)
|
|
576
697
|
self.readSwDataDefProps(child_element, data_type)
|
|
577
698
|
|
|
578
|
-
def
|
|
699
|
+
def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
|
|
700
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
|
|
701
|
+
short_name = self.readShortName(child_element)
|
|
702
|
+
record_element = parent.createApplicationRecordElement(short_name)
|
|
703
|
+
self.logger.debug("readApplicationRecordElements %s" % short_name)
|
|
704
|
+
self.readIdentifiable(child_element, record_element)
|
|
705
|
+
record_element.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
706
|
+
|
|
707
|
+
def readApplicationRecordDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
579
708
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-DATA-TYPE", self.nsmap):
|
|
580
709
|
short_name = self.readShortName(child_element)
|
|
581
710
|
data_type = parent.createApplicationRecordDataType(short_name)
|
|
582
|
-
|
|
711
|
+
self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
|
|
712
|
+
self.readIdentifiable(child_element, data_type)
|
|
583
713
|
self.readSwDataDefProps(child_element, data_type)
|
|
714
|
+
self.readApplicationRecordElements(child_element, data_type)
|
|
584
715
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
def readImplementationDataTypeElements(self, element, parent: ARElement):
|
|
716
|
+
def readImplementationDataTypeElements(self, element: ET.Element, parent: ARElement):
|
|
588
717
|
for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
|
|
589
718
|
short_name = self.readShortName(child_element)
|
|
590
719
|
type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
|
|
591
|
-
|
|
720
|
+
self.readIdentifiable(child_element, type_element)
|
|
592
721
|
type_element.array_size = self.readChildOptionalElement(child_element, "ARRAY-SIZE")
|
|
593
722
|
type_element.array_size_semantics = self.readChildOptionalElement(child_element, "ARRAY-SIZE-SEMANTICS")
|
|
594
723
|
self.readImplementationDataTypeElements(child_element, type_element)
|
|
595
724
|
self.readSwDataDefProps(child_element, type_element)
|
|
596
725
|
|
|
597
|
-
def readImplementationDataTypes(self, element, parent: ARPackage):
|
|
726
|
+
def readImplementationDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
598
727
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE", self.nsmap):
|
|
599
728
|
short_name = self.readShortName(child_element)
|
|
600
729
|
data_type = parent.createImplementationDataType(short_name)
|
|
601
|
-
|
|
730
|
+
self.readIdentifiable(child_element, data_type)
|
|
602
731
|
self.readImplementationDataTypeElements(child_element, data_type)
|
|
603
732
|
self.readSwDataDefProps(child_element, data_type)
|
|
604
733
|
if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
|
|
@@ -612,30 +741,136 @@ class ARXMLParser:
|
|
|
612
741
|
else:
|
|
613
742
|
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
614
743
|
|
|
615
|
-
def
|
|
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):
|
|
616
750
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
|
|
617
751
|
short_name = self.readShortName(child_element)
|
|
618
752
|
data_type = parent.createSwBaseType(short_name)
|
|
753
|
+
self.readIdentifiable(child_element, data_type)
|
|
754
|
+
self.readBaseTypeDirectDefinition(child_element, data_type)
|
|
619
755
|
|
|
620
|
-
def readClientComSpec(self, element, parent: RPortPrototype):
|
|
756
|
+
def readClientComSpec(self, element: ET.Element, parent: RPortPrototype):
|
|
621
757
|
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
|
|
622
758
|
try:
|
|
623
759
|
com_spec = ClientComSpec()
|
|
760
|
+
self.readElementAttributes(child_element, com_spec)
|
|
624
761
|
com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
|
|
625
762
|
parent.addRequiredComSpec(com_spec)
|
|
626
763
|
except ValueError as err:
|
|
627
|
-
|
|
764
|
+
self.logger.error(parent.short_name + ": " + str(err))
|
|
628
765
|
|
|
629
766
|
def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
|
|
630
767
|
#FIXME: readchildElement
|
|
631
768
|
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
769
|
+
self.readSwDataDefProps(element, com_spec)
|
|
632
770
|
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
633
771
|
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
634
772
|
|
|
773
|
+
def readSwValues(self, element: ET.Element, key: str) -> SwValues:
|
|
774
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
|
|
775
|
+
if child_element is None:
|
|
776
|
+
return None
|
|
777
|
+
values = SwValues()
|
|
778
|
+
v_element = child_element.find("./xmlns:V", self.nsmap)
|
|
779
|
+
if v_element is not None:
|
|
780
|
+
values.v = v_element.text
|
|
781
|
+
self.logger.debug("readSwValues - V: %s" % values.v)
|
|
782
|
+
return values
|
|
783
|
+
|
|
784
|
+
def readSwValueCont(self, element: ET.Element) -> SwValueCont:
|
|
785
|
+
cont = None
|
|
786
|
+
child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
|
|
787
|
+
if child_element is not None:
|
|
788
|
+
cont = SwValueCont()
|
|
789
|
+
cont.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
|
|
790
|
+
cont.sw_values_phys = self.readSwValues(child_element, "SW-VALUES-PHYS")
|
|
791
|
+
|
|
792
|
+
self.logger.debug("readSwValueCont - Unit: %s" % cont.unit_ref.value)
|
|
793
|
+
return cont
|
|
794
|
+
|
|
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
|
+
def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
|
|
802
|
+
self.readValueSpecification(element, value_spec)
|
|
803
|
+
value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
|
|
804
|
+
value_spec.sw_value_cont = self.readSwValueCont(element)
|
|
805
|
+
|
|
806
|
+
self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
|
|
807
|
+
|
|
808
|
+
def readTextValueSpecification(self, element: ET.Element, value_spec: TextValueSpecification):
|
|
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:
|
|
837
|
+
value_spec = None
|
|
838
|
+
child_element = element.find("./xmlns:INIT-VALUE", self.nsmap)
|
|
839
|
+
if child_element is not None:
|
|
840
|
+
self.logger.debug("readInitValue")
|
|
841
|
+
value_spec_tag = child_element.find("./xmlns:APPLICATION-VALUE-SPECIFICATION", self.nsmap)
|
|
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
|
+
|
|
867
|
+
return value_spec
|
|
868
|
+
|
|
635
869
|
def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
|
|
636
870
|
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
|
|
637
|
-
|
|
638
871
|
com_spec = NonqueuedReceiverComSpec()
|
|
872
|
+
|
|
873
|
+
self.readElementAttributes(child_element, com_spec)
|
|
639
874
|
self.readReceiverComSpec(child_element, com_spec)
|
|
640
875
|
try:
|
|
641
876
|
# FIXME:
|
|
@@ -644,39 +879,59 @@ class ARXMLParser:
|
|
|
644
879
|
com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
|
|
645
880
|
com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
|
|
646
881
|
except ValueError as err:
|
|
647
|
-
|
|
882
|
+
self.logger.error(parent.short_name + ": " + str(err))
|
|
883
|
+
|
|
884
|
+
com_spec.init_value = self.readInitValue(child_element)
|
|
648
885
|
|
|
649
886
|
parent.addRequiredComSpec(com_spec)
|
|
650
887
|
|
|
651
888
|
def readRPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
652
889
|
for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
|
|
653
890
|
short_name = self.readShortName(child_element)
|
|
654
|
-
|
|
891
|
+
self.logger.debug("readRPortPrototype %s" % short_name)
|
|
655
892
|
|
|
656
893
|
prototype = parent.createRPortPrototype(short_name)
|
|
894
|
+
self.readElementAttributes(child_element, prototype)
|
|
657
895
|
prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
|
|
658
896
|
|
|
659
897
|
self.readClientComSpec(child_element, prototype)
|
|
660
898
|
self.readNonqueuedReceiverComSpec(child_element, prototype)
|
|
661
899
|
|
|
900
|
+
def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
|
|
901
|
+
child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
|
|
902
|
+
if (child_element != None):
|
|
903
|
+
acknowledge = TransmissionAcknowledgementRequest()
|
|
904
|
+
self.readElementAttributes(child_element, acknowledge)
|
|
905
|
+
acknowledge.timeout = self.readChildElementFloatValue ("", child_element, "TIMEOUT")
|
|
906
|
+
return acknowledge
|
|
907
|
+
return None
|
|
908
|
+
|
|
662
909
|
def readSenderComSpec(self, element, com_spec: SenderComSpec):
|
|
663
910
|
# FIXME:
|
|
911
|
+
self.readElementAttributes(element, com_spec)
|
|
664
912
|
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
913
|
+
com_spec.network_representation = self.parseSwDataDefProps(element)
|
|
914
|
+
self.logger.debug("network_representation %s" % com_spec.network_representation)
|
|
665
915
|
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
916
|
+
com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
|
|
666
917
|
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
667
918
|
|
|
668
919
|
def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
|
|
669
920
|
for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
|
|
670
921
|
com_spec = NonqueuedSenderComSpec()
|
|
671
922
|
self.readSenderComSpec(child_element, com_spec)
|
|
923
|
+
|
|
924
|
+
com_spec.init_value = self.readInitValue(child_element)
|
|
925
|
+
|
|
672
926
|
parent.addProvidedComSpec(com_spec)
|
|
673
927
|
|
|
674
928
|
def readPPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
675
929
|
for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
|
|
676
930
|
short_name = self.readShortName(child_element)
|
|
677
|
-
|
|
931
|
+
self.logger.debug("readPPortPrototype %s" % short_name)
|
|
678
932
|
|
|
679
933
|
prototype = parent.createPPortPrototype(short_name)
|
|
934
|
+
self.readElementAttributes(child_element, prototype)
|
|
680
935
|
prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
|
|
681
936
|
self.readNonqueuedSenderComSpec(child_element, prototype)
|
|
682
937
|
|
|
@@ -719,50 +974,117 @@ class ARXMLParser:
|
|
|
719
974
|
sw_component = parent.createServiceSwComponentType(short_name)
|
|
720
975
|
self.readAtomicSwComponentType(child_element, sw_component)
|
|
721
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")
|
|
980
|
+
|
|
981
|
+
self.logger.debug("PPortInCompositionInstanceRef")
|
|
982
|
+
self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
|
|
983
|
+
% (p_port_in_composition_instance_ref.context_component_ref.dest, p_port_in_composition_instance_ref.context_component_ref.value))
|
|
984
|
+
self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
|
|
985
|
+
% (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
|
|
986
|
+
|
|
987
|
+
def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
|
|
988
|
+
r_port_in_composition_instance_ref.context_component_ref = self.readChildOptionalRefElement(element, "CONTEXT-COMPONENT-REF")
|
|
989
|
+
r_port_in_composition_instance_ref.target_r_port_ref = self.readChildOptionalRefElement(element, "TARGET-R-PORT-REF")
|
|
990
|
+
|
|
991
|
+
self.logger.debug("RPortInCompositionInstanceRef")
|
|
992
|
+
self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
|
|
993
|
+
% (r_port_in_composition_instance_ref.context_component_ref.dest, r_port_in_composition_instance_ref.context_component_ref.value))
|
|
994
|
+
self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
|
|
995
|
+
% (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
|
|
996
|
+
|
|
722
997
|
def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
|
|
723
998
|
child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
|
|
724
999
|
if (child_element != None):
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
parent.provider_iref =
|
|
1000
|
+
provide_iref = PPortInCompositionInstanceRef()
|
|
1001
|
+
self.readElementAttributes(child_element, provide_iref)
|
|
1002
|
+
self.readPPortInCompositionInstanceRef(child_element, provide_iref)
|
|
1003
|
+
parent.provider_iref = provide_iref
|
|
729
1004
|
|
|
730
1005
|
def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
|
|
731
1006
|
child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
|
|
732
1007
|
if (child_element != None):
|
|
733
|
-
requester_iref =
|
|
734
|
-
|
|
735
|
-
|
|
1008
|
+
requester_iref = RPortInCompositionInstanceRef()
|
|
1009
|
+
self.readElementAttributes(child_element, requester_iref)
|
|
1010
|
+
self.readRPortInCompositionInstanceRef(child_element, requester_iref)
|
|
736
1011
|
parent.requester_iref = requester_iref
|
|
737
1012
|
|
|
738
1013
|
def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
|
|
739
1014
|
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
|
|
740
1015
|
short_name = self.readShortName(child_element)
|
|
741
|
-
|
|
1016
|
+
self.logger.debug("readAssemblySwConnectors %s" % short_name)
|
|
742
1017
|
|
|
743
1018
|
connector = parent.createAssemblySwConnector(short_name)
|
|
1019
|
+
self.readElementAttributes(child_element, connector)
|
|
744
1020
|
self.readAssemblySwConnectorProviderIRef(child_element, connector)
|
|
745
1021
|
self.readAssemblySwConnectorRequesterIRef(child_element, connector)
|
|
746
1022
|
|
|
747
|
-
def
|
|
1023
|
+
def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
|
|
1024
|
+
inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
|
|
1025
|
+
if (inner_port_iref_element != None):
|
|
1026
|
+
child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
|
|
1027
|
+
if (child_element != None):
|
|
1028
|
+
r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
|
|
1029
|
+
self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
|
|
1030
|
+
parent.inner_port_iref = r_port_in_composition_instance_ref
|
|
1031
|
+
return
|
|
1032
|
+
|
|
1033
|
+
child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
|
|
1034
|
+
if (child_element != None):
|
|
1035
|
+
p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
|
|
1036
|
+
self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
|
|
1037
|
+
parent.inner_port_iref = p_port_in_composition_instance_ref
|
|
1038
|
+
return
|
|
1039
|
+
|
|
1040
|
+
self._raiseError("Unsupported child element of INNER-PORT-IREF")
|
|
1041
|
+
|
|
1042
|
+
def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
|
|
1043
|
+
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
|
|
1044
|
+
short_name = self.readShortName(child_element)
|
|
1045
|
+
self.logger.debug("readDelegationSwConnectors %s" % short_name)
|
|
1046
|
+
|
|
1047
|
+
connector = parent.createDelegationSwConnector(short_name)
|
|
1048
|
+
self.readElementAttributes(child_element, connector)
|
|
1049
|
+
self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
|
|
1050
|
+
|
|
1051
|
+
if connector.inner_port_iref == None and connector.outer_port_iref == None:
|
|
1052
|
+
self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
|
|
1053
|
+
|
|
1054
|
+
connector.outer_port_ref = self.readChildOptionalRefElement(child_element, "OUTER-PORT-REF")
|
|
1055
|
+
self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
|
|
1056
|
+
% (connector.outer_port_ref.dest, connector.outer_port_ref.value))
|
|
1057
|
+
|
|
1058
|
+
def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
748
1059
|
for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
|
|
749
1060
|
short_name = self.readShortName(child_element)
|
|
750
|
-
|
|
1061
|
+
self.logger.debug("readSwComponentPrototypes %s" % short_name)
|
|
751
1062
|
|
|
752
1063
|
prototype = parent.createSwComponentPrototype(short_name)
|
|
1064
|
+
self.readElementAttributes(child_element, prototype)
|
|
753
1065
|
prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
754
1066
|
|
|
755
|
-
def
|
|
1067
|
+
def readDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
1068
|
+
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
1069
|
+
self.logger.debug("readDataTypeMappingSet")
|
|
1070
|
+
if child_element != None:
|
|
1071
|
+
for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
1072
|
+
parent.addDataTypeMapping(ref)
|
|
1073
|
+
|
|
1074
|
+
def readCompositionSwComponentTypes(self, element: ET.Element, parent: ARPackage):
|
|
756
1075
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
|
|
757
1076
|
short_name = self.readShortName(child_element)
|
|
758
|
-
|
|
1077
|
+
self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
|
|
759
1078
|
|
|
760
1079
|
sw_component = parent.createCompositionSwComponentType(short_name)
|
|
1080
|
+
self.readIdentifiable(child_element, sw_component)
|
|
761
1081
|
self.readSwComponentType(child_element, sw_component)
|
|
762
1082
|
self.readSwComponentPrototypes(child_element, sw_component)
|
|
763
1083
|
self.readAssemblySwConnectors(child_element, sw_component)
|
|
1084
|
+
self.readDelegationSwConnectors(child_element, sw_component)
|
|
1085
|
+
self.readDataTypeMappingSet(child_element, sw_component)
|
|
764
1086
|
|
|
765
|
-
def readDataTypeMap(self, element, parent: DataTypeMappingSet):
|
|
1087
|
+
def readDataTypeMap(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
766
1088
|
for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
|
|
767
1089
|
data_type_map = DataTypeMap()
|
|
768
1090
|
data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
|
|
@@ -771,13 +1093,13 @@ class ARXMLParser:
|
|
|
771
1093
|
# add the data type map to global namespace
|
|
772
1094
|
AUTOSAR.getInstance().addDataTypeMap(data_type_map)
|
|
773
1095
|
|
|
774
|
-
def readDataTypeMappingSets(self, element, parent: ARPackage):
|
|
1096
|
+
def readDataTypeMappingSets(self, element: ET.Element, parent: ARPackage):
|
|
775
1097
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-TYPE-MAPPING-SET", self.nsmap):
|
|
776
1098
|
short_name = self.readShortName(child_element)
|
|
777
1099
|
mapping_set = parent.createDataTypeMappingSet(short_name)
|
|
778
1100
|
self.readDataTypeMap(child_element, mapping_set)
|
|
779
1101
|
|
|
780
|
-
def readVariableDataPrototype(self, element, parent: SenderReceiverInterface):
|
|
1102
|
+
def readVariableDataPrototype(self, element: ET.Element, parent: SenderReceiverInterface):
|
|
781
1103
|
for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
782
1104
|
short_name = self.readShortName(child_element)
|
|
783
1105
|
prototype = parent.createDataElement(short_name)
|
|
@@ -790,7 +1112,7 @@ class ARXMLParser:
|
|
|
790
1112
|
sr_interface = parent.createSenderReceiverInterface(short_name)
|
|
791
1113
|
self.readVariableDataPrototype(child_element, sr_interface)
|
|
792
1114
|
|
|
793
|
-
def readArgumentDataPrototypes(self, element, parent: ClientServerOperation):
|
|
1115
|
+
def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
|
|
794
1116
|
for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
|
|
795
1117
|
short_name = self.readShortName(child_element)
|
|
796
1118
|
prototype = ArgumentDataPrototype(property, short_name)
|
|
@@ -798,26 +1120,26 @@ class ARXMLParser:
|
|
|
798
1120
|
prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
|
|
799
1121
|
parent.addArgumentDataPrototype(prototype)
|
|
800
1122
|
|
|
801
|
-
def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
|
|
1123
|
+
def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
|
|
802
1124
|
child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
|
|
803
1125
|
if child_element != None:
|
|
804
1126
|
for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
|
|
805
1127
|
parent.addPossibleErrorRef(ref)
|
|
806
1128
|
|
|
807
|
-
def readOperations(self, element, parent: ClientServerInterface):
|
|
1129
|
+
def readOperations(self, element: ET.Element, parent: ClientServerInterface):
|
|
808
1130
|
for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
|
|
809
1131
|
short_name = self.readShortName(child_element)
|
|
810
1132
|
operation = parent.createOperation(short_name)
|
|
811
1133
|
self.readArgumentDataPrototypes(child_element, operation)
|
|
812
1134
|
self.readPossibleErrorRefs(child_element, operation)
|
|
813
1135
|
|
|
814
|
-
def readPossibleErrors(self, element, parent: ClientServerInterface):
|
|
1136
|
+
def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
|
|
815
1137
|
for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
|
|
816
1138
|
short_name = self.readShortName(child_element)
|
|
817
1139
|
error = parent.createApplicationError(short_name)
|
|
818
1140
|
error.error_code = self.readChildElementNumberValue(short_name, child_element, "ERROR-CODE")
|
|
819
1141
|
|
|
820
|
-
def readClientServerInterfaces(self, element, parent: ARPackage):
|
|
1142
|
+
def readClientServerInterfaces(self, element: ET.Element, parent: ARPackage):
|
|
821
1143
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CLIENT-SERVER-INTERFACE", self.nsmap):
|
|
822
1144
|
short_name = self.readShortName(child_element)
|
|
823
1145
|
cs_interface = parent.createClientServerInterface(short_name)
|
|
@@ -825,56 +1147,175 @@ class ARXMLParser:
|
|
|
825
1147
|
self.readOperations(child_element, cs_interface)
|
|
826
1148
|
self.readPossibleErrors(child_element, cs_interface)
|
|
827
1149
|
|
|
828
|
-
def
|
|
1150
|
+
def readCompuConst(self, element: ET.Element, parent: CompuScale):
|
|
829
1151
|
child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
|
|
830
|
-
if (child_element
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
1152
|
+
if (child_element is not None):
|
|
1153
|
+
self.logger.debug("readCompuConst VT: %s" % child_element.text)
|
|
1154
|
+
contents = CompuScaleConstantContents()
|
|
1155
|
+
contents.compu_const = CompuConst()
|
|
1156
|
+
contents.compu_const.compu_const_content_type = CompuConstTextContent()
|
|
1157
|
+
contents.compu_const.compu_const_content_type.vt = child_element.text
|
|
1158
|
+
parent.compu_scale_contents = contents
|
|
1159
|
+
|
|
1160
|
+
def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
|
|
1161
|
+
for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
|
|
1162
|
+
self.logger.debug("readCompuNominatorDenominator - %s: %s" % (key, child_element.text))
|
|
1163
|
+
parent.add_v(child_element.text)
|
|
1164
|
+
|
|
1165
|
+
def readCompuRationCoeffs(self, element: ET.Element, parent: CompuScale):
|
|
1166
|
+
child_element = element.find("./xmlns:COMPU-RATIONAL-COEFFS", self.nsmap)
|
|
1167
|
+
if (child_element is not None):
|
|
1168
|
+
self.logger.debug("readCompuRationCoeffs")
|
|
1169
|
+
contents = CompuScaleRationalFormula()
|
|
1170
|
+
contents.compu_rational_coeffs = CompuRationalCoeffs()
|
|
1171
|
+
contents.compu_rational_coeffs.compu_denominator = CompuNominatorDenominator()
|
|
1172
|
+
contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
|
|
1173
|
+
self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
|
|
1174
|
+
self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
|
|
1175
|
+
parent.compu_scale_contents = contents
|
|
1176
|
+
|
|
1177
|
+
def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
|
|
1178
|
+
self.readCompuConst(element, parent)
|
|
1179
|
+
self.readCompuRationCoeffs(element, parent)
|
|
1180
|
+
|
|
1181
|
+
def readCompuScales(self, element: ET.Element, parent: CompuScales):
|
|
834
1182
|
for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
|
|
835
1183
|
compu_scale = CompuScale()
|
|
836
1184
|
compu_scale.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
|
|
837
1185
|
compu_scale.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
|
|
838
|
-
|
|
839
|
-
self.readCompuConstTextContent(child_element, compu_scale.compu_inverse_value)
|
|
1186
|
+
self.readCompuScaleContents(child_element, compu_scale)
|
|
840
1187
|
parent.addCompuScale(compu_scale)
|
|
841
1188
|
|
|
842
|
-
def readCompuInternalToPhys(self, element, parent: CompuMethod):
|
|
1189
|
+
def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
|
|
843
1190
|
child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
|
|
844
1191
|
if (child_element != None):
|
|
845
1192
|
parent.compu_internal_to_phys = Compu()
|
|
1193
|
+
self.readElementAttributes(child_element, parent.compu_internal_to_phys)
|
|
846
1194
|
parent.compu_internal_to_phys.compu_content = CompuScales()
|
|
847
1195
|
self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
|
|
848
1196
|
|
|
849
|
-
def readCompuMethods(self, element, parent: ARPackage):
|
|
1197
|
+
def readCompuMethods(self, element: ET.Element, parent: ARPackage):
|
|
850
1198
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
|
|
851
1199
|
short_name = self.readShortName(child_element)
|
|
1200
|
+
self.logger.debug("readCompuMethods %s" % short_name)
|
|
852
1201
|
compu_method = parent.createCompuMethod(short_name)
|
|
853
|
-
|
|
1202
|
+
self.readIdentifiable(child_element, compu_method)
|
|
1203
|
+
compu_method.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
|
|
854
1204
|
self.readCompuInternalToPhys(child_element, compu_method)
|
|
855
1205
|
|
|
856
|
-
def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
|
|
1206
|
+
def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
|
|
857
1207
|
for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
|
|
858
1208
|
mapping = SwcBswRunnableMapping()
|
|
859
1209
|
mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
|
|
860
1210
|
mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
|
|
861
1211
|
parent.addRunnableMapping(mapping)
|
|
862
1212
|
|
|
863
|
-
def readSwcBswMappings(self, element, parent: ARPackage):
|
|
1213
|
+
def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
|
|
864
1214
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
|
|
865
1215
|
short_name = self.readShortName(child_element)
|
|
1216
|
+
self.logger.debug("readSwcBswMappings %s" % short_name)
|
|
866
1217
|
swc_bsw_mapping = parent.createSwcBswMapping(short_name)
|
|
867
|
-
|
|
868
1218
|
swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
|
|
869
1219
|
self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
|
|
870
1220
|
swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
|
|
871
1221
|
|
|
872
|
-
def
|
|
1222
|
+
def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
|
|
1223
|
+
value_spec.short_label = self.readChildOptionalElement(element, "SHORT-LABEL")
|
|
1224
|
+
|
|
1225
|
+
def readSwValueCont(self, element: ET.Element, spec: ApplicationValueSpecification):
|
|
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
|
|
1232
|
+
|
|
1233
|
+
def readApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
|
|
1234
|
+
value_spec = ApplicationValueSpecification()
|
|
1235
|
+
self.readValueSpecification(element, value_spec)
|
|
1236
|
+
value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
|
|
1237
|
+
self.readSwValueCont(element, value_spec)
|
|
1238
|
+
return value_spec
|
|
1239
|
+
|
|
1240
|
+
def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
|
|
1241
|
+
for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
|
|
1242
|
+
if child_element.tag == "{http://autosar.org/schema/r4.0}APPLICATION-VALUE-SPECIFICATION":
|
|
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)
|
|
1249
|
+
|
|
1250
|
+
def readRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
|
|
1251
|
+
value_spec = RecordValueSpecification()
|
|
1252
|
+
self.readValueSpecification(element, value_spec)
|
|
1253
|
+
self.readRecordValueSpecificationFields(element, value_spec)
|
|
1254
|
+
return value_spec
|
|
1255
|
+
|
|
1256
|
+
def readConstantSpecification(self, element: ET.Element, parent: ARPackage):
|
|
1257
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CONSTANT-SPECIFICATION", self.nsmap):
|
|
1258
|
+
short_name = self.readShortName(child_element)
|
|
1259
|
+
self.logger.debug("readConstantSpecification %s" % short_name)
|
|
1260
|
+
spec = parent.createConstantSpecification(short_name)
|
|
1261
|
+
self.readIdentifiable(child_element, spec)
|
|
1262
|
+
for value_spec_tag in child_element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
|
|
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)
|
|
1269
|
+
|
|
1270
|
+
def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
|
|
1271
|
+
child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
|
|
1272
|
+
if child_element is not None:
|
|
1273
|
+
constrs = InternalConstrs()
|
|
1274
|
+
constrs.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1275
|
+
constrs.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1276
|
+
parent.internal_constrs = constrs
|
|
1277
|
+
|
|
1278
|
+
def readPhysConstrs(self, element: ET.Element, parent: DataConstrRule):
|
|
1279
|
+
child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
|
|
1280
|
+
if child_element is not None:
|
|
1281
|
+
constrs = PhysConstrs()
|
|
1282
|
+
constrs.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1283
|
+
constrs.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1284
|
+
constrs.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
|
|
1285
|
+
parent.phys_constrs = constrs
|
|
1286
|
+
|
|
1287
|
+
def readDataConstrRule(self, element: ET.Element, parent: DataConstr):
|
|
1288
|
+
for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
|
|
1289
|
+
self.logger.debug("readDataConstrRule")
|
|
1290
|
+
rule = DataConstrRule()
|
|
1291
|
+
self.readInternalConstrs(child_element, rule)
|
|
1292
|
+
self.readPhysConstrs(child_element, rule)
|
|
1293
|
+
parent.addDataConstrRule(rule)
|
|
1294
|
+
|
|
1295
|
+
def readDataConstr(self, element: ET.Element, parent: ARPackage):
|
|
1296
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-CONSTR", self.nsmap):
|
|
1297
|
+
short_name = self.readShortName(child_element)
|
|
1298
|
+
self.logger.debug("readDataConstr %s" % short_name)
|
|
1299
|
+
constr = parent.createDataConstr(short_name)
|
|
1300
|
+
self.readIdentifiable(child_element, constr)
|
|
1301
|
+
self.readDataConstrRule(child_element, constr)
|
|
1302
|
+
|
|
1303
|
+
def readUnit(self, element: ET.Element, parent: ARPackage):
|
|
1304
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:UNIT", self.nsmap):
|
|
1305
|
+
short_name = self.readShortName(child_element)
|
|
1306
|
+
self.logger.debug("readUnit %s" % short_name)
|
|
1307
|
+
unit = parent.createUnit(short_name)
|
|
1308
|
+
self.readIdentifiable(child_element, unit)
|
|
1309
|
+
unit.display_name = self.readChildOptionalElementLiteral(child_element, "DISPLAY-NAME")
|
|
1310
|
+
|
|
1311
|
+
def readARPackages(self, element: ET.Element, parent: ARPackage):
|
|
873
1312
|
for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
|
|
874
1313
|
short_name = self.readShortName(child_element)
|
|
875
1314
|
ar_package = parent.createARPackage(short_name)
|
|
876
1315
|
|
|
877
|
-
|
|
1316
|
+
self.logger.debug("readARPackages %s" % ar_package.full_name)
|
|
1317
|
+
|
|
1318
|
+
self.readElementAttributes(child_element, ar_package)
|
|
878
1319
|
|
|
879
1320
|
self.readSenderReceiverInterfaces(child_element, ar_package)
|
|
880
1321
|
self.readClientServerInterfaces(child_element, ar_package)
|
|
@@ -883,7 +1324,7 @@ class ARXMLParser:
|
|
|
883
1324
|
self.readApplicationPrimitiveDataTypes(child_element, ar_package)
|
|
884
1325
|
self.readApplicationRecordDataTypes(child_element, ar_package)
|
|
885
1326
|
self.readImplementationDataTypes(child_element, ar_package)
|
|
886
|
-
self.
|
|
1327
|
+
self.readSwBaseTypes(child_element, ar_package)
|
|
887
1328
|
self.readCompuMethods(child_element, ar_package)
|
|
888
1329
|
self.readEcuAbstractionSwComponents(child_element, ar_package)
|
|
889
1330
|
self.readApplicationSwComponentTypes(child_element, ar_package)
|
|
@@ -896,13 +1337,16 @@ class ARXMLParser:
|
|
|
896
1337
|
self.readSwcBswMappings(child_element, ar_package)
|
|
897
1338
|
self.readBswImplementation(child_element, ar_package)
|
|
898
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)
|
|
899
1343
|
|
|
900
1344
|
def load(self, filename, document: AUTOSAR):
|
|
1345
|
+
self.logger.info("Load %s ..." % filename)
|
|
1346
|
+
|
|
901
1347
|
tree = ET.parse(filename)
|
|
902
1348
|
root = tree.getroot()
|
|
903
1349
|
if (self.getPureTagName(root.tag) != "AUTOSAR"):
|
|
904
1350
|
self._raiseError("Invalid ARXML file <%s>" % filename)
|
|
905
1351
|
|
|
906
|
-
print("Load %s ..." % filename)
|
|
907
|
-
|
|
908
1352
|
self.readARPackages(root, document)
|