armodel 1.7.6__py3-none-any.whl → 1.7.8__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 (69) hide show
  1. armodel/cli/arxml_dump_cli.py +33 -22
  2. armodel/cli/arxml_format_cli.py +25 -13
  3. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +95 -21
  4. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +359 -59
  5. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswOverview.py +134 -35
  6. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +17 -7
  7. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +10 -1
  8. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +18 -2
  9. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +20 -19
  10. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/HwElementCategory.py +59 -0
  11. armodel/models/M2/AUTOSARTemplates/EcuResourceTemplate/__init__.py +145 -0
  12. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +215 -157
  13. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +69 -35
  14. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +17 -1
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
  16. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +113 -39
  17. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +3 -2
  18. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
  19. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
  20. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/EndToEndProtection.py +13 -6
  21. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/PortInterface/__init__.py +111 -38
  22. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AccessCount.py +9 -1
  23. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +5 -4
  24. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
  25. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +28 -6
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DataMapping.py +167 -5
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/EcuResourceMapping.py +45 -0
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +31 -21
  30. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetFrame.py +5 -3
  31. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +9 -0
  32. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayCommunication.py +76 -0
  33. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/FlexrayTopology.py +654 -0
  34. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Flexray/__init__.py +0 -0
  35. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +539 -77
  36. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +158 -40
  37. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +28 -6
  38. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +2 -0
  39. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
  40. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
  41. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Transformer/__init__.py +524 -0
  42. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +592 -17
  43. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +33 -21
  44. armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
  45. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
  46. armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
  47. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
  48. armodel/models/__init__.py +8 -0
  49. armodel/parser/abstract_arxml_parser.py +34 -27
  50. armodel/parser/arxml_parser.py +1778 -616
  51. armodel/parser/file_parser.py +5 -3
  52. armodel/tests/test_armodel/models/test_ar_package.py +6 -11
  53. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
  54. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  55. armodel/tests/test_armodel/models/test_port_interface.py +116 -117
  56. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
  57. armodel/tests/test_armodel/parser/test_sw_components.py +54 -22
  58. armodel/tests/test_armodel/parser/test_system.py +2 -8
  59. armodel/transformer/__init__.py +0 -0
  60. armodel/transformer/abstract.py +6 -0
  61. armodel/transformer/admin_data.py +31 -0
  62. armodel/writer/abstract_arxml_writer.py +27 -33
  63. armodel/writer/arxml_writer.py +1875 -599
  64. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/METADATA +81 -3
  65. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/RECORD +69 -56
  66. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/LICENSE +0 -0
  67. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/WHEEL +0 -0
  68. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/entry_points.txt +0 -0
  69. {armodel-1.7.6.dist-info → armodel-1.7.8.dist-info}/top_level.txt +0 -0
@@ -5,7 +5,9 @@ import os
5
5
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
6
6
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
7
7
  from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
8
- from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent, CompuMethod, Compu, CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
8
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent, CompuMethod, Compu
9
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConst, CompuConstTextContent, CompuNominatorDenominator, CompuRationalCoeffs, CompuScale
10
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
9
11
  from ..models.M2.MSR.AsamHdo.SpecialData import Sdg, Sd
10
12
  from ..models.M2.MSR.AsamHdo.Units import PhysicalDimension, Unit
11
13
  from ..models.M2.MSR.CalibrationData.CalibrationValue import SwValueCont, SwValues
@@ -22,82 +24,180 @@ from ..models.M2.MSR.Documentation.Annotation import Annotation, GeneralAnnotati
22
24
  from ..models.M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
23
25
  from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
24
26
  from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LOverviewParagraph, LParagraph, LanguageSpecific
25
- from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
27
+ from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText
28
+ from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultilanguageLongName
26
29
 
27
30
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
28
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswDataReceivedEvent, BswInternalBehavior, BswInternalTriggerOccurredEvent, BswInterruptEntity, BswModeSwitchEvent, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswModeSenderPolicy, BswTimingEvent
31
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswApiOptions, BswBackgroundEvent, BswCalledEntity, BswDataReceivedEvent
32
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswOperationInvokedEvent
33
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswDataReceptionPolicy, BswExternalTriggerOccurredEvent, BswInternalBehavior
34
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalTriggerOccurredEvent, BswInterruptEntity, BswModeSwitchEvent
35
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswModuleEntity, BswQueuedDataReceptionPolicy, BswSchedulableEntity
36
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswScheduleEvent, BswModeSenderPolicy, BswTimingEvent, BswVariableAccess
29
37
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
30
38
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
31
39
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
32
- from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ConstantSpecification, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
40
+ from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference
41
+ from ..models.M2.AUTOSARTemplates.CommonStructure import ConstantSpecification, NumericalValueSpecification, RecordValueSpecification
42
+ from ..models.M2.AUTOSARTemplates.CommonStructure import TextValueSpecification, ValueSpecification
33
43
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
34
44
  from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
35
45
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import ImplementationProps, Code
46
+ from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
36
47
  from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclarationGroup, ModeRequestTypeMap, ModeDeclarationGroupPrototype
37
48
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
38
49
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.MemorySectionUsage import MemorySection
39
50
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
40
- from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity, InternalBehavior
41
51
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
42
- from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceAlgorithm, DiagEventDebounceMonitorInternal, DiagnosticEventNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
52
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal
53
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds
54
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds
55
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment
56
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedDataTypeAssignment, ServiceDependency
43
57
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
44
58
  from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
45
59
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
46
60
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
61
+ from ..models.M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import Trigger
47
62
  from ..models.M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import DiagnosticServiceTable
48
- from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
63
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue
64
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue
65
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
66
+ from ..models.M2.AUTOSARTemplates.EcuResourceTemplate import HwDescriptionEntity, HwElement, HwPinGroup
67
+ from ..models.M2.AUTOSARTemplates.EcuResourceTemplate.HwElementCategory import HwAttributeDef, HwCategory, HwType
49
68
  from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
50
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable
69
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Describable, Identifiable
70
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Referrable, MultilanguageReferrable
51
71
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
52
72
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
53
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Ip6AddressString, RefType, ARLiteral
73
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral
54
74
  from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
55
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
56
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
57
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationPrimitiveDataType, ApplicationRecordDataType, ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
58
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet, EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
59
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
75
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationPrimitiveDataType, ApplicationRecordDataType
76
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationArrayDataType, ApplicationCompositeDataType
77
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
78
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionISignalIPdu, EndToEndProtectionSet
79
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection
80
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionVariablePrototype
81
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef
82
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
60
83
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
61
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, VariableInAtomicSWCTypeInstanceRef
62
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
63
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
64
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PortGroup, SensorActuatorSwComponentType, ServiceSwComponentType, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
65
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
84
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest
85
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import TransmissionAcknowledgementRequest
86
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec
87
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec
88
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import QueuedReceiverComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec
89
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ServerComSpec
90
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, PRPortPrototype
91
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import ApplicationSwComponentType, ComplexDeviceDriverSwComponentType
92
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import CompositionSwComponentType, EcuAbstractionSwComponentType, PortGroup
93
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import SensorActuatorSwComponentType, ServiceSwComponentType, SwComponentType
94
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import SymbolProps, PPortPrototype, RPortPrototype
95
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
96
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef
97
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import ModeGroupInAtomicSwcInstanceRef
98
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef
99
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import RModeGroupInAtomicSWCInstanceRef
100
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import RModeInAtomicSwcInstanceRef
101
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import RVariableInAtomicSwcInstanceRef
102
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector, SwComponentPrototype, SwConnector
103
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationCompositeElementDataPrototype
104
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationRecordElement, AutosarDataPrototype
105
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import DataPrototype, ParameterDataPrototype, VariableDataPrototype
106
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation
107
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import DataPrototypeMapping, InvalidationPolicy, ModeSwitchInterface
108
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ParameterInterface, PortInterface, PortInterfaceMappingSet
109
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import SenderReceiverInterface, TriggerInterface, DataInterface
110
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import VariableAndParameterInterfaceMapping
111
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import SwcImplementation
66
112
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, RunnableEntityArgument, SwcInternalBehavior
67
113
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
68
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
69
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector
70
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
114
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
115
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef
116
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import VariableInAtomicSWCTypeInstanceRef
117
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
118
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import ModeAccessPoint, ModeSwitchPoint
119
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
120
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent
121
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent
122
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent
123
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import SwcModeSwitchEvent, TimingEvent
71
124
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
72
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
73
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ArgumentDataPrototype, ClientServerInterface, ClientServerOperation, DataPrototypeMapping, InvalidationPolicy, ModeSwitchInterface, ParameterInterface, PortInterface, PortInterfaceMappingSet, SenderReceiverInterface, TriggerInterface, VariableAndParameterInterfaceMapping
74
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AtomicSwComponentType
75
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import SwcImplementation
76
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
125
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
77
126
 
78
- from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping , System, SystemMapping
127
+ from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping, System, SystemMapping
128
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderRecCompositeTypeMapping
129
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderRecRecordElementMapping, SenderRecRecordTypeMapping
79
130
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
80
131
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import DiagnosticConnection
81
- from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmNode
82
- from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
83
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable, LinUnconditionalFrame, ScheduleTableEntry
84
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
85
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, CommunicationController, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
86
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DcmIPdu, Frame, FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignal, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, MultiplexedIPdu, NPdu, NmPdu, PduTriggering, SecureCommunicationPropsSet, SecuredIPdu, SystemSignal, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
87
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
88
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
132
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.EcuResourceMapping import ECUMapping
89
133
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
90
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController, AbstractCanCommunicationControllerAttributes, CanCommunicationConnector, CanCommunicationController, CanControllerConfigurationRequirements, CanControllerFdConfiguration, CanControllerFdConfigurationRequirements
91
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
134
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController
135
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationControllerAttributes
136
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
137
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanControllerConfigurationRequirements
138
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanControllerFdConfiguration
139
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanControllerFdConfigurationRequirements
140
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection
141
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnectionBundle
142
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnectionIpduIdentifier
92
143
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetFrame import GenericEthernetFrame
93
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import DoIpEntity, InfrastructureServices, Ipv6Configuration, NetworkEndpoint
94
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, EventHandler, GenericTp, ProvidedServiceInstance, SdServerConfig, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
95
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo, CouplingPortScheduler, CouplingPortStructuralElement, EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, EthernetPriorityRegeneration, InitialSdDelayConfig, MacMulticastGroup, RequestResponseDelay, SdClientConfig, VlanMembership
144
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo
145
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPortScheduler, CouplingPortStructuralElement
146
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCluster, EthernetCommunicationConnector
147
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCommunicationController
148
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetPriorityRegeneration, InitialSdDelayConfig
149
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import MacMulticastGroup, RequestResponseDelay, SdClientConfig
150
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import VlanMembership
151
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import DoIpEntity, InfrastructureServices, Ipv6Configuration
152
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import NetworkEndpoint
153
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup
154
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ConsumedServiceInstance, EventHandler, GenericTp
155
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ProvidedServiceInstance, SdServerConfig, SoAdConfig
156
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import SocketAddress, TcpTp, TpPort
157
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import TransportProtocolConfiguration, UdpTp
158
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayCommunication import FlexrayAbsolutelyScheduledTiming, FlexrayFrame
159
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayCommunication import FlexrayFrameTriggering
160
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayTopology import FlexrayCluster, FlexrayCommunicationConnector
161
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayTopology import FlexrayCommunicationController
162
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable
163
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinUnconditionalFrame, ScheduleTableEntry
164
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
96
165
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
97
- from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig, DoIpTpConfig, LinTpConfig
166
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DcmIPdu, DynamicPart, DynamicPartAlternative, Frame
167
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu
168
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import IPdu, IPduTiming, ISignal, ISignalGroup, ISignalIPdu
169
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import ISignalIPduGroup, ISignalToIPduMapping, ISignalTriggering
170
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import MultiplexedIPdu, MultiplexedPart, NPdu, NmPdu, Pdu
171
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import PduTriggering, SecureCommunicationAuthenticationProps
172
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import SecureCommunicationFreshnessProps, SecureCommunicationProps
173
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import SecureCommunicationPropsSet, SecuredIPdu, SegmentPosition
174
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import StaticPart, SystemSignal, SystemSignalGroup
175
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import UserDefinedIPdu, UserDefinedPdu
176
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery
177
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import FlexrayPhysicalChannel, CycleRepetition, CommunicationCycle
178
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CanPhysicalChannel, CommConnectorPort, CommunicationCluster
179
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CommunicationConnector, CommunicationController
180
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort
181
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import LinCluster, LinPhysicalChannel, PhysicalChannel
182
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
183
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType
184
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import TransmissionModeCondition, TransmissionModeDeclaration
185
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import TransmissionModeTiming
186
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
187
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmEcu
188
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmEcu, UdpNmNode
189
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.SWmapping import SwcToImplMapping
190
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import BufferProperties, DataTransformation, DataTransformationSet
191
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import EndToEndTransformationISignalProps, TransformationISignalProps
192
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import EndToEndTransformationDescription, TransformationDescription
193
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import TransformationTechnology
194
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpAddress, CanTpChannel, CanTpConfig, CanTpConnection, CanTpEcu
195
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpNode, DoIpLogicAddress, DoIpTpConfig, DoIpTpConnection, LinTpConfig
196
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import LinTpConnection, LinTpNode, TpAddress, TpConfig, TpConnection
98
197
 
99
198
  from .abstract_arxml_parser import AbstractARXMLParser
100
199
 
200
+
101
201
  class ARXMLParser(AbstractARXMLParser):
102
202
  def __init__(self, options=None) -> None:
103
203
  super().__init__(options)
