armodel 1.7.2__py3-none-any.whl → 1.7.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. armodel/cli/arxml_dump_cli.py +1 -1
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +42 -19
  3. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +104 -30
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +12 -16
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/FlatMap.py +70 -0
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/Implementation.py +12 -9
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +29 -22
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/HardwareConfiguration.py +33 -0
  9. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/HeapUsage.py +10 -0
  10. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/SoftwareContext.py +23 -0
  11. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/StackUsage.py +93 -0
  12. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/__init__.py +39 -5
  13. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +26 -2
  14. armodel/models/M2/AUTOSARTemplates/CommonStructure/SwcBswMapping.py +48 -6
  15. armodel/models/M2/AUTOSARTemplates/GenericStructure/AbstractStructure.py +5 -5
  16. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +21 -1
  17. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +12 -0
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +8 -0
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +196 -5
  20. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +11 -2
  21. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +36 -21
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +10 -1
  23. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +16 -1
  24. armodel/models/M2/MSR/CalibrationData/CalibrationValue.py +34 -3
  25. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +7 -0
  26. armodel/models/M2/MSR/DataDictionary/ServiceProcessTask.py +33 -0
  27. armodel/models/__init__.py +3 -0
  28. armodel/parser/abstract_arxml_parser.py +4 -14
  29. armodel/parser/arxml_parser.py +347 -180
  30. armodel/tests/test_armodel/models/test_ar_object.py +6 -2
  31. armodel/tests/test_armodel/models/test_port_interface.py +4 -4
  32. armodel/tests/test_armodel/parser/test_parse_bswmd.py +48 -48
  33. armodel/writer/abstract_arxml_writer.py +1 -0
  34. armodel/writer/arxml_writer.py +351 -226
  35. {armodel-1.7.2.dist-info → armodel-1.7.3.dist-info}/METADATA +15 -2
  36. {armodel-1.7.2.dist-info → armodel-1.7.3.dist-info}/RECORD +40 -34
  37. {armodel-1.7.2.dist-info → armodel-1.7.3.dist-info}/LICENSE +0 -0
  38. {armodel-1.7.2.dist-info → armodel-1.7.3.dist-info}/WHEEL +0 -0
  39. {armodel-1.7.2.dist-info → armodel-1.7.3.dist-info}/entry_points.txt +0 -0
  40. {armodel-1.7.2.dist-info → armodel-1.7.3.dist-info}/top_level.txt +0 -0
@@ -5,10 +5,11 @@ import os
5
5
 
6
6
 
7
7
 
8
+
8
9
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
9
10
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
10
11
  from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
11
- from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuMethod, Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
12
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent, CompuMethod, Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
12
13
  from ..models.M2.MSR.AsamHdo.SpecialData import Sdg, Sd
13
14
  from ..models.M2.MSR.CalibrationData.CalibrationValue import SwValueCont, SwValues
14
15
  from ..models.M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps, SwPointerTargetProps
@@ -18,6 +19,7 @@ from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroupConte
18
19
  from ..models.M2.MSR.DataDictionary.DataDefProperties import ValueList
19
20
  from ..models.M2.MSR.DataDictionary.RecordLayout import SwRecordLayoutGroup
20
21
  from ..models.M2.MSR.DataDictionary.CalibrationParameter import SwCalprmAxisSet
22
+ from ..models.M2.MSR.DataDictionary.ServiceProcessTask import SwServiceArg
21
23
  from ..models.M2.MSR.Documentation.Annotation import Annotation, GeneralAnnotation
22
24
  from ..models.M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
23
25
  from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
@@ -25,15 +27,18 @@ from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName,
25
27
  from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
26
28
 
27
29
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
28
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalBehavior, BswModuleEntity, BswScheduleEvent, BswModeSenderPolicy
30
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswDataReceivedEvent, BswInternalBehavior, BswInternalTriggerOccurredEvent, BswInterruptEntity, BswModeSwitchEvent, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswModeSenderPolicy, BswTimingEvent
31
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
29
32
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
30
33
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
31
34
  from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
32
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
36
+ from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
33
37
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps, Code
34
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup, ModeRequestTypeMap, ModeDeclarationGroupPrototype
35
39
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
36
40
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import MemorySection
41
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
37
42
  from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
38
43
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
39
44
  from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceAlgorithm, DiagEventDebounceMonitorInternal, DiagnosticEventNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
@@ -64,7 +69,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import Assembl
64
69
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
65
70
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
66
71
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
67
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, SenderReceiverInterface
72
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, DataPrototypeMapping, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, PortInterfaceMappingSet, SenderReceiverInterface, VariableAndParameterInterfaceMapping
68
73
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
69
74
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
70
75
 
@@ -114,7 +119,7 @@ class ARXMLParser(AbstractARXMLParser):
114
119
  return sdg
115
120
 
116
121
  def readSdgs(self, element: ET.Element, admin_data: AdminData):
117
- for child_element in self.findall(element, "./SDGS/SDG"):
122
+ for child_element in self.findall(element, "SDGS/SDG"):
118
123
  admin_data.addSdg(self.getSdg(child_element))
119
124
 
120
125
  def getAdminData(self, element: ET.Element, key: str) -> AdminData:
@@ -146,7 +151,7 @@ class ARXMLParser(AbstractARXMLParser):
146
151
  identifiable.setAdminData(self.getAdminData(element, "ADMIN-DATA"))
147
152
 
148
153
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
149
- for child_element in self.findall(element, "./L-4"):
154
+ for child_element in self.findall(element, "L-4"):
150
155
  l4 = LLongName()
151
156
  self.readARObjectAttributes(child_element, l4)
152
157
  l4.value = child_element.text
@@ -156,7 +161,7 @@ class ARXMLParser(AbstractARXMLParser):
156
161
 
157
162
  def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
158
163
  long_name = None
159
- child_element = self.find(element, "./%s" % key)
164
+ child_element = self.find(element, "%s" % key)
160
165
  if child_element is not None:
161
166
  long_name = MultilanguageLongName()
162
167
  self.readARObjectAttributes(child_element, long_name)
@@ -164,7 +169,7 @@ class ARXMLParser(AbstractARXMLParser):
164
169
  return long_name
165
170
 
166
171
  def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
167
- for child_element in self.findall(element, "./L-2"):
172
+ for child_element in self.findall(element, "L-2"):
168
173
  l2 = LOverviewParagraph()
169
174
  self.readARObjectAttributes(child_element, l2)
170
175
  l2.value = child_element.text
@@ -174,7 +179,7 @@ class ARXMLParser(AbstractARXMLParser):
174
179
 
175
180
  def getMultiLanguageOverviewParagraph(self, element: ET.Element, key: str) -> MultiLanguageOverviewParagraph:
176
181
  paragraph = None
177
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
182
+ child_element = self.find(element, key)
178
183
  if child_element is not None:
179
184
  paragraph = MultiLanguageOverviewParagraph()
180
185
  self.readARObjectAttributes(child_element, paragraph)
@@ -205,6 +210,7 @@ class ARXMLParser(AbstractARXMLParser):
205
210
  ref = None
206
211
  if (child_element is not None):
207
212
  ref = AutosarVariableRef()
213
+ #self.readARObjectAttributes(child_element, ref)
208
214
  ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
209
215
  return ref
210
216
 
@@ -217,7 +223,7 @@ class ARXMLParser(AbstractARXMLParser):
217
223
  return ref
218
224
 
219
225
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
220
- for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
226
+ for child_element in self.findall(element, "%s/VARIABLE-ACCESS" % key):
221
227
  short_name = self.getShortName(child_element)
222
228
 
223
229
  self.logger.debug("readVariableAccesses %s" % short_name)
@@ -244,7 +250,7 @@ class ARXMLParser(AbstractARXMLParser):
244
250
  variable_access = parent.createReadLocalVariable(short_name)
245
251
  variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
246
252
  else:
247
- self._raiseError("Invalid key type <%s>" % key)
253
+ self.notImplemented("Unsupported Variable Accesss <%s>" % key)
248
254
 
249
255
  self.readIdentifiable(child_element, variable_access)
250
256
 
