armodel 1.0.0__py3-none-any.whl → 1.2.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 +1 -1
- armodel/models/ar_object.py +10 -0
- armodel/models/ar_package.py +40 -5
- armodel/models/ar_ref.py +30 -1
- armodel/models/bsw_module_template.py +15 -0
- armodel/models/common_structure.py +55 -8
- armodel/models/ecuc_parameter_def_template.py +0 -0
- armodel/models/general_structure.py +34 -8
- armodel/models/implementation.py +62 -6
- armodel/models/sw_component.py +58 -2
- armodel/parser/arxml_parser.py +204 -72
- {armodel-1.0.0.dist-info → armodel-1.2.0.dist-info}/METADATA +154 -136
- armodel-1.2.0.dist-info/RECORD +27 -0
- {armodel-1.0.0.dist-info → armodel-1.2.0.dist-info}/WHEEL +1 -1
- armodel-1.0.0.dist-info/RECORD +0 -25
- {armodel-1.0.0.dist-info → armodel-1.2.0.dist-info}/LICENSE +0 -0
- {armodel-1.0.0.dist-info → armodel-1.2.0.dist-info}/entry_points.txt +0 -0
- {armodel-1.0.0.dist-info → armodel-1.2.0.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
|
|
2
|
-
from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent
|
|
2
|
+
from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
|
|
3
|
+
from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
|
|
3
4
|
from ..models import RefType, AutosarVariableRef, ArVariableInImplementationDataInstanceRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
|
|
4
5
|
from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
|
|
5
6
|
from ..models import DataPrototype, RPortPrototype, PPortPrototype
|
|
@@ -10,9 +11,8 @@ from ..models import AutosarDataType, ARElement
|
|
|
10
11
|
from ..models import AssemblySwConnector, ProvidedPortPrototypeInstanceRef, RequiredPortPrototypeInstanceRef
|
|
11
12
|
from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent
|
|
12
13
|
from ..models import InternalBehavior, ExecutableEntity
|
|
13
|
-
from ..models import Implementation
|
|
14
|
-
from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent
|
|
15
|
-
|
|
14
|
+
from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
|
|
15
|
+
from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
|
|
16
16
|
|
|
17
17
|
from typing import List
|
|
18
18
|
import xml.etree.ElementTree as ET
|
|
@@ -59,11 +59,17 @@ class ARXMLParser:
|
|
|
59
59
|
return True
|
|
60
60
|
return False
|
|
61
61
|
|
|
62
|
+
def readChildElementFloatValue(self, short_name, element, key) -> float:
|
|
63
|
+
value = self.readChildElement(short_name, element, key)
|
|
64
|
+
if (value == None):
|
|
65
|
+
return None
|
|
66
|
+
return float(value)
|
|
67
|
+
|
|
62
68
|
def readChildElementBooleanValue(self, short_name, element, key) -> bool:
|
|
63
69
|
value = self.readChildElement(short_name, element, key)
|
|
64
70
|
return self._convertStringToBooleanValue(value)
|
|
65
71
|
|
|
66
|
-
def
|
|
72
|
+
def readChildOptionalElementBooleanValue(self, element, key) -> bool:
|
|
67
73
|
value = self.readChildOptionalElement(element, key)
|
|
68
74
|
if (value == None):
|
|
69
75
|
return None
|
|
@@ -79,7 +85,7 @@ class ARXMLParser:
|
|
|
79
85
|
value = self.readChildElement(short_name, element, key)
|
|
80
86
|
return self._convertStringToNumberValue(value)
|
|
81
87
|
|
|
82
|
-
def
|
|
88
|
+
def readChildOptionalElementNumberValue(self, element, key) -> int:
|
|
83
89
|
value = self.readChildOptionalElement(element, key)
|
|
84
90
|
if (value == None):
|
|
85
91
|
return None
|
|
@@ -100,13 +106,22 @@ class ARXMLParser:
|
|
|
100
106
|
def readShortName(self, element) -> str:
|
|
101
107
|
return self.readChildElement("", element, "SHORT-NAME")
|
|
102
108
|
|
|
103
|
-
def
|
|
109
|
+
def _readChildRefElementDestAndValue(self, element) -> RefType:
|
|
110
|
+
ref = RefType()
|
|
111
|
+
ref.dest = element.attrib['DEST']
|
|
112
|
+
ref.value = element.text
|
|
113
|
+
return ref
|
|
114
|
+
|
|
115
|
+
def readChildRefElement(self, short_name, element, key) -> RefType:
|
|
104
116
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
105
117
|
if (child_element != None):
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
118
|
+
return self._readChildRefElementDestAndValue(child_element)
|
|
119
|
+
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
120
|
+
|
|
121
|
+
def readChildOptionalRefElement(self, element, key) -> RefType:
|
|
122
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
123
|
+
if (child_element != None):
|
|
124
|
+
return self._readChildRefElementDestAndValue(child_element)
|
|
110
125
|
return None
|
|
111
126
|
|
|
112
127
|
def readChildRefElementList(self, element, key) -> List[RefType]:
|
|
@@ -119,20 +134,18 @@ class ARXMLParser:
|
|
|
119
134
|
results.append(ref)
|
|
120
135
|
return results
|
|
121
136
|
|
|
122
|
-
|
|
123
|
-
|
|
124
137
|
def readAutosarVariableInImplDatatype(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
125
138
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
126
139
|
if (child_element != None):
|
|
127
140
|
autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
|
|
128
|
-
autosar_variable_in_impl_datatype.port_prototype_ref = self.
|
|
129
|
-
autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
141
|
+
autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
|
|
142
|
+
autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildRefElement("", child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
130
143
|
accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
|
|
131
144
|
|
|
132
145
|
def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
133
146
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
|
|
134
147
|
if (child_element != None):
|
|
135
|
-
accessed_variable_ref.local_variable_ref = self.
|
|
148
|
+
accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
|
|
136
149
|
|
|
137
150
|
def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
|
|
138
151
|
for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
|
|
@@ -160,8 +173,9 @@ class ARXMLParser:
|
|
|
160
173
|
|
|
161
174
|
def readBswModuleDescriptionImplementedEntry(self, element, parent: BswModuleDescription):
|
|
162
175
|
for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
|
|
163
|
-
ref = self.
|
|
164
|
-
|
|
176
|
+
ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
|
|
177
|
+
if (ref != None):
|
|
178
|
+
parent.implemented_entry_refs.append(ref)
|
|
165
179
|
logging.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
|
|
166
180
|
|
|
167
181
|
def readProvidedModeGroup(self, element, parent: BswModuleDescription):
|
|
@@ -170,14 +184,14 @@ class ARXMLParser:
|
|
|
170
184
|
logging.debug("readProvidedModeGroup %s" % short_name)
|
|
171
185
|
|
|
172
186
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
173
|
-
mode_group.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
|
|
187
|
+
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
174
188
|
|
|
175
189
|
def readRequiredModeGroup(self, element, parent: BswModuleDescription):
|
|
176
190
|
for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
177
191
|
short_name = self.readShortName(child_element)
|
|
178
192
|
logging.debug("readRequiredModeGroup %s" % short_name)
|
|
179
193
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
180
|
-
mode_group.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
|
|
194
|
+
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
181
195
|
|
|
182
196
|
def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
|
|
183
197
|
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
@@ -191,7 +205,7 @@ class ARXMLParser:
|
|
|
191
205
|
def readBswModuleEntity(self, element, entity: BswModuleEntity):
|
|
192
206
|
self.readExecutableEntity(element, entity)
|
|
193
207
|
|
|
194
|
-
entity.implemented_entry_ref = self.readChildRefElement(element, "IMPLEMENTED-ENTRY-REF")
|
|
208
|
+
entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
|
|
195
209
|
|
|
196
210
|
def readBswCalledEntity(self, element, parent: BswInternalBehavior):
|
|
197
211
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
|
|
@@ -210,7 +224,7 @@ class ARXMLParser:
|
|
|
210
224
|
self.readBswModuleEntity(child_element, entity)
|
|
211
225
|
|
|
212
226
|
def readBswEvent(self, element, event: BswScheduleEvent):
|
|
213
|
-
event.starts_on_event_ref = self.readChildRefElement(element, "STARTS-ON-EVENT-REF")
|
|
227
|
+
event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
|
|
214
228
|
|
|
215
229
|
def readBswScheduleEvent(self, element, event: BswScheduleEvent):
|
|
216
230
|
self.readBswEvent(element, event)
|
|
@@ -228,7 +242,7 @@ class ARXMLParser:
|
|
|
228
242
|
short_name = self.readShortName(child_element)
|
|
229
243
|
logging.debug("readBswTimingEvent %s" % short_name)
|
|
230
244
|
event = parent.createBswTimingEvent(short_name)
|
|
231
|
-
event.period =
|
|
245
|
+
event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
|
|
232
246
|
|
|
233
247
|
self.readBswScheduleEvent(child_element, event)
|
|
234
248
|
|
|
@@ -237,7 +251,7 @@ class ARXMLParser:
|
|
|
237
251
|
short_name = self.readShortName(child_element)
|
|
238
252
|
logging.debug("readBswDataReceivedEvent %s" % short_name)
|
|
239
253
|
event = parent.createBswDataReceivedEvent(short_name)
|
|
240
|
-
event.data_ref = self.readChildRefElement(child_element, "DATA-REF")
|
|
254
|
+
event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
|
|
241
255
|
|
|
242
256
|
self.readBswScheduleEvent(child_element, event)
|
|
243
257
|
|
|
@@ -246,7 +260,7 @@ class ARXMLParser:
|
|
|
246
260
|
short_name = self.readShortName(child_element)
|
|
247
261
|
logging.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
|
|
248
262
|
event = parent.createBswInternalTriggerOccurredEvent(short_name)
|
|
249
|
-
event.event_source_ref = self.readChildRefElement(child_element, "EVENT-SOURCE-REF")
|
|
263
|
+
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
250
264
|
|
|
251
265
|
self.readBswScheduleEvent(child_element, event)
|
|
252
266
|
|
|
@@ -311,26 +325,79 @@ class ARXMLParser:
|
|
|
311
325
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
|
|
312
326
|
short_name = self.readShortName(child_element)
|
|
313
327
|
entry = parent.createBswModuleEntry(short_name)
|
|
314
|
-
entry.is_reentrant = self.
|
|
315
|
-
entry.is_synchronous = self.
|
|
316
|
-
entry.service_id = self.
|
|
328
|
+
entry.is_reentrant = self.readChildOptionalElementBooleanValue(child_element, "IS-REENTRANT")
|
|
329
|
+
entry.is_synchronous = self.readChildOptionalElementBooleanValue(child_element, "IS-SYNCHRONOUS")
|
|
330
|
+
entry.service_id = self.readChildOptionalElementNumberValue(child_element, "SERVICE-ID")
|
|
317
331
|
entry.call_type = self.readChildOptionalElement(child_element, "CALL-TYPE")
|
|
318
332
|
entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
|
|
319
333
|
entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
|
|
320
334
|
|
|
321
|
-
logging.debug("readBswModuleEntry \n%s" % entry)
|
|
335
|
+
#logging.debug("readBswModuleEntry \n%s" % entry)
|
|
336
|
+
logging.debug("readBswModuleEntry %s" % entry.short_name)
|
|
322
337
|
|
|
323
|
-
def
|
|
324
|
-
|
|
338
|
+
def readArtifactDescriptor(self, element, code_desc: Code):
|
|
339
|
+
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
|
|
340
|
+
artifact_desc = AutosarEngineeringObject()
|
|
341
|
+
artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
|
|
342
|
+
artifact_desc.category = self.readChildElement(code_desc.short_name, child_element, "CATEGORY")
|
|
343
|
+
code_desc.addArtifactDescriptor(artifact_desc)
|
|
344
|
+
|
|
345
|
+
logging.debug("readArtifactDescriptor %s", artifact_desc.short_label)
|
|
346
|
+
|
|
347
|
+
def readCodeDescriptor(self, element, impl: Implementation):
|
|
348
|
+
for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
|
|
349
|
+
short_name = self.readShortName(child_element)
|
|
350
|
+
logging.debug("readCodeDescriptor %s" % short_name)
|
|
351
|
+
code_desc = impl.createCodeDescriptor(short_name)
|
|
352
|
+
self.readArtifactDescriptor(child_element, code_desc)
|
|
353
|
+
|
|
354
|
+
def readMemorySections(self, element, consumption: ResourceConsumption):
|
|
355
|
+
for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
|
|
356
|
+
short_name = self.readShortName(child_element)
|
|
357
|
+
memory_section = consumption.createMemorySection(short_name)
|
|
358
|
+
alignment = self.readChildOptionalElement(child_element, "ALIGNMENT")
|
|
359
|
+
if (alignment != None):
|
|
360
|
+
memory_section.alignment = alignment
|
|
361
|
+
memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
|
|
362
|
+
logging.debug("readMemorySections %s" % memory_section.short_name)
|
|
363
|
+
|
|
364
|
+
def readResourceConsumption(self, element, impl: Implementation):
|
|
365
|
+
child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
|
|
366
|
+
if (child_element == None):
|
|
367
|
+
self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
|
|
368
|
+
return
|
|
369
|
+
short_name = self.readShortName(child_element)
|
|
370
|
+
impl.resource_consumption = ResourceConsumption(impl, short_name)
|
|
371
|
+
self.readMemorySections(child_element, impl.resource_consumption)
|
|
372
|
+
|
|
373
|
+
def readImplementation(self, element, impl: Implementation):
|
|
374
|
+
self.readCodeDescriptor(element, impl)
|
|
375
|
+
impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
|
|
376
|
+
self.readResourceConsumption(element, impl)
|
|
377
|
+
impl.sw_version = self.readChildOptionalElement(element, "SW-VERSION")
|
|
378
|
+
impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
|
|
379
|
+
impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
|
|
325
380
|
|
|
326
381
|
def readBswImplementation(self, element, parent: ARPackage):
|
|
327
|
-
|
|
382
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
|
|
328
383
|
short_name = self.readShortName(child_element)
|
|
329
|
-
|
|
384
|
+
impl = parent.createBswImplementation(short_name)
|
|
385
|
+
logging.debug("readBswImplementation %s" % impl.short_name)
|
|
330
386
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
self.
|
|
387
|
+
self.readImplementation(child_element, impl)
|
|
388
|
+
|
|
389
|
+
impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
|
|
390
|
+
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
391
|
+
|
|
392
|
+
def readSwcImplementation(self, element, parent: ARPackage):
|
|
393
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
|
|
394
|
+
short_name = self.readShortName(child_element)
|
|
395
|
+
impl = parent.createSwcImplementation(short_name)
|
|
396
|
+
logging.debug("readSwcImplementation %s" % impl.short_name)
|
|
397
|
+
|
|
398
|
+
self.readImplementation(child_element, impl)
|
|
399
|
+
|
|
400
|
+
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
334
401
|
|
|
335
402
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
336
403
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
@@ -350,13 +417,29 @@ class ARXMLParser:
|
|
|
350
417
|
def readReadLocalVariables(self, element, parent: RunnableEntity):
|
|
351
418
|
self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
|
|
352
419
|
|
|
353
|
-
def readROperationIRef(self, element,
|
|
420
|
+
def readROperationIRef(self, element, parent: ServerCallPoint):
|
|
354
421
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
355
422
|
if (child_element != None):
|
|
356
423
|
operation_iref = ROperationInAtomicSwcInstanceRef()
|
|
357
|
-
operation_iref.context_r_port_ref = self.
|
|
358
|
-
operation_iref.target_required_operation_ref = self.readChildRefElement(child_element, "TARGET-REQUIRED-OPERATION-REF")
|
|
359
|
-
|
|
424
|
+
operation_iref.context_r_port_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
|
|
425
|
+
operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
|
|
426
|
+
parent.operation_iref = operation_iref
|
|
427
|
+
|
|
428
|
+
def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
|
|
429
|
+
child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
|
|
430
|
+
if (child_element != None):
|
|
431
|
+
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
432
|
+
data_iref.context_r_port_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
|
|
433
|
+
data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
|
|
434
|
+
parent.data_iref = data_iref
|
|
435
|
+
|
|
436
|
+
def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
|
|
437
|
+
for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
|
|
438
|
+
mode_iref = RModeInAtomicSwcInstanceRef()
|
|
439
|
+
mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
|
|
440
|
+
mode_iref.context_mode_declaration_group_prototype = self.readChildRefElement("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
441
|
+
mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
|
|
442
|
+
parent.addModeIRef(mode_iref)
|
|
360
443
|
|
|
361
444
|
def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
|
|
362
445
|
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
|
|
@@ -382,7 +465,7 @@ class ARXMLParser:
|
|
|
382
465
|
for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
|
|
383
466
|
short_name = self.readShortName(child_element)
|
|
384
467
|
runnable = parent.createRunnableEntity(short_name)
|
|
385
|
-
runnable.can_be_invoked_concurrently = self.
|
|
468
|
+
runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
386
469
|
runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
|
|
387
470
|
|
|
388
471
|
self.readDataReceivePointByArguments(child_element, runnable)
|
|
@@ -396,14 +479,14 @@ class ARXMLParser:
|
|
|
396
479
|
self.readInternalTriggeringPoint(child_element, runnable)
|
|
397
480
|
|
|
398
481
|
def readRTEEvent(self, element, event: RTEEvent):
|
|
399
|
-
event.start_on_event_ref = self.
|
|
482
|
+
event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
|
|
400
483
|
|
|
401
484
|
def readOperationIRef(self, element, parent: OperationInvokedEvent):
|
|
402
485
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
403
486
|
if (child_element != None):
|
|
404
487
|
parent.operation_iref = POperationInAtomicSwcInstanceRef()
|
|
405
|
-
parent.operation_iref.context_p_port_ref = self.readChildRefElement(child_element, "CONTEXT-P-PORT-REF")
|
|
406
|
-
parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(child_element, "TARGET-PROVIDED-OPERATION-REF")
|
|
488
|
+
parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
|
|
489
|
+
parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
|
|
407
490
|
|
|
408
491
|
def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
|
|
409
492
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
|
|
@@ -417,7 +500,14 @@ class ARXMLParser:
|
|
|
417
500
|
short_name = self.readShortName(child_element)
|
|
418
501
|
prototype = parent.createExplicitInterRunnableVariable(short_name)
|
|
419
502
|
self.readSwDataDefProps(child_element, prototype)
|
|
420
|
-
prototype.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
|
|
503
|
+
prototype.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
504
|
+
|
|
505
|
+
def readInitEvents(self, element, parent: SwcInternalBehavior):
|
|
506
|
+
for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
|
|
507
|
+
short_name = self.readShortName(child_element)
|
|
508
|
+
event = parent.createInitEvent(short_name)
|
|
509
|
+
|
|
510
|
+
self.readRTEEvent(child_element, event)
|
|
421
511
|
|
|
422
512
|
def readTimingEvents(self, element, parent: SwcInternalBehavior):
|
|
423
513
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
|
|
@@ -431,13 +521,29 @@ class ARXMLParser:
|
|
|
431
521
|
event.offset = (float)(offset)
|
|
432
522
|
event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
|
|
433
523
|
|
|
524
|
+
def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
|
|
525
|
+
for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
|
|
526
|
+
short_name = self.readShortName(child_element)
|
|
527
|
+
event = parent.createDataReceivedEvent(short_name)
|
|
528
|
+
|
|
529
|
+
self.readRTEEvent(child_element, event)
|
|
530
|
+
self.readRVariableInAtomicSwcInstanceRef(child_element, event)
|
|
531
|
+
|
|
532
|
+
def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
|
|
533
|
+
for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
|
|
534
|
+
short_name = self.readShortName(child_element)
|
|
535
|
+
event = parent.createSwcModeSwitchEvent(short_name)
|
|
536
|
+
|
|
537
|
+
self.readRTEEvent(child_element, event)
|
|
538
|
+
self.readRModeInAtomicSwcInstanceRef(child_element, event)
|
|
539
|
+
|
|
434
540
|
def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
|
|
435
541
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
436
542
|
short_name = self.readShortName(child_element)
|
|
437
543
|
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
438
544
|
|
|
439
545
|
self.readRTEEvent(child_element, event)
|
|
440
|
-
event.event_source_ref = self.readChildRefElement(child_element, "EVENT-SOURCE-REF")
|
|
546
|
+
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
441
547
|
|
|
442
548
|
def readSwPointerTargetProps(self, element, parent: ARElement):
|
|
443
549
|
child_element = element.find(
|
|
@@ -454,10 +560,10 @@ class ARXMLParser:
|
|
|
454
560
|
|
|
455
561
|
if (child_element != None):
|
|
456
562
|
sw_data_def_props = SwDataDefProps()
|
|
457
|
-
sw_data_def_props.base_type_ref = self.
|
|
458
|
-
sw_data_def_props.data_constr_ref = self.
|
|
459
|
-
sw_data_def_props.compu_method_ref = self.
|
|
460
|
-
sw_data_def_props.implementation_data_type_ref = self.
|
|
563
|
+
sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
|
|
564
|
+
sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
|
|
565
|
+
sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
|
|
566
|
+
sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
461
567
|
sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
|
|
462
568
|
self.readSwPointerTargetProps(child_element, sw_data_def_props)
|
|
463
569
|
parent.sw_data_def_props = sw_data_def_props
|
|
@@ -501,8 +607,10 @@ class ARXMLParser:
|
|
|
501
607
|
array_sub_element = data_type.getImplementationDataTypeElements()[0]
|
|
502
608
|
if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
|
|
503
609
|
data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementation_data_type_ref.value)
|
|
610
|
+
elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
|
|
611
|
+
continue
|
|
504
612
|
else:
|
|
505
|
-
self._raiseError("The
|
|
613
|
+
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
506
614
|
|
|
507
615
|
def readSwDataTypes(self, element, parent: ARPackage):
|
|
508
616
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
|
|
@@ -513,16 +621,16 @@ class ARXMLParser:
|
|
|
513
621
|
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
|
|
514
622
|
try:
|
|
515
623
|
com_spec = ClientComSpec()
|
|
516
|
-
com_spec.operation_ref = self.readChildRefElement(child_element, "OPERATION-REF")
|
|
624
|
+
com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
|
|
517
625
|
parent.addRequiredComSpec(com_spec)
|
|
518
626
|
except ValueError as err:
|
|
519
627
|
print(parent.short_name + ": " + str(err))
|
|
520
628
|
|
|
521
629
|
def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
|
|
522
630
|
#FIXME: readchildElement
|
|
523
|
-
com_spec.data_element_ref = self.
|
|
524
|
-
com_spec.handle_out_of_range = self.
|
|
525
|
-
com_spec.uses_end_to_end_protection = self.
|
|
631
|
+
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
632
|
+
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
633
|
+
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
526
634
|
|
|
527
635
|
def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
|
|
528
636
|
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
|
|
@@ -531,7 +639,7 @@ class ARXMLParser:
|
|
|
531
639
|
self.readReceiverComSpec(child_element, com_spec)
|
|
532
640
|
try:
|
|
533
641
|
# FIXME:
|
|
534
|
-
com_spec.alive_timeout =
|
|
642
|
+
com_spec.alive_timeout = self.readChildElementFloatValue("", child_element, "ALIVE-TIMEOUT")
|
|
535
643
|
com_spec.enable_updated = self.readChildElementBooleanValue("", child_element, "ENABLE-UPDATE")
|
|
536
644
|
com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
|
|
537
645
|
com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
|
|
@@ -546,16 +654,16 @@ class ARXMLParser:
|
|
|
546
654
|
logging.debug("readRPortPrototype %s" % short_name)
|
|
547
655
|
|
|
548
656
|
prototype = parent.createRPortPrototype(short_name)
|
|
549
|
-
prototype.required_interface_tref = self.
|
|
657
|
+
prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
|
|
550
658
|
|
|
551
659
|
self.readClientComSpec(child_element, prototype)
|
|
552
660
|
self.readNonqueuedReceiverComSpec(child_element, prototype)
|
|
553
661
|
|
|
554
662
|
def readSenderComSpec(self, element, com_spec: SenderComSpec):
|
|
555
663
|
# FIXME:
|
|
556
|
-
com_spec.data_element_ref = self.
|
|
557
|
-
com_spec.handle_out_of_range = self.
|
|
558
|
-
com_spec.uses_end_to_end_protection = self.
|
|
664
|
+
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
665
|
+
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
666
|
+
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
559
667
|
|
|
560
668
|
def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
|
|
561
669
|
for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
|
|
@@ -569,7 +677,7 @@ class ARXMLParser:
|
|
|
569
677
|
logging.debug("readPPortPrototype %s" % short_name)
|
|
570
678
|
|
|
571
679
|
prototype = parent.createPPortPrototype(short_name)
|
|
572
|
-
prototype.provided_interface_tref = self.
|
|
680
|
+
prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
|
|
573
681
|
self.readNonqueuedSenderComSpec(child_element, prototype)
|
|
574
682
|
|
|
575
683
|
def readSwComponentType(self, element, parent: SwComponentType):
|
|
@@ -599,6 +707,12 @@ class ARXMLParser:
|
|
|
599
707
|
sw_component = parent.createApplicationSwComponentType(short_name)
|
|
600
708
|
self.readAtomicSwComponentType(child_element, sw_component)
|
|
601
709
|
|
|
710
|
+
def readSensorActuatorSwComponentType(self, element, parent: ARPackage):
|
|
711
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENSOR-ACTUATOR-SW-COMPONENT-TYPE", self.nsmap):
|
|
712
|
+
short_name = self.readShortName(child_element)
|
|
713
|
+
sw_component = parent.createSensorActuatorSwComponentType(short_name)
|
|
714
|
+
self.readAtomicSwComponentType(child_element, sw_component)
|
|
715
|
+
|
|
602
716
|
def readServiceSwComponentTypes(self, element, parent: ARPackage):
|
|
603
717
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SERVICE-SW-COMPONENT-TYPE", self.nsmap):
|
|
604
718
|
short_name = self.readShortName(child_element)
|
|
@@ -609,16 +723,16 @@ class ARXMLParser:
|
|
|
609
723
|
child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
|
|
610
724
|
if (child_element != None):
|
|
611
725
|
provider_iref = ProvidedPortPrototypeInstanceRef()
|
|
612
|
-
provider_iref.context_component_ref = self.
|
|
613
|
-
provider_iref.target_p_port_ref = self.
|
|
726
|
+
provider_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
|
|
727
|
+
provider_iref.target_p_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-P-PORT-REF")
|
|
614
728
|
parent.provider_iref = provider_iref
|
|
615
729
|
|
|
616
730
|
def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
|
|
617
731
|
child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
|
|
618
732
|
if (child_element != None):
|
|
619
733
|
requester_iref = RequiredPortPrototypeInstanceRef()
|
|
620
|
-
requester_iref.context_component_ref = self.
|
|
621
|
-
requester_iref.target_r_port_ref = self.
|
|
734
|
+
requester_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
|
|
735
|
+
requester_iref.target_r_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-R-PORT-REF")
|
|
622
736
|
parent.requester_iref = requester_iref
|
|
623
737
|
|
|
624
738
|
def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
|
|
@@ -636,7 +750,7 @@ class ARXMLParser:
|
|
|
636
750
|
logging.debug("readSwComponentPrototypes %s" % short_name)
|
|
637
751
|
|
|
638
752
|
prototype = parent.createSwComponentPrototype(short_name)
|
|
639
|
-
prototype.type_tref = self.
|
|
753
|
+
prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
640
754
|
|
|
641
755
|
def readCompositionSwComponentTypes(self, element, parent: ARPackage):
|
|
642
756
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
|
|
@@ -651,8 +765,8 @@ class ARXMLParser:
|
|
|
651
765
|
def readDataTypeMap(self, element, parent: DataTypeMappingSet):
|
|
652
766
|
for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
|
|
653
767
|
data_type_map = DataTypeMap()
|
|
654
|
-
data_type_map.application_data_type_ref = self.
|
|
655
|
-
data_type_map.implementation_data_type_ref = self.
|
|
768
|
+
data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
|
|
769
|
+
data_type_map.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
656
770
|
parent.addDataTypeMap(data_type_map)
|
|
657
771
|
# add the data type map to global namespace
|
|
658
772
|
AUTOSAR.getInstance().addDataTypeMap(data_type_map)
|
|
@@ -668,7 +782,7 @@ class ARXMLParser:
|
|
|
668
782
|
short_name = self.readShortName(child_element)
|
|
669
783
|
prototype = parent.createDataElement(short_name)
|
|
670
784
|
self.readSwDataDefProps(child_element, prototype)
|
|
671
|
-
prototype.type_tref = self.
|
|
785
|
+
prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
672
786
|
|
|
673
787
|
def readSenderReceiverInterfaces(self, element, parent: ARPackage):
|
|
674
788
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENDER-RECEIVER-INTERFACE", self.nsmap):
|
|
@@ -680,7 +794,7 @@ class ARXMLParser:
|
|
|
680
794
|
for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
|
|
681
795
|
short_name = self.readShortName(child_element)
|
|
682
796
|
prototype = ArgumentDataPrototype(property, short_name)
|
|
683
|
-
prototype.type_tref = self.
|
|
797
|
+
prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
684
798
|
prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
|
|
685
799
|
parent.addArgumentDataPrototype(prototype)
|
|
686
800
|
|
|
@@ -736,9 +850,25 @@ class ARXMLParser:
|
|
|
736
850
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
|
|
737
851
|
short_name = self.readShortName(child_element)
|
|
738
852
|
compu_method = parent.createCompuMethod(short_name)
|
|
739
|
-
compu_method.category = self.
|
|
853
|
+
compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
|
|
740
854
|
self.readCompuInternalToPhys(child_element, compu_method)
|
|
741
855
|
|
|
856
|
+
def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
|
|
857
|
+
for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
|
|
858
|
+
mapping = SwcBswRunnableMapping()
|
|
859
|
+
mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
|
|
860
|
+
mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
|
|
861
|
+
parent.addRunnableMapping(mapping)
|
|
862
|
+
|
|
863
|
+
def readSwcBswMappings(self, element, parent: ARPackage):
|
|
864
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
|
|
865
|
+
short_name = self.readShortName(child_element)
|
|
866
|
+
swc_bsw_mapping = parent.createSwcBswMapping(short_name)
|
|
867
|
+
|
|
868
|
+
swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
|
|
869
|
+
self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
|
|
870
|
+
swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
|
|
871
|
+
|
|
742
872
|
def readARPackages(self, element, parent):
|
|
743
873
|
for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
|
|
744
874
|
short_name = self.readShortName(child_element)
|
|
@@ -758,12 +888,14 @@ class ARXMLParser:
|
|
|
758
888
|
self.readEcuAbstractionSwComponents(child_element, ar_package)
|
|
759
889
|
self.readApplicationSwComponentTypes(child_element, ar_package)
|
|
760
890
|
self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
|
|
891
|
+
self.readSensorActuatorSwComponentType(child_element, ar_package)
|
|
761
892
|
self.readServiceSwComponentTypes(child_element, ar_package)
|
|
762
893
|
self.readCompositionSwComponentTypes(child_element, ar_package)
|
|
763
894
|
self.readBswModuleDescription(child_element, ar_package)
|
|
764
895
|
self.readBswModuleEntry(child_element, ar_package)
|
|
896
|
+
self.readSwcBswMappings(child_element, ar_package)
|
|
765
897
|
self.readBswImplementation(child_element, ar_package)
|
|
766
|
-
|
|
898
|
+
self.readSwcImplementation(child_element, ar_package)
|
|
767
899
|
|
|
768
900
|
def load(self, filename, document: AUTOSAR):
|
|
769
901
|
tree = ET.parse(filename)
|