@@ -110,7 +210,7 @@ class ARXMLParser(AbstractARXMLParser):
110
210
  range.setLowerCanId(self.getChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID")) \
111
211
  .setUpperCanId(self.getChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID"))
112
212
  return range
113
-
213
+
114
214
  def readSd(self, element: ET.Element, sdg: Sdg):
115
215
  for child_element in self.findall(element, "./SD"):
116
216
  sd = Sd()
@@ -119,33 +219,51 @@ class ARXMLParser(AbstractARXMLParser):
119
219
  sd.setValue(child_element.text)
120
220
  sdg.addSd(sd)
121
221
 
222
+ def readSdgCaption(self, element: ET.Element, sdg: Sdg):
223
+ child_element = self.find(element, "SDG-CAPTION")
224
+ if child_element is not None:
225
+ sdg.createSdgCaption(self.getShortName(child_element))
226
+
227
+ def readSdgSdxRefs(self, element: ET.SubElement, sdg: Sdg):
228
+ for ref in self.getChildElementRefTypeList(element, "SDX-REF"):
229
+ sdg.addSdxRef(ref)
230
+
122
231
  def getSdg(self, element: ET.Element) -> Sdg:
123
232
  sdg = Sdg()
124
233
  if 'GID' in element.attrib:
125
234
  sdg.setGID(element.attrib["GID"])
235
+ self.readSdgCaption(element, sdg)
126
236
  self.readSd(element, sdg)
127
237
  for child_element in self.findall(element, "SDG"):
128
238
  sdg.addSdgContentsType(self.getSdg(child_element))
239
+ self.readSdgSdxRefs(element, sdg)
129
240
  return sdg
130
-
241
+
131
242
  def readSdgs(self, element: ET.Element, admin_data: AdminData):
132
- for child_element in self.findall(element, "SDGS/SDG"):
133
- admin_data.addSdg(self.getSdg(child_element))
243
+ for child_element in self.findall(element, "SDGS/*"):
244
+ tag_name = self.getTagName(child_element)
245
+ if tag_name == "SDG":
246
+ admin_data.addSdg(self.getSdg(child_element))
247
+ else:
248
+ self.notImplemented("Unsupported SDG <%s>" % tag_name)
134
249
 
135
250
  def getAdminData(self, element: ET.Element, key: str) -> AdminData:
136
251
  admin_data = None
137
252
  child_element = self.find(element, key)
138
253
  if child_element is not None:
139
- self.logger.debug("readAdminData")
254
+ # self.logger.debug("Read AdminData")
140
255
  admin_data = AdminData()
141
256
  admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE")) \
142
257
  .setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
143
258
 
144
259
  self.readSdgs(child_element, admin_data)
145
260
  return admin_data
261
+
262
+ def readReferrable(self, element: ET.Element, referrable: Referrable):
263
+ self.readARObjectAttributes(element, referrable)
146
264
 
147
265
  def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
148
- self.readARObjectAttributes(element, referrable)
266
+ self.readReferrable(element, referrable)
149
267
  referrable.setLongName(self.getMultilanguageLongName(element, "LONG-NAME"))
150
268
 
151
269
  def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
@@ -157,8 +275,11 @@ class ARXMLParser(AbstractARXMLParser):
157
275
  identifiable.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
158
276
  .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC")) \
159
277
  .setIntroduction(self.getDocumentationBlock(element, "INTRODUCTION"))
160
-
278
+
161
279
  identifiable.setAdminData(self.getAdminData(element, "ADMIN-DATA"))
280
+
281
+ def readARElement(self, element: ET.Element, ar_element: ARElement):
282
+ self.readIdentifiable(element, ar_element)
162
283
 
163
284
  def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
164
285
  for child_element in self.findall(element, "L-4"):
@@ -166,7 +287,7 @@ class ARXMLParser(AbstractARXMLParser):
166
287
  self.readARObjectAttributes(child_element, l4)
167
288
  l4.value = child_element.text
168
289
  if 'L' in child_element.attrib:
169
- l4.l = child_element.attrib['L']
290
+ l4.l = child_element.attrib['L'] # noqa: E741
170
291
  long_name.addL4(l4)
171
292
 
172
293
  def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
@@ -184,7 +305,7 @@ class ARXMLParser(AbstractARXMLParser):
184
305
  self.readARObjectAttributes(child_element, l2)
185
306
  l2.value = child_element.text
186
307
  if 'L' in child_element.attrib:
187
- l2.l = child_element.attrib['L']
308
+ l2.l = child_element.attrib['L'] # noqa: E741
188
309
  paragraph.addL2(l2)
189
310
 
190
311
  def getMultiLanguageOverviewParagraph(self, element: ET.Element, key: str) -> MultiLanguageOverviewParagraph:
@@ -197,37 +318,37 @@ class ARXMLParser(AbstractARXMLParser):
197
318
  return paragraph
198
319
 
199
320
  def getVariableInAtomicSWCTypeInstanceRef(self, element: ET.Element) -> VariableInAtomicSWCTypeInstanceRef:
200
- iref = None
321
+ instance_ref = None
201
322
  if element is not None:
202
- iref = VariableInAtomicSWCTypeInstanceRef()
203
- self.readARObjectAttributes(element, iref)
204
- iref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
205
- iref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
206
- return iref
323
+ instance_ref = VariableInAtomicSWCTypeInstanceRef()
324
+ self.readARObjectAttributes(element, instance_ref)
325
+ instance_ref.setPortPrototypeRef(self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF"))
326
+ instance_ref.setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
327
+ return instance_ref
207
328
 
208
329
  def getComponentInSystemInstanceRef(self, element: ET.Element) -> ComponentInSystemInstanceRef:
209
- iref = None
330
+ instance_ref = None
210
331
  if element is not None:
211
- iref = ComponentInSystemInstanceRef()
212
- self.readARObjectAttributes(element, iref)
213
- iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF"))
214
- iref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF"))
215
- iref.setTargetComponentRef(self.getChildElementOptionalRefType(element, "TARGET-COMPONENT-REF"))
216
- return iref
332
+ instance_ref = ComponentInSystemInstanceRef()
333
+ self.readARObjectAttributes(element, instance_ref)
334
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF"))
335
+ instance_ref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF"))
336
+ instance_ref.setTargetComponentRef(self.getChildElementOptionalRefType(element, "TARGET-COMPONENT-REF"))
337
+ return instance_ref
217
338
 
218
- def getAutosarVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
339
+ def getAutosarVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
219
340
  child_element = self.find(element, key)
220
- ref = None
341
+ instance_ref = None
221
342
  if (child_element is not None):
222
- ref = AutosarVariableRef()
223
- #self.readARObjectAttributes(child_element, ref)
224
- ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF"))) \
225
- .setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
226
- return ref
343
+ instance_ref = AutosarVariableRef()
344
+ # self.readARObjectAttributes(child_element, ref)
345
+ instance_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF"))) \
346
+ .setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
347
+ return instance_ref
227
348
 
228
- def getLocalVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
349
+ def getLocalVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
229
350
  child_element = self.find(element, key)
230
- ref = None
351
+ ref = None
231
352
  if (child_element is not None):
232
353
  ref = AutosarVariableRef()
233
354
  ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
@@ -265,31 +386,34 @@ class ARXMLParser(AbstractARXMLParser):
265
386
 
266
387
  self.readIdentifiable(child_element, variable_access)
267
388
 
268
- def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
389
+ def readBswModuleDescriptionImplementedEntryRefs(self, element: ET.Element, parent: BswModuleDescription):
269
390
  for child_element in self.findall(element, "PROVIDED-ENTRYS/BSW-MODULE-ENTRY-REF-CONDITIONAL"):
270
- ref = self.getChildElementOptionalRefType(child_element, "BSW-MODULE-ENTRY-REF")
391
+ ref = self.getChildElementOptionalRefType(child_element, "BSW-MODULE-ENTRY-REF")
271
392
  if (ref is not None):
272
- parent.addImplementedEntry(ref)
393
+ parent.addImplementedEntryRef(ref)
273
394
  self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.getShortName())
274
395
 
275
396
  def readModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
276
397
  self.readIdentifiable(element, prototype)
277
- prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
278
-
279
- def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
280
- for child_element in self.findall(element, "PROVIDED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE"):
281
- short_name = self.getShortName(child_element)
282
- self.logger.debug("readProvidedModeGroup %s" % short_name)
398
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
283
399
 
284
- mode_group = parent.createProvidedModeGroup(short_name)
285
- self.readModeDeclarationGroupPrototype(child_element, mode_group)
400
+ def readBswModuleDescriptionProvidedModeGroups(self, element: ET.Element, parent: BswModuleDescription):
401
+ for child_element in self.findall(element, "PROVIDED-MODE-GROUPS/*"):
402
+ tag_name = self.getTagName(child_element)
403
+ if tag_name == "MODE-DECLARATION-GROUP-PROTOTYPE":
404
+ mode_group = parent.createProvidedModeGroup(self.getShortName(child_element))
405
+ self.readModeDeclarationGroupPrototype(child_element, mode_group)
406
+ else:
407
+ self.notImplemented("Unsupported ProvidedModeGroup <%s>" % tag_name)
286
408
 
287
- def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
288
- for child_element in self.findall(element, "REQUIRED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE"):
289
- short_name = self.getShortName(child_element)
290
- self.logger.debug("readRequiredModeGroup %s" % short_name)
291
- mode_group = parent.createProvidedModeGroup(short_name)
292
- mode_group.type_tref = self.getChildElementRefType(parent.getShortName(), child_element, "TYPE-TREF")
409
+ def readBswModuleDescriptionRequiredModeGroups(self, element: ET.Element, parent: BswModuleDescription):
410
+ for child_element in self.findall(element, "REQUIRED-MODE-GROUPS/*"):
411
+ tag_name = self.getTagName(child_element)
412
+ if tag_name == "MODE-DECLARATION-GROUP-PROTOTYPE":
413
+ prototype = parent.createProvidedModeGroup(self.getShortName(child_element))
414
+ self.readModeDeclarationGroupPrototype(child_element, prototype)
415
+ else:
416
+ self.notImplemented("Unsupported RequiredModeGroup <%s>" % tag_name)
293
417
 
294
418
  def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
295
419
  for ref in self.getChildElementRefTypeList(element, "CAN-ENTER-EXCLUSIVE-AREA-REFS/CAN-ENTER-EXCLUSIVE-AREA-REF"):
@@ -302,8 +426,8 @@ class ARXMLParser(AbstractARXMLParser):
302
426
  entity.setMinimumStartInterval(self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")) \
303
427
  .setSwAddrMethodRef(self.getChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF"))
304
428
 
305
- def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
306
- for child_element in self.findall(element, "sMANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
429
+ def readBswModuleEntityManagedModeGroups(self, element: ET.Element, entity: BswModuleEntity):
430
+ for child_element in self.findall(element, "MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
307
431
  ref_type = self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF")
308
432
  if ref_type is not None:
309
433
  entity.addManagedModeGroupRef(ref_type)
@@ -315,12 +439,12 @@ class ARXMLParser(AbstractARXMLParser):
315
439
  self.readBswEvent(element, event)
316
440
 
317
441
  def readBswModeSwitchEvent(self, element: ET.Element, event: BswModeSwitchEvent):
318
- self.logger.debug("read BswModeSwitchEvent %s" % event.getShortName())
442
+ self.logger.debug("Read BswModeSwitchEvent <%s>" % event.getShortName())
319
443
  # Read the Inherit BswScheduleEvent
320
444
  self.readBswScheduleEvent(element, event)
321
445
 
322
446
  def readBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
323
- self.logger.debug("read BswTimingEvent %s" % event.getShortName())
447
+ self.logger.debug("Read BswTimingEvent <%s>" % event.getShortName())
324
448
  # Read the Inherit BswScheduleEvent
325
449
  self.readBswScheduleEvent(element, event)
326
450
  event.setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
@@ -330,13 +454,13 @@ class ARXMLParser(AbstractARXMLParser):
330
454
  self.logger.debug(" Period: <%f, %s>" % (event.getPeriod().getValue(), event.getPeriod().getText()))
331
455
 
332
456
  def readBswDataReceivedEvent(self, element: ET.Element, event: BswDataReceivedEvent):
333
- self.logger.debug("read BswTimingEvent %s" % event.getShortName())
457
+ self.logger.debug("Read BswDataReceivedEvent <%s>" % event.getShortName())
334
458
  # Read the Inherit BswScheduleEvent
335
459
  self.readBswScheduleEvent(element, event)
336
460
  event.setDataRef(self.getChildElementOptionalRefType(element, "DATA-REF"))
337
461
 
338
462
  def readBswInternalTriggerOccurredEvent(self, element: ET.Element, event: BswInternalTriggerOccurredEvent):
339
- self.logger.debug("read BswTimingEvent %s" % event.getShortName())
463
+ self.logger.debug("Read BswInternalTriggerOccurredEvent <%s>" % event.getShortName())
340
464
  # Read the Inherit BswScheduleEvent
341
465
  self.readBswScheduleEvent(element, event)
342
466
  event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
@@ -362,10 +486,22 @@ class ARXMLParser(AbstractARXMLParser):
362
486
  behavior.addDataTypeMappingRef(ref)
363
487
 
364
488
  def readInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
365
- for child_element in self.findall(element, "CONSTANT-MEMORYS/PARAMETER-DATA-PROTOTYPE"):
366
- short_name = self.getShortName(child_element)
367
- prototype = behavior.createConstantMemory(short_name)
368
- self.readParameterDataPrototype(child_element, prototype)
489
+ for child_element in self.findall(element, "CONSTANT-MEMORYS/*"):
490
+ tag_name = self.getTagName(child_element)
491
+ if tag_name == "PARAMETER-DATA-PROTOTYPE":
492
+ prototype = behavior.createConstantMemory(self.getShortName(child_element))
493
+ self.readParameterDataPrototype(child_element, prototype)
494
+ else:
495
+ self.notImplemented("Unsupported constant memories <%s>" % tag_name)
496
+
497
+ def readInternalBehaviorStaticMemories(self, element: ET.Element, behavior: InternalBehavior):
498
+ for child_element in self.findall(element, "STATIC-MEMORYS/*"):
499
+ tag_name = self.getTagName(child_element)
500
+ if tag_name == "VARIABLE-DATA-PROTOTYPE":
501
+ prototype = behavior.createStaticMemory(self.getShortName(child_element))
502
+ self.readVariableDataPrototype(child_element, prototype)
503
+ else:
504
+ self.notImplemented("Unsupported static memories <%s>" % tag_name)
369
505
 
370
506
  def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
371
507
  self.readIdentifiable(element, behavior)
@@ -374,6 +510,7 @@ class ARXMLParser(AbstractARXMLParser):
374
510
  short_name = self.getShortName(child_element)
375
511
  behavior.createExclusiveArea(short_name)
376
512
  self.readDataTypeMappingRefs(element, behavior)
513
+ self.readInternalBehaviorStaticMemories(element, behavior)
377
514
 
378
515
  def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
379
516
  assignment = RoleBasedDataAssignment()
@@ -420,10 +557,8 @@ class ARXMLParser(AbstractARXMLParser):
420
557
  else:
421
558
  self.raiseError("Unsupported assigned ports <%s>" % tag_name)
422
559
 
423
- def readNvBlockNeeds(self, element: ET.Element, parent: SwcServiceDependency):
424
- short_name = self.getShortName(element)
425
- needs = parent.createNvBlockNeeds(short_name)
426
- self.logger.debug("read NvBlockNeeds %s" % short_name)
560
+ def readNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
561
+ self.logger.debug("Read NvBlockNeeds <%s>" % needs.getShortName())
427
562
  self.readIdentifiable(element, needs)
428
563
  needs.setCalcRamBlockCrc(self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")) \
429
564
  .setCheckStaticBlockId(self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")) \
@@ -445,25 +580,19 @@ class ARXMLParser(AbstractARXMLParser):
445
580
  .setWritingFrequency(self.getChildElementOptionalPositiveInteger(element, "WRITING-FREQUENCY")) \
446
581
  .setWritingPriority(self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY"))
447
582
 
448
- def reaDiagnosticCommunicationManagerNeeds(self, element: ET.Element, parent: SwcServiceDependency):
449
- short_name = self.getShortName(element)
450
- needs = parent.createDiagnosticCommunicationManagerNeeds(short_name)
451
- self.logger.debug("read DiagnosticCommunicationManagerNeeds %s" % short_name)
583
+ def reaDiagnosticCommunicationManagerNeeds(self, element: ET.Element, needs: DiagnosticCommunicationManagerNeeds):
584
+ self.logger.debug("Read DiagnosticCommunicationManagerNeeds <%s>" % needs.getShortName())
452
585
  self.readIdentifiable(element, needs)
453
586
  needs.setServiceRequestCallbackType(self.getChildElementOptionalLiteral(element, "SERVICE-REQUEST-CALLBACK-TYPE"))
454
587
 
455
- def readDiagnosticRoutineNeeds(self, element: ET.Element, parent: SwcServiceDependency):
456
- short_name = self.getShortName(element)
457
- needs = parent.createDiagnosticRoutineNeeds(short_name)
458
- self.logger.debug("read DiagnosticRoutineNeeds %s" % short_name)
588
+ def readDiagnosticRoutineNeeds(self, element: ET.Element, needs: DiagnosticRoutineNeeds):
589
+ self.logger.debug("Read DiagnosticRoutineNeeds %s" % needs.getShortName())
459
590
  self.readIdentifiable(element, needs)
460
591
  needs.setDiagRoutineType(self.getChildElementOptionalLiteral(element, "DIAG-ROUTINE-TYPE")) \
461
592
  .setRidNumber(self.getChildElementOptionalIntegerValue(element, "RID-NUMBER"))
462
593
 
463
- def readDiagnosticValueNeeds(self, element: ET.Element, parent: SwcServiceDependency):
464
- short_name = self.getShortName(element)
465
- needs = parent.createDiagnosticValueNeeds(short_name)
466
- self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
594
+ def readDiagnosticValueNeeds(self, element: ET.Element, needs: DiagnosticValueNeeds):
595
+ self.logger.debug("Read DiagnosticValueNeeds %s" % needs.getShortName())
467
596
  self.readIdentifiable(element, needs)
468
597
  needs.setDataLength(self.getChildElementOptionalPositiveInteger(element, "DATA-LENGTH")) \
469
598
  .setDiagnosticValueAccess(self.getChildElementOptionalLiteral(element, "DIAGNOSTIC-VALUE-ACCESS")) \
@@ -483,54 +612,54 @@ class ARXMLParser(AbstractARXMLParser):
483
612
  else:
484
613
  self.notImplemented("Unsupported DiagEventDebounceAlgorithm <%s>" % tag_name)
485
614
 
486
- def readDiagnosticEventNeeds(self, element: ET.Element, parent: SwcServiceDependency):
487
- short_name = self.getShortName(element)
488
- needs = parent.createDiagnosticEventNeeds(short_name)
489
- self.logger.debug("Read DiagnosticEventNeeds %s" % short_name)
615
+ def readDiagnosticEventNeeds(self, element: ET.Element, needs: DiagnosticEventNeeds):
616
+ self.logger.debug("Read DiagnosticEventNeeds <%s>" % needs.getShortName())
490
617
  self.readIdentifiable(element, needs)
491
618
  self.readDiagEventDebounceAlgorithm(element, needs)
492
619
  needs.setDtcKind(self.getChildElementOptionalLiteral(element, "DTC-KIND")) \
493
620
  .setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
494
621
 
495
- def readDiagnosticEventInfoNeeds(self, element: ET.Element, parent: SwcServiceDependency):
496
- short_name = self.getShortName(element)
497
- needs = parent.createDiagnosticEventInfoNeeds(short_name)
498
- self.logger.debug("Read DiagnosticEventInfoNeeds %s" % short_name)
622
+ def readDiagnosticEventInfoNeeds(self, element: ET.Element, needs: DiagnosticEventInfoNeeds):
623
+ self.logger.debug("Read DiagnosticEventInfoNeeds <%s>" % needs.getShortName())
499
624
  self.readIdentifiable(element, needs)
500
625
  needs.setUdsDtcNumber(self.getChildElementOptionalPositiveInteger(element, "UDS-DTC-NUMBER"))
501
626
 
502
- def readCryptoServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
503
- short_name = self.getShortName(element)
504
- needs = parent.createCryptoServiceNeeds(short_name)
505
- self.logger.debug("Read DiagnosticValueNeeds %s" % short_name)
627
+ def readCryptoServiceNeeds(self, element: ET.Element, needs: CryptoServiceNeeds):
628
+ self.logger.debug("Read CryptoServiceNeeds <%s>" % needs.getShortName())
506
629
  self.readIdentifiable(element, needs)
507
630
  needs.setMaximumKeyLength(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-KEY-LENGTH"))
508
631
 
509
- def readEcuStateMgrUserNeeds(self, element: ET.Element, parent: SwcServiceDependency):
510
- short_name = self.getShortName(element)
511
- needs = parent.createEcuStateMgrUserNeeds(short_name)
512
- self.logger.debug("read DiagnosticValueNeeds %s" % short_name)
632
+ def readEcuStateMgrUserNeeds(self, element: ET.Element, needs: EcuStateMgrUserNeeds):
633
+ self.logger.debug("read EcuStateMgrUserNeeds %s" % needs.getShortName())
513
634
  self.readIdentifiable(element, needs)
514
635
 
515
636
  def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
516
637
  for child_element in self.findall(element, "SERVICE-NEEDS/*"):
517
638
  tag_name = self.getTagName(child_element)
518
639
  if tag_name == "NV-BLOCK-NEEDS":
519
- self.readNvBlockNeeds(child_element, parent)
640
+ needs = parent.createNvBlockNeeds(self.getShortName(child_element))
641
+ self.readNvBlockNeeds(child_element, needs)
520
642
  elif tag_name == "DIAGNOSTIC-COMMUNICATION-MANAGER-NEEDS":
521
- self.reaDiagnosticCommunicationManagerNeeds(child_element, parent)
643
+ needs = parent.createDiagnosticCommunicationManagerNeeds(self.getShortName(child_element))
644
+ self.reaDiagnosticCommunicationManagerNeeds(child_element, needs)
522
645
  elif tag_name == "DIAGNOSTIC-ROUTINE-NEEDS":
523
- self.readDiagnosticRoutineNeeds(child_element, parent)
646
+ needs = parent.createDiagnosticRoutineNeeds(self.getShortName(child_element))
647
+ self.readDiagnosticRoutineNeeds(child_element, needs)
524
648
  elif tag_name == "DIAGNOSTIC-VALUE-NEEDS":
525
- self.readDiagnosticValueNeeds(child_element, parent)
649
+ needs = parent.createDiagnosticValueNeeds(self.getShortName(child_element))
650
+ self.readDiagnosticValueNeeds(child_element, needs)
526
651
  elif tag_name == "DIAGNOSTIC-EVENT-NEEDS":
527
- self.readDiagnosticEventNeeds(child_element, parent)
652
+ needs = parent.createDiagnosticEventNeeds(self.getShortName(child_element))
653
+ self.readDiagnosticEventNeeds(child_element, needs)
528
654
  elif tag_name == "DIAGNOSTIC-EVENT-INFO-NEEDS":
529
- self.readDiagnosticEventInfoNeeds(child_element, parent)
655
+ needs = parent.createDiagnosticEventInfoNeeds(self.getShortName(child_element))
656
+ self.readDiagnosticEventInfoNeeds(child_element, needs)
530
657
  elif tag_name == "CRYPTO-SERVICE-NEEDS":
531
- self.readCryptoServiceNeeds(child_element, parent)
658
+ needs = parent.createCryptoServiceNeeds(self.getShortName(child_element))
659
+ self.readCryptoServiceNeeds(child_element, needs)
532
660
  elif tag_name == "ECU-STATE-MGR-USER-NEEDS":
533
- self.readEcuStateMgrUserNeeds(child_element, parent)
661
+ needs = parent.createEcuStateMgrUserNeeds(self.getShortName(child_element))
662
+ self.readEcuStateMgrUserNeeds(child_element, needs)
534
663
  else:
535
664
  self.notImplemented("Unsupported service needs <%s>" % tag_name)
536
665
 
@@ -573,28 +702,47 @@ class ARXMLParser(AbstractARXMLParser):
573
702
  prototype = behavior.createSharedParameter(short_name)
574
703
  self.readParameterDataPrototype(child_element, prototype)
575
704
 
576
- def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
577
- for child_element in self.findall(element, "INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
578
- short_name = self.getShortName(child_element)
579
- behavior = parent.createSwcInternalBehavior(short_name)
580
- self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
705
+ def readIncludedModeDeclarationGroupSet(self, element: ET.Element, group_set: IncludedModeDeclarationGroupSet):
706
+ for ref in self.getChildElementRefTypeList(element, "MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
707
+ group_set.addModeDeclarationGroupRef(ref)
708
+ group_set.setPrefix(self.getChildElementOptionalLiteral(element, "PREFIX"))
581
709
 
582
- # read the internal behavior
583
- self.readInternalBehavior(child_element, behavior)
584
-
585
- # read the extra SwcInternalBehavior
586
- self.readSwcInternalBehaviorArTypedPerInstanceMemories(child_element, behavior)
587
- self.readSwcInternalBehaviorRunnables(child_element, behavior)
588
- self.readSwcInternalBehaviorEvents(child_element, behavior)
589
- self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
590
- self.readExplicitInterRunnableVariables(child_element, behavior)
591
-
592
- behavior.setHandleTerminationAndRestart(self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART"))
593
- self.readPerInstanceMemories(child_element, behavior)
594
- self.readPerInstanceParameters(child_element, behavior)
595
- self.readPortAPIOptions(child_element, behavior)
596
- self.readSwcInternalBehaviorSharedParameters(child_element, behavior)
597
- behavior.setSupportsMultipleInstantiation(self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION"))
710
+ def readSwcInternalBehaviorIncludedModeDeclarationGroupSets(self, element: ET.Element, behavior: SwcInternalBehavior):
711
+ for child_element in self.findall(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS/*"):
712
+ tag_name = self.getTagName(child_element)
713
+ if tag_name == "INCLUDED-MODE-DECLARATION-GROUP-SET":
714
+ group_set = IncludedModeDeclarationGroupSet()
715
+ self.readIncludedModeDeclarationGroupSet(child_element, group_set)
716
+ behavior.addIncludedModeDeclarationGroupSet(group_set)
717
+ else:
718
+ self.notImplemented("Unsupported IncludedModeDeclarationGroupSet <%s>" % tag_name)
719
+
720
+ def readSwcInternalBehavior(self, element: ET.Element, behavior: SwcInternalBehavior):
721
+ # read the internal behavior
722
+ self.readInternalBehavior(element, behavior)
723
+
724
+ # read the extra SwcInternalBehavior
725
+ self.readSwcInternalBehaviorArTypedPerInstanceMemories(element, behavior)
726
+ self.readSwcInternalBehaviorEvents(element, behavior)
727
+ self.readSwcInternalBehaviorExplicitInterRunnableVariables(element, behavior)
728
+ behavior.setHandleTerminationAndRestart(self.getChildElementOptionalLiteral(element, "HANDLE-TERMINATION-AND-RESTART"))
729
+ self.readSwcInternalBehaviorIncludedModeDeclarationGroupSets(element, behavior)
730
+ self.readSwcInternalBehaviorPerInstanceMemories(element, behavior)
731
+ self.readSwcInternalBehaviorPerInstanceParameters(element, behavior)
732
+ self.readSwcInternalBehaviorPortAPIOptions(element, behavior)
733
+ self.readSwcInternalBehaviorRunnables(element, behavior)
734
+ self.readSwcInternalBehaviorServiceDependencies(element, behavior)
735
+ self.readSwcInternalBehaviorSharedParameters(element, behavior)
736
+ behavior.setSupportsMultipleInstantiation(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-MULTIPLE-INSTANTIATION"))
737
+
738
+ def readAtomicSwComponentTypeSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
739
+ for child_element in self.findall(element, "INTERNAL-BEHAVIORS/*"):
740
+ tag_name = self.getTagName(child_element)
741
+ if tag_name == "SWC-INTERNAL-BEHAVIOR":
742
+ behavior = parent.createSwcInternalBehavior(self.getShortName(child_element))
743
+ self.readSwcInternalBehavior(child_element, behavior)
744
+ else:
745
+ self.notImplemented("Unsupported Internal Behaviors <%s>" % tag_name)
598
746
 
599
747
  def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
600
748
  group_sets = []
@@ -605,10 +753,39 @@ class ARXMLParser(AbstractARXMLParser):
605
753
  group_sets.append(group_set)
606
754
  return group_sets
607
755
 
756
+ def readBswVariableAccess(self, element: ET.Element, access: BswVariableAccess):
757
+ self.readReferrable(element, access)
758
+ access.setAccessedVariableRef(self.getChildElementOptionalRefType(element, "ACCESSED-VARIABLE-REF"))
759
+
760
+ def readBswModuleEntityDataSendPoints(self, element: ET.Element, entity: BswModuleEntity):
761
+ for child_element in self.findall(element, "DATA-SEND-POINTS/*"):
762
+ tag_name = self.getTagName(child_element)
763
+ if tag_name == "BSW-VARIABLE-ACCESS":
764
+ point = entity.createDataSendPoint(self.getShortName(child_element))
765
+ self.readBswVariableAccess(child_element, point)
766
+ else:
767
+ self.notImplemented("Unsupported Data Send Point <%s>" % tag_name)
768
+
769
+ def readBswModuleEntityDataReceiverPoints(self, element: ET.Element, entity: BswModuleEntity):
770
+ for child_element in self.findall(element, "DATA-RECEIVE-POINTS/*"):
771
+ tag_name = self.getTagName(child_element)
772
+ if tag_name == "BSW-VARIABLE-ACCESS":
773
+ point = entity.createDataReceivePoint(self.getShortName(child_element))
774
+ self.readBswVariableAccess(child_element, point)
775
+ else:
776
+ self.notImplemented("Unsupported Data Receive Point <%s>" % tag_name)
777
+
778
+ def readBswModuleEntityIssuedTriggerRefs(self, element: ET.Element, entity: BswModuleEntity):
779
+ for ref in self.getChildElementRefTypeList(element, "ISSUED-TRIGGERS/TRIGGER-REF-CONDITIONAL/TRIGGER-REF"):
780
+ entity.addIssuedTriggerRef(ref)
781
+
608
782
  def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
609
783
  self.readExecutableEntity(element, entity)
784
+ self.readBswModuleEntityDataReceiverPoints(element, entity)
785
+ self.readBswModuleEntityDataSendPoints(element, entity)
610
786
  entity.setImplementedEntryRef(self.getChildElementRefType(entity.getShortName(), element, "IMPLEMENTED-ENTRY-REF"))
611
- self.readBswModuleEntityManagedModeGroup(element, entity)
787
+ self.readBswModuleEntityManagedModeGroups(element, entity)
788
+ self.readBswModuleEntityIssuedTriggerRefs(element, entity)
612
789
 
613
790
  def readBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
614
791
  self.logger.debug("read BswCalledEntity %s" % entity.getShortName())
@@ -630,7 +807,7 @@ class ARXMLParser(AbstractARXMLParser):
630
807
  if tag_name == "BSW-CALLED-ENTITY":
631
808
  entity = behavior.createBswCalledEntity(self.getShortName(child_element))
632
809
  self.readBswCalledEntity(child_element, entity)
633
- elif tag_name == "BSW-SCHEDULABLE-ENTITY":
810
+ elif tag_name == "BSW-SCHEDULABLE-ENTITY":
634
811
  entity = behavior.createBswSchedulableEntity(self.getShortName(child_element))
635
812
  self.readBswSchedulableEntity(child_element, entity)
636
813
  elif tag_name == "BSW-INTERRUPT-ENTITY":
@@ -639,13 +816,24 @@ class ARXMLParser(AbstractARXMLParser):
639
816
  else:
640
817
  self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
641
818
 
819
+ def readBswBackgroundEvent(self, element: ET.Element, event: BswBackgroundEvent):
820
+ self.readBswScheduleEvent(element, event)
821
+
822
+ def readBswExternalTriggerOccurredEvent(self, element: ET.Element, event: BswExternalTriggerOccurredEvent):
823
+ self.readBswScheduleEvent(element, event)
824
+ event.setTriggerRef(self.getChildElementOptionalRefType(element, "TRIGGER-REF"))
825
+
826
+ def readBswOperationInvokedEvent(self, element: ET.Element, event: BswOperationInvokedEvent):
827
+ self.readBswEvent(element, event)
828
+ event.setEntryRef(self.getChildElementOptionalRefType(element, "ENTRY-REF"))
829
+
642
830
  def readBswInternalBehaviorEvents(self, element: ET.Element, behavior: BswInternalBehavior):
643
831
  for child_element in self.findall(element, "EVENTS/*"):
644
832
  tag_name = self.getTagName(child_element)
645
833
  if tag_name == "BSW-MODE-SWITCH-EVENT":
646
834
  event = behavior.createBswModeSwitchEvent(self.getShortName(child_element))
647
835
  self.readBswModeSwitchEvent(child_element, event)
648
- elif tag_name == "BSW-TIMING-EVENT":
836
+ elif tag_name == "BSW-TIMING-EVENT":
649
837
  event = behavior.createBswTimingEvent(self.getShortName(child_element))
650
838
  self.readBswTimingEvent(child_element, event)
651
839
  elif tag_name == "BSW-DATA-RECEIVED-EVENT":
@@ -654,35 +842,116 @@ class ARXMLParser(AbstractARXMLParser):
654
842
  elif tag_name == "BSW-INTERNAL-TRIGGER-OCCURRED-EVENT":
655
843
  event = behavior.createBswInternalTriggerOccurredEvent(self.getShortName(child_element))
656
844
  self.readBswInternalTriggerOccurredEvent(child_element, event)
845
+ elif tag_name == "BSW-BACKGROUND-EVENT":
846
+ event = behavior.createBswBackgroundEvent(self.getShortName(child_element))
847
+ self.readBswBackgroundEvent(child_element, event)
848
+ elif tag_name == "BSW-EXTERNAL-TRIGGER-OCCURRED-EVENT":
849
+ event = behavior.createBswExternalTriggerOccurredEvent(self.getShortName(child_element))
850
+ self.readBswExternalTriggerOccurredEvent(child_element, event)
851
+ elif tag_name == "BSW-OPERATION-INVOKED-EVENT":
852
+ event = behavior.createBswOperationInvokedEvent(self.getShortName(child_element))
853
+ self.readBswOperationInvokedEvent(child_element, event)
657
854
  else:
658
855
  self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
659
856
 
660
- def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
661
- for child_element in self.findall(element, "INTERNAL-BEHAVIORS/BSW-INTERNAL-BEHAVIOR"):
662
- short_name = self.getShortName(child_element)
663
- behavior = parent.createBswInternalBehavior(short_name)
664
- self.logger.debug("read BswInternalBehavior %s" % behavior.full_name)
665
-
666
- # read the internal behavior
667
- self.readInternalBehavior(child_element, behavior)
668
- self.readBswInternalBehaviorEntities(child_element, behavior)
669
- self.readBswInternalBehaviorEvents(child_element, behavior)
670
- self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
671
- for group_set in self.getIncludedModeDeclarationGroupSets(child_element):
672
- behavior.addIncludedModeDeclarationGroupSet(group_set)
857
+ def readBswApiOptions(self, element: ET.Element, options: BswApiOptions):
858
+ self.readARObjectAttributes(element, options)
859
+ options.setEnableTakeAddress(self.getChildElementOptionalBooleanValue(element, "ENABLE-TAKE-ADDRESS"))
860
+
861
+ def readBswDataReceptionPolicy(self, element: ET.Element, policy: BswDataReceptionPolicy):
862
+ self.readBswApiOptions(element, policy)
863
+ policy.setReceivedDataRef(self.getChildElementOptionalRefType(element, "RECEIVED-DATA-REF"))
864
+
865
+ def readBswQueuedDataReceptionPolicy(self, element: ET.Element, policy: BswQueuedDataReceptionPolicy):
866
+ self.readBswDataReceptionPolicy(element, policy)
867
+ policy.setQueueLength(self.getChildElementOptionalPositiveInteger(element, "QUEUE-LENGTH"))
868
+
869
+ def readBswInternalBehaviorReceptionPolicies(self, element: ET.Element, behavior: BswInternalBehavior):
870
+ for child_element in self.findall(element, "RECEPTION-POLICYS/*"):
871
+ tag_name = self.getTagName(child_element)
872
+ if tag_name == "BSW-QUEUED-DATA-RECEPTION-POLICY":
873
+ policy = BswQueuedDataReceptionPolicy()
874
+ self.readBswQueuedDataReceptionPolicy(child_element, policy)
875
+ behavior.addReceptionPolicy(policy)
876
+ else:
877
+ self.notImplemented("Unsupported Reception Policies <%s>" % tag_name)
878
+
879
+ def readBswInternalBehavior(self, element: ET.Element, behavior: BswInternalBehavior):
880
+ self.logger.debug("Read BswInternalBehavior <%s>" % behavior.full_name)
881
+
882
+ # read the internal behavior
883
+ self.readInternalBehavior(element, behavior)
884
+ self.readBswInternalBehaviorEntities(element, behavior)
885
+ self.readBswInternalBehaviorEvents(element, behavior)
886
+ self.readBswInternalBehaviorModeSenderPolicy(element, behavior)
887
+ for group_set in self.getIncludedModeDeclarationGroupSets(element):
888
+ behavior.addIncludedModeDeclarationGroupSet(group_set)
889
+ self.readBswInternalBehaviorReceptionPolicies(element, behavior)
890
+
891
+ def readBswModuleDescriptionBswInternalBehaviors(self, element: ET.Element, desc: BswModuleDescription):
892
+ for child_element in self.findall(element, "INTERNAL-BEHAVIORS/*"):
893
+ tag_name = self.getTagName(child_element)
894
+ if tag_name == "BSW-INTERNAL-BEHAVIOR":
895
+ behavior = desc.createBswInternalBehavior(self.getShortName(child_element))
896
+ self.readBswInternalBehavior(child_element, behavior)
897
+ else:
898
+ self.notImplemented("Unsupported Internal Behavior <%s>" % tag_name)
899
+
900
+ def readTrigger(self, element: ET.Element, trigger: Trigger):
901
+ self.readIdentifiable(element, trigger)
902
+
903
+ def readBswModuleDescriptionReleasedTriggers(self, element: ET.Element, desc: BswModuleDescription):
904
+ for child_element in self.findall(element, "RELEASED-TRIGGERS/*"):
905
+ tag_name = self.getTagName(child_element)
906
+ if tag_name == "TRIGGER":
907
+ trigger = desc.createReleasedTrigger(self.getShortName(child_element))
908
+ self.readTrigger(child_element, trigger)
909
+ else:
910
+ self.notImplemented("Unsupported Released Trigger <%s>" % tag_name)
911
+
912
+ def readBswModuleDescriptionRequiredTriggers(self, element: ET.Element, desc: BswModuleDescription):
913
+ for child_element in self.findall(element, "REQUIRED-TRIGGERS/*"):
914
+ tag_name = self.getTagName(child_element)
915
+ if tag_name == "TRIGGER":
916
+ trigger = desc.createRequiredTrigger(self.getShortName(child_element))
917
+ self.readTrigger(child_element, trigger)
918
+ else:
919
+ self.notImplemented("Unsupported Required Trigger <%s>" % tag_name)
920
+
921
+ def readBswModuleDescriptionProvidedDatas(self, element: ET.Element, desc: BswModuleDescription):
922
+ for child_element in self.findall(element, "PROVIDED-DATAS/*"):
923
+ tag_name = self.getTagName(child_element)
924
+ if tag_name == "VARIABLE-DATA-PROTOTYPE":
925
+ data = desc.createProvidedData(self.getShortName(child_element))
926
+ self.readVariableDataPrototype(child_element, data)
927
+ else:
928
+ self.notImplemented("Unsupported Provided Data <%s>" % tag_name)
929
+
930
+ def readBswModuleDescriptionRequiredDatas(self, element: ET.Element, desc: BswModuleDescription):
931
+ for child_element in self.findall(element, "REQUIRED-DATAS/*"):
932
+ tag_name = self.getTagName(child_element)
933
+ if tag_name == "VARIABLE-DATA-PROTOTYPE":
934
+ data = desc.createRequiredData(self.getShortName(child_element))
935
+ self.readVariableDataPrototype(child_element, data)
936
+ else:
937
+ self.notImplemented("Unsupported Required Data <%s>" % tag_name)
673
938
 
674
939
  def readBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
675
940
  self.logger.debug("Read BswModuleDescription <%s>" % desc.getShortName())
676
941
 
677
942
  self.readIdentifiable(element, desc)
678
943
  desc.setModuleId(self.getChildElementOptionalNumericalValue(element, "MODULE-ID"))
679
- self.readBswModuleDescriptionImplementedEntry(element, desc)
680
- self.readProvidedModeGroup(element, desc)
681
- self.readRequiredModeGroup(element, desc)
682
- self.readBswInternalBehavior(element, desc)
944
+ self.readBswModuleDescriptionImplementedEntryRefs(element, desc)
945
+ self.readBswModuleDescriptionProvidedModeGroups(element, desc)
946
+ self.readBswModuleDescriptionRequiredModeGroups(element, desc)
947
+ self.readBswModuleDescriptionReleasedTriggers(element, desc)
948
+ self.readBswModuleDescriptionRequiredTriggers(element, desc)
949
+ self.readBswModuleDescriptionProvidedDatas(element, desc)
950
+ self.readBswModuleDescriptionRequiredDatas(element, desc)
951
+ self.readBswModuleDescriptionBswInternalBehaviors(element, desc)
683
952
 
684
953
  def readSwServiceArg(self, element: ET.Element, arg: SwServiceArg):
685
- self.logger.debug("Read SwServiceArg <%s>" % arg.getShortName())
954
+ self.readIdentifiable(element, arg)
686
955
  arg.setDirection(self.getChildElementOptionalLiteral(element, "DIRECTION")) \
687
956
  .setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
688
957
 
@@ -746,7 +1015,7 @@ class ARXMLParser(AbstractARXMLParser):
746
1015
  memory_section = consumption.createMemorySection(self.getShortName(child_element))
747
1016
  self.readIdentifiable(child_element, memory_section)
748
1017
  memory_section.setAlignment(self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")) \
749
- .setMemClassSymbol(self.getChildElementOptionalLiteral(child_element, "MEM-CLASS-SYMBOL"))
1018
+ .setMemClassSymbol(self.getChildElementOptionalLiteral(child_element, "MEM-CLASS-SYMBOL"))
750
1019
  self.readMemorySectionOptions(child_element, memory_section)
751
1020
  memory_section.setSize(self.getChildElementOptionalNumericalValue(child_element, "SIZE")) \
752
1021
  .setSwAddrMethodRef(self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")) \
@@ -798,27 +1067,30 @@ class ARXMLParser(AbstractARXMLParser):
798
1067
  self.logger.debug("Read BswImplementation <%s>" % impl.getShortName())
799
1068
  self.readImplementation(element, impl)
800
1069
  impl.setArReleaseVersion(self.getChildElementOptionalLiteral(element, "AR-RELEASE-VERSION")) \
801
- .setBehaviorRef(self.getChildElementOptionalRefType(element, "BEHAVIOR-REF"))
1070
+ .setBehaviorRef(self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")) \
1071
+ .setVendorApiInfix(self.getChildElementOptionalLiteral(element, "VENDOR-API-INFIX"))
802
1072
  self.readBswImplementationVendorSpecificModuleDefRefs(element, impl)
1073
+ AUTOSAR.getInstance().addImplementationBehaviorMap(impl.getFullName(), impl.getBehaviorRef().getValue())
803
1074
 
804
1075
  def readSwcImplementation(self, element: ET.Element, impl: SwcImplementation):
805
1076
  self.logger.debug("Read SwcImplementation <%s>" % impl.getShortName())
806
1077
  self.readImplementation(element, impl)
807
1078
  impl.setBehaviorRef(self.getChildElementOptionalRefType(element, "BEHAVIOR-REF"))
1079
+ AUTOSAR.getInstance().addImplementationBehaviorMap(impl.getFullName(), impl.getBehaviorRef().getValue())
808
1080
 
809
- def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
1081
+ def readRunnableEntityDataReceivePointByArguments(self, element, parent: RunnableEntity):
810
1082
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
811
1083
 
812
- def readDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
1084
+ def readRunnableEntityDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
813
1085
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-VALUES")
814
1086
 
815
- def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
1087
+ def readRunnableEntityDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
816
1088
  self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
817
1089
 
818
- def readDataWriteAccesses(self, element: ET.Element, parent: RunnableEntity):
1090
+ def readRunnableEntityDataWriteAccesses(self, element: ET.Element, parent: RunnableEntity):
819
1091
  self._readVariableAccesses(element, parent, "DATA-WRITE-ACCESSS")
820
1092
 
821
- def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
1093
+ def readRunnableEntityDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
822
1094
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
823
1095
 
824
1096
  def getRunnableEntityArgument(self, element: ET.Element) -> RunnableEntityArgument:
@@ -834,17 +1106,17 @@ class ARXMLParser(AbstractARXMLParser):
834
1106
  parameter.setLocalParameterRef(self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF"))
835
1107
  return parameter
836
1108
 
837
- def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
1109
+ def readRunnableEntityParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
838
1110
  for child_element in self.findall(element, "PARAMETER-ACCESSS/PARAMETER-ACCESS"):
839
1111
  short_name = self.getShortName(child_element)
840
1112
  self.logger.debug("readParameterAccesses %s" % short_name)
841
1113
  parameter_access = parent.createParameterAccess(short_name)
842
1114
  parameter_access.setAccessedParameter(self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER"))
843
1115
 
844
- def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
1116
+ def readRunnableEntityWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
845
1117
  self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
846
1118
 
847
- def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
1119
+ def readRunnableEntityReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
848
1120
  self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
849
1121
 
850
1122
  def readROperationIRef(self, element: ET.Element, key: str, parent: ServerCallPoint):
@@ -869,7 +1141,7 @@ class ARXMLParser(AbstractARXMLParser):
869
1141
  mode_iref = RModeInAtomicSwcInstanceRef()
870
1142
  mode_iref.setContextPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")) \
871
1143
  .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
872
- .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF"))
1144
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF")) # NOQA E501
873
1145
  parent.addModeIRef(mode_iref)
874
1146
 
875
1147
  def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
@@ -888,7 +1160,7 @@ class ARXMLParser(AbstractARXMLParser):
888
1160
  server_call_point.setTimeout(self.getChildElementOptionalFloatValue(element, "TIMEOUT"))
889
1161
  self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
890
1162
 
891
- def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
1163
+ def readRunnableEntityInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
892
1164
  for child_element in self.findall(element, "SERVER-CALL-POINTS/*"):
893
1165
  tag_name = self.getTagName(child_element)
894
1166
  if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
@@ -898,48 +1170,73 @@ class ARXMLParser(AbstractARXMLParser):
898
1170
  else:
899
1171
  self.raiseError("Unsupported server call point type <%s>" % tag_name)
900
1172
 
901
- def readInternalTriggeringPoints(self, element: ET.Element, parent: RunnableEntity):
1173
+ def readRunnableEntityInternalTriggeringPoints(self, element: ET.Element, parent: RunnableEntity):
902
1174
  for child_element in self.findall(element, "INTERNAL-TRIGGERING-POINTS/INTERNAL-TRIGGERING-POINT"):
903
1175
  short_name = self.getShortName(child_element)
904
1176
  point = parent.createInternalTriggeringPoint(short_name)
905
1177
  point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
906
1178
 
907
- def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
908
- iref = RModeInAtomicSwcInstanceRef()
909
- iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
910
- .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
911
- .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
912
- .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
913
- return iref
914
-
915
- def getRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> RModeGroupInAtomicSWCInstanceRef:
916
- child_element = self.find(element, "MODE-GROUP-IREF/R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
917
- iref = None
918
- if child_element is not None:
919
- iref = RModeGroupInAtomicSWCInstanceRef()
920
- iref.setContextRPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")) \
921
- .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
922
- return iref
923
-
924
- def getPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> PModeGroupInAtomicSwcInstanceRef:
1179
+ def readModeGroupInAtomicSwcInstanceRef(self, element: ET.Element, instance_ref: ModeGroupInAtomicSwcInstanceRef):
1180
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
1181
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF"))
1182
+
1183
+ def readRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, instance_ref: RModeGroupInAtomicSWCInstanceRef):
1184
+ self.readModeGroupInAtomicSwcInstanceRef(element, instance_ref)
1185
+ instance_ref.setContextRPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-R-PORT-REF")) \
1186
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-GROUP-REF"))
1187
+
1188
+ def readPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, instance_ref: PModeGroupInAtomicSwcInstanceRef):
1189
+ self.readModeGroupInAtomicSwcInstanceRef(element, instance_ref)
1190
+ instance_ref.setContextPPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-P-PORT-REF")) \
1191
+ .setTargetModeGroupRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-GROUP-REF"))
1192
+
1193
+ def getModeGroupIRef(self, element: ET.Element, key: str) -> ModeGroupInAtomicSwcInstanceRef:
1194
+ instance_ref = None
1195
+ for child_element in self.findall(element, "%s/*" % key):
1196
+ tag_name = self.getTagName(child_element)
1197
+ if tag_name == "P-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF":
1198
+ instance_ref = PModeGroupInAtomicSwcInstanceRef()
1199
+ self.readPModeGroupInAtomicSWCInstanceRef(child_element, instance_ref)
1200
+ elif tag_name == "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF":
1201
+ instance_ref = RModeGroupInAtomicSWCInstanceRef()
1202
+ self.readRModeGroupInAtomicSWCInstanceRef(child_element, instance_ref)
1203
+ else:
1204
+ self.notImplemented("Unsupported Mode Group IRef <%s>" % tag_name)
1205
+ return instance_ref
1206
+
1207
+ def readModeAccessPoint(self, element: ET.Element, point: ModeAccessPoint):
1208
+ self.readARObjectAttributes(element, point)
1209
+ point.setModeGroupIRef(self.getModeGroupIRef(element, "MODE-GROUP-IREF"))
1210
+
1211
+ def readRunnableEntityModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
1212
+ for child_element in self.findall(element, "MODE-ACCESS-POINTS/*"):
1213
+ tag_name = self.getTagName(child_element)
1214
+ if tag_name == "MODE-ACCESS-POINT":
1215
+ point = ModeAccessPoint()
1216
+ self.readModeAccessPoint(child_element, point)
1217
+ entity.addModeAccessPoint(point)
1218
+ else:
1219
+ self.notImplemented("Unsupported Mode Access Point <%s>" % tag_name)
1220
+
1221
+ def readModeSwitchPointModeGroupIRef(self, element: ET.Element, point: ModeSwitchPoint):
925
1222
  child_element = self.find(element, "MODE-GROUP-IREF")
926
- iref = None
927
1223
  if child_element is not None:
928
- iref = PModeGroupInAtomicSwcInstanceRef()
929
- iref.setContextPPortRef(self.getChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF")) \
930
- .setTargetModeGroupRef(self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF"))
931
- return iref
1224
+ instance_ref = PModeGroupInAtomicSwcInstanceRef()
1225
+ self.readPModeGroupInAtomicSWCInstanceRef(child_element, instance_ref)
1226
+ point.setModeGroupIRef(instance_ref)
932
1227
 
933
- def readModeAccessPoints(self, element: ET.Element, parent: RunnableEntity):
934
- for child_element in self.findall(element, "MODE-ACCESS-POINTS/MODE-ACCESS-POINT"):
935
- point = ModeAccessPoint()
936
- point.setModeGroupIRef(self.getRModeGroupInAtomicSWCInstanceRef(child_element))
937
- parent.addModeAccessPoint(point)
938
-
939
- def readModeSwitchPoints(self, element: ET.Element, parent: RunnableEntity):
940
- for child_element in self.findall(element, "MODE-SWITCH-POINTS/MODE-SWITCH-POINT"):
941
- point = parent.createModeSwitchPoint(self.getShortName(child_element))
942
- point.setModeGroupIRef(self.getPModeGroupInAtomicSWCInstanceRef(child_element))
1228
+ def readModeSwitchPoint(self, element: ET.Element, point: ModeSwitchPoint):
1229
+ self.readARObjectAttributes(element, point)
1230
+ self.readModeSwitchPointModeGroupIRef(element, point)
1231
+
1232
+ def readRunnableEntityModeSwitchPoints(self, element: ET.Element, parent: RunnableEntity):
1233
+ for child_element in self.findall(element, "MODE-SWITCH-POINTS/*"):
1234
+ tag_name = self.getTagName(child_element)
1235
+ if tag_name == "MODE-SWITCH-POINT":
1236
+ point = parent.createModeSwitchPoint(self.getShortName(child_element))
1237
+ self.readModeSwitchPoint(child_element, point)
1238
+ else:
1239
+ self.notImplemented("Unsupported Mode Switch Point <%s>" % tag_name)
943
1240
 
944
1241
  def readRunnableEntityArguments(self, element: ET.Element, entity: RunnableEntity):
945
1242
  for child_element in self.findall(element, "ARGUMENTS/*"):
@@ -949,7 +1246,7 @@ class ARXMLParser(AbstractARXMLParser):
949
1246
  else:
950
1247
  self.notImplemented("Unsupported Arguments of runnable entity <%s>" % tag_name)
951
1248
 
952
- def readAsynchronousServerCallResultPoint(self, element: ET.Element, entity: RunnableEntity):
1249
+ def readRunnableEntityAsynchronousServerCallResultPoint(self, element: ET.Element, entity: RunnableEntity):
953
1250
  for child_element in self.findall(element, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINTS/ASYNCHRONOUS-SERVER-CALL-RESULT-POINT"):
954
1251
  point = entity.createAsynchronousServerCallResultPoint(self.getShortName(child_element))
955
1252
  self.readIdentifiable(child_element, point)
@@ -959,38 +1256,39 @@ class ARXMLParser(AbstractARXMLParser):
959
1256
  self.readExecutableEntity(element, entity)
960
1257
  self.readRunnableEntityArguments(element, entity)
961
1258
 
962
- self.readAsynchronousServerCallResultPoint(element, entity)
1259
+ self.readRunnableEntityAsynchronousServerCallResultPoint(element, entity)
963
1260
  entity.setCanBeInvokedConcurrently(self.getChildElementOptionalBooleanValue(element, "CAN-BE-INVOKED-CONCURRENTLY"))
964
- self.readDataReadAccesses(element, entity)
965
- self.readDataReceivePointByArguments(element, entity)
966
- self.readDataReceivePointByValues(element, entity)
967
- self.readDataWriteAccesses(element, entity)
968
- self.readDataSendPoints(element, entity)
969
- self.readInternalBehaviorServerCallPoint(element, entity)
970
- self.readInternalTriggeringPoints(element, entity)
971
- self.readModeAccessPoints(element, entity)
972
- self.readModeSwitchPoints(element, entity)
973
- self.readParameterAccesses(element, entity)
974
- self.readReadLocalVariables(element, entity)
975
- self.readWrittenLocalVariables(element, entity)
1261
+ self.readRunnableEntityDataReadAccesses(element, entity)
1262
+ self.readRunnableEntityDataReceivePointByArguments(element, entity)
1263
+ self.readRunnableEntityDataReceivePointByValues(element, entity)
1264
+ self.readRunnableEntityDataWriteAccesses(element, entity)
1265
+ self.readRunnableEntityDataSendPoints(element, entity)
1266
+ self.readRunnableEntityInternalBehaviorServerCallPoint(element, entity)
1267
+ self.readRunnableEntityInternalTriggeringPoints(element, entity)
1268
+ self.readRunnableEntityModeAccessPoints(element, entity)
1269
+ self.readRunnableEntityModeSwitchPoints(element, entity)
1270
+ self.readRunnableEntityParameterAccesses(element, entity)
1271
+ self.readRunnableEntityReadLocalVariables(element, entity)
1272
+ self.readRunnableEntityWrittenLocalVariables(element, entity)
976
1273
 
977
1274
  entity.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
978
1275
 
979
1276
  def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
980
- for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
981
- short_name = self.getShortName(child_element)
982
- entity = parent.createRunnableEntity(short_name)
983
- self.logger.debug("readRunnableEntities %s" % short_name)
984
-
985
- self.readRunnableEntity(child_element, entity)
1277
+ for child_element in self.findall(element, "RUNNABLES/*"):
1278
+ tag_name = self.getTagName(child_element)
1279
+ if tag_name == "RUNNABLE-ENTITY":
1280
+ entity = parent.createRunnableEntity(self.getShortName(child_element))
1281
+ self.readRunnableEntity(child_element, entity)
1282
+ else:
1283
+ self.notImplemented("Unsupported Runnables <%s>" % tag_name)
986
1284
 
987
1285
  def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
988
- iref = RModeInAtomicSwcInstanceRef()
989
- iref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
1286
+ instance_ref = RModeInAtomicSwcInstanceRef()
1287
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(element, "BASE-REF")) \
990
1288
  .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
991
1289
  .setContextModeDeclarationGroupPrototypeRef(self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")) \
992
- .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF"))
993
- return iref
1290
+ .setTargetModeDeclarationRef(self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")) # NOQA E501
1291
+ return instance_ref
994
1292
 
995
1293
  def readRTEEvent(self, element: ET.Element, event: RTEEvent):
996
1294
  self.readIdentifiable(element, event)
@@ -1005,12 +1303,11 @@ class ARXMLParser(AbstractARXMLParser):
1005
1303
  operation_iref = POperationInAtomicSwcInstanceRef()
1006
1304
  self.readARObjectAttributes(child_element, operation_iref)
1007
1305
  operation_iref.setContextPPortRef(self.getChildElementRefType(parent.getShortName(), child_element, "CONTEXT-P-PORT-REF")) \
1008
- .setTargetProvidedOperationRef(self.getChildElementRefType(parent.getShortName(), child_element, "TARGET-PROVIDED-OPERATION-REF"))
1306
+ .setTargetProvidedOperationRef(self.getChildElementRefType(parent.getShortName(), child_element, "TARGET-PROVIDED-OPERATION-REF")) # NOQA E501
1009
1307
  parent.setOperationIRef(operation_iref)
1010
1308
 
1011
- def readOperationInvokedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
1012
- short_name = self.getShortName(element)
1013
- event = parent.createOperationInvokedEvent(short_name)
1309
+ def readOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
1310
+ self.logger.debug("Read OperationInvokedEvent <%s>" % event.getShortName())
1014
1311
  self.readPOperationIRef(element, "OPERATION-IREF", event)
1015
1312
  self.readRTEEvent(element, event)
1016
1313
 
@@ -1018,13 +1315,13 @@ class ARXMLParser(AbstractARXMLParser):
1018
1315
  self.readAutosarDataPrototype(element, prototype)
1019
1316
  prototype.setInitValue(self.getInitValue(element))
1020
1317
 
1021
- def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
1318
+ def readSwcInternalBehaviorExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
1022
1319
  for child_element in self.findall(element, "EXPLICIT-INTER-RUNNABLE-VARIABLES/VARIABLE-DATA-PROTOTYPE"):
1023
1320
  short_name = self.getShortName(child_element)
1024
1321
  prototype = parent.createExplicitInterRunnableVariable(short_name)
1025
1322
  self.readVariableDataPrototype(child_element, prototype)
1026
1323
 
1027
- def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
1324
+ def readSwcInternalBehaviorPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
1028
1325
  for child_element in self.findall(element, "PER-INSTANCE-MEMORYS/PER-INSTANCE-MEMORY"):
1029
1326
  short_name = self.getShortName(child_element)
1030
1327
  memory = behavior.createPerInstanceMemory(short_name)
@@ -1039,11 +1336,10 @@ class ARXMLParser(AbstractARXMLParser):
1039
1336
  prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
1040
1337
 
1041
1338
  def readParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1042
- self.readIdentifiable(element, prototype)
1043
1339
  self.readAutosarDataPrototype(element, prototype)
1044
1340
  prototype.setInitValue(self.getInitValue(element))
1045
1341
 
1046
- def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
1342
+ def readSwcInternalBehaviorPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
1047
1343
  for child_element in self.findall(element, "PER-INSTANCE-PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
1048
1344
  short_name = self.getShortName(child_element)
1049
1345
  prototype = behavior.createPerInstanceParameter(short_name)
@@ -1057,7 +1353,7 @@ class ARXMLParser(AbstractARXMLParser):
1057
1353
  argument_value.setValueTypeTRef(self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF"))
1058
1354
  return argument_value
1059
1355
 
1060
- def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
1356
+ def readSwcInternalBehaviorPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
1061
1357
  for child_element in self.findall(element, "PORT-API-OPTIONS/PORT-API-OPTION"):
1062
1358
  option = PortAPIOption()
1063
1359
  option.setEnableTakeAddress(self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")) \
@@ -1068,60 +1364,76 @@ class ARXMLParser(AbstractARXMLParser):
1068
1364
  option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
1069
1365
  behavior.addPortAPIOption(option)
1070
1366
 
1071
- def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
1072
- short_name = self.getShortName(element)
1073
- event = parent.createTimingEvent(short_name)
1367
+ def readTimingEvent(self, element: ET.Element, event: TimingEvent):
1368
+ self.logger.debug("Read TimingEvent <%s>" % event.getShortName())
1074
1369
  self.readRTEEvent(element, event)
1075
1370
  event.setOffset(self.getChildElementOptionalTimeValue(element, "OFFSET")) \
1076
1371
  .setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
1077
1372
 
1078
- def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
1079
- short_name = self.getShortName(element)
1080
- event = parent.createDataReceivedEvent(short_name)
1373
+ def readDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
1374
+ self.logger.debug("Read DataReceivedEvent <%s>" % event.getShortName())
1081
1375
  self.readRTEEvent(element, event)
1082
1376
  self.readRVariableInAtomicSwcInstanceRef(element, event)
1083
1377
 
1084
- def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
1085
- short_name = self.getShortName(element)
1086
- event = parent.createSwcModeSwitchEvent(short_name)
1378
+ def readSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
1379
+ self.logger.debug("Read SwcModeSwitchEvent <%s>" % event.getShortName())
1087
1380
  self.readRTEEvent(element, event)
1088
1381
  event.setActivation(self.getChildElementOptionalLiteral(element, "ACTIVATION"))
1089
1382
  self.readRModeInAtomicSwcInstanceRef(element, event)
1090
1383
 
1091
- def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
1092
- short_name = self.getShortName(element)
1093
- event = parent.createInternalTriggerOccurredEvent(short_name)
1384
+ def readInternalTriggerOccurredEvent(self, element: ET.Element, event: InternalTriggerOccurredEvent):
1385
+ self.logger.debug("Read InternalTriggerOccurredEvent <%s>" % event.getShortName())
1094
1386
  self.readRTEEvent(element, event)
1095
1387
  event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
1096
1388
 
1097
- def readInitEvent(self, element, parent: SwcInternalBehavior):
1098
- short_name = self.getShortName(element)
1099
- event = parent.createInitEvent(short_name)
1389
+ def readInitEvent(self, element, event: InitEvent):
1390
+ self.logger.debug("Read InitEvent <%s>" % event.getShortName())
1100
1391
  self.readRTEEvent(element, event)
1101
1392
 
1102
- def readAsynchronousServerCallReturnsEvent(self, element, parent: SwcInternalBehavior):
1103
- short_name = self.getShortName(element)
1104
- event = parent.createAsynchronousServerCallReturnsEvent(short_name)
1393
+ def readAsynchronousServerCallReturnsEvent(self, element, event: AsynchronousServerCallReturnsEvent):
1394
+ self.logger.debug("Read AsynchronousServerCallReturnsEvent <%s>" % event.getShortName())
1105
1395
  self.readRTEEvent(element, event)
1106
1396
  event.setActivationReasonRepresentationRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
1107
1397
 
1398
+ def readModeSwitchedAckEvent(self, element, event: ModeSwitchedAckEvent):
1399
+ self.logger.debug("Read ModeSwitchedAckEvent <%s>" % event.getShortName())
1400
+ self.readRTEEvent(element, event)
1401
+ event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
1402
+
1403
+ def readBackgroundEvent(self, element, event: BackgroundEvent):
1404
+ self.logger.debug("Read BackgroundEvent <%s>" % event.getShortName())
1405
+ self.readRTEEvent(element, event)
1406
+
1108
1407
  def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
1109
1408
  for child_element in self.findall(element, "EVENTS/*"):
1110
1409
  tag_name = self.getTagName(child_element)
1111
1410
  if tag_name == "TIMING-EVENT":
1112
- self.readTimingEvent(child_element, parent)
1411
+ event = parent.createTimingEvent(self.getShortName(child_element))
1412
+ self.readTimingEvent(child_element, event)
1113
1413
  elif tag_name == "SWC-MODE-SWITCH-EVENT":
1114
- self.readSwcModeSwitchEvent(child_element, parent)
1414
+ event = parent.createSwcModeSwitchEvent(self.getShortName(child_element))
1415
+ self.readSwcModeSwitchEvent(child_element, event)
1115
1416
  elif tag_name == "OPERATION-INVOKED-EVENT":
1116
- self.readOperationInvokedEvent(child_element, parent)
1417
+ event = parent.createOperationInvokedEvent(self.getShortName(child_element))
1418
+ self.readOperationInvokedEvent(child_element, event)
1117
1419
  elif tag_name == "DATA-RECEIVED-EVENT":
1118
- self.readDataReceivedEvent(child_element, parent)
1420
+ event = parent.createDataReceivedEvent(self.getShortName(child_element))
1421
+ self.readDataReceivedEvent(child_element, event)
1119
1422
  elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
1120
- self.readInternalTriggerOccurredEvent(child_element, parent)
1423
+ event = parent.createInternalTriggerOccurredEvent(self.getShortName(child_element))
1424
+ self.readInternalTriggerOccurredEvent(child_element, event)
1121
1425
  elif tag_name == "INIT-EVENT":
1122
- self.readInitEvent(child_element, parent)
1426
+ event = parent.createInitEvent(self.getShortName(child_element))
1427
+ self.readInitEvent(child_element, event)
1123
1428
  elif tag_name == "ASYNCHRONOUS-SERVER-CALL-RETURNS-EVENT":
1124
- self.readAsynchronousServerCallReturnsEvent(child_element, parent)
1429
+ event = parent.createAsynchronousServerCallReturnsEvent(self.getShortName(child_element))
1430
+ self.readAsynchronousServerCallReturnsEvent(child_element, event)
1431
+ elif tag_name == "MODE-SWITCHED-ACK-EVENT":
1432
+ event = parent.createModeSwitchedAckEvent(self.getShortName(child_element))
1433
+ self.readModeSwitchedAckEvent(child_element, event)
1434
+ elif tag_name == "BACKGROUND-EVENT":
1435
+ event = parent.createBackgroundEvent(self.getShortName(child_element))
1436
+ self.readBackgroundEvent(child_element, event)
1125
1437
  else:
1126
1438
  self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
1127
1439
 
@@ -1146,7 +1458,7 @@ class ARXMLParser(AbstractARXMLParser):
1146
1458
  self.readARObjectAttributes(element, specific)
1147
1459
  specific.value = element.text
1148
1460
  if 'L' in element.attrib:
1149
- specific.l = element.attrib['L']
1461
+ specific.l = element.attrib['L'] # noqa E741
1150
1462
 
1151
1463
  def getLParagraphs(self, element: ET.Element, key: str) -> List[LParagraph]:
1152
1464
  results = []
@@ -1155,7 +1467,7 @@ class ARXMLParser(AbstractARXMLParser):
1155
1467
  self.readLanguageSpecific(child_element, l1)
1156
1468
  results.append(l1)
1157
1469
  return results
1158
-
1470
+
1159
1471
  def getMultiLanguageParagraphs(self, element: ET.Element, key: str) -> List[MultiLanguageParagraph]:
1160
1472
  paragraphs = []
1161
1473
  for child_element in self.findall(element, key):
@@ -1186,7 +1498,7 @@ class ARXMLParser(AbstractARXMLParser):
1186
1498
  for block in self.getDocumentationBlockList(child_element, "ITEM"):
1187
1499
  list.addItem(block)
1188
1500
  result.append(list)
1189
- return result
1501
+ return result
1190
1502
 
1191
1503
  def getMultiLanguagePlainText(self, element: ET.Element, key: str) -> MultiLanguagePlainText:
1192
1504
  paragraph = None
@@ -1228,10 +1540,14 @@ class ARXMLParser(AbstractARXMLParser):
1228
1540
 
1229
1541
  def getAnnotations(self, element: ET.Element) -> List[Annotation]:
1230
1542
  annotations = []
1231
- for child_element in self.findall(element, "ANNOTATIONS/ANNOTATION"):
1232
- annotation = Annotation()
1233
- self.readGeneralAnnotation(child_element, annotation)
1234
- annotations.append(annotation)
1543
+ for child_element in self.findall(element, "ANNOTATIONS/*"):
1544
+ tag_name = self.getTagName(child_element)
1545
+ if tag_name == "ANNOTATION":
1546
+ annotation = Annotation()
1547
+ self.readGeneralAnnotation(child_element, annotation)
1548
+ annotations.append(annotation)
1549
+ else:
1550
+ self.notImplemented("Unsupported Annotation <%s>" % tag_name)
1235
1551
  return annotations
1236
1552
 
1237
1553
  def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
@@ -1300,12 +1616,12 @@ class ARXMLParser(AbstractARXMLParser):
1300
1616
  .setSwPointerTargetProps(self.getSwPointerTargetProps(conditional_tag, "SW-POINTER-TARGET-PROPS")) \
1301
1617
  .setSwRecordLayoutRef(self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")) \
1302
1618
  .setValueAxisDataTypeRef(self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")) \
1303
- .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1619
+ .setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
1304
1620
  self.readSwDataDefProsInvalidValue(conditional_tag, sw_data_def_props)
1305
- #self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1621
+ # self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
1306
1622
  self.readARObjectAttributes(conditional_tag, sw_data_def_props.conditional)
1307
1623
  return sw_data_def_props
1308
-
1624
+
1309
1625
  def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
1310
1626
  self.readIdentifiable(element, data_type)
1311
1627
  data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
@@ -1314,22 +1630,24 @@ class ARXMLParser(AbstractARXMLParser):
1314
1630
  self.logger.debug("Read ApplicationPrimitiveDataType <%s>" % data_type.getShortName())
1315
1631
  self.readAutosarDataType(element, data_type)
1316
1632
 
1317
- def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
1318
- prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
1633
+ def readApplicationRecordElement(self, element: ET.Element, record_element: ApplicationRecordElement):
1634
+ self.logger.debug("read ApplicationRecordElement %s" % record_element.getShortName())
1635
+ self.readApplicationCompositeElementDataPrototype(element, record_element)
1319
1636
 
1320
- def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
1321
- for child_element in self.findall(element, "ELEMENTS/APPLICATION-RECORD-ELEMENT"):
1322
- short_name = self.getShortName(child_element)
1323
- record_element = parent.createApplicationRecordElement(short_name)
1324
- self.logger.debug("readApplicationRecordElements %s" % short_name)
1325
- self.readIdentifiable(child_element, record_element)
1326
- self.readApplicationCompositeElementDataPrototype(child_element, record_element)
1637
+ def readApplicationRecordDataTypeElements(self, element: ET.Element, parent: ApplicationRecordDataType):
1638
+ for child_element in self.findall(element, "ELEMENTS/*"):
1639
+ tag_name = self.getTagName(child_element)
1640
+ if tag_name == "APPLICATION-RECORD-ELEMENT":
1641
+ record_element = parent.createApplicationRecordElement(self.getShortName(child_element))
1642
+ self.readApplicationRecordElement(child_element, record_element)
1643
+ else:
1644
+ self.notImplemented("Unsupported ApplicationRecordDataType Element <%s>" % tag_name)
1327
1645
 
1328
1646
  def readApplicationRecordDataType(self, element: ET.Element, data_type: ApplicationRecordDataType):
1329
1647
  self.logger.debug("Read ApplicationRecordDataType <%s>" % data_type.getShortName())
1330
1648
  self.readIdentifiable(element, data_type)
1331
1649
  data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
1332
- self.readApplicationRecordElements(element, data_type)
1650
+ self.readApplicationRecordDataTypeElements(element, data_type)
1333
1651
 
1334
1652
  def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
1335
1653
  for child_element in self.findall(element, "SUB-ELEMENTS/IMPLEMENTATION-DATA-TYPE-ELEMENT"):
@@ -1361,7 +1679,8 @@ class ARXMLParser(AbstractARXMLParser):
1361
1679
  self.readIdentifiable(element, data_type)
1362
1680
  self.readBaseTypeDirectDefinition(element, data_type.getBaseTypeDefinition())
1363
1681
 
1364
- def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
1682
+ def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key: str) \
1683
+ -> ApplicationCompositeElementInPortInterfaceInstanceRef:
1365
1684
  child_element = self.find(element, key)
1366
1685
  iref = None
1367
1686
  if child_element is not None:
@@ -1431,7 +1750,6 @@ class ARXMLParser(AbstractARXMLParser):
1431
1750
  value_spec = None
1432
1751
  child_element = self.find(element, "INIT-VALUE/*")
1433
1752
  if child_element is not None:
1434
- self.logger.debug("getInitValue")
1435
1753
  value_spec = self.getValueSpecification(child_element, self.getTagName(child_element))
1436
1754
  return value_spec
1437
1755
 
@@ -1465,7 +1783,7 @@ class ARXMLParser(AbstractARXMLParser):
1465
1783
 
1466
1784
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1467
1785
  com_spec = NonqueuedReceiverComSpec()
1468
- self.readARObjectAttributes(element, com_spec)
1786
+ self.readARObjectAttributes(element, com_spec)
1469
1787
  self.readReceiverComSpec(element, com_spec)
1470
1788
  com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")) \
1471
1789
  .setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")) \
@@ -1494,10 +1812,8 @@ class ARXMLParser(AbstractARXMLParser):
1494
1812
  def readAbstractRequiredPortPrototype(self, element: ET.Element, prototype: AbstractRequiredPortPrototype):
1495
1813
  self.readProvidedComSpec(element, prototype)
1496
1814
 
1497
- def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1498
- short_name = self.getShortName(element)
1499
- self.logger.debug("readPPortPrototype %s" % short_name)
1500
- prototype = parent.createPPortPrototype(short_name)
1815
+ def readPPortPrototype(self, element: ET.Element, prototype: PPortPrototype):
1816
+ self.logger.debug("Read PPortPrototype %s" % prototype.getShortName())
1501
1817
  self.readIdentifiable(element, prototype)
1502
1818
  self.readAbstractRequiredPortPrototype(element, prototype)
1503
1819
  prototype.setProvidedInterfaceTRef(self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF"))
@@ -1505,34 +1821,33 @@ class ARXMLParser(AbstractARXMLParser):
1505
1821
  def readAbstractProvidedPortPrototype(self, element: ET.Element, prototype: AbstractProvidedPortPrototype):
1506
1822
  self.readRequiredComSpec(element, prototype)
1507
1823
 
1508
- def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1509
- short_name = self.getShortName(element)
1510
- self.logger.debug("read RPortPrototype %s" % short_name)
1511
- prototype = parent.createRPortPrototype(short_name)
1824
+ def readRPortPrototype(self, element: ET.Element, prototype: RPortPrototype):
1825
+ self.logger.debug("Read RPortPrototype %s" % prototype.getShortName())
1512
1826
  self.readIdentifiable(element, prototype)
1513
1827
  self.readAbstractProvidedPortPrototype(element, prototype)
1514
1828
  prototype.setRequiredInterfaceTRef(self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF"))
1515
1829
 
1516
- def readPRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
1517
- short_name = self.getShortName(element)
1518
- self.logger.debug("read PRPortPrototype %s" % short_name)
1519
- prototype = parent.createPRPortPrototype(short_name)
1830
+ def readPRPortPrototype(self, element: ET.Element, prototype: PRPortPrototype):
1831
+ self.logger.debug("Read PRPortPrototype %s" % prototype.getShortName())
1520
1832
  self.readIdentifiable(element, prototype)
1521
1833
  self.readAbstractRequiredPortPrototype(element, prototype)
1522
1834
  self.readAbstractProvidedPortPrototype(element, prototype)
1523
1835
  prototype.setProvidedRequiredInterface(self.getChildElementOptionalRefType(element, "PROVIDED-REQUIRED-INTERFACE-TREF"))
1524
1836
 
1525
- def readAtomicSwComponentTypePorts(self, element: ET.Element, sw_component: AtomicSwComponentType):
1837
+ def readSwComponentTypePorts(self, element: ET.Element, sw_component: SwComponentType):
1526
1838
  for child_element in self.findall(element, "PORTS/*"):
1527
1839
  tag_name = self.getTagName(child_element)
1528
1840
  if tag_name == "P-PORT-PROTOTYPE":
1529
- self.readPPortPrototype(child_element, sw_component)
1841
+ prototype = sw_component.createPPortPrototype(self.getShortName(child_element))
1842
+ self.readPPortPrototype(child_element, prototype)
1530
1843
  elif tag_name == "R-PORT-PROTOTYPE":
1531
- self.readRPortPrototype(child_element, sw_component)
1844
+ prototype = sw_component.createRPortPrototype(self.getShortName(child_element))
1845
+ self.readRPortPrototype(child_element, prototype)
1532
1846
  elif tag_name == "PR-PORT-PROTOTYPE":
1533
- self.readPRPortPrototype(child_element, sw_component)
1847
+ prototype = sw_component.createPRPortPrototype(self.getShortName(child_element))
1848
+ self.readPRPortPrototype(child_element, prototype)
1534
1849
  else:
1535
- self.raiseError("Unsupported Port Prototype <%s>" % tag_name)
1850
+ self.notImplemented("Unsupported Port Prototype <%s>" % tag_name)
1536
1851
 
1537
1852
  def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
1538
1853
  child_element = self.find(element, "TRANSMISSION-ACKNOWLEDGE")
@@ -1543,7 +1858,7 @@ class ARXMLParser(AbstractARXMLParser):
1543
1858
  return acknowledge
1544
1859
  return None
1545
1860
 
1546
- def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
1861
+ def readSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
1547
1862
  self.readARObjectAttributes(element, com_spec)
1548
1863
  for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1549
1864
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
@@ -1553,27 +1868,36 @@ class ARXMLParser(AbstractARXMLParser):
1553
1868
  .setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
1554
1869
  .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1555
1870
 
1556
- def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
1871
+ def getNonqueuedSenderComSpec(self, element: ET.Element) -> NonqueuedSenderComSpec:
1557
1872
  com_spec = NonqueuedSenderComSpec()
1558
1873
  self.readSenderComSpec(element, com_spec)
1559
1874
  com_spec.setInitValue(self.getInitValue(element))
1560
1875
  return com_spec
1561
1876
 
1562
- def getServerComSpec(self, element) -> ServerComSpec:
1877
+ def getServerComSpec(self, element: ET.Element) -> ServerComSpec:
1563
1878
  com_spec = ServerComSpec()
1564
1879
  self.readARObjectAttributes(element, com_spec)
1565
1880
  com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
1566
1881
  .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1567
1882
  return com_spec
1568
1883
 
1569
- def getQueuedSenderComSpec(self, element) -> QueuedSenderComSpec:
1884
+ def getQueuedSenderComSpec(self, element: ET.Element) -> QueuedSenderComSpec:
1570
1885
  com_spec = QueuedSenderComSpec()
1571
1886
  self.readSenderComSpec(element, com_spec)
1572
1887
  return com_spec
1573
1888
 
1889
+ def getModeSwitchedAckRequest(self, element: ET.Element, key: str) -> ModeSwitchedAckRequest:
1890
+ request = None
1891
+ child_element = self.find(element, key)
1892
+ if child_element is not None:
1893
+ request = ModeSwitchedAckRequest()
1894
+ request.setTimeout(self.getChildElementOptionalTimeValue(child_element, "TIMEOUT"))
1895
+ return request
1896
+
1574
1897
  def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
1575
1898
  com_spec = ModeSwitchSenderComSpec()
1576
1899
  com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1900
+ .setModeSwitchedAck(self.getModeSwitchedAckRequest(element, "MODE-SWITCHED-ACK")) \
1577
1901
  .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
1578
1902
  return com_spec
1579
1903
 
@@ -1594,7 +1918,7 @@ class ARXMLParser(AbstractARXMLParser):
1594
1918
  def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
1595
1919
  for child_element in self.findall(element, "INNER-GROUP-IREFS/INNER-GROUP-IREF"):
1596
1920
  inner_group_iref = InnerPortGroupInCompositionInstanceRef()
1597
- #inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
1921
+ # inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
1598
1922
  inner_group_iref.setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
1599
1923
  parent.addInnerGroupIRef(inner_group_iref)
1600
1924
 
@@ -1620,12 +1944,12 @@ class ARXMLParser(AbstractARXMLParser):
1620
1944
 
1621
1945
  def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
1622
1946
  self.readIdentifiable(element, parent)
1623
- self.readAtomicSwComponentTypePorts(element, parent)
1947
+ self.readSwComponentTypePorts(element, parent)
1624
1948
  self.readSwComponentTypePortGroups(element, parent)
1625
1949
 
1626
1950
  def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
1627
1951
  self.readSwComponentType(element, parent)
1628
- self.readSwcInternalBehavior(element, parent)
1952
+ self.readAtomicSwComponentTypeSwcInternalBehavior(element, parent)
1629
1953
 
1630
1954
  def readEcuAbstractionSwComponentType(self, element, sw_component: EcuAbstractionSwComponentType):
1631
1955
  self.logger.debug("Read EcuAbstractionSwComponentType <%s>" % sw_component.getShortName())
@@ -1653,9 +1977,11 @@ class ARXMLParser(AbstractARXMLParser):
1653
1977
 
1654
1978
  self.logger.debug("PPortInCompositionInstanceRef")
1655
1979
  self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
1656
- % (p_port_in_composition_instance_ref.getContextComponentRef().getDest(), p_port_in_composition_instance_ref.getContextComponentRef().getValue()))
1657
- self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
1658
- % (p_port_in_composition_instance_ref.getTargetPPortRef().getDest(), p_port_in_composition_instance_ref.getTargetPPortRef().getValue()))
1980
+ % (p_port_in_composition_instance_ref.getContextComponentRef().getDest(),
1981
+ p_port_in_composition_instance_ref.getContextComponentRef().getValue()))
1982
+ self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
1983
+ % (p_port_in_composition_instance_ref.getTargetPPortRef().getDest(),
1984
+ p_port_in_composition_instance_ref.getTargetPPortRef().getValue()))
1659
1985
 
1660
1986
  def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
1661
1987
  r_port_in_composition_instance_ref.setContextComponentRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")) \
@@ -1663,9 +1989,11 @@ class ARXMLParser(AbstractARXMLParser):
1663
1989
 
1664
1990
  self.logger.debug("RPortInCompositionInstanceRef")
1665
1991
  self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
1666
- % (r_port_in_composition_instance_ref.getContextComponentRef().getDest(), r_port_in_composition_instance_ref.getContextComponentRef().getValue()))
1667
- self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
1668
- % (r_port_in_composition_instance_ref.getTargetRPortRef().getDest(), r_port_in_composition_instance_ref.getTargetRPortRef().getValue()))
1992
+ % (r_port_in_composition_instance_ref.getContextComponentRef().getDest(),
1993
+ r_port_in_composition_instance_ref.getContextComponentRef().getValue()))
1994
+ self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
1995
+ % (r_port_in_composition_instance_ref.getTargetRPortRef().getDest(),
1996
+ r_port_in_composition_instance_ref.getTargetRPortRef().getValue()))
1669
1997
 
1670
1998
  def readAssemblySwConnectorProviderIRef(self, element: ET.Element, parent: AssemblySwConnector):
1671
1999
  child_element = self.find(element, "PROVIDER-IREF")
@@ -1683,16 +2011,27 @@ class ARXMLParser(AbstractARXMLParser):
1683
2011
  self.readRPortInCompositionInstanceRef(child_element, requester_iref)
1684
2012
  parent.setRequesterIRef(requester_iref)
1685
2013
 
1686
- def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
1687
- for child_element in self.findall(element, "CONNECTORS/ASSEMBLY-SW-CONNECTOR"):
1688
- short_name = self.getShortName(child_element)
1689
- self.logger.debug("readAssemblySwConnectors %s" % short_name)
2014
+ def readSwConnector(self, element: ET.Element, connector: SwConnector):
2015
+ self.readIdentifiable(element, connector)
2016
+ connector.setMappingRef(self.getChildElementOptionalRefType(element, "MAPPING-REF"))
2017
+
2018
+ def readAssemblySwConnector(self, element: ET.Element, connector: AssemblySwConnector):
2019
+ self.logger.debug("Read AssemblySwConnectors %s" % connector.getShortName())
2020
+ self.readSwConnector(element, connector)
2021
+ self.readAssemblySwConnectorProviderIRef(element, connector)
2022
+ self.readAssemblySwConnectorRequesterIRef(element, connector)
1690
2023
 
1691
- connector = parent.createAssemblySwConnector(short_name)
1692
- self.readIdentifiable(child_element, connector)
1693
- connector.setMappingRef(self.getChildElementOptionalRefType(child_element, "MAPPING-REF"))
1694
- self.readAssemblySwConnectorProviderIRef(child_element, connector)
1695
- self.readAssemblySwConnectorRequesterIRef(child_element, connector)
2024
+ def readCompositionSwComponentTypeSwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
2025
+ for child_element in self.findall(element, "CONNECTORS/*"):
2026
+ tag_name = self.getTagName(child_element)
2027
+ if tag_name == "ASSEMBLY-SW-CONNECTOR":
2028
+ connector = parent.createAssemblySwConnector(self.getShortName(child_element))
2029
+ self.readAssemblySwConnector(child_element, connector)
2030
+ elif tag_name == "DELEGATION-SW-CONNECTOR":
2031
+ connector = parent.createDelegationSwConnector(self.getShortName(child_element))
2032
+ self.readDelegationSwConnector(child_element, connector)
2033
+ else:
2034
+ self.notImplemented("Unsupported SwConnector <%s>" % tag_name)
1696
2035
 
1697
2036
  def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
1698
2037
  inner_port_iref_element = self.find(element, "INNER-PORT-IREF")
@@ -1713,45 +2052,45 @@ class ARXMLParser(AbstractARXMLParser):
1713
2052
 
1714
2053
  self.raiseError("Unsupported child element of INNER-PORT-IREF")
1715
2054
 
1716
- def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
1717
- for child_element in self.findall(element, "CONNECTORS/DELEGATION-SW-CONNECTOR"):
1718
- short_name = self.getShortName(child_element)
1719
- self.logger.debug("readDelegationSwConnectors %s" % short_name)
2055
+ def readDelegationSwConnector(self, element, connector: DelegationSwConnector):
2056
+ self.logger.debug("Read DelegationSwConnectors %s" % connector.getShortName())
2057
+ self.readSwConnector(element, connector)
2058
+ self.readDelegationSwConnectorInnerPortIRef(element, connector)
1720
2059
 
1721
- connector = parent.createDelegationSwConnector(short_name)
1722
- self.readIdentifiable(child_element, connector)
1723
- self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
2060
+ if connector.getInnerPortIRref() is None and connector.getOuterPortRef() is None:
2061
+ self.raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
1724
2062
 
1725
- if connector.getInnerPortIRref() == None and connector.getOuterPortRef() == None:
1726
- self.raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
2063
+ connector.setOuterPortRef(self.getChildElementOptionalRefType(element, "OUTER-PORT-REF"))
2064
+ self.logger.debug("OUTER-PORT-REF DEST: %s, %s" % (connector.getOuterPortRef().getDest(), connector.getOuterPortRef().getValue()))
1727
2065
 
1728
- connector.setOuterPortRef(self.getChildElementOptionalRefType(child_element, "OUTER-PORT-REF"))
1729
- self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
1730
- % (connector.getOuterPortRef().getDest(), connector.getOuterPortRef().getValue()))
2066
+ def readSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
2067
+ self.logger.debug("Read SwComponentPrototypes <%s>" % prototype.getShortName())
2068
+ self.readIdentifiable(element, prototype)
2069
+ prototype.setTypeTRef(self.getChildElementOptionalRefType(element, "TYPE-TREF"))
1731
2070
 
1732
- def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
1733
- for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
1734
- short_name = self.getShortName(child_element)
1735
- self.logger.debug("readSwComponentPrototypes %s" % short_name)
1736
- prototype = parent.createSwComponentPrototype(short_name)
1737
- self.readIdentifiable(child_element, prototype)
1738
- prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
2071
+ def readCompositionSwComponentTypeComponents(self, element: ET.Element, parent: CompositionSwComponentType):
2072
+ for child_element in self.findall(element, "COMPONENTS/*"):
2073
+ tag_name = self.getTagName(child_element)
2074
+ if tag_name == "SW-COMPONENT-PROTOTYPE":
2075
+ prototype = parent.createSwComponentPrototype(self.getShortName(child_element))
2076
+ self.readSwComponentPrototype(child_element, prototype)
2077
+ else:
2078
+ self.notImplemented("Unsupported Component <%s>" % tag_name)
1739
2079
 
1740
2080
  def readCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
1741
- child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
2081
+ child_element = self.find(element, "DATA-TYPE-MAPPING-REFS")
1742
2082
  self.logger.debug("readDataTypeMappingSet")
1743
2083
  if child_element is not None:
1744
- for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
2084
+ for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
1745
2085
  parent.addDataTypeMapping(ref)
1746
2086
 
1747
2087
  def readCompositionSwComponentType(self, element: ET.Element, type: CompositionSwComponentType):
1748
2088
  self.logger.debug("Read CompositionSwComponentType: <%s>" % type.getShortName())
1749
- self.readIdentifiable(element, type)
1750
2089
  self.readSwComponentType(element, type)
1751
- self.readSwComponentPrototypes(element, type)
1752
- self.readAssemblySwConnectors(element, type)
1753
- self.readDelegationSwConnectors(element, type)
2090
+ self.readCompositionSwComponentTypeComponents(element, type)
2091
+ self.readCompositionSwComponentTypeSwConnectors(element, type)
1754
2092
  self.readCompositionSwComponentTypeDataTypeMappingSet(element, type)
2093
+ AUTOSAR.getInstance().addCompositionSwComponentType(type)
1755
2094
 
1756
2095
  def readDataTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
1757
2096
  for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
@@ -1778,13 +2117,15 @@ class ARXMLParser(AbstractARXMLParser):
1778
2117
  self.readModeRequestTypeMaps(element, mapping_set)
1779
2118
 
1780
2119
  def readSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1781
- for child_element in self.findall(element, "DATA-ELEMENTS/VARIABLE-DATA-PROTOTYPE"):
1782
- short_name = self.getShortName(child_element)
1783
- prototype = sr_interface.createDataElement(short_name)
1784
- self.readIdentifiable(child_element, prototype)
1785
- prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1786
- self.readAutosarDataPrototype(child_element, prototype)
1787
- prototype.initValue = self.getInitValue(child_element)
2120
+ for child_element in self.findall(element, "DATA-ELEMENTS/*"):
2121
+ tag_name = self.getTagName(child_element)
2122
+ if tag_name == "VARIABLE-DATA-PROTOTYPE":
2123
+ prototype = sr_interface.createDataElement(self.getShortName(child_element))
2124
+ self.readVariableDataPrototype(child_element, prototype)
2125
+ # prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
2126
+ # self.readAutosarDataPrototype(child_element, prototype)
2127
+ else:
2128
+ self.notImplemented("Unsupported Data Element <%s>" % tag_name)
1788
2129
 
1789
2130
  def readSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1790
2131
  for child_element in self.findall(element, "INVALIDATION-POLICYS/INVALIDATION-POLICY"):
@@ -1808,16 +2149,19 @@ class ARXMLParser(AbstractARXMLParser):
1808
2149
  self.readSenderReceiverInterfaceDataElements(element, sr_interface)
1809
2150
  self.readSenderReceiverInterfaceInvalidationPolicies(element, sr_interface)
1810
2151
 
1811
- def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
1812
- for child_element in self.findall(element, "ARGUMENTS/ARGUMENT-DATA-PROTOTYPE"):
1813
- short_name = self.getShortName(child_element)
1814
- prototype = ArgumentDataPrototype(property, short_name)
1815
- self.readIdentifiable(child_element, prototype)
1816
- prototype.swDataDefProps = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
1817
- prototype.typeTRef = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
1818
- prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
1819
- prototype.serverArgumentImplPolicy = self.getChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY")
1820
- parent.addArgumentDataPrototype(prototype)
2152
+ def readArgumentDataPrototype(self, element: ET.Element, prototype: ArgumentDataPrototype):
2153
+ self.readAutosarDataPrototype(element, prototype)
2154
+ prototype.setDirection(self.getChildElementOptionalLiteral(element, "DIRECTION")) \
2155
+ .setServerArgumentImplPolicy(self.getChildElementOptionalLiteral(element, "SERVER-ARGUMENT-IMPL-POLICY"))
2156
+
2157
+ def readClientServerOperationArguments(self, element: ET.Element, operation: ClientServerOperation):
2158
+ for child_element in self.findall(element, "ARGUMENTS/*"):
2159
+ tag_name = self.getTagName(child_element)
2160
+ if tag_name == "ARGUMENT-DATA-PROTOTYPE":
2161
+ prototype = operation.createArgumentDataPrototype(self.getShortName(child_element))
2162
+ self.readArgumentDataPrototype(child_element, prototype)
2163
+ else:
2164
+ self.notImplemented("Unsupported Argument <%s>" % tag_name)
1821
2165
 
1822
2166
  def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
1823
2167
  child_element = self.find(element, "POSSIBLE-ERROR-REFS")
@@ -1825,41 +2169,53 @@ class ARXMLParser(AbstractARXMLParser):
1825
2169
  for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
1826
2170
  parent.addPossibleErrorRef(ref)
1827
2171
 
1828
- def readOperations(self, element: ET.Element, parent: ClientServerInterface):
1829
- for child_element in self.findall(element, "OPERATIONS/CLIENT-SERVER-OPERATION"):
1830
- short_name = self.getShortName(child_element)
1831
- operation = parent.createOperation(short_name)
1832
- self.readIdentifiable(child_element, operation)
1833
- self.readArgumentDataPrototypes(child_element, operation)
1834
- self.readPossibleErrorRefs(child_element, operation)
2172
+ def readClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
2173
+ self.readIdentifiable(element, operation)
2174
+ self.readClientServerOperationArguments(element, operation)
2175
+ self.readPossibleErrorRefs(element, operation)
2176
+
2177
+ def readClientServerInterfaceOperations(self, element: ET.Element, parent: ClientServerInterface):
2178
+ for child_element in self.findall(element, "OPERATIONS/*"):
2179
+ tag_name = self.getTagName(child_element)
2180
+ if tag_name == "CLIENT-SERVER-OPERATION":
2181
+ operation = parent.createOperation(self.getShortName(child_element))
2182
+ self.readClientServerOperation(child_element, operation)
2183
+ else:
2184
+ self.notImplemented("Unsupported Operation <%s>" % tag_name)
1835
2185
 
1836
2186
  def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
1837
2187
  for child_element in self.findall(element, "POSSIBLE-ERRORS/APPLICATION-ERROR"):
1838
2188
  short_name = self.getShortName(child_element)
1839
2189
  error = parent.createApplicationError(short_name)
1840
- self.readIdentifiable(child_element, error) # some errors has its uuid
2190
+ self.readIdentifiable(child_element, error) # some errors has its uuid
1841
2191
  error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
1842
2192
 
1843
2193
  def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
1844
2194
  self.readIdentifiable(element, port_interface)
1845
- port_interface.isService = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
1846
- port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
2195
+ port_interface.setIsService(self.getChildElementOptionalBooleanValue(element, "IS-SERVICE"))\
2196
+ .setServiceKind(self.getChildElementOptionalLiteral(element, "SERVICE-KIND"))
1847
2197
 
1848
2198
  def readParameterInterfaceParameters(self, element: ET.Element, param_interface: ParameterInterface):
1849
- for child_element in self.findall(element, "PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
1850
- short_name = self.getShortName(child_element)
1851
- prototype = param_interface.createParameter(short_name)
1852
- self.readParameterDataPrototype(child_element, prototype)
2199
+ for child_element in self.findall(element, "PARAMETERS/*"):
2200
+ tag_name = self.getTagName(child_element)
2201
+ if tag_name == "PARAMETER-DATA-PROTOTYPE":
2202
+ prototype = param_interface.createParameterDataPrototype(self.getShortName(child_element))
2203
+ self.readParameterDataPrototype(child_element, prototype)
2204
+ else:
2205
+ self.notImplemented("Unsupported Parameter <%s>" % tag_name)
2206
+
2207
+ def readDataInterface(self, element: ET.Element, interface: DataInterface):
2208
+ self.readPortInterface(element, interface)
1853
2209
 
1854
- def readParameterInterface(self, element: ET.Element, param_interface: ParameterInterface):
1855
- self.logger.debug("Read ParameterInterface <%s>" % param_interface.getShortName())
1856
- self.readPortInterface(element, param_interface)
1857
- self.readParameterInterfaceParameters(element, param_interface)
2210
+ def readParameterInterface(self, element: ET.Element, interface: ParameterInterface):
2211
+ self.logger.debug("Read ParameterInterface <%s>" % interface.getShortName())
2212
+ self.readDataInterface(element, interface)
2213
+ self.readParameterInterfaceParameters(element, interface)
1858
2214
 
1859
2215
  def readClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
1860
2216
  self.logger.debug("Read readClientServerInterface <%s>" % cs_interface.getShortName())
1861
2217
  self.readPortInterface(element, cs_interface)
1862
- self.readOperations(element, cs_interface)
2218
+ self.readClientServerInterfaceOperations(element, cs_interface)
1863
2219
  self.readPossibleErrors(element, cs_interface)
1864
2220
 
1865
2221
  def getCompuConstContent(self, element: ET.Element) -> CompuConstContent:
@@ -1921,6 +2277,15 @@ class ARXMLParser(AbstractARXMLParser):
1921
2277
  self.readCompuConst(element, parent)
1922
2278
  self.readCompuRationCoeffs(element, parent)
1923
2279
 
2280
+ def readCompuScale(self, element: ET.Element, compu_scale: CompuScale):
2281
+ self.readARObjectAttributes(element, compu_scale)
2282
+ compu_scale.setLowerLimit(self.getChildLimitElement(element, "LOWER-LIMIT")) \
2283
+ .setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
2284
+ .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC")) \
2285
+ .setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL")) \
2286
+ .setUpperLimit(self.getChildLimitElement(element, "UPPER-LIMIT"))
2287
+ self.readCompuScaleContents(element, compu_scale)
2288
+
1924
2289
  def getCompuScales(self, element: ET.Element) -> CompuScales:
1925
2290
  compu_scales = None
1926
2291
  compu_scales_tag = self.find(element, "COMPU-SCALES")
@@ -1928,12 +2293,7 @@ class ARXMLParser(AbstractARXMLParser):
1928
2293
  compu_scales = CompuScales()
1929
2294
  for child_element in self.findall(compu_scales_tag, 'COMPU-SCALE'):
1930
2295
  compu_scale = CompuScale()
1931
- self.readARObjectAttributes(child_element, compu_scale)
1932
- compu_scale.setLowerLimit(self.getChildLimitElement(child_element, "LOWER-LIMIT")) \
1933
- .setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
1934
- .setSymbol(self.getChildElementOptionalLiteral(child_element, "SYMBOL")) \
1935
- .setUpperLimit(self.getChildLimitElement(child_element, "UPPER-LIMIT"))
1936
- self.readCompuScaleContents(child_element, compu_scale)
2296
+ self.readCompuScale(child_element, compu_scale)
1937
2297
  compu_scales.addCompuScale(compu_scale)
1938
2298
  return compu_scales
1939
2299
 
@@ -1943,7 +2303,7 @@ class ARXMLParser(AbstractARXMLParser):
1943
2303
  if (child_element is not None):
1944
2304
  compu = Compu()
1945
2305
  self.readARObjectAttributes(child_element, compu)
1946
- compu.setCompuContent(self.getCompuScales(child_element))
2306
+ compu.setCompuContent(self.getCompuScales(child_element))
1947
2307
  compu.setCompuDefaultValue(self.getCompuConst(child_element, "COMPU-DEFAULT-VALUE"))
1948
2308
  return compu
1949
2309
 
@@ -1971,10 +2331,9 @@ class ARXMLParser(AbstractARXMLParser):
1971
2331
  def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
1972
2332
  self.readARObjectAttributes(element, value_spec)
1973
2333
  value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
1974
- self.logger.debug("readValueSpecification")
2334
+ # self.logger.debug("read ValueSpecification")
1975
2335
 
1976
2336
  def getApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
1977
- self.logger.debug("getApplicationValueSpecification")
1978
2337
  value_spec = ApplicationValueSpecification()
1979
2338
  self.readValueSpecification(element, value_spec)
1980
2339
  value_spec.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY")) \
@@ -1983,7 +2342,6 @@ class ARXMLParser(AbstractARXMLParser):
1983
2342
  return value_spec
1984
2343
 
1985
2344
  def getNumericalValueSpecification(self, element: ET.Element) -> NumericalValueSpecification:
1986
- self.logger.debug("getNumericalValueSpecification")
1987
2345
  value_spec = NumericalValueSpecification()
1988
2346
  self.readValueSpecification(element, value_spec)
1989
2347
  value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
@@ -2012,7 +2370,7 @@ class ARXMLParser(AbstractARXMLParser):
2012
2370
  value_spec = ConstantReference()
2013
2371
  self.readValueSpecification(element, value_spec)
2014
2372
  value_spec.setConstantRef(self.getChildElementOptionalRefType(element, "CONSTANT-REF"))
2015
- return value_spec
2373
+ return value_spec
2016
2374
 
2017
2375
  def getValueSpecification(self, element: ET.Element, tag_name: str) -> ValueSpecification:
2018
2376
  if tag_name == "APPLICATION-VALUE-SPECIFICATION":
@@ -2089,62 +2447,83 @@ class ARXMLParser(AbstractARXMLParser):
2089
2447
  .setOffsetSiToUnit(self.getChildElementOptionalFloatValue(element, "OFFSET-SI-TO-UNIT")) \
2090
2448
  .setPhysicalDimensionRef(self.getChildElementOptionalRefType(element, "PHYSICAL-DIMENSION-REF"))
2091
2449
 
2092
- def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
2093
- child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
2450
+ def readEndToEndDescriptionDataIds(self, element: ET.Element, parent: EndToEndDescription):
2451
+ child_element = self.find(element, "DATA-IDS")
2094
2452
  if child_element is not None:
2095
2453
  for value in self.getChildElementNumericalValueList(child_element, "DATA-ID"):
2096
2454
  parent.addDataId(value)
2097
2455
 
2098
2456
  def getEndToEndDescription(self, element: ET.Element, key: str) -> EndToEndDescription:
2099
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
2457
+ child_element = self.find(element, key)
2100
2458
  desc = None
2101
2459
  if (child_element is not None):
2102
2460
  desc = EndToEndDescription()
2103
- desc.category = self.getChildElementOptionalLiteral(child_element, "CATEGORY")
2104
- self.readEndToEndDescriptionDataId(child_element, desc)
2105
- desc.dataIdMode = self.getChildElementOptionalNumericalValue(child_element, "DATA-ID-MODE")
2106
- desc.maxDeltaCounterInit = self.getChildElementOptionalNumericalValue(child_element, "MAX-DELTA-COUNTER-INIT")
2107
- desc.crcOffset = self.getChildElementOptionalNumericalValue(child_element, "CRC-OFFSET")
2108
- desc.counterOffset = self.getChildElementOptionalNumericalValue(child_element, "COUNTER-OFFSET")
2461
+ self.readARObjectAttributes(child_element, desc)
2462
+ desc.setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY"))
2463
+ self.readEndToEndDescriptionDataIds(child_element, desc)
2464
+ desc.setDataIdMode(self.getChildElementOptionalPositiveInteger(child_element, "DATA-ID-MODE")) \
2465
+ .setDataLength(self.getChildElementOptionalPositiveInteger(child_element, "DATA-LENGTH")) \
2466
+ .setMaxDeltaCounterInit(self.getChildElementOptionalPositiveInteger(child_element, "MAX-DELTA-COUNTER-INIT")) \
2467
+ .setCrcOffset(self.getChildElementOptionalPositiveInteger(child_element, "CRC-OFFSET")) \
2468
+ .setCounterOffset(self.getChildElementOptionalPositiveInteger(child_element, "COUNTER-OFFSET"))
2109
2469
  return desc
2110
2470
 
2111
2471
  def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
2112
- iref = None
2472
+ instance_ref = None
2113
2473
  if element is not None:
2114
- iref = VariableDataPrototypeInSystemInstanceRef()
2115
- #iref.addContextComponentRef() = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
2116
- iref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")) \
2117
- .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
2118
- .setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
2119
- return iref
2474
+ instance_ref = VariableDataPrototypeInSystemInstanceRef()
2475
+ for ref in self.getChildElementRefTypeList(element, "CONTEXT-COMPONENT-REF"):
2476
+ instance_ref.addContextComponentRef(ref)
2477
+ instance_ref.setContextCompositionRef(self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")) \
2478
+ .setContextPortRef(self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")) \
2479
+ .setTargetDataPrototypeRef(self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF"))
2480
+ return instance_ref
2120
2481
 
2121
- def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
2122
- prototype = EndToEndProtectionVariablePrototype()
2123
- for child_element in element.findall("./xmlns:RECEIVER-IREFS/xmlns:RECEIVER-IREF", self.nsmap):
2482
+ def readEndToEndProtectionVariablePrototype(self, element: ET.Element, prototype: EndToEndProtectionVariablePrototype):
2483
+ self.readARObjectAttributes(element, prototype)
2484
+ for child_element in self.findall(element, "RECEIVER-IREFS/RECEIVER-IREF"):
2124
2485
  prototype.addReceiverIref(self.getVariableDataPrototypeInSystemInstanceRef(child_element))
2125
- child_element = element.find("./xmlns:SENDER-IREF", self.nsmap)
2486
+ child_element = self.find(element, "SENDER-IREF")
2126
2487
  if child_element is not None:
2127
2488
  prototype.senderIRef = self.getVariableDataPrototypeInSystemInstanceRef(child_element)
2128
2489
  return prototype
2129
2490
 
2130
- def readEndToEndProtectionVariablePrototypes(self, element: ET.Element, parent: EndToEndProtection):
2131
- for child_element in element.findall("./xmlns:END-TO-END-PROTECTION-VARIABLE-PROTOTYPES/*", self.nsmap):
2491
+ def readEndToEndProtectionEndToEndProtectionVariablePrototypes(self, element: ET.Element, protection: EndToEndProtection):
2492
+ for child_element in self.findall(element, "END-TO-END-PROTECTION-VARIABLE-PROTOTYPES/*"):
2132
2493
  tag_name = self.getTagName(child_element)
2133
2494
  if tag_name == "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE":
2134
- parent.addEndToEndProtectionVariablePrototype(self.getEndToEndProtectionVariablePrototype(child_element))
2495
+ prototype = EndToEndProtectionVariablePrototype()
2496
+ self.readEndToEndProtectionVariablePrototype(child_element, prototype)
2497
+ protection.addEndToEndProtectionVariablePrototype(prototype)
2135
2498
  else:
2136
2499
  self.raiseError("Unsupported End To End Protection Variable Prototype <%s>" % tag_name)
2137
2500
 
2501
+ def readEndToEndProtectionISignalIPdu(self, element: ET.Element, ipdu: EndToEndProtectionISignalIPdu):
2502
+ ipdu.setDataOffset(self.getChildElementOptionalIntegerValue(element, "DATA-OFFSET")) \
2503
+ .setISignalGroupRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-GROUP-REF")) \
2504
+ .setISignalIPduRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-I-PDU-REF"))
2505
+
2506
+ def readEndToEndProtectionEndToEndProtectionISignalIPdus(self, element: ET.Element, protection: EndToEndProtection):
2507
+ for child_element in self.findall(element, "END-TO-END-PROTECTION-I-SIGNAL-I-PDUS/*"):
2508
+ tag_name = self.getTagName(child_element)
2509
+ if tag_name == "END-TO-END-PROTECTION-I-SIGNAL-I-PDU":
2510
+ ipdu = EndToEndProtectionISignalIPdu()
2511
+ self.readEndToEndProtectionISignalIPdu(child_element, ipdu)
2512
+ protection.addEndToEndProtectionISignalIPdu(ipdu)
2513
+ else:
2514
+ self.notImplemented("Unsupported EndToEndProtectionISignalIPdu <%s>" % tag_name)
2515
+
2138
2516
  def readEndToEndProtection(self, element: ET.Element, parent: EndToEndProtectionSet):
2139
2517
  short_name = self.getShortName(element)
2140
2518
  self.logger.debug("readEndToEndProtection %s" % short_name)
2141
2519
  protection = parent.createEndToEndProtection(short_name)
2142
2520
  self.readIdentifiable(element, protection)
2143
- protection.endToEndProfile = self.getEndToEndDescription(element, "END-TO-END-PROFILE")
2144
- self.readEndToEndProtectionVariablePrototypes(element, protection)
2521
+ protection.setEndToEndProfile(self.getEndToEndDescription(element, "END-TO-END-PROFILE"))
2522
+ self.readEndToEndProtectionEndToEndProtectionISignalIPdus(element, protection)
2523
+ self.readEndToEndProtectionEndToEndProtectionVariablePrototypes(element, protection)
2145
2524
 
2146
2525
  def readEndToEndProtections(self, element: ET.Element, parent: EndToEndProtectionSet):
2147
- for child_element in self.findall(element, "END-TO-END-PROTECTIONS/*", self.nsmap):
2526
+ for child_element in self.findall(element, "END-TO-END-PROTECTIONS/*"):
2148
2527
  tag_name = self.getTagName(child_element)
2149
2528
  if tag_name == "END-TO-END-PROTECTION":
2150
2529
  self.readEndToEndProtection(child_element, parent)
@@ -2156,10 +2535,6 @@ class ARXMLParser(AbstractARXMLParser):
2156
2535
  self.readIdentifiable(element, protection_set)
2157
2536
  self.readEndToEndProtections(element, protection_set)
2158
2537
 
2159
- def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
2160
- self.readIdentifiable(element, data_type)
2161
- data_type.swDataDefProps = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
2162
-
2163
2538
  def readImplementationProps(self, element: ET.Element, props: ImplementationProps):
2164
2539
  props.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
2165
2540
 
@@ -2187,22 +2562,24 @@ class ARXMLParser(AbstractARXMLParser):
2187
2562
  prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
2188
2563
 
2189
2564
  def readApplicationArrayElement(self, element: ET.Element, parent: ApplicationArrayDataType):
2190
- child_element = element.find("./xmlns:ELEMENT", self.nsmap)
2565
+ child_element = self.find(element, "ELEMENT")
2191
2566
  if child_element is not None:
2192
2567
  short_name = self.getShortName(child_element)
2193
- self.logger.debug("readApplicationArrayElement %s" % short_name)
2568
+ self.logger.debug("Read ApplicationArrayElement %s" % short_name)
2194
2569
  array_element = parent.createApplicationArrayElement(short_name)
2195
2570
  self.readApplicationCompositeElementDataPrototype(child_element, array_element)
2571
+ array_element.setArraySizeHandling(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING"))
2196
2572
  array_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
2197
2573
  array_element.setMaxNumberOfElements(self.getChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS"))
2198
2574
 
2199
2575
  def readApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
2200
- self.logger.debug("Read ApplicationArrayDataType <%s>" % data_type)
2576
+ self.logger.debug("Read ApplicationArrayDataType <%s>" % data_type.getShortName())
2201
2577
  self.readApplicationCompositeDataType(element, data_type)
2578
+ data_type.setDynamicArraySizeProfile(self.getChildElementOptionalLiteral(element, "DYNAMIC-ARRAY-SIZE-PROFILE"))
2202
2579
  self.readApplicationArrayElement(element, data_type)
2203
2580
 
2204
2581
  def getSwRecordLayoutV(self, element: ET.Element, key: str) -> SwRecordLayoutV:
2205
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
2582
+ child_element = self.find(element, key)
2206
2583
  layout_v = None
2207
2584
  if child_element is not None:
2208
2585
  layout_v = SwRecordLayoutV()
@@ -2212,9 +2589,15 @@ class ARXMLParser(AbstractARXMLParser):
2212
2589
  .setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
2213
2590
  .setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
2214
2591
  return layout_v
2592
+
2593
+ def readSwRecordLayoutGroupSwRecordLayoutGroupContentType(self, element: ET.Element, group: SwRecordLayoutGroup):
2594
+ content = SwRecordLayoutGroupContent()
2595
+ content.setSwRecordLayoutGroup(self.getSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP")) \
2596
+ .setSwRecordLayoutV(self.getSwRecordLayoutV(element, "SW-RECORD-LAYOUT-V"))
2597
+ group.setSwRecordLayoutGroupContentType(content)
2215
2598
 
2216
2599
  def getSwRecordLayoutGroup(self, element: ET.Element, key: str) -> SwRecordLayoutGroup:
2217
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
2600
+ child_element = self.find(element, key)
2218
2601
  group = None
2219
2602
  if child_element is not None:
2220
2603
  group = SwRecordLayoutGroup()
@@ -2224,17 +2607,9 @@ class ARXMLParser(AbstractARXMLParser):
2224
2607
  .setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
2225
2608
  .setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
2226
2609
  .setSwRecordLayoutGroupStep(self.getChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP")) \
2227
- .setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO")) \
2610
+ .setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO"))
2611
+ self.readSwRecordLayoutGroupSwRecordLayoutGroupContentType(child_element, group)
2228
2612
 
2229
- group_content = SwRecordLayoutGroupContent()
2230
- group_content.swRecordLayoutGroup = self.getSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP")
2231
- group_content.swRecordLayoutV = self.getSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V")
2232
-
2233
- if group_content.swRecordLayoutGroup is not None:
2234
- group.setSwRecordLayoutGroupContentType(group_content)
2235
- elif group_content.swRecordLayoutV is not None:
2236
- group.setSwRecordLayoutGroupContentType(group_content)
2237
-
2238
2613
  return group
2239
2614
 
2240
2615
  def readSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
@@ -2245,7 +2620,7 @@ class ARXMLParser(AbstractARXMLParser):
2245
2620
  def readSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
2246
2621
  self.logger.debug("Read SwAddrMethod <%s>" % method.getShortName())
2247
2622
  self.readIdentifiable(element, method)
2248
- method.setMemoryAllocationKeywordPolicy(self.getChildElementOptionalLiteral(element, "MEMORY-ALLOCATION-KEYWORD-POLICY"))
2623
+ method.setMemoryAllocationKeywordPolicy(self.getChildElementOptionalLiteral(element, "MEMORY-ALLOCATION-KEYWORD-POLICY"))
2249
2624
  for option in self.getChildElementLiteralValueList(element, "OPTIONS/OPTION"):
2250
2625
  method.addOption(option)
2251
2626
  method.setSectionInitializationPolicy(self.getChildElementOptionalLiteral(element, "SECTION-INITIALIZATION-POLICY")) \
@@ -2319,6 +2694,7 @@ class ARXMLParser(AbstractARXMLParser):
2319
2694
  self.readTimingExtension(element, timing)
2320
2695
 
2321
2696
  def readFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2697
+ self.readIdentifiable(element, triggering)
2322
2698
  for ref in self.getChildElementRefTypeList(element, 'FRAME-PORT-REFS/FRAME-PORT-REF'):
2323
2699
  triggering.addFramePortRef(ref)
2324
2700
  triggering.setFrameRef(self.getChildElementOptionalRefType(element, "FRAME-REF"))
@@ -2327,7 +2703,6 @@ class ARXMLParser(AbstractARXMLParser):
2327
2703
 
2328
2704
  def readCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2329
2705
  self.logger.debug("Read CanFrameTriggering %s" % triggering.getShortName())
2330
- self.readIdentifiable(element, triggering)
2331
2706
  self.readFrameTriggering(element, triggering)
2332
2707
  triggering.setCanAddressingMode(self.getChildElementOptionalLiteral(element, "CAN-ADDRESSING-MODE")) \
2333
2708
  .setCanFdFrameSupport(self.getChildElementOptionalBooleanValue(element, "CAN-FD-FRAME-SUPPORT")) \
@@ -2336,13 +2711,52 @@ class ARXMLParser(AbstractARXMLParser):
2336
2711
  .setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
2337
2712
  .setRxIdentifierRange(self.getChildElementRxIdentifierRange(element, "RX-IDENTIFIER-RANGE"))
2338
2713
 
2339
-
2340
2714
  def readLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2341
2715
  self.logger.debug("Read LinFrameTriggering %s" % triggering.getShortName())
2342
- self.readIdentifiable(element, triggering)
2343
2716
  self.readFrameTriggering(element, triggering)
2344
2717
  triggering.setIdentifier(self.getChildElementOptionalNumericalValue(element, "IDENTIFIER")) \
2345
2718
  .setLinChecksum(self.getChildElementOptionalLiteral(element, "LIN-CHECKSUM"))
2719
+
2720
+ def readCommunicationCycle(self, element: ET.Element, cycle: CommunicationCycle):
2721
+ self.readARObjectAttributes(element, cycle)
2722
+
2723
+ def readCycleRepetition(self, element: ET.Element, cycle: CycleRepetition):
2724
+ self.readCommunicationCycle(element, cycle)
2725
+ cycle.setBaseCycle(self.getChildElementOptionalIntegerValue(element, "BASE-CYCLE")) \
2726
+ .setCycleRepetition(self.getChildElementOptionalLiteral(element, "CYCLE-REPETITION"))
2727
+
2728
+ def readFlexrayAbsolutelyScheduledTimingCommunicationCycle(self, element: ET.Element, timing: FlexrayAbsolutelyScheduledTiming):
2729
+ for child_element in self.findall(element, "COMMUNICATION-CYCLE/*"):
2730
+ tag_name = self.getTagName(child_element)
2731
+ if tag_name == "CYCLE-REPETITION":
2732
+ repetition = CycleRepetition()
2733
+ self.readCycleRepetition(child_element, repetition)
2734
+ timing.setCommunicationCycle(repetition)
2735
+ else:
2736
+ self.notImplemented("Unsupported CommunicationCycle <%s>" % tag_name)
2737
+
2738
+ def readFlexrayAbsolutelyScheduledTiming(self, element: ET.Element, timing: FlexrayAbsolutelyScheduledTiming):
2739
+ self.readARObjectAttributes(element, timing)
2740
+ self.readFlexrayAbsolutelyScheduledTimingCommunicationCycle(element, timing)
2741
+ timing.setSlotID(self.getChildElementOptionalPositiveInteger(element, "SLOT-ID"))
2742
+
2743
+ def readFlexrayFrameTriggeringAbsolutelyScheduledTimings(self, element: ET.Element, triggering: FlexrayFrameTriggering):
2744
+ for child_element in self.findall(element, "ABSOLUTELY-SCHEDULED-TIMINGS/*"):
2745
+ tag_name = self.getTagName(child_element)
2746
+ if tag_name == "FLEXRAY-ABSOLUTELY-SCHEDULED-TIMING":
2747
+ timing = FlexrayAbsolutelyScheduledTiming()
2748
+ self.readFlexrayAbsolutelyScheduledTiming(child_element, timing)
2749
+ triggering.addAbsolutelyScheduledTiming(timing)
2750
+ else:
2751
+ self.notImplemented("Unsupported AbsolutelyScheduledTiming <%s>" % tag_name)
2752
+
2753
+ def readFlexrayFrameTriggering(self, element: ET.Element, triggering: FlexrayFrameTriggering):
2754
+ self.logger.debug("Read FlexrayFrameTriggering %s" % triggering.getShortName())
2755
+ self.readFrameTriggering(element, triggering)
2756
+ self.readFlexrayFrameTriggeringAbsolutelyScheduledTimings(element, triggering)
2757
+ triggering.setAllowDynamicLSduLength(self.getChildElementOptionalBooleanValue(element, "ALLOW-DYNAMIC-L-SDU-LENGTH")) \
2758
+ .setMessageId(self.getChildElementOptionalPositiveInteger(element, "MESSAGE-ID")) \
2759
+ .setPayloadPreambleIndicator(self.getChildElementOptionalBooleanValue(element, "PAYLOAD-PREAMBLE-INDICATOR"))
2346
2760
 
2347
2761
  def readISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2348
2762
  self.logger.debug("Read ISignalTriggering %s" % triggering.getShortName())
@@ -2361,10 +2775,11 @@ class ARXMLParser(AbstractARXMLParser):
2361
2775
  for child_element in self.findall(element, 'I-SIGNAL-TRIGGERINGS/I-SIGNAL-TRIGGERING-REF-CONDITIONAL'):
2362
2776
  triggering.addISignalTriggeringRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF"))
2363
2777
 
2364
- def readPhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2778
+ def readPhysicalChannelCommConnectorRefs(self, element: ET.Element, channel: PhysicalChannel):
2365
2779
  for child_element in self.findall(element, 'COMM-CONNECTORS/COMMUNICATION-CONNECTOR-REF-CONDITIONAL'):
2366
2780
  channel.addCommConnectorRef(self.getChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF"))
2367
-
2781
+
2782
+ def readPhysicalChannelFrameTriggerings(self, element: ET.Element, channel: PhysicalChannel):
2368
2783
  for child_element in self.findall(element, "FRAME-TRIGGERINGS/*"):
2369
2784
  tag_name = self.getTagName(child_element)
2370
2785
  if tag_name == "CAN-FRAME-TRIGGERING":
@@ -2373,9 +2788,13 @@ class ARXMLParser(AbstractARXMLParser):
2373
2788
  elif tag_name == "LIN-FRAME-TRIGGERING":
2374
2789
  triggering = channel.createLinFrameTriggering(self.getShortName(child_element))
2375
2790
  self.readLinFrameTriggering(child_element, triggering)
2791
+ elif tag_name == "FLEXRAY-FRAME-TRIGGERING":
2792
+ triggering = channel.createFlexrayFrameTriggering(self.getShortName(child_element))
2793
+ self.readFlexrayFrameTriggering(child_element, triggering)
2376
2794
  else:
2377
2795
  self.notImplemented("Unsupported Frame Triggering <%s>" % tag_name)
2378
-
2796
+
2797
+ def readPhysicalChannelISignalTriggerings(self, element: ET.Element, channel: PhysicalChannel):
2379
2798
  for child_element in self.findall(element, "I-SIGNAL-TRIGGERINGS/*"):
2380
2799
  tag_name = self.getTagName(child_element)
2381
2800
  if tag_name == "I-SIGNAL-TRIGGERING":
@@ -2383,7 +2802,8 @@ class ARXMLParser(AbstractARXMLParser):
2383
2802
  self.readISignalTriggering(child_element, triggering)
2384
2803
  else:
2385
2804
  self.notImplemented("Unsupported Frame Triggering <%s>" % tag_name)
2386
-
2805
+
2806
+ def readPhysicalChannelPduTriggerings(self, element, channel):
2387
2807
  for child_element in self.findall(element, "PDU-TRIGGERINGS/*"):
2388
2808
  tag_name = self.getTagName(child_element)
2389
2809
  if tag_name == "PDU-TRIGGERING":
@@ -2392,8 +2812,15 @@ class ARXMLParser(AbstractARXMLParser):
2392
2812
  else:
2393
2813
  self.notImplemented("Unsupported Frame Triggering <%s>" % tag_name)
2394
2814
 
2395
- def readCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2815
+ def readPhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
2396
2816
  self.readIdentifiable(element, channel)
2817
+
2818
+ self.readPhysicalChannelCommConnectorRefs(element, channel)
2819
+ self.readPhysicalChannelFrameTriggerings(element, channel)
2820
+ self.readPhysicalChannelISignalTriggerings(element, channel)
2821
+ self.readPhysicalChannelPduTriggerings(element, channel)
2822
+
2823
+ def readCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2397
2824
  self.readPhysicalChannel(element, channel)
2398
2825
 
2399
2826
  def readScheduleTableEntry(self, element: ET.Element, entry: ScheduleTableEntry):
@@ -2432,7 +2859,6 @@ class ARXMLParser(AbstractARXMLParser):
2432
2859
  self.notImplemented("Unsupported Schedule Table <%s>" % tag_name)
2433
2860
 
2434
2861
  def readLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2435
- self.readIdentifiable(element, channel)
2436
2862
  self.readPhysicalChannel(element, channel)
2437
2863
  self.readLinPhysicalChannelScheduleTables(element, channel)
2438
2864
 
@@ -2457,7 +2883,7 @@ class ARXMLParser(AbstractARXMLParser):
2457
2883
  else:
2458
2884
  self.notImplemented("Unsupported Network EndPoint Address <%s>" % tag_name)
2459
2885
 
2460
- def getDoIpEntity(self, element: ET.Element, key:str) -> DoIpEntity:
2886
+ def getDoIpEntity(self, element: ET.Element, key: str) -> DoIpEntity:
2461
2887
  entity = None
2462
2888
  child_element = self.find(element, key)
2463
2889
  if child_element is not None:
@@ -2465,7 +2891,7 @@ class ARXMLParser(AbstractARXMLParser):
2465
2891
  entity.setDoIpEntityRole(self.getChildElementOptionalLiteral(child_element, "DO-IP-ENTITY-ROLE"))
2466
2892
  return entity
2467
2893
 
2468
- def getInfrastructureServices(self, element: ET.Element, key:str) -> InfrastructureServices:
2894
+ def getInfrastructureServices(self, element: ET.Element, key: str) -> InfrastructureServices:
2469
2895
  services = None
2470
2896
  child_element = self.find(element, key)
2471
2897
  if child_element is not None:
@@ -2511,7 +2937,7 @@ class ARXMLParser(AbstractARXMLParser):
2511
2937
  connection = SocketConnection()
2512
2938
  connection.setClientIpAddrFromConnectionRequest(self.getChildElementOptionalBooleanValue(element, "CLIENT-IP-ADDR-FROM-CONNECTION-REQUEST")) \
2513
2939
  .setClientPortFromConnectionRequest(self.getChildElementOptionalBooleanValue(element, "CLIENT-PORT-FROM-CONNECTION-REQUEST")) \
2514
- .setClientPortRef(self.getChildElementOptionalRefType(element, "CLIENT-PORT-REF"))
2940
+ .setClientPortRef(self.getChildElementOptionalRefType(element, "CLIENT-PORT-REF")) # NOQA E501
2515
2941
  for pdu in self.getSocketConnectionPdus(element):
2516
2942
  connection.addPdu(pdu)
2517
2943
  connection.setPduCollectionMaxBufferSize(self.getChildElementOptionalPositiveInteger(element, "PDU-COLLECTION-MAX-BUFFER-SIZE")) \
@@ -2526,7 +2952,7 @@ class ARXMLParser(AbstractARXMLParser):
2526
2952
  tag_name = self.getTagName(child_element)
2527
2953
  if tag_name == "SOCKET-CONNECTION":
2528
2954
  bundle.addBundledConnection(self.getSocketConnection(child_element))
2529
- else:
2955
+ else:
2530
2956
  self.notImplemented("Unsupported Bundled Connection <%s>" % tag_name)
2531
2957
 
2532
2958
  def readSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
@@ -2556,12 +2982,11 @@ class ARXMLParser(AbstractARXMLParser):
2556
2982
 
2557
2983
  def readTcpTp(self, element: ET.Element, tp: TcpTp):
2558
2984
  tp.setKeepAliveInterval(self.getChildElementOptionalTimeValue(element, "KEEP-ALIVE-INTERVAL")) \
2559
- .setKeepAliveProbesMax(self.getChildElementOptionalPositiveInteger(element, "KEEP-ALIVE-PROBES-MAX")) \
2560
- .setKeepAliveTime(self.getChildElementOptionalTimeValue(element, "KEEP-ALIVE-TIME")) \
2561
- .setKeepAlives(self.getChildElementOptionalBooleanValue(element, "KEEP-ALIVES")) \
2562
- .setNaglesAlgorithm(self.getChildElementOptionalLiteral(element, "NAGLES-ALGORITHM")) \
2563
- .setTcpTpPort(self.getTpPort(element, "TCP-TP-PORT"))
2564
-
2985
+ .setKeepAliveProbesMax(self.getChildElementOptionalPositiveInteger(element, "KEEP-ALIVE-PROBES-MAX")) \
2986
+ .setKeepAliveTime(self.getChildElementOptionalTimeValue(element, "KEEP-ALIVE-TIME")) \
2987
+ .setKeepAlives(self.getChildElementOptionalBooleanValue(element, "KEEP-ALIVES")) \
2988
+ .setNaglesAlgorithm(self.getChildElementOptionalLiteral(element, "NAGLES-ALGORITHM")) \
2989
+ .setTcpTpPort(self.getTpPort(element, "TCP-TP-PORT"))
2565
2990
 
2566
2991
  def readGenericTp(self, element: ET.Element, tp: GenericTp):
2567
2992
  tp.setTpAddress(self.getChildElementOptionalLiteral(element, "TP-ADDRESS")) \
@@ -2597,17 +3022,6 @@ class ARXMLParser(AbstractARXMLParser):
2597
3022
  delay.setMaxValue(self.getChildElementOptionalTimeValue(child_element, "MAX-VALUE")) \
2598
3023
  .setMinValue(self.getChildElementOptionalTimeValue(child_element, "MIN-VALUE"))
2599
3024
  return delay
2600
-
2601
- def getInitialSdDelayConfig(self, element: ET.Element, key: str) -> InitialSdDelayConfig:
2602
- config = None
2603
- child_element = self.find(element, key)
2604
- if child_element is not None:
2605
- config = InitialSdDelayConfig()
2606
- config.setInitialDelayMaxValue(self.getChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE")) \
2607
- .setInitialDelayMinValue(self.getChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE")) \
2608
- .setInitialRepetitionsBaseDelay(self.getChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY")) \
2609
- .setInitialRepetitionsMax(self.getChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX"))
2610
- return config
2611
3025
 
2612
3026
  def getSdClientConfig(self, element: ET.Element, key: str) -> SdClientConfig:
2613
3027
  config = None
@@ -2662,7 +3076,7 @@ class ARXMLParser(AbstractARXMLParser):
2662
3076
  .setInitialRepetitionsBaseDelay(self.getChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY")) \
2663
3077
  .setInitialRepetitionsMax(self.getChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX"))
2664
3078
  return config
2665
-
3079
+
2666
3080
  def getSdServerConfig(self, element: ET.Element, key: str) -> SdServerConfig:
2667
3081
  config = None
2668
3082
  child_element = self.find(element, key)
@@ -2684,7 +3098,7 @@ class ARXMLParser(AbstractARXMLParser):
2684
3098
  handler.setMulticastThreshold(self.getChildElementOptionalPositiveInteger(element, "MULTICAST-THRESHOLD"))
2685
3099
  for ref in self.getChildElementRefTypeList(element, "ROUTING-GROUP-REFS/ROUTING-GROUP-REF"):
2686
3100
  handler.addRoutingGroupRef(ref)
2687
- handler.setSdServerConfig(self.getSdServerConfig(element, "SD-SERVER-CONFIG")) \
3101
+ handler.setSdServerConfig(self.getSdServerConfig(element, "SD-SERVER-CONFIG"))
2688
3102
 
2689
3103
  def readProvidedServiceInstanceEventHandlers(self, element: ET.Element, instance: ProvidedServiceInstance):
2690
3104
  for child_element in self.findall(element, "EVENT-HANDLERS/*"):
@@ -2725,7 +3139,6 @@ class ARXMLParser(AbstractARXMLParser):
2725
3139
  for ref in self.getChildElementRefTypeList(element, "MULTICAST-CONNECTOR-REFS/MULTICAST-CONNECTOR-REF"):
2726
3140
  address.addMulticastConnectorRef(ref)
2727
3141
 
2728
-
2729
3142
  def readSocketAddress(self, element: ET.Element, address: SocketAddress):
2730
3143
  self.readIdentifiable(element, address)
2731
3144
  self.readSocketAddressApplicationEndpoint(element, address)
@@ -2733,7 +3146,7 @@ class ARXMLParser(AbstractARXMLParser):
2733
3146
  address.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF")) \
2734
3147
  .setPortAddress(self.getChildElementOptionalPositiveInteger(element, "PORT-ADDRESS"))
2735
3148
 
2736
- def readSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
3149
+ def readSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
2737
3150
  for child_element in self.findall(element, "SOCKET-ADDRESSS/*"):
2738
3151
  tag_name = self.getTagName(child_element)
2739
3152
  if tag_name == "SOCKET-ADDRESS":
@@ -2758,12 +3171,15 @@ class ARXMLParser(AbstractARXMLParser):
2758
3171
  vlan.setVlanIdentifier(self.getChildElementOptionalPositiveInteger(child_element, "VLAN-IDENTIFIER"))
2759
3172
 
2760
3173
  def readEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2761
- self.readIdentifiable(element, channel)
2762
3174
  self.readPhysicalChannel(element, channel)
2763
3175
  self.readEthernetPhysicalChannelNetworkEndPoints(element, channel)
2764
3176
  channel.setSoAdConfig(self.getSoAdConfig(element, "SO-AD-CONFIG"))
2765
3177
  self.readEthernetPhysicalChannelVlan(element, channel)
2766
3178
 
3179
+ def readFlexrayPhysicalChannel(self, element: ET.Element, channel: FlexrayPhysicalChannel):
3180
+ self.readPhysicalChannel(element, channel)
3181
+ channel.setChannelName(self.getChildElementOptionalLiteral(element, "CHANNEL-NAME"))
3182
+
2767
3183
  def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2768
3184
  for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
2769
3185
  tag_name = self.getTagName(child_element)
@@ -2776,12 +3192,14 @@ class ARXMLParser(AbstractARXMLParser):
2776
3192
  elif tag_name == "ETHERNET-PHYSICAL-CHANNEL":
2777
3193
  channel = cluster.createEthernetPhysicalChannel(self.getShortName(child_element))
2778
3194
  self.readEthernetPhysicalChannel(child_element, channel)
3195
+ elif tag_name == "FLEXRAY-PHYSICAL-CHANNEL":
3196
+ channel = cluster.createFlexrayPhysicalChannel(self.getShortName(child_element))
3197
+ self.readFlexrayPhysicalChannel(child_element, channel)
2779
3198
  else:
2780
3199
  self.notImplemented("Unsupported Physical Channel <%s>" % tag_name)
2781
3200
 
2782
-
2783
3201
  def readCommunicationCluster(self, element: ET.Element, cluster: CommunicationCluster):
2784
- cluster.setBaudrate(self.getChildElementOptionalNumericalValue(element, "BAUDRATE"))
3202
+ cluster.setBaudrate(self.getChildElementOptionalNumericalValue(element, "BAUDRATE"))
2785
3203
  self.readCommunicationClusterPhysicalChannels(element, cluster)
2786
3204
  cluster.setProtocolName(self.getChildElementOptionalLiteral(element, "PROTOCOL-NAME")) \
2787
3205
  .setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
@@ -2797,6 +3215,7 @@ class ARXMLParser(AbstractARXMLParser):
2797
3215
  return recovery
2798
3216
 
2799
3217
  def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
3218
+ self.readCommunicationCluster(element, cluster)
2800
3219
  cluster.setBusOffRecovery(self.getCanClusterBusOffRecovery(element, "BUS-OFF-RECOVERY")) \
2801
3220
  .setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE")) \
2802
3221
  .setSpeed(self.getChildElementOptionalNumericalValue(element, "SPEED"))
@@ -2813,9 +3232,47 @@ class ARXMLParser(AbstractARXMLParser):
2813
3232
  self.readIdentifiable(element, cluster)
2814
3233
  child_element = self.find(element, "CAN-CLUSTER-VARIANTS/CAN-CLUSTER-CONDITIONAL")
2815
3234
  if child_element is not None:
2816
- self.readCommunicationCluster(child_element, cluster)
2817
3235
  self.readAbstractCanCluster(child_element, cluster)
2818
3236
 
3237
+ def readFlexrayCluster(self, element: ET.Element, cluster: FlexrayCluster):
3238
+ self.logger.debug("Read FlexrayCluster <%s>" % cluster.getShortName())
3239
+ self.readIdentifiable(element, cluster)
3240
+ child_element = self.find(element, "FLEXRAY-CLUSTER-VARIANTS/FLEXRAY-CLUSTER-CONDITIONAL")
3241
+ if child_element is not None:
3242
+ self.readCommunicationCluster(child_element, cluster)
3243
+ cluster.setActionPointOffset(self.getChildElementOptionalIntegerValue(child_element, "ACTION-POINT-OFFSET")) \
3244
+ .setBit(self.getChildElementOptionalTimeValue(child_element, "BIT")) \
3245
+ .setCasRxLowMax(self.getChildElementOptionalIntegerValue(child_element, "CAS-RX-LOW-MAX")) \
3246
+ .setColdStartAttempts(self.getChildElementOptionalIntegerValue(child_element, "COLD-START-ATTEMPTS")) \
3247
+ .setCycle(self.getChildElementOptionalTimeValue(child_element, "CYCLE")) \
3248
+ .setCycleCountMax(self.getChildElementOptionalIntegerValue(child_element, "CYCLE-COUNT-MAX")) \
3249
+ .setDetectNitError(self.getChildElementOptionalBooleanValue(child_element, "DETECT-NIT-ERROR")) \
3250
+ .setDynamicSlotIdlePhase(self.getChildElementOptionalIntegerValue(child_element, "DYNAMIC-SLOT-IDLE-PHASE")) \
3251
+ .setIgnoreAfterTx(self.getChildElementOptionalIntegerValue(child_element, "IGNORE-AFTER-TX")) \
3252
+ .setListenNoise(self.getChildElementOptionalIntegerValue(child_element, "LISTEN-NOISE")) \
3253
+ .setMacroPerCycle(self.getChildElementOptionalIntegerValue(child_element, "MACRO-PER-CYCLE")) \
3254
+ .setMacrotickDuration(self.getChildElementOptionalTimeValue(child_element, "MACROTICK-DURATION")) \
3255
+ .setMaxWithoutClockCorrectionFatal(self.getChildElementOptionalIntegerValue(child_element, "MAX-WITHOUT-CLOCK-CORRECTION-FATAL")) \
3256
+ .setMaxWithoutClockCorrectionPassive(self.getChildElementOptionalIntegerValue(child_element, "MAX-WITHOUT-CLOCK-CORRECTION-PASSIVE")) \
3257
+ .setMinislotActionPointOffset(self.getChildElementOptionalIntegerValue(child_element, "MINISLOT-ACTION-POINT-OFFSET")) \
3258
+ .setMinislotDuration(self.getChildElementOptionalIntegerValue(child_element, "MINISLOT-DURATION")) \
3259
+ .setNetworkIdleTime(self.getChildElementOptionalIntegerValue(child_element, "NETWORK-IDLE-TIME")) \
3260
+ .setNetworkManagementVectorLength(self.getChildElementOptionalIntegerValue(child_element, "NETWORK-MANAGEMENT-VECTOR-LENGTH")) \
3261
+ .setNumberOfMinislots(self.getChildElementOptionalIntegerValue(child_element, "NUMBER-OF-MINISLOTS")) \
3262
+ .setNumberOfStaticSlots(self.getChildElementOptionalIntegerValue(child_element, "NUMBER-OF-STATIC-SLOTS")) \
3263
+ .setOffsetCorrectionStart(self.getChildElementOptionalIntegerValue(child_element, "OFFSET-CORRECTION-START")) \
3264
+ .setPayloadLengthStatic(self.getChildElementOptionalIntegerValue(child_element, "PAYLOAD-LENGTH-STATIC")) \
3265
+ .setSafetyMargin(self.getChildElementOptionalIntegerValue(child_element, "SAFETY-MARGIN")) \
3266
+ .setSampleClockPeriod(self.getChildElementOptionalTimeValue(child_element, "SAMPLE-CLOCK-PERIOD")) \
3267
+ .setStaticSlotDuration(self.getChildElementOptionalIntegerValue(child_element, "STATIC-SLOT-DURATION")) \
3268
+ .setSyncFrameIdCountMax(self.getChildElementOptionalIntegerValue(child_element, "SYNC-FRAME-ID-COUNT-MAX")) \
3269
+ .setTransmissionStartSequenceDuration(self.getChildElementOptionalIntegerValue(child_element, "TRANSMISSION-START-SEQUENCE-DURATION")) \
3270
+ .setWakeupRxIdle(self.getChildElementOptionalIntegerValue(child_element, "WAKEUP-RX-IDLE")) \
3271
+ .setWakeupRxLow(self.getChildElementOptionalIntegerValue(child_element, "WAKEUP-RX-LOW")) \
3272
+ .setWakeupRxWindow(self.getChildElementOptionalIntegerValue(child_element, "WAKEUP-RX-WINDOW")) \
3273
+ .setWakeupTxActive(self.getChildElementOptionalIntegerValue(child_element, "WAKEUP-TX-ACTIVE")) \
3274
+ .setWakeupTxIdle(self.getChildElementOptionalIntegerValue(child_element, "WAKEUP-TX-IDLE")) # noqa E501
3275
+
2819
3276
  def readMacMulticastGroup(self, element: ET.Element, group: MacMulticastGroup):
2820
3277
  self.readIdentifiable(element, group)
2821
3278
  group.setMacMulticastAddress(self.getChildElementOptionalLiteral(element, "MAC-MULTICAST-ADDRESS",))
@@ -2858,37 +3315,216 @@ class ARXMLParser(AbstractARXMLParser):
2858
3315
  self.readDiagnosticServiceTableDiagnosticConnectionRefs(element, table)
2859
3316
  table.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF"))
2860
3317
 
2861
- def readMultiplexedIPdu(self, element: ET.Element, i_pdu: MultiplexedIPdu):
2862
- self.logger.debug("Read MultiplexedIPdu <%s>" % i_pdu.getShortName())
2863
- self.readIdentifiable(element, i_pdu)
3318
+ def readSegmentPosition(self, element: ET.Element, position: SegmentPosition):
3319
+ position.setSegmentByteOrder(self.getChildElementOptionalLiteral(element, "SEGMENT-BYTE-ORDER")) \
3320
+ .setSegmentLength(self.getChildElementOptionalIntegerValue(element, "SEGMENT-LENGTH")) \
3321
+ .setSegmentPosition(self.getChildElementOptionalIntegerValue(element, "SEGMENT-POSITION"))
3322
+
3323
+ def readMultiplexedPartSegmentPositions(self, element: ET.Element, part: MultiplexedPart):
3324
+ for child_element in self.findall(element, "SEGMENT-POSITIONS/*"):
3325
+ tag_name = self.getTagName(child_element)
3326
+ if tag_name == "SEGMENT-POSITION":
3327
+ position = SegmentPosition()
3328
+ self.readSegmentPosition(child_element, position)
3329
+ part.addSegmentPosition(position)
3330
+ else:
3331
+ self.notImplemented("Unsupported DynamicPart <%s>" % tag_name)
3332
+
3333
+ def readMultiplexedPart(self, element: ET.Element, part: MultiplexedPart):
3334
+ self.readMultiplexedPartSegmentPositions(element, part)
3335
+
3336
+ def readDynamicPartAlternative(self, element: ET.Element, alternative: DynamicPartAlternative):
3337
+ alternative.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF")) \
3338
+ .setInitialDynamicPart(self.getChildElementOptionalBooleanValue(element, "INITIAL-DYNAMIC-PART")) \
3339
+ .setSelectorFieldCode(self.getChildElementOptionalIntegerValue(element, "SELECTOR-FIELD-CODE"))
3340
+
3341
+ def readDynamicPartDynamicPartAlternatives(self, element: ET.Element, part: DynamicPart):
3342
+ for child_element in self.findall(element, "DYNAMIC-PART-ALTERNATIVES/*"):
3343
+ tag_name = self.getTagName(child_element)
3344
+ if tag_name == "DYNAMIC-PART-ALTERNATIVE":
3345
+ alternative = DynamicPartAlternative()
3346
+ self.readDynamicPartAlternative(child_element, alternative)
3347
+ part.addDynamicPartAlternative(alternative)
3348
+ else:
3349
+ self.notImplemented("Unsupported DynamicPartAlternative <%s>" % tag_name)
2864
3350
 
2865
- def readUserDefinedIPdu(self, element: ET.Element, i_pdu: UserDefinedIPdu):
2866
- self.logger.debug("Read UserDefinedIPdu <%s>" % i_pdu.getShortName())
2867
- self.readIdentifiable(element, i_pdu)
3351
+ def readDynamicPart(self, element: ET.Element, part: DynamicPart):
3352
+ self.readMultiplexedPart(element, part)
3353
+ self.readDynamicPartDynamicPartAlternatives(element, part)
3354
+
3355
+ def readMultiplexedIPduDynamicParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
3356
+ for child_element in self.findall(element, "DYNAMIC-PARTS/*"):
3357
+ tag_name = self.getTagName(child_element)
3358
+ if tag_name == "DYNAMIC-PART":
3359
+ part = DynamicPart()
3360
+ self.readDynamicPart(child_element, part)
3361
+ ipdu.setDynamicPart(part)
3362
+ else:
3363
+ self.notImplemented("Unsupported DynamicPart <%s>" % tag_name)
3364
+
3365
+ def readStaticPart(self, element: ET.Element, part: StaticPart):
3366
+ self.readMultiplexedPart(element, part)
3367
+ part.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF"))
3368
+
3369
+ def readMultiplexedIPduStaticParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
3370
+ for child_element in self.findall(element, "STATIC-PARTS/*"):
3371
+ tag_name = self.getTagName(child_element)
3372
+ if tag_name == "STATIC-PART":
3373
+ part = StaticPart()
3374
+ self.readStaticPart(child_element, part)
3375
+ ipdu.setStaticPart(part)
3376
+ else:
3377
+ self.notImplemented("Unsupported StaticPart <%s>" % tag_name)
3378
+
3379
+ def readMultiplexedIPdu(self, element: ET.Element, ipdu: MultiplexedIPdu):
3380
+ self.logger.debug("Read MultiplexedIPdu <%s>" % ipdu.getShortName())
3381
+ self.readIPdu(element, ipdu)
3382
+ self.readMultiplexedIPduDynamicParts(element, ipdu)
3383
+ ipdu.setSelectorFieldByteOrder(self.getChildElementOptionalLiteral(element, "SELECTOR-FIELD-BYTE-ORDER")) \
3384
+ .setSelectorFieldLength(self.getChildElementOptionalIntegerValue(element, "SELECTOR-FIELD-LENGTH")) \
3385
+ .setSelectorFieldStartPosition(self.getChildElementOptionalIntegerValue(element, "SELECTOR-FIELD-START-POSITION"))
3386
+ self.readMultiplexedIPduStaticParts(element, ipdu)
3387
+ ipdu.setTriggerMode(self.getChildElementOptionalLiteral(element, "TRIGGER-MODE")) \
3388
+ .setUnusedBitPattern(self.getChildElementOptionalIntegerValue(element, "UNUSED-BIT-PATTERN"))
3389
+
3390
+ def readUserDefinedIPdu(self, element: ET.Element, ipdu: UserDefinedIPdu):
3391
+ self.logger.debug("Read UserDefinedIPdu <%s>" % ipdu.getShortName())
3392
+ self.readIPdu(element, ipdu)
3393
+ ipdu.setCddType(self.getChildElementOptionalLiteral(element, "CDD-TYPE"))
2868
3394
 
2869
3395
  def readUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
2870
3396
  self.logger.debug("Read UserDefinedPdu <%s>" % pdu.getShortName())
2871
- self.readIdentifiable(element, pdu)
3397
+ self.readPdu(element, pdu)
3398
+ pdu.setCddType(self.getChildElementOptionalLiteral(element, "CDD-TYPE"))
2872
3399
 
2873
3400
  def readGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
2874
3401
  self.logger.debug("Read GeneralPurposePdu <%s>" % pdu.getShortName())
2875
- self.readIdentifiable(element, pdu)
3402
+ self.readPdu(element, pdu)
2876
3403
 
2877
3404
  def readGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
2878
3405
  self.logger.debug("Read GeneralPurposeIPdu <%s>" % i_pdu.getShortName())
2879
- self.readIdentifiable(element, i_pdu)
3406
+ self.readIPdu(element, i_pdu)
3407
+
3408
+ def readSecureCommunicationAuthenticationProps(self, element: ET.Element, props: SecureCommunicationAuthenticationProps):
3409
+ self.readIdentifiable(element, props)
3410
+ props.setAuthAlgorithm(self.getChildElementOptionalLiteral(element, "AUTH-ALGORITHM")) \
3411
+ .setAuthInfoTxLength(self.getChildElementOptionalPositiveInteger(element, "AUTH-INFO-TX-LENGTH"))
3412
+
3413
+ def readSecureCommunicationPropsSetAuthenticationProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
3414
+ for child_element in self.findall(element, "AUTHENTICATION-PROPSS/*"):
3415
+ tag_name = self.getTagName(child_element)
3416
+ if tag_name == "SECURE-COMMUNICATION-AUTHENTICATION-PROPS":
3417
+ props = props_set.createSecureCommunicationAuthenticationProps(self.getShortName(child_element))
3418
+ self.readSecureCommunicationAuthenticationProps(child_element, props)
3419
+ else:
3420
+ self.notImplemented("Unsupported AuthenticationProps <%s>" % tag_name)
3421
+
3422
+ def readSecureCommunicationFreshnessProps(self, element: ET.Element, props: SecureCommunicationFreshnessProps):
3423
+ self.readIdentifiable(element, props)
3424
+ props.setFreshnessValueLength(self.getChildElementOptionalLiteral(element, "FRESHNESS-VALUE-LENGTH")) \
3425
+ .setFreshnessValueTxLength(self.getChildElementOptionalPositiveInteger(element, "FRESHNESS-VALUE-TX-LENGTH"))
3426
+
3427
+ def readSecureCommunicationPropsSetFreshnessProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
3428
+ for child_element in self.findall(element, "FRESHNESS-PROPSS/*"):
3429
+ tag_name = self.getTagName(child_element)
3430
+ if tag_name == "SECURE-COMMUNICATION-FRESHNESS-PROPS":
3431
+ props = props_set.createSecureCommunicationFreshnessProps(self.getShortName(child_element))
3432
+ self.readSecureCommunicationFreshnessProps(child_element, props)
3433
+ else:
3434
+ self.notImplemented("Unsupported FreshnessProps <%s>" % tag_name)
2880
3435
 
2881
3436
  def readSecureCommunicationPropsSet(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
2882
3437
  self.logger.debug("Read SecureCommunicationPropsSet <%s>" % props_set.getShortName())
2883
3438
  self.readIdentifiable(element, props_set)
2884
-
3439
+ self.readSecureCommunicationPropsSetAuthenticationProps(element, props_set)
3440
+ self.readSecureCommunicationPropsSetFreshnessProps(element, props_set)
3441
+
2885
3442
  def readSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
2886
3443
  self.logger.debug("Read SoAdRoutingGroup <%s>" % group.getShortName())
2887
3444
  self.readIdentifiable(element, group)
3445
+ group.setEventGroupControlType(self.getChildElementOptionalLiteral(element, "EVENT-GROUP-CONTROL-TYPE"))
3446
+
3447
+ def readDoIpLogicAddress(self, element: ET.Element, address: DoIpLogicAddress):
3448
+ self.readIdentifiable(element, address)
3449
+ address.setAddress(self.getChildElementOptionalIntegerValue(element, "ADDRESS"))
3450
+
3451
+ def readDoIpTpConfigDoIpLogicAddresses(self, element: ET.Element, config: DoIpTpConfig):
3452
+ for child_element in self.findall(element, "DO-IP-LOGIC-ADDRESSS/*"):
3453
+ tag_name = self.getTagName(child_element)
3454
+ if tag_name == "DO-IP-LOGIC-ADDRESS":
3455
+ address = config.createDoIpLogicAddress(self.getShortName(child_element))
3456
+ self.readDoIpLogicAddress(child_element, address)
3457
+ else:
3458
+ self.notImplemented("Unsupported DoIpLogicAddress <%s>" % tag_name)
3459
+
3460
+ def readDoIpTpConnection(self, element: ET.Element, connection: DoIpTpConnection):
3461
+ self.readTpConnection(element, connection)
3462
+ connection.setDoIpSourceAddressRef(self.getChildElementOptionalRefType(element, "DO-IP-SOURCE-ADDRESS-REF")) \
3463
+ .setDoIpTargetAddressRef(self.getChildElementOptionalRefType(element, "DO-IP-TARGET-ADDRESS-REF")) \
3464
+ .setTpSduRef(self.getChildElementOptionalRefType(element, "TP-SDU-REF"))
3465
+
3466
+ def readDoIpTpConfigTpConnections(self, element: ET.Element, config: DoIpTpConfig):
3467
+ for child_element in self.findall(element, "TP-CONNECTIONS/*"):
3468
+ tag_name = self.getTagName(child_element)
3469
+ if tag_name == "DO-IP-TP-CONNECTION":
3470
+ connection = DoIpTpConnection()
3471
+ self.readDoIpTpConnection(child_element, connection)
3472
+ config.addTpConnection(connection)
3473
+ else:
3474
+ self.notImplemented("Unsupported TpConnection <%s>" % tag_name)
2888
3475
 
2889
3476
  def readDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
2890
3477
  self.logger.debug("Read DoIpTpConfig <%s>" % config.getShortName())
2891
- self.readIdentifiable(element, config)
3478
+ self.readTpConfig(element, config)
3479
+ self.readDoIpTpConfigDoIpLogicAddresses(element, config)
3480
+ self.readDoIpTpConfigTpConnections(element, config)
3481
+
3482
+ def readHwDescriptionEntityHwCategoryRefs(self, element: ET.Element, entity: HwDescriptionEntity):
3483
+ for ref in self.getChildElementRefTypeList(element, "HW-CATEGORY-REFS/HW-CATEGORY-REF"):
3484
+ entity.addHwCategoryRef(ref)
3485
+
3486
+ def readHwDescriptionEntity(self, element: ET.Element, entity: HwDescriptionEntity):
3487
+ self.readARElement(element, entity)
3488
+ self.readHwDescriptionEntityHwCategoryRefs(element, entity)
3489
+
3490
+ def readHwPinGroup(self, element: ET.SubElement, pin_group: HwPinGroup):
3491
+ self.readHwDescriptionEntity(element, pin_group)
3492
+
3493
+ def readHwElementHwPinGroups(self, element: ET.Element, hw_element: HwElement):
3494
+ for child_element in self.findall(element, "HW-PIN-GROUPS/*"):
3495
+ tag_name = self.getTagName(child_element)
3496
+ if tag_name == "HW-PIN-GROUP":
3497
+ pin_group = hw_element.createHwPinGroup(self.getShortName(child_element))
3498
+ self.readHwPinGroup(child_element, pin_group)
3499
+ else:
3500
+ self.notImplemented("Unsupported Hw Pin Group <%s>" % tag_name)
3501
+
3502
+ def readHwElement(self, element: ET.Element, hw_element: HwElement):
3503
+ self.logger.debug("Read HwElement <%s>" % hw_element.getShortName())
3504
+ self.readHwDescriptionEntity(element, hw_element)
3505
+ self.readHwElementHwPinGroups(element, hw_element)
3506
+
3507
+ def readHwAttributeDef(self, element: ET.Element, attribute_def: HwAttributeDef):
3508
+ self.readIdentifiable(element, attribute_def)
3509
+ attribute_def.setUnitRef(self.getChildElementOptionalRefType(element, "UNIT-REF"))
3510
+
3511
+ def readHwCategoryHwAttributeDef(self, element: ET.Element, hw_category: HwCategory):
3512
+ for child_element in self.findall(element, "HW-ATTRIBUTE-DEFS/*"):
3513
+ tag_name = self.getTagName(child_element)
3514
+ if tag_name == "HW-ATTRIBUTE-DEF":
3515
+ pin_group = hw_category.createHwAttributeDef(self.getShortName(child_element))
3516
+ self.readHwAttributeDef(child_element, pin_group)
3517
+ else:
3518
+ self.notImplemented("Unsupported Hw Attribute Defs <%s>" % tag_name)
3519
+
3520
+ def readHwCategory(self, element: ET.Element, hw_category: HwCategory):
3521
+ self.logger.debug("Read HwCategory <%s>" % hw_category.getShortName())
3522
+ self.readARElement(element, hw_category)
3523
+ self.readHwCategoryHwAttributeDef(element, hw_category)
3524
+
3525
+ def readHwType(self, element: ET.Element, type: HwType):
3526
+ self.logger.debug("Read HwType <%s>" % type.getShortName())
3527
+ self.readARElement(element, type)
2892
3528
 
2893
3529
  def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
2894
3530
  for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
@@ -2909,82 +3545,124 @@ class ARXMLParser(AbstractARXMLParser):
2909
3545
  self.logger.debug("Read LinUnconditionalFrame <%s>" % frame.getShortName())
2910
3546
  self.readFrame(element, frame)
2911
3547
 
3548
+ def readPdu(self, element: ET.Element, pdu: Pdu):
3549
+ self.readIdentifiable(element, pdu)
3550
+ pdu.setHasDynamicLength(self.getChildElementOptionalBooleanValue(element, "HAS-DYNAMIC-LENGTH")) \
3551
+ .setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
3552
+
3553
+ def readISignalToIPduMapping(self, element: ET.Element, mapping: ISignalToIPduMapping):
3554
+ self.readIdentifiable(element, mapping)
3555
+ mapping.setISignalRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-REF")) \
3556
+ .setPackingByteOrder(self.getChildElementOptionalLiteral(element, "PACKING-BYTE-ORDER")) \
3557
+ .setStartPosition(self.getChildElementOptionalIntegerValue(element, "START-POSITION")) \
3558
+ .setTransferProperty(self.getChildElementOptionalLiteral(element, "TRANSFER-PROPERTY"))
3559
+
3560
+ def readNmPduISignalToIPduMappings(self, element: ET.Element, pdu: NmPdu):
3561
+ for child_element in self.findall(element, "I-SIGNAL-TO-I-PDU-MAPPINGS/*"):
3562
+ tag_name = self.getTagName(child_element)
3563
+ if tag_name == "I-SIGNAL-TO-I-PDU-MAPPING":
3564
+ mapping = pdu.createISignalToIPduMapping(self.getShortName(child_element))
3565
+ self.readISignalToIPduMapping(child_element, mapping)
3566
+ else:
3567
+ self.notImplemented("Unsupported ISignalToIPduMapping <%s>" % tag_name)
3568
+
2912
3569
  def readNmPdu(self, element: ET.Element, pdu: NmPdu):
2913
3570
  self.logger.debug("Read NmPdu <%s>" % pdu.getShortName())
2914
- self.readIPdu(element, pdu)
3571
+ self.readPdu(element, pdu)
3572
+ self.readNmPduISignalToIPduMappings(element, pdu)
3573
+ pdu.setUnusedBitPattern(self.getChildElementOptionalIntegerValue(element, "UNUSED-BIT-PATTERN"))
3574
+
3575
+ def readIPdu(self, element: ET.Element, pdu: IPdu):
3576
+ self.readPdu(element, pdu)
2915
3577
 
2916
3578
  def readNPdu(self, element: ET.Element, pdu: NPdu):
2917
3579
  self.logger.debug("Read NPdu <%s>" % pdu.getShortName())
2918
3580
  self.readIPdu(element, pdu)
2919
3581
 
2920
- def readIPdu(self, element: ET.Element, pdu: IPdu):
2921
- self.readIdentifiable(element, pdu)
2922
- pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
2923
-
2924
3582
  def readDcmIPdu(self, element: ET.Element, i_pdu: DcmIPdu):
2925
3583
  self.logger.debug("Read DcmIPdu <%s>" % i_pdu.getShortName())
2926
3584
  self.readIPdu(element, i_pdu)
2927
3585
  i_pdu.setDiagPduType(self.getChildElementOptionalLiteral(element, "DIAG-PDU-TYPE"))
2928
3586
 
3587
+ def getSecureCommunicationProps(self, element: ET.Element, key: str) -> SecureCommunicationProps:
3588
+ props = None
3589
+ child_element = self.find(element, key)
3590
+ if child_element is not None:
3591
+ props = SecureCommunicationProps()
3592
+ props.setAuthDataFreshnessLength(self.getChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-LENGTH")) \
3593
+ .setAuthDataFreshnessStartPosition(self.getChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-START-POSITION")) \
3594
+ .setAuthInfoTxLength(self.getChildElementOptionalPositiveInteger(child_element, "AUTH-INFO-TX-LENGTH")) \
3595
+ .setAuthenticationBuildAttempts(self.getChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-BUILD-ATTEMPTS")) \
3596
+ .setAuthenticationRetries(self.getChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-RETRIES")) \
3597
+ .setDataId(self.getChildElementOptionalPositiveInteger(child_element, "DATA-ID")) \
3598
+ .setFreshnessValueId(self.getChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-ID")) \
3599
+ .setFreshnessValueLength(self.getChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-LENGTH")) \
3600
+ .setFreshnessValueTxLength(self.getChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH")) # NOQA E501
3601
+ return props
3602
+
2929
3603
  def readSecuredIPdu(self, element: ET.Element, i_pdu: SecuredIPdu):
2930
3604
  self.logger.debug("Read SecuredIPdu <%s>" % i_pdu.getShortName())
2931
3605
  self.readIPdu(element, i_pdu)
3606
+ i_pdu.setAuthenticationPropsRef(self.getChildElementOptionalRefType(element, "AUTHENTICATION-PROPS-REF")) \
3607
+ .setFreshnessPropsRef(self.getChildElementOptionalRefType(element, "FRESHNESS-PROPS-REF")) \
3608
+ .setPayloadRef(self.getChildElementOptionalRefType(element, "PAYLOAD-REF")) \
3609
+ .setSecureCommunicationProps(self.getSecureCommunicationProps(element, "SECURE-COMMUNICATION-PROPS")) \
3610
+ .setUseAsCryptographicIPdu(self.getChildElementOptionalBooleanValue(element, "USE-AS-CRYPTOGRAPHIC-I-PDU"))
2932
3611
 
2933
3612
  def readNmNode(self, element: ET.Element, nm_node: NmNode):
2934
3613
  self.readIdentifiable(element, nm_node)
2935
3614
 
2936
3615
  nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
2937
- .setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
2938
- .setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
3616
+ .setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
3617
+ .setNmPassiveModeEnabled(self.getChildElementOptionalBooleanValue(element, "NM-PASSIVE-MODE-ENABLED")) \
3618
+ .setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
2939
3619
  for ref in self.getChildElementRefTypeList(element, "RX-NM-PDU-REFS/RX-NM-PDU-REF"):
2940
3620
  nm_node.addRxNmPduRef(ref)
2941
3621
  for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
2942
3622
  nm_node.addTxNmPduRefs(ref)
2943
3623
 
2944
3624
  def readCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
2945
- self.logger.debug("Read CanNmNode %s" % nm_node.getShortName())
2946
-
3625
+ self.logger.debug("Read CanNmNode <%s>" % nm_node.getShortName())
2947
3626
  self.readNmNode(element, nm_node)
2948
-
2949
- nm_node.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
3627
+ nm_node.setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
3628
+ .setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
2950
3629
  .setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
2951
3630
  .setNmRangeConfig(self.getChildElementRxIdentifierRange(element, "NM-RANGE-CONFIG"))
2952
3631
 
2953
3632
  def readUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
2954
- self.logger.debug("Read UdpNmNode %s" % nm_node.getShortName())
2955
-
3633
+ self.logger.debug("Read UdpNmNode <%s>" % nm_node.getShortName())
2956
3634
  self.readNmNode(element, nm_node)
3635
+ nm_node.setNmMsgCycleOffset(self.getChildElementOptionalTimeValue(element, "NM-MSG-CYCLE-OFFSET"))
2957
3636
 
2958
- def readNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2959
- self.logger.debug("readNmConfigNmNodes %s" % parent.getShortName())
3637
+ def readNmClusterNmNodes(self, element: ET.Element, cluster: NmCluster):
3638
+ self.logger.debug("readNmConfigNmNodes %s" % cluster.getShortName())
2960
3639
  for child_element in self.findall(element, "NM-NODES/*"):
2961
3640
  tag_name = self.getTagName(child_element)
2962
3641
  if tag_name == "CAN-NM-NODE":
2963
- nm_node = parent.createCanNmNode(self.getShortName(child_element))
3642
+ nm_node = cluster.createCanNmNode(self.getShortName(child_element))
2964
3643
  self.readCanNmNode(child_element, nm_node)
2965
3644
  elif tag_name == "UDP-NM-NODE":
2966
- nm_node = parent.readUdpNmNode(self.getShortName(child_element))
3645
+ nm_node = cluster.readUdpNmNode(self.getShortName(child_element))
2967
3646
  self.readUdpNmNode(child_element, nm_node)
2968
3647
  else:
2969
- self.raiseError("Unsupported Nm Node <%s>" % tag_name)
3648
+ self.notImplemented("Unsupported Nm Node <%s>" % tag_name)
2970
3649
 
2971
3650
  def getCanNmClusterCoupling(self, element: ET.Element) -> CanNmClusterCoupling:
2972
- coupling = CanNmClusterCoupling()
2973
-
3651
+ coupling = CanNmClusterCoupling()
2974
3652
  for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
2975
3653
  coupling.addCoupledClusterRef(ref)
2976
-
2977
3654
  coupling.setNmBusloadReductionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ENABLED")) \
2978
3655
  .setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
2979
-
2980
3656
  return coupling
2981
3657
 
2982
3658
  def getUdpNmClusterCoupling(self, element: ET.Element) -> UdpNmClusterCoupling:
2983
3659
  coupling = UdpNmClusterCoupling()
3660
+ for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
3661
+ coupling.addCoupledClusterRef(ref)
3662
+ coupling.setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
2984
3663
  return coupling
2985
3664
 
2986
3665
  def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
2987
- self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
2988
3666
  for child_element in self.findall(element, "NM-CLUSTER-COUPLINGS/*"):
2989
3667
  tag_name = self.getTagName(child_element)
2990
3668
  if tag_name == "CAN-NM-CLUSTER-COUPLING":
@@ -2995,6 +3673,7 @@ class ARXMLParser(AbstractARXMLParser):
2995
3673
  self.notImplemented("Unsupported Nm Node <%s>" % tag_name)
2996
3674
 
2997
3675
  def readNmCluster(self, element: ET.Element, cluster: NmCluster):
3676
+ self.logger.debug("read NmCluster %s" % cluster.getShortName())
2998
3677
  self.readIdentifiable(element, cluster)
2999
3678
  cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
3000
3679
  .setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
@@ -3002,12 +3681,9 @@ class ARXMLParser(AbstractARXMLParser):
3002
3681
  self.readNmClusterNmNodes(element, cluster)
3003
3682
  cluster.setNmSynchronizingNetwork(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK"))
3004
3683
 
3005
- def readCanNmCluster(self, element: ET.Element, parent: NmConfig):
3006
- short_name = self.getShortName(element)
3007
- self.logger.debug("readCanNmCluster %s" % short_name)
3008
- cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
3684
+ def readCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
3685
+ self.logger.debug("Read CanNmCluster <%s>" % cluster.getShortName())
3009
3686
  self.readNmCluster(element, cluster)
3010
-
3011
3687
  cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
3012
3688
  .setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
3013
3689
  .setNmCbvPosition(self.getChildElementOptionalNumericalValue(element, "NM-CBV-POSITION")) \
@@ -3023,40 +3699,380 @@ class ARXMLParser(AbstractARXMLParser):
3023
3699
  .setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
3024
3700
  .setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
3025
3701
 
3026
- def readUdpNmCluster(self, element: ET.Element, parent: NmConfig):
3027
- short_name = self.getShortName(element)
3028
- self.logger.debug("readCanNmCluster %s" % short_name)
3029
- cluster = parent.createUdpNmCluster(short_name) # type: CanNmCluster
3702
+ def readUdpNmCluster(self, element: ET.Element, cluster: UdpNmCluster):
3703
+ self.logger.debug("Read UdpNmCluster %s" % cluster.getShortName())
3030
3704
  self.readNmCluster(element, cluster)
3705
+ cluster.setNmCbvPosition(self.getChildElementOptionalIntegerValue(element, "NM-CBV-POSITION")) \
3706
+ .setNmChannelActive(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-ACTIVE")) \
3707
+ .setNmImmediateNmCycleTime(self.getChildElementOptionalTimeValue(element, "NM-IMMEDIATE-NM-CYCLE-TIME")) \
3708
+ .setNmImmediateNmTransmissions(self.getChildElementOptionalPositiveInteger(element, "NM-IMMEDIATE-NM-TRANSMISSIONS")) \
3709
+ .setNmMessageTimeoutTime(self.getChildElementOptionalTimeValue(element, "NM-MESSAGE-TIMEOUT-TIME")) \
3710
+ .setNmMsgCycleTime(self.getChildElementOptionalTimeValue(element, "NM-MSG-CYCLE-TIME")) \
3711
+ .setNmNetworkTimeout(self.getChildElementOptionalTimeValue(element, "NM-NETWORK-TIMEOUT")) \
3712
+ .setNmNidPosition(self.getChildElementOptionalIntegerValue(element, "NM-NID-POSITION")) \
3713
+ .setNmRemoteSleepIndicationTime(self.getChildElementOptionalTimeValue(element, "NM-REMOTE-SLEEP-INDICATION-TIME")) \
3714
+ .setNmRepeatMessageTime(self.getChildElementOptionalTimeValue(element, "NM-REPEAT-MESSAGE-TIME")) \
3715
+ .setNmWaitBusSleepTime(self.getChildElementOptionalTimeValue(element, "NM-WAIT-BUS-SLEEP-TIME")) \
3716
+ .setVlanRef(self.getChildElementOptionalRefType(element, "VLAN-REF"))
3031
3717
 
3032
- def readNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
3718
+ def readNmConfigNmClusters(self, element: ET.Element, nm_config: NmConfig):
3033
3719
  for child_element in self.findall(element, "NM-CLUSTERS/*"):
3034
3720
  tag_name = self.getTagName(child_element)
3035
3721
  if tag_name == "CAN-NM-CLUSTER":
3036
- self.readCanNmCluster(child_element, parent)
3722
+ cluster = nm_config.createCanNmCluster(self.getShortName(child_element))
3723
+ self.readCanNmCluster(child_element, cluster)
3037
3724
  elif tag_name == "UDP-NM-CLUSTER":
3038
- self.readUdpNmCluster(child_element, parent)
3725
+ cluster = nm_config.createUdpNmCluster(self.getShortName(child_element))
3726
+ self.readUdpNmCluster(child_element, cluster)
3039
3727
  else:
3040
3728
  self.raiseError("Unsupported Nm Cluster <%s>" % tag_name)
3729
+
3730
+ def readUdpNmEcu(self, element: ET.Element, ecu: UdpNmEcu):
3731
+ ecu.setNmSynchronizationPointEnabled(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZATION-POINT-ENABLED"))
3732
+
3733
+ def readBusDependentNmEcus(self, element: ET.Element, nm_ecu: NmEcu):
3734
+ for child_element in self.findall(element, "BUS-DEPENDENT-NM-ECUS/*"):
3735
+ tag_name = self.getTagName(child_element)
3736
+ if tag_name == "UDP-NM-ECU":
3737
+ udp_nm_ecu = UdpNmEcu()
3738
+ self.readUdpNmEcu(child_element, udp_nm_ecu)
3739
+ nm_ecu.addBusDependentNmEcu(udp_nm_ecu)
3740
+ else:
3741
+ self.notImplemented("Unsupported BusDependentNmEcu <%s>" % tag_name)
3742
+
3743
+ def readNmEcu(self, element: ET.Element, nm_ecu: NmEcu):
3744
+ self.readIdentifiable(element, nm_ecu)
3745
+ self.readBusDependentNmEcus(element, nm_ecu)
3746
+ nm_ecu.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF")) \
3747
+ .setNmBusSynchronizationEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUS-SYNCHRONIZATION-ENABLED")) \
3748
+ .setNmComControlEnabled(self.getChildElementOptionalBooleanValue(element, "NM-COM-CONTROL-ENABLED")) \
3749
+ .setNmNodeDetectionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-NODE-DETECTION-ENABLED")) \
3750
+ .setNmNodeIdEnabled(self.getChildElementOptionalBooleanValue(element, "NM-NODE-ID-ENABLED")) \
3751
+ .setNmPduRxIndicationEnabled(self.getChildElementOptionalBooleanValue(element, "NM-PDU-RX-INDICATION-ENABLED")) \
3752
+ .setNmRemoteSleepIndEnabled(self.getChildElementOptionalBooleanValue(element, "NM-REMOTE-SLEEP-IND-ENABLED")) \
3753
+ .setNmRepeatMsgIndEnabled(self.getChildElementOptionalBooleanValue(element, "NM-REPEAT-MSG-IND-ENABLED")) \
3754
+ .setNmStateChangeIndEnabled(self.getChildElementOptionalBooleanValue(element, "NM-STATE-CHANGE-IND-ENABLED")) \
3755
+ .setNmUserDataEnabled(self.getChildElementOptionalBooleanValue(element, "NM-USER-DATA-ENABLED"))
3756
+
3757
+ def readNmConfigNmIfEcus(self, element: ET.Element, nm_config: NmConfig):
3758
+ for child_element in self.findall(element, "NM-IF-ECUS/*"):
3759
+ tag_name = self.getTagName(child_element)
3760
+ if tag_name == "NM-ECU":
3761
+ ecu = nm_config.createNmEcu(self.getShortName(child_element))
3762
+ self.readNmEcu(child_element, ecu)
3763
+ else:
3764
+ self.notImplemented("Unsupported NmIfEcus <%s>" % tag_name)
3041
3765
 
3042
3766
  def readNmConfig(self, element: ET.Element, config: NmConfig):
3043
3767
  self.logger.debug("Read NmConfig <%s>" % config.getShortName())
3044
3768
  self.readIdentifiable(element, config)
3045
3769
  self.readNmConfigNmClusters(element, config)
3046
3770
  self.readNmConfigNmClusterCouplings(element, config)
3771
+ self.readNmConfigNmIfEcus(element, config)
3772
+
3773
+ def readTpConfig(self, element: ET.Element, config: TpConfig):
3774
+ self.readIdentifiable(element, config)
3775
+ config.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF"))
3776
+
3777
+ def readCanTpAddress(self, element: ET.Element, address: CanTpAddress):
3778
+ self.readIdentifiable(element, address)
3779
+ address.setTpAddress(self.getChildElementOptionalIntegerValue(element, "TP-ADDRESS")) \
3780
+ .setTpAddressExtensionValue(self.getChildElementOptionalIntegerValue(element, "TP-ADDRESS-EXTENSION-VALUE"))
3781
+
3782
+ def readCanTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
3783
+ for child_element in self.findall(element, "TP-ADDRESSS/*"):
3784
+ tag_name = self.getTagName(child_element)
3785
+ if tag_name == "CAN-TP-ADDRESS":
3786
+ address = config.createCanTpAddress(self.getShortName(child_element))
3787
+ self.readCanTpAddress(child_element, address)
3788
+ else:
3789
+ self.notImplemented("Unsupported TpAddress <%s>" % tag_name)
3790
+
3791
+ def readCanTpChannel(self, element: ET.Element, channel: CanTpChannel):
3792
+ self.readIdentifiable(element, channel)
3793
+ channel.setChannelId(self.getChildElementOptionalPositiveInteger(element, "CHANNEL-ID")) \
3794
+ .setChannelMode(self.getChildElementOptionalLiteral(element, "CHANNEL-MODE"))
3795
+
3796
+ def readCanTpConfigTpChannels(self, element: ET.Element, config: CanTpConfig):
3797
+ for child_element in self.findall(element, "TP-CHANNELS/*"):
3798
+ tag_name = self.getTagName(child_element)
3799
+ if tag_name == "CAN-TP-CHANNEL":
3800
+ channel = config.createCanTpChannel(self.getShortName(child_element))
3801
+ self.readCanTpChannel(child_element, channel)
3802
+ else:
3803
+ self.notImplemented("Unsupported TpChannel <%s>" % tag_name)
3804
+
3805
+ def readTpConnection(self, element: ET.Element, connection: TpConnection):
3806
+ self.readARObjectAttributes(element, connection)
3807
+ child_element = self.find(element, "IDENT")
3808
+ if child_element is not None:
3809
+ ident = connection.createTpConnectionIdent(self.getShortName(child_element))
3810
+ self.readReferrable(child_element, ident)
3811
+
3812
+ def readTpConnectionReceiverRefs(self, element: ET.Element, connection: CanTpConnection):
3813
+ for ref in self.getChildElementRefTypeList(element, "RECEIVER-REFS/RECEIVER-REF"):
3814
+ connection.addReceiverRef(ref)
3815
+
3816
+ def readCanTpConnection(self, element: ET.Element, connection: CanTpConnection):
3817
+ self.readTpConnection(element, connection)
3818
+ connection.setAddressingFormat(self.getChildElementOptionalLiteral(element, "ADDRESSING-FORMAT")) \
3819
+ .setCanTpChannelRef(self.getChildElementOptionalRefType(element, "CAN-TP-CHANNEL-REF")) \
3820
+ .setCancellation(self.getChildElementOptionalBooleanValue(element, "CANCELLATION")) \
3821
+ .setDataPduRef(self.getChildElementOptionalRefType(element, "DATA-PDU-REF")) \
3822
+ .setFlowControlPduRef(self.getChildElementOptionalRefType(element, "FLOW-CONTROL-PDU-REF")) \
3823
+ .setMaxBlockSize(self.getChildElementOptionalIntegerValue(element, "MAX-BLOCK-SIZE")) \
3824
+ .setMulticastRef(self.getChildElementOptionalRefType(element, "MULTICAST-REF")) \
3825
+ .setPaddingActivation(self.getChildElementOptionalBooleanValue(element, "PADDING-ACTIVATION"))
3826
+ self.readTpConnectionReceiverRefs(element, connection)
3827
+ connection.setTaType(self.getChildElementOptionalLiteral(element, "TA-TYPE")) \
3828
+ .setTimeoutBr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-BR")) \
3829
+ .setTimeoutBs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-BS")) \
3830
+ .setTimeoutCr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CR")) \
3831
+ .setTimeoutCs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CS")) \
3832
+ .setTpSduRef(self.getChildElementOptionalRefType(element, "TP-SDU-REF")) \
3833
+ .setTransmitterRef(self.getChildElementOptionalRefType(element, "TRANSMITTER-REF"))
3834
+
3835
+ def readCanTpConfigTpConnections(self, element: ET.Element, config: CanTpConfig):
3836
+ for child_element in self.findall(element, "TP-CONNECTIONS/*"):
3837
+ tag_name = self.getTagName(child_element)
3838
+ if tag_name == "CAN-TP-CONNECTION":
3839
+ connection = CanTpConnection()
3840
+ self.readCanTpConnection(child_element, connection)
3841
+ config.addTpConnection(connection)
3842
+ else:
3843
+ self.notImplemented("Unsupported TpConnection <%s>" % tag_name)
3844
+
3845
+ def readCanTpEcu(self, element: ET.Element, tp_ecu: CanTpEcu):
3846
+ tp_ecu.setCycleTimeMainFunction(self.getChildElementOptionalTimeValue(element, "CYCLE-TIME-MAIN-FUNCTION")) \
3847
+ .setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF"))
3848
+
3849
+ def readCanTpConfigTpEcus(self, element: ET.Element, config: CanTpConfig):
3850
+ for child_element in self.findall(element, "TP-ECUS/*"):
3851
+ tag_name = self.getTagName(child_element)
3852
+ if tag_name == "CAN-TP-ECU":
3853
+ tp_ecu = CanTpEcu()
3854
+ self.readCanTpEcu(child_element, tp_ecu)
3855
+ config.addTpEcu(tp_ecu)
3856
+ else:
3857
+ self.notImplemented("Unsupported TpEcu <%s>" % tag_name)
3858
+
3859
+ def readCanTpNode(self, element: ET.Element, tp_node: CanTpNode):
3860
+ self.readIdentifiable(element, tp_node)
3861
+ tp_node.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF")) \
3862
+ .setMaxFcWait(self.getChildElementOptionalIntegerValue(element, "MAX-FC-WAIT")) \
3863
+ .setStMin(self.getChildElementOptionalTimeValue(element, "ST-MIN")) \
3864
+ .setTimeoutAr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-AR")) \
3865
+ .setTimeoutAs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-AS")) \
3866
+ .setTpAddressRef(self.getChildElementOptionalRefType(element, "TP-ADDRESS-REF"))
3867
+
3868
+ def readCanTpConfigTpNodes(self, element: ET.Element, config: CanTpConfig):
3869
+ for child_element in self.findall(element, "TP-NODES/*"):
3870
+ tag_name = self.getTagName(child_element)
3871
+ if tag_name == "CAN-TP-NODE":
3872
+ tp_node = config.createCanTpNode(self.getShortName(child_element))
3873
+ self.readCanTpNode(child_element, tp_node)
3874
+ else:
3875
+ self.notImplemented("Unsupported TpNode <%s>" % tag_name)
3047
3876
 
3048
3877
  def readCanTpConfig(self, element: ET.Element, config: CanTpConfig):
3049
3878
  self.logger.debug("Read CanTpConfig <%s>" % config.getShortName())
3050
- self.readIdentifiable(element, config)
3879
+ self.readTpConfig(element, config)
3880
+ self.readCanTpConfigTpAddresses(element, config)
3881
+ self.readCanTpConfigTpChannels(element, config)
3882
+ self.readCanTpConfigTpConnections(element, config)
3883
+ self.readCanTpConfigTpEcus(element, config)
3884
+ self.readCanTpConfigTpNodes(element, config)
3885
+
3886
+ def readTpAddress(self, element: ET.Element, address: TpAddress):
3887
+ self.readIdentifiable(element, address)
3888
+ address.setTpAddress(self.getChildElementOptionalIntegerValue(element, "TP-ADDRESS"))
3889
+
3890
+ def readLinTpConfigTpAddresses(self, element: ET.Element, config: LinTpConfig):
3891
+ for child_element in self.findall(element, "TP-ADDRESSS/*"):
3892
+ tag_name = self.getTagName(child_element)
3893
+ if tag_name == "TP-ADDRESS":
3894
+ address = config.createTpAddress(self.getShortName(child_element))
3895
+ self.readTpAddress(child_element, address)
3896
+ else:
3897
+ self.notImplemented("Unsupported TpAddress <%s>" % tag_name)
3898
+
3899
+ def readLinTpConnection(self, element: ET.Element, connection: LinTpConnection):
3900
+ self.readTpConnection(element, connection)
3901
+ connection.setDataPduRef(self.getChildElementOptionalRefType(element, "DATA-PDU-REF")) \
3902
+ .setFlowControlRef(self.getChildElementOptionalRefType(element, "FLOW-CONTROL-REF")) \
3903
+ .setLinTpNSduRef(self.getChildElementOptionalRefType(element, "LIN-TP-N-SDU-REF"))
3904
+ self.readTpConnectionReceiverRefs(element, connection)
3905
+ connection.setTimeoutAs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-AS")) \
3906
+ .setTimeoutCr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CR")) \
3907
+ .setTimeoutCs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CS")) \
3908
+ .setTransmitterRef(self.getChildElementOptionalRefType(element, "TRANSMITTER-REF"))
3909
+
3910
+ def readLinTpConfigTpConnections(self, element: ET.Element, config: LinTpConfig):
3911
+ for child_element in self.findall(element, "TP-CONNECTIONS/*"):
3912
+ tag_name = self.getTagName(child_element)
3913
+ if tag_name == "LIN-TP-CONNECTION":
3914
+ connection = LinTpConnection()
3915
+ self.readLinTpConnection(child_element, connection)
3916
+ config.addTpConnection(connection)
3917
+ else:
3918
+ self.notImplemented("Unsupported TpConnection <%s>" % tag_name)
3919
+
3920
+ def readLinTpNode(self, element: ET.Element, tp_node: LinTpNode):
3921
+ self.readIdentifiable(element, tp_node)
3922
+ tp_node.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF")) \
3923
+ .setDropNotRequestedNad(self.getChildElementOptionalBooleanValue(element, "DROP-NOT-REQUESTED-NAD")) \
3924
+ .setP2Max(self.getChildElementOptionalTimeValue(element, "P-2-MAX")) \
3925
+ .setP2Timing(self.getChildElementOptionalTimeValue(element, "P-2-TIMING")) \
3926
+ .setTpAddressRef(self.getChildElementOptionalRefType(element, "TP-ADDRESS-REF"))
3927
+
3928
+ def readLinTpConfigTpNodes(self, element: ET.Element, config: LinTpConfig):
3929
+ for child_element in self.findall(element, "TP-NODES/*"):
3930
+ tag_name = self.getTagName(child_element)
3931
+ if tag_name == "LIN-TP-NODE":
3932
+ tp_node = config.createLinTpNode(self.getShortName(child_element))
3933
+ self.readLinTpNode(child_element, tp_node)
3934
+ else:
3935
+ self.notImplemented("Unsupported TpNode <%s>" % tag_name)
3051
3936
 
3052
3937
  def readLinTpConfig(self, element: ET.Element, config: LinTpConfig):
3053
3938
  self.logger.debug("Read LinTpConfig <%s>" % config.getShortName())
3054
- self.readIdentifiable(element, config)
3939
+ self.readTpConfig(element, config)
3940
+ self.readLinTpConfigTpAddresses(element, config)
3941
+ self.readLinTpConfigTpConnections(element, config)
3942
+ self.readLinTpConfigTpNodes(element, config)
3055
3943
 
3056
3944
  def readCanFrame(self, element: ET.Element, frame: CanFrame):
3057
3945
  self.logger.debug("Read CanFrame <%s>" % frame.getShortName())
3058
3946
  self.readFrame(element, frame)
3059
3947
 
3948
+ def readFlexrayFrame(self, element: ET.Element, frame: FlexrayFrame):
3949
+ self.logger.debug("Read FlexrayFrame <%s>" % frame.getShortName())
3950
+ self.readFrame(element, frame)
3951
+
3952
+ def readFlexrayCommunicationController(self, element: ET.Element, controller: FlexrayCommunicationController):
3953
+ self.logger.debug("Read CommunicationController <%s>" % controller.getShortName())
3954
+ self.readIdentifiable(element, controller)
3955
+ child_element = self.find(element, "FLEXRAY-COMMUNICATION-CONTROLLER-VARIANTS/FLEXRAY-COMMUNICATION-CONTROLLER-CONDITIONAL")
3956
+ if child_element is not None:
3957
+ self.readCommunicationController(element, controller)
3958
+ controller.setAcceptedStartupRange(self.getChildElementOptionalIntegerValue(child_element, "ACCEPTED-STARTUP-RANGE")) \
3959
+ .setAllowHaltDueToClock(self.getChildElementOptionalBooleanValue(child_element, "ALLOW-HALT-DUE-TO-CLOCK")) \
3960
+ .setAllowPassiveToActive(self.getChildElementOptionalIntegerValue(child_element, "ALLOW-PASSIVE-TO-ACTIVE")) \
3961
+ .setClusterDriftDamping(self.getChildElementOptionalIntegerValue(child_element, "CLUSTER-DRIFT-DAMPING")) \
3962
+ .setDecodingCorrection(self.getChildElementOptionalIntegerValue(child_element, "DECODING-CORRECTION")) \
3963
+ .setDelayCompensationA(self.getChildElementOptionalIntegerValue(child_element, "DELAY-COMPENSATION-A")) \
3964
+ .setDelayCompensationB(self.getChildElementOptionalIntegerValue(child_element, "DELAY-COMPENSATION-B")) \
3965
+ .setKeySlotOnlyEnabled(self.getChildElementOptionalBooleanValue(child_element, "KEY-SLOT-ONLY-ENABLED")) \
3966
+ .setKeySlotUsedForStartUp(self.getChildElementOptionalBooleanValue(child_element, "KEY-SLOT-USED-FOR-START-UP")) \
3967
+ .setKeySlotUsedForSync(self.getChildElementOptionalBooleanValue(child_element, "KEY-SLOT-USED-FOR-SYNC")) \
3968
+ .setLatestTX(self.getChildElementOptionalIntegerValue(child_element, "LATEST-TX")) \
3969
+ .setListenTimeout(self.getChildElementOptionalIntegerValue(child_element, "LISTEN-TIMEOUT")) \
3970
+ .setMacroInitialOffsetA(self.getChildElementOptionalIntegerValue(child_element, "MACRO-INITIAL-OFFSET-A")) \
3971
+ .setMacroInitialOffsetB(self.getChildElementOptionalIntegerValue(child_element, "MACRO-INITIAL-OFFSET-B")) \
3972
+ .setMaximumDynamicPayloadLength(self.getChildElementOptionalIntegerValue(child_element, "MAXIMUM-DYNAMIC-PAYLOAD-LENGTH")) \
3973
+ .setMicroInitialOffsetA(self.getChildElementOptionalIntegerValue(child_element, "MICRO-INITIAL-OFFSET-A")) \
3974
+ .setMicroInitialOffsetB(self.getChildElementOptionalIntegerValue(child_element, "MICRO-INITIAL-OFFSET-B")) \
3975
+ .setMicroPerCycle(self.getChildElementOptionalIntegerValue(child_element, "MICRO-PER-CYCLE")) \
3976
+ .setMicrotickDuration(self.getChildElementOptionalTimeValue(child_element, "MICROTICK-DURATION")) \
3977
+ .setOffsetCorrectionOut(self.getChildElementOptionalIntegerValue(child_element, "OFFSET-CORRECTION-OUT")) \
3978
+ .setRateCorrectionOut(self.getChildElementOptionalIntegerValue(child_element, "RATE-CORRECTION-OUT")) \
3979
+ .setSamplesPerMicrotick(self.getChildElementOptionalIntegerValue(child_element, "SAMPLES-PER-MICROTICK")) \
3980
+ .setWakeUpPattern(self.getChildElementOptionalIntegerValue(child_element, "WAKE-UP-PATTERN"))
3981
+
3982
+ def readDataTransformationTransformerChainRefs(self, element: ET.Element, dtf: DataTransformation):
3983
+ for ref in self.getChildElementRefTypeList(element, "TRANSFORMER-CHAIN-REFS/TRANSFORMER-CHAIN-REF"):
3984
+ dtf.addTransformerChainRef(ref)
3985
+
3986
+ def readDataTransformation(self, element: ET.Element, dtf: DataTransformation):
3987
+ self.readIdentifiable(element, dtf)
3988
+ dtf.setExecuteDespiteDataUnavailability(self.getChildElementOptionalBooleanValue(element, "EXECUTE-DESPITE-DATA-UNAVAILABILITY"))
3989
+ self.readDataTransformationTransformerChainRefs(element, dtf)
3990
+
3991
+ def readDataTransformationSetDataTransformations(self, element: ET.Element, dtf_set: DataTransformationSet):
3992
+ for child_element in self.findall(element, "DATA-TRANSFORMATIONS/*"):
3993
+ tag_name = self.getTagName(child_element)
3994
+ if tag_name == "DATA-TRANSFORMATION":
3995
+ dtf = dtf_set.createDataTransformation(self.getShortName(child_element))
3996
+ self.readDataTransformation(child_element, dtf)
3997
+ else:
3998
+ self.notImplemented("Unsupported DataTransformation <%s>" % tag_name)
3999
+
4000
+ def readBufferPropertiesBufferComputation(self, element: ET.Element, properties: BufferProperties):
4001
+ child_element = self.find(element, "BUFFER-COMPUTATION")
4002
+ if child_element is not None:
4003
+ scale = CompuScale()
4004
+ self.readCompuScale(child_element, scale)
4005
+ properties.setBufferComputation(scale)
4006
+
4007
+ def getBufferProperties(self, element: ET.Element, key: str) -> BufferProperties:
4008
+ properties = None
4009
+ child_element = self.find(element, key)
4010
+ if child_element is not None:
4011
+ properties = BufferProperties()
4012
+ self.readBufferPropertiesBufferComputation(child_element, properties)
4013
+ properties.setHeaderLength(self.getChildElementOptionalIntegerValue(child_element, "HEADER-LENGTH")) \
4014
+ .setInPlace(self.getChildElementOptionalBooleanValue(child_element, "IN-PLACE"))
4015
+ return properties
4016
+
4017
+ def readDescribable(self, element: ET.Element, desc: Describable):
4018
+ self.readARObjectAttributes(element, desc)
4019
+
4020
+ def readTransformationDescription(self, element: ET.Element, desc: TransformationDescription):
4021
+ self.readDescribable(element, desc)
4022
+
4023
+ def readEndToEndTransformationDescription(self, element: ET.Element, desc: EndToEndTransformationDescription):
4024
+ self.readTransformationDescription(element, desc)
4025
+ desc.setDataIdMode(self.getChildElementOptionalLiteral(element, "DATA-ID-MODE")) \
4026
+ .setMaxDeltaCounter(self.getChildElementOptionalPositiveInteger(element, "MAX-DELTA-COUNTER")) \
4027
+ .setMaxErrorStateInit(self.getChildElementOptionalPositiveInteger(element, "MAX-ERROR-STATE-INIT")) \
4028
+ .setMaxErrorStateInvalid(self.getChildElementOptionalPositiveInteger(element, "MAX-ERROR-STATE-INVALID")) \
4029
+ .setMaxErrorStateValid(self.getChildElementOptionalPositiveInteger(element, "MAX-ERROR-STATE-VALID")) \
4030
+ .setMaxNoNewOrRepeatedData(self.getChildElementOptionalPositiveInteger(element, "MAX-NO-NEW-OR-REPEATED-DATA")) \
4031
+ .setMinOkStateInit(self.getChildElementOptionalPositiveInteger(element, "MIN-OK-STATE-INIT")) \
4032
+ .setMinOkStateInvalid(self.getChildElementOptionalPositiveInteger(element, "MIN-OK-STATE-INVALID")) \
4033
+ .setMinOkStateValid(self.getChildElementOptionalPositiveInteger(element, "MIN-OK-STATE-VALID")) \
4034
+ .setProfileBehavior(self.getChildElementOptionalLiteral(element, "PROFILE-BEHAVIOR")) \
4035
+ .setProfileName(self.getChildElementOptionalLiteral(element, "PROFILE-NAME")) \
4036
+ .setSyncCounterInit(self.getChildElementOptionalPositiveInteger(element, "SYNC-COUNTER-INIT")) \
4037
+ .setUpperHeaderBitsToShift(self.getChildElementOptionalPositiveInteger(element, "UPPER-HEADER-BITS-TO-SHIFT")) \
4038
+ .setWindowSizeInit(self.getChildElementOptionalPositiveInteger(element, "WINDOW-SIZE-INIT")) \
4039
+ .setWindowSizeInvalid(self.getChildElementOptionalPositiveInteger(element, "WINDOW-SIZE-INVALID")) \
4040
+ .setWindowSizeValid(self.getChildElementOptionalPositiveInteger(element, "WINDOW-SIZE-VALID"))
4041
+
4042
+ def readTransformationTechnologyTransformationDescriptions(self, element: ET.Element, tech: TransformationTechnology):
4043
+ for child_element in self.findall(element, "TRANSFORMATION-DESCRIPTIONS/*"):
4044
+ tag_name = self.getTagName(child_element)
4045
+ if tag_name == "END-TO-END-TRANSFORMATION-DESCRIPTION":
4046
+ desc = EndToEndTransformationDescription()
4047
+ self.readEndToEndTransformationDescription(child_element, desc)
4048
+ tech.setTransformationDescription(desc)
4049
+ else:
4050
+ self.notImplemented("Unsupported TransformationDescription <%s>" % tag_name)
4051
+
4052
+ def readTransformationTechnology(self, element: ET.Element, tech: TransformationTechnology):
4053
+ self.readIdentifiable(element, tech)
4054
+ tech.setBufferProperties(self.getBufferProperties(element, "BUFFER-PROPERTIES")) \
4055
+ .setNeedsOriginalData(self.getChildElementOptionalBooleanValue(element, "NEEDS-ORIGINAL-DATA")) \
4056
+ .setProtocol(self.getChildElementOptionalLiteral(element, "PROTOCOL"))
4057
+ self.readTransformationTechnologyTransformationDescriptions(element, tech)
4058
+ tech.setTransformerClass(self.getChildElementOptionalLiteral(element, "TRANSFORMER-CLASS")) \
4059
+ .setVersion(self.getChildElementOptionalLiteral(element, "VERSION"))
4060
+
4061
+ def readDataTransformationSetTransformationTechnologies(self, element: ET.Element, dtf_set: DataTransformationSet):
4062
+ for child_element in self.findall(element, "TRANSFORMATION-TECHNOLOGYS/*"):
4063
+ tag_name = self.getTagName(child_element)
4064
+ if tag_name == "TRANSFORMATION-TECHNOLOGY":
4065
+ tech = dtf_set.createTransformationTechnology(self.getShortName(child_element))
4066
+ self.readTransformationTechnology(child_element, tech)
4067
+ else:
4068
+ self.notImplemented("Unsupported TransformationTechnology <%s>" % tag_name)
4069
+
4070
+ def readDataTransformationSet(self, element: ET.Element, dtf_set: DataTransformationSet):
4071
+ self.logger.debug("Read DataTransformationSet <%s>" % dtf_set.getShortName())
4072
+ self.readIdentifiable(element, dtf_set)
4073
+ self.readDataTransformationSetDataTransformations(element, dtf_set)
4074
+ self.readDataTransformationSetTransformationTechnologies(element, dtf_set)
4075
+
3060
4076
  def readCommunicationController(self, element: ET.Element, controller: CommunicationController):
3061
4077
  controller.setWakeUpByControllerSupported(self.getChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED"))
3062
4078
 
@@ -3065,7 +4081,7 @@ class ARXMLParser(AbstractARXMLParser):
3065
4081
  child_element = self.find(element, key)
3066
4082
  if child_element is not None:
3067
4083
  configuration = CanControllerFdConfiguration()
3068
- #TODO: need to implemented
4084
+ # TODO: need to implemented
3069
4085
  return configuration
3070
4086
 
3071
4087
  def getCanControllerFdConfigurationRequirements(self, element: ET.Element, key: str) -> CanControllerFdConfigurationRequirements:
@@ -3081,7 +4097,7 @@ class ARXMLParser(AbstractARXMLParser):
3081
4097
  .setMinSamplePoint(self.getChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT")) \
3082
4098
  .setMinSyncJumpWidth(self.getChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH")) \
3083
4099
  .setMinTrcvDelayCompensationOffset(self.getChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET")) \
3084
- .setTxBitRateSwitch(self.getChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH"))
4100
+ .setTxBitRateSwitch(self.getChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH")) # NOQA E501
3085
4101
  return requirements
3086
4102
 
3087
4103
  def readAbstractCanCommunicationControllerAttributes(self, element: ET.Element, attributes: AbstractCanCommunicationControllerAttributes):
@@ -3171,9 +4187,9 @@ class ARXMLParser(AbstractARXMLParser):
3171
4187
  for child_element in self.findall(element, "VLAN-MEMBERSHIPS/*"):
3172
4188
  tag_name = self.getTagName(child_element)
3173
4189
  if tag_name == "VLAN-MEMBERSHIP":
3174
- membership = VlanMembership()
3175
- self.readVlanMembership(child_element, membership)
3176
- port.addVlanMembership(membership)
4190
+ membership = VlanMembership()
4191
+ self.readVlanMembership(child_element, membership)
4192
+ port.addVlanMembership(membership)
3177
4193
  else:
3178
4194
  self.notImplemented("Unsupported VlanMembership <%s>" % tag_name)
3179
4195
 
@@ -3212,7 +4228,6 @@ class ARXMLParser(AbstractARXMLParser):
3212
4228
  self.readLinCommunicationController(child_element, controller)
3213
4229
  controller.setTimeBase(self.getChildElementOptionalTimeValue(child_element, "TIME-BASE")) \
3214
4230
  .setTimeBaseJitter(self.getChildElementOptionalTimeValue(child_element, "TIME-BASE-JITTER"))
3215
-
3216
4231
 
3217
4232
  def readEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
3218
4233
  self.logger.debug("readEcuInstanceCommControllers %s" % instance.getShortName())
@@ -3227,6 +4242,9 @@ class ARXMLParser(AbstractARXMLParser):
3227
4242
  elif tag_name == "LIN-MASTER":
3228
4243
  controller = instance.createLinMaster(self.getShortName(child_element))
3229
4244
  self.readLinMaster(child_element, controller)
4245
+ elif tag_name == "FLEXRAY-COMMUNICATION-CONTROLLER":
4246
+ controller = instance.createFlexrayCommunicationController(self.getShortName(child_element))
4247
+ self.readFlexrayCommunicationController(child_element, controller)
3230
4248
  else:
3231
4249
  self.raiseError("Unsupported Communication Controller <%s>" % tag_name)
3232
4250
 
@@ -3241,7 +4259,7 @@ class ARXMLParser(AbstractARXMLParser):
3241
4259
  self.readCommConnectorPort(element, port)
3242
4260
  port.setKeyId(self.getChildElementOptionalPositiveInteger(element, "KEY-ID")) \
3243
4261
  .setRxSecurityVerification(self.getChildElementOptionalBooleanValue(element, "RX-SECURITY-VERIFICATION")) \
3244
- .setUseAuthDataFreshness(self.getChildElementOptionalBooleanValue(element, "USE-AUTH-DATA-FRESHNESS")) \
4262
+ .setUseAuthDataFreshness(self.getChildElementOptionalBooleanValue(element, "USE-AUTH-DATA-FRESHNESS"))
3245
4263
 
3246
4264
  def readISignalPort(self, element: ET.Element, port: ISignalPort):
3247
4265
  self.readCommConnectorPort(element, port)
@@ -3261,7 +4279,7 @@ class ARXMLParser(AbstractARXMLParser):
3261
4279
  port = connector.createISignalPort(self.getShortName(child_element))
3262
4280
  self.readISignalPort(child_element, port)
3263
4281
  else:
3264
- self.raiseError("Unsupported EcuCommPortInstances <%s>" % tag_name)
4282
+ self.raiseError("Unsupported EcuCommPortInstances <%s>" % tag_name)
3265
4283
 
3266
4284
  def readCommunicationConnector(self, element: ET.Element, connector: CommunicationConnector):
3267
4285
  self.readIdentifiable(element, connector)
@@ -3272,13 +4290,21 @@ class ARXMLParser(AbstractARXMLParser):
3272
4290
  def readCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
3273
4291
  self.readCommunicationConnector(element, connector)
3274
4292
 
4293
+ def readEthernetCommunicationConnectorNetworkEndpointRefs(self, element: ET.Element, connector: EthernetCommunicationConnector):
4294
+ for ref in self.getChildElementRefTypeList(element, "NETWORK-ENDPOINT-REFS/NETWORK-ENDPOINT-REF"):
4295
+ connector.addNetworkEndpointRef(ref)
4296
+
3275
4297
  def readEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
3276
4298
  self.readCommunicationConnector(element, connector)
3277
4299
  connector.setMaximumTransmissionUnit(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT"))
4300
+ self.readEthernetCommunicationConnectorNetworkEndpointRefs(element, connector)
3278
4301
 
3279
4302
  def readLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
3280
4303
  self.readCommunicationConnector(element, connector)
3281
4304
 
4305
+ def readFlexrayCommunicationConnector(self, element: ET.Element, connector: FlexrayCommunicationConnector):
4306
+ self.readCommunicationConnector(element, connector)
4307
+
3282
4308
  def readEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
3283
4309
  self.logger.debug("readEcuInstanceCommControllers %s" % instance.getShortName())
3284
4310
  for child_element in self.findall(element, "CONNECTORS/*"):
@@ -3292,6 +4318,9 @@ class ARXMLParser(AbstractARXMLParser):
3292
4318
  elif tag_name == "LIN-COMMUNICATION-CONNECTOR":
3293
4319
  connector = instance.createLinCommunicationConnector(self.getShortName(child_element))
3294
4320
  self.readLinCommunicationConnector(child_element, connector)
4321
+ elif tag_name == "FLEXRAY-COMMUNICATION-CONNECTOR":
4322
+ connector = instance.createFlexrayCommunicationConnector(self.getShortName(child_element))
4323
+ self.readFlexrayCommunicationConnector(child_element, connector)
3295
4324
  else:
3296
4325
  self.notImplemented("Unsupported Communication Connector <%s>" % tag_name)
3297
4326
 
@@ -3309,7 +4338,8 @@ class ARXMLParser(AbstractARXMLParser):
3309
4338
  .setComEnableMDTForCyclicTransmission(self.getChildElementOptionalBooleanValue(element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION"))
3310
4339
  self.readEcuInstanceCommControllers(element, instance)
3311
4340
  self.readEcuInstanceConnectors(element, instance)
3312
- instance.setSleepModeSupported(self.getChildElementOptionalBooleanValue(element, "SLEEP-MODE-SUPPORTED")) \
4341
+ instance.setDiagnosticAddress(self.getChildElementOptionalIntegerValue(element, "DIAGNOSTIC-ADDRESS")) \
4342
+ .setSleepModeSupported(self.getChildElementOptionalBooleanValue(element, "SLEEP-MODE-SUPPORTED")) \
3313
4343
  .setWakeUpOverBusSupported(self.getChildElementOptionalBooleanValue(element, "WAKE-UP-OVER-BUS-SUPPORTED"))
3314
4344
 
3315
4345
  '''
@@ -3370,7 +4400,7 @@ class ARXMLParser(AbstractARXMLParser):
3370
4400
 
3371
4401
  def readEcucValueCollectionEcucValues(self, element: ET.Element, parent: EcucValueCollection):
3372
4402
  for child_element in self.findall(element, "ECUC-VALUES/ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL"):
3373
- ref = self.getChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF")
4403
+ ref = self.getChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF")
3374
4404
  if (ref is not None):
3375
4405
  parent.addEcucValueRef(ref)
3376
4406
  self.logger.debug("EcucValue <%s> of EcucValueCollection <%s> has been added", ref.value, parent.getShortName())
@@ -3424,7 +4454,7 @@ class ARXMLParser(AbstractARXMLParser):
3424
4454
  child_element = self.find(element, key)
3425
4455
  if child_element is not None:
3426
4456
  instance_ref = AnyInstanceRef()
3427
- instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF"))
4457
+ instance_ref.setBaseRef(self.getChildElementOptionalRefType(child_element, "BASE-REF"))
3428
4458
  for ref in self.getChildElementRefTypeList(child_element, "CONTEXT-ELEMENT-REF"):
3429
4459
  instance_ref.addContextElementRef(ref)
3430
4460
  instance_ref.setTargetRef(self.getChildElementOptionalRefType(child_element, "TARGET-REF"))
@@ -3465,7 +4495,7 @@ class ARXMLParser(AbstractARXMLParser):
3465
4495
  if tag_name == "ECUC-CONTAINER-VALUE":
3466
4496
  self.readEcucContainerValueEcucContainerValue(child_element, parent)
3467
4497
  else:
3468
- self.notImplemented("Unsupported Sub Container %s" % tag_name)
4498
+ self.notImplemented("Unsupported Sub Container %s" % tag_name)
3469
4499
 
3470
4500
  def readEcucModuleConfigurationValuesEcucContainerValue(self, element: ET.Element, parent: EcucModuleConfigurationValues):
3471
4501
  short_name = self.getShortName(element)
@@ -3479,7 +4509,7 @@ class ARXMLParser(AbstractARXMLParser):
3479
4509
  if tag_name == "ECUC-CONTAINER-VALUE":
3480
4510
  self.readEcucModuleConfigurationValuesEcucContainerValue(child_element, values)
3481
4511
  else:
3482
- self.notImplemented("Unsupported Container %s" % tag_name)
4512
+ self.notImplemented("Unsupported Container %s" % tag_name)
3483
4513
 
3484
4514
  def readEcucModuleConfigurationValues(self, element: ET.Element, values: EcucModuleConfigurationValues):
3485
4515
  self.logger.debug("Read EcucModuleConfigurationValues %s" % values.getShortName())
@@ -3492,9 +4522,12 @@ class ARXMLParser(AbstractARXMLParser):
3492
4522
  def readPhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
3493
4523
  self.logger.debug("Read PhysicalDimension <%s>" % dimension.getShortName())
3494
4524
  self.readIdentifiable(element, dimension)
3495
- dimension.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
3496
- .setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
3497
- .setTimeExp(self.getChildElementOptionalNumericalValue(element, "TIME-EXP"))
4525
+ dimension.setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
4526
+ .setLuminousIntensityExp(self.getChildElementOptionalNumericalValue(element, "LUMINOUS-INTENSITY-EXP")) \
4527
+ .setMassExp(self.getChildElementOptionalNumericalValue(element, "MASS-EXP")) \
4528
+ .setTemperatureExp(self.getChildElementOptionalNumericalValue(element, "TEMPERATURE-EXP")) \
4529
+ .setTimeExp(self.getChildElementOptionalNumericalValue(element, "TIME-EXP")) \
4530
+ .setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
3498
4531
 
3499
4532
  '''
3500
4533
  def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
@@ -3507,12 +4540,47 @@ class ARXMLParser(AbstractARXMLParser):
3507
4540
  return mappings
3508
4541
  '''
3509
4542
 
4543
+ def readISignalGroupISignalRef(self, element: ET.Element, group: ISignalGroup):
4544
+ for ref_type in self.getChildElementRefTypeList(element, "I-SIGNAL-REFS/I-SIGNAL-REF"):
4545
+ group.addISignalRef(ref_type)
4546
+
4547
+ def readISignalGroupComBasedSignalGroupTransformation(self, element: ET.Element, group: ISignalGroup):
4548
+ for ref in self.getChildElementRefTypeList(element, "COM-BASED-SIGNAL-GROUP-TRANSFORMATIONS/DATA-TRANSFORMATION-REF-CONDITIONAL/DATA-TRANSFORMATION-REF"): # noqa E501
4549
+ group.addComBasedSignalGroupTransformationRef(ref)
4550
+
4551
+ def readTransformationISignalProps(self, element: ET.Element, props: TransformationISignalProps):
4552
+ self.readDescribable(element, props)
4553
+
4554
+ def readEndToEndTransformationISignalPropsDataIds(self, element: ET.Element, props: EndToEndTransformationISignalProps):
4555
+ child_element = self.find(element, "DATA-IDS")
4556
+ if child_element is not None:
4557
+ props.addDataId(self.getChildElementOptionalPositiveInteger(child_element, "DATA-ID"))
4558
+
4559
+ def readEndToEndTransformationISignalProps(self, element: ET.Element, props: EndToEndTransformationISignalProps):
4560
+ child_element = self.find(element, "END-TO-END-TRANSFORMATION-I-SIGNAL-PROPS-VARIANTS/END-TO-END-TRANSFORMATION-I-SIGNAL-PROPS-CONDITIONAL")
4561
+ if child_element is not None:
4562
+ self.readTransformationISignalProps(child_element, props)
4563
+ props.setTransformerRef(self.getChildElementOptionalRefType(child_element, "TRANSFORMER-REF"))
4564
+ self.readEndToEndTransformationISignalPropsDataIds(child_element, props)
4565
+ props.setDataLength(self.getChildElementOptionalPositiveInteger(child_element, "DATA-LENGTH"))
4566
+
4567
+ def readISignalGroupTransformationISignalProps(self, element: ET.Element, group: ISignalGroup):
4568
+ for child_element in self.findall(element, "TRANSFORMATION-I-SIGNAL-PROPSS/*"):
4569
+ tag_name = self.getTagName(child_element)
4570
+ if tag_name == "END-TO-END-TRANSFORMATION-I-SIGNAL-PROPS":
4571
+ props = EndToEndTransformationISignalProps()
4572
+ self.readEndToEndTransformationISignalProps(child_element, props)
4573
+ group.setTransformationISignalProps(props)
4574
+ else:
4575
+ self.notImplemented("Unsupported TransformationISignalProps %s" % tag_name)
4576
+
3510
4577
  def readISignalGroup(self, element: ET.Element, group: ISignalGroup):
3511
4578
  self.logger.debug("Read ISignalGroup <%s>" % group.getShortName())
3512
4579
  self.readIdentifiable(element, group)
3513
- for ref_type in self.getChildElementRefTypeList(element, "I-SIGNAL-REFS/I-SIGNAL-REF"):
3514
- group.addISignalRef(ref_type)
3515
- group.systemSignalGroupRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-GROUP-REF")
4580
+ self.readISignalGroupComBasedSignalGroupTransformation(element, group)
4581
+ self.readISignalGroupISignalRef(element, group)
4582
+ group.setSystemSignalGroupRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-GROUP-REF"))
4583
+ self.readISignalGroupTransformationISignalProps(element, group)
3516
4584
 
3517
4585
  def readSystemSignal(self, element: ET.Element, signal: SystemSignal):
3518
4586
  self.logger.debug("Read SystemSignal <%s>" % signal.getShortName())
@@ -3543,7 +4611,10 @@ class ARXMLParser(AbstractARXMLParser):
3543
4611
  child_element = self.find(element, key)
3544
4612
  if child_element is not None:
3545
4613
  filter = DataFilter()
3546
- filter.setDataFilterType(self.getChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE"))
4614
+ filter.setDataFilterType(self.getChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE")) \
4615
+ .setMask(self.getChildElementOptionalIntegerValue(child_element, "MASK")) \
4616
+ .setX(self.getChildElementOptionalIntegerValue(child_element, "X"))
4617
+
3547
4618
  return filter
3548
4619
 
3549
4620
  def getTransmissionModeConditions(self, element: ET.Element, key: str) -> List[TransmissionModeCondition]:
@@ -3555,7 +4626,7 @@ class ARXMLParser(AbstractARXMLParser):
3555
4626
  .setISignalInIPduRef(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-IN-I-PDU-REF"))
3556
4627
  result.append(condition)
3557
4628
  return result
3558
-
4629
+
3559
4630
  def getTimeRangeType(self, element: ET.Element, key: str) -> TimeRangeType:
3560
4631
  time_range = None
3561
4632
  child_element = self.find(element, key)
@@ -3563,7 +4634,7 @@ class ARXMLParser(AbstractARXMLParser):
3563
4634
  time_range = TimeRangeType()
3564
4635
  time_range.setValue(self.getChildElementOptionalTimeValue(child_element, "VALUE"))
3565
4636
  return time_range
3566
-
4637
+
3567
4638
  def getCyclicTiming(self, element: ET.Element, key: str) -> CyclicTiming:
3568
4639
  timing = None
3569
4640
  child_element = self.find(element, key)
@@ -3595,11 +4666,12 @@ class ARXMLParser(AbstractARXMLParser):
3595
4666
  def getTransmissionModeDeclaration(self, element: ET.Element, key: str) -> TransmissionModeDeclaration:
3596
4667
  decl = None
3597
4668
  child_element = self.find(element, key)
3598
- if child_element != None:
4669
+ if child_element is not None:
3599
4670
  decl = TransmissionModeDeclaration()
3600
4671
  for condition in self.getTransmissionModeConditions(child_element, "TRANSMISSION-MODE-CONDITIONS/TRANSMISSION-MODE-CONDITION"):
3601
4672
  decl.addTransmissionModeCondition(condition)
3602
- decl.setTransmissionModeTrueTiming(self.getTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING"))
4673
+ decl.setTransmissionModeFalseTiming(self.getTransmissionModeTiming(child_element, "TRANSMISSION-MODE-FALSE-TIMING")) \
4674
+ .setTransmissionModeTrueTiming(self.getTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING"))
3603
4675
  return decl
3604
4676
 
3605
4677
  def getISignalIPduIPduTimingSpecification(self, element: ET.Element) -> IPduTiming:
@@ -3611,16 +4683,16 @@ class ARXMLParser(AbstractARXMLParser):
3611
4683
  .setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
3612
4684
  return timing
3613
4685
 
3614
- def readISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
3615
- self.logger.debug("Read ISignalIPdu <%s>" % i_pdu.getShortName())
3616
- self.readIdentifiable(element, i_pdu)
3617
- i_pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
4686
+ def readISignalIPdu(self, element: ET.Element, ipdu: ISignalIPdu):
4687
+ self.logger.debug("Read ISignalIPdu <%s>" % ipdu.getShortName())
4688
+ self.readIdentifiable(element, ipdu)
4689
+ ipdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
3618
4690
  .setIPduTimingSpecification(self.getISignalIPduIPduTimingSpecification(element))
3619
- self.readISignalToPduMappings(element, i_pdu)
3620
- i_pdu.setUnusedBitPattern(self.getChildElementOptionalLiteral(element, "UNUSED-BIT-PATTERN"))
4691
+ self.readISignalToPduMappings(element, ipdu)
4692
+ ipdu.setUnusedBitPattern(self.getChildElementOptionalIntegerValue(element, "UNUSED-BIT-PATTERN"))
3621
4693
 
3622
4694
  def getISignalIPduRefs(self, element: ET.Element) -> List[RefType]:
3623
- ref_types = []
4695
+ ref_types = []
3624
4696
  for child_element in self.findall(element, "I-SIGNAL-I-PDUS/I-SIGNAL-I-PDU-REF-CONDITIONAL"):
3625
4697
  ref_types.append(self.getChildElementOptionalRefType(child_element, "I-SIGNAL-I-PDU-REF"))
3626
4698
  return ref_types
@@ -3635,26 +4707,61 @@ class ARXMLParser(AbstractARXMLParser):
3635
4707
  for ref_type in self.getISignalIPduRefs(element):
3636
4708
  group.addISignalIPduRef(ref_type)
3637
4709
 
3638
- def getSenderReceiverToSignalMapping(self, element: ET.Element) -> SenderReceiverToSignalMapping:
3639
- mapping = SenderReceiverToSignalMapping()
4710
+ def readSenderReceiverToSignalMapping(self, element: ET.Element, mapping: SenderReceiverToSignalMapping):
3640
4711
  mapping.setCommunicationDirection(self.getChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION")) \
3641
4712
  .setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF"))) \
3642
4713
  .setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
3643
- return mapping
3644
4714
 
3645
- def getSenderReceiverToSignalGroupMapping(self, element: ET.Element) -> SenderReceiverToSignalGroupMapping:
3646
- mapping = SenderReceiverToSignalGroupMapping()
4715
+ def readSenderRecCompositeTypeMapping(self, element: ET.Element, mapping: SenderRecCompositeTypeMapping):
4716
+ self.readARObjectAttributes(element, mapping)
4717
+
4718
+ def readSenderRecRecordElementMapping(self, element: ET.Element, mapping: SenderRecRecordElementMapping):
4719
+ self.readARObjectAttributes(element, mapping)
4720
+ mapping.setApplicationRecordElementRef(self.getChildElementOptionalRefType(element, "APPLICATION-RECORD-ELEMENT-REF")) \
4721
+ .setImplementationRecordElementRef(self.getChildElementOptionalRefType(element, "IMPLEMENTATION-RECORD-ELEMENT-REF")) \
4722
+ .setSystemSignalRef(self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF"))
4723
+
4724
+ def readSenderRecArrayTypeMappingRecordElementMapping(self, element: ET.Element, mapping: SenderRecRecordTypeMapping):
4725
+ for child_element in self.findall(element, "RECORD-ELEMENT-MAPPINGS/*"):
4726
+ tag_name = self.getTagName(child_element)
4727
+ if tag_name == "SENDER-REC-RECORD-ELEMENT-MAPPING":
4728
+ record_element_mapping = SenderRecRecordElementMapping()
4729
+ self.readSenderRecRecordElementMapping(child_element, record_element_mapping)
4730
+ mapping.addRecordElementMapping(record_element_mapping)
4731
+ else:
4732
+ self.notImplemented("Unsupported RecordElementMapping %s" % tag_name)
4733
+
4734
+ def readSenderRecRecordTypeMapping(self, element: ET.Element, mapping: SenderRecRecordTypeMapping):
4735
+ self.readSenderRecCompositeTypeMapping(element, mapping)
4736
+ self.readSenderRecArrayTypeMappingRecordElementMapping(element, mapping)
4737
+
4738
+ def readSenderReceiverToSignalGroupMappingTypeMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
4739
+ child_element = self.find(element, "TYPE-MAPPING/*")
4740
+ if child_element is not None:
4741
+ tag_name = self.getTagName(child_element)
4742
+ if tag_name == "SENDER-REC-RECORD-TYPE-MAPPING":
4743
+ type_mapping = SenderRecRecordTypeMapping()
4744
+ self.readSenderRecRecordTypeMapping(child_element, type_mapping)
4745
+ mapping.setTypeMapping(type_mapping)
4746
+ else:
4747
+ self.notImplemented("Unsupported Type Mapping %s" % tag_name)
4748
+
4749
+ def readSenderReceiverToSignalGroupMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
3647
4750
  mapping.setDataElementIRef(self.getVariableDataPrototypeInSystemInstanceRef(self.find(element, "DATA-ELEMENT-IREF")))
3648
4751
  mapping.setSignalGroupRef(self.getChildElementOptionalRefType(element, "SIGNAL-GROUP-REF"))
3649
- return mapping
3650
-
4752
+ self.readSenderReceiverToSignalGroupMappingTypeMapping(element, mapping)
4753
+
3651
4754
  def readSystemMappingDataMappings(self, element: ET.Element, mapping: SystemMapping):
3652
4755
  for child_element in self.findall(element, "DATA-MAPPINGS/*"):
3653
4756
  tag_name = self.getTagName(child_element)
3654
4757
  if tag_name == "SENDER-RECEIVER-TO-SIGNAL-MAPPING":
3655
- mapping.addDataMapping(self.getSenderReceiverToSignalMapping(child_element))
4758
+ signal_mapping = SenderReceiverToSignalMapping()
4759
+ self.readSenderReceiverToSignalMapping(child_element, signal_mapping)
4760
+ mapping.addDataMapping(signal_mapping)
3656
4761
  elif tag_name == "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING":
3657
- mapping.addDataMapping(self.getSenderReceiverToSignalGroupMapping(child_element))
4762
+ signal_group_mapping = SenderReceiverToSignalGroupMapping()
4763
+ self.readSenderReceiverToSignalGroupMapping(child_element, signal_group_mapping)
4764
+ mapping.addDataMapping(signal_group_mapping)
3658
4765
  else:
3659
4766
  self.notImplemented("Unsupported Data Mapping %s" % tag_name)
3660
4767
 
@@ -3664,31 +4771,62 @@ class ARXMLParser(AbstractARXMLParser):
3664
4771
  for child_element in self.findall(element, "COMPONENT-IREFS/COMPONENT-IREF"):
3665
4772
  mapping.addComponentIRef(self.getComponentInSystemInstanceRef(child_element))
3666
4773
  mapping.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF"))
3667
-
4774
+
3668
4775
  def readSystemMappingSwMappings(self, element: ET.Element, mapping: SystemMapping):
3669
4776
  for child_element in self.findall(element, "SW-MAPPINGS/*"):
3670
4777
  tag_name = self.getTagName(child_element)
3671
4778
  if tag_name == "SWC-TO-ECU-MAPPING":
3672
- self.readSwcToEcuMapping(child_element, mapping.createSwcToEcuMapping(self.getShortName(child_element)))
4779
+ swc_to_ecu_mapping = mapping.createSwcToEcuMapping(self.getShortName(child_element))
4780
+ self.readSwcToEcuMapping(child_element, swc_to_ecu_mapping)
3673
4781
  else:
3674
4782
  self.notImplemented("Unsupported Sw Mapping %s" % tag_name)
3675
4783
 
3676
- def readSystemMapping(self, element: ET.Element, parent: System):
3677
- short_name = self.getShortName(element)
3678
- self.logger.debug("SystemMapping %s" % short_name)
3679
- mapping = parent.createSystemMapping(short_name)
4784
+ def readEcuMapping(self, element: ET.Element, mapping: ECUMapping):
4785
+ self.readIdentifiable(element, mapping)
4786
+ mapping.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF")) \
4787
+ .setEcuRef(self.getChildElementOptionalRefType(element, "ECU-REF"))
4788
+
4789
+ def readSystemMappingEcuResourceMappings(self, element: ET.Element, mapping: SystemMapping):
4790
+ for child_element in self.findall(element, "ECU-RESOURCE-MAPPINGS/*"):
4791
+ tag_name = self.getTagName(child_element)
4792
+ if tag_name == "ECU-MAPPING":
4793
+ ecu_mapping = mapping.createECUMapping(self.getShortName(child_element))
4794
+ self.readEcuMapping(child_element, ecu_mapping)
4795
+ else:
4796
+ self.notImplemented("Unsupported EcuResourceMapping <%s>" % tag_name)
4797
+
4798
+ def readSwcToImplMapping(self, element: ET.Element, mapping: SwcToImplMapping):
4799
+ self.readIdentifiable(element, mapping)
4800
+ mapping.setComponentImplementationRef(self.getChildElementOptionalRefType(element, "COMPONENT-IMPLEMENTATION-REF"))
4801
+ for child_element in self.findall(element, "COMPONENT-IREFS/COMPONENT-IREF"):
4802
+ mapping.addComponentIRef(self.getComponentInSystemInstanceRef(child_element))
4803
+
4804
+ def readSystemMappingSwImplMappings(self, element: ET.Element, mapping: SystemMapping):
4805
+ for child_element in self.findall(element, "SW-IMPL-MAPPINGS/*"):
4806
+ tag_name = self.getTagName(child_element)
4807
+ if tag_name == "SWC-TO-IMPL-MAPPING":
4808
+ sw_impl_mapping = mapping.createSwcToImplMapping(self.getShortName(child_element))
4809
+ self.readSwcToImplMapping(child_element, sw_impl_mapping)
4810
+ else:
4811
+ self.notImplemented("Unsupported SwImplMapping <%s>" % tag_name)
4812
+
4813
+ def readSystemMapping(self, element: ET.Element, mapping: SystemMapping):
4814
+ self.logger.debug("SystemMapping %s" % mapping.getShortName())
3680
4815
  self.readIdentifiable(element, mapping)
3681
4816
  self.readSystemMappingDataMappings(element, mapping)
4817
+ self.readSystemMappingEcuResourceMappings(element, mapping)
4818
+ self.readSystemMappingSwImplMappings(element, mapping)
3682
4819
  self.readSystemMappingSwMappings(element, mapping)
3683
4820
 
3684
4821
  def readSystemMappings(self, element: ET.Element, system: System):
3685
4822
  for child_element in self.findall(element, "MAPPINGS/*"):
3686
4823
  tag_name = self.getTagName(child_element)
3687
4824
  if tag_name == "SYSTEM-MAPPING":
3688
- self.readSystemMapping(child_element, system)
4825
+ mapping = system.createSystemMapping(self.getShortName(child_element))
4826
+ self.readSystemMapping(child_element, mapping)
3689
4827
  else:
3690
4828
  self.notImplemented("Unsupported Mapping %s" % tag_name)
3691
-
4829
+
3692
4830
  def readRootSwCompositionPrototype(self, element: ET.Element, system: System):
3693
4831
  child_element = self.find(element, "ROOT-SOFTWARE-COMPOSITIONS/ROOT-SW-COMPOSITION-PROTOTYPE")
3694
4832
  if child_element is not None:
@@ -3698,7 +4836,8 @@ class ARXMLParser(AbstractARXMLParser):
3698
4836
  self.readIdentifiable(child_element, prototype)
3699
4837
  prototype.setFlatMapRef(self.getChildElementOptionalRefType(child_element, "FLAT-MAP-REF")) \
3700
4838
  .setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
3701
-
4839
+ AUTOSAR.getInstance().setRootSwCompositionPrototype(prototype)
4840
+
3702
4841
  def readSystemFibexElementRefs(self, element: ET.Element, system: System):
3703
4842
  for ref in self.getChildElementRefTypeList(element, "FIBEX-ELEMENTS/FIBEX-ELEMENT-REF-CONDITIONAL/FIBEX-ELEMENT-REF"):
3704
4843
  system.addFibexElementRef(ref)
@@ -3711,6 +4850,7 @@ class ARXMLParser(AbstractARXMLParser):
3711
4850
  self.readSystemMappings(element, system)
3712
4851
  self.readRootSwCompositionPrototype(element, system)
3713
4852
  system.setSystemVersion(self.getChildElementOptionalRevisionLabelString(element, "SYSTEM-VERSION"))
4853
+ AUTOSAR.getInstance().addSystem(system)
3714
4854
 
3715
4855
  def readGenericEthernetFrame(self, element: ET.Element, frame: GenericEthernetFrame):
3716
4856
  self.logger.debug("Read GenericEthernetFrame <%s>" % frame.getShortName())
@@ -3779,7 +4919,7 @@ class ARXMLParser(AbstractARXMLParser):
3779
4919
  type = parent.createComplexDeviceDriverSwComponentType(self.getShortName(child_element))
3780
4920
  self.readComplexDeviceDriverSwComponentType(child_element, type)
3781
4921
  elif tag_name == "SWC-IMPLEMENTATION":
3782
- impl = parent.createSwcImplementation(self.getShortName(child_element))
4922
+ impl = parent.createSwcImplementation(self.getShortName(child_element))
3783
4923
  self.readSwcImplementation(child_element, impl)
3784
4924
  elif tag_name == "APPLICATION-PRIMITIVE-DATA-TYPE":
3785
4925
  data_type = parent.createApplicationPrimitiveDataType(self.getShortName(child_element))
@@ -3818,7 +4958,7 @@ class ARXMLParser(AbstractARXMLParser):
3818
4958
  mapping = parent.createSwcBswMapping(self.getShortName(child_element))
3819
4959
  self.readSwcBswMapping(child_element, mapping)
3820
4960
  elif tag_name == "BSW-IMPLEMENTATION":
3821
- impl = parent.createBswImplementation(self.getShortName(child_element))
4961
+ impl = parent.createBswImplementation(self.getShortName(child_element))
3822
4962
  self.readBswImplementation(child_element, impl)
3823
4963
  elif tag_name == "IMPLEMENTATION-DATA-TYPE":
3824
4964
  data_type = parent.createImplementationDataType(self.getShortName(child_element))
@@ -3881,7 +5021,7 @@ class ARXMLParser(AbstractARXMLParser):
3881
5021
  i_pdu = parent.createSecuredIPdu(self.getShortName(child_element))
3882
5022
  self.readSecuredIPdu(child_element, i_pdu)
3883
5023
  elif tag_name == "NM-CONFIG":
3884
- config = parent.createNmConfig(self.getShortName(child_element))
5024
+ config = parent.createNmConfig(self.getShortName(child_element))
3885
5025
  self.readNmConfig(child_element, config)
3886
5026
  elif tag_name == "CAN-TP-CONFIG":
3887
5027
  config = parent.createCanTpConfig(self.getShortName(child_element))
@@ -3979,11 +5119,28 @@ class ARXMLParser(AbstractARXMLParser):
3979
5119
  elif tag_name == "DO-IP-TP-CONFIG":
3980
5120
  config = parent.createDoIpTpConfig(self.getShortName(child_element))
3981
5121
  self.readDoIpTpConfig(child_element, config)
5122
+ elif tag_name == "HW-ELEMENT":
5123
+ hw_element = parent.createHwElement(self.getShortName(child_element))
5124
+ self.readHwElement(child_element, hw_element)
5125
+ elif tag_name == "HW-CATEGORY":
5126
+ hw_category = parent.createHwCategory(self.getShortName(child_element))
5127
+ self.readHwCategory(child_element, hw_category)
5128
+ elif tag_name == "HW-TYPE":
5129
+ type = parent.createHwType(self.getShortName(child_element))
5130
+ self.readHwType(child_element, type)
5131
+ elif tag_name == "FLEXRAY-FRAME":
5132
+ frame = parent.createFlexrayFrame(self.getShortName(child_element))
5133
+ self.readFlexrayFrame(child_element, frame)
5134
+ elif tag_name == "FLEXRAY-CLUSTER":
5135
+ cluster = parent.createFlexrayCluster(self.getShortName(child_element))
5136
+ self.readFlexrayCluster(child_element, cluster)
5137
+ elif tag_name == "DATA-TRANSFORMATION-SET":
5138
+ transformation_set = parent.createDataTransformationSet(self.getShortName(child_element))
5139
+ self.readDataTransformationSet(child_element, transformation_set)
3982
5140
  else:
3983
5141
  self.notImplemented("Unsupported element type of ARPackage <%s>" % tag_name)
3984
5142
 
3985
5143
  def readReferenceBases(self, element: ET.Element, parent: ARPackage):
3986
- self.logger.debug("Read ReferenceBases")
3987
5144
  for child_element in self.findall(element, "REFERENCE-BASES/REFERENCE-BASE"):
3988
5145
  base = ReferenceBase()
3989
5146
  base.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
@@ -3993,20 +5150,25 @@ class ARXMLParser(AbstractARXMLParser):
3993
5150
  .setPackageRef(self.getChildElementOptionalRefType(child_element, "PACKAGE-REF"))
3994
5151
  parent.addReferenceBase(base)
3995
5152
 
3996
- def readARPackages(self, element: ET.Element, parent: ARPackage):
3997
- for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
3998
- short_name = self.getShortName(child_element)
3999
- ar_package = parent.createARPackage(short_name)
5153
+ def readARPackage(self, element: ET.Element, ar_package: ARPackage):
5154
+ self.logger.debug("Read ARPackages %s" % ar_package.getFullName())
4000
5155
 
4001
- self.logger.debug("readARPackages %s" % ar_package.full_name)
5156
+ self.readIdentifiable(element, ar_package)
5157
+ self.readARPackages(element, ar_package)
5158
+ self.readARPackageElements(element, ar_package)
5159
+ self.readReferenceBases(element, ar_package)
4002
5160
 
4003
- self.readIdentifiable(child_element, ar_package)
4004
- self.readARPackages(child_element, ar_package)
4005
- self.readARPackageElements(child_element, ar_package)
4006
- self.readReferenceBases(child_element, ar_package)
5161
+ def readARPackages(self, element: ET.Element, parent: ARPackage):
5162
+ for child_element in self.findall(element, "AR-PACKAGES/*"):
5163
+ tag_name = self.getTagName(child_element)
5164
+ if tag_name == "AR-PACKAGE":
5165
+ ar_package = parent.createARPackage(self.getShortName(child_element))
5166
+ self.readARPackage(child_element, ar_package)
5167
+ else:
5168
+ self.notImplemented("Unsupported ARPackage <%s>" % tag_name)
4007
5169
 
4008
5170
  def load(self, filename, document: AUTOSAR):
4009
- self.logger.info("Load %s ..." % os.path.realpath(filename))
5171
+ self.logger.info("Loading %s ..." % os.path.realpath(filename))
4010
5172
 
4011
5173
  tree = ET.parse(filename)
4012
5174
  root = tree.getroot()
@@ -4014,7 +5176,7 @@ class ARXMLParser(AbstractARXMLParser):
4014
5176
  self.raiseError("Invalid ARXML file <%s>" % filename)
4015
5177
 
4016
5178
  self.getAUTOSARInfo(root, document)
4017
- document.setAdminData(self.getAdminData(root, "ADMIN-DATA"))
5179
+ document.setAdminData(self.getAdminData(root, "ADMIN-DATA"))
4018
5180
  self.readARPackages(root, document)
4019
5181
 
4020
5182
  document.reload()