@@ -286,71 +292,45 @@ class ARXMLParser(AbstractARXMLParser):
286
292
  .setSwAddrMethodRef(self.getChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF"))
287
293
 
288
294
  def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
289
- for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
295
+ for child_element in self.findall(element, "sMANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
290
296
  ref_type = self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF")
291
297
  if ref_type is not None:
292
298
  entity.addManagedModeGroupRef(ref_type)
293
299
 
294
- def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
295
- self.readExecutableEntity(element, entity)
296
- entity.setImplementedEntryRef(self.getChildElementRefType(entity.getShortName(), element, "IMPLEMENTED-ENTRY-REF"))
297
- self.readBswModuleEntityManagedModeGroup(element, entity)
298
-
299
- def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
300
- for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
301
- short_name = self.getShortName(child_element)
302
- self.logger.debug("readBswCalledEntity %s" % short_name)
303
- entity = parent.createBswCalledEntity(short_name)
304
-
305
- self.readBswModuleEntity(child_element, entity)
306
-
307
- def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
308
- for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
309
- short_name = self.getShortName(child_element)
310
- self.logger.debug("readBswSchedulableEntity %s" % short_name)
311
- entity = parent.createBswSchedulableEntity(short_name)
312
- self.readBswModuleEntity(child_element, entity)
300
+
313
301
 
314
302
  def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
315
- event.startsOnEventRef = self.getChildElementRefType(event.getShortName(), element, "STARTS-ON-EVENT-REF")
303
+ event.startsOnEventRef = self.getChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF")
316
304
 
317
305
  def readBswScheduleEvent(self, element, event: BswScheduleEvent):
318
306
  self.readBswEvent(element, event)
319
307
 
320
- def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
321
- for child_element in self.findall(element, "EVENTS/BSW-MODE-SWITCH-EVENT"):
322
- short_name = self.getShortName(child_element)
323
- self.logger.debug("readBswModeSwitchEvent %s" % short_name)
324
- event = parent.createBswModeSwitchEvent(short_name)
325
- # Read the Inherit BswScheduleEvent
326
- self.readBswScheduleEvent(child_element, event)
327
-
328
- def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
329
- for child_element in self.findall(element, "EVENTS/BSW-TIMING-EVENT"):
330
- short_name = self.getShortName(child_element)
331
- self.logger.debug("read BswTimingEvent %s" % short_name)
332
- event = parent.createBswTimingEvent(short_name)
333
- event.setPeriod(self.getChildElementOptionalTimeValue(child_element, "PERIOD"))
334
- # Read the Inherit BswScheduleEvent
335
- self.readBswScheduleEvent(child_element, event)
336
-
337
- def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
338
- for child_element in self.findall(element, "EVENTS/BSW-DATA-RECEIVED-EVENT"):
339
- short_name = self.getShortName(child_element)
340
- self.logger.debug("readBswDataReceivedEvent %s" % short_name)
341
- event = parent.createBswDataReceivedEvent(short_name)
342
- event.dataRef = self.getChildElementRefType(parent.getShortName(), child_element, "DATA-REF")
343
- # Read the Inherit BswScheduleEvent
344
- self.readBswScheduleEvent(child_element, event)
345
-
346
- def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
347
- for child_element in self.findall(element, "EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
348
- short_name = self.getShortName(child_element)
349
- self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
350
- event = parent.createBswInternalTriggerOccurredEvent(short_name)
351
- event.eventSourceRef = self.getChildElementRefType(parent.getShortName(), child_element, "EVENT-SOURCE-REF")
352
- # Read the Inherit BswScheduleEvent
353
- self.readBswScheduleEvent(child_element, event)
308
+ def readBswModeSwitchEvent(self, element: ET.Element, event: BswModeSwitchEvent):
309
+ self.logger.debug("read BswModeSwitchEvent %s" % event.getShortName())
310
+ # Read the Inherit BswScheduleEvent
311
+ self.readBswScheduleEvent(element, event)
312
+
313
+ def readBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
314
+ self.logger.debug("read BswTimingEvent %s" % event.getShortName())
315
+ # Read the Inherit BswScheduleEvent
316
+ self.readBswScheduleEvent(element, event)
317
+ event.setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
318
+ if event.getPeriod() is None:
319
+ self.logger.warning("Period of BswTimingEvent <%s> is invalid." % event.getShortName())
320
+ else:
321
+ self.logger.debug(" Period: <%f, %s>" % (event.getPeriod().getValue(), event.getPeriod().getText()))
322
+
323
+ def readBswDataReceivedEvent(self, element: ET.Element, event: BswDataReceivedEvent):
324
+ self.logger.debug("read BswTimingEvent %s" % event.getShortName())
325
+ # Read the Inherit BswScheduleEvent
326
+ self.readBswScheduleEvent(element, event)
327
+ event.setDataRef(self.getChildElementOptionalRefType(element, "DATA-REF"))
328
+
329
+ def readBswInternalTriggerOccurredEvent(self, element: ET.Element, event: BswInternalTriggerOccurredEvent):
330
+ self.logger.debug("read BswTimingEvent %s" % event.getShortName())
331
+ # Read the Inherit BswScheduleEvent
332
+ self.readBswScheduleEvent(element, event)
333
+ event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
354
334
 
355
335
  def getBswModeSenderPolicy(self, element: ET.Element) -> BswModeSenderPolicy:
356
336
  policy = BswModeSenderPolicy()
@@ -367,13 +347,13 @@ class ARXMLParser(AbstractARXMLParser):
367
347
  self._raiseError("Unsupported ModeSenderPolicy type <%s>." % tag_name)
368
348
 
369
349
  def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
370
- child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
350
+ child_element = self.find(element, "DATA-TYPE-MAPPING-REFS")
371
351
  if child_element is not None:
372
- for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
352
+ for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
373
353
  behavior.addDataTypeMappingRef(ref)
374
354
 
375
355
  def readInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
376
- for child_element in element.findall("./xmlns:CONSTANT-MEMORYS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
356
+ for child_element in self.findall(element, "CONSTANT-MEMORYS/PARAMETER-DATA-PROTOTYPE"):
377
357
  short_name = self.getShortName(child_element)
378
358
  prototype = behavior.createConstantMemory(short_name)
379
359
  self.readParameterDataPrototype(child_element, prototype)
@@ -381,7 +361,7 @@ class ARXMLParser(AbstractARXMLParser):
381
361
  def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
382
362
  self.readIdentifiable(element, behavior)
383
363
  self.readInternalBehaviorConstantMemories(element, behavior)
384
- for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
364
+ for child_element in self.findall(element, "EXCLUSIVE-AREAS/EXCLUSIVE-AREA"):
385
365
  short_name = self.getShortName(child_element)
386
366
  behavior.createExclusiveArea(short_name)
387
367
  self.readDataTypeMappingRefs(element, behavior)
@@ -423,7 +403,7 @@ class ARXMLParser(AbstractARXMLParser):
423
403
  self._raiseError("Unsupported assigned data <%s>" % tag_name)
424
404
 
425
405
  def readSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
426
- for child_element in element.findall("./xmlns:ASSIGNED-PORTS/*", self.nsmap):
406
+ for child_element in self.findall(element, "ASSIGNED-PORTS/*"):
427
407
  tag_name = self.getTagName(child_element.tag)
428
408
  if (tag_name == "ROLE-BASED-PORT-ASSIGNMENT"):
429
409
  dependency.AddAssignedPort(self.getRoleBasedPortAssignment(child_element))
@@ -434,6 +414,7 @@ class ARXMLParser(AbstractARXMLParser):
434
414
  short_name = self.getShortName(element)
435
415
  needs = parent.createNvBlockNeeds(short_name)
436
416
  self.logger.debug("read NvBlockNeeds %s" % short_name)
417
+ self.readIdentifiable(element, needs)
437
418
  needs.setCalcRamBlockCrc(self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")) \
438
419
  .setCheckStaticBlockId(self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")) \
439
420
  .setNDataSets(self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")) \
@@ -457,12 +438,14 @@ class ARXMLParser(AbstractARXMLParser):
457
438
  short_name = self.getShortName(element)
458
439
  needs = parent.createDiagnosticCommunicationManagerNeeds(short_name)
459
440
  self.logger.debug("read DiagnosticCommunicationManagerNeeds %s" % short_name)
441
+ self.readIdentifiable(element, needs)
460
442
  needs.setServiceRequestCallbackType(self.getChildElementOptionalLiteral(element, "SERVICE-REQUEST-CALLBACK-TYPE"))
461
443
 
462
444
  def readDiagnosticRoutineNeeds(self, element: ET.Element, parent: SwcServiceDependency):
463
445
  short_name = self.getShortName(element)
464
446
  needs = parent.createDiagnosticRoutineNeeds(short_name)
465
447
  self.logger.debug("read DiagnosticRoutineNeeds %s" % short_name)
448
+ self.readIdentifiable(element, needs)
466
449
  needs.setDiagRoutineType(self.getChildElementOptionalLiteral(element, "DIAG-ROUTINE-TYPE")) \
467
450
  .setRidNumber(self.getChildElementOptionalIntegerValue(element, "RID-NUMBER"))
468
451
 
@@ -470,6 +453,7 @@ class ARXMLParser(AbstractARXMLParser):
470
453
  short_name = self.getShortName(element)
471
454
  needs = parent.createDiagnosticValueNeeds(short_name)
472
455
  self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
456
+ self.readIdentifiable(element, needs)
473
457
  needs.setDataLength(self.getChildElementOptionalPositiveInteger(element, "DATA-LENGTH")) \
474
458
  .setDiagnosticValueAccess(self.getChildElementOptionalLiteral(element, "DIAGNOSTIC-VALUE-ACCESS")) \
475
459
  .setDidNumber(self.getChildElementOptionalIntegerValue(element, "DID-NUMBER")) \
@@ -492,7 +476,7 @@ class ARXMLParser(AbstractARXMLParser):
492
476
  short_name = self.getShortName(element)
493
477
  needs = parent.createDiagnosticEventNeeds(short_name)
494
478
  self.logger.debug("read DiagnosticEventNeeds %s" % short_name)
495
-
479
+ self.readIdentifiable(element, needs)
496
480
  self.readDiagEventDebounceAlgorithm(element, needs)
497
481
  needs.setDtcKind(self.getChildElementOptionalLiteral(element, "DTC-KIND")) \
498
482
  .setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
@@ -501,10 +485,17 @@ class ARXMLParser(AbstractARXMLParser):
501
485
  short_name = self.getShortName(element)
502
486
  needs = parent.createCryptoServiceNeeds(short_name)
503
487
  self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
488
+ self.readIdentifiable(element, needs)
504
489
  needs.setMaximumKeyLength(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-KEY-LENGTH"))
505
490
 
491
+ def readEcuStateMgrUserNeeds(self, element: ET.Element, parent: SwcServiceDependency):
492
+ short_name = self.getShortName(element)
493
+ needs = parent.createEcuStateMgrUserNeeds(short_name)
494
+ self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
495
+ self.readIdentifiable(element, needs)
496
+
506
497
  def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
507
- for child_element in element.findall("./xmlns:SERVICE-NEEDS/*", self.nsmap):
498
+ for child_element in self.findall(element, "SERVICE-NEEDS/*"):
508
499
  tag_name = self.getTagName(child_element.tag)
509
500
  if tag_name == "NV-BLOCK-NEEDS":
510
501
  self.readNvBlockNeeds(child_element, parent)
@@ -518,38 +509,40 @@ class ARXMLParser(AbstractARXMLParser):
518
509
  self.readDiagnosticEventNeeds(child_element, parent)
519
510
  elif tag_name == "CRYPTO-SERVICE-NEEDS":
520
511
  self.readCryptoServiceNeeds(child_element, parent)
512
+ elif tag_name == "ECU-STATE-MGR-USER-NEEDS":
513
+ self.readEcuStateMgrUserNeeds(child_element, parent)
521
514
  else:
522
515
  self.notImplemented("Unsupported service needs <%s>" % tag_name)
523
516
 
524
517
  def readSwcServiceDependency(self, element: ET.Element, parent: SwcInternalBehavior):
525
518
  short_name = self.getShortName(element)
526
519
  dependency = parent.createSwcServiceDependency(short_name)
527
- self.logger.debug("readSwcServiceDependency %s" % short_name)
520
+ self.logger.debug("read SwcServiceDependency %s" % short_name)
528
521
  self.readServiceDependency(element, dependency)
529
522
  self.readSwcServiceDependencyAssignedData(element, dependency)
530
523
  self.readSwcServiceDependencyAssignedPorts(element, dependency)
531
524
  self.readSwcServiceDependencyServiceNeeds(element, dependency)
532
525
 
533
526
  def readSwcInternalBehaviorServiceDependencies(self, element: ET.Element, parent: SwcInternalBehavior):
534
- for child_element in element.findall("./xmlns:SERVICE-DEPENDENCYS/*", self.nsmap):
527
+ for child_element in self.findall(element, "SERVICE-DEPENDENCYS/*"):
535
528
  tag_name = self.getTagName(child_element.tag)
536
529
  if (tag_name == "SWC-SERVICE-DEPENDENCY"):
537
530
  self.readSwcServiceDependency(child_element, parent)
538
531
  else:
539
- self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
532
+ self.notImplemented("Unsupported Service Dependencies <%s>" % tag_name)
540
533
 
541
534
  def getIncludedDataTypeSets(self, element: ET.Element) -> List[IncludedDataTypeSet]:
542
535
  include_data_type_sets = []
543
- for child_element in self.findall(element, "./INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
536
+ for child_element in self.findall(element, "INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
544
537
  include_data_type_set = IncludedDataTypeSet()
545
538
  self.readARObjectAttributes(child_element, include_data_type_set)
546
- for ref_type in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-REFS/DATA-TYPE-REF"):
539
+ for ref_type in self.getChildElementRefTypeList(child_element, "DATA-TYPE-REFS/DATA-TYPE-REF"):
547
540
  include_data_type_set.addDataTypeRef(ref_type)
548
541
  include_data_type_sets.append(include_data_type_set)
549
542
  return include_data_type_sets
550
543
 
551
544
  def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
552
- for child_element in self.findall(element, "./INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
545
+ for child_element in self.findall(element, "INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
553
546
  short_name = self.getShortName(child_element)
554
547
  behavior = parent.createSwcInternalBehavior(short_name)
555
548
  self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
@@ -564,35 +557,83 @@ class ARXMLParser(AbstractARXMLParser):
564
557
  self.readExplicitInterRunnableVariables(child_element, behavior)
565
558
  for data_type_set in self.getIncludedDataTypeSets(child_element):
566
559
  behavior.addIncludedDataTypeSet(data_type_set)
567
- behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
560
+ behavior.handleTerminationAndRestart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
568
561
  self.readPerInstanceMemories(child_element, behavior)
569
562
  self.readPerInstanceParameters(child_element, behavior)
570
563
  self.readPortAPIOptions(child_element, behavior)
571
- behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
564
+ behavior.setSupportsMultipleInstantiation(self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION"))
572
565
 
573
566
  def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
574
567
  group_sets = []
575
568
  for child_element in self.findall(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS/INCLUDED-MODE-DECLARATION-GROUP-SET"):
576
569
  group_set = IncludedModeDeclarationGroupSet()
577
- for ref_type in self.getChildElementRefTypeList(child_element, "./MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
570
+ for ref_type in self.getChildElementRefTypeList(child_element, "MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
578
571
  group_set.addModeDeclarationGroupRef(ref_type)
579
572
  group_sets.append(group_set)
580
573
  return group_sets
574
+
575
+ def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
576
+ self.readExecutableEntity(element, entity)
577
+ entity.setImplementedEntryRef(self.getChildElementRefType(entity.getShortName(), element, "IMPLEMENTED-ENTRY-REF"))
578
+ self.readBswModuleEntityManagedModeGroup(element, entity)
579
+
580
+ def readBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
581
+ self.logger.debug("read BswCalledEntity %s" % entity.getShortName())
582
+ self.readBswModuleEntity(element, entity)
583
+
584
+ def readBswSchedulableEntity(self, element: ET.Element, entity: BswSchedulableEntity):
585
+ self.logger.debug("read BswSchedulableEntity %s" % entity.getShortName())
586
+ self.readBswModuleEntity(element, entity)
587
+
588
+ def readBswInterruptEntity(self, element: ET.Element, entity: BswInterruptEntity):
589
+ self.logger.debug("read BswSchedulableEntity %s" % entity.getShortName())
590
+ self.readBswModuleEntity(element, entity)
591
+ entity.setInterruptCategory(self.getChildElementOptionalLiteral(element, "INTERRUPT-CATEGORY")) \
592
+ .setInterruptSource(self.getChildElementOptionalLiteral(element, "INTERRUPT-SOURCE"))
593
+
594
+ def readBswInternalBehaviorEntities(self, element: ET.Element, behavior: BswInternalBehavior):
595
+ for child_element in self.findall(element, "ENTITYS/*"):
596
+ tag_name = self.getTagName(child_element)
597
+ if tag_name == "BSW-CALLED-ENTITY":
598
+ entity = behavior.createBswCalledEntity(self.getShortName(child_element))
599
+ self.readBswCalledEntity(child_element, entity)
600
+ elif tag_name == "BSW-SCHEDULABLE-ENTITY":
601
+ entity = behavior.createBswSchedulableEntity(self.getShortName(child_element))
602
+ self.readBswSchedulableEntity(child_element, entity)
603
+ elif tag_name == "BSW-INTERRUPT-ENTITY":
604
+ entity = behavior.createBswInterruptEntity(self.getShortName(child_element))
605
+ self.readBswInterruptEntity(child_element, entity)
606
+ else:
607
+ self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
608
+
609
+ def readBswInternalBehaviorEvents(self, element: ET.Element, behavior: BswInternalBehavior):
610
+ for child_element in self.findall(element, "EVENTS/*"):
611
+ tag_name = self.getTagName(child_element)
612
+ if tag_name == "BSW-MODE-SWITCH-EVENT":
613
+ event = behavior.createBswModeSwitchEvent(self.getShortName(child_element))
614
+ self.readBswModeSwitchEvent(child_element, event)
615
+ elif tag_name == "BSW-TIMING-EVENT":
616
+ event = behavior.createBswTimingEvent(self.getShortName(child_element))
617
+ self.readBswTimingEvent(child_element, event)
618
+ elif tag_name == "BSW-DATA-RECEIVED-EVENT":
619
+ event = behavior.createBswDataReceivedEvent(self.getShortName(child_element))
620
+ self.readBswDataReceivedEvent(child_element, event)
621
+ elif tag_name == "BSW-INTERNAL-TRIGGER-OCCURRED-EVENT":
622
+ event = behavior.createBswInternalTriggerOccurredEvent(self.getShortName(child_element))
623
+ self.readBswInternalTriggerOccurredEvent(child_element, event)
624
+ else:
625
+ self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
581
626
 
582
627
  def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
583
- for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
628
+ for child_element in self.findall(element, "INTERNAL-BEHAVIORS/BSW-INTERNAL-BEHAVIOR"):
584
629
  short_name = self.getShortName(child_element)
585
630
  behavior = parent.createBswInternalBehavior(short_name)
586
- self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
631
+ self.logger.debug("read BswInternalBehavior %s" % behavior.full_name)
587
632
 
588
633
  # read the internal behavior
589
634
  self.readInternalBehavior(child_element, behavior)
590
- self.readBswCalledEntity(child_element, behavior)
591
- self.readBswSchedulableEntity(child_element, behavior)
592
- self.readBswModeSwitchEvent(child_element, behavior)
593
- self.readBswTimingEvent(child_element, behavior)
594
- self.readBswDataReceivedEvent(child_element, behavior)
595
- self.readBswInternalTriggerOccurredEvent(child_element, behavior)
635
+ self.readBswInternalBehaviorEntities(child_element, behavior)
636
+ self.readBswInternalBehaviorEvents(child_element, behavior)
596
637
  self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
597
638
  for group_set in self.getIncludedModeDeclarationGroupSets(child_element):
598
639
  behavior.addIncludedModeDeclarationGroupSet(group_set)
@@ -600,27 +641,42 @@ class ARXMLParser(AbstractARXMLParser):
600
641
  def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
601
642
  short_name = self.getShortName(element)
602
643
  bsw_module_description = parent.createBswModuleDescription(short_name)
603
- bsw_module_description.module_id = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
644
+ bsw_module_description.moduleId = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
604
645
 
605
- self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
646
+ self.logger.debug("read BswModuleDescription %s" % bsw_module_description.full_name)
606
647
 
607
648
  self.readBswModuleDescriptionImplementedEntry(element, bsw_module_description)
608
649
  self.readProvidedModeGroup(element, bsw_module_description)
609
650
  self.readRequiredModeGroup(element, bsw_module_description)
610
651
  self.readBswInternalBehavior(element, bsw_module_description)
611
652
 
653
+ def readSwServiceArg(self, element: ET.Element, arg: SwServiceArg):
654
+ self.logger.debug("Read SwServiceArg <%s>" % arg.getShortName())
655
+ arg.setDirection(self.getChildElementOptionalLiteral(element, "DIRECTION")) \
656
+ .setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
657
+
658
+ def readBswModuleEntryArguments(self, element: ET.Element, entry: BswModuleEntry):
659
+ for child_element in self.findall(element, "ARGUMENTS/*"):
660
+ tag_name = self.getTagName(child_element)
661
+ if tag_name == "SW-SERVICE-ARG":
662
+ arg = entry.createArgument(self.getShortName(child_element))
663
+ self.readSwServiceArg(child_element, arg)
664
+ else:
665
+ self.notImplemented("Unsupported Argument <%s>" % tag_name)
666
+
612
667
  def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
613
668
  short_name = self.getShortName(element)
614
669
  entry = parent.createBswModuleEntry(short_name)
615
- entry.is_reentrant = self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")
616
- entry.is_synchronous = self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")
617
- entry.service_id = self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")
618
- entry.call_type = self.getChildElementOptionalLiteral(element, "CALL-TYPE")
619
- entry.execution_context = self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")
620
- entry.sw_service_impl_policy = self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY")
670
+ self.readIdentifiable(element, entry)
671
+ self.readBswModuleEntryArguments(element, entry)
672
+ entry.setIsReentrant(self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")) \
673
+ .setIsSynchronous(self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")) \
674
+ .setServiceId(self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")) \
675
+ .setCallType(self.getChildElementOptionalLiteral(element, "CALL-TYPE")) \
676
+ .setExecutionContext(self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")) \
677
+ .setSwServiceImplPolicy(self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY"))
621
678
 
622
- #self.logger.debug("readBswModuleEntry \n%s" % entry)
623
- self.logger.debug("readBswModuleEntry %s" % entry.getShortName())
679
+ self.logger.debug("read BswModuleEntry %s" % entry.getShortName())
624
680
 
625
681
  def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
626
682
  self.readARObjectAttributes(element, engineering_obj)
@@ -634,7 +690,7 @@ class ARXMLParser(AbstractARXMLParser):
634
690
  return obj
635
691
 
636
692
  def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
637
- for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/*", self.nsmap):
693
+ for child_element in self.findall(element, "ARTIFACT-DESCRIPTORS/*"):
638
694
  tag_name = self.getTagName(child_element.tag)
639
695
  if tag_name == "AUTOSAR-ENGINEERING-OBJECT":
640
696
  code_desc.addArtifactDescriptor(self.getAutosarEngineeringObject(child_element))
@@ -642,7 +698,7 @@ class ARXMLParser(AbstractARXMLParser):
642
698
  self._raiseError("Unsupported Artifact Descriptor <%s>" % tag_name)
643
699
 
644
700
  def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
645
- for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
701
+ for child_element in self.findall(element, "CODE-DESCRIPTORS/CODE"):
646
702
  short_name = self.getShortName(child_element)
647
703
  self.logger.debug("readCodeDescriptor %s" % short_name)
648
704
  code_desc = impl.createCodeDescriptor(short_name)
@@ -650,13 +706,13 @@ class ARXMLParser(AbstractARXMLParser):
650
706
  self.readArtifactDescriptor(child_element, code_desc)
651
707
 
652
708
  def readMemorySectionOptions(self, element: ET.Element, section: MemorySection):
653
- child_element = element.find("./xmlns:OPTIONS", self.nsmap)
709
+ child_element = self.find(element, "OPTIONS")
654
710
  if child_element is not None:
655
711
  for value in self.getChildElementLiteralValueList(child_element, "OPTION"):
656
712
  section.addOption(value)
657
713
 
658
714
  def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
659
- for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
715
+ for child_element in self.findall(element, "MEMORY-SECTIONS/MEMORY-SECTION"):
660
716
  memory_section = consumption.createMemorySection(self.getShortName(child_element))
661
717
  self.readIdentifiable(child_element, memory_section)
662
718
  memory_section.setAlignment(self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")) \
@@ -665,32 +721,48 @@ class ARXMLParser(AbstractARXMLParser):
665
721
  memory_section.setSize(self.getChildElementOptionalNumericalValue(child_element, "SIZE")) \
666
722
  .setSwAddrMethodRef(self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")) \
667
723
  .setSymbol(self.getChildElementOptionalLiteral(child_element, "SYMBOL"))
668
- self.logger.debug("readMemorySections %s" % memory_section.getShortName())
724
+ self.logger.debug("read MemorySections %s" % memory_section.getShortName())
725
+
726
+ def readStackUsage(self, element: ET.Element, usage: StackUsage):
727
+ self.logger.debug("read StackUsage %s" % usage.getShortName())
728
+ self.readIdentifiable(element, usage)
729
+
730
+ def readRoughEstimateStackUsage(self, element: ET.Element, usage: RoughEstimateStackUsage):
731
+ self.readStackUsage(element, usage)
732
+ usage.setMemoryConsumption(self.getChildElementOptionalPositiveInteger(element, "MEMORY-CONSUMPTION"))
733
+
734
+ def readStackUsages(self, element: ET.Element, consumption: ResourceConsumption):
735
+ for child_element in self.findall(element, "STACK-USAGES/*"):
736
+ tag_name = self.getTagName(child_element)
737
+ if tag_name == "ROUGH-ESTIMATE-STACK-USAGE":
738
+ usage = consumption.createRoughEstimateStackUsage(self.getShortName(child_element))
739
+ self.readRoughEstimateStackUsage(child_element, usage)
740
+ else:
741
+ self.notImplemented("Unsupported Stack Usages: <%s>" % tag_name)
669
742
 
670
743
  def readResourceConsumption(self, element: ET.Element, impl: Implementation):
671
- child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
744
+ child_element = self.find(element, "RESOURCE-CONSUMPTION")
672
745
  if (child_element is not None):
673
- short_name = self.getShortName(child_element)
674
- consumption = ResourceConsumption(impl, short_name)
746
+ consumption = impl.createResourceConsumption(self.getShortName(child_element))
675
747
  self.readIdentifiable(child_element, consumption)
676
748
  self.readMemorySections(child_element, consumption)
677
- impl.setResourceConsumption(consumption)
749
+ self.readStackUsages(child_element, consumption)
678
750
 
679
751
  def readImplementation(self, element: ET.Element, impl: Implementation):
680
752
  self.readIdentifiable(element, impl)
681
753
  self.readCodeDescriptor(element, impl)
682
- impl.programmingLanguage = self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE")
754
+ impl.setProgrammingLanguage(self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE"))
683
755
  self.readResourceConsumption(element, impl)
684
- impl.swVersion = self.getChildElementOptionalLiteral(element, "SW-VERSION")
685
- impl.swcBswMappingRef = self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")
686
- impl.usedCodeGenerator = self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")
687
- impl.vendorId = self.getChildElementOptionalNumericalValue(element, "VENDOR-ID")
756
+ impl.setSwVersion(self.getChildElementOptionalLiteral(element, "SW-VERSION")) \
757
+ .setSwcBswMappingRef(self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")) \
758
+ .setUsedCodeGenerator(self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")) \
759
+ .setVendorId(self.getChildElementOptionalNumericalValue(element, "VENDOR-ID"))
688
760
 
689
- def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
690
- child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
761
+ def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, impl: BswImplementation):
762
+ child_element = self.find(element, "VENDOR-SPECIFIC-MODULE-DEF-REFS")
691
763
  if child_element is not None:
692
- for ref in self.getChildElementRefTypeList(child_element, "./VENDOR-SPECIFIC-MODULE-DEF-REF"):
693
- parent.addVendorSpecificModuleDefRef(ref)
764
+ for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
765
+ impl.addVendorSpecificModuleDefRef(ref)
694
766
 
695
767
  def readBswImplementation(self, element: ET.Element, parent: ARPackage):
696
768
  short_name = self.getShortName(element)
@@ -730,14 +802,14 @@ class ARXMLParser(AbstractARXMLParser):
730
802
 
731
803
  def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
732
804
  accessed_parameter = None
733
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
805
+ child_element = self.find(element, key)
734
806
  if child_element is not None:
735
807
  accessed_parameter = AutosarParameterRef()
736
808
  accessed_parameter.local_parameter_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF")
737
809
  return accessed_parameter
738
810
 
739
811
  def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
740
- for child_element in element.findall("./xmlns:PARAMETER-ACCESSS/xmlns:PARAMETER-ACCESS", self.nsmap):
812
+ for child_element in self.findall(element, "PARAMETER-ACCESSS/PARAMETER-ACCESS"):
741
813
  short_name = self.getShortName(child_element)
742
814
  self.logger.debug("readParameterAccesses %s" % short_name)
743
815
  parameter_access = parent.createParameterAccess(short_name)
@@ -897,7 +969,7 @@ class ARXMLParser(AbstractARXMLParser):
897
969
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
898
970
  self.readIdentifiable(element, event)
899
971
  event.startOnEventRef = self.getChildElementOptionalRefType(element, "START-ON-EVENT-REF")
900
- for child_element in element.findall("./xmlns:DISABLED-MODE-IREFS/xmlns:DISABLED-MODE-IREF", self.nsmap):
972
+ for child_element in self.findall(element, "DISABLED-MODE-IREFS/DISABLED-MODE-IREF"):
901
973
  iref = self.getRModeInAtomicSwcInstanceRef(child_element)
902
974
  event.addDisabledModeIRef(iref)
903
975
 
@@ -955,16 +1027,17 @@ class ARXMLParser(AbstractARXMLParser):
955
1027
  argument_value = PortDefinedArgumentValue()
956
1028
  child_element = self.find(element, "VALUE/*")
957
1029
  if child_element is not None:
958
- argument_value.value = self.getValueSpecification(child_element)
959
- argument_value.valueTypeTRef = self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF")
1030
+ argument_value.setValue(self.getValueSpecification(child_element, self.getTagName(child_element)))
1031
+ argument_value.setValueTypeTRef(self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF"))
960
1032
  return argument_value
961
1033
 
962
1034
  def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
963
1035
  for child_element in self.findall(element, "PORT-API-OPTIONS/PORT-API-OPTION"):
964
1036
  option = PortAPIOption()
965
- option.enableTakeAddress = self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")
966
- option.indirectAPI = self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")
967
- option.portRef = self.getChildElementOptionalRefType(child_element, "PORT-REF")
1037
+ option.setEnableTakeAddress(self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")) \
1038
+ .setErrorHandling(self.getChildElementOptionalLiteral(child_element, "ERROR-HANDLING")) \
1039
+ .setIndirectAPI(self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")) \
1040
+ .setPortRef(self.getChildElementOptionalRefType(child_element, "PORT-REF"))
968
1041
  for argument_value_tag in self.findall(child_element, "PORT-ARG-VALUES/PORT-DEFINED-ARGUMENT-VALUE"):
969
1042
  option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
970
1043
  behavior.addPortAPIOption(option)
@@ -1026,6 +1099,15 @@ class ARXMLParser(AbstractARXMLParser):
1026
1099
  else:
1027
1100
  self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
1028
1101
 
1102
+ def getSwPointerTargetProps(self, element: ET.Element, key: str) -> SwPointerTargetProps:
1103
+ child_element = self.find(element, key)
1104
+ props = None
1105
+ if child_element is not None:
1106
+ props = SwPointerTargetProps()
1107
+ props.setTargetCategory(self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")) \
1108
+ .setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS"))
1109
+ return props
1110
+
1029
1111
  def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
1030
1112
  child_element = self.find(element, "SW-POINTER-TARGET-PROPS")
1031
1113
  if child_element is not None:
@@ -1165,7 +1247,7 @@ class ARXMLParser(AbstractARXMLParser):
1165
1247
  def readSwDataDefProsInvalidValue(self, element: ET.Element, props: SwDataDefProps):
1166
1248
  child_element = self.find(element, "INVALID-VALUE/*")
1167
1249
  if child_element is not None:
1168
- props.setInvalidValue(self.getValueSpecification(child_element))
1250
+ props.setInvalidValue(self.getValueSpecification(child_element, self.getTagName(child_element)))
1169
1251
 
1170
1252
  def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
1171
1253
  child_element = self.find(element, key)
@@ -1186,13 +1268,15 @@ class ARXMLParser(AbstractARXMLParser):
1186
1268
  .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1187
1269
  .setSwIntendedResolution(self.getChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION")) \
1188
1270
  .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
1271
+ .setStepSize(self.getChildElementOptionalFloatValue(conditional_tag, "STEP-SIZE")) \
1189
1272
  .setSwCalibrationAccess(self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")) \
1190
1273
  .setSwCalprmAxisSet(self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")) \
1274
+ .setSwPointerTargetProps(self.getSwPointerTargetProps(conditional_tag, "SW-POINTER-TARGET-PROPS")) \
1191
1275
  .setSwRecordLayoutRef(self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")) \
1192
1276
  .setValueAxisDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")) \
1193
- .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1277
+ .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1194
1278
  self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
1195
- self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1279
+ #self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1196
1280
  self.readARObjectAttributes(conditional_tag, sw_data_def_props.conditional)
1197
1281
  return sw_data_def_props
1198
1282
 
@@ -1310,7 +1394,7 @@ class ARXMLParser(AbstractARXMLParser):
1310
1394
  .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1311
1395
 
1312
1396
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1313
- child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
1397
+ child_element = self.find(element, key)
1314
1398
  if child_element is None:
1315
1399
  return None
1316
1400
  sw_values = SwValues()
@@ -1322,30 +1406,30 @@ class ARXMLParser(AbstractARXMLParser):
1322
1406
 
1323
1407
  def getValueList(self, element: ET.Element, key: str) -> ValueList:
1324
1408
  value_list = None
1325
- child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
1409
+ child_element = self.find(element, key)
1326
1410
  if child_element is not None:
1327
1411
  self.logger.debug("getValueList %s" % key)
1328
1412
  value_list = ValueList()
1329
1413
  self.readARObjectAttributes(child_element, value_list)
1330
- value_list.v = self.getChildElementOptionalFloatValue(child_element, "V")
1414
+ value_list.setV(self.getChildElementOptionalFloatValue(child_element, "V"))
1331
1415
  return value_list
1332
1416
 
1333
1417
  def getSwValueCont(self, element: ET.Element) -> SwValueCont:
1334
1418
  cont = None
1335
- child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
1419
+ child_element = self.find(element, "SW-VALUE-CONT")
1336
1420
  if child_element is not None:
1337
1421
  self.logger.debug("getSwValueCont")
1338
1422
  cont = SwValueCont()
1339
1423
  self.readARObjectAttributes(child_element, cont)
1340
- cont.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
1341
- cont.sw_arraysize = self.getValueList(child_element, "SW-ARRAYSIZE")
1342
- cont.sw_values_phys = self.getSwValues(child_element, "SW-VALUES-PHYS")
1424
+ cont.setUnitRef(self.getChildElementOptionalRefType(child_element, "UNIT-REF")) \
1425
+ .setSwArraysize(self.getValueList(child_element, "SW-ARRAYSIZE")) \
1426
+ .setSwValuesPhys(self.getSwValues(child_element, "SW-VALUES-PHYS"))
1343
1427
  return cont
1344
1428
 
1345
1429
  def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
1346
1430
  self.readValueSpecification(element, value_spec)
1347
- value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
1348
- value_spec.sw_value_cont = self.getSwValueCont(element)
1431
+ value_spec.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
1432
+ .setSwValueCont(self.getSwValueCont(element))
1349
1433
 
1350
1434
  self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
1351
1435
 
@@ -1354,7 +1438,7 @@ class ARXMLParser(AbstractARXMLParser):
1354
1438
  child_element = self.find(element, "INIT-VALUE/*")
1355
1439
  if child_element is not None:
1356
1440
  self.logger.debug("getInitValue")
1357
- value_spec = self.getValueSpecification(child_element)
1441
+ value_spec = self.getValueSpecification(child_element, self.getTagName(child_element))
1358
1442
  return value_spec
1359
1443
 
1360
1444
  def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
@@ -1390,6 +1474,7 @@ class ARXMLParser(AbstractARXMLParser):
1390
1474
  com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")) \
1391
1475
  .setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")) \
1392
1476
  .setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")) \
1477
+ .setFilter(self.getDataFilter(element, "FILTER")) \
1393
1478
  .setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")) \
1394
1479
  .setInitValue(self.getInitValue(element))
1395
1480
  return com_spec
@@ -1454,7 +1539,7 @@ class ARXMLParser(AbstractARXMLParser):
1454
1539
  self._raiseError("Unsupported Port Prototype <%s>" % tag_name)
1455
1540
 
1456
1541
  def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
1457
- child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
1542
+ child_element = self.find(element, "TRANSMISSION-ACKNOWLEDGE")
1458
1543
  if (child_element is not None):
1459
1544
  acknowledge = TransmissionAcknowledgementRequest()
1460
1545
  self.readARObjectAttributes(child_element, acknowledge)
@@ -1464,7 +1549,7 @@ class ARXMLParser(AbstractARXMLParser):
1464
1549
 
1465
1550
  def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
1466
1551
  self.readARObjectAttributes(element, com_spec)
1467
- for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1552
+ for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1468
1553
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1469
1554
  com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1470
1555
  .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
@@ -1497,7 +1582,7 @@ class ARXMLParser(AbstractARXMLParser):
1497
1582
  return com_spec
1498
1583
 
1499
1584
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
1500
- for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/*", self.nsmap):
1585
+ for child_element in self.findall(element, "PROVIDED-COM-SPECS/*"):
1501
1586
  tag_name = self.getTagName(child_element.tag)
1502
1587
  if tag_name == "NONQUEUED-SENDER-COM-SPEC":
1503
1588
  parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
@@ -1530,7 +1615,7 @@ class ARXMLParser(AbstractARXMLParser):
1530
1615
  self.readPortGroupOuterPortRefs(element, port_group)
1531
1616
 
1532
1617
  def readSwComponentTypePortGroups(self, element: ET.Element, parent: SwComponentType):
1533
- for child_element in element.findall("./xmlns:PORT-GROUPS/*", self.nsmap):
1618
+ for child_element in self.findall(element, "PORT-GROUPS/*"):
1534
1619
  tag_name = self.getTagName(child_element.tag)
1535
1620
  if tag_name == "PORT-GROUP":
1536
1621
  self.readPortGroup(child_element, parent)
@@ -1611,12 +1696,13 @@ class ARXMLParser(AbstractARXMLParser):
1611
1696
  parent.setRequesterIRef(requester_iref)
1612
1697
 
1613
1698
  def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
1614
- for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
1699
+ for child_element in self.findall(element, "CONNECTORS/ASSEMBLY-SW-CONNECTOR"):
1615
1700
  short_name = self.getShortName(child_element)
1616
1701
  self.logger.debug("readAssemblySwConnectors %s" % short_name)
1617
1702
 
1618
1703
  connector = parent.createAssemblySwConnector(short_name)
1619
1704
  self.readIdentifiable(child_element, connector)
1705
+ connector.setMappingRef(self.getChildElementOptionalRefType(child_element, "MAPPING-REF"))
1620
1706
  self.readAssemblySwConnectorProviderIRef(child_element, connector)
1621
1707
  self.readAssemblySwConnectorRequesterIRef(child_element, connector)
1622
1708
 
@@ -1749,7 +1835,7 @@ class ARXMLParser(AbstractARXMLParser):
1749
1835
  prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1750
1836
  prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1751
1837
  prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1752
- prototype.server_argument_impl_policy = self.getChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY")
1838
+ prototype.serverArgumentImplPolicy = self.getChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY")
1753
1839
  parent.addArgumentDataPrototype(prototype)
1754
1840
 
1755
1841
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
@@ -1798,6 +1884,33 @@ class ARXMLParser(AbstractARXMLParser):
1798
1884
  self.readOperations(element, cs_interface)
1799
1885
  self.readPossibleErrors(element, cs_interface)
1800
1886
 
1887
+ def getCompuConstContent(self, element: ET.Element) -> CompuConstContent:
1888
+ child_element = self.find(element, "*")
1889
+ content = None
1890
+ if child_element is not None:
1891
+ tag_name = self.getTagName(child_element)
1892
+ if tag_name == "VF":
1893
+ content = CompuConstFormulaContent()
1894
+ content.setVf(self.getChildElementOptionalLiteral(element, "VF"))
1895
+ elif tag_name == "V":
1896
+ content = CompuConstNumericContent()
1897
+ content.setV(self.getChildElementOptionalNumericalValue(element, "V"))
1898
+ elif tag_name == "VT":
1899
+ content = CompuConstTextContent()
1900
+ content.setVt(self.getChildElementOptionalLiteral(element, "VT"))
1901
+ else:
1902
+ self.notImplemented("Unsupported CompuConstContent <%s>" % tag_name)
1903
+ return content
1904
+
1905
+ def getCompuConst(self, element: ET.Element, key: str) -> CompuConst:
1906
+ compu_const = None
1907
+ child_element = self.find(element, key)
1908
+ if (child_element is not None):
1909
+ compu_const = CompuConst()
1910
+ self.readARObjectAttributes(child_element, compu_const)
1911
+ compu_const.setCompuConstContentType(self.getCompuConstContent(child_element))
1912
+ return compu_const
1913
+
1801
1914
  def readCompuConst(self, element: ET.Element, parent: CompuScale):
1802
1915
  child_element = self.find(element, "COMPU-CONST/VT")
1803
1916
  if (child_element is not None):
@@ -1845,46 +1958,40 @@ class ARXMLParser(AbstractARXMLParser):
1845
1958
  self.readCompuScaleContents(child_element, compu_scale)
1846
1959
  compu_scales.addCompuScale(compu_scale)
1847
1960
  return compu_scales
1848
-
1849
- def readCompuInternalToPhys(self, element: ET.Element, compu_method: CompuMethod):
1850
- child_element = self.find(element, "COMPU-INTERNAL-TO-PHYS")
1851
- if (child_element is not None):
1852
- compu = Compu()
1853
- self.readARObjectAttributes(child_element, compu)
1854
- compu.setCompuContent(self.getCompuScales(child_element))
1855
- compu_method.setCompuInternalToPhys(compu)
1856
-
1857
- def readCompuPhysToInternal(self, element: ET.Element, compu_method: CompuMethod):
1858
- child_element = self.find(element, "COMPU-PHYS-TO-INTERNAL")
1961
+
1962
+ def getCompu(self, element: ET.Element, key: str) -> Compu:
1963
+ child_element = self.find(element, key)
1964
+ compu = None
1859
1965
  if (child_element is not None):
1860
1966
  compu = Compu()
1861
1967
  self.readARObjectAttributes(child_element, compu)
1862
- compu.setCompuContent(self.getCompuScales(child_element))
1863
- compu_method.setCompuPhysToInternal(compu)
1968
+ compu.setCompuContent(self.getCompuScales(child_element))
1969
+ compu.setCompuDefaultValue(self.getCompuConst(child_element, "COMPU-DEFAULT-VALUE"))
1970
+ return compu
1864
1971
 
1865
1972
  def readCompuMethod(self, element: ET.Element, parent: ARPackage):
1866
1973
  short_name = self.getShortName(element)
1867
1974
  self.logger.debug("readCompuMethods %s" % short_name)
1868
1975
  compu_method = parent.createCompuMethod(short_name)
1869
1976
  self.readIdentifiable(element, compu_method)
1870
- compu_method.setUnitRef(self.getChildElementOptionalRefType(element, "UNIT-REF"))
1871
- self.readCompuInternalToPhys(element, compu_method)
1872
- self.readCompuPhysToInternal(element, compu_method)
1977
+ compu_method.setUnitRef(self.getChildElementOptionalRefType(element, "UNIT-REF")) \
1978
+ .setCompuInternalToPhys(self.getCompu(element, "COMPU-INTERNAL-TO-PHYS")) \
1979
+ .setCompuPhysToInternal(self.getCompu(element, "COMPU-PHYS-TO-INTERNAL"))
1873
1980
 
1874
1981
  def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
1875
- for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
1982
+ for child_element in self.findall(element, "RUNNABLE-MAPPINGS/SWC-BSW-RUNNABLE-MAPPING"):
1876
1983
  mapping = SwcBswRunnableMapping()
1877
- mapping.bswEntityRef = self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")
1878
- mapping.swcRunnableRef = self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF")
1984
+ mapping.setBswEntityRef(self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")) \
1985
+ .setSwcRunnableRef(self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF"))
1879
1986
  parent.addRunnableMapping(mapping)
1880
1987
 
1881
1988
  def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
1882
1989
  short_name = self.getShortName(element)
1883
- self.logger.debug("readSwcBswMappings %s" % short_name)
1990
+ self.logger.debug("read SwcBswMappings %s" % short_name)
1884
1991
  swc_bsw_mapping = parent.createSwcBswMapping(short_name)
1885
- swc_bsw_mapping.bswBehaviorRef = self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF")
1992
+ swc_bsw_mapping.setBswBehaviorRef(self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF"))
1886
1993
  self.readSwcBswRunnableMappings(element, swc_bsw_mapping)
1887
- swc_bsw_mapping.swcBehaviorRef = self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF")
1994
+ swc_bsw_mapping.setSwcBehaviorRef(self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF"))
1888
1995
 
1889
1996
  def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
1890
1997
  self.readARObjectAttributes(element, value_spec)
@@ -1922,7 +2029,7 @@ class ARXMLParser(AbstractARXMLParser):
1922
2029
  self.readValueSpecification(element, value_spec)
1923
2030
  child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
1924
2031
  for child_element in child_elements:
1925
- value_spec.addElement(self.getValueSpecification(child_element))
2032
+ value_spec.addElement(self.getValueSpecification(child_element, self.getTagName(child_element)))
1926
2033
  return value_spec
1927
2034
 
1928
2035
  def getConstantReference(self, element: ET.Element) -> ConstantReference:
@@ -1932,8 +2039,7 @@ class ARXMLParser(AbstractARXMLParser):
1932
2039
  value_spec.setConstantRef(self.getChildElementOptionalRefType(element, "CONSTANT-REF"))
1933
2040
  return value_spec
1934
2041
 
1935
- def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
1936
- tag_name = self.getTagName(element.tag)
2042
+ def getValueSpecification(self, element: ET.Element, tag_name: str) -> ValueSpecification:
1937
2043
  if tag_name == "APPLICATION-VALUE-SPECIFICATION":
1938
2044
  value_spec = self.getApplicationValueSpecification(element)
1939
2045
  elif tag_name == "RECORD-VALUE-SPECIFICATION":
@@ -1952,7 +2058,7 @@ class ARXMLParser(AbstractARXMLParser):
1952
2058
 
1953
2059
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1954
2060
  for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1955
- spec.addField(self.getValueSpecification(child_element))
2061
+ spec.addField(self.getValueSpecification(child_element, self.getTagName(child_element)))
1956
2062
 
1957
2063
  def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1958
2064
  value_spec = RecordValueSpecification()
@@ -1965,8 +2071,8 @@ class ARXMLParser(AbstractARXMLParser):
1965
2071
  self.logger.debug("readConstantSpecification %s" % short_name)
1966
2072
  spec = parent.createConstantSpecification(short_name)
1967
2073
  self.readIdentifiable(element, spec)
1968
- for value_spec_tag in self.findall(element, "VALUE-SPEC/*"):
1969
- spec.setValueSpec(self.getValueSpecification(value_spec_tag))
2074
+ for child_element in self.findall(element, "VALUE-SPEC/*"):
2075
+ spec.setValueSpec(self.getValueSpecification(child_element, self.getTagName(child_element)))
1970
2076
 
1971
2077
  def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1972
2078
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
@@ -2725,9 +2831,10 @@ class ARXMLParser(AbstractARXMLParser):
2725
2831
  child_element = self.find(element, key)
2726
2832
  if child_element is not None:
2727
2833
  instance_ref = AnyInstanceRef()
2728
- instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF")) \
2729
- .setContextElementRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF")) \
2730
- .setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
2834
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF"))
2835
+ for ref in self.getChildElementRefTypeList(child_element, "CONTEXT-ELEMENT-REF"):
2836
+ instance_ref.addContextElementRef(ref)
2837
+ instance_ref.setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
2731
2838
  return instance_ref
2732
2839
 
2733
2840
  def getEcucInstanceReferenceValue(self, element: ET.Element) -> EcucInstanceReferenceValue:
@@ -2947,8 +3054,9 @@ class ARXMLParser(AbstractARXMLParser):
2947
3054
 
2948
3055
  def getSenderReceiverToSignalMapping(self, element: ET.Element) -> SenderReceiverToSignalMapping:
2949
3056
  mapping = SenderReceiverToSignalMapping()
2950
- mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
2951
- mapping.setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
3057
+ mapping.setCommunicationDirection(self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION")) \
3058
+ .setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF"))) \
3059
+ .setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
2952
3060
  return mapping
2953
3061
 
2954
3062
  def getSenderReceiverToSignalGroupMapping(self, element: ET.Element) -> SenderReceiverToSignalGroupMapping:
@@ -3005,7 +3113,9 @@ class ARXMLParser(AbstractARXMLParser):
3005
3113
  self.logger.debug("Read RootSwCompositionPrototype %s" % short_name)
3006
3114
  prototype = system.createRootSoftwareComposition(short_name)
3007
3115
  self.readIdentifiable(child_element, prototype)
3008
- prototype.setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
3116
+ prototype.setFlatMapRef(self.getChildElementOptionalRefType(child_element, "FLAT-MAP-REF")) \
3117
+ .setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
3118
+
3009
3119
 
3010
3120
  def readSystem(self, element: ET.Element, parent: ARPackage):
3011
3121
  short_name = self.getShortName(element)
@@ -3032,8 +3142,61 @@ class ARXMLParser(AbstractARXMLParser):
3032
3142
  frame = parent.createLifeCycleInfoSet(short_name)
3033
3143
  self.readIdentifiable(element, frame)
3034
3144
 
3145
+ def readFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
3146
+ self.logger.debug("Read LifeCycleInfoSet %s" % desc.getShortName())
3147
+ self.readIdentifiable(element, desc)
3148
+ desc.setUpstreamReferenceIRef(self.getAnyInstanceRef(element, "UPSTREAM-REFERENCE-IREF")) \
3149
+ .setEcuExtractReferenceIRef(self.getAnyInstanceRef(element, "ECU-EXTRACT-REFERENCE-IREF"))
3150
+
3151
+ def readFlatMapInstances(self, element: ET.Element, map: FlatMap):
3152
+ for child_element in self.findall(element, "INSTANCES/*"):
3153
+ tag_name = self.getTagName(child_element)
3154
+ if tag_name == "FLAT-INSTANCE-DESCRIPTOR":
3155
+ desc = map.createFlatInstanceDescriptor(self.getShortName(child_element))
3156
+ self.readFlatInstanceDescriptor(child_element, desc)
3157
+ else:
3158
+ self.notImplemented("Unsupported Flat Map Instances <%s>" % tag_name)
3159
+
3160
+ def readFlatMap(self, element: ET.Element, parent: ARPackage):
3161
+ short_name = self.getShortName(element)
3162
+ self.logger.debug("Read FlatMap %s" % short_name)
3163
+ map = parent.createFlatMap(short_name)
3164
+ self.readIdentifiable(element, map)
3165
+ self.readFlatMapInstances(element, map)
3166
+
3167
+ def getDataPrototypeMappings(self, element: ET.Element, key: str) -> List[DataPrototypeMapping]:
3168
+ mappings = []
3169
+ for child_element in self.findall(element, "%s/DATA-PROTOTYPE-MAPPING" % key):
3170
+ mapping = DataPrototypeMapping()
3171
+ mapping.setFirstDataPrototypeRef(self.getChildElementOptionalRefType(child_element, "FIRST-DATA-PROTOTYPE-REF")) \
3172
+ .setSecondDataPrototypeRef(self.getChildElementOptionalRefType(child_element, "SECOND-DATA-PROTOTYPE-REF"))
3173
+ mappings.append(mapping)
3174
+ return mappings
3175
+
3176
+ def getVariableAndParameterInterfaceMapping(self, element: ET.Element, mapping: VariableAndParameterInterfaceMapping):
3177
+ self.logger.debug("get VariableAndParameterInterfaceMapping %s" % mapping.getShortName())
3178
+ self.readIdentifiable(element, mapping)
3179
+ for item in self.getDataPrototypeMappings(element, "DATA-MAPPINGS"):
3180
+ mapping.addDataMapping(item)
3181
+
3182
+ def readPortInterfaceMappings(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
3183
+ for child_element in self.findall(element, "PORT-INTERFACE-MAPPINGS/*"):
3184
+ tag_name = self.getTagName(child_element)
3185
+ if tag_name == "VARIABLE-AND-PARAMETER-INTERFACE-MAPPING":
3186
+ mapping = mapping_set.createVariableAndParameterInterfaceMapping(self.getShortName(child_element))
3187
+ self.getVariableAndParameterInterfaceMapping(child_element, mapping)
3188
+ else:
3189
+ self.notImplemented("Unsupported PortInterfaceMapping <%s>" % tag_name)
3190
+
3191
+ def readPortInterfaceMappingSet(self, element: ET.Element, parent: ARPackage):
3192
+ short_name = self.getShortName(element)
3193
+ self.logger.debug("Read PortInterfaceMappingSet %s" % short_name)
3194
+ mapping_set = parent.createPortInterfaceMappingSet(short_name)
3195
+ self.readIdentifiable(element, mapping_set)
3196
+ self.readPortInterfaceMappings(element, mapping_set)
3197
+
3035
3198
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
3036
- for child_element in self.findall(element, "./ELEMENTS/*"):
3199
+ for child_element in self.findall(element, "ELEMENTS/*"):
3037
3200
  tag_name = self.getTagName(child_element.tag)
3038
3201
  if tag_name == "COMPOSITION-SW-COMPONENT-TYPE":
3039
3202
  self.readCompositionSwComponentType(child_element, parent)
@@ -3147,8 +3310,12 @@ class ARXMLParser(AbstractARXMLParser):
3147
3310
  self.readGenericEthernetFrame(child_element, parent)
3148
3311
  elif tag_name == "LIFE-CYCLE-INFO-SET":
3149
3312
  self.readLifeCycleInfoSet(child_element, parent)
3313
+ elif tag_name == "FLAT-MAP":
3314
+ self.readFlatMap(child_element, parent)
3315
+ elif tag_name == "PORT-INTERFACE-MAPPING-SET":
3316
+ self.readPortInterfaceMappingSet(child_element, parent)
3150
3317
  else:
3151
- self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
3318
+ self.notImplemented("Unsupported element type of ARPackage <%s>" % tag_name)
3152
3319
 
3153
3320
  def readReferenceBases(self, element: ET.Element, parent: ARPackage):
3154
3321
  self.logger.debug("Read ReferenceBases")