armodel 1.7.1__py3-none-any.whl → 1.7.2__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 (34) hide show
  1. armodel/cli/arxml_dump_cli.py +2 -2
  2. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +3 -3
  3. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +41 -19
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +22 -11
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/ModeDeclaration.py +26 -9
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +8 -0
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +711 -27
  8. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +0 -3
  9. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +3 -0
  10. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +43 -1
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +41 -3
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +53 -15
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +23 -8
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +44 -1
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +46 -5
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +55 -34
  17. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +170 -23
  18. armodel/models/M2/MSR/DataDictionary/AuxillaryObjects.py +4 -4
  19. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +130 -37
  20. armodel/models/__init__.py +1 -0
  21. armodel/parser/abstract_arxml_parser.py +26 -13
  22. armodel/parser/arxml_parser.py +361 -216
  23. armodel/tests/test_armodel/models/test_datatype.py +4 -4
  24. armodel/tests/test_armodel/models/test_m2_msr.py +5 -5
  25. armodel/tests/test_armodel/parser/test_sw_components.py +1 -1
  26. armodel/tests/test_armodel/parser/test_system.py +0 -1
  27. armodel/writer/abstract_arxml_writer.py +9 -0
  28. armodel/writer/arxml_writer.py +358 -173
  29. {armodel-1.7.1.dist-info → armodel-1.7.2.dist-info}/METADATA +21 -1
  30. {armodel-1.7.1.dist-info → armodel-1.7.2.dist-info}/RECORD +34 -34
  31. {armodel-1.7.1.dist-info → armodel-1.7.2.dist-info}/LICENSE +0 -0
  32. {armodel-1.7.1.dist-info → armodel-1.7.2.dist-info}/WHEEL +0 -0
  33. {armodel-1.7.1.dist-info → armodel-1.7.2.dist-info}/entry_points.txt +0 -0
  34. {armodel-1.7.1.dist-info → armodel-1.7.2.dist-info}/top_level.txt +0 -0
@@ -2,6 +2,9 @@ from typing import List
2
2
  import xml.etree.ElementTree as ET
3
3
  import os
4
4
 
5
+
6
+
7
+
5
8
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
6
9
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
7
10
  from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
@@ -33,7 +36,7 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import Res
33
36
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import MemorySection
34
37
  from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
35
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
36
- from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedDataAssignment, ServiceDependency
39
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceAlgorithm, DiagEventDebounceMonitorInternal, DiagnosticEventNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
37
40
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
38
41
  from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
39
42
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
@@ -55,11 +58,11 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import Compo
55
58
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
56
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
57
60
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, RunnableEntityArgument, SwcInternalBehavior
58
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
61
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
62
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
59
63
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector
60
64
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
61
65
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
62
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
63
66
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
64
67
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, SenderReceiverInterface
65
68
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
@@ -127,7 +130,7 @@ class ARXMLParser(AbstractARXMLParser):
127
130
  return admin_data
128
131
 
129
132
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
130
- self.readElementAttributes(element, referrable)
133
+ self.readARObjectAttributes(element, referrable)
131
134
  referrable.setLongName(self.getMultilanguageLongName(element, "LONG-NAME"))
132
135
 
133
136
  def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
@@ -145,7 +148,7 @@ class ARXMLParser(AbstractARXMLParser):
145
148
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
146
149
  for child_element in self.findall(element, "./L-4"):
147
150
  l4 = LLongName()
148
- self.readElementAttributes(child_element, l4)
151
+ self.readARObjectAttributes(child_element, l4)
149
152
  l4.value = child_element.text
150
153
  if 'L' in child_element.attrib:
151
154
  l4.l = child_element.attrib['L']
@@ -156,14 +159,14 @@ class ARXMLParser(AbstractARXMLParser):
156
159
  child_element = self.find(element, "./%s" % key)
157
160
  if child_element is not None:
158
161
  long_name = MultilanguageLongName()
159
- self.readElementAttributes(child_element, long_name)
162
+ self.readARObjectAttributes(child_element, long_name)
160
163
  self.readLLongName(child_element, long_name)
161
164
  return long_name
162
165
 
163
166
  def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
164
167
  for child_element in self.findall(element, "./L-2"):
165
168
  l2 = LOverviewParagraph()
166
- self.readElementAttributes(child_element, l2)
169
+ self.readARObjectAttributes(child_element, l2)
167
170
  l2.value = child_element.text
168
171
  if 'L' in child_element.attrib:
169
172
  l2.l = child_element.attrib['L']
@@ -174,7 +177,7 @@ class ARXMLParser(AbstractARXMLParser):
174
177
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
175
178
  if child_element is not None:
176
179
  paragraph = MultiLanguageOverviewParagraph()
177
- self.readElementAttributes(child_element, paragraph)
180
+ self.readARObjectAttributes(child_element, paragraph)
178
181
  self.readLOverviewParagraph(child_element, paragraph)
179
182
  return paragraph
180
183
 
@@ -182,7 +185,7 @@ class ARXMLParser(AbstractARXMLParser):
182
185
  iref = None
183
186
  if element is not None:
184
187
  iref = VariableInAtomicSWCTypeInstanceRef()
185
- self.readElementAttributes(element, iref)
188
+ self.readARObjectAttributes(element, iref)
186
189
  iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
187
190
  iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
188
191
  return iref
@@ -191,7 +194,7 @@ class ARXMLParser(AbstractARXMLParser):
191
194
  iref = None
192
195
  if element is not None:
193
196
  iref = ComponentInSystemInstanceRef()
194
- self.readElementAttributes(element, iref)
197
+ self.readARObjectAttributes(element, iref)
195
198
  iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF"))
196
199
  iref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF"))
197
200
  iref.setTargetComponentRef(self.getChildElementOptionalRefType(element, "TARGET-COMPONENT-REF"))
@@ -246,7 +249,7 @@ class ARXMLParser(AbstractARXMLParser):
246
249
  self.readIdentifiable(child_element, variable_access)
247
250
 
248
251
  def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
249
- for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
252
+ for child_element in self.findall(element, "PROVIDED-ENTRYS/BSW-MODULE-ENTRY-REF-CONDITIONAL"):
250
253
  ref = self.getChildElementOptionalRefType(child_element, "BSW-MODULE-ENTRY-REF")
251
254
  if (ref is not None):
252
255
  parent.addImplementedEntry(ref)
@@ -257,7 +260,7 @@ class ARXMLParser(AbstractARXMLParser):
257
260
  prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
258
261
 
259
262
  def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
260
- for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
263
+ for child_element in self.findall(element, "PROVIDED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE"):
261
264
  short_name = self.getShortName(child_element)
262
265
  self.logger.debug("readProvidedModeGroup %s" % short_name)
263
266
 
@@ -265,7 +268,7 @@ class ARXMLParser(AbstractARXMLParser):
265
268
  self.readModeDeclarationGroupPrototype(child_element, mode_group)
266
269
 
267
270
  def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
268
- for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
271
+ for child_element in self.findall(element, "REQUIRED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE"):
269
272
  short_name = self.getShortName(child_element)
270
273
  self.logger.debug("readRequiredModeGroup %s" % short_name)
271
274
  mode_group = parent.createProvidedModeGroup(short_name)
@@ -315,7 +318,7 @@ class ARXMLParser(AbstractARXMLParser):
315
318
  self.readBswEvent(element, event)
316
319
 
317
320
  def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
318
- for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
321
+ for child_element in self.findall(element, "EVENTS/BSW-MODE-SWITCH-EVENT"):
319
322
  short_name = self.getShortName(child_element)
320
323
  self.logger.debug("readBswModeSwitchEvent %s" % short_name)
321
324
  event = parent.createBswModeSwitchEvent(short_name)
@@ -323,29 +326,29 @@ class ARXMLParser(AbstractARXMLParser):
323
326
  self.readBswScheduleEvent(child_element, event)
324
327
 
325
328
  def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
326
- for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
329
+ for child_element in self.findall(element, "EVENTS/BSW-TIMING-EVENT"):
327
330
  short_name = self.getShortName(child_element)
328
- self.logger.debug("readBswTimingEvent %s" % short_name)
331
+ self.logger.debug("read BswTimingEvent %s" % short_name)
329
332
  event = parent.createBswTimingEvent(short_name)
330
- event.period = self.getChildElementOptionalFloatValue(child_element, "PERIOD")
333
+ event.setPeriod(self.getChildElementOptionalTimeValue(child_element, "PERIOD"))
331
334
  # Read the Inherit BswScheduleEvent
332
335
  self.readBswScheduleEvent(child_element, event)
333
336
 
334
337
  def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
335
- for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
338
+ for child_element in self.findall(element, "EVENTS/BSW-DATA-RECEIVED-EVENT"):
336
339
  short_name = self.getShortName(child_element)
337
340
  self.logger.debug("readBswDataReceivedEvent %s" % short_name)
338
341
  event = parent.createBswDataReceivedEvent(short_name)
339
- event.data_ref = self.getChildElementRefType(parent.getShortName(), child_element, "DATA-REF")
342
+ event.dataRef = self.getChildElementRefType(parent.getShortName(), child_element, "DATA-REF")
340
343
  # Read the Inherit BswScheduleEvent
341
344
  self.readBswScheduleEvent(child_element, event)
342
345
 
343
346
  def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
