armodel 1.3.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/connector2xlsx_cli.py +75 -0
- armodel/cli/connector_update_cli.py +70 -0
- armodel/cli/swc_list_cli.py +2 -2
- armodel/lib/__init__.py +1 -1
- armodel/lib/data_analyzer.py +1 -1
- armodel/lib/sw_component.py +34 -0
- armodel/models/__init__.py +6 -1
- armodel/models/ar_object.py +39 -0
- 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 +47 -18
- armodel/models/unit.py +14 -0
- armodel/parser/arxml_parser.py +552 -120
- 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.3.0.dist-info → armodel-1.4.0.dist-info}/METADATA +38 -5
- armodel-1.4.0.dist-info/RECORD +60 -0
- {armodel-1.3.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.3.0.dist-info/RECORD +0 -31
- armodel-1.3.0.dist-info/entry_points.txt +0 -4
- {armodel-1.3.0.dist-info → armodel-1.4.0.dist-info}/LICENSE +0 -0
- {armodel-1.3.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,12 +10,20 @@ 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
|
|
18
29
|
from colorama import Fore
|
|
@@ -33,7 +44,6 @@ class ARXMLParser:
|
|
|
33
44
|
if options:
|
|
34
45
|
if 'warning' in options:
|
|
35
46
|
self.options['warning'] = options['warning']
|
|
36
|
-
|
|
37
47
|
|
|
38
48
|
def _raiseError(self, error_msg):
|
|
39
49
|
if (self.options['warning'] == True):
|
|
@@ -44,38 +54,63 @@ class ARXMLParser:
|
|
|
44
54
|
def getPureTagName(self, tag):
|
|
45
55
|
return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
|
|
46
56
|
|
|
47
|
-
def readChildElement(self, short_name: str, element, key: str) -> str:
|
|
57
|
+
def readChildElement(self, short_name: str, element: ET.Element, key: str) -> str:
|
|
48
58
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
49
59
|
if (child_element != None):
|
|
50
60
|
return child_element.text
|
|
51
61
|
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
52
62
|
|
|
53
|
-
def readChildOptionalElement(self, element, key) -> str:
|
|
63
|
+
def readChildOptionalElement(self, element: ET.Element, key: str) -> str:
|
|
54
64
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
55
65
|
if (child_element != None):
|
|
56
66
|
return child_element.text
|
|
57
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
|
|
58
87
|
|
|
59
|
-
def _convertStringToBooleanValue(self, value) -> bool:
|
|
88
|
+
def _convertStringToBooleanValue(self, value: str) -> bool:
|
|
60
89
|
if (value == "true"):
|
|
61
90
|
return True
|
|
62
91
|
return False
|
|
63
|
-
|
|
64
|
-
def readChildElementFloatValue(self, short_name, element, key) -> float:
|
|
92
|
+
|
|
93
|
+
def readChildElementFloatValue(self, short_name: str, element: ET.Element, key: str) -> float:
|
|
65
94
|
value = self.readChildElement(short_name, element, key)
|
|
66
95
|
if (value == None):
|
|
67
96
|
return None
|
|
68
97
|
return float(value)
|
|
69
98
|
|
|
70
|
-
def readChildElementBooleanValue(self, short_name, element, key) ->
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
73
105
|
|
|
74
|
-
def readChildOptionalElementBooleanValue(self, element, key) ->
|
|
75
|
-
|
|
76
|
-
if (
|
|
106
|
+
def readChildOptionalElementBooleanValue(self, element: ET.Element, key: str) -> ARBoolean:
|
|
107
|
+
literal = self.readChildOptionalElementLiteral(element, key)
|
|
108
|
+
if (literal == None):
|
|
77
109
|
return None
|
|
78
|
-
|
|
110
|
+
bool_value = ARBoolean()
|
|
111
|
+
bool_value.timestamp = literal.timestamp
|
|
112
|
+
bool_value.value = self._convertStringToBooleanValue(literal.value)
|
|
113
|
+
return bool_value
|
|
79
114
|
|
|
80
115
|
def _convertStringToNumberValue(self, value) -> int:
|
|
81
116
|
m = re.match(r"0x([0-9a-f]+)", value, re.I)
|
|
@@ -83,17 +118,17 @@ class ARXMLParser:
|
|
|
83
118
|
return int(m.group(1), 16)
|
|
84
119
|
return int(value)
|
|
85
120
|
|
|
86
|
-
def readChildElementNumberValue(self, short_name, element, key) -> int:
|
|
121
|
+
def readChildElementNumberValue(self, short_name: str, element: ET.Element, key: str) -> int:
|
|
87
122
|
value = self.readChildElement(short_name, element, key)
|
|
88
123
|
return self._convertStringToNumberValue(value)
|
|
89
124
|
|
|
90
|
-
def readChildOptionalElementNumberValue(self, element, key) -> int:
|
|
125
|
+
def readChildOptionalElementNumberValue(self, element: ET.Element, key: str) -> int:
|
|
91
126
|
value = self.readChildOptionalElement(element, key)
|
|
92
127
|
if (value == None):
|
|
93
128
|
return None
|
|
94
129
|
return self._convertStringToNumberValue(value)
|
|
95
130
|
|
|
96
|
-
def readChildLimitElement(self, element, key) -> Limit:
|
|
131
|
+
def readChildLimitElement(self, element: ET.Element, key: str) -> Limit:
|
|
97
132
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
98
133
|
if (child_element != None):
|
|
99
134
|
limit = Limit()
|
|
@@ -104,9 +139,38 @@ class ARXMLParser:
|
|
|
104
139
|
limit.value = child_element.text
|
|
105
140
|
return limit
|
|
106
141
|
return None
|
|
107
|
-
|
|
108
|
-
def readShortName(self, element) -> str:
|
|
142
|
+
|
|
143
|
+
def readShortName(self, element: ET.Element) -> str:
|
|
109
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)
|
|
110
174
|
|
|
111
175
|
def _readChildRefElementDestAndValue(self, element) -> RefType:
|
|
112
176
|
ref = RefType()
|
|
@@ -114,19 +178,19 @@ class ARXMLParser:
|
|
|
114
178
|
ref.value = element.text
|
|
115
179
|
return ref
|
|
116
180
|
|
|
117
|
-
def readChildRefElement(self, short_name, element, key) -> RefType:
|
|
181
|
+
def readChildRefElement(self, short_name: str, element: ET.Element, key: str) -> RefType:
|
|
118
182
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
119
183
|
if (child_element != None):
|
|
120
184
|
return self._readChildRefElementDestAndValue(child_element)
|
|
121
185
|
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
122
186
|
|
|
123
|
-
def readChildOptionalRefElement(self, element, key) -> RefType:
|
|
187
|
+
def readChildOptionalRefElement(self, element:ET.Element, key: str) -> RefType:
|
|
124
188
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
125
189
|
if (child_element != None):
|
|
126
190
|
return self._readChildRefElementDestAndValue(child_element)
|
|
127
191
|
return None
|
|
128
192
|
|
|
129
|
-
def readChildRefElementList(self, element, key) -> List[RefType]:
|
|
193
|
+
def readChildRefElementList(self, element: ET.Element, key: str) -> List[RefType]:
|
|
130
194
|
child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
|
|
131
195
|
results = []
|
|
132
196
|
for child_element in child_elements:
|
|
@@ -135,6 +199,36 @@ class ARXMLParser:
|
|
|
135
199
|
ref.value = child_element.text
|
|
136
200
|
results.append(ref)
|
|
137
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
|
+
|
|
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)
|
|
138
232
|
|
|
139
233
|
def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
|
|
140
234
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
@@ -153,9 +247,10 @@ class ARXMLParser:
|
|
|
153
247
|
if (child_element != None):
|
|
154
248
|
accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
|
|
155
249
|
|
|
156
|
-
def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
|
|
250
|
+
def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
|
|
157
251
|
for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
|
|
158
252
|
short_name = self.readShortName(child_element)
|
|
253
|
+
|
|
159
254
|
self.logger.debug("readVariableAccesses %s" % short_name)
|
|
160
255
|
|
|
161
256
|
if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
|
|
@@ -179,14 +274,16 @@ class ARXMLParser:
|
|
|
179
274
|
else:
|
|
180
275
|
self._raiseError("Invalid key type <%s>" % key)
|
|
181
276
|
|
|
182
|
-
|
|
277
|
+
# self.readIdentifiable(child_element, variable_access)
|
|
278
|
+
|
|
279
|
+
def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
|
|
183
280
|
for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
|
|
184
281
|
ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
|
|
185
282
|
if (ref != None):
|
|
186
283
|
parent.implemented_entry_refs.append(ref)
|
|
187
284
|
self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
|
|
188
285
|
|
|
189
|
-
def readProvidedModeGroup(self, element, parent: BswModuleDescription):
|
|
286
|
+
def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
190
287
|
for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
191
288
|
short_name = self.readShortName(child_element)
|
|
192
289
|
self.logger.debug("readProvidedModeGroup %s" % short_name)
|
|
@@ -194,20 +291,20 @@ class ARXMLParser:
|
|
|
194
291
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
195
292
|
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
196
293
|
|
|
197
|
-
def readRequiredModeGroup(self, element, parent: BswModuleDescription):
|
|
294
|
+
def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
198
295
|
for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
199
296
|
short_name = self.readShortName(child_element)
|
|
200
297
|
self.logger.debug("readRequiredModeGroup %s" % short_name)
|
|
201
298
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
202
299
|
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
203
300
|
|
|
204
|
-
def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
|
|
301
|
+
def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
|
|
205
302
|
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
206
303
|
if child_element != None:
|
|
207
304
|
for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
208
305
|
entity.addCanEnterExclusiveAreaRef(ref)
|
|
209
306
|
|
|
210
|
-
def readExecutableEntity(self, element, entity: ExecutableEntity):
|
|
307
|
+
def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
211
308
|
self.readCanEnterExclusiveAreaRefs(element, entity)
|
|
212
309
|
|
|
213
310
|
def readBswModuleEntity(self, element, entity: BswModuleEntity):
|
|
@@ -215,7 +312,7 @@ class ARXMLParser:
|
|
|
215
312
|
|
|
216
313
|
entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
|
|
217
314
|
|
|
218
|
-
def readBswCalledEntity(self, element, parent: BswInternalBehavior):
|
|
315
|
+
def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
219
316
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
|
|
220
317
|
short_name = self.readShortName(child_element)
|
|
221
318
|
self.logger.debug("readBswCalledEntity %s" % short_name)
|
|
@@ -223,7 +320,7 @@ class ARXMLParser:
|
|
|
223
320
|
|
|
224
321
|
self.readBswModuleEntity(child_element, entity)
|
|
225
322
|
|
|
226
|
-
def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
|
|
323
|
+
def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
227
324
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
|
|
228
325
|
short_name = self.readShortName(child_element)
|
|
229
326
|
self.logger.debug("readBswSchedulableEntity %s" % short_name)
|
|
@@ -231,13 +328,13 @@ class ARXMLParser:
|
|
|
231
328
|
|
|
232
329
|
self.readBswModuleEntity(child_element, entity)
|
|
233
330
|
|
|
234
|
-
def readBswEvent(self, element, event: BswScheduleEvent):
|
|
331
|
+
def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
235
332
|
event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
|
|
236
333
|
|
|
237
334
|
def readBswScheduleEvent(self, element, event: BswScheduleEvent):
|
|
238
335
|
self.readBswEvent(element, event)
|
|
239
336
|
|
|
240
|
-
def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
|
|
337
|
+
def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
241
338
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
|
|
242
339
|
short_name = self.readShortName(child_element)
|
|
243
340
|
self.logger.debug("readBswModeSwitchEvent %s" % short_name)
|
|
@@ -245,7 +342,7 @@ class ARXMLParser:
|
|
|
245
342
|
|
|
246
343
|
self.readBswScheduleEvent(child_element, event)
|
|
247
344
|
|
|
248
|
-
def readBswTimingEvent(self, element, parent: BswInternalBehavior):
|
|
345
|
+
def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
249
346
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
|
|
250
347
|
short_name = self.readShortName(child_element)
|
|
251
348
|
self.logger.debug("readBswTimingEvent %s" % short_name)
|
|
@@ -254,7 +351,7 @@ class ARXMLParser:
|
|
|
254
351
|
|
|
255
352
|
self.readBswScheduleEvent(child_element, event)
|
|
256
353
|
|
|
257
|
-
def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
|
|
354
|
+
def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
258
355
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
|
|
259
356
|
short_name = self.readShortName(child_element)
|
|
260
357
|
self.logger.debug("readBswDataReceivedEvent %s" % short_name)
|
|
@@ -263,7 +360,7 @@ class ARXMLParser:
|
|
|
263
360
|
|
|
264
361
|
self.readBswScheduleEvent(child_element, event)
|
|
265
362
|
|
|
266
|
-
def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
|
|
363
|
+
def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
267
364
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
268
365
|
short_name = self.readShortName(child_element)
|
|
269
366
|
self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
|
|
@@ -272,20 +369,20 @@ class ARXMLParser:
|
|
|
272
369
|
|
|
273
370
|
self.readBswScheduleEvent(child_element, event)
|
|
274
371
|
|
|
275
|
-
def readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
|
|
372
|
+
def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
|
|
276
373
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
277
374
|
if child_element != None:
|
|
278
375
|
for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
279
376
|
behavior.addDataTypeMappingRef(ref)
|
|
280
377
|
|
|
281
|
-
def readInternalBehavior(self, element, behavior: InternalBehavior):
|
|
378
|
+
def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
|
|
282
379
|
for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
|
|
283
380
|
short_name = self.readShortName(child_element)
|
|
284
381
|
behavior.createExclusiveArea(short_name)
|
|
285
382
|
|
|
286
383
|
self.readDataTypeMappingRefs(element, behavior)
|
|
287
384
|
|
|
288
|
-
def readSwInternalBehavior(self, element, parent: AtomicSwComponentType):
|
|
385
|
+
def readSwInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
289
386
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
|
|
290
387
|
short_name = self.readShortName(child_element)
|
|
291
388
|
behavior = parent.createSwcInternalBehavior(short_name)
|
|
@@ -300,7 +397,7 @@ class ARXMLParser:
|
|
|
300
397
|
self.readInternalTriggerOccurredEvent(child_element, behavior)
|
|
301
398
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
302
399
|
|
|
303
|
-
def readBswInternalBehavior(self, element, parent: BswModuleDescription):
|
|
400
|
+
def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
|
|
304
401
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
|
|
305
402
|
short_name = self.readShortName(child_element)
|
|
306
403
|
behavior = parent.createBswInternalBehavior(short_name)
|
|
@@ -316,7 +413,7 @@ class ARXMLParser:
|
|
|
316
413
|
self.readBswDataReceivedEvent(child_element, behavior)
|
|
317
414
|
self.readBswInternalTriggerOccurredEvent(child_element, behavior)
|
|
318
415
|
|
|
319
|
-
def readBswModuleDescription(self, element, parent: ARPackage):
|
|
416
|
+
def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
|
|
320
417
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-DESCRIPTION", self.nsmap):
|
|
321
418
|
short_name = self.readShortName(child_element)
|
|
322
419
|
bsw_module_description = parent.createBswModuleDescription(short_name)
|
|
@@ -329,7 +426,7 @@ class ARXMLParser:
|
|
|
329
426
|
self.readRequiredModeGroup(child_element, bsw_module_description)
|
|
330
427
|
self.readBswInternalBehavior(child_element, bsw_module_description)
|
|
331
428
|
|
|
332
|
-
def readBswModuleEntry(self, element, parent: ARPackage):
|
|
429
|
+
def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
|
|
333
430
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
|
|
334
431
|
short_name = self.readShortName(child_element)
|
|
335
432
|
entry = parent.createBswModuleEntry(short_name)
|
|
@@ -343,23 +440,23 @@ class ARXMLParser:
|
|
|
343
440
|
#self.logger.debug("readBswModuleEntry \n%s" % entry)
|
|
344
441
|
self.logger.debug("readBswModuleEntry %s" % entry.short_name)
|
|
345
442
|
|
|
346
|
-
def readArtifactDescriptor(self, element, code_desc: Code):
|
|
443
|
+
def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
|
|
347
444
|
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
|
|
348
445
|
artifact_desc = AutosarEngineeringObject()
|
|
349
446
|
artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
|
|
350
|
-
|
|
447
|
+
self.readIdentifiable(child_element, artifact_desc)
|
|
351
448
|
code_desc.addArtifactDescriptor(artifact_desc)
|
|
352
449
|
|
|
353
450
|
self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
|
|
354
451
|
|
|
355
|
-
def readCodeDescriptor(self, element, impl: Implementation):
|
|
452
|
+
def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
|
|
356
453
|
for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
|
|
357
454
|
short_name = self.readShortName(child_element)
|
|
358
455
|
self.logger.debug("readCodeDescriptor %s" % short_name)
|
|
359
456
|
code_desc = impl.createCodeDescriptor(short_name)
|
|
360
457
|
self.readArtifactDescriptor(child_element, code_desc)
|
|
361
458
|
|
|
362
|
-
def readMemorySections(self, element, consumption: ResourceConsumption):
|
|
459
|
+
def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
|
|
363
460
|
for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
|
|
364
461
|
short_name = self.readShortName(child_element)
|
|
365
462
|
memory_section = consumption.createMemorySection(short_name)
|
|
@@ -369,7 +466,7 @@ class ARXMLParser:
|
|
|
369
466
|
memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
|
|
370
467
|
self.logger.debug("readMemorySections %s" % memory_section.short_name)
|
|
371
468
|
|
|
372
|
-
def readResourceConsumption(self, element, impl: Implementation):
|
|
469
|
+
def readResourceConsumption(self, element: ET.Element, impl: Implementation):
|
|
373
470
|
child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
|
|
374
471
|
if (child_element == None):
|
|
375
472
|
self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
|
|
@@ -378,7 +475,7 @@ class ARXMLParser:
|
|
|
378
475
|
impl.resource_consumption = ResourceConsumption(impl, short_name)
|
|
379
476
|
self.readMemorySections(child_element, impl.resource_consumption)
|
|
380
477
|
|
|
381
|
-
def readImplementation(self, element, impl: Implementation):
|
|
478
|
+
def readImplementation(self, element: ET.Element, impl: Implementation):
|
|
382
479
|
self.readCodeDescriptor(element, impl)
|
|
383
480
|
impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
|
|
384
481
|
self.readResourceConsumption(element, impl)
|
|
@@ -386,7 +483,7 @@ class ARXMLParser:
|
|
|
386
483
|
impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
|
|
387
484
|
impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
|
|
388
485
|
|
|
389
|
-
def readBswImplementation(self, element, parent: ARPackage):
|
|
486
|
+
def readBswImplementation(self, element: ET.Element, parent: ARPackage):
|
|
390
487
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
|
|
391
488
|
short_name = self.readShortName(child_element)
|
|
392
489
|
impl = parent.createBswImplementation(short_name)
|
|
@@ -397,7 +494,7 @@ class ARXMLParser:
|
|
|
397
494
|
impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
|
|
398
495
|
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
399
496
|
|
|
400
|
-
def readSwcImplementation(self, element, parent: ARPackage):
|
|
497
|
+
def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
|
|
401
498
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
|
|
402
499
|
short_name = self.readShortName(child_element)
|
|
403
500
|
impl = parent.createSwcImplementation(short_name)
|
|
@@ -410,22 +507,22 @@ class ARXMLParser:
|
|
|
410
507
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
411
508
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
412
509
|
|
|
413
|
-
def readDataReceivePointByValues(self, element, parent: RunnableEntity):
|
|
510
|
+
def readDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
|
|
414
511
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-VALUES")
|
|
415
512
|
|
|
416
|
-
def readDataReadAccesses(self, element, parent: RunnableEntity):
|
|
513
|
+
def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
417
514
|
self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
|
|
418
515
|
|
|
419
|
-
def readDataSendPoints(self, element, parent: RunnableEntity):
|
|
516
|
+
def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
|
|
420
517
|
self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
|
|
421
518
|
|
|
422
|
-
def readWrittenLocalVariables(self, element, parent: RunnableEntity):
|
|
519
|
+
def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
423
520
|
self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
|
|
424
521
|
|
|
425
|
-
def readReadLocalVariables(self, element, parent: RunnableEntity):
|
|
522
|
+
def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
426
523
|
self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
|
|
427
524
|
|
|
428
|
-
def readROperationIRef(self, element, parent: ServerCallPoint):
|
|
525
|
+
def readROperationIRef(self, element: ET.Element, parent: ServerCallPoint):
|
|
429
526
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
430
527
|
if (child_element != None):
|
|
431
528
|
operation_iref = ROperationInAtomicSwcInstanceRef()
|
|
@@ -433,7 +530,7 @@ class ARXMLParser:
|
|
|
433
530
|
operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
|
|
434
531
|
parent.operation_iref = operation_iref
|
|
435
532
|
|
|
436
|
-
def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
|
|
533
|
+
def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
|
|
437
534
|
child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
|
|
438
535
|
if (child_element != None):
|
|
439
536
|
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
@@ -441,7 +538,7 @@ class ARXMLParser:
|
|
|
441
538
|
data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
|
|
442
539
|
parent.data_iref = data_iref
|
|
443
540
|
|
|
444
|
-
def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
|
|
541
|
+
def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
|
|
445
542
|
for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
|
|
446
543
|
mode_iref = RModeInAtomicSwcInstanceRef()
|
|
447
544
|
mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
|
|
@@ -449,27 +546,27 @@ class ARXMLParser:
|
|
|
449
546
|
mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
|
|
450
547
|
parent.addModeIRef(mode_iref)
|
|
451
548
|
|
|
452
|
-
def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
|
|
549
|
+
def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
453
550
|
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
|
|
454
551
|
short_name = self.readShortName(child_element)
|
|
455
552
|
serverCallPoint = parent.createSynchronousServerCallPoint(short_name)
|
|
456
553
|
serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
|
|
457
554
|
self.readROperationIRef(child_element, serverCallPoint)
|
|
458
555
|
|
|
459
|
-
def readAsynchronousServerCallPoint(self, element, parent: RunnableEntity):
|
|
556
|
+
def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
460
557
|
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:ASYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
|
|
461
558
|
short_name = self.readShortName(child_element)
|
|
462
559
|
serverCallPoint = parent.createAsynchronousServerCallPoint(short_name)
|
|
463
560
|
serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
|
|
464
561
|
self.readROperationIRef(child_element, serverCallPoint)
|
|
465
562
|
|
|
466
|
-
def readInternalTriggeringPoint(self, element, parent: RunnableEntity):
|
|
563
|
+
def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
467
564
|
for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
|
|
468
565
|
short_name = self.readShortName(child_element)
|
|
469
566
|
point = parent.createInternalTriggeringPoint(short_name)
|
|
470
567
|
point.sw_impl_policy = self.readChildOptionalElement(child_element, "SW-IMPL-POLICY")
|
|
471
568
|
|
|
472
|
-
def readRunnableEntities(self, element, parent: SwcInternalBehavior):
|
|
569
|
+
def readRunnableEntities(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
473
570
|
for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
|
|
474
571
|
short_name = self.readShortName(child_element)
|
|
475
572
|
runnable = parent.createRunnableEntity(short_name)
|
|
@@ -488,24 +585,24 @@ class ARXMLParser:
|
|
|
488
585
|
self.readAsynchronousServerCallPoint(child_element, runnable)
|
|
489
586
|
self.readInternalTriggeringPoint(child_element, runnable)
|
|
490
587
|
|
|
491
|
-
def readRTEEvent(self, element, event: RTEEvent):
|
|
588
|
+
def readRTEEvent(self, element: ET.Element, event: RTEEvent):
|
|
492
589
|
event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
|
|
493
590
|
|
|
494
|
-
def readOperationIRef(self, element, parent: OperationInvokedEvent):
|
|
591
|
+
def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
|
|
495
592
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
496
593
|
if (child_element != None):
|
|
497
594
|
parent.operation_iref = POperationInAtomicSwcInstanceRef()
|
|
498
595
|
parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
|
|
499
596
|
parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
|
|
500
597
|
|
|
501
|
-
def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
|
|
598
|
+
def readOperationInvokedEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
502
599
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
|
|
503
600
|
short_name = self.readShortName(child_element)
|
|
504
601
|
event = parent.createOperationInvokedEvent(short_name)
|
|
505
602
|
self.readOperationIRef(child_element, event)
|
|
506
603
|
self.readRTEEvent(child_element, event)
|
|
507
604
|
|
|
508
|
-
def readExplicitInterRunnableVariables(self, element, parent: SwcInternalBehavior):
|
|
605
|
+
def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
509
606
|
for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
510
607
|
short_name = self.readShortName(child_element)
|
|
511
608
|
prototype = parent.createExplicitInterRunnableVariable(short_name)
|
|
@@ -519,7 +616,7 @@ class ARXMLParser:
|
|
|
519
616
|
|
|
520
617
|
self.readRTEEvent(child_element, event)
|
|
521
618
|
|
|
522
|
-
def readTimingEvents(self, element, parent: SwcInternalBehavior):
|
|
619
|
+
def readTimingEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
523
620
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
|
|
524
621
|
short_name = self.readShortName(child_element)
|
|
525
622
|
event = parent.createTimingEvent(short_name)
|
|
@@ -531,7 +628,7 @@ class ARXMLParser:
|
|
|
531
628
|
event.offset = (float)(offset)
|
|
532
629
|
event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
|
|
533
630
|
|
|
534
|
-
def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
|
|
631
|
+
def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
535
632
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
|
|
536
633
|
short_name = self.readShortName(child_element)
|
|
537
634
|
event = parent.createDataReceivedEvent(short_name)
|
|
@@ -539,7 +636,7 @@ class ARXMLParser:
|
|
|
539
636
|
self.readRTEEvent(child_element, event)
|
|
540
637
|
self.readRVariableInAtomicSwcInstanceRef(child_element, event)
|
|
541
638
|
|
|
542
|
-
def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
|
|
639
|
+
def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
543
640
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
|
|
544
641
|
short_name = self.readShortName(child_element)
|
|
545
642
|
event = parent.createSwcModeSwitchEvent(short_name)
|
|
@@ -547,7 +644,7 @@ class ARXMLParser:
|
|
|
547
644
|
self.readRTEEvent(child_element, event)
|
|
548
645
|
self.readRModeInAtomicSwcInstanceRef(child_element, event)
|
|
549
646
|
|
|
550
|
-
def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
|
|
647
|
+
def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
551
648
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
552
649
|
short_name = self.readShortName(child_element)
|
|
553
650
|
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
@@ -555,7 +652,7 @@ class ARXMLParser:
|
|
|
555
652
|
self.readRTEEvent(child_element, event)
|
|
556
653
|
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
557
654
|
|
|
558
|
-
def readSwPointerTargetProps(self, element, parent: ARElement):
|
|
655
|
+
def readSwPointerTargetProps(self, element: ET.Element, parent: ARElement):
|
|
559
656
|
child_element = element.find(
|
|
560
657
|
"./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
|
|
561
658
|
|
|
@@ -565,7 +662,20 @@ class ARXMLParser:
|
|
|
565
662
|
self.readSwDataDefProps(child_element, sw_pointer_target_props)
|
|
566
663
|
parent.sw_pointer_target_props = sw_pointer_target_props
|
|
567
664
|
|
|
568
|
-
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):
|
|
569
679
|
child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
|
|
570
680
|
|
|
571
681
|
if (child_element != None):
|
|
@@ -578,37 +688,46 @@ class ARXMLParser:
|
|
|
578
688
|
self.readSwPointerTargetProps(child_element, sw_data_def_props)
|
|
579
689
|
parent.sw_data_def_props = sw_data_def_props
|
|
580
690
|
|
|
581
|
-
def readApplicationPrimitiveDataTypes(self, element, parent: ARPackage):
|
|
691
|
+
def readApplicationPrimitiveDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
582
692
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-PRIMITIVE-DATA-TYPE", self.nsmap):
|
|
583
693
|
short_name = self.readShortName(child_element)
|
|
584
694
|
data_type = parent.createApplicationPrimitiveDataType(short_name)
|
|
585
|
-
|
|
695
|
+
self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
|
|
696
|
+
self.readIdentifiable(child_element, data_type)
|
|
586
697
|
self.readSwDataDefProps(child_element, data_type)
|
|
587
698
|
|
|
588
|
-
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):
|
|
589
708
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-DATA-TYPE", self.nsmap):
|
|
590
709
|
short_name = self.readShortName(child_element)
|
|
591
710
|
data_type = parent.createApplicationRecordDataType(short_name)
|
|
592
|
-
|
|
711
|
+
self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
|
|
712
|
+
self.readIdentifiable(child_element, data_type)
|
|
593
713
|
self.readSwDataDefProps(child_element, data_type)
|
|
714
|
+
self.readApplicationRecordElements(child_element, data_type)
|
|
594
715
|
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
def readImplementationDataTypeElements(self, element, parent: ARElement):
|
|
716
|
+
def readImplementationDataTypeElements(self, element: ET.Element, parent: ARElement):
|
|
598
717
|
for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
|
|
599
718
|
short_name = self.readShortName(child_element)
|
|
600
719
|
type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
|
|
601
|
-
|
|
720
|
+
self.readIdentifiable(child_element, type_element)
|
|
602
721
|
type_element.array_size = self.readChildOptionalElement(child_element, "ARRAY-SIZE")
|
|
603
722
|
type_element.array_size_semantics = self.readChildOptionalElement(child_element, "ARRAY-SIZE-SEMANTICS")
|
|
604
723
|
self.readImplementationDataTypeElements(child_element, type_element)
|
|
605
724
|
self.readSwDataDefProps(child_element, type_element)
|
|
606
725
|
|
|
607
|
-
def readImplementationDataTypes(self, element, parent: ARPackage):
|
|
726
|
+
def readImplementationDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
608
727
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE", self.nsmap):
|
|
609
728
|
short_name = self.readShortName(child_element)
|
|
610
729
|
data_type = parent.createImplementationDataType(short_name)
|
|
611
|
-
|
|
730
|
+
self.readIdentifiable(child_element, data_type)
|
|
612
731
|
self.readImplementationDataTypeElements(child_element, data_type)
|
|
613
732
|
self.readSwDataDefProps(child_element, data_type)
|
|
614
733
|
if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
|
|
@@ -622,15 +741,23 @@ class ARXMLParser:
|
|
|
622
741
|
else:
|
|
623
742
|
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
624
743
|
|
|
625
|
-
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):
|
|
626
750
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
|
|
627
751
|
short_name = self.readShortName(child_element)
|
|
628
752
|
data_type = parent.createSwBaseType(short_name)
|
|
753
|
+
self.readIdentifiable(child_element, data_type)
|
|
754
|
+
self.readBaseTypeDirectDefinition(child_element, data_type)
|
|
629
755
|
|
|
630
|
-
def readClientComSpec(self, element, parent: RPortPrototype):
|
|
756
|
+
def readClientComSpec(self, element: ET.Element, parent: RPortPrototype):
|
|
631
757
|
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
|
|
632
758
|
try:
|
|
633
759
|
com_spec = ClientComSpec()
|
|
760
|
+
self.readElementAttributes(child_element, com_spec)
|
|
634
761
|
com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
|
|
635
762
|
parent.addRequiredComSpec(com_spec)
|
|
636
763
|
except ValueError as err:
|
|
@@ -639,13 +766,111 @@ class ARXMLParser:
|
|
|
639
766
|
def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
|
|
640
767
|
#FIXME: readchildElement
|
|
641
768
|
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
769
|
+
self.readSwDataDefProps(element, com_spec)
|
|
642
770
|
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
643
771
|
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
644
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
|
+
|
|
645
869
|
def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
|
|
646
870
|
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
|
|
647
|
-
|
|
648
871
|
com_spec = NonqueuedReceiverComSpec()
|
|
872
|
+
|
|
873
|
+
self.readElementAttributes(child_element, com_spec)
|
|
649
874
|
self.readReceiverComSpec(child_element, com_spec)
|
|
650
875
|
try:
|
|
651
876
|
# FIXME:
|
|
@@ -656,6 +881,8 @@ class ARXMLParser:
|
|
|
656
881
|
except ValueError as err:
|
|
657
882
|
self.logger.error(parent.short_name + ": " + str(err))
|
|
658
883
|
|
|
884
|
+
com_spec.init_value = self.readInitValue(child_element)
|
|
885
|
+
|
|
659
886
|
parent.addRequiredComSpec(com_spec)
|
|
660
887
|
|
|
661
888
|
def readRPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
@@ -664,21 +891,38 @@ class ARXMLParser:
|
|
|
664
891
|
self.logger.debug("readRPortPrototype %s" % short_name)
|
|
665
892
|
|
|
666
893
|
prototype = parent.createRPortPrototype(short_name)
|
|
894
|
+
self.readElementAttributes(child_element, prototype)
|
|
667
895
|
prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
|
|
668
896
|
|
|
669
897
|
self.readClientComSpec(child_element, prototype)
|
|
670
898
|
self.readNonqueuedReceiverComSpec(child_element, prototype)
|
|
671
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
|
+
|
|
672
909
|
def readSenderComSpec(self, element, com_spec: SenderComSpec):
|
|
673
910
|
# FIXME:
|
|
911
|
+
self.readElementAttributes(element, com_spec)
|
|
674
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)
|
|
675
915
|
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
916
|
+
com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
|
|
676
917
|
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
677
918
|
|
|
678
919
|
def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
|
|
679
920
|
for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
|
|
680
921
|
com_spec = NonqueuedSenderComSpec()
|
|
681
922
|
self.readSenderComSpec(child_element, com_spec)
|
|
923
|
+
|
|
924
|
+
com_spec.init_value = self.readInitValue(child_element)
|
|
925
|
+
|
|
682
926
|
parent.addProvidedComSpec(com_spec)
|
|
683
927
|
|
|
684
928
|
def readPPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
@@ -687,6 +931,7 @@ class ARXMLParser:
|
|
|
687
931
|
self.logger.debug("readPPortPrototype %s" % short_name)
|
|
688
932
|
|
|
689
933
|
prototype = parent.createPPortPrototype(short_name)
|
|
934
|
+
self.readElementAttributes(child_element, prototype)
|
|
690
935
|
prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
|
|
691
936
|
self.readNonqueuedSenderComSpec(child_element, prototype)
|
|
692
937
|
|
|
@@ -729,20 +974,40 @@ class ARXMLParser:
|
|
|
729
974
|
sw_component = parent.createServiceSwComponentType(short_name)
|
|
730
975
|
self.readAtomicSwComponentType(child_element, sw_component)
|
|
731
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
|
+
|
|
732
997
|
def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
|
|
733
998
|
child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
|
|
734
999
|
if (child_element != None):
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
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
|
|
739
1004
|
|
|
740
1005
|
def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
|
|
741
1006
|
child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
|
|
742
1007
|
if (child_element != None):
|
|
743
|
-
requester_iref =
|
|
744
|
-
|
|
745
|
-
|
|
1008
|
+
requester_iref = RPortInCompositionInstanceRef()
|
|
1009
|
+
self.readElementAttributes(child_element, requester_iref)
|
|
1010
|
+
self.readRPortInCompositionInstanceRef(child_element, requester_iref)
|
|
746
1011
|
parent.requester_iref = requester_iref
|
|
747
1012
|
|
|
748
1013
|
def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
|
|
@@ -751,28 +1016,75 @@ class ARXMLParser:
|
|
|
751
1016
|
self.logger.debug("readAssemblySwConnectors %s" % short_name)
|
|
752
1017
|
|
|
753
1018
|
connector = parent.createAssemblySwConnector(short_name)
|
|
1019
|
+
self.readElementAttributes(child_element, connector)
|
|
754
1020
|
self.readAssemblySwConnectorProviderIRef(child_element, connector)
|
|
755
1021
|
self.readAssemblySwConnectorRequesterIRef(child_element, connector)
|
|
756
1022
|
|
|
757
|
-
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):
|
|
758
1059
|
for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
|
|
759
1060
|
short_name = self.readShortName(child_element)
|
|
760
1061
|
self.logger.debug("readSwComponentPrototypes %s" % short_name)
|
|
761
1062
|
|
|
762
1063
|
prototype = parent.createSwComponentPrototype(short_name)
|
|
1064
|
+
self.readElementAttributes(child_element, prototype)
|
|
763
1065
|
prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
764
1066
|
|
|
765
|
-
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):
|
|
766
1075
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
|
|
767
1076
|
short_name = self.readShortName(child_element)
|
|
768
1077
|
self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
|
|
769
1078
|
|
|
770
1079
|
sw_component = parent.createCompositionSwComponentType(short_name)
|
|
1080
|
+
self.readIdentifiable(child_element, sw_component)
|
|
771
1081
|
self.readSwComponentType(child_element, sw_component)
|
|
772
1082
|
self.readSwComponentPrototypes(child_element, sw_component)
|
|
773
1083
|
self.readAssemblySwConnectors(child_element, sw_component)
|
|
1084
|
+
self.readDelegationSwConnectors(child_element, sw_component)
|
|
1085
|
+
self.readDataTypeMappingSet(child_element, sw_component)
|
|
774
1086
|
|
|
775
|
-
def readDataTypeMap(self, element, parent: DataTypeMappingSet):
|
|
1087
|
+
def readDataTypeMap(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
776
1088
|
for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
|
|
777
1089
|
data_type_map = DataTypeMap()
|
|
778
1090
|
data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
|
|
@@ -781,13 +1093,13 @@ class ARXMLParser:
|
|
|
781
1093
|
# add the data type map to global namespace
|
|
782
1094
|
AUTOSAR.getInstance().addDataTypeMap(data_type_map)
|
|
783
1095
|
|
|
784
|
-
def readDataTypeMappingSets(self, element, parent: ARPackage):
|
|
1096
|
+
def readDataTypeMappingSets(self, element: ET.Element, parent: ARPackage):
|
|
785
1097
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-TYPE-MAPPING-SET", self.nsmap):
|
|
786
1098
|
short_name = self.readShortName(child_element)
|
|
787
1099
|
mapping_set = parent.createDataTypeMappingSet(short_name)
|
|
788
1100
|
self.readDataTypeMap(child_element, mapping_set)
|
|
789
1101
|
|
|
790
|
-
def readVariableDataPrototype(self, element, parent: SenderReceiverInterface):
|
|
1102
|
+
def readVariableDataPrototype(self, element: ET.Element, parent: SenderReceiverInterface):
|
|
791
1103
|
for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
792
1104
|
short_name = self.readShortName(child_element)
|
|
793
1105
|
prototype = parent.createDataElement(short_name)
|
|
@@ -800,7 +1112,7 @@ class ARXMLParser:
|
|
|
800
1112
|
sr_interface = parent.createSenderReceiverInterface(short_name)
|
|
801
1113
|
self.readVariableDataPrototype(child_element, sr_interface)
|
|
802
1114
|
|
|
803
|
-
def readArgumentDataPrototypes(self, element, parent: ClientServerOperation):
|
|
1115
|
+
def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
|
|
804
1116
|
for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
|
|
805
1117
|
short_name = self.readShortName(child_element)
|
|
806
1118
|
prototype = ArgumentDataPrototype(property, short_name)
|
|
@@ -808,26 +1120,26 @@ class ARXMLParser:
|
|
|
808
1120
|
prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
|
|
809
1121
|
parent.addArgumentDataPrototype(prototype)
|
|
810
1122
|
|
|
811
|
-
def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
|
|
1123
|
+
def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
|
|
812
1124
|
child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
|
|
813
1125
|
if child_element != None:
|
|
814
1126
|
for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
|
|
815
1127
|
parent.addPossibleErrorRef(ref)
|
|
816
1128
|
|
|
817
|
-
def readOperations(self, element, parent: ClientServerInterface):
|
|
1129
|
+
def readOperations(self, element: ET.Element, parent: ClientServerInterface):
|
|
818
1130
|
for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
|
|
819
1131
|
short_name = self.readShortName(child_element)
|
|
820
1132
|
operation = parent.createOperation(short_name)
|
|
821
1133
|
self.readArgumentDataPrototypes(child_element, operation)
|
|
822
1134
|
self.readPossibleErrorRefs(child_element, operation)
|
|
823
1135
|
|
|
824
|
-
def readPossibleErrors(self, element, parent: ClientServerInterface):
|
|
1136
|
+
def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
|
|
825
1137
|
for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
|
|
826
1138
|
short_name = self.readShortName(child_element)
|
|
827
1139
|
error = parent.createApplicationError(short_name)
|
|
828
1140
|
error.error_code = self.readChildElementNumberValue(short_name, child_element, "ERROR-CODE")
|
|
829
1141
|
|
|
830
|
-
def readClientServerInterfaces(self, element, parent: ARPackage):
|
|
1142
|
+
def readClientServerInterfaces(self, element: ET.Element, parent: ARPackage):
|
|
831
1143
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CLIENT-SERVER-INTERFACE", self.nsmap):
|
|
832
1144
|
short_name = self.readShortName(child_element)
|
|
833
1145
|
cs_interface = parent.createClientServerInterface(short_name)
|
|
@@ -835,57 +1147,176 @@ class ARXMLParser:
|
|
|
835
1147
|
self.readOperations(child_element, cs_interface)
|
|
836
1148
|
self.readPossibleErrors(child_element, cs_interface)
|
|
837
1149
|
|
|
838
|
-
def
|
|
1150
|
+
def readCompuConst(self, element: ET.Element, parent: CompuScale):
|
|
839
1151
|
child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
|
|
840
|
-
if (child_element
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
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):
|
|
844
1182
|
for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
|
|
845
1183
|
compu_scale = CompuScale()
|
|
846
1184
|
compu_scale.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
|
|
847
1185
|
compu_scale.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
|
|
848
|
-
|
|
849
|
-
self.readCompuConstTextContent(child_element, compu_scale.compu_inverse_value)
|
|
1186
|
+
self.readCompuScaleContents(child_element, compu_scale)
|
|
850
1187
|
parent.addCompuScale(compu_scale)
|
|
851
1188
|
|
|
852
|
-
def readCompuInternalToPhys(self, element, parent: CompuMethod):
|
|
1189
|
+
def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
|
|
853
1190
|
child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
|
|
854
1191
|
if (child_element != None):
|
|
855
1192
|
parent.compu_internal_to_phys = Compu()
|
|
1193
|
+
self.readElementAttributes(child_element, parent.compu_internal_to_phys)
|
|
856
1194
|
parent.compu_internal_to_phys.compu_content = CompuScales()
|
|
857
1195
|
self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
|
|
858
1196
|
|
|
859
|
-
def readCompuMethods(self, element, parent: ARPackage):
|
|
1197
|
+
def readCompuMethods(self, element: ET.Element, parent: ARPackage):
|
|
860
1198
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
|
|
861
1199
|
short_name = self.readShortName(child_element)
|
|
1200
|
+
self.logger.debug("readCompuMethods %s" % short_name)
|
|
862
1201
|
compu_method = parent.createCompuMethod(short_name)
|
|
863
|
-
|
|
1202
|
+
self.readIdentifiable(child_element, compu_method)
|
|
1203
|
+
compu_method.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
|
|
864
1204
|
self.readCompuInternalToPhys(child_element, compu_method)
|
|
865
1205
|
|
|
866
|
-
def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
|
|
1206
|
+
def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
|
|
867
1207
|
for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
|
|
868
1208
|
mapping = SwcBswRunnableMapping()
|
|
869
1209
|
mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
|
|
870
1210
|
mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
|
|
871
1211
|
parent.addRunnableMapping(mapping)
|
|
872
1212
|
|
|
873
|
-
def readSwcBswMappings(self, element, parent: ARPackage):
|
|
1213
|
+
def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
|
|
874
1214
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
|
|
875
1215
|
short_name = self.readShortName(child_element)
|
|
1216
|
+
self.logger.debug("readSwcBswMappings %s" % short_name)
|
|
876
1217
|
swc_bsw_mapping = parent.createSwcBswMapping(short_name)
|
|
877
|
-
|
|
878
1218
|
swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
|
|
879
1219
|
self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
|
|
880
1220
|
swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
|
|
881
1221
|
|
|
882
|
-
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):
|
|
883
1312
|
for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
|
|
884
1313
|
short_name = self.readShortName(child_element)
|
|
885
1314
|
ar_package = parent.createARPackage(short_name)
|
|
886
1315
|
|
|
887
1316
|
self.logger.debug("readARPackages %s" % ar_package.full_name)
|
|
888
1317
|
|
|
1318
|
+
self.readElementAttributes(child_element, ar_package)
|
|
1319
|
+
|
|
889
1320
|
self.readSenderReceiverInterfaces(child_element, ar_package)
|
|
890
1321
|
self.readClientServerInterfaces(child_element, ar_package)
|
|
891
1322
|
self.readDataTypeMappingSets(child_element, ar_package)
|
|
@@ -893,7 +1324,7 @@ class ARXMLParser:
|
|
|
893
1324
|
self.readApplicationPrimitiveDataTypes(child_element, ar_package)
|
|
894
1325
|
self.readApplicationRecordDataTypes(child_element, ar_package)
|
|
895
1326
|
self.readImplementationDataTypes(child_element, ar_package)
|
|
896
|
-
self.
|
|
1327
|
+
self.readSwBaseTypes(child_element, ar_package)
|
|
897
1328
|
self.readCompuMethods(child_element, ar_package)
|
|
898
1329
|
self.readEcuAbstractionSwComponents(child_element, ar_package)
|
|
899
1330
|
self.readApplicationSwComponentTypes(child_element, ar_package)
|
|
@@ -906,6 +1337,9 @@ class ARXMLParser:
|
|
|
906
1337
|
self.readSwcBswMappings(child_element, ar_package)
|
|
907
1338
|
self.readBswImplementation(child_element, ar_package)
|
|
908
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)
|
|
909
1343
|
|
|
910
1344
|
def load(self, filename, document: AUTOSAR):
|
|
911
1345
|
self.logger.info("Load %s ..." % filename)
|
|
@@ -915,6 +1349,4 @@ class ARXMLParser:
|
|
|
915
1349
|
if (self.getPureTagName(root.tag) != "AUTOSAR"):
|
|
916
1350
|
self._raiseError("Invalid ARXML file <%s>" % filename)
|
|
917
1351
|
|
|
918
|
-
|
|
919
|
-
|
|
920
1352
|
self.readARPackages(root, document)
|