armodel 1.4.3__py3-none-any.whl → 1.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. armodel/cli/arxml_dump_cli.py +1 -1
  2. armodel/models/ar_package.py +131 -23
  3. armodel/models/ar_ref.py +28 -5
  4. armodel/models/bsw_module_template.py +29 -14
  5. armodel/models/common_structure.py +38 -23
  6. armodel/models/fibex/__init__.py +0 -0
  7. armodel/models/fibex/can_communication.py +6 -0
  8. armodel/models/fibex/fibex_4_multiplatform.py +145 -0
  9. armodel/models/fibex/fibex_core.py +341 -0
  10. armodel/models/fibex/lin_communication.py +17 -0
  11. armodel/models/fibex/lin_topology.py +7 -0
  12. armodel/models/general_structure.py +19 -3
  13. armodel/models/implementation.py +4 -5
  14. armodel/models/internal_behavior.py +63 -0
  15. armodel/models/mode_declaration.py +8 -0
  16. armodel/models/port_prototype.py +20 -2
  17. armodel/models/rpt_scenario.py +20 -0
  18. armodel/models/sw_component.py +99 -36
  19. armodel/models/system_template/__init__.py +0 -0
  20. armodel/models/system_template/network_management.py +7 -0
  21. armodel/models/system_template/transport_protocols.py +7 -0
  22. armodel/models/timing.py +91 -0
  23. armodel/parser/abstract_arxml_parser.py +1 -1
  24. armodel/parser/arxml_parser.py +329 -72
  25. armodel/tests/test_armodel/models/test_data_prototype.py +1 -1
  26. armodel/tests/test_armodel/models/test_datatype.py +7 -7
  27. armodel/tests/test_armodel/models/test_port_interface.py +5 -5
  28. armodel/tests/test_armodel/parser/test_parse_bswmd.py +13 -5
  29. armodel/tests/test_armodel/parser/test_sw_components.py +4 -4
  30. armodel/writer/arxml_writer.py +250 -21
  31. {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/METADATA +25 -1
  32. {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/RECORD +36 -23
  33. {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/LICENSE +0 -0
  34. {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/WHEEL +0 -0
  35. {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/entry_points.txt +0 -0
  36. {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,14 @@
1
+ from typing import List
1
2
  import xml.etree.ElementTree as ET
2
3
 
3
- from armodel.models.bsw_module_template import BswModeSenderPolicy
4
-
5
- from .abstract_arxml_parser import AbstractARXMLParser
4
+ from armodel.models.fibex.fibex_4_multiplatform import FrameMapping, IPduMapping, ISignalMapping
6
5
 
6
+ from ..models.fibex.fibex_core import Frame
7
+ from ..models.internal_behavior import IncludedDataTypeSet
8
+ from ..models.timing import ExecutionOrderConstraint, TimingExtension
9
+ from ..models.bsw_module_template import BswModeSenderPolicy
7
10
  from ..models.port_interface import ModeSwitchInterface, PortInterface
8
- from ..models.common_structure import MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
11
+ from ..models.common_structure import IncludedModeDeclarationGroupSet, MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
9
12
  from ..models.implementation import BswImplementation, EngineeringObject
10
13
  from ..models.general_structure import MultilanguageReferrable
11
14
  from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
@@ -19,10 +22,10 @@ from ..models.service_mapping import RoleBasedPortAssignment
19
22
  from ..models.ar_package import AUTOSAR, ARPackage
20
23
  from ..models.ar_object import ARLiteral
21
24
  from ..models.service_needs import RoleBasedDataAssignment
22
- from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
23
- from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
24
- from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype
25
- from ..models.port_prototype import QueuedReceiverComSpec
25
+ from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, RModeGroupInAtomicSWCInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
26
+ from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, ModeAccessPoint, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
27
+ from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype
28
+ from ..models.port_prototype import ModeSwitchReceiverComSpec, QueuedReceiverComSpec
26
29
  from ..models.annotation import Annotation, GeneralAnnotation
27
30
  from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
28
31
 
@@ -47,6 +50,8 @@ from ..models import RecordValueSpecification
47
50
  from ..models import ApplicationRecordDataType
48
51
  from ..models import SwValueCont, SwValues
49
52
 
53
+ from .abstract_arxml_parser import AbstractARXMLParser
54
+
50
55
  class ARXMLParser(AbstractARXMLParser):
51
56
  def __init__(self, options=None) -> None:
52
57
  super().__init__(options)
@@ -58,27 +63,33 @@ class ARXMLParser(AbstractARXMLParser):
58
63
  return child_element.text
59
64
 
60
65
  def readSd(self, element: ET.Element, sdg: Sdg):
61
- for child_element in element.findall("./xmlns:SD", self.nsmap):
66
+ for child_element in self.findall(element, "./SD"):
62
67
  sd = Sd()
63
- sd.gid = child_element.attrib['GID']
68
+ if 'GID' in child_element.attrib:
69
+ sd.gid = child_element.attrib['GID']
64
70
  sd.value = child_element.text
65
-
66
71
  sdg.addSd(sd)
72
+
73
+ def getSdg(self, element: ET.Element) -> Sdg:
74
+ sdg = Sdg()
75
+ if 'GID' in element.attrib:
76
+ sdg.gid = element.attrib["GID"]
77
+ self.readSd(element, sdg)
78
+ child_element = self.find(element, "./SDG")
79
+ if child_element is not None:
80
+ sdg.sdg_contents_type = self.getSdg(child_element)
81
+ return sdg
67
82
 
68
- def readSdg(self, element: ET.Element, admin_data: AdminData):
69
- for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
70
- sdg = Sdg()
71
- if 'GID' in child_element.attrib:
72
- sdg.gid = child_element.attrib["GID"]
73
- self.readSd(child_element, sdg)
74
- admin_data.addSdg(sdg)
83
+ def readSdgs(self, element: ET.Element, admin_data: AdminData):
84
+ for child_element in self.findall(element, "./SDGS/SDG"):
85
+ admin_data.addSdg(self.getSdg(child_element))
75
86
 
76
87
  def readAdminData(self, element: ET.Element, identifiable: Identifiable):
77
- child_element = element.find("./xmlns:ADMIN-DATA", self.nsmap)
88
+ child_element = self.find(element, "./ADMIN-DATA")
78
89
  if child_element is not None:
79
90
  self.logger.debug("readAdminData")
80
91
  admin_data = AdminData()
81
- self.readSdg(child_element, admin_data)
92
+ self.readSdgs(child_element, admin_data)
82
93
  identifiable.admin_data = admin_data
83
94
 
84
95
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
@@ -92,7 +103,7 @@ class ARXMLParser(AbstractARXMLParser):
92
103
  self.readAdminData(element, identifiable)
93
104
 
94
105
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
95
- for child_element in element.findall("./xmlns:L-4", self.nsmap):
106
+ for child_element in self.findall(element, "./L-4"):
96
107
  l4 = LLongName()
97
108
  self.readElementAttributes(child_element, l4)
98
109
  l4.value = child_element.text
@@ -102,7 +113,7 @@ class ARXMLParser(AbstractARXMLParser):
102
113
 
103
114
  def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
104
115
  long_name = None
105
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
116
+ child_element = self.find(element, "./%s" % key)
106
117
  if child_element is not None:
107
118
  long_name = MultilanguageLongName()
108
119
  self.readElementAttributes(child_element, long_name)
@@ -110,7 +121,7 @@ class ARXMLParser(AbstractARXMLParser):
110
121
  return long_name
111
122
 
112
123
  def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
113
- for child_element in element.findall("./xmlns:L-2", self.nsmap):
124
+ for child_element in self.findall(element, "./L-2"):
114
125
  l2 = LOverviewParagraph()
115
126
  self.readElementAttributes(child_element, l2)
116
127
  l2.value = child_element.text
@@ -131,6 +142,7 @@ class ARXMLParser(AbstractARXMLParser):
131
142
  child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
132
143
  if (child_element is not None):
133
144
  autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
145
+ self.readElementAttributes(child_element, autosar_variable_iref)
134
146
  autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
135
147
  if autosar_variable_iref.port_prototype_ref is None:
136
148
  self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
@@ -205,7 +217,7 @@ class ARXMLParser(AbstractARXMLParser):
205
217
  def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
206
218
  child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
207
219
  if child_element is not None:
208
- for ref in self.getChildElementRefTypeList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
220
+ for ref in self.getChildElementRefTypeList(child_element, "./CAN-ENTER-EXCLUSIVE-AREA-REF"):
209
221
  entity.addCanEnterExclusiveAreaRef(ref)
210
222
 
211
223
  def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
@@ -298,11 +310,18 @@ class ARXMLParser(AbstractARXMLParser):
298
310
  def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
299
311
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
300
312
  if child_element is not None:
301
- for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
313
+ for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
302
314
  behavior.addDataTypeMappingRef(ref)
303
315
 
316
+ def readInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
317
+ for child_element in element.findall("./xmlns:CONSTANT-MEMORYS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
318
+ short_name = self.getShortName(child_element)
319
+ prototype = behavior.createConstantMemory(short_name)
320
+ self.readParameterDataPrototype(child_element, prototype)
321
+
304
322
  def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
305
- self.readIdentifiable(element, behavior)
323
+ self.readIdentifiable(element, behavior)
324
+ self.readInternalBehaviorConstantMemories(element, behavior)
306
325
  for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
307
326
  short_name = self.getShortName(child_element)
308
327
  behavior.createExclusiveArea(short_name)
@@ -382,8 +401,18 @@ class ARXMLParser(AbstractARXMLParser):
382
401
  else:
383
402
  self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
384
403
 
404
+ def getIncludedDataTypeSets(self, element: ET.Element) -> List[IncludedDataTypeSet]:
405
+ include_data_type_sets = []
406
+ for child_element in self.findall(element, "./INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
407
+ include_data_type_set = IncludedDataTypeSet()
408
+ self.readElementAttributes(child_element, include_data_type_set)
409
+ for ref_type in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-REFS/DATA-TYPE-REF"):
410
+ include_data_type_set.addDataTypeRef(ref_type)
411
+ include_data_type_sets.append(include_data_type_set)
412
+ return include_data_type_sets
413
+
385
414
  def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
386
- for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
415
+ for child_element in self.findall(element, "./INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
387
416
  short_name = self.getShortName(child_element)
388
417
  behavior = parent.createSwcInternalBehavior(short_name)
389
418
  self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
@@ -396,12 +425,23 @@ class ARXMLParser(AbstractARXMLParser):
396
425
  self.readSwcInternalBehaviorEvents(child_element, behavior)
397
426
  self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
398
427
  self.readExplicitInterRunnableVariables(child_element, behavior)
428
+ for data_type_set in self.getIncludedDataTypeSets(child_element):
429
+ behavior.addIncludedDataTypeSet(data_type_set)
399
430
  behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
400
431
  self.readPerInstanceMemories(child_element, behavior)
401
- self.readPerInstanceParameter(child_element, behavior)
432
+ self.readPerInstanceParameters(child_element, behavior)
402
433
  self.readPortAPIOptions(child_element, behavior)
403
434
  behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
404
435
 
436
+ def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
437
+ group_sets = []
438
+ for child_element in self.findall(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS/INCLUDED-MODE-DECLARATION-GROUP-SET"):
439
+ group_set = IncludedModeDeclarationGroupSet()
440
+ for ref_type in self.getChildElementRefTypeList(child_element, "./MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
441
+ group_set.addModeDeclarationGroupRef(ref_type)
442
+ group_sets.append(group_set)
443
+ return group_sets
444
+
405
445
  def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
406
446
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
407
447
  short_name = self.getShortName(child_element)
@@ -417,6 +457,8 @@ class ARXMLParser(AbstractARXMLParser):
417
457
  self.readBswDataReceivedEvent(child_element, behavior)
418
458
  self.readBswInternalTriggerOccurredEvent(child_element, behavior)
419
459
  self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
460
+ for group_set in self.getIncludedModeDeclarationGroupSets(child_element):
461
+ behavior.addIncludedModeDeclarationGroupSet(group_set)
420
462
 
421
463
  def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
422
464
  short_name = self.getShortName(element)
@@ -510,7 +552,7 @@ class ARXMLParser(AbstractARXMLParser):
510
552
  def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
511
553
  child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
512
554
  if child_element is not None:
513
- for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
555
+ for ref in self.getChildElementRefTypeList(child_element, "./VENDOR-SPECIFIC-MODULE-DEF-REF"):
514
556
  parent.addVendorSpecificModuleDefRef(ref)
515
557
 
516
558
  def readBswImplementation(self, element: ET.Element, parent: ARPackage):
@@ -574,7 +616,7 @@ class ARXMLParser(AbstractARXMLParser):
574
616
  parent.operation_iref = operation_iref
575
617
 
576
618
  def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
577
- child_element = element.find("./xmlns:DATA-IREF", self.nsmap)
619
+ child_element = self.find(element, "DATA-IREF")
578
620
  if (child_element is not None):
579
621
  data_iref = RVariableInAtomicSwcInstanceRef()
580
622
  data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
@@ -615,21 +657,45 @@ class ARXMLParser(AbstractARXMLParser):
615
657
  else:
616
658
  self._raiseError("Unsupported server call point type <%s>" % tag_name)
617
659
 
618
- def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
619
- for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
660
+ def readInternalTriggeringPoints(self, element: ET.Element, parent: RunnableEntity):
661
+ for child_element in self.findall(element, "INTERNAL-TRIGGERING-POINTS/INTERNAL-TRIGGERING-POINT"):
620
662
  short_name = self.getShortName(child_element)
621
663
  point = parent.createInternalTriggeringPoint(short_name)
622
664
  point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
623
665
 
666
+ def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
667
+ iref = RModeInAtomicSwcInstanceRef()
668
+ iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
669
+ iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
670
+ iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
671
+ iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
672
+ return iref
673
+
674
+ def getRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> RModeGroupInAtomicSWCInstanceRef:
675
+ child_element = self.find(element, "MODE-GROUP-IREF/R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
676
+ iref = None
677
+ if child_element is not None:
678
+ iref = RModeGroupInAtomicSWCInstanceRef()
679
+ iref.contextRPort = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
680
+ iref.targetModeGroup = self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF")
681
+ return iref
682
+
683
+ def readModeAccessPoints(self, element: ET.Element, parent: RunnableEntity):
684
+ for child_element in self.findall(element, "MODE-ACCESS-POINTS/MODE-ACCESS-POINT"):
685
+ point = ModeAccessPoint()
686
+ point.modeGroupIRef = self.getRModeGroupInAtomicSWCInstanceRef(child_element)
687
+ parent.addModeAccessPoint(point)
688
+
624
689
  def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
625
- for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
690
+ for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
626
691
  short_name = self.getShortName(child_element)
627
692
  entity = parent.createRunnableEntity(short_name)
628
693
  self.logger.debug("readRunnableEntities %s" % short_name)
629
694
 
630
695
  self.readExecutableEntity(child_element, entity)
631
- entity.can_be_invoked_concurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
696
+ entity.canBeInvokedConcurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
632
697
  entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
698
+ entity.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDR-METHOD-REF")
633
699
 
634
700
  self.readDataReceivePointByArguments(child_element, entity)
635
701
  self.readDataReceivePointByValues(child_element, entity)
@@ -640,7 +706,8 @@ class ARXMLParser(AbstractARXMLParser):
640
706
  self.readWrittenLocalVariables(child_element, entity)
641
707
  self.readReadLocalVariables(child_element, entity)
642
708
  self.readInternalBehaviorServerCallPoint(child_element, entity)
643
- self.readInternalTriggeringPoint(child_element, entity)
709
+ self.readInternalTriggeringPoints(child_element, entity)
710
+ self.readModeAccessPoints(child_element, entity)
644
711
 
645
712
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
646
713
  iref = RModeInAtomicSwcInstanceRef()
@@ -691,16 +758,16 @@ class ARXMLParser(AbstractARXMLParser):
691
758
  def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
692
759
  prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
693
760
 
694
- def readParameterDataPrototype(self, element: ET.Element, behavior: SwcInternalBehavior):
695
- short_name = self.getShortName(element)
696
- prototype = behavior.createParameterDataPrototype(short_name)
761
+ def readParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
697
762
  self.readIdentifiable(element, prototype)
698
763
  self.readAutosarDataPrototype(element, prototype)
699
764
  prototype.init_value = self.getInitValue(element)
700
765
 
701
- def readPerInstanceParameter(self, element: ET.Element, behavior: SwcInternalBehavior):
766
+ def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
702
767
  for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
703
- self.readParameterDataPrototype(child_element, behavior)
768
+ short_name = self.getShortName(child_element)
769
+ prototype = behavior.createPerInstanceParameter(short_name)
770
+ self.readParameterDataPrototype(child_element, prototype)
704
771
 
705
772
  def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
706
773
  argument_value = PortDefinedArgumentValue()
@@ -720,12 +787,6 @@ class ARXMLParser(AbstractARXMLParser):
720
787
  option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
721
788
  behavior.addPortAPIOption(option)
722
789
 
723
- def readInitEvents(self, element, parent: SwcInternalBehavior):
724
- for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
725
- short_name = self.getShortName(child_element)
726
- event = parent.createInitEvent(short_name)
727
- self.readRTEEvent(child_element, event)
728
-
729
790
  def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
730
791
  short_name = self.getShortName(element)
731
792
  event = parent.createTimingEvent(short_name)
@@ -752,6 +813,11 @@ class ARXMLParser(AbstractARXMLParser):
752
813
  self.readRTEEvent(element, event)
753
814
  event.event_source_ref = self.getChildElementRefType(parent.short_name, element, "EVENT-SOURCE-REF")
754
815
 
816
+ def readInitEvent(self, element, parent: SwcInternalBehavior):
817
+ short_name = self.getShortName(element)
818
+ event = parent.createInitEvent(short_name)
819
+ self.readRTEEvent(element, event)
820
+
755
821
  def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
756
822
  for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
757
823
  tag_name = self.getTagName(child_element.tag)
@@ -765,6 +831,8 @@ class ARXMLParser(AbstractARXMLParser):
765
831
  self.readDataReceivedEvent(child_element, parent)
766
832
  elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
767
833
  self.readInternalTriggerOccurredEvent(child_element, parent)
834
+ elif tag_name == "INIT-EVENT":
835
+ self.readInitEvent(child_element, parent)
768
836
  else:
769
837
  self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
770
838
 
@@ -986,7 +1054,7 @@ class ARXMLParser(AbstractARXMLParser):
986
1054
  def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
987
1055
  com_spec = ClientComSpec()
988
1056
  self.readElementAttributes(element, com_spec)
989
- com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
1057
+ com_spec.operationRef = self.getChildElementOptionalRefType(element, "OPERATION-REF")
990
1058
  return com_spec
991
1059
 
992
1060
  def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
@@ -995,6 +1063,12 @@ class ARXMLParser(AbstractARXMLParser):
995
1063
  self.readReceiverComSpec(element, com_spec)
996
1064
  com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
997
1065
  return com_spec
1066
+
1067
+ def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
1068
+ com_spec = ModeSwitchReceiverComSpec()
1069
+ self.readElementAttributes(element, com_spec)
1070
+ com_spec.modeGroupRef = self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")
1071
+ return com_spec
998
1072
 
999
1073
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1000
1074
  com_spec = NonqueuedReceiverComSpec()
@@ -1016,18 +1090,29 @@ class ARXMLParser(AbstractARXMLParser):
1016
1090
  parent.addRequiredComSpec(self.getClientComSpec(child_element))
1017
1091
  elif tag_name == "QUEUED-RECEIVER-COM-SPEC":
1018
1092
  parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
1093
+ elif tag_name == "MODE-SWITCH-RECEIVER-COM-SPEC":
1094
+ parent.addRequiredComSpec(self.getModeSwitchReceiverComSpec(child_element))
1019
1095
  else:
1020
1096
  self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1021
1097
 
1022
1098
  def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1023
- for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
1024
- short_name = self.getShortName(child_element)
1025
- self.logger.debug("readRPortPrototype %s" % short_name)
1026
- prototype = parent.createRPortPrototype(short_name)
1027
- self.readIdentifiable(child_element, prototype)
1028
- prototype.required_interface_tref = self.getChildElementOptionalRefType(child_element, "REQUIRED-INTERFACE-TREF")
1099
+ short_name = self.getShortName(element)
1100
+ self.logger.debug("readRPortPrototype %s" % short_name)
1101
+ prototype = parent.createRPortPrototype(short_name)
1102
+ self.readIdentifiable(element, prototype)
1103
+ prototype.required_interface_tref = self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF")
1104
+
1105
+ self.readRequiredComSpec(element, prototype)
1029
1106
 
1030
- self.readRequiredComSpec(child_element, prototype)
1107
+ def readAtomicSwComponentTypePorts(self, element: ET.Element, sw_component: AtomicSwComponentType):
1108
+ for child_element in element.findall("./xmlns:PORTS/*", self.nsmap):
1109
+ tag_name = self.getTagName(child_element)
1110
+ if tag_name == "P-PORT-PROTOTYPE":
1111
+ self.readPPortPrototype(child_element, sw_component)
1112
+ elif tag_name == "R-PORT-PROTOTYPE":
1113
+ self.readRPortPrototype(child_element, sw_component)
1114
+ else:
1115
+ self._raiseError("Unsupported Port Prototype <%s>" % tag_name)
1031
1116
 
1032
1117
  def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
1033
1118
  child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
@@ -1069,17 +1154,16 @@ class ARXMLParser(AbstractARXMLParser):
1069
1154
  elif tag_name == "SERVER-COM-SPEC":
1070
1155
  parent.addProvidedComSpec(self.getServerComSpec(child_element))
1071
1156
  else:
1072
- raise NotImplementedError("Unsupported RequiredComSpec <%s>" % tag_name)
1157
+ self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
1073
1158
 
1074
1159
  def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1075
- for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
1076
- short_name = self.getShortName(child_element)
1077
- self.logger.debug("readPPortPrototype %s" % short_name)
1078
- prototype = parent.createPPortPrototype(short_name)
1079
- self.readIdentifiable(child_element, prototype)
1080
- prototype.provided_interface_tref = self.getChildElementOptionalRefType(child_element, "PROVIDED-INTERFACE-TREF")
1160
+ short_name = self.getShortName(element)
1161
+ self.logger.debug("readPPortPrototype %s" % short_name)
1162
+ prototype = parent.createPPortPrototype(short_name)
1163
+ self.readIdentifiable(element, prototype)
1164
+ prototype.provided_interface_tref = self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF")
1081
1165
 
1082
- self.readProvidedComSpec(child_element, prototype)
1166
+ self.readProvidedComSpec(element, prototype)
1083
1167
 
1084
1168
  def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
1085
1169
  for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
@@ -1110,8 +1194,7 @@ class ARXMLParser(AbstractARXMLParser):
1110
1194
 
1111
1195
  def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
1112
1196
  self.readIdentifiable(element, parent)
1113
- self.readRPortPrototype(element, parent)
1114
- self.readPPortPrototype(element, parent)
1197
+ self.readAtomicSwComponentTypePorts(element, parent)
1115
1198
  self.readSwComponentTypePortGroups(element, parent)
1116
1199
 
1117
1200
  def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
@@ -1239,7 +1322,7 @@ class ARXMLParser(AbstractARXMLParser):
1239
1322
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
1240
1323
  self.logger.debug("readDataTypeMappingSet")
1241
1324
  if child_element is not None:
1242
- for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
1325
+ for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
1243
1326
  parent.addDataTypeMapping(ref)
1244
1327
 
1245
1328
  def readCompositionSwComponentType(self, element: ET.Element, parent: ARPackage):
@@ -1269,6 +1352,7 @@ class ARXMLParser(AbstractARXMLParser):
1269
1352
  def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1270
1353
  for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
1271
1354
  map = ModeRequestTypeMap()
1355
+ self.readElementAttributes(child_element, map)
1272
1356
  map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
1273
1357
  map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
1274
1358
  parent.addModeRequestTypeMap(map)
@@ -1300,6 +1384,8 @@ class ARXMLParser(AbstractARXMLParser):
1300
1384
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
1301
1385
  short_name = self.getShortName(child_element)
1302
1386
  prototype = ArgumentDataPrototype(property, short_name)
1387
+ self.readIdentifiable(child_element, prototype)
1388
+ prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1303
1389
  prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1304
1390
  prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1305
1391
  parent.addArgumentDataPrototype(prototype)
@@ -1307,13 +1393,14 @@ class ARXMLParser(AbstractARXMLParser):
1307
1393
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
1308
1394
  child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
1309
1395
  if child_element is not None:
1310
- for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
1396
+ for ref in self.getChildElementRefTypeList(child_element, "./POSSIBLE-ERROR-REF"):
1311
1397
  parent.addPossibleErrorRef(ref)
1312
1398
 
1313
1399
  def readOperations(self, element: ET.Element, parent: ClientServerInterface):
1314
1400
  for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
1315
1401
  short_name = self.getShortName(child_element)
1316
1402
  operation = parent.createOperation(short_name)
1403
+ self.readIdentifiable(child_element, operation)
1317
1404
  self.readArgumentDataPrototypes(child_element, operation)
1318
1405
  self.readPossibleErrorRefs(child_element, operation)
1319
1406
 
@@ -1330,6 +1417,7 @@ class ARXMLParser(AbstractARXMLParser):
1330
1417
  def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
1331
1418
  short_name = self.getShortName(element)
1332
1419
  cs_interface = parent.createClientServerInterface(short_name)
1420
+ self.readIdentifiable(element, cs_interface)
1333
1421
  self.readPortInterface(element, cs_interface)
1334
1422
  self.readOperations(element, cs_interface)
1335
1423
  self.readPossibleErrors(element, cs_interface)
@@ -1550,10 +1638,10 @@ class ARXMLParser(AbstractARXMLParser):
1550
1638
 
1551
1639
  def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
1552
1640
  iref = VariableDataPrototypeInSystemInstanceRef()
1553
- iref.contextComponentRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1554
- iref.contextCompositionRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1555
- iref.contextPortRef = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1556
- iref.targetDataPrototypeRef = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1641
+ iref.context_component_refs = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
1642
+ iref.context_composition_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
1643
+ iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
1644
+ iref.target_data_prototype_ref = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
1557
1645
  return iref
1558
1646
 
1559
1647
  def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
@@ -1709,6 +1797,158 @@ class ARXMLParser(AbstractARXMLParser):
1709
1797
  self.readPortInterface(element, mode_interface)
1710
1798
  self.readModeSwitchInterfaceModeGroup(element, mode_interface)
1711
1799
 
1800
+ def readEOCExecutableEntityRef(self, element: ET.Element, constraint: ExecutionOrderConstraint):
1801
+ short_name = self.getShortName(element)
1802
+ self.logger.debug("readEocExecutableEntityRef %s" % short_name)
1803
+ entity_ref = constraint.createEOCExecutableEntityRef(short_name)
1804
+ self.readIdentifiable(element, entity_ref)
1805
+ for ref in self.getChildElementRefTypeList(element, "SUCCESSOR-REFS/SUCCESSOR-REF"):
1806
+ entity_ref.addSuccessorRef(ref)
1807
+
1808
+ def readExecutionOrderConstraintOrderedElement(self, element: ET.Element, constrain: ExecutionOrderConstraint):
1809
+ for child_element in self.findall(element, "ORDERED-ELEMENTS/*"):
1810
+ tag_name = self.getTagName(child_element)
1811
+ if tag_name == "EOC-EXECUTABLE-ENTITY-REF":
1812
+ self.readEOCExecutableEntityRef(child_element, constrain)
1813
+ else:
1814
+ self._raiseError("Unsupported order element <%s>." % tag_name)
1815
+
1816
+ def readExecutionOrderConstraint(self, element: ET.Element, extension: TimingExtension):
1817
+ short_name = self.getShortName(element)
1818
+ self.logger.debug("readExecutionOrderConstraint %s" % short_name)
1819
+ constraint = extension.createExecutionOrderConstraint(short_name)
1820
+ self.readIdentifiable(element, constraint)
1821
+ self.readExecutionOrderConstraintOrderedElement(element, constraint)
1822
+
1823
+ def readTimingExtension(self, element: ET.Element, extension: TimingExtension):
1824
+ for child_element in self.findall(element, "TIMING-REQUIREMENTS/*"):
1825
+ tag_name = self.getTagName(child_element)
1826
+ if tag_name == "EXECUTION-ORDER-CONSTRAINT":
1827
+ self.readExecutionOrderConstraint(child_element, extension)
1828
+ else:
1829
+ self._raiseError("Unsupported timing requirement <%s>" % tag_name)
1830
+
1831
+ def readSwcTiming(self, element: ET.Element, parent: ARPackage):
1832
+ short_name = self.getShortName(element)
1833
+ self.logger.debug("readSwcTiming %s" % short_name)
1834
+ timing = parent.createSwcTiming(short_name)
1835
+ self.readIdentifiable(element, timing)
1836
+ self.readTimingExtension(element, timing)
1837
+
1838
+ def readLinCluster(self, element: ET.Element, parent: ARPackage):
1839
+ short_name = self.getShortName(element)
1840
+ self.logger.debug("readLinCluster %s" % short_name)
1841
+ cluster = parent.createLinCluster(short_name)
1842
+ self.readIdentifiable(element, cluster)
1843
+
1844
+ def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
1845
+ for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
1846
+ short_name = self.getShortName(child_element)
1847
+ self.logger.debug("readPduToFrameMapping %s" % short_name)
1848
+ mapping = parent.createPduToFrameMapping(short_name)
1849
+ self.readIdentifiable(child_element, mapping)
1850
+ mapping.packingByteOrder = self.getChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER")
1851
+ mapping.pduRef = self.getChildElementOptionalRefType(child_element, "PDU-REF")
1852
+ mapping.startPosition = self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")
1853
+
1854
+ def readFrame(self, element: ET.Element, frame: Frame):
1855
+ self.readIdentifiable(element, frame)
1856
+ frame.frameLength = self.getChildElementOptionalNumericalValue(element, "FRAME-LENGTH")
1857
+ self.readPduToFrameMappings(element, frame)
1858
+
1859
+ def readLinUnconditionalFrame(self, element: ET.Element, parent: ARPackage):
1860
+ short_name = self.getShortName(element)
1861
+ self.logger.debug("LinUnconditionalFrame %s" % short_name)
1862
+ frame = parent.createLinUnconditionalFrame(short_name)
1863
+ self.readFrame(element, frame)
1864
+
1865
+ def readNmPdu(self, element: ET.Element, parent: ARPackage):
1866
+ short_name = self.getShortName(element)
1867
+ self.logger.debug("readNmPdu %s" % short_name)
1868
+ pdu = parent.createNmPdu(short_name)
1869
+ self.readIdentifiable(element, pdu)
1870
+
1871
+ def readNPdu(self, element: ET.Element, parent: ARPackage):
1872
+ short_name = self.getShortName(element)
1873
+ self.logger.debug("readNPdu %s" % short_name)
1874
+ pdu = parent.createNPdu(short_name)
1875
+ self.readIdentifiable(element, pdu)
1876
+
1877
+ def readDcmIPdu(self, element: ET.Element, parent: ARPackage):
1878
+ short_name = self.getShortName(element)
1879
+ self.logger.debug("readDcmIPdu %s" % short_name)
1880
+ pdu = parent.createDcmIPdu(short_name)
1881
+ self.readIdentifiable(element, pdu)
1882
+
1883
+ def readNmConfig(self, element: ET.Element, parent: ARPackage):
1884
+ short_name = self.getShortName(element)
1885
+ self.logger.debug("NmConfig %s" % short_name)
1886
+ pdu = parent.createNmConfig(short_name)
1887
+ self.readIdentifiable(element, pdu)
1888
+
1889
+ def readCanTpConfig(self, element: ET.Element, parent: ARPackage):
1890
+ short_name = self.getShortName(element)
1891
+ self.logger.debug("CanTpConfig %s" % short_name)
1892
+ pdu = parent.createCanTpConfig(short_name)
1893
+ self.readIdentifiable(element, pdu)
1894
+
1895
+ def readCanFrame(self, element: ET.Element, parent: ARPackage):
1896
+ short_name = self.getShortName(element)
1897
+ self.logger.debug("CanFrame %s" % short_name)
1898
+ frame = parent.createCanFrame(short_name)
1899
+ self.readFrame(element, frame)
1900
+
1901
+ '''
1902
+ def getFrameMappings(self, element: ET.Element) -> List[FrameMapping]:
1903
+ mappings = []
1904
+ for child_element in self.findall(element, 'FRAME-MAPPINGS/'):
1905
+ mapping = FrameMapping()
1906
+ mapping.sourceFrameRef = self.getChildElementOptionalRefType(child_element, "SOURCE-FRAME-REF")
1907
+ mapping.targetFrameRef = self.getChildElementOptionalRefType(child_element, "TARGET-FRAME-REF")
1908
+ mappings.append(mapping)
1909
+ return mappings
1910
+ '''
1911
+
1912
+ def getISignalMappings(self, element: ET.Element) -> List[ISignalMapping]:
1913
+ mappings = []
1914
+ for child_element in self.findall(element, "SIGNAL-MAPPINGS/I-SIGNAL-MAPPING"):
1915
+ mapping = ISignalMapping()
1916
+ mapping.sourceSignalRef = self.getChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF")
1917
+ mapping.targetSignalRef = self.getChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF")
1918
+ mappings.append(mapping)
1919
+ return mappings
1920
+
1921
+ '''
1922
+ def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
1923
+ mappings = []
1924
+ for child_element in self.findall(element, tag_name):
1925
+ mapping = IPduMapping()
1926
+ mapping.sourceIPduRef = self.getChildElementOptionalRefType(child_element, "SOURCE-IPDU-REF")
1927
+ mapping.targetIPduRef = self.getChildElementOptionalRefType(child_element, "TARGET-IPDU-REF")
1928
+ mappings.append(mapping)
1929
+ return mappings
1930
+ '''
1931
+
1932
+ def readGateway(self, element: ET.Element, parent: ARPackage):
1933
+ short_name = self.getShortName(element)
1934
+ self.logger.debug("Gateway %s" % short_name)
1935
+ gateway = parent.createGateway(short_name)
1936
+ self.readIdentifiable(element, gateway)
1937
+ gateway.ecuRef = self.getChildElementOptionalRefType(element, "ECU-REF")
1938
+ for mapping in self.getISignalMappings(element):
1939
+ gateway.addSignalMapping(mapping)
1940
+
1941
+ def readISignal(self, element: ET.Element, parent: ARPackage):
1942
+ short_name = self.getShortName(element)
1943
+ self.logger.debug("ISignal %s" % short_name)
1944
+ signal = parent.createISignal(short_name)
1945
+ self.readIdentifiable(element, signal)
1946
+ signal.dataTypePolicy = self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")
1947
+ signal.initValue = self.getInitValue(element)
1948
+ signal.length = self.getChildElementOptionalNumericalValue(element, "LENGTH")
1949
+ signal.networkRepresentationProps = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")
1950
+ signal.systemSignalRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF")
1951
+
1712
1952
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
1713
1953
  for child_element in self.findall(element, "./ELEMENTS/*"):
1714
1954
  tag_name = self.getTagName(child_element.tag)
@@ -1770,19 +2010,36 @@ class ARXMLParser(AbstractARXMLParser):
1770
2010
  self.readModeDeclarationGroup(child_element, parent)
1771
2011
  elif tag_name == "MODE-SWITCH-INTERFACE":
1772
2012
  self.readModeSwitchInterface(child_element, parent)
2013
+ elif tag_name == "SWC-TIMING":
2014
+ self.readSwcTiming(child_element, parent)
2015
+ elif tag_name == "LIN-CLUSTER":
2016
+ self.readLinCluster(child_element, parent)
2017
+ elif tag_name == "LIN-UNCONDITIONAL-FRAME":
2018
+ self.readLinUnconditionalFrame(child_element, parent)
2019
+ elif tag_name == "NM-PDU":
2020
+ self.readNmPdu(child_element, parent)
2021
+ elif tag_name == "N-PDU":
2022
+ self.readNPdu(child_element, parent)
2023
+ elif tag_name == "DCM-I-PDU":
2024
+ self.readDcmIPdu(child_element, parent)
2025
+ elif tag_name == "NM-CONFIG":
2026
+ self.readNmConfig(child_element, parent)
2027
+ elif tag_name == "CAN-TP-CONFIG":
2028
+ self.readCanTpConfig(child_element, parent)
1773
2029
  elif tag_name == "SYSTEM":
1774
2030
  pass
1775
2031
  elif tag_name == "ECU-INSTANCE":
1776
2032
  pass
1777
2033
  elif tag_name == "GATEWAY":
1778
- pass
2034
+ self.readGateway(child_element, parent)
1779
2035
  elif tag_name == "I-SIGNAL-I-PDU-GROUP":
1780
2036
  pass
1781
2037
  elif tag_name == "CAN-CLUSTER":
1782
2038
  pass
1783
2039
  elif tag_name == "CAN-FRAME":
1784
- pass
2040
+ self.readCanFrame(child_element, parent)
1785
2041
  elif tag_name == "I-SIGNAL":
2042
+ self.readISignal(child_element, parent)
1786
2043
  pass
1787
2044
  elif tag_name == "I-SIGNAL-GROUP":
1788
2045
  pass