344
- for child_element in self.findall(element, "./EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
347
+ for child_element in self.findall(element, "EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
345
348
  short_name = self.getShortName(child_element)
346
349
  self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
347
350
  event = parent.createBswInternalTriggerOccurredEvent(short_name)
348
- event.event_source_ref = self.getChildElementRefType(parent.getShortName(), child_element, "EVENT-SOURCE-REF")
351
+ event.eventSourceRef = self.getChildElementRefType(parent.getShortName(), child_element, "EVENT-SOURCE-REF")
349
352
  # Read the Inherit BswScheduleEvent
350
353
  self.readBswScheduleEvent(child_element, event)
351
354
 
@@ -356,7 +359,7 @@ class ARXMLParser(AbstractARXMLParser):
356
359
  return policy
357
360
 
358
361
  def readBswInternalBehaviorModeSenderPolicy(self, element: ET.Element, parent: BswInternalBehavior):
359
- for child_element in self.findall(element, "./MODE-SENDER-POLICYS/*"):
362
+ for child_element in self.findall(element, "MODE-SENDER-POLICYS/*"):
360
363
  tag_name = self.getTagName(child_element)
361
364
  if tag_name == "BSW-MODE-SENDER-POLICY":
362
365
  parent.addModeSenderPolicy(self.getBswModeSenderPolicy(child_element))
@@ -385,9 +388,9 @@ class ARXMLParser(AbstractARXMLParser):
385
388
 
386
389
  def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
387
390
  assignment = RoleBasedDataAssignment()
388
- assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
389
- assignment.used_parameter_element = self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")
390
- assignment.used_pim_ref = self.getChildElementOptionalRefType(element, "USED-PIM-REF")
391
+ assignment.setRole(self.getChildElementOptionalLiteral(element, "ROLE")) \
392
+ .setUsedParameterElement(self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")) \
393
+ .setUsedPimRef(self.getChildElementOptionalRefType(element, "USED-PIM-REF"))
391
394
  return assignment
392
395
 
393
396
  def getRoleBasedPortAssignment(self, element: ET.Element) -> RoleBasedPortAssignment:
@@ -395,12 +398,24 @@ class ARXMLParser(AbstractARXMLParser):
395
398
  assignment.portPrototypeRef = self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF")
396
399
  assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
397
400
  return assignment
401
+
402
+ def getRoleBasedDataTypeAssignment(self, element: ET.Element) -> RoleBasedDataTypeAssignment:
403
+ assignment = RoleBasedDataTypeAssignment()
404
+ assignment.setRole(self.getChildElementOptionalLiteral(element, "ROLE"))
405
+ assignment.setUsedImplementationDataTypeRef(self.getChildElementOptionalRefType(element, "USED-IMPLEMENTATION-DATA-TYPE-REF"))
406
+ return assignment
398
407
 
399
408
  def readServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
400
409
  self.readIdentifiable(element, dependency)
410
+ for child_element in self.findall(element, "ASSIGNED-DATA-TYPES/*"):
411
+ tag_name = self.getTagName(child_element.tag)
412
+ if (tag_name == "ROLE-BASED-DATA-TYPE-ASSIGNMENT"):
413
+ dependency.addAssignedDataType(self.getRoleBasedDataTypeAssignment(child_element))
414
+ else:
415
+ self._raiseError("Unsupported assigned data type <%s>" % tag_name)
401
416
 
402
417
  def readSwcServiceDependencyAssignedData(self, element: ET.Element, dependency: SwcServiceDependency):
403
- for child_element in element.findall("./xmlns:ASSIGNED-DATAS/*", self.nsmap):
418
+ for child_element in self.findall(element, "ASSIGNED-DATAS/*"):
404
419
  tag_name = self.getTagName(child_element.tag)
405
420
  if (tag_name == "ROLE-BASED-DATA-ASSIGNMENT"):
406
421
  dependency.AddAssignedData(self.getRoleBasedDataAssignment(child_element))
@@ -418,27 +433,93 @@ class ARXMLParser(AbstractARXMLParser):
418
433
  def readNvBlockNeeds(self, element: ET.Element, parent: SwcServiceDependency):
419
434
  short_name = self.getShortName(element)
420
435
  needs = parent.createNvBlockNeeds(short_name)
421
- self.logger.debug("readNvBlockNeeds %s" % short_name)
422
- needs.calc_ram_block_crc = self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")
423
- needs.check_static_block_id = self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")
424
- needs.n_data_sets = self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")
425
- needs.n_rom_blocks = self.getChildElementOptionalNumericalValue(element, "N-ROM-BLOCKS")
426
- needs.readonly = self.getChildElementOptionalBooleanValue(element, "READONLY")
427
- needs.reliability = self.getChildElementOptionalLiteral(element, "RELIABILITY")
428
- needs.resistant_to_changed_sw = self.getChildElementOptionalBooleanValue(element, "RESISTANT-TO-CHANGED-SW")
429
- needs.restore_at_start = self.getChildElementOptionalBooleanValue(element, "RESTORE-AT-START")
430
- needs.store_at_shutdown = self.getChildElementOptionalBooleanValue(element, "STORE-AT-SHUTDOWN")
431
- needs.write_only_once = self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")
432
- needs.write_verification = self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")
433
- needs.writing_priority = self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY")
436
+ self.logger.debug("read NvBlockNeeds %s" % short_name)
437
+ needs.setCalcRamBlockCrc(self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")) \
438
+ .setCheckStaticBlockId(self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")) \
439
+ .setNDataSets(self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")) \
440
+ .setNRomBlocks(self.getChildElementOptionalNumericalValue(element, "N-ROM-BLOCKS")) \
441
+ .setRamBlockStatusControl(self.getChildElementOptionalLiteral(element, "RAM-BLOCK-STATUS-CONTROL")) \
442
+ .setReadonly(self.getChildElementOptionalBooleanValue(element, "READONLY")) \
443
+ .setReliability(self.getChildElementOptionalLiteral(element, "RELIABILITY")) \
444
+ .setResistantToChangedSw(self.getChildElementOptionalBooleanValue(element, "RESISTANT-TO-CHANGED-SW")) \
445
+ .setRestoreAtStart(self.getChildElementOptionalBooleanValue(element, "RESTORE-AT-START")) \
446
+ .setStoreAtShutdown(self.getChildElementOptionalBooleanValue(element, "STORE-AT-SHUTDOWN")) \
447
+ .setStoreCyclic(self.getChildElementOptionalBooleanValue(element, "STORE-CYCLIC")) \
448
+ .setStoreEmergency(self.getChildElementOptionalBooleanValue(element, "STORE-EMERGENCY")) \
449
+ .setStoreImmediate(self.getChildElementOptionalBooleanValue(element, "STORE-IMMEDIATE")) \
450
+ .setUseAutoValidationAtShutDown(self.getChildElementOptionalBooleanValue(element, "USE-AUTO-VALIDATION-AT-SHUT-DOWN")) \
451
+ .setUseCRCCompMechanism(self.getChildElementOptionalBooleanValue(element, "USE-CRC-COMP-MECHANISM")) \
452
+ .setWriteOnlyOnce(self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")) \
453
+ .setWriteVerification(self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")) \
454
+ .setWritingPriority(self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY"))
455
+
456
+ def reaDiagnosticCommunicationManagerNeeds(self, element: ET.Element, parent: SwcServiceDependency):
457
+ short_name = self.getShortName(element)
458
+ needs = parent.createDiagnosticCommunicationManagerNeeds(short_name)
459
+ self.logger.debug("read DiagnosticCommunicationManagerNeeds %s" % short_name)
460
+ needs.setServiceRequestCallbackType(self.getChildElementOptionalLiteral(element, "SERVICE-REQUEST-CALLBACK-TYPE"))
461
+
462
+ def readDiagnosticRoutineNeeds(self, element: ET.Element, parent: SwcServiceDependency):
463
+ short_name = self.getShortName(element)
464
+ needs = parent.createDiagnosticRoutineNeeds(short_name)
465
+ self.logger.debug("read DiagnosticRoutineNeeds %s" % short_name)
466
+ needs.setDiagRoutineType(self.getChildElementOptionalLiteral(element, "DIAG-ROUTINE-TYPE")) \
467
+ .setRidNumber(self.getChildElementOptionalIntegerValue(element, "RID-NUMBER"))
468
+
469
+ def readDiagnosticValueNeeds(self, element: ET.Element, parent: SwcServiceDependency):
470
+ short_name = self.getShortName(element)
471
+ needs = parent.createDiagnosticValueNeeds(short_name)
472
+ self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
473
+ needs.setDataLength(self.getChildElementOptionalPositiveInteger(element, "DATA-LENGTH")) \
474
+ .setDiagnosticValueAccess(self.getChildElementOptionalLiteral(element, "DIAGNOSTIC-VALUE-ACCESS")) \
475
+ .setDidNumber(self.getChildElementOptionalIntegerValue(element, "DID-NUMBER")) \
476
+ .setFixedLength(self.getChildElementOptionalBooleanValue(element, "FIXED-LENGTH")) \
477
+ .setProcessingStyle(self.getChildElementOptionalLiteral(element, "PROCESSING-STYLE"))
478
+
479
+ def readDiagEventDebounceMonitorInternal(self, element: ET.Element, algorithm: DiagEventDebounceMonitorInternal):
480
+ self.readIdentifiable(element, algorithm)
481
+
482
+ def readDiagEventDebounceAlgorithm(self, element: ET.Element, needs: DiagnosticEventNeeds):
483
+ for child_element in self.findall(element, "DIAG-EVENT-DEBOUNCE-ALGORITHM/*"):
484
+ tag_name = self.getTagName(child_element)
485
+ if tag_name == "DIAG-EVENT-DEBOUNCE-MONITOR-INTERNAL":
486
+ algorithm = needs.createDiagEventDebounceMonitorInternal(self.getShortName(child_element))
487
+ self.readDiagEventDebounceMonitorInternal(child_element, algorithm)
488
+ else:
489
+ self.notImplemented("Unsupported DiagEventDebounceAlgorithm <%s>" % tag_name)
490
+
491
+ def readDiagnosticEventNeeds(self, element: ET.Element, parent: SwcServiceDependency):
492
+ short_name = self.getShortName(element)
493
+ needs = parent.createDiagnosticEventNeeds(short_name)
494
+ self.logger.debug("read DiagnosticEventNeeds %s" % short_name)
495
+
496
+ self.readDiagEventDebounceAlgorithm(element, needs)
497
+ needs.setDtcKind(self.getChildElementOptionalLiteral(element, "DTC-KIND")) \
498
+ .setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
499
+
500
+ def readCryptoServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
501
+ short_name = self.getShortName(element)
502
+ needs = parent.createCryptoServiceNeeds(short_name)
503
+ self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
504
+ needs.setMaximumKeyLength(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-KEY-LENGTH"))
434
505
 
435
506
  def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
436
507
  for child_element in element.findall("./xmlns:SERVICE-NEEDS/*", self.nsmap):
437
508
  tag_name = self.getTagName(child_element.tag)
438
509
  if tag_name == "NV-BLOCK-NEEDS":
439
510
  self.readNvBlockNeeds(child_element, parent)
511
+ elif tag_name == "DIAGNOSTIC-COMMUNICATION-MANAGER-NEEDS":
512
+ self.reaDiagnosticCommunicationManagerNeeds(child_element, parent)
513
+ elif tag_name == "DIAGNOSTIC-ROUTINE-NEEDS":
514
+ self.readDiagnosticRoutineNeeds(child_element, parent)
515
+ elif tag_name == "DIAGNOSTIC-VALUE-NEEDS":
516
+ self.readDiagnosticValueNeeds(child_element, parent)
517
+ elif tag_name == "DIAGNOSTIC-EVENT-NEEDS":
518
+ self.readDiagnosticEventNeeds(child_element, parent)
519
+ elif tag_name == "CRYPTO-SERVICE-NEEDS":
520
+ self.readCryptoServiceNeeds(child_element, parent)
440
521
  else:
441
- self._raiseError("Unsupported service needs <%s>" % tag_name)
522
+ self.notImplemented("Unsupported service needs <%s>" % tag_name)
442
523
 
443
524
  def readSwcServiceDependency(self, element: ET.Element, parent: SwcInternalBehavior):
444
525
  short_name = self.getShortName(element)
@@ -461,7 +542,7 @@ class ARXMLParser(AbstractARXMLParser):
461
542
  include_data_type_sets = []
462
543
  for child_element in self.findall(element, "./INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
463
544
  include_data_type_set = IncludedDataTypeSet()
464
- self.readElementAttributes(child_element, include_data_type_set)
545
+ self.readARObjectAttributes(child_element, include_data_type_set)
465
546
  for ref_type in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-REFS/DATA-TYPE-REF"):
466
547
  include_data_type_set.addDataTypeRef(ref_type)
467
548
  include_data_type_sets.append(include_data_type_set)
@@ -542,7 +623,7 @@ class ARXMLParser(AbstractARXMLParser):
542
623
  self.logger.debug("readBswModuleEntry %s" % entry.getShortName())
543
624
 
544
625
  def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
545
- self.readElementAttributes(element, engineering_obj)
626
+ self.readARObjectAttributes(element, engineering_obj)
546
627
  engineering_obj.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
547
628
  .setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY"))
548
629
 
@@ -576,14 +657,14 @@ class ARXMLParser(AbstractARXMLParser):
576
657
 
577
658
  def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
578
659
  for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
579
- short_name = self.getShortName(child_element)
580
- memory_section = consumption.createMemorySection(short_name)
660
+ memory_section = consumption.createMemorySection(self.getShortName(child_element))
581
661
  self.readIdentifiable(child_element, memory_section)
582
- memory_section.setAlignment(self.getChildElementOptionalLiteral(child_element, "ALIGNMENT"))
662
+ memory_section.setAlignment(self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")) \
663
+ .setMemClassSymbol(self.getChildElementOptionalLiteral(child_element, "MEM-CLASS-SYMBOL"))
583
664
  self.readMemorySectionOptions(child_element, memory_section)
584
- memory_section.size = self.getChildElementOptionalNumericalValue(child_element, "SIZE")
585
- memory_section.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")
586
- memory_section.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
665
+ memory_section.setSize(self.getChildElementOptionalNumericalValue(child_element, "SIZE")) \
666
+ .setSwAddrMethodRef(self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")) \
667
+ .setSymbol(self.getChildElementOptionalLiteral(child_element, "SYMBOL"))
587
668
  self.logger.debug("readMemorySections %s" % memory_section.getShortName())
588
669
 
589
670
  def readResourceConsumption(self, element: ET.Element, impl: Implementation):
@@ -669,11 +750,12 @@ class ARXMLParser(AbstractARXMLParser):
669
750
  self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
670
751
 
671
752
  def readROperationIRef(self, element: ET.Element, key: str, parent: ServerCallPoint):
672
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
753
+ child_element = self.find(element, key)
673
754
  if (child_element is not None):
674
755
  operation_iref = ROperationInAtomicSwcInstanceRef()
675
- operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
676
- operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
756
+ self.readARObjectAttributes(child_element, operation_iref)
757
+ operation_iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
758
+ .setTargetRequiredOperationRef(self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF"))
677
759
  parent.setOperationIRef(operation_iref)
678
760
 
679
761
  def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
@@ -685,7 +767,7 @@ class ARXMLParser(AbstractARXMLParser):
685
767
  parent.setDataIRef(data_iref)
686
768
 
687
769
  def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
688
- for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
770
+ for child_element in self.findall(element, "MODE-IREFS/MODE-IREF"):
689
771
  mode_iref = RModeInAtomicSwcInstanceRef()
690
772
  mode_iref.setContextPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")) \
691
773
  .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
@@ -767,18 +849,23 @@ class ARXMLParser(AbstractARXMLParser):
767
849
  if tag_name == "RUNNABLE-ENTITY-ARGUMENT":
768
850
  entity.addArgument(self.getRunnableEntityArgument(child_element))
769
851
  else:
770
- raise NotImplementedError("Unsupported Arguments of runnable entity <%s>" % tag_name)
852
+ self.notImplemented("Unsupported Arguments of runnable entity <%s>" % tag_name)
853
+
854
+ def readAsynchronousServerCallResultPoint(self, element: ET.Element, entity: RunnableEntity):
855
+ for child_element in self.findall(element, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINTS/ASYNCHRONOUS-SERVER-CALL-RESULT-POINT"):
856
+ point = entity.createAsynchronousServerCallResultPoint(self.getShortName(child_element))
857
+ self.readIdentifiable(child_element, point)
858
+ point.setAsynchronousServerCallPointRef(self.getChildElementOptionalRefType(child_element, "ASYNCHRONOUS-SERVER-CALL-POINT-REF"))
771
859
 
772
860
  def readRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
773
861
  self.readExecutableEntity(element, entity)
774
862
  self.readRunnableEntityArguments(element, entity)
775
863
 
864
+ self.readAsynchronousServerCallResultPoint(element, entity)
776
865
  entity.setCanBeInvokedConcurrently(self.getChildElementOptionalBooleanValue(element, "CAN-BE-INVOKED-CONCURRENTLY"))
777
- entity.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
778
-
866
+ self.readDataReadAccesses(element, entity)
779
867
  self.readDataReceivePointByArguments(element, entity)
780
868
  self.readDataReceivePointByValues(element, entity)
781
- self.readDataReadAccesses(element, entity)
782
869
  self.readDataWriteAccesses(element, entity)
783
870
  self.readDataSendPoints(element, entity)
784
871
  self.readInternalBehaviorServerCallPoint(element, entity)
@@ -789,6 +876,8 @@ class ARXMLParser(AbstractARXMLParser):
789
876
  self.readReadLocalVariables(element, entity)
790
877
  self.readWrittenLocalVariables(element, entity)
791
878
 
879
+ entity.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
880
+
792
881
  def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
793
882
  for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
794
883
  short_name = self.getShortName(child_element)
@@ -812,17 +901,19 @@ class ARXMLParser(AbstractARXMLParser):
812
901
  iref = self.getRModeInAtomicSwcInstanceRef(child_element)
813
902
  event.addDisabledModeIRef(iref)
814
903
 
815
- def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
816
- child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
904
+ def readPOperationIRef(self, element: ET.Element, key: str, parent: OperationInvokedEvent):
905
+ child_element = self.find(element, key)
817
906
  if (child_element is not None):
818
- parent.operationIRef = POperationInAtomicSwcInstanceRef()
819
- parent.operationIRef.context_p_port_ref = self.getChildElementRefType(parent.getShortName(), child_element, "CONTEXT-P-PORT-REF")
820
- parent.operationIRef.target_provided_operation_ref = self.getChildElementRefType(parent.getShortName(), child_element, "TARGET-PROVIDED-OPERATION-REF")
907
+ operation_iref = POperationInAtomicSwcInstanceRef()
908
+ self.readARObjectAttributes(child_element, operation_iref)
909
+ operation_iref.setContextPPortRef(self.getChildElementRefType(parent.getShortName(), child_element, "CONTEXT-P-PORT-REF")) \
910
+ .setTargetProvidedOperationRef(self.getChildElementRefType(parent.getShortName(), child_element, "TARGET-PROVIDED-OPERATION-REF"))
911
+ parent.setOperationIRef(operation_iref)
821
912
 
822
913
  def readOperationInvokedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
823
914
  short_name = self.getShortName(element)
824
915
  event = parent.createOperationInvokedEvent(short_name)
825
- self.readOperationIRef(element, event)
916
+ self.readPOperationIRef(element, "OPERATION-IREF", event)
826
917
  self.readRTEEvent(element, event)
827
918
 
828
919
  def readVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
@@ -830,13 +921,13 @@ class ARXMLParser(AbstractARXMLParser):
830
921
  prototype.setInitValue(self.getInitValue(element))
831
922
 
832
923
  def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
833
- for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
924
+ for child_element in self.findall(element, "EXPLICIT-INTER-RUNNABLE-VARIABLES/VARIABLE-DATA-PROTOTYPE"):
834
925
  short_name = self.getShortName(child_element)
835
926
  prototype = parent.createExplicitInterRunnableVariable(short_name)
836
927
  self.readVariableDataPrototype(child_element, prototype)
837
928
 
838
929
  def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
839
- for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
930
+ for child_element in self.findall(element, "PER-INSTANCE-MEMORYS/PER-INSTANCE-MEMORY"):
840
931
  short_name = self.getShortName(child_element)
841
932
  memory = behavior.createPerInstanceMemory(short_name)
842
933
  self.readIdentifiable(child_element, memory)
@@ -855,26 +946,26 @@ class ARXMLParser(AbstractARXMLParser):
855
946
  prototype.setInitValue(self.getInitValue(element))
856
947
 
857
948
  def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
858
- for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
949
+ for child_element in self.findall(element, "PER-INSTANCE-PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
859
950
  short_name = self.getShortName(child_element)
860
951
  prototype = behavior.createPerInstanceParameter(short_name)
861
952
  self.readParameterDataPrototype(child_element, prototype)
862
953
 
863
954
  def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
864
955
  argument_value = PortDefinedArgumentValue()
865
- child_element = element.find("./xmlns:VALUE/*", self.nsmap)
956
+ child_element = self.find(element, "VALUE/*")
866
957
  if child_element is not None:
867
958
  argument_value.value = self.getValueSpecification(child_element)
868
959
  argument_value.valueTypeTRef = self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF")
869
960
  return argument_value
870
961
 
871
962
  def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
872
- for child_element in element.findall("./xmlns:PORT-API-OPTIONS/xmlns:PORT-API-OPTION", self.nsmap):
963
+ for child_element in self.findall(element, "PORT-API-OPTIONS/PORT-API-OPTION"):
873
964
  option = PortAPIOption()
874
965
  option.enableTakeAddress = self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")
875
966
  option.indirectAPI = self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")
876
967
  option.portRef = self.getChildElementOptionalRefType(child_element, "PORT-REF")
877
- for argument_value_tag in child_element.findall("./xmlns:PORT-ARG-VALUES/xmlns:PORT-DEFINED-ARGUMENT-VALUE", self.nsmap):
968
+ for argument_value_tag in self.findall(child_element, "PORT-ARG-VALUES/PORT-DEFINED-ARGUMENT-VALUE"):
878
969
  option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
879
970
  behavior.addPortAPIOption(option)
880
971
 
@@ -882,8 +973,8 @@ class ARXMLParser(AbstractARXMLParser):
882
973
  short_name = self.getShortName(element)
883
974
  event = parent.createTimingEvent(short_name)
884
975
  self.readRTEEvent(element, event)
885
- event.offset = self.getChildElementOptionalFloatValue(element, "OFFSET")
886
- event.period = self.getChildElementOptionalFloatValue(element, "PERIOD")
976
+ event.setOffset(self.getChildElementOptionalTimeValue(element, "OFFSET")) \
977
+ .setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
887
978
 
888
979
  def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
889
980
  short_name = self.getShortName(element)
@@ -895,22 +986,28 @@ class ARXMLParser(AbstractARXMLParser):
895
986
  short_name = self.getShortName(element)
896
987
  event = parent.createSwcModeSwitchEvent(short_name)
897
988
  self.readRTEEvent(element, event)
898
- event.activation = self.getChildElementOptionalLiteral(element, "ACTIVATION")
989
+ event.setActivation(self.getChildElementOptionalLiteral(element, "ACTIVATION"))
899
990
  self.readRModeInAtomicSwcInstanceRef(element, event)
900
991
 
901
992
  def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
902
993
  short_name = self.getShortName(element)
903
994
  event = parent.createInternalTriggerOccurredEvent(short_name)
904
995
  self.readRTEEvent(element, event)
905
- event.event_source_ref = self.getChildElementRefType(parent.getShortName(), element, "EVENT-SOURCE-REF")
996
+ event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
906
997
 
907
998
  def readInitEvent(self, element, parent: SwcInternalBehavior):
908
999
  short_name = self.getShortName(element)
909
1000
  event = parent.createInitEvent(short_name)
910
1001
  self.readRTEEvent(element, event)
911
1002
 
1003
+ def readAsynchronousServerCallReturnsEvent(self, element, parent: SwcInternalBehavior):
1004
+ short_name = self.getShortName(element)
1005
+ event = parent.createAsynchronousServerCallReturnsEvent(short_name)
1006
+ self.readRTEEvent(element, event)
1007
+ event.setActivationReasonRepresentationRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
1008
+
912
1009
  def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
913
- for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
1010
+ for child_element in self.findall(element, "EVENTS/*"):
914
1011
  tag_name = self.getTagName(child_element.tag)
915
1012
  if tag_name == "TIMING-EVENT":
916
1013
  self.readTimingEvent(child_element, parent)
@@ -924,19 +1021,21 @@ class ARXMLParser(AbstractARXMLParser):
924
1021
  self.readInternalTriggerOccurredEvent(child_element, parent)
925
1022
  elif tag_name == "INIT-EVENT":
926
1023
  self.readInitEvent(child_element, parent)
1024
+ elif tag_name == "ASYNCHRONOUS-SERVER-CALL-RETURNS-EVENT":
1025
+ self.readAsynchronousServerCallReturnsEvent(child_element, parent)
927
1026
  else:
928
- self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
1027
+ self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
929
1028
 
930
1029
  def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
931
1030
  child_element = self.find(element, "SW-POINTER-TARGET-PROPS")
932
1031
  if child_element is not None:
933
1032
  sw_pointer_target_props = SwPointerTargetProps()
934
- sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
935
- sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1033
+ sw_pointer_target_props.setTargetCategory(self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")) \
1034
+ .setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS"))
936
1035
  parent.swPointerTargetProps = sw_pointer_target_props
937
1036
 
938
1037
  def readLanguageSpecific(self, element: ET.Element, specific: LanguageSpecific):
939
- self.readElementAttributes(element, specific)
1038
+ self.readARObjectAttributes(element, specific)
940
1039
  specific.value = element.text
941
1040
  if 'L' in element.attrib:
942
1041
  specific.l = element.attrib['L']
@@ -953,7 +1052,7 @@ class ARXMLParser(AbstractARXMLParser):
953
1052
  paragraphs = []
954
1053
  for child_element in self.findall(element, key):
955
1054
  paragraph = MultiLanguageParagraph()
956
- self.readElementAttributes(child_element, paragraph)
1055
+ self.readARObjectAttributes(child_element, paragraph)
957
1056
  for l1 in self.getLParagraphs(child_element, "L-1"):
958
1057
  paragraph.addL1(l1)
959
1058
  paragraphs.append(paragraph)
@@ -986,13 +1085,13 @@ class ARXMLParser(AbstractARXMLParser):
986
1085
  child_element = self.find(element, key)
987
1086
  if child_element is not None:
988
1087
  paragraph = MultiLanguagePlainText()
989
- self.readElementAttributes(child_element, paragraph)
1088
+ self.readARObjectAttributes(child_element, paragraph)
990
1089
  for l10 in self.getLPlainTexts(child_element, "L-10"):
991
1090
  paragraph.addL10(l10)
992
1091
  return paragraph
993
1092
 
994
1093
  def readDocumentationBlock(self, element: ET.Element, block: DocumentationBlock):
995
- self.readElementAttributes(element, block)
1094
+ self.readARObjectAttributes(element, block)
996
1095
  for paragraph in self.getMultiLanguageParagraphs(element, "P"):
997
1096
  block.addP(paragraph)
998
1097
  for list in self.getListElements(element, "LIST"):
@@ -1021,7 +1120,7 @@ class ARXMLParser(AbstractARXMLParser):
1021
1120
 
1022
1121
  def getAnnotations(self, element: ET.Element) -> List[Annotation]:
1023
1122
  annotations = []
1024
- for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
1123
+ for child_element in self.findall(element, "ANNOTATIONS/ANNOTATION"):
1025
1124
  annotation = Annotation()
1026
1125
  self.readGeneralAnnotation(child_element, annotation)
1027
1126
  annotations.append(annotation)
@@ -1029,7 +1128,7 @@ class ARXMLParser(AbstractARXMLParser):
1029
1128
 
1030
1129
  def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
1031
1130
  props = SwAxisIndividual()
1032
- self.readElementAttributes(element, props)
1131
+ self.readARObjectAttributes(element, props)
1033
1132
  props.setInputVariableTypeRef(self.getChildElementOptionalRefType(element, "INPUT-VARIABLE-TYPE-REF")) \
1034
1133
  .setCompuMethodRef(self.getChildElementOptionalRefType(element, "COMPU-METHOD-REF")) \
1035
1134
  .setSwMaxAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MAX-AXIS-POINTS")) \
@@ -1046,10 +1145,10 @@ class ARXMLParser(AbstractARXMLParser):
1046
1145
  axis = SwCalprmAxis()
1047
1146
  axis.sw_axis_index = self.getChildElementOptionalNumericalValue(element, "SW-AXIS-INDEX")
1048
1147
  axis.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
1049
- child_element = element.find("./xmlns:SW-AXIS-INDIVIDUAL", self.nsmap)
1148
+ child_element = self.find(element, "SW-AXIS-INDIVIDUAL")
1050
1149
  if child_element is not None:
1051
1150
  axis.sw_calprm_axis_type_props = self.getSwAxisIndividual(child_element)
1052
- child_element = element.find("./xmlns:SW-AXIS-GROUPED", self.nsmap)
1151
+ child_element = self.find(element, "SW-AXIS-GROUPED")
1053
1152
  if child_element is not None:
1054
1153
  axis.sw_calprm_axis_type_props = self.getSwAxisGrouped(child_element)
1055
1154
 
@@ -1057,7 +1156,7 @@ class ARXMLParser(AbstractARXMLParser):
1057
1156
 
1058
1157
  def getSwCalprmAxisSet(self, element: ET.Element, key: str) -> SwCalprmAxisSet:
1059
1158
  set = SwCalprmAxisSet()
1060
- for child_element in element.findall("./xmlns:%s/*" % key, self.nsmap):
1159
+ for child_element in self.findall(element, "%s/*" % key):
1061
1160
  tag_name = self.getTagName(child_element.tag)
1062
1161
  if tag_name == "SW-CALPRM-AXIS":
1063
1162
  set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
@@ -1069,13 +1168,13 @@ class ARXMLParser(AbstractARXMLParser):
1069
1168
  props.setInvalidValue(self.getValueSpecification(child_element))
1070
1169
 
1071
1170
  def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
1072
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
1171
+ child_element = self.find(element, key)
1073
1172
  sw_data_def_props = None
1074
1173
  if child_element is not None:
1075
- conditional_tag = child_element.find("./xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
1174
+ conditional_tag = self.find(child_element, "SW-DATA-DEF-PROPS-VARIANTS/SW-DATA-DEF-PROPS-CONDITIONAL")
1076
1175
  if conditional_tag is not None:
1077
1176
  sw_data_def_props = SwDataDefProps()
1078
- self.readElementAttributes(child_element, sw_data_def_props)
1177
+ self.readARObjectAttributes(child_element, sw_data_def_props)
1079
1178
 
1080
1179
  for annotation in self.getAnnotations(conditional_tag):
1081
1180
  sw_data_def_props.addAnnotation(annotation)
@@ -1083,6 +1182,7 @@ class ARXMLParser(AbstractARXMLParser):
1083
1182
  sw_data_def_props.setBaseTypeRef(self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")) \
1084
1183
  .setDataConstrRef(self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")) \
1085
1184
  .setCompuMethodRef(self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")) \
1185
+ .setSwAddrMethodRef(self.getChildElementOptionalRefType(conditional_tag, "SW-ADDR-METHOD-REF")) \
1086
1186
  .setSwImplPolicy(self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")) \
1087
1187
  .setSwIntendedResolution(self.getChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION")) \
1088
1188
  .setImplementationDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")) \
@@ -1093,7 +1193,7 @@ class ARXMLParser(AbstractARXMLParser):
1093
1193
  .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1094
1194
  self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
1095
1195
  self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1096
- self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
1196
+ self.readARObjectAttributes(conditional_tag, sw_data_def_props.conditional)
1097
1197
  return sw_data_def_props
1098
1198
 
1099
1199
  def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
@@ -1110,7 +1210,7 @@ class ARXMLParser(AbstractARXMLParser):
1110
1210
  prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
1111
1211
 
1112
1212
  def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
1113
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
1213
+ for child_element in self.findall(element, "ELEMENTS/APPLICATION-RECORD-ELEMENT"):
1114
1214
  short_name = self.getShortName(child_element)
1115
1215
  record_element = parent.createApplicationRecordElement(short_name)
1116
1216
  self.logger.debug("readApplicationRecordElements %s" % short_name)
@@ -1127,10 +1227,10 @@ class ARXMLParser(AbstractARXMLParser):
1127
1227
 
1128
1228
  def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
1129
1229
  for child_element in self.findall(element, "SUB-ELEMENTS/IMPLEMENTATION-DATA-TYPE-ELEMENT"):
1130
- short_name = self.getShortName(child_element)
1131
- type_element = parent.createImplementationDataTypeElement(short_name)
1230
+ type_element = parent.createImplementationDataTypeElement(self.getShortName(child_element))
1132
1231
  self.readIdentifiable(child_element, type_element)
1133
1232
  type_element.setArraySize(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")) \
1233
+ .setArraySizeHandling(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING")) \
1134
1234
  .setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
1135
1235
  self.readImplementationDataTypeElements(child_element, type_element)
1136
1236
  type_element.setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS"))
@@ -1139,6 +1239,7 @@ class ARXMLParser(AbstractARXMLParser):
1139
1239
  short_name = self.getShortName(element)
1140
1240
  data_type = parent.createImplementationDataType(short_name)
1141
1241
  self.readAutosarDataType(element, data_type)
1242
+ data_type.setDynamicArraySizeProfile(self.getChildElementOptionalLiteral(element, "DYNAMIC-ARRAY-SIZE-PROFILE"))
1142
1243
  self.readImplementationDataTypeElements(element, data_type)
1143
1244
  data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
1144
1245
 
@@ -1183,7 +1284,7 @@ class ARXMLParser(AbstractARXMLParser):
1183
1284
  self.readBaseTypeDirectDefinition(element, data_type.baseTypeDefinition)
1184
1285
 
1185
1286
  def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
1186
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
1287
+ child_element = self.find(element, key)
1187
1288
  iref = None
1188
1289
  if child_element is not None:
1189
1290
  iref = ApplicationCompositeElementInPortInterfaceInstanceRef()
@@ -1194,25 +1295,26 @@ class ARXMLParser(AbstractARXMLParser):
1194
1295
  def getCompositeNetworkRepresentation(self, element: ET.Element) -> CompositeNetworkRepresentation:
1195
1296
  self.logger.debug("getCompositeNetworkRepresentation")
1196
1297
  representation = CompositeNetworkRepresentation()
1197
- representation.leaf_element_iref = self.getApplicationCompositeElementInPortInterfaceInstanceRef(element, "LEAF-ELEMENT-IREF")
1198
- representation.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1298
+ representation.setLeafElementIRef(self.getApplicationCompositeElementInPortInterfaceInstanceRef(element, "LEAF-ELEMENT-IREF")) \
1299
+ .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION"))
1199
1300
  return representation
1200
1301
 
1201
1302
  def readReceiverComSpec(self, element: ET.Element, com_spec: ReceiverComSpec):
1202
- self.readElementAttributes(element, com_spec)
1303
+ self.readARObjectAttributes(element, com_spec)
1203
1304
  for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1204
1305
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1205
- com_spec.dataElementRef = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
1206
- com_spec.networkRepresentation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
1207
- com_spec.handleOutOfRange = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
1208
- com_spec.usesEndToEndProtection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
1306
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1307
+ .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
1308
+ .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
1309
+ .setHandleOutOfRangeStatus(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE-STATUS")) \
1310
+ .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1209
1311
 
1210
1312
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1211
1313
  child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
1212
1314
  if child_element is None:
1213
1315
  return None
1214
1316
  sw_values = SwValues()
1215
- self.readElementAttributes(child_element, sw_values)
1317
+ self.readARObjectAttributes(child_element, sw_values)
1216
1318
  for v in self.getChildElementFloatValueList(child_element, "V"):
1217
1319
  sw_values.addV(v)
1218
1320
  sw_values.vt = self.getChildElementOptionalLiteral(child_element, "VT")
@@ -1224,7 +1326,7 @@ class ARXMLParser(AbstractARXMLParser):
1224
1326
  if child_element is not None:
1225
1327
  self.logger.debug("getValueList %s" % key)
1226
1328
  value_list = ValueList()
1227
- self.readElementAttributes(child_element, value_list)
1329
+ self.readARObjectAttributes(child_element, value_list)
1228
1330
  value_list.v = self.getChildElementOptionalFloatValue(child_element, "V")
1229
1331
  return value_list
1230
1332
 
@@ -1234,7 +1336,7 @@ class ARXMLParser(AbstractARXMLParser):
1234
1336
  if child_element is not None:
1235
1337
  self.logger.debug("getSwValueCont")
1236
1338
  cont = SwValueCont()
1237
- self.readElementAttributes(child_element, cont)
1339
+ self.readARObjectAttributes(child_element, cont)
1238
1340
  cont.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
1239
1341
  cont.sw_arraysize = self.getValueList(child_element, "SW-ARRAYSIZE")
1240
1342
  cont.sw_values_phys = self.getSwValues(child_element, "SW-VALUES-PHYS")
@@ -1257,43 +1359,43 @@ class ARXMLParser(AbstractARXMLParser):
1257
1359
 
1258
1360
  def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
1259
1361
  com_spec = ClientComSpec()
1260
- self.readElementAttributes(element, com_spec)
1362
+ self.readARObjectAttributes(element, com_spec)
1261
1363
  com_spec.operationRef = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1262
1364
  return com_spec
1263
1365
 
1264
1366
  def getParameterRequireComSpec(self, element: ET.Element) -> ParameterRequireComSpec:
1265
1367
  com_spec = ParameterRequireComSpec()
1266
- self.readElementAttributes(element, com_spec)
1368
+ self.readARObjectAttributes(element, com_spec)
1267
1369
  com_spec.setInitValue(self.getInitValue(element)) \
1268
1370
  .setParameterRef(self.getChildElementOptionalRefType(element, "PARAMETER-REF"))
1269
1371
  return com_spec
1270
1372
 
1271
1373
  def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
1272
1374
  com_spec = QueuedReceiverComSpec()
1273
- self.readElementAttributes(element, com_spec)
1375
+ self.readARObjectAttributes(element, com_spec)
1274
1376
  self.readReceiverComSpec(element, com_spec)
1275
1377
  com_spec.queueLength = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
1276
1378
  return com_spec
1277
1379
 
1278
1380
  def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
1279
1381
  com_spec = ModeSwitchReceiverComSpec()
1280
- self.readElementAttributes(element, com_spec)
1382
+ self.readARObjectAttributes(element, com_spec)
1281
1383
  com_spec.modeGroupRef = self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")
1282
1384
  return com_spec
1283
1385
 
1284
1386
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1285
1387
  com_spec = NonqueuedReceiverComSpec()
1286
- self.readElementAttributes(element, com_spec)
1388
+ self.readARObjectAttributes(element, com_spec)
1287
1389
  self.readReceiverComSpec(element, com_spec)
1288
- com_spec.aliveTimeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
1289
- com_spec.enableUpdated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
1290
- com_spec.handleNeverReceived = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
1291
- com_spec.handleTimeoutType = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
1292
- com_spec.initValue = self.getInitValue(element)
1390
+ com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")) \
1391
+ .setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")) \
1392
+ .setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")) \
1393
+ .setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")) \
1394
+ .setInitValue(self.getInitValue(element))
1293
1395
  return com_spec
1294
1396
 
1295
1397
  def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
1296
- for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/*", self.nsmap):
1398
+ for child_element in self.findall(element, "REQUIRED-COM-SPECS/*"):
1297
1399
  tag_name = self.getTagName(child_element.tag)
1298
1400
  if tag_name == "NONQUEUED-RECEIVER-COM-SPEC":
1299
1401
  parent.addRequiredComSpec(self.getNonqueuedReceiverComSpec(child_element))
@@ -1308,14 +1410,36 @@ class ARXMLParser(AbstractARXMLParser):
1308
1410
  else:
1309
1411
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1310
1412
 
1413
+ def readAbstractRequiredPortPrototype(self, element: ET.Element, prototype: AbstractRequiredPortPrototype):
1414
+ self.readProvidedComSpec(element, prototype)
1415
+
1416
+ def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1417
+ short_name = self.getShortName(element)
1418
+ self.logger.debug("readPPortPrototype %s" % short_name)
1419
+ prototype = parent.createPPortPrototype(short_name)
1420
+ self.readIdentifiable(element, prototype)
1421
+ self.readAbstractRequiredPortPrototype(element, prototype)
1422
+ prototype.setProvidedInterfaceTRef(self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF"))
1423
+
1424
+ def readAbstractProvidedPortPrototype(self, element: ET.Element, prototype: AbstractProvidedPortPrototype):
1425
+ self.readRequiredComSpec(element, prototype)
1426
+
1311
1427
  def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1312
1428
  short_name = self.getShortName(element)
1313
- self.logger.debug("readRPortPrototype %s" % short_name)
1429
+ self.logger.debug("read RPortPrototype %s" % short_name)
1314
1430
  prototype = parent.createRPortPrototype(short_name)
1315
1431
  self.readIdentifiable(element, prototype)
1432
+ self.readAbstractProvidedPortPrototype(element, prototype)
1316
1433
  prototype.setRequiredInterfaceTRef(self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF"))
1317
1434
 
1318
- self.readRequiredComSpec(element, prototype)
1435
+ def readPRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1436
+ short_name = self.getShortName(element)
1437
+ self.logger.debug("read PRPortPrototype %s" % short_name)
1438
+ prototype = parent.createPRPortPrototype(short_name)
1439
+ self.readIdentifiable(element, prototype)
1440
+ self.readAbstractRequiredPortPrototype(element, prototype)
1441
+ self.readAbstractProvidedPortPrototype(element, prototype)
1442
+ prototype.setProvidedRequiredInterface(self.getChildElementOptionalRefType(element, "PROVIDED-REQUIRED-INTERFACE-TREF"))
1319
1443
 
1320
1444
  def readAtomicSwComponentTypePorts(self, element: ET.Element, sw_component: AtomicSwComponentType):
1321
1445
  for child_element in self.findall(element, "PORTS/*"):
@@ -1324,6 +1448,8 @@ class ARXMLParser(AbstractARXMLParser):
1324
1448
  self.readPPortPrototype(child_element, sw_component)
1325
1449
  elif tag_name == "R-PORT-PROTOTYPE":
1326
1450
  self.readRPortPrototype(child_element, sw_component)
1451
+ elif tag_name == "PR-PORT-PROTOTYPE":
1452
+ self.readPRPortPrototype(child_element, sw_component)
1327
1453
  else:
1328
1454
  self._raiseError("Unsupported Port Prototype <%s>" % tag_name)
1329
1455
 
@@ -1331,13 +1457,13 @@ class ARXMLParser(AbstractARXMLParser):
1331
1457
  child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
1332
1458
  if (child_element is not None):
1333
1459
  acknowledge = TransmissionAcknowledgementRequest()
1334
- self.readElementAttributes(child_element, acknowledge)
1460
+ self.readARObjectAttributes(child_element, acknowledge)
1335
1461
  acknowledge.timeout = self.getChildElementOptionalFloatValue(child_element, "TIMEOUT")
1336
1462
  return acknowledge
1337
1463
  return None
1338
1464
 
1339
1465
  def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
1340
- self.readElementAttributes(element, com_spec)
1466
+ self.readARObjectAttributes(element, com_spec)
1341
1467
  for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
1342
1468
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1343
1469
  com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
@@ -1354,6 +1480,7 @@ class ARXMLParser(AbstractARXMLParser):
1354
1480
 
1355
1481
  def getServerComSpec(self, element) -> ServerComSpec:
1356
1482
  com_spec = ServerComSpec()
1483
+ self.readARObjectAttributes(element, com_spec)
1357
1484
  com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
1358
1485
  .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1359
1486
  return com_spec
@@ -1383,15 +1510,6 @@ class ARXMLParser(AbstractARXMLParser):
1383
1510
  else:
1384
1511
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1385
1512
 
1386
- def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1387
- short_name = self.getShortName(element)
1388
- self.logger.debug("readPPortPrototype %s" % short_name)
1389
- prototype = parent.createPPortPrototype(short_name)
1390
- self.readIdentifiable(element, prototype)
1391
- prototype.setProvidedInterfaceTRef(self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF"))
1392
-
1393
- self.readProvidedComSpec(element, prototype)
1394
-
1395
1513
  def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
1396
1514
  for child_element in self.findall(element, "INNER-GROUP-IREFS/INNER-GROUP-IREF"):
1397
1515
  inner_group_iref = InnerPortGroupInCompositionInstanceRef()
@@ -1480,7 +1598,7 @@ class ARXMLParser(AbstractARXMLParser):
1480
1598
  child_element = self.find(element, "PROVIDER-IREF")
1481
1599
  if (child_element is not None):
1482
1600
  provide_iref = PPortInCompositionInstanceRef()
1483
- self.readElementAttributes(child_element, provide_iref)
1601
+ self.readARObjectAttributes(child_element, provide_iref)
1484
1602
  self.readPPortInCompositionInstanceRef(child_element, provide_iref)
1485
1603
  parent.setProviderIRef(provide_iref)
1486
1604
 
@@ -1488,7 +1606,7 @@ class ARXMLParser(AbstractARXMLParser):
1488
1606
  child_element = self.find(element, "REQUESTER-IREF")
1489
1607
  if (child_element is not None):
1490
1608
  requester_iref = RPortInCompositionInstanceRef()
1491
- self.readElementAttributes(child_element, requester_iref)
1609
+ self.readARObjectAttributes(child_element, requester_iref)
1492
1610
  self.readRPortInCompositionInstanceRef(child_element, requester_iref)
1493
1611
  parent.setRequesterIRef(requester_iref)
1494
1612
 
@@ -1569,9 +1687,9 @@ class ARXMLParser(AbstractARXMLParser):
1569
1687
  def readDataTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1570
1688
  for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
1571
1689
  data_type_map = DataTypeMap()
1572
- self.readElementAttributes(child_element, data_type_map)
1573
- data_type_map.application_data_type_ref = self.getChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF")
1574
- data_type_map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1690
+ self.readARObjectAttributes(child_element, data_type_map)
1691
+ data_type_map.applicationDataTypeRef = self.getChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF")
1692
+ data_type_map.implementationDataTypeRef = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1575
1693
  parent.addDataTypeMap(data_type_map)
1576
1694
  # add the data type map to global namespace
1577
1695
  AUTOSAR.getInstance().addDataTypeMap(data_type_map)
@@ -1579,9 +1697,9 @@ class ARXMLParser(AbstractARXMLParser):
1579
1697
  def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1580
1698
  for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
1581
1699
  map = ModeRequestTypeMap()
1582
- self.readElementAttributes(child_element, map)
1583
- map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1584
- map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
1700
+ self.readARObjectAttributes(child_element, map)
1701
+ map.implementationDataTypeRef = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1702
+ map.modeGroupRef = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
1585
1703
  parent.addModeRequestTypeMap(map)
1586
1704
 
1587
1705
  def readDataTypeMappingSet(self, element: ET.Element, parent: ARPackage):
@@ -1592,7 +1710,7 @@ class ARXMLParser(AbstractARXMLParser):
1592
1710
  self.readModeRequestTypeMaps(element, mapping_set)
1593
1711
 
1594
1712
  def readSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1595
- for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
1713
+ for child_element in self.findall(element, "DATA-ELEMENTS/VARIABLE-DATA-PROTOTYPE"):
1596
1714
  short_name = self.getShortName(child_element)
1597
1715
  prototype = sr_interface.createDataElement(short_name)
1598
1716
  self.readIdentifiable(child_element, prototype)
@@ -1608,7 +1726,7 @@ class ARXMLParser(AbstractARXMLParser):
1608
1726
  sr_interface.addInvalidationPolicy(policy)
1609
1727
 
1610
1728
  def readInvalidationPolicys(self, element: ET.Element, parent: SenderReceiverInterface):
1611
- for child_element in element.findall("./xmlns:INVALIDATION-POLICYS/xmlns:INVALIDATION-POLICY", self.nsmap):
1729
+ for child_element in self.findall(element, "INVALIDATION-POLICYS/INVALIDATION-POLICY"):
1612
1730
  # short_name = self.getShortName(child_element)
1613
1731
  policy = parent.createInvalidationPolicy()
1614
1732
  self.readIdentifiable(child_element, policy)
@@ -1624,7 +1742,7 @@ class ARXMLParser(AbstractARXMLParser):
1624
1742
  self.readSenderReceiverInterfaceInvalidationPolicies(element, sr_interface)
1625
1743
 
1626
1744
  def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1627
- for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
1745
+ for child_element in self.findall(element, "ARGUMENTS/ARGUMENT-DATA-PROTOTYPE"):
1628
1746
  short_name = self.getShortName(child_element)
1629
1747
  prototype = ArgumentDataPrototype(property, short_name)
1630
1748
  self.readIdentifiable(child_element, prototype)
@@ -1635,13 +1753,13 @@ class ARXMLParser(AbstractARXMLParser):
1635
1753
  parent.addArgumentDataPrototype(prototype)
1636
1754
 
1637
1755
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
1638
- child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
1756
+ child_element = self.find(element, "POSSIBLE-ERROR-REFS")
1639
1757
  if child_element is not None:
1640
- for ref in self.getChildElementRefTypeList(child_element, "./POSSIBLE-ERROR-REF"):
1758
+ for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
1641
1759
  parent.addPossibleErrorRef(ref)
1642
1760
 
1643
1761
  def readOperations(self, element: ET.Element, parent: ClientServerInterface):
1644
- for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
1762
+ for child_element in self.findall(element, "OPERATIONS/CLIENT-SERVER-OPERATION"):
1645
1763
  short_name = self.getShortName(child_element)
1646
1764
  operation = parent.createOperation(short_name)
1647
1765
  self.readIdentifiable(child_element, operation)
@@ -1649,82 +1767,109 @@ class ARXMLParser(AbstractARXMLParser):
1649
1767
  self.readPossibleErrorRefs(child_element, operation)
1650
1768
 
1651
1769
  def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
1652
- for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
1770
+ for child_element in self.findall(element, "POSSIBLE-ERRORS/APPLICATION-ERROR"):
1653
1771
  short_name = self.getShortName(child_element)
1654
1772
  error = parent.createApplicationError(short_name)
1655
1773
  self.readIdentifiable(child_element, error) # some errors has its uuid
1656
1774
  error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
1657
1775
 
1658
1776
  def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
1777
+ self.readIdentifiable(element, port_interface)
1659
1778
  port_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1660
1779
  port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
1661
1780
 
1781
+ def readParameterInterfaceParameters(self, element: ET.Element, param_interface: ParameterInterface):
1782
+ for child_element in self.findall(element, "PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
1783
+ short_name = self.getShortName(child_element)
1784
+ prototype = param_interface.createParameter(short_name)
1785
+ self.readParameterDataPrototype(child_element, prototype)
1786
+
1787
+ def readParameterInterface(self, element: ET.Element, parent: ARPackage):
1788
+ short_name = self.getShortName(element)
1789
+ self.logger.debug("Read ParameterInterface %s" % short_name)
1790
+ param_interface = parent.createParameterInterface(short_name)
1791
+ self.readPortInterface(element, param_interface)
1792
+ self.readParameterInterfaceParameters(element, param_interface)
1793
+
1662
1794
  def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
1663
1795
  short_name = self.getShortName(element)
1664
1796
  cs_interface = parent.createClientServerInterface(short_name)
1665
- self.readIdentifiable(element, cs_interface)
1666
1797
  self.readPortInterface(element, cs_interface)
1667
1798
  self.readOperations(element, cs_interface)
1668
1799
  self.readPossibleErrors(element, cs_interface)
1669
1800
 
1670
1801
  def readCompuConst(self, element: ET.Element, parent: CompuScale):
1671
- child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
1802
+ child_element = self.find(element, "COMPU-CONST/VT")
1672
1803
  if (child_element is not None):
1673
1804
  self.logger.debug("readCompuConst VT: %s" % child_element.text)
1674
1805
  contents = CompuScaleConstantContents()
1675
- contents.compu_const = CompuConst()
1676
- contents.compu_const.compu_const_content_type = CompuConstTextContent()
1677
- contents.compu_const.compu_const_content_type.vt = ARLiteral()
1678
- contents.compu_const.compu_const_content_type.vt.setValue(child_element.text)
1806
+ contents.compuConst = CompuConst()
1807
+ contents.compuConst.compuConstContentType = CompuConstTextContent()
1808
+ contents.compuConst.compuConstContentType.vt = ARLiteral()
1809
+ contents.compuConst.compuConstContentType.vt.setValue(child_element.text)
1679
1810
  parent.compuScaleContents = contents
1680
1811
 
1681
1812
  def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
1682
- for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
1813
+ for child_element in self.findall(element, "%s/V" % key):
1683
1814
  self.logger.debug("readCompuNominatorDenominator - %s: %s" % (key, child_element.text))
1684
1815
  parent.add_v(child_element.text)
1685
1816
 
1686
1817
  def readCompuRationCoeffs(self, element: ET.Element, parent: CompuScale):
1687
- child_element = element.find("./xmlns:COMPU-RATIONAL-COEFFS", self.nsmap)
1818
+ child_element = self.find(element, "COMPU-RATIONAL-COEFFS")
1688
1819
  if (child_element is not None):
1689
1820
  self.logger.debug("readCompuRationCoeffs")
1690
1821
  contents = CompuScaleRationalFormula()
1691
- contents.compu_rational_coeffs = CompuRationalCoeffs()
1692
- contents.compu_rational_coeffs.compu_denominator = CompuNominatorDenominator()
1693
- contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
1694
- self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
1695
- self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
1822
+ contents.compuRationalCoeffs = CompuRationalCoeffs()
1823
+ contents.compuRationalCoeffs.compuDenominator = CompuNominatorDenominator()
1824
+ contents.compuRationalCoeffs.compuNumerator = CompuNominatorDenominator()
1825
+ self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compuRationalCoeffs.compuDenominator)
1826
+ self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compuRationalCoeffs.compuNumerator)
1696
1827
  parent.compuScaleContents = contents
1697
1828
 
1698
1829
  def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
1699
1830
  self.readCompuConst(element, parent)
1700
1831
  self.readCompuRationCoeffs(element, parent)
1701
1832
 
1702
- def readCompuScales(self, element: ET.Element, parent: CompuScales):
1703
- for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
1704
- compu_scale = CompuScale()
1705
- self.readElementAttributes(child_element, compu_scale)
1706
- compu_scale.short_label = self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")
1707
- compu_scale.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
1708
- compu_scale.lowerLimit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1709
- compu_scale.upperLimit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
1710
- self.readCompuScaleContents(child_element, compu_scale)
1711
- parent.addCompuScale(compu_scale)
1712
-
1713
- def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
1714
- child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
1833
+ def getCompuScales(self, element: ET.Element) -> CompuScales:
1834
+ compu_scales = None
1835
+ compu_scales_tag = self.find(element, "COMPU-SCALES")
1836
+ if compu_scales_tag is not None:
1837
+ compu_scales = CompuScales()
1838
+ for child_element in self.findall(compu_scales_tag, 'COMPU-SCALE'):
1839
+ compu_scale = CompuScale()
1840
+ self.readARObjectAttributes(child_element, compu_scale)
1841
+ compu_scale.setLowerLimit(self.getChildLimitElement(child_element, "LOWER-LIMIT")) \
1842
+ .setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
1843
+ .setSymbol(self.getChildElementOptionalLiteral(child_element, "SYMBOL")) \
1844
+ .setUpperLimit(self.getChildLimitElement(child_element, "UPPER-LIMIT"))
1845
+ self.readCompuScaleContents(child_element, compu_scale)
1846
+ compu_scales.addCompuScale(compu_scale)
1847
+ return compu_scales
1848
+
1849
+ def readCompuInternalToPhys(self, element: ET.Element, compu_method: CompuMethod):
1850
+ child_element = self.find(element, "COMPU-INTERNAL-TO-PHYS")
1715
1851
  if (child_element is not None):
1716
- parent.compu_internal_to_phys = Compu()
1717
- self.readElementAttributes(child_element, parent.compu_internal_to_phys)
1718
- parent.compu_internal_to_phys.compu_content = CompuScales()
1719
- self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
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")
1859
+ if (child_element is not None):
1860
+ compu = Compu()
1861
+ self.readARObjectAttributes(child_element, compu)
1862
+ compu.setCompuContent(self.getCompuScales(child_element))
1863
+ compu_method.setCompuPhysToInternal(compu)
1720
1864
 
1721
1865
  def readCompuMethod(self, element: ET.Element, parent: ARPackage):
1722
1866
  short_name = self.getShortName(element)
1723
1867
  self.logger.debug("readCompuMethods %s" % short_name)
1724
1868
  compu_method = parent.createCompuMethod(short_name)
1725
1869
  self.readIdentifiable(element, compu_method)
1726
- compu_method.unit_ref = self.getChildElementOptionalRefType(element, "UNIT-REF")
1870
+ compu_method.setUnitRef(self.getChildElementOptionalRefType(element, "UNIT-REF"))
1727
1871
  self.readCompuInternalToPhys(element, compu_method)
1872
+ self.readCompuPhysToInternal(element, compu_method)
1728
1873
 
1729
1874
  def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
1730
1875
  for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
@@ -1742,30 +1887,33 @@ class ARXMLParser(AbstractARXMLParser):
1742
1887
  swc_bsw_mapping.swcBehaviorRef = self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF")
1743
1888
 
1744
1889
  def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
1745
- self.readElementAttributes(element, value_spec)
1746
- value_spec.short_label = self.getChildElementOptionalLiteral(element, "SHORT-LABEL")
1890
+ self.readARObjectAttributes(element, value_spec)
1891
+ value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
1747
1892
  self.logger.debug("readValueSpecification")
1748
1893
 
1749
1894
  def getApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
1750
1895
  self.logger.debug("getApplicationValueSpecification")
1751
1896
  value_spec = ApplicationValueSpecification()
1752
1897
  self.readValueSpecification(element, value_spec)
1753
- value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
1754
- value_spec.sw_value_cont = self.getSwValueCont(element)
1898
+ value_spec.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
1899
+ .setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
1900
+ .setSwValueCont(self.getSwValueCont(element))
1755
1901
  return value_spec
1756
1902
 
1757
1903
  def getNumericalValueSpecification(self, element: ET.Element) -> NumericalValueSpecification:
1758
1904
  self.logger.debug("getNumericalValueSpecification")
1759
1905
  value_spec = NumericalValueSpecification()
1760
1906
  self.readValueSpecification(element, value_spec)
1761
- value_spec.value = self.getChildElementOptionalFloatValue(element, "VALUE")
1907
+ value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
1908
+ .setValue(self.getChildElementOptionalFloatValue(element, "VALUE"))
1762
1909
  return value_spec
1763
1910
 
1764
1911
  def getTextValueSpecification(self, element: ET.Element) -> TextValueSpecification:
1765
1912
  self.logger.debug("getTextValueSpecification")
1766
1913
  value_spec = TextValueSpecification()
1767
1914
  self.readValueSpecification(element, value_spec)
1768
- value_spec.value = self.getChildElementOptionalLiteral(element, "VALUE")
1915
+ value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
1916
+ .setValue(self.getChildElementOptionalLiteral(element, "VALUE"))
1769
1917
  return value_spec
1770
1918
 
1771
1919
  def getArrayValueSpecification(self, element: ET.Element) -> ArrayValueSpecification:
@@ -1799,7 +1947,7 @@ class ARXMLParser(AbstractARXMLParser):
1799
1947
  elif tag_name == "CONSTANT-REFERENCE":
1800
1948
  value_spec = self.getConstantReference(element)
1801
1949
  else:
1802
- raise NotImplementedError("Unsupported RecordValueSpecificationField %s" % tag_name)
1950
+ self.notImplemented("Unsupported RecordValueSpecificationField %s" % tag_name)
1803
1951
  return value_spec
1804
1952
 
1805
1953
  def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
@@ -1824,7 +1972,7 @@ class ARXMLParser(AbstractARXMLParser):
1824
1972
  child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
1825
1973
  if child_element is not None:
1826
1974
  constrs = InternalConstrs()
1827
- self.readElementAttributes(child_element, constrs)
1975
+ self.readARObjectAttributes(child_element, constrs)
1828
1976
  constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1829
1977
  constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
1830
1978
  parent.internalConstrs = constrs
@@ -1833,7 +1981,7 @@ class ARXMLParser(AbstractARXMLParser):
1833
1981
  child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
1834
1982
  if child_element is not None:
1835
1983
  constrs = PhysConstrs()
1836
- self.readElementAttributes(child_element, constrs)
1984
+ self.readARObjectAttributes(child_element, constrs)
1837
1985
  constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
1838
1986
  constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
1839
1987
  constrs.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
@@ -1843,7 +1991,7 @@ class ARXMLParser(AbstractARXMLParser):
1843
1991
  for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
1844
1992
  self.logger.debug("readDataConstrRule")
1845
1993
  rule = DataConstrRule()
1846
- self.readElementAttributes(child_element, rule)
1994
+ self.readARObjectAttributes(child_element, rule)
1847
1995
  rule.constrLevel = self.getChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL")
1848
1996
  self.readInternalConstrs(child_element, rule)
1849
1997
  self.readPhysConstrs(child_element, rule)
@@ -1959,6 +2107,7 @@ class ARXMLParser(AbstractARXMLParser):
1959
2107
 
1960
2108
  def readDataPrototype(self, element: ET.Element, prototype: DataPrototype):
1961
2109
  self.readIdentifiable(element, prototype)
2110
+ prototype.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
1962
2111
 
1963
2112
  def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
1964
2113
  self.readDataPrototype(element, prototype)
@@ -2003,6 +2152,7 @@ class ARXMLParser(AbstractARXMLParser):
2003
2152
  .setSwRecordLayoutGroupAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
2004
2153
  .setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
2005
2154
  .setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
2155
+ .setSwRecordLayoutGroupStep(self.getChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP")) \
2006
2156
  .setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO")) \
2007
2157
 
2008
2158
  group_content = SwRecordLayoutGroupContent()
@@ -2025,8 +2175,14 @@ class ARXMLParser(AbstractARXMLParser):
2025
2175
 
2026
2176
  def readSwAddrMethod(self, element: ET.Element, parent: ARPackage):
2027
2177
  short_name = self.getShortName(element)
2028
- self.logger.debug("readSwAddrMethod %s" % short_name)
2029
- layout = parent.createSwAddrMethod(short_name)
2178
+ self.logger.debug("read SwAddrMethod %s" % short_name)
2179
+ method = parent.createSwAddrMethod(short_name)
2180
+ self.readIdentifiable(element, method)
2181
+ method.setMemoryAllocationKeywordPolicy(self.getChildElementOptionalLiteral(element, "MEMORY-ALLOCATION-KEYWORD-POLICY"))
2182
+ for option in self.getChildElementLiteralValueList(element, "OPTIONS/OPTION"):
2183
+ method.addOption(option)
2184
+ method.setSectionInitializationPolicy(self.getChildElementOptionalLiteral(element, "SECTION-INITIALIZATION-POLICY")) \
2185
+ .setSectionType(self.getChildElementOptionalLiteral(element, "SECTION-TYPE"))
2030
2186
 
2031
2187
  def readTriggerInterface(self, element: ET.Element, parent: ARPackage):
2032
2188
  short_name = self.getShortName(element)
@@ -2034,9 +2190,10 @@ class ARXMLParser(AbstractARXMLParser):
2034
2190
  trigger_if = parent.createTriggerInterface(short_name)
2035
2191
 
2036
2192
  def readModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
2037
- for child_element in element.findall("./xmlns:MODE-DECLARATIONS/xmlns:MODE-DECLARATION", self.nsmap):
2193
+ for child_element in self.findall(element, "MODE-DECLARATIONS/MODE-DECLARATION"):
2038
2194
  short_name = self.getShortName(child_element)
2039
2195
  declaration = parent.createModeDeclaration(short_name)
2196
+ self.readARObjectAttributes(child_element, declaration)
2040
2197
  declaration.setValue(self.getChildElementOptionalNumericalValue(child_element, "VALUE"))
2041
2198
 
2042
2199
  def readModeDeclarationGroup(self, element: ET.Element, parent: ARPackage):
@@ -2157,7 +2314,7 @@ class ARXMLParser(AbstractARXMLParser):
2157
2314
  triggering = channel.createLinFrameTriggering(self.getShortName(child_element))
2158
2315
  self.readLinFrameTriggering(child_element, triggering)
2159
2316
  else:
2160
- raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2317
+ self.notImplemented("Unsupported Frame Triggering <%s>" % tag_name)
2161
2318
 
2162
2319
  for child_element in self.findall(element, "I-SIGNAL-TRIGGERINGS/*"):
2163
2320
  tag_name = self.getTagName(child_element)
@@ -2165,7 +2322,7 @@ class ARXMLParser(AbstractARXMLParser):
2165
2322
  triggering = channel.createISignalTriggering(self.getShortName(child_element))
2166
2323
  self.readISignalTriggering(child_element, triggering)
2167
2324
  else:
2168
- raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2325
+ self.notImplemented("Unsupported Frame Triggering <%s>" % tag_name)
2169
2326
 
2170
2327
  for child_element in self.findall(element, "PDU-TRIGGERINGS/*"):
2171
2328
  tag_name = self.getTagName(child_element)
@@ -2173,7 +2330,7 @@ class ARXMLParser(AbstractARXMLParser):
2173
2330
  triggering = channel.createPduTriggering(self.getShortName(child_element))
2174
2331
  self.readPduTriggering(child_element, triggering)
2175
2332
  else:
2176
- raise NotImplementedError("Unsupported Frame Triggering <%s>" % tag_name)
2333
+ self.notImplemented("Unsupported Frame Triggering <%s>" % tag_name)
2177
2334
 
2178
2335
  def readCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2179
2336
  self.readIdentifiable(element, channel)
@@ -2193,7 +2350,7 @@ class ARXMLParser(AbstractARXMLParser):
2193
2350
  channel = cluster.createLinPhysicalChannel(self.getShortName(child_element))
2194
2351
  self.readLinPhysicalChannel(child_element, channel)
2195
2352
  else:
2196
- raise NotImplementedError("Unsupported Physical Channel <%s>" % tag_name)
2353
+ self.notImplemented("Unsupported Physical Channel <%s>" % tag_name)
2197
2354
 
2198
2355
 
2199
2356
  def readCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
@@ -2504,11 +2661,11 @@ class ARXMLParser(AbstractARXMLParser):
2504
2661
  self.logger.debug("ISignal %s" % short_name)
2505
2662
  signal = parent.createISignal(short_name)
2506
2663
  self.readIdentifiable(element, signal)
2507
- signal.dataTypePolicy = self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")
2508
- signal.initValue = self.getInitValue(element)
2509
- signal.length = self.getChildElementOptionalNumericalValue(element, "LENGTH")
2510
- signal.networkRepresentationProps = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")
2511
- signal.systemSignalRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF")
2664
+ signal.setDataTypePolicy(self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")) \
2665
+ .setInitValue(self.getInitValue(element)) \
2666
+ .setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
2667
+ .setNetworkRepresentationProps(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")) \
2668
+ .setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
2512
2669
 
2513
2670
  def readEcucValueCollectionEcucValues(self, element: ET.Element, parent: EcucValueCollection):
2514
2671
  for child_element in self.findall(element, "ECUC-VALUES/ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL"):
@@ -2550,7 +2707,7 @@ class ARXMLParser(AbstractARXMLParser):
2550
2707
  elif tag_name == "ECUC-NUMERICAL-PARAM-VALUE":
2551
2708
  container_value.addParameterValue(self.getEcucNumericalParamValue(child_element))
2552
2709
  else:
2553
- raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2710
+ self.notImplemented("Unsupported EcucParameterValue <%s>" % tag_name)
2554
2711
 
2555
2712
  def readEcucAbstractReferenceValue(self, element: ET.Element, value: EcucAbstractReferenceValue):
2556
2713
  value.setDefinitionRef(self.getChildElementOptionalRefType(element, "DEFINITION-REF"))
@@ -2587,7 +2744,7 @@ class ARXMLParser(AbstractARXMLParser):
2587
2744
  elif tag_name == "ECUC-INSTANCE-REFERENCE-VALUE":
2588
2745
  container_value.addReferenceValue(self.getEcucInstanceReferenceValue(child_element))
2589
2746
  else:
2590
- raise NotImplementedError("Unsupported EcucParameterValue <%s>" % tag_name)
2747
+ self.notImplemented("Unsupported EcucParameterValue <%s>" % tag_name)
2591
2748
 
2592
2749
  def readEcucContainerValue(self, element: ET.Element, container_value: EcucContainerValue):
2593
2750
  self.readIdentifiable(element, container_value)
@@ -2608,7 +2765,7 @@ class ARXMLParser(AbstractARXMLParser):
2608
2765
  if tag_name == "ECUC-CONTAINER-VALUE":
2609
2766
  self.readEcucContainerValueEcucContainerValue(child_element, parent)
2610
2767
  else:
2611
- raise NotImplementedError("Unsupported Sub Container %s" % tag_name)
2768
+ self.notImplemented("Unsupported Sub Container %s" % tag_name)
2612
2769
 
2613
2770
  def readEcucModuleConfigurationValuesEcucContainerValue(self, element: ET.Element, parent: EcucModuleConfigurationValues):
2614
2771
  short_name = self.getShortName(element)
@@ -2622,7 +2779,7 @@ class ARXMLParser(AbstractARXMLParser):
2622
2779
  if tag_name == "ECUC-CONTAINER-VALUE":
2623
2780
  self.readEcucModuleConfigurationValuesEcucContainerValue(child_element, values)
2624
2781
  else:
2625
- raise NotImplementedError("Unsupported Container %s" % tag_name)
2782
+ self.notImplemented("Unsupported Container %s" % tag_name)
2626
2783
 
2627
2784
  def readEcucModuleConfigurationValues(self, element: ET.Element, parent: ARPackage):
2628
2785
  short_name = self.getShortName(element)
@@ -2636,11 +2793,12 @@ class ARXMLParser(AbstractARXMLParser):
2636
2793
 
2637
2794
  def readPhysicalDimensions(self, element: ET.Element, parent: ARPackage):
2638
2795
  short_name = self.getShortName(element)
2639
- self.logger.debug("readPhysicalDimensions %s" % short_name)
2796
+ self.logger.debug("read PhysicalDimensions %s" % short_name)
2640
2797
  dimension = parent.createPhysicalDimension(short_name)
2641
2798
  self.readIdentifiable(element, dimension)
2642
2799
  dimension.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
2643
2800
  .setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
2801
+ .setTimeExp(self.getChildElementOptionalNumericalValue(element, "TIME-EXP"))
2644
2802
 
2645
2803
  '''
2646
2804
  def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
@@ -2807,7 +2965,7 @@ class ARXMLParser(AbstractARXMLParser):
2807
2965
  elif tag_name == "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING":
2808
2966
  mapping.addDataMapping(self.getSenderReceiverToSignalGroupMapping(child_element))
2809
2967
  else:
2810
- raise NotImplementedError("Unsupported Data Mapping %s" % tag_name)
2968
+ self.notImplemented("Unsupported Data Mapping %s" % tag_name)
2811
2969
 
2812
2970
  def readSwcToEcuMapping(self, element: ET.Element, mapping: SwcToEcuMapping):
2813
2971
  self.logger.debug("SwcToEcuMapping %s" % mapping.getShortName())
@@ -2822,7 +2980,7 @@ class ARXMLParser(AbstractARXMLParser):
2822
2980
  if tag_name == "SWC-TO-ECU-MAPPING":
2823
2981
  self.readSwcToEcuMapping(child_element, mapping.createSwcToEcuMapping(self.getShortName(child_element)))
2824
2982
  else:
2825
- raise NotImplementedError("Unsupported Sw Mapping %s" % tag_name)
2983
+ self.notImplemented("Unsupported Sw Mapping %s" % tag_name)
2826
2984
 
2827
2985
  def readSystemMapping(self, element: ET.Element, parent: System):
2828
2986
  short_name = self.getShortName(element)
@@ -2838,7 +2996,7 @@ class ARXMLParser(AbstractARXMLParser):
2838
2996
  if tag_name == "SYSTEM-MAPPING":
2839
2997
  self.readSystemMapping(child_element, system)
2840
2998
  else:
2841
- raise NotImplementedError("Unsupported Mapping %s" % tag_name)
2999
+ self.notImplemented("Unsupported Mapping %s" % tag_name)
2842
3000
 
2843
3001
  def readRootSwCompositionPrototype(self, element: ET.Element, system: System):
2844
3002
  child_element = self.find(element, "ROOT-SOFTWARE-COMPOSITIONS/ROOT-SW-COMPOSITION-PROTOTYPE")
@@ -2862,19 +3020,6 @@ class ARXMLParser(AbstractARXMLParser):
2862
3020
  self.readRootSwCompositionPrototype(element, system)
2863
3021
  system.setSystemVersion(self.getChildElementOptionalRevisionLabelString(element, "SYSTEM-VERSION"))
2864
3022
 
2865
- def readParameterInterfaceParameters(self, element: ET.Element, parent: ParameterInterface):
2866
- for child_element in self.findall(element, "PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
2867
- short_name = self.getShortName(child_element)
2868
- prototype = parent.createParameter(short_name)
2869
- self.readParameterDataPrototype(child_element, prototype)
2870
-
2871
- def readParameterInterface(self, element: ET.Element, parent: ARPackage):
2872
- short_name = self.getShortName(element)
2873
- self.logger.debug("Read ParameterInterface %s" % short_name)
2874
- pi_interface = parent.createParameterInterface(short_name)
2875
- self.readIdentifiable(element, pi_interface)
2876
- self.readParameterInterfaceParameters(element, pi_interface)
2877
-
2878
3023
  def readGenericEthernetFrame(self, element: ET.Element, parent: ARPackage):
2879
3024
  short_name = self.getShortName(element)
2880
3025
  self.logger.debug("Read EthernetFrame %s" % short_name)