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
@@ -1,10 +1,11 @@
1
1
  import xml.etree.cElementTree as ET
2
2
  from typing import List
3
3
 
4
- from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
5
4
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
6
5
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
7
- from ..models.M2.MSR.AsamHdo.ComputationMethod import Compu, CompuConst, CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent, CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
6
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import Compu, CompuConst, CompuConstContent, CompuConstFormulaContent, CompuConstNumericContent
7
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale
8
+ from ..models.M2.MSR.AsamHdo.ComputationMethod import CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
8
9
  from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstr, InternalConstrs, PhysConstrs
9
10
  from ..models.M2.MSR.AsamHdo.SpecialData import Sdg
10
11
  from ..models.M2.MSR.AsamHdo.Units import PhysicalDimension, Unit
@@ -19,84 +20,181 @@ from ..models.M2.MSR.Documentation.Annotation import Annotation
19
20
  from ..models.M2.MSR.Documentation.TextModel.BlockElements import DocumentationBlock
20
21
  from ..models.M2.MSR.Documentation.TextModel.BlockElements.ListElements import ListElement
21
22
  from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName, LPlainText, LanguageSpecific
22
- from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
23
+ from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText
24
+ from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultilanguageLongName
23
25
 
24
26
  from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
27
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswApiOptions, BswBackgroundEvent, BswCalledEntity, BswDataReceivedEvent, BswInternalTriggerOccurredEvent, BswOperationInvokedEvent
28
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswDataReceptionPolicy, BswEvent, BswExternalTriggerOccurredEvent
29
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswInternalBehavior, BswInterruptEntity, BswModeSenderPolicy, BswModuleEntity
30
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswQueuedDataReceptionPolicy, BswSchedulableEntity, BswScheduleEvent
31
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswTimingEvent, BswVariableAccess
25
32
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
26
33
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
27
34
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
28
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswEvent, BswInternalBehavior, BswInterruptEntity, BswModeSenderPolicy, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
29
- from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ConstantSpecification, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
35
+ from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference
36
+ from ..models.M2.AUTOSARTemplates.CommonStructure import ConstantSpecification, NumericalValueSpecification, RecordValueSpecification
37
+ from ..models.M2.AUTOSARTemplates.CommonStructure import TextValueSpecification, ValueSpecification
30
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
31
39
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
32
- from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
33
40
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation, ImplementationProps
34
- from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
35
- from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef, ExecutionOrderConstraint
36
- from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
37
- from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity
38
41
  from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
42
+ from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity
39
43
  from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import InternalBehavior
40
44
  from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype
41
45
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
42
46
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
47
+ from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
48
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal
49
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds
50
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds
51
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment
52
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedDataTypeAssignment, ServiceDependency
53
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
54
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef
55
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
56
+ from ..models.M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import Trigger
43
57
  from ..models.M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import DiagnosticServiceTable
44
- from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
45
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
46
- from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable, MultilanguageReferrable, Referrable
58
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue
59
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue
60
+ from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
61
+ from ..models.M2.AUTOSARTemplates.EcuResourceTemplate import HwDescriptionEntity, HwElement, HwPinGroup
62
+ from ..models.M2.AUTOSARTemplates.EcuResourceTemplate.HwElementCategory import HwAttributeDef, HwCategory, HwType
47
63
  from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
48
64
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
65
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
66
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Describable, Identifiable
67
+ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Referrable, MultilanguageReferrable
49
68
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral, Limit
50
-
51
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
52
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent, TimingEvent
69
+ from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
70
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest
71
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import TransmissionAcknowledgementRequest
72
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec
73
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec
74
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec
75
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import RPortComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
76
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype
77
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import ApplicationSwComponentType, AtomicSwComponentType
78
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import ComplexDeviceDriverSwComponentType, CompositionSwComponentType
79
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType
80
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import PPortPrototype, PortPrototype, RPortPrototype, SymbolProps
81
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import ServiceSwComponentType
82
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef
83
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import ModeGroupInAtomicSwcInstanceRef
84
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef
85
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import RModeGroupInAtomicSWCInstanceRef
86
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
87
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector, SwComponentPrototype, SwConnector
88
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef
89
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
90
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationArrayElement
91
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationCompositeElementDataPrototype
92
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationRecordElement, AutosarDataPrototype, DataPrototype
93
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ParameterDataPrototype, VariableDataPrototype
94
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationArrayDataType, ApplicationCompositeDataType
95
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationDataType, ApplicationPrimitiveDataType
96
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationRecordDataType, AutosarDataType
97
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import DataTypeMappingSet
98
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionISignalIPdu
99
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionVariablePrototype
100
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet
101
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ApplicationError, ArgumentDataPrototype, ClientServerInterface
102
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ClientServerOperation, DataInterface
103
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import DataPrototypeMapping, ModeSwitchInterface, ParameterInterface
104
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import PortInterface, PortInterfaceMappingSet, SenderReceiverInterface
105
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import TriggerInterface, VariableAndParameterInterfaceMapping
106
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
107
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument
108
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import SwcInternalBehavior, SynchronousServerCallPoint
109
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
110
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.DataElements import ParameterAccess, VariableAccess
111
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef
112
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortDefinedArgumentValue
113
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent
114
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent
115
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent
116
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import SwcModeSwitchEvent, TimingEvent
53
117
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
54
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType
55
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
56
118
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
57
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
58
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype, SymbolProps
59
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
60
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument, SwcInternalBehavior, SynchronousServerCallPoint
61
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
119
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import ModeAccessPoint, ModeSwitchPoint
62
120
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
63
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.DataElements import ParameterAccess, VariableAccess
64
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector, SwComponentPrototype, SwConnector
65
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
66
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
67
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, VariableInAtomicSWCTypeInstanceRef
68
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
69
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
70
121
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
71
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import ApplicationArrayElement, ApplicationCompositeElementDataPrototype, ApplicationRecordElement, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
72
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import ServiceSwComponentType
73
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import DataTypeMappingSet
74
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet
75
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface import ApplicationError, ClientServerInterface, ClientServerOperation, DataPrototypeMapping, ModeSwitchInterface, ParameterInterface, PortInterface, PortInterfaceMappingSet, SenderReceiverInterface, TriggerInterface, VariableAndParameterInterfaceMapping
76
122
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import SwcImplementation
77
123
 
78
124
  from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping, System, SystemMapping
79
- from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
125
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderRecCompositeTypeMapping, SenderRecRecordElementMapping
126
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderRecRecordTypeMapping, SenderReceiverToSignalGroupMapping
127
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalMapping
80
128
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import DiagnosticConnection
81
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, MultiplexedIPdu, PduTriggering, SecureCommunicationPropsSet, SecuredIPdu, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
82
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
83
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
84
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
85
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetFrame import GenericEthernetFrame
86
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo, CouplingPortScheduler, CouplingPortStructuralElement, EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, EthernetPriorityRegeneration, InitialSdDelayConfig, MacMulticastGroup, RequestResponseDelay, SdClientConfig, VlanMembership
87
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import DoIpEntity, InfrastructureServices, Ipv6Configuration, NetworkEndpoint, NetworkEndpointAddress
88
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, EventHandler, GenericTp, ProvidedServiceInstance, SdServerConfig, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
89
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
129
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.EcuResourceMapping import ECUMapping
90
130
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
91
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController, AbstractCanCommunicationControllerAttributes, CanCommunicationConnector, CanCommunicationController, CanControllerConfigurationRequirements, CanControllerFdConfiguration, CanControllerFdConfigurationRequirements
92
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable, LinUnconditionalFrame, ScheduleTableEntry
93
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, CommunicationController, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
131
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController
132
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationControllerAttributes
133
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
134
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanControllerConfigurationRequirements
135
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanControllerFdConfiguration
136
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanControllerFdConfigurationRequirements
137
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection
138
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnectionBundle
139
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnectionIpduIdentifier
140
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetFrame import GenericEthernetFrame
141
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo
142
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPortScheduler, CouplingPortStructuralElement
143
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCluster, EthernetCommunicationConnector
144
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCommunicationController
145
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetPriorityRegeneration, InitialSdDelayConfig
146
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import MacMulticastGroup, RequestResponseDelay, SdClientConfig
147
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import VlanMembership
148
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import DoIpEntity, InfrastructureServices, Ipv6Configuration
149
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import NetworkEndpoint, NetworkEndpointAddress
150
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup
151
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ConsumedServiceInstance, EventHandler, GenericTp
152
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ProvidedServiceInstance, SdServerConfig, SoAdConfig
153
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import SocketAddress, TcpTp, TpPort
154
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import TransportProtocolConfiguration, UdpTp
155
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayCommunication import FlexrayAbsolutelyScheduledTiming, FlexrayFrame
156
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayCommunication import FlexrayFrameTriggering
157
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayTopology import FlexrayCluster, FlexrayCommunicationConnector
158
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Flexray.FlexrayTopology import FlexrayCommunicationController
159
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable
160
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinUnconditionalFrame, ScheduleTableEntry
94
161
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
162
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
163
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DynamicPart, DynamicPartAlternative, FrameTriggering
164
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming
165
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import ISignalGroup, ISignalIPdu, ISignalIPduGroup
166
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import ISignalToIPduMapping, ISignalTriggering, MultiplexedIPdu
167
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import MultiplexedPart, Pdu, PduTriggering
168
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import SecureCommunicationAuthenticationProps
169
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import SecureCommunicationFreshnessProps, SecureCommunicationProps
170
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import SecureCommunicationPropsSet, SecuredIPdu, SegmentPosition
171
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import StaticPart, SystemSignal, DcmIPdu, Frame, ISignal, NPdu
172
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import NmPdu, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
173
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery
174
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import FlexrayPhysicalChannel, CommunicationCycle, CycleRepetition
175
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CanPhysicalChannel, CommConnectorPort, CommunicationCluster
176
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CommunicationConnector, CommunicationController
177
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort
178
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import LinCluster, LinPhysicalChannel, PhysicalChannel
179
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
180
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType
181
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import TransmissionModeCondition, TransmissionModeDeclaration
182
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import TransmissionModeTiming
95
183
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
96
- from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmNode
97
- from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig, DoIpTpConfig, LinTpConfig
184
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmEcu
185
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmEcu, UdpNmNode
186
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.SWmapping import SwcToImplMapping
187
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import BufferProperties, DataTransformation, DataTransformationSet
188
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import EndToEndTransformationISignalProps, TransformationISignalProps
189
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import EndToEndTransformationDescription, TransformationDescription
190
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Transformer import TransformationTechnology
191
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpAddress, CanTpChannel, CanTpConfig, CanTpConnection, CanTpEcu
192
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpNode, DoIpLogicAddress, DoIpTpConfig, DoIpTpConnection, LinTpConfig
193
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import LinTpConnection, LinTpNode, TpAddress, TpConfig, TpConnection
98
194
 
99
195
  from .abstract_arxml_writer import AbstractARXMLWriter
196
+
197
+
100
198
  class ARXMLWriter(AbstractARXMLWriter):
101
199
  def __init__(self, options=None) -> None:
102
200
  super().__init__(options)
@@ -110,7 +208,7 @@ class ARXMLWriter(AbstractARXMLWriter):
110
208
  def setChildElementRxIdentifierRange(self, element: ET.Element, key: str, range: RxIdentifierRange):
111
209
  if range is not None:
112
210
  child_element = ET.SubElement(element, key)
113
- self.setChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID", range.getLowerCanId())
211
+ self.setChildElementOptionalNumericalValue(child_element, "LOWER-CAN-ID", range.getLowerCanId())
114
212
  self.setChildElementOptionalNumericalValue(child_element, "UPPER-CAN-ID", range.getUpperCanId())
115
213
 
116
214
  def writeSds(self, parent: ET.Element, sdg: Sdg):
@@ -120,14 +218,26 @@ class ARXMLWriter(AbstractARXMLWriter):
120
218
  sd_tag.attrib['GID'] = sd.gid
121
219
  sd_tag.text = sd.value
122
220
 
123
- def setSdg(self, parent: ET.Element, sdg: Sdg):
221
+ def writeSdgCaption(self, element: ET.Element, sdg: Sdg):
222
+ caption = sdg.getSdgCaption()
223
+ if caption is not None:
224
+ child_element = ET.SubElement(element, "SDG-CAPTION")
225
+ self.writeMultilanguageReferrable(child_element, caption)
226
+
227
+ def writeSdgSdxRefs(self, element: ET.Element, sdg: Sdg):
228
+ for ref in sdg.getSdxRefs():
229
+ self.setChildElementOptionalRefType(element, "SDX-REF", ref)
230
+
231
+ def setSdg(self, element: ET.Element, sdg: Sdg):
124
232
  if sdg is not None:
125
- sdg_tag = ET.SubElement(parent, "SDG")
233
+ child_element = ET.SubElement(element, "SDG")
126
234
  if sdg.gid is not None and sdg.gid != "":
127
- sdg_tag.attrib['GID'] = sdg.gid
128
- self.writeSds(sdg_tag, sdg)
235
+ child_element.attrib['GID'] = sdg.gid
236
+ self.writeSdgCaption(child_element, sdg)
237
+ self.writeSds(child_element, sdg)
129
238
  for sdg_item in sdg.getSdgContentsTypes():
130
- self.setSdg(sdg_tag, sdg_item)
239
+ self.setSdg(child_element, sdg_item)
240
+ self.writeSdgSdxRefs(child_element, sdg)
131
241
 
132
242
  def writeSdgs(self, parent: ET.Element, admin_data: AdminData):
133
243
  sdgs = admin_data.getSdgs()
@@ -139,18 +249,18 @@ class ARXMLWriter(AbstractARXMLWriter):
139
249
  def setChildLimitElement(self, element: ET.Element, key: str, limit: Limit):
140
250
  if limit is not None:
141
251
  limit_tag = ET.SubElement(element, key)
142
- self.setARObjectAttributes(limit_tag, limit)
252
+ self.writeARObjectAttributes(limit_tag, limit)
143
253
  if limit.intervalType is not None:
144
254
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
145
255
  limit_tag.text = limit.value
146
256
 
147
257
  def writeReferrable(self, element: ET.Element, referrable: Referrable):
148
- self.setARObjectAttributes(element, referrable)
258
+ self.writeARObjectAttributes(element, referrable)
149
259
  self.setShortName(element, referrable.getShortName())
150
260
 
151
261
  def setLanguageSpecific(self, element: ET.Element, key: str, specific: LanguageSpecific):
152
262
  child_element = ET.SubElement(element, key)
153
- self.setARObjectAttributes(child_element, specific)
263
+ self.writeARObjectAttributes(child_element, specific)
154
264
  if specific.l is not None:
155
265
  child_element.attrib['L'] = specific.l
156
266
  child_element.text = specific.value
@@ -161,7 +271,7 @@ class ARXMLWriter(AbstractARXMLWriter):
161
271
  def setMultiLongName(self, element: ET.Element, key: str, long_name: MultilanguageLongName):
162
272
  if long_name is not None:
163
273
  child_element = ET.SubElement(element, key)
164
- self.setARObjectAttributes(child_element, long_name)
274
+ self.writeARObjectAttributes(child_element, long_name)
165
275
  for l4 in long_name.getL4s():
166
276
  self.setLLongName(child_element, l4)
167
277
 
@@ -171,7 +281,7 @@ class ARXMLWriter(AbstractARXMLWriter):
171
281
  def setMultiLanguageOverviewParagraph(self, element: ET.Element, key: str, paragraph: MultiLanguageOverviewParagraph):
172
282
  if paragraph is not None:
173
283
  child_element = ET.SubElement(element, key)
174
- self.setARObjectAttributes(child_element, paragraph)
284
+ self.writeARObjectAttributes(child_element, paragraph)
175
285
  for l2 in paragraph.getL2s():
176
286
  self.setLOverviewParagraph(child_element, l2)
177
287
 
@@ -186,7 +296,7 @@ class ARXMLWriter(AbstractARXMLWriter):
186
296
  def setMultiLanguagePlainText(self, element: ET.Element, key: str, paragraph: MultiLanguagePlainText):
187
297
  if paragraph is not None:
188
298
  child_element = ET.SubElement(element, key)
189
- self.setARObjectAttributes(child_element, paragraph)
299
+ self.writeARObjectAttributes(child_element, paragraph)
190
300
  for l10 in paragraph.getL10s():
191
301
  self.setLPlainText(child_element, l10)
192
302
 
@@ -207,12 +317,12 @@ class ARXMLWriter(AbstractARXMLWriter):
207
317
 
208
318
  def writeARElement(self, parent: ET.Element, ar_element: ARElement):
209
319
  self.writeIdentifiable(parent, ar_element)
210
-
320
+
211
321
  def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
212
- if (acknowledge != None):
322
+ if (acknowledge is not None):
213
323
  child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
214
- self.setARObjectAttributes(child_element, acknowledge)
215
- if acknowledge.timeout != None:
324
+ self.writeARObjectAttributes(child_element, acknowledge)
325
+ if acknowledge.timeout is not None:
216
326
  self.setChildElementOptionalFloatValue(child_element, "TIMEOUT", acknowledge.timeout)
217
327
 
218
328
  def setSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
@@ -226,28 +336,35 @@ class ARXMLWriter(AbstractARXMLWriter):
226
336
  self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.getHandleOutOfRange())
227
337
  self.setTransmissionAcknowledgementRequest(element, com_spec.getTransmissionAcknowledge())
228
338
  self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.getUsesEndToEndProtection())
229
-
339
+
230
340
  def setNonqueuedSenderComSpec(self, element: ET.Element, com_spec: NonqueuedSenderComSpec):
231
341
  child_element = ET.SubElement(element, "NONQUEUED-SENDER-COM-SPEC")
232
- self.setARObjectAttributes(child_element, com_spec)
342
+ self.writeARObjectAttributes(child_element, com_spec)
233
343
  self.setSenderComSpec(child_element, com_spec)
234
344
  self.setValueSpecification(child_element, "INIT-VALUE", com_spec.getInitValue())
235
-
345
+
236
346
  def setServerComSpec(self, element: ET.Element, com_spec: ServerComSpec):
237
347
  child_element = ET.SubElement(element, "SERVER-COM-SPEC")
238
- self.setARObjectAttributes(child_element, com_spec)
348
+ self.writeARObjectAttributes(child_element, com_spec)
239
349
  self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
240
- self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
350
+ self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
241
351
 
242
352
  def setQueuedSenderComSpec(self, element: ET.Element, com_spec: QueuedSenderComSpec):
243
353
  child_element = ET.SubElement(element, "QUEUED-SENDER-COM-SPEC")
244
- self.setARObjectAttributes(child_element, com_spec)
354
+ self.writeARObjectAttributes(child_element, com_spec)
245
355
  self.setSenderComSpec(child_element, com_spec)
246
356
 
357
+ def setModeSwitchedAckRequest(self, element: ET.Element, key: str, request: ModeSwitchedAckRequest):
358
+ if request is not None:
359
+ child_element = ET.SubElement(element, key)
360
+ self.writeARObjectAttributes(child_element, request)
361
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT", request.getTimeout())
362
+
247
363
  def setModeSwitchSenderComSpec(self, element: ET.Element, com_spec: ModeSwitchSenderComSpec):
248
364
  child_element = ET.SubElement(element, "MODE-SWITCH-SENDER-COM-SPEC")
249
- self.setARObjectAttributes(child_element, com_spec)
365
+ self.writeARObjectAttributes(child_element, com_spec)
250
366
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
367
+ self.setModeSwitchedAckRequest(child_element, "MODE-SWITCHED-ACK", com_spec.getModeSwitchedAck())
251
368
  self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
252
369
 
253
370
  def writePPortComSpec(self, com_specs_tag: ET.Element, com_spec: PPortComSpec):
@@ -261,14 +378,14 @@ class ARXMLWriter(AbstractARXMLWriter):
261
378
  self.setModeSwitchSenderComSpec(com_specs_tag, com_spec)
262
379
  else:
263
380
  self.notImplemented("Unsupported PPortComSpec %s" % type(com_spec))
264
-
265
- def setApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str, iref: ApplicationCompositeElementInPortInterfaceInstanceRef):
381
+
382
+ def setApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key: str, iref: ApplicationCompositeElementInPortInterfaceInstanceRef): # noqa E501
266
383
  if iref is not None:
267
384
  child_element = ET.SubElement(element, key)
268
385
  self.setChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF", iref.root_data_prototype_ref)
269
386
  self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", iref.target_data_prototype_ref)
270
387
  return iref
271
-
388
+
272
389
  def setCompositeNetworkRepresentation(self, element: ET.Element, representation: CompositeNetworkRepresentation):
273
390
  if representation is not None:
274
391
  self.logger.debug("setCompositeNetworkRepresentation")
@@ -291,7 +408,7 @@ class ARXMLWriter(AbstractARXMLWriter):
291
408
  def setSwValues(self, element: ET.Element, key: str, sw_values: SwValues):
292
409
  if sw_values is not None:
293
410
  child_element = ET.SubElement(element, key)
294
- self.setARObjectAttributes(child_element, sw_values)
411
+ self.writeARObjectAttributes(child_element, sw_values)
295
412
  for v in sw_values.getVs():
296
413
  self.setChildElementOptionalFloatValue(child_element, "V", v)
297
414
  self.setChildElementOptionalLiteral(child_element, "VT", sw_values.vt)
@@ -299,42 +416,35 @@ class ARXMLWriter(AbstractARXMLWriter):
299
416
  def setValueList(self, element: ET.Element, key: str, value_list: ValueList):
300
417
  if value_list is not None:
301
418
  child_element = ET.SubElement(element, key)
302
- self.setARObjectAttributes(child_element, value_list)
419
+ self.writeARObjectAttributes(child_element, value_list)
303
420
  self.setChildElementOptionalFloatValue(child_element, "V", value_list.v)
304
421
 
305
422
  def writeSwValueCont(self, element: ET.Element, cont: SwValueCont):
306
423
  if cont is not None:
307
424
  child_element = ET.SubElement(element, "SW-VALUE-CONT")
308
- self.setARObjectAttributes(child_element, cont)
425
+ self.writeARObjectAttributes(child_element, cont)
309
426
  self.setChildElementOptionalRefType(child_element, "UNIT-REF", cont.unitRef)
310
427
  self.setValueList(child_element, "SW-ARRAYSIZE", cont.swArraysize)
311
428
  self.setSwValues(child_element, "SW-VALUES-PHYS", cont.swValuesPhys)
312
429
 
313
430
  def writeValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
314
431
  if value_spec is not None:
315
- self.setARObjectAttributes(element, value_spec)
316
- self.setChildElementOptionalLiteral(element, "SHORT-LABEL", value_spec.getShortLabel())
317
-
318
- def setApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
319
- if value_spec is not None:
320
- value_spec_tag = ET.SubElement(element, "APPLICATION-VALUE-SPECIFICATION")
321
- self.writeValueSpecification(value_spec_tag, value_spec)
322
- self.setChildElementOptionalLiteral(value_spec_tag, "CATEGORY", value_spec.getCategory())
323
- self.writeSwValueCont(value_spec_tag, value_spec.getSwValueCont())
432
+ self.writeARObjectAttributes(element, value_spec)
433
+ self.setChildElementOptionalLiteral(element, "SHORT-LABEL", value_spec.getShortLabel())
324
434
 
325
- def setTextValueSpecification(self, element: ET.Element, value_spec: TextValueSpecification):
435
+ def writeTextValueSpecification(self, element: ET.Element, value_spec: TextValueSpecification):
326
436
  if value_spec is not None:
327
437
  value_spec_tag = ET.SubElement(element, "TEXT-VALUE-SPECIFICATION")
328
438
  self.writeValueSpecification(value_spec_tag, value_spec)
329
439
  self.setChildElementOptionalLiteral(value_spec_tag, "VALUE", value_spec.getValue())
330
440
 
331
- def setNumericalValueSpecification(self, element: ET.Element, value_spec: NumericalValueSpecification):
441
+ def writeNumericalValueSpecification(self, element: ET.Element, value_spec: NumericalValueSpecification):
332
442
  if value_spec is not None:
333
443
  value_spec_tag = ET.SubElement(element, "NUMERICAL-VALUE-SPECIFICATION")
334
444
  self.writeValueSpecification(value_spec_tag, value_spec)
335
445
  self.setChildElementOptionalFloatValue(value_spec_tag, "VALUE", value_spec.getValue())
336
446
 
337
- def setArrayValueSpecification(self, element: ET.Element, value_spec: ArrayValueSpecification):
447
+ def writeArrayValueSpecification(self, element: ET.Element, value_spec: ArrayValueSpecification):
338
448
  value_spec_tag = ET.SubElement(element, "ARRAY-VALUE-SPECIFICATION")
339
449
  self.writeValueSpecification(value_spec_tag, value_spec)
340
450
  sub_elements = value_spec.getElements()
@@ -342,18 +452,18 @@ class ARXMLWriter(AbstractARXMLWriter):
342
452
  elements_tag = ET.SubElement(value_spec_tag, "ELEMENTS")
343
453
  for sub_element in sub_elements:
344
454
  if isinstance(sub_element, NumericalValueSpecification):
345
- self.setNumericalValueSpecification(elements_tag, sub_element)
455
+ self.writeNumericalValueSpecification(elements_tag, sub_element)
346
456
  elif isinstance(sub_element, ApplicationValueSpecification):
347
- self.setApplicationValueSpecification(elements_tag, sub_element)
457
+ self.writeApplicationValueSpecification(elements_tag, sub_element)
348
458
  elif isinstance(sub_element, TextValueSpecification):
349
- self.setTextValueSpecification(elements_tag, sub_element)
459
+ self.writeTextValueSpecification(elements_tag, sub_element)
350
460
  elif isinstance(sub_element, ArrayValueSpecification):
351
- self.setArrayValueSpecification(elements_tag, sub_element)
461
+ self.writeArrayValueSpecification(elements_tag, sub_element)
352
462
  elif isinstance(sub_element, RecordValueSpecification):
353
- self.setRecordValueSpecification(elements_tag, sub_element)
463
+ self.writeRecordValueSpecification(elements_tag, sub_element)
354
464
  else:
355
465
  self.notImplemented("Unsupported element type of <%s> of ArrayValueSpecification" % type(sub_element))
356
-
466
+
357
467
  def setConstantReference(self, element: ET.Element, value_spec: ConstantReference):
358
468
  value_spec_tag = ET.SubElement(element, "CONSTANT-REFERENCE")
359
469
  self.writeValueSpecification(value_spec_tag, value_spec)
@@ -363,23 +473,23 @@ class ARXMLWriter(AbstractARXMLWriter):
363
473
  if value_spec is not None:
364
474
  child_element = ET.SubElement(element, key)
365
475
  if isinstance(value_spec, ApplicationValueSpecification):
366
- self.setApplicationValueSpecification(child_element, value_spec)
476
+ self.writeApplicationValueSpecification(child_element, value_spec)
367
477
  elif isinstance(value_spec, TextValueSpecification):
368
- self.setTextValueSpecification(child_element, value_spec)
478
+ self.writeTextValueSpecification(child_element, value_spec)
369
479
  elif isinstance(value_spec, ConstantReference):
370
480
  self.setConstantReference(child_element, value_spec)
371
481
  elif isinstance(value_spec, NumericalValueSpecification):
372
- self.setNumericalValueSpecification(child_element, value_spec)
482
+ self.writeNumericalValueSpecification(child_element, value_spec)
373
483
  elif isinstance(value_spec, ArrayValueSpecification):
374
- self.setArrayValueSpecification(child_element, value_spec)
484
+ self.writeArrayValueSpecification(child_element, value_spec)
375
485
  elif isinstance(value_spec, RecordValueSpecification):
376
- self.setRecordValueSpecification(child_element, value_spec)
486
+ self.writeRecordValueSpecification(child_element, value_spec)
377
487
  else:
378
488
  self.notImplemented("Unsupported ValueSpecification %s" % type(value_spec))
379
489
 
380
490
  def writeNonqueuedReceiverComSpec(self, element: ET.Element, com_spec: NonqueuedReceiverComSpec):
381
491
  child_element = ET.SubElement(element, "NONQUEUED-RECEIVER-COM-SPEC")
382
- self.setARObjectAttributes(child_element, com_spec)
492
+ self.writeARObjectAttributes(child_element, com_spec)
383
493
  self.writeReceiverComSpec(child_element, com_spec)
384
494
  self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.getAliveTimeout())
385
495
  self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.getEnableUpdated())
@@ -390,27 +500,27 @@ class ARXMLWriter(AbstractARXMLWriter):
390
500
 
391
501
  def writeQueuedReceiverComSpec(self, element: ET.Element, com_spec: QueuedReceiverComSpec):
392
502
  child_element = ET.SubElement(element, "QUEUED-RECEIVER-COM-SPEC")
393
- self.setARObjectAttributes(child_element, com_spec)
503
+ self.writeARObjectAttributes(child_element, com_spec)
394
504
  self.writeReceiverComSpec(child_element, com_spec)
395
505
  self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queueLength)
396
506
 
397
507
  def writeClientComSpec(self, element: ET.Element, com_spec: ClientComSpec):
398
508
  self.logger.debug("writeClientComSpec")
399
509
  child_element = ET.SubElement(element, "CLIENT-COM-SPEC")
400
- self.setARObjectAttributes(child_element, com_spec)
510
+ self.writeARObjectAttributes(child_element, com_spec)
401
511
  self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
402
512
 
403
513
  def writeParameterRequireComSpec(self, element: ET.Element, com_spec: ParameterRequireComSpec):
404
514
  self.logger.debug("writeParameterRequireComSpec")
405
515
  child_element = ET.SubElement(element, "PARAMETER-REQUIRE-COM-SPEC")
406
- self.setARObjectAttributes(child_element, com_spec)
516
+ self.writeARObjectAttributes(child_element, com_spec)
407
517
  self.setChildElementOptionalRefType(child_element, "PARAMETER-REF", com_spec.getParameterRef())
408
518
  self.setValueSpecification(child_element, "INIT-VALUE", com_spec.getInitValue())
409
519
 
410
520
  def setModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
411
521
  self.logger.debug("writeModeSwitchReceiverComSpec")
412
522
  child_element = ET.SubElement(element, "MODE-SWITCH-RECEIVER-COM-SPEC")
413
- self.setARObjectAttributes(child_element, com_spec)
523
+ self.writeARObjectAttributes(child_element, com_spec)
414
524
  self.setChildElementOptionalBooleanValue(child_element, "ENHANCED-MODE-API", com_spec.getEnhancedModeApi())
415
525
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
416
526
  self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH", com_spec.getSupportsAsynchronousModeSwitch())
@@ -449,7 +559,7 @@ class ARXMLWriter(AbstractARXMLWriter):
449
559
  if len(com_specs) > 0:
450
560
  com_specs_tag = ET.SubElement(element, "REQUIRED-COM-SPECS")
451
561
  for com_spec in com_specs:
452
- self.writeRPortComSpec(com_specs_tag, com_spec)
562
+ self.writeRPortComSpec(com_specs_tag, com_spec)
453
563
 
454
564
  def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
455
565
  self.logger.debug("write RPortPrototype %s" % prototype.getShortName())
@@ -465,21 +575,24 @@ class ARXMLWriter(AbstractARXMLWriter):
465
575
  self.setAbstractProvidedPortPrototype(prototype_tag, prototype)
466
576
  self.setAbstractRequiredPortPrototype(prototype_tag, prototype)
467
577
  self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-REQUIRED-INTERFACE-TREF", prototype.getProvidedRequiredInterface())
468
-
469
- def writePortPrototypes(self, ports_tag: ET.Element, port_prototypes: List[PortPrototype]):
470
- for port_prototype in port_prototypes:
471
- if isinstance(port_prototype, PPortPrototype):
472
- self.writePPortPrototype(ports_tag, port_prototype)
473
- elif isinstance(port_prototype, RPortPrototype):
474
- self.writeRPortPrototype(ports_tag, port_prototype)
475
- elif isinstance(port_prototype, PRPortPrototype):
476
- self.writePRPortPrototype(ports_tag, port_prototype)
477
- else:
478
- self._raiseError("Invalid PortPrototype")
578
+
579
+ def writeSwComponentTypePorts(self, element: ET.Element, sw_component: SwComponentType):
580
+ ports = sw_component.getPorts()
581
+ if len(ports) > 0:
582
+ child_element = ET.SubElement(element, "PORTS")
583
+ for port in ports:
584
+ if isinstance(port, PPortPrototype):
585
+ self.writePPortPrototype(child_element, port)
586
+ elif isinstance(port, RPortPrototype):
587
+ self.writeRPortPrototype(child_element, port)
588
+ elif isinstance(port, PRPortPrototype):
589
+ self.writePRPortPrototype(child_element, port)
590
+ else:
591
+ self.notImplemented("Unsupported Port Prototype <%s>" % type(port))
479
592
 
480
593
  def writeInnerGroupIRef(self, element: ET.Element, inner_group_iref: InnerPortGroupInCompositionInstanceRef):
481
594
  child_element = ET.SubElement(element, "INNER-GROUP-IREF")
482
- #self.setChildElementOptionalRefType(child_element, "CONTEXT-REF", inner_group_iref.contextRef)
595
+ # self.setChildElementOptionalRefType(child_element, "CONTEXT-REF", inner_group_iref.contextRef)
483
596
  self.setChildElementOptionalRefType(child_element, "TARGET-REF", inner_group_iref.getTargetRef())
484
597
 
485
598
  def writePortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
@@ -513,10 +626,7 @@ class ARXMLWriter(AbstractARXMLWriter):
513
626
 
514
627
  def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
515
628
  self.writeIdentifiable(element, sw_component)
516
- port_prototypes = sw_component.getPortPrototypes()
517
- if len(port_prototypes) > 0:
518
- ports_tag = ET.SubElement(element, "PORTS")
519
- self.writePortPrototypes(ports_tag, port_prototypes)
629
+ self.writeSwComponentTypePorts(element, sw_component)
520
630
  self.writeSwComponentTypePortGroups(element, sw_component)
521
631
 
522
632
  def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
@@ -524,29 +634,31 @@ class ARXMLWriter(AbstractARXMLWriter):
524
634
  self.writeIdentifiable(prototype_tag, prototype)
525
635
  self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.getTypeTRef())
526
636
 
527
- def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
528
- prototypes = sw_component.getSwComponentPrototypes()
529
- if len(prototypes) > 0:
637
+ def writeCompositionSwComponentTypeComponents(self, element: ET.Element, sw_component: CompositionSwComponentType):
638
+ components = sw_component.getComponents()
639
+ if len(components) > 0:
530
640
  components_tag = ET.SubElement(element, "COMPONENTS")
531
- for prototype in prototypes:
532
- self.writeSwComponentPrototype(components_tag, prototype)
641
+ for component in components:
642
+ if isinstance(component, SwComponentPrototype):
643
+ self.writeSwComponentPrototype(components_tag, component)
644
+ else:
645
+ self.notImplemented("Unsupported Component <%s>" % type(component))
533
646
 
534
647
  def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
535
648
  child_element = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
536
- self.writeIdentifiable(child_element, sw_connector)
537
- self.setChildElementOptionalRefType(child_element, "MAPPING-REF", sw_connector.getMappingRef())
649
+ self.writeSwConnector(child_element, sw_connector)
538
650
 
539
651
  if sw_connector.getProviderIRef() is not None:
540
652
  provider_iref_tag = ET.SubElement(child_element, "PROVIDER-IREF")
541
653
  provider_iref = sw_connector.getProviderIRef()
542
- self.setARObjectAttributes(provider_iref_tag, provider_iref)
654
+ self.writeARObjectAttributes(provider_iref_tag, provider_iref)
543
655
  self.setChildElementOptionalRefType(provider_iref_tag, "CONTEXT-COMPONENT-REF", provider_iref.getContextComponentRef())
544
656
  self.setChildElementOptionalRefType(provider_iref_tag, "TARGET-P-PORT-REF", provider_iref.getTargetPPortRef())
545
657
 
546
658
  if sw_connector.getRequesterIRef() is not None:
547
659
  requester_iref_tag = ET.SubElement(child_element, "REQUESTER-IREF")
548
660
  requester_iref = sw_connector.getRequesterIRef()
549
- self.setARObjectAttributes(requester_iref_tag, requester_iref)
661
+ self.writeARObjectAttributes(requester_iref_tag, requester_iref)
550
662
  self.setChildElementOptionalRefType(requester_iref_tag, "CONTEXT-COMPONENT-REF", requester_iref.getContextComponentRef())
551
663
  self.setChildElementOptionalRefType(requester_iref_tag, "TARGET-R-PORT-REF", requester_iref.getTargetRPortRef())
552
664
 
@@ -570,27 +682,23 @@ class ARXMLWriter(AbstractARXMLWriter):
570
682
 
571
683
  if sw_connector.getOuterPortRef() is not None:
572
684
  self.setChildElementOptionalRefType(connector_tag, "OUTER-PORT-REF", sw_connector.getOuterPortRef())
573
- #self.writeChildOptionalRefElement(requester_iref_tag, "TARGET-R-PORT-REF", sw_connector.requester_iref.target_r_port_ref)
685
+ # self.writeChildOptionalRefElement(requester_iref_tag, "TARGET-R-PORT-REF", sw_connector.requester_iref.target_r_port_ref)
574
686
 
575
687
  def writeSwConnector(self, element: ET.Element, sw_connector: SwConnector):
576
- if isinstance(sw_connector, AssemblySwConnector):
577
- self.writeAssemblySwConnector(element, sw_connector)
578
- elif isinstance(sw_connector, DelegationSwConnector):
579
- self.writeDelegationSwConnector(element, sw_connector)
580
- else:
581
- self.notImplemented("Unsupported Sw Connector %s")
688
+ self.writeIdentifiable(element, sw_connector)
689
+ self.setChildElementOptionalRefType(element, "MAPPING-REF", sw_connector.getMappingRef())
582
690
 
583
- def writeSwConnectors(self, element: ET.Element, sw_component: CompositionSwComponentType):
691
+ def writeCompositionSwComponentTypeSwConnectors(self, element: ET.Element, sw_component: CompositionSwComponentType):
584
692
  sw_connectors = sw_component.getSwConnectors()
585
693
  if len(sw_connectors) > 0:
586
- connectors_tag = ET.SubElement(element, "CONNECTORS")
587
- # Change the implementation to compatible with AUTOSAR builder
694
+ child_element = ET.SubElement(element, "CONNECTORS")
588
695
  for sw_connector in sw_connectors:
589
- self.writeSwConnector(connectors_tag, sw_connector)
590
- #for sw_connector in sw_component.getAssemblySwConnectors():
591
- # self.writeSwConnector(connectors_tag, sw_connector)
592
- #for sw_connector in sw_component.getDelegationSwConnectors():
593
- # self.writeSwConnector(connectors_tag, sw_connector)
696
+ if isinstance(sw_connector, AssemblySwConnector):
697
+ self.writeAssemblySwConnector(child_element, sw_connector)
698
+ elif isinstance(sw_connector, DelegationSwConnector):
699
+ self.writeDelegationSwConnector(child_element, sw_connector)
700
+ else:
701
+ self.notImplemented("Unsupported Sw Connector %s" % type(sw_connector))
594
702
 
595
703
  def writeCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
596
704
  data_type_mappings = parent.getDataTypeMappings()
@@ -604,8 +712,8 @@ class ARXMLWriter(AbstractARXMLWriter):
604
712
  child_element = ET.SubElement(parent, "COMPOSITION-SW-COMPONENT-TYPE")
605
713
 
606
714
  self.writeSwComponentType(child_element, sw_component)
607
- self.writeSwComponentPrototypes(child_element, sw_component)
608
- self.writeSwConnectors(child_element, sw_component)
715
+ self.writeCompositionSwComponentTypeComponents(child_element, sw_component)
716
+ self.writeCompositionSwComponentTypeSwConnectors(child_element, sw_component)
609
717
  self.writeCompositionSwComponentTypeDataTypeMappingSet(child_element, sw_component)
610
718
 
611
719
  def writeCompositionSwComponentTypes(self, element: ET.Element, ar_package: ARPackage):
@@ -615,7 +723,7 @@ class ARXMLWriter(AbstractARXMLWriter):
615
723
  def writeLParagraphs(self, element: ET.Element, paragraph: MultiLanguageParagraph):
616
724
  for l1 in paragraph.getL1s():
617
725
  l1_tag = ET.SubElement(element, "L-1")
618
- self.setARObjectAttributes(l1_tag, l1)
726
+ self.writeARObjectAttributes(l1_tag, l1)
619
727
  if l1.l is not None:
620
728
  l1_tag.attrib['L'] = l1.l
621
729
  l1_tag.text = l1.value
@@ -623,7 +731,7 @@ class ARXMLWriter(AbstractARXMLWriter):
623
731
  def setMultiLanguageParagraphs(self, element: ET.Element, key: str, paragraphs: List[MultiLanguageParagraph]):
624
732
  for paragraph in paragraphs:
625
733
  child_element = ET.SubElement(element, key)
626
- self.setARObjectAttributes(child_element, paragraph)
734
+ self.writeARObjectAttributes(child_element, paragraph)
627
735
  self.writeLParagraphs(child_element, paragraph)
628
736
  return paragraphs
629
737
 
@@ -639,7 +747,7 @@ class ARXMLWriter(AbstractARXMLWriter):
639
747
  def setDocumentationBlock(self, element: ET.Element, key: str, block: DocumentationBlock):
640
748
  if block is not None:
641
749
  child_element = ET.SubElement(element, key)
642
- self.setARObjectAttributes(child_element, block)
750
+ self.writeARObjectAttributes(child_element, block)
643
751
  self.setMultiLanguageParagraphs(child_element, "P", block.getPs())
644
752
  for list in block.getLists():
645
753
  self.setListElement(child_element, "LIST", list)
@@ -649,7 +757,7 @@ class ARXMLWriter(AbstractARXMLWriter):
649
757
  self.setChildElementOptionalLiteral(element, "ANNOTATION-ORIGIN", annotation.getAnnotationOrigin())
650
758
  self.setDocumentationBlock(element, "ANNOTATION-TEXT", annotation.getAnnotationText())
651
759
 
652
- def setAnnotations(self, element: ET.Element, annotations: List[Annotation]) :
760
+ def setAnnotations(self, element: ET.Element, annotations: List[Annotation]):
653
761
  if len(annotations) > 0:
654
762
  annotations_tag = ET.SubElement(element, "ANNOTATIONS")
655
763
  for annotation in annotations:
@@ -658,16 +766,16 @@ class ARXMLWriter(AbstractARXMLWriter):
658
766
 
659
767
  def setSwAxisIndividual(self, element: ET.Element, props: SwAxisIndividual):
660
768
  child_element = ET.SubElement(element, "SW-AXIS-INDIVIDUAL")
661
- self.setARObjectAttributes(child_element, props)
769
+ self.writeARObjectAttributes(child_element, props)
662
770
  self.setChildElementOptionalRefType(child_element, "INPUT-VARIABLE-TYPE-REF", props.getInputVariableTypeRef())
663
771
  self.setChildElementOptionalRefType(child_element, "COMPU-METHOD-REF", props.getCompuMethodRef())
664
- self.setChildElementOptionalNumericalValue(child_element, "SW-MAX-AXIS-POINTS", props.getSwMaxAxisPoints())
772
+ self.setChildElementOptionalNumericalValue(child_element, "SW-MAX-AXIS-POINTS", props.getSwMaxAxisPoints())
665
773
  self.setChildElementOptionalNumericalValue(child_element, "SW-MIN-AXIS-POINTS", props.getSwMinAxisPoints())
666
774
  self.setChildElementOptionalRefType(child_element, "DATA-CONSTR-REF", props.getDataConstrRef())
667
775
 
668
776
  def setSwAxisGrouped(self, element: ET.Element, props: SwAxisGrouped):
669
777
  child_element = ET.SubElement(element, "SW-AXIS-GROUPED")
670
- self.setARObjectAttributes(child_element, props)
778
+ self.writeARObjectAttributes(child_element, props)
671
779
  self.setChildElementOptionalRefType(child_element, "SHARED-AXIS-TYPE-REF", props.sharedAxisTypeRef)
672
780
 
673
781
  def setSwCalprmAxis(self, element: ET.Element, axis: SwCalprmAxis):
@@ -681,7 +789,7 @@ class ARXMLWriter(AbstractARXMLWriter):
681
789
  elif isinstance(axis.sw_calprm_axis_type_props, SwAxisGrouped):
682
790
  self.setSwAxisGrouped(child_element, axis.sw_calprm_axis_type_props)
683
791
  else:
684
- self._raiseError("Unsupported SwCalprmAxisTypeProps %s" % type(axis.sw_calprm_axis_type_props))
792
+ self.notImplemented("Unsupported SwCalprmAxisTypeProps %s" % type(axis.sw_calprm_axis_type_props))
685
793
 
686
794
  def setSwCalprmAxisSet(self, element: ET.Element, key: str, set: SwCalprmAxisSet):
687
795
  axises = set.getSwCalprmAxises()
@@ -699,20 +807,19 @@ class ARXMLWriter(AbstractARXMLWriter):
699
807
  def setSwDataDefProps(self, element: ET.Element, key: str, props: SwDataDefProps):
700
808
  if props is not None:
701
809
  child_element = ET.SubElement(element, key)
702
- self.setARObjectAttributes(child_element, props)
810
+ self.writeARObjectAttributes(child_element, props)
703
811
  sw_data_def_props_variants_tag = ET.SubElement(child_element, "SW-DATA-DEF-PROPS-VARIANTS")
704
812
  conditional_tag = ET.SubElement(sw_data_def_props_variants_tag, "SW-DATA-DEF-PROPS-CONDITIONAL")
705
- self.setARObjectAttributes(conditional_tag, props.conditional)
813
+ self.writeARObjectAttributes(conditional_tag, props.conditional)
706
814
  self.setAnnotations(conditional_tag, props.getAnnotations())
707
815
  self.setChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF", props.getBaseTypeRef())
816
+ self.setChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS", props.getSwCalibrationAccess())
708
817
  self.setChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF", props.getCompuMethodRef())
709
-
710
818
  self.setValueSpecification(conditional_tag, "INVALID-VALUE", props.getInvalidValue())
711
- self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
712
819
  self.setChildElementOptionalFloatValue(conditional_tag, "STEP-SIZE", props.getStepSize())
713
820
  self.setChildElementOptionalRefType(conditional_tag, "SW-ADDR-METHOD-REF", props.getSwAddrMethodRef())
714
- self.setChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS", props.getSwCalibrationAccess())
715
821
  self.setChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF", props.getDataConstrRef())
822
+ self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
716
823
  self.setSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET", props.getSwCalprmAxisSet())
717
824
  self.setChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY", props.getSwImplPolicy())
718
825
  self.setChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION", props.getSwIntendedResolution())
@@ -736,29 +843,32 @@ class ARXMLWriter(AbstractARXMLWriter):
736
843
  data_type_tag = ET.SubElement(element, "APPLICATION-PRIMITIVE-DATA-TYPE")
737
844
  self.setApplicationDataType(data_type_tag, data_type)
738
845
 
739
- def setDataPrototype(self, element: ET.Element, prototype: DataPrototype):
846
+ def writeDataPrototype(self, element: ET.Element, prototype: DataPrototype):
847
+ self.writeIdentifiable(element, prototype)
740
848
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", prototype.getSwDataDefProps())
741
849
 
742
- def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
743
- self.writeIdentifiable(element, prototype)
744
- self.setDataPrototype(element, prototype)
850
+ def writeApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
851
+ self.writeDataPrototype(element, prototype)
745
852
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
746
853
 
747
- def setApplicationRecordElement(self, element: ET.Element, prototype: ApplicationRecordElement):
748
- self.setApplicationCompositeElementDataPrototype(element, prototype)
749
-
750
- def writeApplicationRecordElements(self, element: ET.Element, data_type: ApplicationRecordDataType):
751
- records = data_type.getApplicationRecordElements()
752
- if len(records) > 0:
753
- elements_tag = ET.SubElement(element, "ELEMENTS")
754
- for record in records:
755
- child_element = ET.SubElement(elements_tag, "APPLICATION-RECORD-ELEMENT")
756
- self.setApplicationRecordElement(child_element, record)
854
+ def writeApplicationRecordElement(self, element: ET.Element, prototype: ApplicationRecordElement):
855
+ child_element = ET.SubElement(element, "APPLICATION-RECORD-ELEMENT")
856
+ self.writeApplicationCompositeElementDataPrototype(child_element, prototype)
857
+
858
+ def writeApplicationRecordDataTypeElements(self, element: ET.Element, data_type: ApplicationRecordDataType):
859
+ record_elements = data_type.getApplicationRecordElements()
860
+ if len(record_elements) > 0:
861
+ child_element = ET.SubElement(element, "ELEMENTS")
862
+ for record_element in record_elements:
863
+ if isinstance(record_element, ApplicationRecordElement):
864
+ self.writeApplicationRecordElement(child_element, record_element)
865
+ else:
866
+ self.notImplemented("Unsupported ApplicationRecordDataType Element <%s>" % type(record_element))
757
867
 
758
868
  def writeApplicationRecordDataType(self, element: ET.Element, data_type: ApplicationRecordDataType):
759
869
  data_type_tag = ET.SubElement(element, "APPLICATION-RECORD-DATA-TYPE")
760
870
  self.setApplicationDataType(data_type_tag, data_type)
761
- self.writeApplicationRecordElements(data_type_tag, data_type)
871
+ self.writeApplicationRecordDataTypeElements(data_type_tag, data_type)
762
872
 
763
873
  def writeApplicationDataTypes(self, parent: ET.Element, ar_package: ARPackage):
764
874
  for data_type in ar_package.getApplicationDataType():
@@ -819,28 +929,33 @@ class ARXMLWriter(AbstractARXMLWriter):
819
929
  else:
820
930
  self.notImplemented("Unsupported CompuConstContent <%s>" % type(content))
821
931
 
932
+ def setCompuScale(self, element: ET.Element, key: str, compu_scale: CompuScale):
933
+ if compu_scale is not None:
934
+ child_element = ET.SubElement(element, key)
935
+ self.writeARObjectAttributes(child_element, compu_scale)
936
+ self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", compu_scale.getShortLabel())
937
+ self.setChildElementOptionalLiteral(child_element, "SYMBOL", compu_scale.getSymbol())
938
+ self.setMultiLanguageOverviewParagraph(child_element, "DESC", compu_scale.getDesc())
939
+ self.setChildLimitElement(child_element, "LOWER-LIMIT", compu_scale.getLowerLimit())
940
+ self.setChildLimitElement(child_element, "UPPER-LIMIT", compu_scale.getUpperLimit())
941
+ self.writeCompuScaleContents(child_element, compu_scale)
942
+
822
943
  def setCompuScales(self, element: ET.Element, compu_scales: CompuScales):
823
944
  if compu_scales is not None:
824
- compu_scales_tag = ET.SubElement(element, "COMPU-SCALES")
945
+ child_element = ET.SubElement(element, "COMPU-SCALES")
825
946
  for compu_scale in compu_scales.getCompuScales():
826
- child_element = ET.SubElement(compu_scales_tag, "COMPU-SCALE")
827
- self.setARObjectAttributes(child_element, compu_scale)
828
- self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", compu_scale.getShortLabel())
829
- self.setChildElementOptionalLiteral(child_element, "SYMBOL", compu_scale.getSymbol())
830
- self.setChildLimitElement(child_element, "LOWER-LIMIT", compu_scale.getLowerLimit())
831
- self.setChildLimitElement(child_element, "UPPER-LIMIT", compu_scale.getUpperLimit())
832
- self.writeCompuScaleContents(child_element, compu_scale)
947
+ self.setCompuScale(child_element, "COMPU-SCALE", compu_scale)
833
948
 
834
949
  def setCompuConst(self, element: ET.Element, key: str, compu_const: CompuConst):
835
950
  if compu_const is not None:
836
951
  child_element = ET.SubElement(element, key)
837
- self.setARObjectAttributes(child_element, compu_const)
952
+ self.writeARObjectAttributes(child_element, compu_const)
838
953
  self.setCompuConstContent(child_element, compu_const.getCompuConstContentType())
839
954
 
840
955
  def setCompu(self, element: ET.Element, key: str, compu: Compu):
841
- if compu is not None:
956
+ if compu is not None:
842
957
  child_element = ET.SubElement(element, key)
843
- self.setARObjectAttributes(child_element, compu)
958
+ self.writeARObjectAttributes(child_element, compu)
844
959
  self.setCompuScales(child_element, compu.getCompuContent())
845
960
  self.setCompuConst(child_element, "COMPU-DEFAULT-VALUE", compu.getCompuDefaultValue())
846
961
 
@@ -852,30 +967,31 @@ class ARXMLWriter(AbstractARXMLWriter):
852
967
  self.setCompu(child_element, "COMPU-INTERNAL-TO-PHYS", compu_method.getCompuInternalToPhys())
853
968
  self.setCompu(child_element, "COMPU-PHYS-TO-INTERNAL", compu_method.getCompuPhysToInternal())
854
969
 
855
- def setApplicationValueSpecification(self, element: ET.Element, spec: ApplicationValueSpecification):
856
- spec_tag = ET.SubElement(element, "APPLICATION-VALUE-SPECIFICATION")
857
- self.setChildElementOptionalLiteral(spec_tag, "SHORT-LABEL", spec.getShortLabel())
858
- self.setChildElementOptionalLiteral(spec_tag, "CATEGORY", spec.category)
859
- self.writeSwValueCont(spec_tag, spec.getSwValueCont())
970
+ def writeApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
971
+ if value_spec is not None:
972
+ child_element = ET.SubElement(element, "APPLICATION-VALUE-SPECIFICATION")
973
+ self.writeValueSpecification(child_element, value_spec)
974
+ self.setChildElementOptionalLiteral(child_element, "CATEGORY", value_spec.getCategory())
975
+ self.writeSwValueCont(child_element, value_spec.getSwValueCont())
860
976
 
861
- def setRecordValueSpecification(self, element: ET.Element, spec: RecordValueSpecification):
977
+ def writeRecordValueSpecification(self, element: ET.Element, spec: RecordValueSpecification):
862
978
  child_element = ET.SubElement(element, "RECORD-VALUE-SPECIFICATION")
863
- self.setARObjectAttributes(child_element, spec)
979
+ self.writeARObjectAttributes(child_element, spec)
864
980
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", spec.getShortLabel())
865
981
  fields = spec.getFields()
866
982
  if len(fields) > 0:
867
983
  fields_tag = ET.SubElement(child_element, "FIELDS")
868
984
  for field in fields:
869
985
  if isinstance(field, ApplicationValueSpecification):
870
- self.setApplicationValueSpecification(fields_tag, field)
986
+ self.writeApplicationValueSpecification(fields_tag, field)
871
987
  elif isinstance(field, NumericalValueSpecification):
872
- self.setNumericalValueSpecification(fields_tag, field)
988
+ self.writeNumericalValueSpecification(fields_tag, field)
873
989
  elif isinstance(field, TextValueSpecification):
874
- self.setTextValueSpecification(fields_tag, field)
990
+ self.writeTextValueSpecification(fields_tag, field)
875
991
  elif isinstance(field, ArrayValueSpecification):
876
- self.setArrayValueSpecification(fields_tag, field)
992
+ self.writeArrayValueSpecification(fields_tag, field)
877
993
  elif isinstance(field, RecordValueSpecification):
878
- self.setRecordValueSpecification(fields_tag, field)
994
+ self.writeRecordValueSpecification(fields_tag, field)
879
995
  else:
880
996
  self.notImplemented("Unsupported Field <%s>" % type(field))
881
997
 
@@ -889,7 +1005,7 @@ class ARXMLWriter(AbstractARXMLWriter):
889
1005
  def setInternalConstrs(self, element: ET.Element, constrs: InternalConstrs):
890
1006
  if constrs is not None:
891
1007
  constrs_tag = ET.SubElement(element, "INTERNAL-CONSTRS")
892
- self.setARObjectAttributes(constrs_tag, constrs)
1008
+ self.writeARObjectAttributes(constrs_tag, constrs)
893
1009
  if constrs.lower_limit is not None:
894
1010
  self.setChildLimitElement(constrs_tag, "LOWER-LIMIT", constrs.lower_limit)
895
1011
  if constrs.upper_limit is not None:
@@ -898,7 +1014,7 @@ class ARXMLWriter(AbstractARXMLWriter):
898
1014
  def setPhysConstrs(self, element: ET.Element, constrs: PhysConstrs):
899
1015
  if constrs is not None:
900
1016
  child_element = ET.SubElement(element, "PHYS-CONSTRS")
901
- self.setARObjectAttributes(child_element, constrs)
1017
+ self.writeARObjectAttributes(child_element, constrs)
902
1018
  if constrs.lower_limit is not None:
903
1019
  self.setChildLimitElement(child_element, "LOWER-LIMIT", constrs.lower_limit)
904
1020
  if constrs.upper_limit is not None:
@@ -911,7 +1027,7 @@ class ARXMLWriter(AbstractARXMLWriter):
911
1027
  rules_tag = ET.SubElement(element, "DATA-CONSTR-RULES")
912
1028
  for rule in rules:
913
1029
  child_element = ET.SubElement(rules_tag, "DATA-CONSTR-RULE")
914
- self.setARObjectAttributes(child_element, rule)
1030
+ self.writeARObjectAttributes(child_element, rule)
915
1031
  self.setChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL", rule.constrLevel)
916
1032
  self.setPhysConstrs(child_element, rule.physConstrs)
917
1033
  self.setInternalConstrs(child_element, rule.internalConstrs)
@@ -919,7 +1035,7 @@ class ARXMLWriter(AbstractARXMLWriter):
919
1035
  def writeDataConstr(self, element: ET.Element, constr: DataConstr):
920
1036
  child_element = ET.SubElement(element, "DATA-CONSTR")
921
1037
  self.writeIdentifiable(child_element, constr)
922
- self.writeDataConstrRules(child_element, constr)
1038
+ self.writeDataConstrRules(child_element, constr)
923
1039
 
924
1040
  def writeUnit(self, element: ET.Element, unit: Unit):
925
1041
  self.logger.debug("writeUnit %s" % unit.getShortName())
@@ -932,16 +1048,16 @@ class ARXMLWriter(AbstractARXMLWriter):
932
1048
 
933
1049
  def setRModeInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: RModeInAtomicSwcInstanceRef):
934
1050
  child_element = ET.SubElement(element, key)
935
- self.setARObjectAttributes(child_element, iref)
1051
+ self.writeARObjectAttributes(child_element, iref)
936
1052
  self.setChildElementOptionalRefType(child_element, "BASE", iref.getBaseRef())
937
1053
  self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.getContextPortRef())
938
- self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.getContextModeDeclarationGroupPrototypeRef())
1054
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.getContextModeDeclarationGroupPrototypeRef()) # noqa E501
939
1055
  self.setChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF", iref.getTargetModeDeclarationRef())
940
1056
 
941
1057
  def setPOperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: POperationInAtomicSwcInstanceRef):
942
1058
  if iref is not None:
943
1059
  child_element = ET.SubElement(element, key)
944
- self.setARObjectAttributes(child_element, iref)
1060
+ self.writeARObjectAttributes(child_element, iref)
945
1061
  self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", iref.getContextPPortRef())
946
1062
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.getTargetProvidedOperationRef())
947
1063
 
@@ -954,20 +1070,20 @@ class ARXMLWriter(AbstractARXMLWriter):
954
1070
  self.setRModeInAtomicSwcInstanceRef(child_element, "DISABLED-MODE-IREF", iref)
955
1071
  self.setChildElementOptionalRefType(element, "START-ON-EVENT-REF", event.startOnEventRef)
956
1072
 
957
- def setTimingEvent(self, element: ET.Element, event: TimingEvent):
1073
+ def writeTimingEvent(self, element: ET.Element, event: TimingEvent):
958
1074
  if event is not None:
959
1075
  child_element = ET.SubElement(element, "TIMING-EVENT")
960
1076
  self.setRTEEvent(child_element, event)
961
1077
  self.setChildElementOptionalTimeValue(child_element, "OFFSET", event.getOffset())
962
1078
  self.setChildElementOptionalTimeValue(child_element, "PERIOD", event.getPeriod())
963
1079
 
964
- def setOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
1080
+ def writeOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
965
1081
  if event is not None:
966
1082
  child_element = ET.SubElement(element, "OPERATION-INVOKED-EVENT")
967
1083
  self.setRTEEvent(child_element, event)
968
1084
  self.setPOperationInAtomicSwcInstanceRef(child_element, "OPERATION-IREF", event.operationIRef)
969
1085
 
970
- def setSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
1086
+ def writeSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
971
1087
  if event is not None:
972
1088
  child_element = ET.SubElement(element, "SWC-MODE-SWITCH-EVENT")
973
1089
  self.setRTEEvent(child_element, event)
@@ -984,46 +1100,61 @@ class ARXMLWriter(AbstractARXMLWriter):
984
1100
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
985
1101
  self.setChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF", iref.getTargetDataElementRef())
986
1102
 
987
- def setDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
1103
+ def writeDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
988
1104
  if event is not None:
989
1105
  child_element = ET.SubElement(element, "DATA-RECEIVED-EVENT")
990
1106
  self.setRTEEvent(child_element, event)
991
1107
  self.setRVariableInAtomicSwcInstanceRef(child_element, event.dataIRef)
992
1108
 
993
- def setInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
1109
+ def writeInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
994
1110
  pass
995
1111
 
996
- def setInitEvent(self, element: ET.Element, event: InitEvent):
1112
+ def writeInitEvent(self, element: ET.Element, event: InitEvent):
997
1113
  if event is not None:
998
1114
  child_element = ET.SubElement(element, "INIT-EVENT")
999
1115
  self.setRTEEvent(child_element, event)
1000
1116
 
1001
- def setAsynchronousServerCallReturnsEvent(self, element: ET.Element, event: InitEvent):
1117
+ def writeAsynchronousServerCallReturnsEvent(self, element: ET.Element, event: InitEvent):
1002
1118
  if event is not None:
1003
1119
  child_element = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-RETURNS-EVENT")
1004
1120
  self.setRTEEvent(child_element, event)
1005
1121
  self.setChildElementOptionalRefType(child_element, "EVENT-SOURCE-REF", event.getActivationReasonRepresentationRef())
1006
1122
 
1007
- def writeRTEEvents(self, element: ET.Element, parent: SwcInternalBehavior):
1123
+ def writeModeSwitchedAckEvent(self, element: ET.Element, event: ModeSwitchedAckEvent):
1124
+ if event is not None:
1125
+ child_element = ET.SubElement(element, "MODE-SWITCHED-ACK-EVENT")
1126
+ self.setRTEEvent(child_element, event)
1127
+ self.setChildElementOptionalRefType(child_element, "EVENT-SOURCE-REF", event.getEventSourceRef())
1128
+
1129
+ def writeBackgroundEvent(self, element: ET.Element, event: BackgroundEvent):
1130
+ if event is not None:
1131
+ child_element = ET.SubElement(element, "BACKGROUND-EVENT")
1132
+ self.setRTEEvent(child_element, event)
1133
+
1134
+ def writeSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
1008
1135
  events = parent.getRteEvents()
1009
1136
  if len(events) > 0:
1010
1137
  child_element = ET.SubElement(element, "EVENTS")
1011
1138
 
1012
1139
  for event in events:
1013
1140
  if isinstance(event, TimingEvent):
1014
- self.setTimingEvent(child_element, event)
1141
+ self.writeTimingEvent(child_element, event)
1015
1142
  elif isinstance(event, OperationInvokedEvent):
1016
- self.setOperationInvokedEvent(child_element, event)
1143
+ self.writeOperationInvokedEvent(child_element, event)
1017
1144
  elif isinstance(event, SwcModeSwitchEvent):
1018
- self.setSwcModeSwitchEvent(child_element, event)
1145
+ self.writeSwcModeSwitchEvent(child_element, event)
1019
1146
  elif isinstance(event, DataReceivedEvent):
1020
- self.setDataReceivedEvent(child_element, event)
1147
+ self.writeDataReceivedEvent(child_element, event)
1021
1148
  elif isinstance(event, InternalTriggerOccurredEvent):
1022
- self.setInternalTriggerOccurredEvent(child_element, event)
1149
+ self.writeInternalTriggerOccurredEvent(child_element, event)
1023
1150
  elif isinstance(event, InitEvent):
1024
- self.setInitEvent(child_element, event)
1151
+ self.writeInitEvent(child_element, event)
1025
1152
  elif isinstance(event, AsynchronousServerCallReturnsEvent):
1026
- self.setAsynchronousServerCallReturnsEvent(child_element, event)
1153
+ self.writeAsynchronousServerCallReturnsEvent(child_element, event)
1154
+ elif isinstance(event, ModeSwitchedAckEvent):
1155
+ self.writeModeSwitchedAckEvent(child_element, event)
1156
+ elif isinstance(event, BackgroundEvent):
1157
+ self.writeBackgroundEvent(child_element, event)
1027
1158
  else:
1028
1159
  self.notImplemented("Unsupported Event <%s>" % type(event))
1029
1160
 
@@ -1042,27 +1173,36 @@ class ARXMLWriter(AbstractARXMLWriter):
1042
1173
  for ref in refs:
1043
1174
  self.setChildElementOptionalRefType(refs_tag, "DATA-TYPE-MAPPING-REF", ref)
1044
1175
 
1176
+ def writeInternalBehaviorStaticMemories(self, element: ET.Element, behavior: InternalBehavior):
1177
+ memories = behavior.getStaticMemories()
1178
+ if len(memories) > 0:
1179
+ child_element = ET.SubElement(element, "STATIC-MEMORYS")
1180
+ for memory in memories:
1181
+ if isinstance(memory, VariableDataPrototype):
1182
+ self.writeVariableDataPrototype(child_element, memory)
1183
+
1045
1184
  def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
1046
1185
  self.writeIdentifiable(element, behavior)
1047
- self.setParameterDataPrototypes(element, "CONSTANT-MEMORYS", behavior.getConstantMemories())
1186
+ self.writeSwcInternalBehaviorParameterDataPrototypes(element, "CONSTANT-MEMORYS", behavior.getConstantMemories())
1048
1187
  self.writeDataTypeMappingRefs(element, behavior)
1049
1188
  self.writeExclusiveAreas(element, behavior)
1189
+ self.writeInternalBehaviorStaticMemories(element, behavior)
1050
1190
 
1051
1191
  def setAutosarVariableRef(self, element: ET.Element, key: str, ref: AutosarVariableRef):
1052
1192
  if ref is not None:
1053
1193
  child_element = ET.SubElement(element, key)
1054
- self.setARObjectAttributes(child_element, ref)
1194
+ self.writeARObjectAttributes(child_element, ref)
1055
1195
  if ref.getAutosarVariableIRef() is not None:
1056
1196
  child_element = ET.SubElement(child_element, "AUTOSAR-VARIABLE-IREF")
1057
- #self.setARObjectAttributes(child_element, ref)
1197
+ # self.setARObjectAttributes(child_element, ref)
1058
1198
  self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref.getAutosarVariableIRef().getPortPrototypeRef())
1059
- self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.getAutosarVariableIRef().getTargetDataPrototypeRef())
1199
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.getAutosarVariableIRef().getTargetDataPrototypeRef()) # noqa E501
1060
1200
  self.setChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF", ref.getLocalVariableRef())
1061
1201
 
1062
1202
  def setComponentInSystemInstanceRef(self, element: ET.Element, tag_name: str, ref: ComponentInSystemInstanceRef):
1063
1203
  if ref is not None:
1064
1204
  child_element = ET.SubElement(element, tag_name)
1065
- self.setARObjectAttributes(child_element, ref)
1205
+ self.writeARObjectAttributes(child_element, ref)
1066
1206
  self.setChildElementOptionalRefType(child_element, "BASE-REF", ref.getBaseRef())
1067
1207
  self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", ref.getContextCompositionRef())
1068
1208
  self.setChildElementOptionalRefType(child_element, "TARGET-COMPONENT-REF", ref.getTargetComponentRef())
@@ -1082,42 +1222,42 @@ class ARXMLWriter(AbstractARXMLWriter):
1082
1222
  self.writeIdentifiable(child_element, parameter_access)
1083
1223
  self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.getAccessedParameter())
1084
1224
 
1085
- def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
1225
+ def writeRunnableEntityParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
1086
1226
  parameter_accesses = entity.getParameterAccesses()
1087
1227
  if len(parameter_accesses) > 0:
1088
1228
  child_element = ET.SubElement(element, "PARAMETER-ACCESSS")
1089
1229
  for parameter_access in parameter_accesses:
1090
1230
  self.writeParameterAccess(child_element, parameter_access)
1091
1231
 
1092
- def writeDataReceivePointByArguments(self, element: ET.Element, entity: RunnableEntity):
1232
+ def writeRunnableEntityDataReceivePointByArguments(self, element: ET.Element, entity: RunnableEntity):
1093
1233
  accesses = entity.getDataReceivePointByArguments()
1094
1234
  if len(accesses) > 0:
1095
1235
  child_element = ET.SubElement(element, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
1096
1236
  for access in accesses:
1097
1237
  self.setVariableAccess(child_element, access)
1098
1238
 
1099
- def writeDataSendPoints(self, element: ET.Element, entity: RunnableEntity):
1239
+ def writeRunnableEntityDataSendPoints(self, element: ET.Element, entity: RunnableEntity):
1100
1240
  points = entity.getDataSendPoints()
1101
1241
  if len(points) > 0:
1102
1242
  child_element = ET.SubElement(element, "DATA-SEND-POINTS")
1103
1243
  for point in points:
1104
1244
  self.setVariableAccess(child_element, point)
1105
1245
 
1106
- def writeDataReadAccesses(self, element: ET.Element, entity: RunnableEntity):
1246
+ def writeRunnableEntityDataReadAccesses(self, element: ET.Element, entity: RunnableEntity):
1107
1247
  accesses = entity.getDataReadAccesses()
1108
1248
  if len(accesses) > 0:
1109
1249
  child_element = ET.SubElement(element, "DATA-READ-ACCESSS")
1110
1250
  for access in accesses:
1111
1251
  self.setVariableAccess(child_element, access)
1112
1252
 
1113
- def writeDataWriteAccesses(self, element: ET.Element, entity: RunnableEntity):
1253
+ def writeRunnableEntityDataWriteAccesses(self, element: ET.Element, entity: RunnableEntity):
1114
1254
  accesses = entity.getDataWriteAccesses()
1115
1255
  if len(accesses) > 0:
1116
1256
  child_element = ET.SubElement(element, "DATA-WRITE-ACCESSS")
1117
1257
  for access in accesses:
1118
1258
  self.setVariableAccess(child_element, access)
1119
1259
 
1120
- def writeReadLocalVariables(self, element: ET.Element, entity: RunnableEntity):
1260
+ def writeRunnableEntityReadLocalVariables(self, element: ET.Element, entity: RunnableEntity):
1121
1261
  variables = entity.getReadLocalVariables()
1122
1262
  if len(variables) > 0:
1123
1263
  child_element = ET.SubElement(element, "READ-LOCAL-VARIABLES")
@@ -1127,7 +1267,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1127
1267
  def setROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
1128
1268
  if iref is not None:
1129
1269
  child_element = ET.SubElement(element, key)
1130
- self.setARObjectAttributes(child_element, iref)
1270
+ self.writeARObjectAttributes(child_element, iref)
1131
1271
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
1132
1272
  self.setChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF", iref.getTargetRequiredOperationRef())
1133
1273
 
@@ -1145,7 +1285,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1145
1285
  self.writeIdentifiable(child_element, call_point)
1146
1286
  self.setServerCallPoint(child_element, call_point)
1147
1287
 
1148
- def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
1288
+ def writeRunnableEntityServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
1149
1289
  call_points = entity.getServerCallPoints()
1150
1290
  if len(call_points) > 0:
1151
1291
  child_element = ET.SubElement(element, "SERVER-CALL-POINTS")
@@ -1155,44 +1295,81 @@ class ARXMLWriter(AbstractARXMLWriter):
1155
1295
  elif isinstance(call_point, AsynchronousServerCallPoint):
1156
1296
  self.setAsynchronousServerCallPoint(child_element, call_point)
1157
1297
  else:
1158
- self._raiseError("Unsupported ServerCallPoint type <%s>" % type(call_point))
1298
+ self.notImplemented("Unsupported ServerCallPoint type <%s>" % type(call_point))
1159
1299
 
1160
- def writeWrittenLocalVariable(self, element: ET.Element, entity: RunnableEntity):
1300
+ def writeRunnableEntityWrittenLocalVariable(self, element: ET.Element, entity: RunnableEntity):
1161
1301
  variables = entity.getWrittenLocalVariables()
1162
1302
  if len(variables) > 0:
1163
1303
  child_element = ET.SubElement(element, "WRITTEN-LOCAL-VARIABLES")
1164
1304
  for access in variables:
1165
1305
  self.setVariableAccess(child_element, access)
1166
1306
 
1167
- def setRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, tag: str, iref: RModeGroupInAtomicSWCInstanceRef):
1168
- if iref is not None:
1169
- child_element = ET.SubElement(element, tag)
1170
- instance_ref_tag = ET.SubElement(child_element, "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
1171
- self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
1172
- self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-MODE-GROUP-REF", iref.getTargetModeGroupRef())
1307
+ def writeModeGroupInAtomicSwcInstanceRef(self, element: ET.Element, instance_ref: ModeGroupInAtomicSwcInstanceRef):
1308
+ self.setChildElementOptionalRefType(element, "BASE-REF", instance_ref.getBaseRef())
1309
+ self.setChildElementOptionalRefType(element, "CONTEXT-PORT-REF", instance_ref.getContextPortRef())
1173
1310
 
1174
- def setPModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, tag: str, iref: PModeGroupInAtomicSwcInstanceRef):
1175
- if iref is not None:
1176
- child_element = ET.SubElement(element, tag)
1177
- self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", iref.getContextPPortRef())
1178
- self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", iref.getTargetModeGroupRef())
1311
+ def writeRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, instance_ref: RModeGroupInAtomicSWCInstanceRef):
1312
+ if instance_ref is not None:
1313
+ child_element = ET.SubElement(element, "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
1314
+ self.writeModeGroupInAtomicSwcInstanceRef(child_element, instance_ref)
1315
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", instance_ref.getContextRPortRef())
1316
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", instance_ref.getTargetModeGroupRef())
1317
+
1318
+ def writePModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, instance_ref: PModeGroupInAtomicSwcInstanceRef):
1319
+ if instance_ref is not None:
1320
+ child_element = ET.SubElement(element, "P-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
1321
+ self.writeModeGroupInAtomicSwcInstanceRef(child_element, instance_ref)
1322
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", instance_ref.getContextPPortRef())
1323
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", instance_ref.getTargetModeGroupRef())
1179
1324
 
1180
- def writeModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
1325
+ def setModeGroupIRef(self, element: ET.Element, key: str, instance_ref: ModeGroupInAtomicSwcInstanceRef):
1326
+ if instance_ref is not None:
1327
+ child_element = ET.SubElement(element, key)
1328
+ if isinstance(instance_ref, PModeGroupInAtomicSwcInstanceRef):
1329
+ self.writePModeGroupInAtomicSWCInstanceRef(child_element, instance_ref)
1330
+ elif isinstance(instance_ref, RModeGroupInAtomicSWCInstanceRef):
1331
+ self.writeRModeGroupInAtomicSWCInstanceRef(child_element, instance_ref)
1332
+ else:
1333
+ self.notImplemented("Unsupported Mode Group IRef <%s>" % type(instance_ref))
1334
+ return instance_ref
1335
+
1336
+ def writeModeAccessPoint(self, element: ET.Element, point: ModeAccessPoint):
1337
+ if point is not None:
1338
+ child_element = ET.SubElement(element, "MODE-ACCESS-POINT")
1339
+ self.setModeGroupIRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1340
+
1341
+ def writeRunnableEntityModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
1181
1342
  points = entity.getModeAccessPoints()
1182
1343
  if len(points) > 0:
1183
- mode_access_points_tag = ET.SubElement(element, "MODE-ACCESS-POINTS")
1344
+ child_element = ET.SubElement(element, "MODE-ACCESS-POINTS")
1184
1345
  for point in points:
1185
- child_element = ET.SubElement(mode_access_points_tag, "MODE-ACCESS-POINT")
1186
- self.setRModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1187
-
1188
- def writeModeSwitchPoints(self, element: ET.Element, entity: RunnableEntity):
1346
+ if isinstance(point, ModeAccessPoint):
1347
+ self.writeModeAccessPoint(child_element, point)
1348
+ else:
1349
+ self.notImplemented("Unsupported Mode Access Points <%s>" % type(point))
1350
+
1351
+ def writeModeSwitchPointModeGroupIRef(self, element: ET.Element, point: ModeSwitchPoint):
1352
+ if point is not None:
1353
+ child_element = ET.SubElement(element, "MODE-GROUP-IREF")
1354
+ instance_ref = point.getModeGroupIRef()
1355
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", instance_ref.getContextPPortRef())
1356
+ self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", instance_ref.getTargetModeGroupRef())
1357
+
1358
+ def writeModeSwitchPoint(self, element: ET.Element, point: ModeSwitchPoint):
1359
+ if point is not None:
1360
+ child_element = ET.SubElement(element, "MODE-SWITCH-POINT")
1361
+ self.writeIdentifiable(child_element, point)
1362
+ self.writeModeSwitchPointModeGroupIRef(child_element, point)
1363
+
1364
+ def writeRunnableEntityModeSwitchPoints(self, element: ET.Element, entity: RunnableEntity):
1189
1365
  points = entity.getModeSwitchPoints()
1190
1366
  if len(points) > 0:
1191
- mode_access_points_tag = ET.SubElement(element, "MODE-SWITCH-POINTS")
1367
+ child_element = ET.SubElement(element, "MODE-SWITCH-POINTS")
1192
1368
  for point in points:
1193
- child_element = ET.SubElement(mode_access_points_tag, "MODE-SWITCH-POINT")
1194
- self.writeIdentifiable(child_element, point)
1195
- self.setPModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1369
+ if isinstance(point, ModeSwitchPoint):
1370
+ self.writeModeSwitchPoint(child_element, point)
1371
+ else:
1372
+ self.notImplemented("unsupported Mode Switch Point <%s>" % type(point))
1196
1373
 
1197
1374
  def setRunnableEntityArgument(self, element: ET.Element, argument: RunnableEntityArgument):
1198
1375
  child_element = ET.SubElement(element, "RUNNABLE-ENTITY-ARGUMENT")
@@ -1208,7 +1385,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1208
1385
  else:
1209
1386
  self.notImplemented("Unsupported argument of Runnable Entity <%s>" % type(argument))
1210
1387
 
1211
- def writeAsynchronousServerCallResultPoint(self, element: ET.Element, entity: RunnableEntity):
1388
+ def writeRunnableEntityAsynchronousServerCallResultPoint(self, element: ET.Element, entity: RunnableEntity):
1212
1389
  points = entity.getAsynchronousServerCallResultPoints()
1213
1390
  if len(points) > 0:
1214
1391
  points_tag = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINTS")
@@ -1220,23 +1397,23 @@ class ARXMLWriter(AbstractARXMLWriter):
1220
1397
  def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
1221
1398
  if entity is not None:
1222
1399
  child_element = ET.SubElement(element, "RUNNABLE-ENTITY")
1223
- self.setExecutableEntity(child_element, entity)
1400
+ self.writeExecutableEntity(child_element, entity)
1224
1401
  self.writeRunnableEntityArguments(child_element, entity)
1225
- self.writeAsynchronousServerCallResultPoint(child_element, entity)
1402
+ self.writeRunnableEntityAsynchronousServerCallResultPoint(child_element, entity)
1226
1403
  self.setChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY", entity.getCanBeInvokedConcurrently())
1227
- self.writeDataReadAccesses(child_element, entity)
1228
- self.writeDataReceivePointByArguments(child_element, entity)
1229
- self.writeDataSendPoints(child_element, entity)
1230
- self.writeDataWriteAccesses(child_element, entity)
1231
- self.writeModeAccessPoints(child_element, entity)
1232
- self.writeModeSwitchPoints(child_element, entity)
1233
- self.writeParameterAccesses(child_element, entity)
1234
- self.writeReadLocalVariables(child_element, entity)
1235
- self.writeServerCallPoints(child_element, entity)
1404
+ self.writeRunnableEntityDataReadAccesses(child_element, entity)
1405
+ self.writeRunnableEntityDataReceivePointByArguments(child_element, entity)
1406
+ self.writeRunnableEntityDataSendPoints(child_element, entity)
1407
+ self.writeRunnableEntityDataWriteAccesses(child_element, entity)
1408
+ self.writeRunnableEntityModeAccessPoints(child_element, entity)
1409
+ self.writeRunnableEntityModeSwitchPoints(child_element, entity)
1410
+ self.writeRunnableEntityParameterAccesses(child_element, entity)
1411
+ self.writeRunnableEntityReadLocalVariables(child_element, entity)
1412
+ self.writeRunnableEntityServerCallPoints(child_element, entity)
1236
1413
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", entity.symbol)
1237
- self.writeWrittenLocalVariable(child_element, entity)
1414
+ self.writeRunnableEntityWrittenLocalVariable(child_element, entity)
1238
1415
 
1239
- def writeSwcInternalBehaviorRunnableEntities(self, element: ET.Element, behavior: SwcInternalBehavior):
1416
+ def writeSwcInternalBehaviorRunnables(self, element: ET.Element, behavior: SwcInternalBehavior):
1240
1417
  entities = behavior.getRunnableEntities()
1241
1418
  if len(entities) > 0:
1242
1419
  runnables_tag = ET.SubElement(element, "RUNNABLES")
@@ -1254,9 +1431,9 @@ class ARXMLWriter(AbstractARXMLWriter):
1254
1431
  if isinstance(prototype, VariableDataPrototype):
1255
1432
  self.writeVariableDataPrototype(child_element, prototype)
1256
1433
  else:
1257
- self._raiseError("Unsupported ArTypedPerInstanceMemories <%s>" % type(prototype))
1258
-
1259
- def writeExplicitInterRunnableVariables(self, element: ET.Element, behavior: SwcInternalBehavior):
1434
+ self.notImplemented("Unsupported ArTypedPerInstanceMemories <%s>" % type(prototype))
1435
+
1436
+ def writeSwcInternalBehaviorExplicitInterRunnableVariables(self, element: ET.Element, behavior: SwcInternalBehavior):
1260
1437
  prototypes = behavior.getExplicitInterRunnableVariables()
1261
1438
  if len(prototypes) > 0:
1262
1439
  child_element = ET.SubElement(element, "EXPLICIT-INTER-RUNNABLE-VARIABLES")
@@ -1264,9 +1441,9 @@ class ARXMLWriter(AbstractARXMLWriter):
1264
1441
  if isinstance(prototype, VariableDataPrototype):
1265
1442
  self.writeVariableDataPrototype(child_element, prototype)
1266
1443
  else:
1267
- self._raiseError("Unsupported ExplicitInterRunnableVariables <%s>" % type(prototype))
1444
+ self.notImplemented("Unsupported ExplicitInterRunnableVariables <%s>" % type(prototype))
1268
1445
 
1269
- def writePerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
1446
+ def writeSwcInternalBehaviorPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
1270
1447
  memories = behavior.getPerInstanceMemories()
1271
1448
  if len(memories) > 0:
1272
1449
  memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
@@ -1276,21 +1453,20 @@ class ARXMLWriter(AbstractARXMLWriter):
1276
1453
  self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.getInitValue())
1277
1454
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.getSwDataDefProps())
1278
1455
  self.setChildElementOptionalLiteral(child_element, "TYPE", memory.getType())
1279
- self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.getTypeDefinition())
1456
+ self.setChildElementOptionalLiteral(child_element, "TYPE-DEFINITION", memory.getTypeDefinition())
1280
1457
 
1281
- def setParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1458
+ def writeParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1282
1459
  child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
1283
- self.writeIdentifiable(child_element, prototype)
1284
- self.setAutosarDataPrototype(child_element, prototype)
1460
+ self.writeAutosarDataPrototype(child_element, prototype)
1285
1461
  self.setValueSpecification(child_element, "INIT-VALUE", prototype.getInitValue())
1286
1462
 
1287
- def setParameterDataPrototypes(self, element: ET.Element, key: str, parameters: List[ParameterDataPrototype]):
1463
+ def writeSwcInternalBehaviorParameterDataPrototypes(self, element: ET.Element, key: str, parameters: List[ParameterDataPrototype]):
1288
1464
  if len(parameters) > 0:
1289
1465
  child_element = ET.SubElement(element, key)
1290
1466
  for parameter in parameters:
1291
- self.setParameterDataPrototype(child_element, parameter)
1467
+ self.writeParameterDataPrototype(child_element, parameter)
1292
1468
 
1293
- def writePortDefinedArgumentValues(self, element: ET.Element, argument_values: List[PortDefinedArgumentValue]) :
1469
+ def writePortDefinedArgumentValues(self, element: ET.Element, argument_values: List[PortDefinedArgumentValue]):
1294
1470
  if len(argument_values) > 0:
1295
1471
  child_element = ET.SubElement(element, "PORT-ARG-VALUES")
1296
1472
  for argument_value in argument_values:
@@ -1299,7 +1475,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1299
1475
  self.setValueSpecification(child_element, "VALUE", argument_value.getValue())
1300
1476
  self.setChildElementOptionalRefType(child_element, "VALUE-TYPE-TREF", argument_value.getValueTypeTRef())
1301
1477
 
1302
- def writePortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
1478
+ def writeSwcInternalBehaviorPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
1303
1479
  options = behavior.getPortAPIOptions()
1304
1480
  if len(options) > 0:
1305
1481
  port_api_options_tag = ET.SubElement(element, "PORT-API-OPTIONS")
@@ -1324,7 +1500,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1324
1500
  if isinstance(data, RoleBasedDataTypeAssignment):
1325
1501
  self.writeRoleBasedDataTypeAssignment(child_element, data)
1326
1502
  else:
1327
- self._raiseError("Unsupported Assigned Data <%s>" % type(data))
1503
+ self.notImplemented("Unsupported Assigned Data <%s>" % type(data))
1328
1504
 
1329
1505
  def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
1330
1506
  self.writeIdentifiable(element, dependency)
@@ -1350,7 +1526,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1350
1526
  if isinstance(data, RoleBasedDataAssignment):
1351
1527
  self.writeRoleBasedDataAssignment(child_element, data)
1352
1528
  else:
1353
- self._raiseError("Unsupported Assigned Data <%s>" % type(data))
1529
+ self.notImplemented("Unsupported Assigned Data <%s>" % type(data))
1354
1530
 
1355
1531
  def writeSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
1356
1532
  assigned_data = dependency.getAssignedPorts()
@@ -1360,7 +1536,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1360
1536
  if isinstance(data, RoleBasedPortAssignment):
1361
1537
  self.writeRoleBasedPortAssignment(child_element, data)
1362
1538
  else:
1363
- self._raiseError("Unsupported Assigned Data <%s>" % type(data))
1539
+ self.notImplemented("Unsupported Assigned Data <%s>" % type(data))
1364
1540
 
1365
1541
  def setNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1366
1542
  child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
@@ -1390,8 +1566,8 @@ class ARXMLWriter(AbstractARXMLWriter):
1390
1566
  child_element = ET.SubElement(element, "DIAGNOSTIC-COMMUNICATION-MANAGER-NEEDS")
1391
1567
  self.logger.debug("write DiagnosticCommunicationManagerNeeds %s" % needs.getShortName())
1392
1568
  self.writeIdentifiable(child_element, needs)
1393
- self.setChildElementOptionalLiteral(child_element, "SERVICE-REQUEST-CALLBACK-TYPE", needs.getServiceRequestCallbackType())
1394
-
1569
+ self.setChildElementOptionalLiteral(child_element, "SERVICE-REQUEST-CALLBACK-TYPE", needs.getServiceRequestCallbackType())
1570
+
1395
1571
  def setDiagnosticRoutineNeeds(self, element: ET.Element, needs: DiagnosticRoutineNeeds):
1396
1572
  child_element = ET.SubElement(element, "DIAGNOSTIC-ROUTINE-NEEDS")
1397
1573
  self.logger.debug("write DiagnosticRoutineNeeds %s" % needs.getShortName())
@@ -1412,7 +1588,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1412
1588
  def setDiagEventDebounceMonitorInternal(self, element: ET.Element, algorithm: DiagEventDebounceMonitorInternal):
1413
1589
  child_element = ET.SubElement(element, "DIAG-EVENT-DEBOUNCE-MONITOR-INTERNAL")
1414
1590
  self.writeIdentifiable(child_element, algorithm)
1415
-
1591
+
1416
1592
  def writeDiagEventDebounceAlgorithm(self, element: ET.Element, needs: DiagnosticEventNeeds):
1417
1593
  algorithm = needs.getDiagEventDebounceAlgorithm()
1418
1594
  if algorithm is not None:
@@ -1435,7 +1611,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1435
1611
  self.logger.debug("write DiagnosticEventNeeds %s" % needs.getShortName())
1436
1612
  self.writeIdentifiable(child_element, needs)
1437
1613
  self.setChildElementOptionalPositiveInteger(child_element, "UDS-DTC-NUMBER", needs.getUdsDtcNumber())
1438
-
1614
+
1439
1615
  def setCryptoServiceNeeds(self, element: ET.Element, needs: CryptoServiceNeeds):
1440
1616
  child_element = ET.SubElement(element, "CRYPTO-SERVICE-NEEDS")
1441
1617
  self.logger.debug("write CryptoServiceNeeds %s" % needs.getShortName())
@@ -1469,7 +1645,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1469
1645
  elif isinstance(need, EcuStateMgrUserNeeds):
1470
1646
  self.setEcuStateMgrUserNeeds(child_element, need)
1471
1647
  else:
1472
- self.notImplemented("Unsupported service needs <%s>" % type(need))
1648
+ self.notImplemented("Unsupported service needs <%s>" % type(need))
1473
1649
 
1474
1650
  def writeSwcServiceDependency(self, element: ET.Element, dependency: SwcServiceDependency):
1475
1651
  child_element = ET.SubElement(element, "SWC-SERVICE-DEPENDENCY")
@@ -1486,37 +1662,57 @@ class ARXMLWriter(AbstractARXMLWriter):
1486
1662
  if isinstance(dependency, SwcServiceDependency):
1487
1663
  self.writeSwcServiceDependency(child_element, dependency)
1488
1664
  else:
1489
- self._raiseError("Unsupported ServiceDependency <%s>" % type(dependency))
1665
+ self.notImplemented("Unsupported ServiceDependency <%s>" % type(dependency))
1490
1666
 
1491
1667
  def setIncludedDataTypeSets(self, element: ET.Element, sets: List[IncludedDataTypeSet]):
1492
1668
  if len(sets) > 0:
1493
1669
  include_data_type_sets_tag = ET.SubElement(element, "INCLUDED-DATA-TYPE-SETS")
1494
1670
  for set in sets:
1495
1671
  child_element = ET.SubElement(include_data_type_sets_tag, "INCLUDED-DATA-TYPE-SET")
1496
- self.setARObjectAttributes(child_element, set)
1672
+ self.writeARObjectAttributes(child_element, set)
1497
1673
  type_refs = set.getDataTypeRefs()
1498
1674
  if len(type_refs) > 0:
1499
1675
  data_type_refs_tag = ET.SubElement(child_element, "DATA-TYPE-REFS")
1500
1676
  for type_ref in type_refs:
1501
1677
  self.setChildElementOptionalRefType(data_type_refs_tag, "DATA-TYPE-REF", type_ref)
1502
1678
 
1679
+ def writeIncludedModeDeclarationGroupSet(self, element: ET.Element, set: IncludedModeDeclarationGroupSet):
1680
+ if set is not None:
1681
+ child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SET")
1682
+ refs = set.getModeDeclarationGroupRefs()
1683
+ if len(refs) > 0:
1684
+ refs_tag = ET.SubElement(child_element, "MODE-DECLARATION-GROUP-REFS")
1685
+ for ref in refs:
1686
+ self.setChildElementOptionalRefType(refs_tag, "MODE-DECLARATION-GROUP-REF", ref)
1687
+ self.setChildElementOptionalLiteral(child_element, "PREFIX", set.getPrefix())
1688
+
1689
+ def writeSwcInternalBehaviorIncludedModeDeclarationGroupSets(self, element: ET.Element, behavior: SwcInternalBehavior):
1690
+ group_sets = behavior.getIncludedModeDeclarationGroupSets()
1691
+ if len(group_sets) > 0:
1692
+ child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS")
1693
+ for group_set in group_sets:
1694
+ if isinstance(group_set, IncludedModeDeclarationGroupSet):
1695
+ self.writeIncludedModeDeclarationGroupSet(child_element, group_set)
1696
+ else:
1697
+ self.notImplemented("Unsupported IncludedModeDeclarationGroupSet <%s>" % type(group_set))
1503
1698
 
1504
1699
  def writeSwcInternalBehavior(self, element: ET.Element, behavior: SwcInternalBehavior):
1505
1700
  self.logger.debug("writeSwInternalBehavior %s" % behavior.getShortName())
1506
-
1507
1701
  child_element = ET.SubElement(element, "SWC-INTERNAL-BEHAVIOR")
1508
1702
  self.writeInternalBehavior(child_element, behavior)
1703
+
1509
1704
  self.writeSwcInternalBehaviorArTypedPerInstanceMemories(child_element, behavior)
1510
- self.writeRTEEvents(child_element, behavior)
1511
- self.writeExplicitInterRunnableVariables(child_element, behavior)
1705
+ self.writeSwcInternalBehaviorEvents(child_element, behavior)
1706
+ self.writeSwcInternalBehaviorExplicitInterRunnableVariables(child_element, behavior)
1512
1707
  self.setChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART", behavior.getHandleTerminationAndRestart())
1513
1708
  self.setIncludedDataTypeSets(child_element, behavior.getIncludedDataTypeSets())
1514
- self.writePerInstanceMemories(child_element, behavior)
1515
- self.setParameterDataPrototypes(child_element, "PER-INSTANCE-PARAMETERS", behavior.getPerInstanceParameters())
1516
- self.writePortAPIOptions(child_element, behavior)
1517
- self.writeSwcInternalBehaviorRunnableEntities(child_element, behavior)
1709
+ self.writeSwcInternalBehaviorIncludedModeDeclarationGroupSets(child_element, behavior)
1710
+ self.writeSwcInternalBehaviorPerInstanceMemories(child_element, behavior)
1711
+ self.writeSwcInternalBehaviorParameterDataPrototypes(child_element, "PER-INSTANCE-PARAMETERS", behavior.getPerInstanceParameters())
1712
+ self.writeSwcInternalBehaviorPortAPIOptions(child_element, behavior)
1713
+ self.writeSwcInternalBehaviorRunnables(child_element, behavior)
1518
1714
  self.writeSwcInternalBehaviorServiceDependencies(child_element, behavior)
1519
- self.setParameterDataPrototypes(child_element, "SHARED-PARAMETERS", behavior.getSharedParameters())
1715
+ self.writeSwcInternalBehaviorParameterDataPrototypes(child_element, "SHARED-PARAMETERS", behavior.getSharedParameters())
1520
1716
  self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION", behavior.getSupportsMultipleInstantiation())
1521
1717
 
1522
1718
  def writeAtomicSwComponentTypeInternalBehaviors(self, element: ET.Element, behavior: InternalBehavior):
@@ -1525,11 +1721,11 @@ class ARXMLWriter(AbstractARXMLWriter):
1525
1721
  if isinstance(behavior, SwcInternalBehavior):
1526
1722
  self.writeSwcInternalBehavior(behaviors_tag, behavior)
1527
1723
  else:
1528
- self._raiseError("Unsupported Internal Behaviors <%s>" % type(behavior))
1724
+ self.notImplemented("Unsupported Internal Behaviors <%s>" % type(behavior))
1529
1725
 
1530
1726
  def writeAtomicSwComponentType(self, element: ET.Element, sw_component: AtomicSwComponentType):
1531
1727
  self.writeSwComponentType(element, sw_component)
1532
- self.writeAtomicSwComponentTypeInternalBehaviors(element, sw_component.internal_behavior)
1728
+ self.writeAtomicSwComponentTypeInternalBehaviors(element, sw_component.getInternalBehavior())
1533
1729
 
1534
1730
  def writeComplexDeviceDriverSwComponentType(self, element: ET.Element, sw_component: ComplexDeviceDriverSwComponentType):
1535
1731
  self.logger.debug("writeComplexDeviceDriverSwComponentType %s" % sw_component.getShortName())
@@ -1543,7 +1739,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1543
1739
  for artifact_desc in artifact_descriptors:
1544
1740
  artifact_desc_tag = ET.SubElement(artifact_descs_tag, "AUTOSAR-ENGINEERING-OBJECT")
1545
1741
  self.logger.debug("writeArtifactDescriptor %s", artifact_desc.short_label)
1546
- self.setARObjectAttributes(artifact_desc_tag, artifact_desc)
1742
+ self.writeARObjectAttributes(artifact_desc_tag, artifact_desc)
1547
1743
  self.setChildElementOptionalLiteral(artifact_desc_tag, "SHORT-LABEL", artifact_desc.short_label)
1548
1744
  self.setChildElementOptionalLiteral(artifact_desc_tag, "CATEGORY", artifact_desc.category)
1549
1745
 
@@ -1561,7 +1757,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1561
1757
  if isinstance(desc, Code):
1562
1758
  self.setCode(child_element, desc)
1563
1759
  else:
1564
- self._raiseError("Unsupported Code Descriptor <%s>" % type(desc))
1760
+ self.notImplemented("Unsupported Code Descriptor <%s>" % type(desc))
1565
1761
 
1566
1762
  def setMemorySectionOptions(self, element: ET.Element, options: List[ARLiteral]):
1567
1763
  if len(options) > 0:
@@ -1626,7 +1822,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1626
1822
  self.writeImplementation(child_element, impl)
1627
1823
  self.setChildElementOptionalRefType(child_element, "BEHAVIOR-REF", impl.getBehaviorRef())
1628
1824
 
1629
- def writeEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
1825
+ def writeEndToEndDescriptionDataIds(self, element: ET.Element, parent: EndToEndDescription):
1630
1826
  data_ids = parent.getDataIds()
1631
1827
  if len(data_ids) > 0:
1632
1828
  child_element = ET.SubElement(element, "DATA-IDS")
@@ -1636,24 +1832,28 @@ class ARXMLWriter(AbstractARXMLWriter):
1636
1832
  def setEndToEndDescription(self, element: ET.Element, key: str, desc: EndToEndDescription):
1637
1833
  if desc is not None:
1638
1834
  child_element = ET.SubElement(element, key)
1639
- self.setChildElementOptionalLiteral(child_element, "CATEGORY", desc.category)
1640
- self.writeEndToEndDescriptionDataId(child_element, desc)
1641
- self.setChildElementOptionalNumericalValue(child_element, "DATA-ID-MODE", desc.getDataIdMode())
1642
- self.setChildElementOptionalNumericalValue(child_element, "MAX-DELTA-COUNTER-INIT", desc.getMaxDeltaCounterInit())
1643
- self.setChildElementOptionalNumericalValue(child_element, "CRC-OFFSET", desc.getCrcOffset())
1644
- self.setChildElementOptionalNumericalValue(child_element, "COUNTER-OFFSET", desc.getCounterOffset())
1645
-
1646
- def setVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element, key: str, iref: VariableDataPrototypeInSystemInstanceRef):
1647
- if iref is not None:
1835
+ self.writeARObjectAttributes(child_element, desc)
1836
+ self.setChildElementOptionalLiteral(child_element, "CATEGORY", desc.getCategory())
1837
+ self.writeEndToEndDescriptionDataIds(child_element, desc)
1838
+ self.setChildElementOptionalPositiveInteger(child_element, "DATA-ID-MODE", desc.getDataIdMode())
1839
+ self.setChildElementOptionalPositiveInteger(child_element, "DATA-LENGTH", desc.getDataLength())
1840
+ self.setChildElementOptionalPositiveInteger(child_element, "MAX-DELTA-COUNTER-INIT", desc.getMaxDeltaCounterInit())
1841
+ self.setChildElementOptionalPositiveInteger(child_element, "CRC-OFFSET", desc.getCrcOffset())
1842
+ self.setChildElementOptionalPositiveInteger(child_element, "COUNTER-OFFSET", desc.getCounterOffset())
1843
+
1844
+ def setVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element, key: str, instance_ref: VariableDataPrototypeInSystemInstanceRef):
1845
+ if instance_ref is not None:
1648
1846
  child_element = ET.SubElement(element, key)
1649
- #self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPONENT-REF", iref.getContextComponentRefs()) # TODO
1650
- self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", iref.getContextCompositionRef())
1651
- self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.getContextPortRef())
1652
- self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", iref.getTargetDataPrototypeRef())
1847
+ for ref in instance_ref.getContextComponentRefs():
1848
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPONENT-REF", ref)
1849
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", instance_ref.getContextCompositionRef())
1850
+ self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", instance_ref.getContextPortRef())
1851
+ self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", instance_ref.getTargetDataPrototypeRef())
1653
1852
 
1654
- def setEndToEndProtectionVariablePrototype(self, element: ET.Element, key: str, prototype: EndToEndProtectionVariablePrototype):
1853
+ def writeEndToEndProtectionVariablePrototype(self, element: ET.Element, prototype: EndToEndProtectionVariablePrototype):
1655
1854
  if prototype is not None:
1656
- child_element = ET.SubElement(element, key)
1855
+ child_element = ET.SubElement(element, "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE")
1856
+ self.writeARObjectAttributes(child_element, prototype)
1657
1857
  irefs = prototype.getReceiverIrefs()
1658
1858
  if len(irefs) > 0:
1659
1859
  child_element = ET.SubElement(child_element, "RECEIVER-IREFS")
@@ -1661,22 +1861,40 @@ class ARXMLWriter(AbstractARXMLWriter):
1661
1861
  self.setVariableDataPrototypeInSystemInstanceRef(child_element, "RECEIVER-IREF", iref)
1662
1862
  self.setVariableDataPrototypeInSystemInstanceRef(child_element, "SENDER-IREF", prototype.senderIRef)
1663
1863
 
1664
- def writeEndToEndProtectionVariablePrototypes(self, element: ET.Element, parent: EndToEndProtection):
1665
- prototypes = parent.getEndToEndProtectionVariablePrototypes()
1864
+ def writeEndToEndProtectionEndToEndProtectionVariablePrototypes(self, element: ET.Element, protection: EndToEndProtection):
1865
+ prototypes = protection.getEndToEndProtectionVariablePrototypes()
1666
1866
  if len(prototypes) > 0:
1667
1867
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION-VARIABLE-PROTOTYPES")
1668
1868
  for prototype in prototypes:
1669
1869
  if isinstance(prototype, EndToEndProtectionVariablePrototype):
1670
- self.setEndToEndProtectionVariablePrototype(child_element, "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE", prototype)
1870
+ self.writeEndToEndProtectionVariablePrototype(child_element, prototype)
1671
1871
  else:
1672
- self._raiseError("Unsupported End To End Protection Variable Prototype <%s>" % type(prototype))
1872
+ self.notImplemented("Unsupported End To End Protection Variable Prototype <%s>" % type(prototype))
1873
+
1874
+ def writeEndToEndProtectionISignalIPdu(self, element: ET.Element, ipdu: EndToEndProtectionISignalIPdu):
1875
+ if ipdu is not None:
1876
+ child_element = ET.SubElement(element, "END-TO-END-PROTECTION-I-SIGNAL-I-PDU")
1877
+ self.setChildElementOptionalIntegerValue(child_element, "DATA-OFFSET", ipdu.getDataOffset())
1878
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", ipdu.getISignalGroupRef())
1879
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-I-PDU-REF", ipdu.getISignalIPduRef())
1880
+
1881
+ def writeEndToEndProtectionEndToEndProtectionISignalIPdus(self, element: ET.Element, protection: EndToEndProtection):
1882
+ ipdus = protection.getEndToEndProtectionISignalIPdus()
1883
+ if len(ipdus) > 0:
1884
+ child_element = ET.SubElement(element, "END-TO-END-PROTECTION-I-SIGNAL-I-PDUS")
1885
+ for ipdu in ipdus:
1886
+ if isinstance(ipdu, EndToEndProtectionISignalIPdu):
1887
+ self.writeEndToEndProtectionISignalIPdu(child_element, ipdu)
1888
+ else:
1889
+ self.notImplemented("Unsupported EndToEndProtectionISignalIPdu <%s>" % type(ipdu))
1673
1890
 
1674
- def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1891
+ def writeEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1675
1892
  if protection is not None:
1676
1893
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
1677
1894
  self.writeIdentifiable(child_element, protection)
1678
- self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
1679
- self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
1895
+ self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.getEndToEndProfile())
1896
+ self.writeEndToEndProtectionEndToEndProtectionISignalIPdus(child_element, protection)
1897
+ self.writeEndToEndProtectionEndToEndProtectionVariablePrototypes(child_element, protection)
1680
1898
 
1681
1899
  def writeEndToEndProtections(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1682
1900
  protections = protection_set.getEndToEndProtections()
@@ -1684,7 +1902,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1684
1902
  child_element = ET.SubElement(element, "END-TO-END-PROTECTIONS")
1685
1903
  for protection in protections:
1686
1904
  if isinstance(protection, EndToEndProtection):
1687
- self.setEndToEndProtection(child_element, protection)
1905
+ self.writeEndToEndProtection(child_element, protection)
1688
1906
 
1689
1907
  def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1690
1908
  self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.getShortName())
@@ -1692,15 +1910,14 @@ class ARXMLWriter(AbstractARXMLWriter):
1692
1910
  self.writeIdentifiable(child_element, protection_set)
1693
1911
  self.writeEndToEndProtections(child_element, protection_set)
1694
1912
 
1695
- def setAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
1696
- self.setDataPrototype(element, prototype)
1913
+ def writeAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
1914
+ self.writeDataPrototype(element, prototype)
1697
1915
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
1698
1916
 
1699
1917
  def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
1700
1918
  self.logger.debug("writeVariableDataPrototype %s" % prototype.getShortName())
1701
1919
  child_element = ET.SubElement(element, "VARIABLE-DATA-PROTOTYPE")
1702
- self.writeIdentifiable(child_element, prototype)
1703
- self.setAutosarDataPrototype(child_element, prototype)
1920
+ self.writeAutosarDataPrototype(child_element, prototype)
1704
1921
  self.setValueSpecification(child_element, "INIT-VALUE", prototype.getInitValue())
1705
1922
 
1706
1923
  def writeSenderReceiverInterfaceDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
@@ -1711,7 +1928,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1711
1928
  if isinstance(data_element, VariableDataPrototype):
1712
1929
  self.writeVariableDataPrototype(data_elements_tag, data_element)
1713
1930
  else:
1714
- self._raiseError("Unsupported Data Element <%s>" % type(data_element))
1931
+ self.notImplemented("Unsupported Data Element <%s>" % type(data_element))
1715
1932
 
1716
1933
  def writeSenderReceiverInterfaceInvalidationPolicies(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1717
1934
  policies = sr_interface.getInvalidationPolicies()
@@ -1730,25 +1947,38 @@ class ARXMLWriter(AbstractARXMLWriter):
1730
1947
  self.writeSenderReceiverInterfaceDataElements(child_element, sr_interface)
1731
1948
  self.writeSenderReceiverInterfaceInvalidationPolicies(child_element, sr_interface)
1732
1949
 
1733
- def writerBswModuleDescriptionImplementedEntry(self, element: ET.Element, desc: BswModuleDescription):
1734
- entries = desc.getImplementedEntries()
1735
- if len(entries) > 0:
1950
+ def writeBswModuleDescriptionImplementedEntryRefs(self, element: ET.Element, desc: BswModuleDescription):
1951
+ refs = desc.getImplementedEntryRefs()
1952
+ if len(refs) > 0:
1736
1953
  entries_tag = ET.SubElement(element, "PROVIDED-ENTRYS")
1737
- for entry in entries:
1954
+ for ref in refs:
1738
1955
  entry_tag = ET.SubElement(entries_tag, "BSW-MODULE-ENTRY-REF-CONDITIONAL")
1739
- self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
1956
+ self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", ref)
1740
1957
 
1741
- def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1742
- self.writeIdentifiable(element, prototype)
1743
- self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1958
+ def writeModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1959
+ child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP-PROTOTYPE")
1960
+ self.writeIdentifiable(child_element, prototype)
1961
+ self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.getTypeTRef())
1744
1962
 
1745
- def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
1963
+ def writeBswModuleDescriptionProvidedModeGroups(self, element: ET.Element, parent: BswModuleDescription):
1746
1964
  mode_groups = parent.getProvidedModeGroups()
1747
1965
  if len(mode_groups) > 0:
1748
- mode_groups_tag = ET.SubElement(element, "PROVIDED-MODE-GROUPS")
1966
+ child_element = ET.SubElement(element, "PROVIDED-MODE-GROUPS")
1749
1967
  for mode_group in mode_groups:
1750
- child_element = ET.SubElement(mode_groups_tag, "MODE-DECLARATION-GROUP-PROTOTYPE")
1751
- self.setModeDeclarationGroupPrototype(child_element, mode_group)
1968
+ if isinstance(mode_group, ModeDeclarationGroupPrototype):
1969
+ self.writeModeDeclarationGroupPrototype(child_element, mode_group)
1970
+ else:
1971
+ self.notImplemented("Unsupported ProvidedModeGroup <%s>" % type(mode_group))
1972
+
1973
+ def writeBswModuleDescriptionRequiredModeGroups(self, element: ET.Element, desc: BswModuleDescription):
1974
+ mode_groups = desc.getRequiredModeGroups()
1975
+ if len(mode_groups) > 0:
1976
+ child_element = ET.SubElement(element, "REQUIRED-MODE-GROUPS")
1977
+ for mode_group in mode_groups:
1978
+ if isinstance(mode_group, ModeDeclarationGroupPrototype):
1979
+ self.writeModeDeclarationGroupPrototype(child_element, mode_group)
1980
+ else:
1981
+ self.notImplemented("Unsupported ProvidedModeGroup <%s>" % type(mode_group))
1752
1982
 
1753
1983
  def writeCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
1754
1984
  refs = entity.getCanEnterExclusiveAreaRefs()
@@ -1757,13 +1987,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1757
1987
  for ref in refs:
1758
1988
  self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
1759
1989
 
1760
- def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1990
+ def writeExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1761
1991
  self.writeIdentifiable(element, entity)
1762
1992
  self.writeCanEnterExclusiveAreaRefs(element, entity)
1763
1993
  self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.getMinimumStartInterval())
1764
1994
  self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.getSwAddrMethodRef())
1765
1995
 
1766
- def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
1996
+ def writeBswModuleEntityManagedModeGroups(self, element: ET.Element, entity: BswModuleEntity):
1767
1997
  mode_group_refs = entity.getManagedModeGroupRefs()
1768
1998
  if len(mode_group_refs) > 0:
1769
1999
  mode_groups_tag = ET.SubElement(element, "MANAGED-MODE-GROUPS")
@@ -1771,64 +2001,142 @@ class ARXMLWriter(AbstractARXMLWriter):
1771
2001
  child_element = ET.SubElement(mode_groups_tag, "MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL")
1772
2002
  self.setChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF", mode_group_ref)
1773
2003
 
1774
- def setBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
1775
- self.setExecutableEntity(element, entity)
2004
+ def writeBswVariableAccess(self, element: ET.Element, access: BswVariableAccess):
2005
+ if access is not None:
2006
+ child_element = ET.SubElement(element, "BSW-VARIABLE-ACCESS")
2007
+ self.writeReferrable(child_element, access)
2008
+ self.setChildElementOptionalRefType(child_element, "ACCESSED-VARIABLE-REF", access.getAccessedVariableRef())
2009
+
2010
+ def writeBswModuleEntityDataSendPoints(self, element: ET.Element, entity: BswModuleEntity):
2011
+ points = entity.getDataSendPoints()
2012
+ if len(points) > 0:
2013
+ child_element = ET.SubElement(element, "DATA-SEND-POINTS")
2014
+ for point in points:
2015
+ if isinstance(point, BswVariableAccess):
2016
+ self.writeBswVariableAccess(child_element, point)
2017
+ else:
2018
+ self.notImplemented("Unsupported Data Send Point <%s>" % type(point))
2019
+
2020
+ def writeBswModuleEntityDataReceivePoints(self, element: ET.Element, entity: BswModuleEntity):
2021
+ points = entity.getDataReceivePoints()
2022
+ if len(points) > 0:
2023
+ child_element = ET.SubElement(element, "DATA-RECEIVE-POINTS")
2024
+ for point in points:
2025
+ if isinstance(point, BswVariableAccess):
2026
+ self.writeBswVariableAccess(child_element, point)
2027
+ else:
2028
+ self.notImplemented("Unsupported Data Receive Point <%s>" % type(point))
2029
+
2030
+ def writeBswModuleEntityIssuedTriggerRefs(self, element: ET.Element, entity: BswModuleEntity):
2031
+ refs = entity.getIssuedTriggerRefs()
2032
+ if len(refs) > 0:
2033
+ child_element = ET.SubElement(element, "ISSUED-TRIGGERS")
2034
+ for ref in refs:
2035
+ cond_tag = ET.SubElement(child_element, "TRIGGER-REF-CONDITIONAL")
2036
+ self.setChildElementOptionalRefType(cond_tag, "TRIGGER-REF", ref)
2037
+
2038
+ def writeBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
2039
+ self.writeExecutableEntity(element, entity)
2040
+ self.writeBswModuleEntityDataSendPoints(element, entity)
2041
+ self.writeBswModuleEntityDataReceivePoints(element, entity)
1776
2042
  self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implementedEntryRef)
1777
- self.writeBswModuleEntityManagedModeGroup(element, entity)
2043
+ self.writeBswModuleEntityManagedModeGroups(element, entity)
2044
+ self.writeBswModuleEntityIssuedTriggerRefs(element, entity)
1778
2045
 
1779
- def setBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
1780
- self.logger.debug("setBswCalledEntity %s" % entity.getShortName())
2046
+ def writeBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
2047
+ self.logger.debug("Write BswCalledEntity <%s>" % entity.getShortName())
1781
2048
  child_element = ET.SubElement(element, "BSW-CALLED-ENTITY")
1782
- self.setBswModuleEntity(child_element, entity)
2049
+ self.writeBswModuleEntity(child_element, entity)
1783
2050
 
1784
- def setBswSchedulableEntity(self, element: ET.Element, entity: BswSchedulableEntity):
1785
- self.logger.debug("set BswSchedulableEntity %s" % entity.getShortName())
2051
+ def writeBswSchedulableEntity(self, element: ET.Element, entity: BswSchedulableEntity):
2052
+ self.logger.debug("Write BswSchedulableEntity <%s>" % entity.getShortName())
1786
2053
  child_element = ET.SubElement(element, "BSW-SCHEDULABLE-ENTITY")
1787
- self.setBswModuleEntity(child_element, entity)
2054
+ self.writeBswModuleEntity(child_element, entity)
1788
2055
 
1789
2056
  def setBswInterruptEntity(self, element: ET.Element, entity: BswInterruptEntity):
1790
- self.logger.debug("read BswInterruptEntity %s" % entity.getShortName())
2057
+ self.logger.debug("Write BswInterruptEntity <%s>" % entity.getShortName())
1791
2058
  child_element = ET.SubElement(element, "BSW-INTERRUPT-ENTITY")
1792
- self.setBswModuleEntity(child_element, entity)
2059
+ self.writeBswModuleEntity(child_element, entity)
1793
2060
  self.setChildElementOptionalLiteral(child_element, "INTERRUPT-CATEGORY", entity.getInterruptCategory())
1794
2061
  self.setChildElementOptionalLiteral(child_element, "INTERRUPT-SOURCE", entity.getInterruptSource())
1795
2062
 
1796
2063
  def writeBswInternalBehaviorBswModuleEntities(self, element: ET.Element, parent: BswInternalBehavior):
1797
- entities = parent.getBswModuleEntities()
2064
+ entities = parent.getBswModuleEntities()
1798
2065
  if len(entities) > 0:
1799
2066
  child_element = ET.SubElement(element, "ENTITYS")
1800
2067
  for entity in entities:
1801
2068
  if isinstance(entity, BswCalledEntity):
1802
- self.setBswCalledEntity(child_element, entity)
2069
+ self.writeBswCalledEntity(child_element, entity)
1803
2070
  elif isinstance(entity, BswSchedulableEntity):
1804
- self.setBswSchedulableEntity(child_element, entity)
2071
+ self.writeBswSchedulableEntity(child_element, entity)
1805
2072
  elif isinstance(entity, BswInterruptEntity):
1806
2073
  self.setBswInterruptEntity(child_element, entity)
1807
2074
  else:
1808
2075
  self.notImplemented("Unsupported BswModuleEntity <%s>" % type(entity))
1809
2076
 
1810
- def setBswEvent(self, element: ET.Element, event: BswEvent):
2077
+ def writeBswEvent(self, element: ET.Element, event: BswEvent):
1811
2078
  self.writeIdentifiable(element, event)
1812
2079
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1813
2080
 
1814
- def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
1815
- self.setBswEvent(element, event)
2081
+ def writeBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
2082
+ self.writeBswEvent(element, event)
1816
2083
 
1817
- def setBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
1818
- self.logger.debug("setBswTimingEvent %s" % event.getShortName())
2084
+ def writeBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
2085
+ self.logger.debug("Write BswTimingEvent <%s>" % event.getShortName())
1819
2086
  child_element = ET.SubElement(element, "BSW-TIMING-EVENT")
1820
- self.setBswScheduleEvent(child_element, event)
2087
+ self.writeBswScheduleEvent(child_element, event)
1821
2088
  self.setChildElementOptionalTimeValue(child_element, "PERIOD", event.getPeriod())
1822
2089
 
2090
+ def writeBswBackgroundEvent(self, element: ET.Element, event: BswBackgroundEvent):
2091
+ self.logger.debug("Write BswTimingEvent <%s>" % event.getShortName())
2092
+ child_element = ET.SubElement(element, "BSW-BACKGROUND-EVENT")
2093
+ self.writeBswScheduleEvent(child_element, event)
2094
+
2095
+ def writeBswInternalTriggerOccurredEvent(self, element: ET.Element, event: BswInternalTriggerOccurredEvent):
2096
+ self.logger.debug("Write BswInternalTriggerOccurredEvent <%s>" % event.getShortName())
2097
+ child_element = ET.SubElement(element, "BSW-INTERNAL-TRIGGER-OCCURRED-EVENT")
2098
+ self.writeBswScheduleEvent(child_element, event)
2099
+ self.setChildElementOptionalRefType(child_element, "EVENT-SOURCE-REF", event.getEventSourceRef())
2100
+
2101
+ def writeBswExternalTriggerOccurredEvent(self, element: ET.Element, event: BswExternalTriggerOccurredEvent):
2102
+ self.logger.debug("Write BswExternalTriggerOccurredEvent <%s>" % event.getShortName())
2103
+ child_element = ET.SubElement(element, "BSW-EXTERNAL-TRIGGER-OCCURRED-EVENT")
2104
+ self.writeBswScheduleEvent(child_element, event)
2105
+ self.setChildElementOptionalRefType(child_element, "TRIGGER-REF", event.getTriggerRef())
2106
+
2107
+ def writeBswDataReceivedEvent(self, element: ET.Element, event: BswDataReceivedEvent):
2108
+ self.logger.debug("Write BswDataReceivedEvent <%s>" % event.getShortName())
2109
+ # Read the Inherit BswScheduleEvent
2110
+ child_element = ET.SubElement(element, "BSW-DATA-RECEIVED-EVENT")
2111
+ self.writeBswScheduleEvent(child_element, event)
2112
+ self.setChildElementOptionalRefType(child_element, "DATA-REF", event.getDataRef())
2113
+
2114
+ def writeBswOperationInvokedEvent(self, element: ET.Element, event: BswOperationInvokedEvent):
2115
+ self.logger.debug("Write BswOperationInvokedEvent <%s>" % event.getShortName())
2116
+ # Read the Inherit BswScheduleEvent
2117
+ child_element = ET.SubElement(element, "BSW-OPERATION-INVOKED-EVENT")
2118
+ self.writeBswEvent(child_element, event)
2119
+ self.setChildElementOptionalRefType(child_element, "ENTRY-REF", event.getEntryRef())
2120
+
1823
2121
  def writeBswInternalBehaviorBswEvents(self, element: ET.Element, parent: BswInternalBehavior):
1824
2122
  events = parent.getBswEvents()
1825
2123
  if len(events) > 0:
1826
2124
  child_element = ET.SubElement(element, "EVENTS")
1827
2125
  for event in events:
1828
2126
  if isinstance(event, BswTimingEvent):
1829
- self.setBswTimingEvent(child_element, event)
2127
+ self.writeBswTimingEvent(child_element, event)
2128
+ elif isinstance(event, BswBackgroundEvent):
2129
+ self.writeBswBackgroundEvent(child_element, event)
2130
+ elif isinstance(event, BswInternalTriggerOccurredEvent):
2131
+ self.writeBswInternalTriggerOccurredEvent(child_element, event)
2132
+ elif isinstance(event, BswExternalTriggerOccurredEvent):
2133
+ self.writeBswExternalTriggerOccurredEvent(child_element, event)
2134
+ elif isinstance(event, BswDataReceivedEvent):
2135
+ self.writeBswDataReceivedEvent(child_element, event)
2136
+ elif isinstance(event, BswOperationInvokedEvent):
2137
+ self.writeBswOperationInvokedEvent(child_element, event)
1830
2138
  else:
1831
- self._raiseError("Unsupported BswModuleEntity <%s>" % type(event))
2139
+ self.notImplemented("Unsupported BswModuleEntity <%s>" % type(event))
1832
2140
 
1833
2141
  def setBswModeSenderPolicy(self, element: ET.Element, policy: BswModeSenderPolicy):
1834
2142
  child_element = ET.SubElement(element, "BSW-MODE-SENDER-POLICY")
@@ -1843,52 +2151,114 @@ class ARXMLWriter(AbstractARXMLWriter):
1843
2151
  if isinstance(policy, BswModeSenderPolicy):
1844
2152
  self.setBswModeSenderPolicy(child_element, policy)
1845
2153
  else:
1846
- self._raiseError("Unsupported ModeSenderPolicy type <%s>." % type(policy))
1847
-
1848
- def setIncludedModeDeclarationGroupSet(self, element: ET.Element, group_set: IncludedModeDeclarationGroupSet):
1849
- child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SET")
2154
+ self.notImplemented("Unsupported ModeSenderPolicy type <%s>." % type(policy))
1850
2155
 
1851
2156
  def writeBswInternalBehaviorIncludedModeDeclarationGroupSets(self, element: ET.Element, behavior: BswInternalBehavior):
1852
2157
  group_sets = behavior.getIncludedModeDeclarationGroupSets()
1853
2158
  if len(group_sets) > 0:
1854
2159
  child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS")
1855
2160
  for group_set in group_sets:
1856
- self.setIncludedModeDeclarationGroupSet(child_element, group_set)
2161
+ self.writeIncludedModeDeclarationGroupSet(child_element, group_set)
2162
+
2163
+ def writeBswApiOptions(self, element: ET.Element, options: BswApiOptions):
2164
+ self.writeARObjectAttributes(element, options)
2165
+ self.setChildElementOptionalBooleanValue(element, "ENABLE-TAKE-ADDRESS", options.getEnableTakeAddress())
2166
+
2167
+ def writeBswDataReceptionPolicy(self, element: ET.Element, policy: BswDataReceptionPolicy):
2168
+ self.writeBswApiOptions(element, policy)
2169
+ self.setChildElementOptionalRefType(element, "RECEIVED-DATA-REF", policy.getReceivedDataRef())
2170
+
2171
+ def writeBswQueuedDataReceptionPolicy(self, element: ET.Element, policy: BswQueuedDataReceptionPolicy):
2172
+ child_element = ET.SubElement(element, "BSW-QUEUED-DATA-RECEPTION-POLICY")
2173
+ self.writeBswDataReceptionPolicy(child_element, policy)
2174
+ self.setChildElementOptionalPositiveInteger(child_element, "QUEUE-LENGTH", policy.getQueueLength())
1857
2175
 
1858
- def setBswInternalBehavior(self, element: ET.Element, behavior: BswInternalBehavior):
2176
+ def writeBswInternalBehaviorReceptionPolicies(self, element: ET.Element, behavior: BswInternalBehavior):
2177
+ policies = behavior.getReceptionPolicies()
2178
+ if len(policies) > 0:
2179
+ child_element = ET.SubElement(element, "RECEPTION-POLICYS")
2180
+ for policy in policies:
2181
+ if isinstance(policy, BswQueuedDataReceptionPolicy):
2182
+ self.writeBswQueuedDataReceptionPolicy(child_element, policy)
2183
+ else:
2184
+ self.notImplemented("Unsupported Reception Policies <%s>" % type(policy))
2185
+
2186
+ def writeBswInternalBehavior(self, element: ET.Element, behavior: BswInternalBehavior):
1859
2187
  child_element = ET.SubElement(element, "BSW-INTERNAL-BEHAVIOR")
1860
2188
  self.writeInternalBehavior(child_element, behavior)
1861
2189
  self.writeBswInternalBehaviorBswModuleEntities(child_element, behavior)
1862
2190
  self.writeBswInternalBehaviorBswEvents(child_element, behavior)
1863
2191
  self.writeBswInternalBehaviorModeSenderPolicy(child_element, behavior)
1864
2192
  self.writeBswInternalBehaviorIncludedModeDeclarationGroupSets(child_element, behavior)
2193
+ self.writeBswInternalBehaviorReceptionPolicies(child_element, behavior)
1865
2194
 
1866
- def writeBswModuleDescriptionInternalBehaviors(self, element: ET.Element, behaviors: List[InternalBehavior]):
2195
+ def writeBswModuleDescriptionInternalBehaviors(self, element: ET.Element, desc: BswModuleDescription):
2196
+ behaviors = desc.getInternalBehaviors()
1867
2197
  if len(behaviors) > 0:
1868
2198
  child_element = ET.SubElement(element, "INTERNAL-BEHAVIORS")
1869
2199
  for behavior in behaviors:
1870
2200
  if isinstance(behavior, BswInternalBehavior):
1871
- self.setBswInternalBehavior(child_element, behavior)
2201
+ self.writeBswInternalBehavior(child_element, behavior)
1872
2202
  else:
1873
- self._raiseError("Unsupported BswInternalBehavior <%s>" % type(behavior))
1874
-
2203
+ self.notImplemented("Unsupported Internal Behavior <%s>" % type(behavior))
2204
+
2205
+ def writeTrigger(self, element: ET.Element, trigger: Trigger):
2206
+ child_element = ET.SubElement(element, "TRIGGER")
2207
+ self.writeIdentifiable(child_element, trigger)
2208
+
2209
+ def writeBswModuleDescriptionReleasedTriggers(self, element: ET.Element, desc: BswModuleDescription):
2210
+ triggers = desc.getReleasedTriggers()
2211
+ if len(triggers) > 0:
2212
+ child_element = ET.SubElement(element, "RELEASED-TRIGGERS")
2213
+ for trigger in triggers:
2214
+ if isinstance(trigger, Trigger):
2215
+ self.writeTrigger(child_element, trigger)
2216
+ else:
2217
+ self.notImplemented("Unsupported Released Trigger <%s>" % type(trigger))
2218
+
2219
+ def writeBswModuleDescriptionRequiredTriggers(self, element: ET.Element, desc: BswModuleDescription):
2220
+ triggers = desc.getRequiredTriggers()
2221
+ if len(triggers) > 0:
2222
+ child_element = ET.SubElement(element, "REQUIRED-TRIGGERS")
2223
+ for trigger in triggers:
2224
+ if isinstance(trigger, Trigger):
2225
+ self.writeTrigger(child_element, trigger)
2226
+ else:
2227
+ self.notImplemented("Unsupported Required Trigger <%s>" % type(trigger))
2228
+
2229
+ def writeBswModuleDescriptionProvidedDatas(self, element: ET.Element, desc: BswModuleDescription):
2230
+ datas = desc.getProvidedDatas()
2231
+ if len(datas) > 0:
2232
+ child_element = ET.SubElement(element, "PROVIDED-DATAS")
2233
+ for data in datas:
2234
+ if isinstance(data, VariableDataPrototype):
2235
+ self.writeVariableDataPrototype(child_element, data)
2236
+ else:
2237
+ self.notImplemented("Unsupported Provided Data <%s>" % type(data))
2238
+
2239
+ def writeBswModuleDescriptionRequiredDatas(self, element: ET.Element, desc: BswModuleDescription):
2240
+ datas = desc.getRequiredDatas()
2241
+ if len(datas) > 0:
2242
+ child_element = ET.SubElement(element, "REQUIRED-DATAS")
2243
+ for data in datas:
2244
+ if isinstance(data, VariableDataPrototype):
2245
+ self.writeVariableDataPrototype(child_element, data)
2246
+ else:
2247
+ self.notImplemented("Unsupported Required Data <%s>" % type(data))
2248
+
1875
2249
  def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
1876
2250
  self.logger.debug("writeBswModuleDescription %s" % desc.getShortName())
1877
2251
  child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
1878
2252
  self.writeIdentifiable(child_element, desc)
1879
2253
  self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.getModuleId())
1880
- self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
1881
- self.writeProvidedModeGroup(child_element, desc)
1882
- #self.readRequiredModeGroup(element, bsw_module_description)
1883
- self.writeBswModuleDescriptionInternalBehaviors(child_element, desc.getBswInternalBehaviors())
1884
-
1885
- def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
1886
- mode_group_refs = entity.getManagedModeGroupRefs()
1887
- if len(mode_group_refs) > 0:
1888
- mode_groups_tag = ET.SubElement(element, "MANAGED-MODE-GROUPS")
1889
- for mode_group_ref in mode_group_refs:
1890
- child_element = ET.SubElement(mode_groups_tag, "MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL")
1891
- self.setChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF", mode_group_ref)
2254
+ self.writeBswModuleDescriptionImplementedEntryRefs(child_element, desc)
2255
+ self.writeBswModuleDescriptionProvidedModeGroups(child_element, desc)
2256
+ self.writeBswModuleDescriptionRequiredModeGroups(child_element, desc)
2257
+ self.writeBswModuleDescriptionReleasedTriggers(child_element, desc)
2258
+ self.writeBswModuleDescriptionRequiredTriggers(child_element, desc)
2259
+ self.writeBswModuleDescriptionProvidedDatas(child_element, desc)
2260
+ self.writeBswModuleDescriptionRequiredDatas(child_element, desc)
2261
+ self.writeBswModuleDescriptionInternalBehaviors(child_element, desc)
1892
2262
 
1893
2263
  def setSwServiceArg(self, element: ET.Element, arg: SwServiceArg):
1894
2264
  self.logger.debug("Set SwServiceArg <%s>" % arg.getShortName())
@@ -1930,7 +2300,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1930
2300
  if isinstance(mapping, SwcBswRunnableMapping):
1931
2301
  self.setSwcBswRunnableMapping(child_element, mapping)
1932
2302
  else:
1933
- self._raiseError("Unsupported Runnable Mapping <%s>" % type(mapping))
2303
+ self.notImplemented("Unsupported Runnable Mapping <%s>" % type(mapping))
1934
2304
 
1935
2305
  def writeSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1936
2306
  self.logger.debug("writeBswModuleDescription %s" % mapping.getShortName())
@@ -1941,7 +2311,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1941
2311
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.getSwcBehaviorRef())
1942
2312
 
1943
2313
  def writeEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
1944
- self.setARObjectAttributes(element, engineering_obj)
2314
+ self.writeARObjectAttributes(element, engineering_obj)
1945
2315
  self.setChildElementOptionalLiteral(element, "SHORT-LABEL", engineering_obj.short_label)
1946
2316
  self.setChildElementOptionalLiteral(element, "CATEGORY", engineering_obj.category)
1947
2317
 
@@ -1958,13 +2328,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1958
2328
  if isinstance(artifact_desc, AutosarEngineeringObject):
1959
2329
  self.setAutosarEngineeringObject(child_element, artifact_desc)
1960
2330
  else:
1961
- self._raiseError("Unsupported Artifact descriptor <%s>" % type(artifact_desc))
2331
+ self.notImplemented("Unsupported Artifact descriptor <%s>" % type(artifact_desc))
1962
2332
 
1963
2333
  def writeBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
1964
2334
  refs = parent.getVendorSpecificModuleDefRefs()
1965
2335
  if len(refs) > 0:
1966
2336
  child_element = ET.SubElement(element, "VENDOR-SPECIFIC-MODULE-DEF-REFS")
1967
- if child_element != None:
2337
+ if child_element is not None:
1968
2338
  for ref in refs:
1969
2339
  self.setChildElementOptionalRefType(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF", ref)
1970
2340
 
@@ -1974,6 +2344,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1974
2344
  self.writeImplementation(child_element, impl)
1975
2345
  self.setChildElementOptionalLiteral(child_element, "AR-RELEASE-VERSION", impl.getArReleaseVersion())
1976
2346
  self.setChildElementOptionalRefType(child_element, "BEHAVIOR-REF", impl.getBehaviorRef())
2347
+ self.setChildElementOptionalLiteral(child_element, "VENDOR-API-INFIX", impl.getVendorApiInfix())
1977
2348
  self.writeBswImplementationVendorSpecificModuleDefRefs(child_element, impl)
1978
2349
 
1979
2350
  def writeImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
@@ -2010,33 +2381,37 @@ class ARXMLWriter(AbstractARXMLWriter):
2010
2381
  self.writeImplementationDataTypeSymbolProps(child_element, data_type)
2011
2382
  self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
2012
2383
 
2013
- def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
2014
- arguments = parent.getArgumentDataPrototypes()
2384
+ def writeArgumentDataPrototype(self, element: ET.Element, prototype: ArgumentDataPrototype):
2385
+ child_element = ET.SubElement(element, "ARGUMENT-DATA-PROTOTYPE")
2386
+ self.writeAutosarDataPrototype(child_element, prototype)
2387
+ self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.getDirection())
2388
+ self.setChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY", prototype.getServerArgumentImplPolicy())
2389
+
2390
+ def writeClientServerOperationArguments(self, element: ET.Element, parent: ClientServerOperation):
2391
+ arguments = parent.getArguments()
2015
2392
  if len(arguments) > 0:
2016
- arguments_tag = ET.SubElement(element, "ARGUMENTS")
2017
- for prototype in arguments:
2018
- child_element = ET.SubElement(arguments_tag, "ARGUMENT-DATA-PROTOTYPE")
2019
- self.writeIdentifiable(child_element, prototype)
2020
- self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
2021
- self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.typeTRef)
2022
- self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
2023
- self.setChildElementOptionalLiteral(child_element, "SERVER-ARGUMENT-IMPL-POLICY", prototype.serverArgumentImplPolicy)
2024
-
2025
- def writePossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
2026
- error_refs = parent.getPossbileErrorRefs()
2393
+ child_element = ET.SubElement(element, "ARGUMENTS")
2394
+ for argument in arguments:
2395
+ if isinstance(argument, ArgumentDataPrototype):
2396
+ self.writeArgumentDataPrototype(child_element, argument)
2397
+ else:
2398
+ self.notImplemented("Unsupported Argument <%s>" % type(argument))
2399
+
2400
+ def writeClientServerOperationPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
2401
+ error_refs = parent.getPossibleErrorRefs()
2027
2402
  if len(error_refs) > 0:
2028
- error_refs_tag = ET.SubElement(element, "POSSIBLE-ERROR-REFS")
2403
+ child_element = ET.SubElement(element, "POSSIBLE-ERROR-REFS")
2029
2404
  for error_ref in error_refs:
2030
- self.setChildElementOptionalRefType(error_refs_tag, "POSSIBLE-ERROR-REF", error_ref)
2405
+ self.setChildElementOptionalRefType(child_element, "POSSIBLE-ERROR-REF", error_ref)
2031
2406
 
2032
2407
  def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
2033
2408
  self.logger.debug("writeClientServerOperation %s" % operation.getShortName())
2034
2409
  child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
2035
2410
  self.writeIdentifiable(child_element, operation)
2036
- self.writeArgumentDataPrototypes(child_element, operation)
2037
- self.writePossibleErrorRefs(child_element, operation)
2411
+ self.writeClientServerOperationArguments(child_element, operation)
2412
+ self.writeClientServerOperationPossibleErrorRefs(child_element, operation)
2038
2413
 
2039
- def writeOperations(self, element: ET.Element, parent: ClientServerInterface):
2414
+ def writeClientServerInterfaceOperations(self, element: ET.Element, parent: ClientServerInterface):
2040
2415
  operations = parent.getOperations()
2041
2416
  if len(operations) > 0:
2042
2417
  operations_tag = ET.SubElement(element, "OPERATIONS")
@@ -2044,7 +2419,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2044
2419
  if isinstance(operation, ClientServerOperation):
2045
2420
  self.writeClientServerOperation(operations_tag, operation)
2046
2421
  else:
2047
- self._raiseError("Unsupported Operation <%s>" % type(operation))
2422
+ self.notImplemented("Unsupported Operation <%s>" % type(operation))
2048
2423
 
2049
2424
  def writeApplicationError(self, element: ET.Element, error: ApplicationError):
2050
2425
  self.logger.debug("writeApplicationError %s" % error.getShortName())
@@ -2060,24 +2435,27 @@ class ARXMLWriter(AbstractARXMLWriter):
2060
2435
  if isinstance(error, ApplicationError):
2061
2436
  self.writeApplicationError(errors_tag, error)
2062
2437
  else:
2063
- self._raiseError("Unsupported PossibleError %s" % type(error))
2438
+ self.notImplemented("Unsupported PossibleError %s" % type(error))
2064
2439
 
2065
- def setPortInterface(self, element: ET.Element, port_interface: PortInterface):
2440
+ def writePortInterface(self, element: ET.Element, port_interface: PortInterface):
2066
2441
  self.writeIdentifiable(element, port_interface)
2067
2442
  self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.isService)
2068
2443
  self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
2069
2444
 
2070
- def writeParameterInterface(self, element: ET.Element, param_interface: ParameterInterface):
2071
- self.logger.debug("Write ParameterInterface %s" % param_interface.getShortName())
2445
+ def writeDataInterface(self, element: ET.Element, interface: DataInterface):
2446
+ self.writePortInterface(element, interface)
2447
+
2448
+ def writeParameterInterface(self, element: ET.Element, interface: ParameterInterface):
2449
+ self.logger.debug("Write ParameterInterface %s" % interface.getShortName())
2072
2450
  child_element = ET.SubElement(element, "PARAMETER-INTERFACE")
2073
- self.setPortInterface(child_element, param_interface)
2074
- self.setParameterDataPrototypes(child_element, "PARAMETERS", param_interface.getParameters())
2451
+ self.writeDataInterface(child_element, interface)
2452
+ self.writeSwcInternalBehaviorParameterDataPrototypes(child_element, "PARAMETERS", interface.getParameters())
2075
2453
 
2076
2454
  def writeClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
2077
2455
  self.logger.debug("writeClientServerInterface %s" % cs_interface.getShortName())
2078
2456
  child_element = ET.SubElement(element, "CLIENT-SERVER-INTERFACE")
2079
- self.setPortInterface(child_element, cs_interface)
2080
- self.writeOperations(child_element, cs_interface)
2457
+ self.writePortInterface(child_element, cs_interface)
2458
+ self.writeClientServerInterfaceOperations(child_element, cs_interface)
2081
2459
  self.writePossibleErrors(child_element, cs_interface)
2082
2460
 
2083
2461
  def writeApplicationSwComponentType(self, element: ET.Element, sw_component: ApplicationSwComponentType):
@@ -2090,17 +2468,19 @@ class ARXMLWriter(AbstractARXMLWriter):
2090
2468
  child_element = ET.SubElement(element, "ECU-ABSTRACTION-SW-COMPONENT-TYPE")
2091
2469
  self.writeAtomicSwComponentType(child_element, sw_component)
2092
2470
 
2093
- def setApplicationArrayElement(self, element: ET.Element, prototype: ApplicationArrayElement):
2094
- if prototype is not None:
2471
+ def setApplicationArrayElement(self, element: ET.Element, array_element: ApplicationArrayElement):
2472
+ if array_element is not None:
2095
2473
  child_element = ET.SubElement(element, "ELEMENT")
2096
- self.setApplicationCompositeElementDataPrototype(child_element, prototype)
2097
- self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", prototype.arraySizeSemantics)
2098
- self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", prototype.maxNumberOfElements)
2474
+ self.writeApplicationCompositeElementDataPrototype(child_element, array_element)
2475
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING", array_element.getArraySizeHandling())
2476
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", array_element.getArraySizeSemantics())
2477
+ self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", array_element.getMaxNumberOfElements())
2099
2478
 
2100
2479
  def writeApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
2101
2480
  self.logger.debug("writeApplicationArrayDataType %s" % data_type.getShortName())
2102
2481
  child_element = ET.SubElement(element, "APPLICATION-ARRAY-DATA-TYPE")
2103
2482
  self.setApplicationCompositeDataType(child_element, data_type)
2483
+ self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
2104
2484
  self.setApplicationArrayElement(child_element, data_type.element)
2105
2485
 
2106
2486
  def setSwRecordLayoutV(self, element: ET.Element, key: str, layout_v: SwRecordLayoutV):
@@ -2112,6 +2492,11 @@ class ARXMLWriter(AbstractARXMLWriter):
2112
2492
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.getSwRecordLayoutVProp())
2113
2493
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.getSwRecordLayoutVIndex())
2114
2494
 
2495
+ def writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(self, element: ET.Element, group: SwRecordLayoutGroup):
2496
+ content = group.getSwRecordLayoutGroupContentType()
2497
+ self.setSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP", content.getSwRecordLayoutGroup())
2498
+ self.setSwRecordLayoutV(element, "SW-RECORD-LAYOUT-V", content.getSwRecordLayoutV())
2499
+
2115
2500
  def setSwRecordLayoutGroup(self, element: ET.Element, key: str, group: SwRecordLayoutGroup):
2116
2501
  if group is not None:
2117
2502
  child_element = ET.SubElement(element, key)
@@ -2122,9 +2507,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2122
2507
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.getSwRecordLayoutGroupFrom())
2123
2508
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.getSwRecordLayoutGroupTo())
2124
2509
  self.setChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP", group.getSwRecordLayoutGroupStep())
2125
- #self.setSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V", group.swRecordLayoutGroupContentType.swRecordLayoutV)
2126
- #self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", group.swRecordLayoutGroupContentType.swRecordLayoutGroup)
2127
- return group
2510
+ self.writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(child_element, group)
2128
2511
 
2129
2512
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
2130
2513
  self.logger.debug("writeSwRecordLayout %s" % layout.getShortName())
@@ -2147,7 +2530,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2147
2530
 
2148
2531
  def writeTriggerInterface(self, element: ET.Element, trigger_if: TriggerInterface):
2149
2532
  self.logger.debug("writeTriggerInterface %s" % trigger_if.getShortName())
2150
- child_element = ET.SubElement(element, "TRIGGER-INTERFACE")
2533
+ # child_element = ET.SubElement(element, "TRIGGER-INTERFACE")
2534
+ # self.writePortInterface()
2151
2535
 
2152
2536
  def writeServiceSwComponentType(self, element: ET.Element, sw_component: ServiceSwComponentType):
2153
2537
  self.logger.debug("writeServiceSwComponentType %s" % sw_component.getShortName())
@@ -2160,7 +2544,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2160
2544
  maps_tag = ET.SubElement(element, "DATA-TYPE-MAPS")
2161
2545
  for map in maps:
2162
2546
  child_element = ET.SubElement(maps_tag, "DATA-TYPE-MAP")
2163
- self.setARObjectAttributes(child_element, map)
2547
+ self.writeARObjectAttributes(child_element, map)
2164
2548
  self.setChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF", map.getApplicationDataTypeRef())
2165
2549
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
2166
2550
 
@@ -2170,7 +2554,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2170
2554
  maps_tag = ET.SubElement(element, "MODE-REQUEST-TYPE-MAPS")
2171
2555
  for map in maps:
2172
2556
  child_element = ET.SubElement(maps_tag, "MODE-REQUEST-TYPE-MAP")
2173
- self.setARObjectAttributes(child_element, map)
2557
+ self.writeARObjectAttributes(child_element, map)
2174
2558
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
2175
2559
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", map.getModeGroupRef())
2176
2560
 
@@ -2212,7 +2596,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2212
2596
  def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
2213
2597
  self.logger.debug("writeModeSwitchInterface %s" % mode_interface.getShortName())
2214
2598
  child_element = ET.SubElement(element, "MODE-SWITCH-INTERFACE")
2215
- self.setPortInterface(child_element, mode_interface)
2599
+ self.writePortInterface(child_element, mode_interface)
2216
2600
  self.writeModeSwitchInterfaceModeGroup(child_element, mode_interface)
2217
2601
 
2218
2602
  def setEOCExecutableEntityRefSuccessorRefs(self, element: ET.Element, successor_refs: List[RefType]):
@@ -2234,7 +2618,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2234
2618
  if isinstance(order_element, EOCExecutableEntityRef):
2235
2619
  self.writeEOCExecutableEntityRef(child_element, order_element)
2236
2620
  else:
2237
- self._raiseError("Unsupported order element <%s>" % type(order_element))
2621
+ self.notImplemented("Unsupported order element <%s>" % type(order_element))
2238
2622
 
2239
2623
  def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
2240
2624
  self.logger.debug("writeExecutionOrderConstraint %s" % constraint.getShortName())
@@ -2250,7 +2634,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2250
2634
  if isinstance(requirement, ExecutionOrderConstraint):
2251
2635
  self.writeExecutionOrderConstraint(child_element, requirement)
2252
2636
  else:
2253
- self._raiseError("Unsupported timing requirement <%s>" % type(requirement))
2637
+ self.notImplemented("Unsupported timing requirement <%s>" % type(requirement))
2254
2638
 
2255
2639
  def writeTimingExtension(self, element: ET.Element, extension: TimingExtension):
2256
2640
  self.writeTimingRequirements(element, extension)
@@ -2274,7 +2658,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2274
2658
 
2275
2659
  def writeFrame(self, element: ET.Element, frame: Frame):
2276
2660
  self.writeIdentifiable(element, frame)
2277
- self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
2661
+ self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
2278
2662
  self.writePduToFrameMappings(element, frame)
2279
2663
 
2280
2664
  def writeLinUnconditionalFrame(self, element: ET.Element, frame: LinUnconditionalFrame):
@@ -2283,8 +2667,10 @@ class ARXMLWriter(AbstractARXMLWriter):
2283
2667
  self.writeFrame(child_element, frame)
2284
2668
 
2285
2669
  def writeNmNode(self, element: ET.Element, nm_node: NmNode):
2670
+ self.writeIdentifiable(element, nm_node)
2286
2671
  self.setChildElementOptionalRefType(element, "CONTROLLER-REF", nm_node.getControllerRef())
2287
2672
  self.setChildElementOptionalRefType(element, "NM-IF-ECU-REF", nm_node.getNmIfEcuRef())
2673
+ self.setChildElementOptionalBooleanValue(element, "NM-PASSIVE-MODE-ENABLED", nm_node.getNmPassiveModeEnabled())
2288
2674
  self.setChildElementOptionalNumericalValue(element, "NM-NODE-ID", nm_node.getNmNodeId())
2289
2675
 
2290
2676
  refs = nm_node.getRxNmPduRefs()
@@ -2302,9 +2688,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2302
2688
  def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
2303
2689
  self.logger.debug("write CanNmNode %s" % nm_node.getShortName())
2304
2690
  child_element = ET.SubElement(element, "CAN-NM-NODE")
2305
- self.writeIdentifiable(child_element, nm_node)
2306
2691
  self.writeNmNode(child_element, nm_node)
2307
-
2692
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CAR-WAKE-UP-RX-ENABLED", nm_node.getNmCarWakeUpRxEnabled())
2308
2693
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2309
2694
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
2310
2695
  self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
@@ -2312,8 +2697,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2312
2697
  def writeUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
2313
2698
  self.logger.debug("write UdpNmNode %s" % nm_node.getShortName())
2314
2699
  child_element = ET.SubElement(element, "UDP-NM-NODE")
2315
- self.writeIdentifiable(child_element, nm_node)
2316
2700
  self.writeNmNode(child_element, nm_node)
2701
+ self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2317
2702
 
2318
2703
  def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2319
2704
  nodes = parent.getNmNodes()
@@ -2334,18 +2719,23 @@ class ARXMLWriter(AbstractARXMLWriter):
2334
2719
  refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
2335
2720
  for ref in refs:
2336
2721
  self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
2337
-
2338
2722
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
2339
2723
  self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2340
2724
 
2341
2725
  def writeUdpNmClusterCoupling(self, element: ET.Element, coupling: UdpNmClusterCoupling):
2342
2726
  child_element = ET.SubElement(element, "UDP-NM-CLUSTER-COUPLING")
2727
+ refs = coupling.getCoupledClusterRefs()
2728
+ if len(refs) > 0:
2729
+ refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
2730
+ for ref in refs:
2731
+ self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
2732
+ self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2343
2733
 
2344
2734
  def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
2345
- self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
2735
+ self.logger.debug("Write NmConfigNmClusterCouplings <%s>" % config.getShortName())
2346
2736
  couplings = config.getNmClusterCouplings()
2347
2737
  if len(couplings) > 0:
2348
- child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
2738
+ child_element = ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
2349
2739
  for coupling in couplings:
2350
2740
  if isinstance(coupling, CanNmClusterCoupling):
2351
2741
  self.writeCanNmClusterCoupling(child_element, coupling)
@@ -2355,6 +2745,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2355
2745
  self.notImplemented("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2356
2746
 
2357
2747
  def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
2748
+ self.logger.debug("Write NmCluster <%s>" % cluster.getShortName())
2358
2749
  self.writeIdentifiable(element, cluster)
2359
2750
  self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
2360
2751
  self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
@@ -2363,7 +2754,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2363
2754
  self.setChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK", cluster.getNmSynchronizingNetwork())
2364
2755
 
2365
2756
  def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2366
- self.logger.debug("WriteCanNmCluster %s" % cluster.getShortName())
2757
+ self.logger.debug("Write CanNmCluster <%s>" % cluster.getShortName())
2367
2758
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
2368
2759
  self.writeNmCluster(child_element, cluster)
2369
2760
 
@@ -2382,10 +2773,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2382
2773
  self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2383
2774
  self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2384
2775
 
2385
- def writeUdpNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2386
- self.logger.debug("Write UdpNmCluster %s" % cluster.getShortName())
2776
+ def writeUdpNmCluster(self, element: ET.Element, cluster: UdpNmCluster):
2777
+ self.logger.debug("Write UdpNmCluster <%s>" % cluster.getShortName())
2387
2778
  child_element = ET.SubElement(element, "UDP-NM-CLUSTER")
2388
2779
  self.writeNmCluster(child_element, cluster)
2780
+ self.setChildElementOptionalIntegerValue(child_element, "NM-CBV-POSITION", cluster.getNmCbvPosition())
2781
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CHANNEL-ACTIVE", cluster.getNmChannelActive())
2782
+ self.setChildElementOptionalTimeValue(child_element, "NM-IMMEDIATE-NM-CYCLE-TIME", cluster.getNmImmediateNmCycleTime())
2783
+ self.setChildElementOptionalPositiveInteger(child_element, "NM-IMMEDIATE-NM-TRANSMISSIONS", cluster.getNmImmediateNmTransmissions())
2784
+ self.setChildElementOptionalTimeValue(child_element, "NM-MESSAGE-TIMEOUT-TIME", cluster.getNmMessageTimeoutTime())
2785
+ self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-TIME", cluster.getNmMsgCycleTime())
2786
+ self.setChildElementOptionalTimeValue(child_element, "NM-NETWORK-TIMEOUT", cluster.getNmNetworkTimeout())
2787
+ self.setChildElementOptionalIntegerValue(child_element, "NM-NID-POSITION", cluster.getNmNidPosition())
2788
+ self.setChildElementOptionalTimeValue(child_element, "NM-REMOTE-SLEEP-INDICATION-TIME", cluster.getNmRemoteSleepIndicationTime())
2789
+ self.setChildElementOptionalTimeValue(child_element, "NM-REPEAT-MESSAGE-TIME", cluster.getNmRepeatMessageTime())
2790
+ self.setChildElementOptionalTimeValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2791
+ self.setChildElementOptionalRefType(child_element, "VLAN-REF", cluster.getVlanRef())
2389
2792
 
2390
2793
  def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2391
2794
  clusters = parent.getNmClusters()
@@ -2399,52 +2802,313 @@ class ARXMLWriter(AbstractARXMLWriter):
2399
2802
  else:
2400
2803
  self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
2401
2804
 
2805
+ def writeUdpNmEcu(self, element: ET.Element, ecu: UdpNmEcu):
2806
+ if ecu is not None:
2807
+ child_element = ET.SubElement(element, "UDP-NM-ECU")
2808
+ self.setChildElementOptionalBooleanValue(child_element, "NM-SYNCHRONIZATION-POINT-ENABLED", ecu.getNmSynchronizationPointEnabled())
2809
+
2810
+ def writeBusDependentNmEcus(self, element: ET.Element, nm_ecu: NmEcu):
2811
+ dependent_nm_ecus = nm_ecu.getBusDependentNmEcus()
2812
+ if len(dependent_nm_ecus) > 0:
2813
+ child_element = ET.SubElement(element, "BUS-DEPENDENT-NM-ECUS")
2814
+ for dependent_nm_ecu in dependent_nm_ecus:
2815
+ if isinstance(dependent_nm_ecu, UdpNmEcu):
2816
+ self.writeUdpNmEcu(child_element, dependent_nm_ecu)
2817
+ else:
2818
+ self.notImplemented("Unsupported BusDependentNmEcu <%s>" % type(dependent_nm_ecu))
2819
+
2820
+ def writeNmEcu(self, element: ET.Element, nm_ecu: NmEcu):
2821
+ child_element = ET.SubElement(element, "NM-ECU")
2822
+ self.writeIdentifiable(child_element, nm_ecu)
2823
+ self.writeBusDependentNmEcus(child_element, nm_ecu)
2824
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", nm_ecu.getEcuInstanceRef())
2825
+ self.setChildElementOptionalBooleanValue(child_element, "NM-BUS-SYNCHRONIZATION-ENABLED", nm_ecu.getNmBusSynchronizationEnabled())
2826
+ self.setChildElementOptionalBooleanValue(child_element, "NM-COM-CONTROL-ENABLED", nm_ecu.getNmComControlEnabled())
2827
+ self.setChildElementOptionalBooleanValue(child_element, "NM-NODE-DETECTION-ENABLED", nm_ecu.getNmNodeDetectionEnabled())
2828
+ self.setChildElementOptionalBooleanValue(child_element, "NM-NODE-ID-ENABLED", nm_ecu.getNmNodeIdEnabled())
2829
+ self.setChildElementOptionalBooleanValue(child_element, "NM-PDU-RX-INDICATION-ENABLED", nm_ecu.getNmPduRxIndicationEnabled())
2830
+ self.setChildElementOptionalBooleanValue(child_element, "NM-REMOTE-SLEEP-IND-ENABLED", nm_ecu.getNmRemoteSleepIndEnabled())
2831
+ self.setChildElementOptionalBooleanValue(child_element, "NM-REPEAT-MSG-IND-ENABLED", nm_ecu.getNmRepeatMsgIndEnabled())
2832
+ self.setChildElementOptionalBooleanValue(child_element, "NM-STATE-CHANGE-IND-ENABLED", nm_ecu.getNmStateChangeIndEnabled())
2833
+ self.setChildElementOptionalBooleanValue(child_element, "NM-USER-DATA-ENABLED", nm_ecu.getNmUserDataEnabled())
2834
+
2835
+ def writeNmConfigNmIfEcus(self, element: ET.Element, nm_config: NmConfig):
2836
+ ecus = nm_config.getNmIfEcus()
2837
+ if len(ecus) > 0:
2838
+ child_element = ET.SubElement(element, "NM-IF-ECUS")
2839
+ for ecu in ecus:
2840
+ if isinstance(ecu, NmEcu):
2841
+ self.writeNmEcu(child_element, ecu)
2842
+ else:
2843
+ self.notImplemented("Unsupported NmIfEcus <%s>" % type(ecu))
2844
+
2402
2845
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
2403
2846
  self.logger.debug("Write NmConfig <%s>" % config.getShortName())
2404
2847
  child_element = ET.SubElement(element, "NM-CONFIG")
2405
2848
  self.writeIdentifiable(child_element, config)
2406
2849
  self.writeNmConfigNmClusters(child_element, config)
2407
2850
  self.writeNmConfigNmClusterCouplings(child_element, config)
2851
+ self.writeNmConfigNmIfEcus(child_element, config)
2852
+
2853
+ def writeISignalToIPduMapping(self, element: ET.Element, mapping: ISignalToIPduMapping):
2854
+ if mapping is not None:
2855
+ child_element = ET.SubElement(element, "I-SIGNAL-TO-I-PDU-MAPPING")
2856
+ self.writeIdentifiable(child_element, mapping)
2857
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
2858
+ self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
2859
+ self.setChildElementOptionalIntegerValue(child_element, "START-POSITION", mapping.getStartPosition())
2860
+ self.setChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY", mapping.getTransferProperty())
2861
+
2862
+ def writeNmPduISignalToIPduMappings(self, element: ET.Element, pdu: NmPdu):
2863
+ mappings = pdu.getISignalToIPduMappings()
2864
+ if len(mappings) > 0:
2865
+ child_element = ET.SubElement(element, "I-SIGNAL-TO-I-PDU-MAPPINGS")
2866
+ for mapping in mappings:
2867
+ if isinstance(mapping, ISignalToIPduMapping):
2868
+ self.writeISignalToIPduMapping(child_element, mapping)
2869
+ else:
2870
+ self.notImplemented("Unsupported ISignalToIPduMapping <%s>" % type(mapping))
2408
2871
 
2409
2872
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2410
2873
  self.logger.debug("Write NmPdu <%s>" % pdu.getShortName())
2411
2874
  child_element = ET.SubElement(element, "NM-PDU")
2412
- self.writeIdentifiable(child_element, pdu)
2413
- self.writeIPdu(child_element, pdu)
2875
+ self.writePdu(child_element, pdu)
2876
+ self.writeNmPduISignalToIPduMappings(child_element, pdu)
2877
+ self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", pdu.getUnusedBitPattern())
2414
2878
 
2415
2879
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
2416
2880
  self.logger.debug("Write NPdu <%s>" % pdu.getShortName())
2417
2881
  child_element = ET.SubElement(element, "N-PDU")
2418
- self.writeIdentifiable(child_element, pdu)
2419
- self.writeIPdu(child_element, pdu)
2420
-
2421
- def writeIPdu(self, element: ET.Element, pdu: IPdu):
2422
- self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
2882
+ self.writePdu(child_element, pdu)
2423
2883
 
2424
2884
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2425
2885
  self.logger.debug("Write DcmIPdu <%s>" % pdu.getShortName())
2426
2886
  child_element = ET.SubElement(element, "DCM-I-PDU")
2427
- self.writeIdentifiable(child_element, pdu)
2428
2887
  self.writeIPdu(child_element, pdu)
2429
2888
  self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2430
2889
 
2431
- def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2432
- self.logger.debug("Write SecuredIPdu <%s>" % pdu.getShortName())
2890
+ def setSecureCommunicationProps(self, element: ET.Element, key: str, props: SecureCommunicationProps):
2891
+ if props is not None:
2892
+ child_element = ET.SubElement(element, key)
2893
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-LENGTH", props.getAuthDataFreshnessLength())
2894
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-START-POSITION", props.getAuthDataFreshnessStartPosition()) # noqa E501
2895
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTH-INFO-TX-LENGTH", props.getAuthInfoTxLength())
2896
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-BUILD-ATTEMPTS", props.getAuthenticationBuildAttempts())
2897
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-RETRIES", props.getAuthenticationRetries())
2898
+ self.setChildElementOptionalPositiveInteger(child_element, "DATA-ID", props.getDataId())
2899
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-ID", props.getFreshnessValueId())
2900
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-LENGTH", props.getFreshnessValueLength())
2901
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH", props.getFreshnessValueTxLength())
2902
+
2903
+ def writeSecuredIPdu(self, element: ET.Element, i_pdu: SecuredIPdu):
2904
+ self.logger.debug("Write SecuredIPdu <%s>" % i_pdu.getShortName())
2433
2905
  child_element = ET.SubElement(element, "SECURED-I-PDU")
2434
- self.writeIdentifiable(child_element, pdu)
2435
- self.writeIPdu(child_element, pdu)
2906
+ self.writeIPdu(child_element, i_pdu)
2907
+ self.setChildElementOptionalRefType(child_element, "AUTHENTICATION-PROPS-REF", i_pdu.getAuthenticationPropsRef())
2908
+ self.setChildElementOptionalRefType(child_element, "FRESHNESS-PROPS-REF", i_pdu.getFreshnessPropsRef())
2909
+ self.setChildElementOptionalRefType(child_element, "PAYLOAD-REF", i_pdu.getPayloadRef())
2910
+ self.setSecureCommunicationProps(child_element, "SECURE-COMMUNICATION-PROPS", i_pdu.getSecureCommunicationProps())
2911
+ self.setChildElementOptionalBooleanValue(child_element, "USE-AS-CRYPTOGRAPHIC-I-PDU", i_pdu.getUseAsCryptographicIPdu())
2912
+
2913
+ def writeTpConfig(self, element: ET.Element, config: TpConfig):
2914
+ self.writeIdentifiable(element, config)
2915
+ self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", config.getCommunicationClusterRef())
2916
+
2917
+ def writeCanTpAddress(self, element: ET.Element, address: CanTpAddress):
2918
+ if address is not None:
2919
+ child_element = ET.SubElement(element, "CAN-TP-ADDRESS")
2920
+ self.writeIdentifiable(child_element, address)
2921
+ self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS", address.getTpAddress())
2922
+ self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS-EXTENSION-VALUE", address.getTpAddressExtensionValue())
2923
+
2924
+ def writeCanTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
2925
+ addresses = config.getTpAddresses()
2926
+ if len(addresses) > 0:
2927
+ child_element = ET.SubElement(element, "TP-ADDRESSS")
2928
+ for address in addresses:
2929
+ if isinstance(address, CanTpAddress):
2930
+ self.writeCanTpAddress(child_element, address)
2931
+ else:
2932
+ self.notImplemented("Unsupported TpAddress <%s>" % type(address))
2933
+
2934
+ def writeCanTpChannel(self, element: ET.Element, channel: CanTpChannel):
2935
+ if channel is not None:
2936
+ child_element = ET.SubElement(element, "CAN-TP-CHANNEL")
2937
+ self.writeIdentifiable(child_element, channel)
2938
+ self.setChildElementOptionalPositiveInteger(child_element, "CHANNEL-ID", channel.getChannelId())
2939
+ self.setChildElementOptionalLiteral(child_element, "CHANNEL-MODE", channel.getChannelMode())
2940
+
2941
+ def writeCanTpConfigTpChannels(self, element: ET.Element, config: CanTpConfig):
2942
+ channels = config.getTpChannels()
2943
+ if len(channels) > 0:
2944
+ child_element = ET.SubElement(element, "TP-CHANNELS")
2945
+ for channel in channels:
2946
+ if isinstance(channel, CanTpChannel):
2947
+ self.writeCanTpChannel(child_element, channel)
2948
+ else:
2949
+ self.notImplemented("Unsupported TpChannel <%s>" % type(channel))
2950
+
2951
+ def writeTpConnection(self, element: ET.Element, connection: TpConnection):
2952
+ self.writeARObjectAttributes(element, connection)
2953
+ ident = connection.getIdent()
2954
+ if ident is not None:
2955
+ child_element = ET.SubElement(element, "IDENT")
2956
+ self.writeReferrable(child_element, ident)
2957
+
2958
+ def writeTpConnectionReceiverRefs(self, element: ET.Element, connection: CanTpConnection):
2959
+ refs = connection.getReceiverRefs()
2960
+ if len(refs) > 0:
2961
+ child_element = ET.SubElement(element, "RECEIVER-REFS")
2962
+ for ref in refs:
2963
+ self.setChildElementOptionalRefType(child_element, "RECEIVER-REF", ref)
2964
+
2965
+ def writeCanTpConnection(self, element: ET.Element, connection: CanTpConnection):
2966
+ if connection is not None:
2967
+ child_element = ET.SubElement(element, "CAN-TP-CONNECTION")
2968
+ self.writeTpConnection(child_element, connection)
2969
+ self.setChildElementOptionalLiteral(child_element, "ADDRESSING-FORMAT", connection.getAddressingFormat())
2970
+ self.setChildElementOptionalRefType(child_element, "CAN-TP-CHANNEL-REF", connection.getCanTpChannelRef())
2971
+ self.setChildElementOptionalBooleanValue(child_element, "CANCELLATION", connection.getCancellation())
2972
+ self.setChildElementOptionalRefType(child_element, "DATA-PDU-REF", connection.getDataPduRef())
2973
+ self.setChildElementOptionalRefType(child_element, "FLOW-CONTROL-PDU-REF", connection.getFlowControlPduRef())
2974
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-BLOCK-SIZE", connection.getMaxBlockSize())
2975
+ self.setChildElementOptionalRefType(child_element, "MULTICAST-REF", connection.getMulticastRef())
2976
+ self.setChildElementOptionalBooleanValue(child_element, "PADDING-ACTIVATION", connection.getPaddingActivation())
2977
+ self.writeTpConnectionReceiverRefs(child_element, connection)
2978
+ self.setChildElementOptionalLiteral(child_element, "TA-TYPE", connection.getTaType())
2979
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-BR", connection.getTimeoutBr())
2980
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-BS", connection.getTimeoutBs())
2981
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CR", connection.getTimeoutCr())
2982
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CS", connection.getTimeoutCs())
2983
+ self.setChildElementOptionalRefType(child_element, "TP-SDU-REF", connection.getTpSduRef())
2984
+ self.setChildElementOptionalRefType(child_element, "TRANSMITTER-REF", connection.getTransmitterRef())
2985
+
2986
+ def writeCanTpConfigTpConnections(self, element: ET.Element, config: CanTpConfig):
2987
+ connections = config.getTpConnections()
2988
+ if len(connections) > 0:
2989
+ child_element = ET.SubElement(element, "TP-CONNECTIONS")
2990
+ for connection in connections:
2991
+ if isinstance(connection, CanTpConnection):
2992
+ self.writeCanTpConnection(child_element, connection)
2993
+ else:
2994
+ self.notImplemented("Unsupported TpConnection <%s>" % type(connection))
2995
+
2996
+ def writeCanTpEcu(self, element: ET.Element, tp_ecu: CanTpEcu):
2997
+ if tp_ecu is not None:
2998
+ child_element = ET.SubElement(element, "CAN-TP-ECU")
2999
+ self.setChildElementOptionalTimeValue(child_element, "CYCLE-TIME-MAIN-FUNCTION", tp_ecu.getCycleTimeMainFunction())
3000
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", tp_ecu.getEcuInstanceRef())
3001
+
3002
+ def writeCanTpConfigTpEcus(self, element: ET.Element, config: CanTpConfig):
3003
+ tp_ecus = config.getTpEcus()
3004
+ if len(tp_ecus) > 0:
3005
+ child_element = ET.SubElement(element, "TP-ECUS")
3006
+ for tp_ecu in tp_ecus:
3007
+ if isinstance(tp_ecu, CanTpEcu):
3008
+ self.writeCanTpEcu(child_element, tp_ecu)
3009
+ else:
3010
+ self.notImplemented("Unsupported TpEcu <%s>" % type(tp_ecu))
3011
+
3012
+ def writeCanTpNode(self, element: ET.Element, tp_node: CanTpNode):
3013
+ if tp_node is not None:
3014
+ child_element = ET.SubElement(element, "CAN-TP-NODE")
3015
+ self.writeIdentifiable(child_element, tp_node)
3016
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", tp_node.getConnectorRef())
3017
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-FC-WAIT", tp_node.getMaxFcWait())
3018
+ self.setChildElementOptionalTimeValue(child_element, "ST-MIN", tp_node.getStMin())
3019
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AR", tp_node.getTimeoutAr())
3020
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AS", tp_node.getTimeoutAs())
3021
+ self.setChildElementOptionalRefType(child_element, "TP-ADDRESS-REF", tp_node.getTpAddressRef())
3022
+
3023
+ def writeCanTpConfigTpNodes(self, element: ET.Element, config: CanTpConfig):
3024
+ tp_nodes = config.getTpNodes()
3025
+ if len(tp_nodes) > 0:
3026
+ child_element = ET.SubElement(element, "TP-NODES")
3027
+ for tp_node in tp_nodes:
3028
+ if isinstance(tp_node, CanTpNode):
3029
+ self.writeCanTpNode(child_element, tp_node)
3030
+ else:
3031
+ self.notImplemented("Unsupported TpNode <%s>" % type(tp_node))
2436
3032
 
2437
3033
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2438
3034
  self.logger.debug("Write CanTpConfig <%s>" % config.getShortName())
2439
3035
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2440
- self.writeIdentifiable(child_element, config)
3036
+ self.writeTpConfig(child_element, config)
3037
+ self.writeCanTpConfigTpAddresses(child_element, config)
3038
+ self.writeCanTpConfigTpChannels(child_element, config)
3039
+ self.writeCanTpConfigTpConnections(child_element, config)
3040
+ self.writeCanTpConfigTpEcus(child_element, config)
3041
+ self.writeCanTpConfigTpNodes(child_element, config)
3042
+
3043
+ def writeTpAddress(self, element: ET.Element, address: TpAddress):
3044
+ if address is not None:
3045
+ child_element = ET.SubElement(element, "TP-ADDRESS")
3046
+ self.writeIdentifiable(child_element, address)
3047
+ self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS", address.getTpAddress())
3048
+
3049
+ def writeLinTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
3050
+ addresses = config.getTpAddresses()
3051
+ if len(addresses) > 0:
3052
+ child_element = ET.SubElement(element, "TP-ADDRESSS")
3053
+ for address in addresses:
3054
+ if isinstance(address, TpAddress):
3055
+ self.writeTpAddress(child_element, address)
3056
+ else:
3057
+ self.notImplemented("Unsupported TpAddress <%s>" % type(address))
3058
+
3059
+ def writeLinTpConnection(self, element: ET.Element, connection: LinTpConnection):
3060
+ if connection is not None:
3061
+ child_element = ET.SubElement(element, "LIN-TP-CONNECTION")
3062
+ self.writeTpConnection(child_element, connection)
3063
+ self.setChildElementOptionalRefType(child_element, "DATA-PDU-REF", connection.getDataPduRef())
3064
+ self.setChildElementOptionalRefType(child_element, "FLOW-CONTROL-REF", connection.getFlowControlRef())
3065
+ self.setChildElementOptionalRefType(child_element, "LIN-TP-N-SDU-REF", connection.getLinTpNSduRef())
3066
+ self.writeTpConnectionReceiverRefs(child_element, connection)
3067
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AS", connection.getTimeoutAs())
3068
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CR", connection.getTimeoutCr())
3069
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CS", connection.getTimeoutCs())
3070
+ self.setChildElementOptionalRefType(child_element, "TRANSMITTER-REF", connection.getTransmitterRef())
3071
+
3072
+ def writeLinTpConfigTpConnections(self, element: ET.Element, config: LinTpConfig):
3073
+ connections = config.getTpConnections()
3074
+ if len(connections) > 0:
3075
+ child_element = ET.SubElement(element, "TP-CONNECTIONS")
3076
+ for connection in connections:
3077
+ if isinstance(connection, LinTpConnection):
3078
+ self.writeLinTpConnection(child_element, connection)
3079
+ else:
3080
+ self.notImplemented("Unsupported TpConnection <%s>" % type(connection))
3081
+
3082
+ def writeLinTpNode(self, element: ET.Element, tp_node: LinTpNode):
3083
+ if tp_node is not None:
3084
+ child_element = ET.SubElement(element, "LIN-TP-NODE")
3085
+ self.writeIdentifiable(child_element, tp_node)
3086
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", tp_node.getConnectorRef())
3087
+ self.setChildElementOptionalBooleanValue(element, "DROP-NOT-REQUESTED-NAD", tp_node.getDropNotRequestedNad())
3088
+ self.setChildElementOptionalTimeValue(child_element, "P-2-MAX", tp_node.getP2Max())
3089
+ self.setChildElementOptionalTimeValue(child_element, "P-2-TIMING", tp_node.getP2Timing())
3090
+ self.setChildElementOptionalRefType(child_element, "TP-ADDRESS-REF", tp_node.getTpAddressRef())
3091
+
3092
+ def writeLinTpConfigTpNodes(self, element: ET.Element, config: LinTpConfig):
3093
+ tp_nodes = config.getTpNodes()
3094
+ if len(tp_nodes) > 0:
3095
+ child_element = ET.SubElement(element, "TP-NODES")
3096
+ for tp_node in tp_nodes:
3097
+ if isinstance(tp_node, LinTpNode):
3098
+ self.writeLinTpNode(child_element, tp_node)
3099
+ else:
3100
+ self.notImplemented("Unsupported TpNode <%s>" % type(tp_node))
2441
3101
 
2442
3102
  def writeLinTpConfig(self, element: ET.Element, config: LinTpConfig):
2443
3103
  self.logger.debug("Write LinTpConfig <%s>" % config.getShortName())
2444
3104
  child_element = ET.SubElement(element, "LIN-TP-CONFIG")
2445
- self.writeIdentifiable(child_element, config)
3105
+ self.writeTpConfig(child_element, config)
3106
+ self.writeLinTpConfigTpAddresses(child_element, config)
3107
+ self.writeLinTpConfigTpConnections(child_element, config)
3108
+ self.writeLinTpConfigTpNodes(child_element, config)
2446
3109
 
2447
3110
  def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
3111
+ self.writeIdentifiable(element, triggering)
2448
3112
  ref_list = triggering.getFramePortRefs()
2449
3113
  if len(ref_list) > 0:
2450
3114
  frame_port_refs_tag = ET.SubElement(element, "FRAME-PORT-REFS")
@@ -2456,13 +3120,12 @@ class ARXMLWriter(AbstractARXMLWriter):
2456
3120
  if len(refs) > 0:
2457
3121
  triggerings_tag = ET.SubElement(element, "PDU-TRIGGERINGS")
2458
3122
  for ref in refs:
2459
- child_element = ET.SubElement(triggerings_tag, 'PDU-TRIGGERING-REF-CONDITIONAL')
2460
- self.setChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF", ref)
3123
+ child_element = ET.SubElement(triggerings_tag, 'PDU-TRIGGERING-REF-CONDITIONAL')
3124
+ self.setChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF", ref)
2461
3125
 
2462
3126
  def writeCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2463
3127
  self.logger.debug("WRite CanFrameTriggering %s" % triggering.getShortName())
2464
3128
  child_element = ET.SubElement(element, "CAN-FRAME-TRIGGERING")
2465
- self.writeIdentifiable(child_element, triggering)
2466
3129
  self.writeFrameTriggering(child_element, triggering)
2467
3130
  self.setChildElementOptionalLiteral(child_element, "CAN-ADDRESSING-MODE", triggering.getCanAddressingMode())
2468
3131
  self.setChildElementOptionalBooleanValue(child_element, "CAN-FD-FRAME-SUPPORT", triggering.getCanFdFrameSupport())
@@ -2474,11 +3137,55 @@ class ARXMLWriter(AbstractARXMLWriter):
2474
3137
  def writeLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2475
3138
  self.logger.debug("Write LinFrameTriggering %s" % triggering.getShortName())
2476
3139
  child_element = ET.SubElement(element, "LIN-FRAME-TRIGGERING")
2477
- self.writeIdentifiable(child_element, triggering)
2478
3140
  self.writeFrameTriggering(child_element, triggering)
2479
3141
  self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2480
3142
  self.setChildElementOptionalLiteral(child_element, "LIN-CHECKSUM", triggering.getLinChecksum())
2481
3143
 
3144
+ def writeCommunicationCycle(self, element: ET.Element, cycle: CommunicationCycle):
3145
+ self.writeARObjectAttributes(element, cycle)
3146
+
3147
+ def writeCycleRepetition(self, element: ET.Element, cycle: CycleRepetition):
3148
+ if cycle is not None:
3149
+ child_element = ET.SubElement(element, "CYCLE-REPETITION")
3150
+ self.writeCommunicationCycle(child_element, cycle)
3151
+ self.setChildElementOptionalIntegerValue(child_element, "BASE-CYCLE", cycle.getBaseCycle())
3152
+ self.setChildElementOptionalLiteral(child_element, "CYCLE-REPETITION", cycle.getCycleRepetition())
3153
+
3154
+ def writeFlexrayAbsolutelyScheduledTimingCommunicationCycle(self, element: ET.Element, timing: FlexrayAbsolutelyScheduledTiming):
3155
+ cycle = timing.getCommunicationCycle()
3156
+ if cycle is not None:
3157
+ child_element = ET.SubElement(element, "COMMUNICATION-CYCLE")
3158
+ if isinstance(cycle, CycleRepetition):
3159
+ self.writeCycleRepetition(child_element, cycle)
3160
+ else:
3161
+ self.notImplemented("Unsupported CommunicationCycle <%s>" % type(child_element))
3162
+
3163
+ def writeFlexrayAbsolutelyScheduledTiming(self, element: ET.Element, timing: FlexrayAbsolutelyScheduledTiming):
3164
+ if timing is not None:
3165
+ child_element = ET.SubElement(element, "FLEXRAY-ABSOLUTELY-SCHEDULED-TIMING")
3166
+ self.writeARObjectAttributes(child_element, timing)
3167
+ self.writeFlexrayAbsolutelyScheduledTimingCommunicationCycle(child_element, timing)
3168
+ self.setChildElementOptionalPositiveInteger(child_element, "SLOT-ID", timing.getSlotID())
3169
+
3170
+ def writeFlexrayFrameTriggeringAbsolutelyScheduledTimings(self, element: ET.Element, triggering: FlexrayFrameTriggering):
3171
+ timings = triggering.getAbsolutelyScheduledTimings()
3172
+ if len(timings) > 0:
3173
+ child_element = ET.SubElement(element, "ABSOLUTELY-SCHEDULED-TIMINGS")
3174
+ for timing in timings:
3175
+ if isinstance(timing, FlexrayAbsolutelyScheduledTiming):
3176
+ self.writeFlexrayAbsolutelyScheduledTiming(child_element, timing)
3177
+ else:
3178
+ self.notImplemented("Unsupported AbsolutelyScheduledTiming <%s>" % type(timing))
3179
+
3180
+ def writeFlexrayFrameTriggering(self, element: ET.Element, triggering: FlexrayFrameTriggering):
3181
+ self.logger.debug("Write FlexrayFrameTriggering %s" % triggering.getShortName())
3182
+ child_element = ET.SubElement(element, "FLEXRAY-FRAME-TRIGGERING")
3183
+ self.writeFrameTriggering(child_element, triggering)
3184
+ self.writeFlexrayFrameTriggeringAbsolutelyScheduledTimings(child_element, triggering)
3185
+ self.setChildElementOptionalBooleanValue(child_element, "ALLOW-DYNAMIC-L-SDU-LENGTH", triggering.getAllowDynamicLSduLength())
3186
+ self.setChildElementOptionalPositiveInteger(child_element, "MESSAGE-ID", triggering.getMessageId())
3187
+ self.setChildElementOptionalBooleanValue(child_element, "PAYLOAD-PREAMBLE-INDICATOR", triggering.getPayloadPreambleIndicator())
3188
+
2482
3189
  def writeISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2483
3190
  self.logger.debug("Write ISignalTriggering %s" % triggering.getShortName())
2484
3191
  child_element = ET.SubElement(element, "I-SIGNAL-TRIGGERING")
@@ -2506,17 +3213,18 @@ class ARXMLWriter(AbstractARXMLWriter):
2506
3213
  if len(refs) > 0:
2507
3214
  triggerings_tag = ET.SubElement(child_element, "I-SIGNAL-TRIGGERINGS")
2508
3215
  for ref in refs:
2509
- child_element = ET.SubElement(triggerings_tag, 'I-SIGNAL-TRIGGERING-REF-CONDITIONAL')
2510
- self.setChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF", ref)
3216
+ child_element = ET.SubElement(triggerings_tag, 'I-SIGNAL-TRIGGERING-REF-CONDITIONAL')
3217
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-TRIGGERING-REF", ref)
2511
3218
 
2512
- def writePhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
3219
+ def writePhysicalChannelCommConnectorRefs(self, element, channel):
2513
3220
  connectors = channel.getCommConnectorRefs()
2514
3221
  if len(connectors) > 0:
2515
3222
  connectors_tag = ET.SubElement(element, "COMM-CONNECTORS")
2516
3223
  for connector in connectors:
2517
- child_element = ET.SubElement(connectors_tag, 'COMMUNICATION-CONNECTOR-REF-CONDITIONAL')
2518
- self.setChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF", connector)
3224
+ child_element = ET.SubElement(connectors_tag, 'COMMUNICATION-CONNECTOR-REF-CONDITIONAL')
3225
+ self.setChildElementOptionalRefType(child_element, "COMMUNICATION-CONNECTOR-REF", connector)
2519
3226
 
3227
+ def writePhysicalChannelFrameTriggerings(self, element, channel):
2520
3228
  triggerings = channel.getFrameTriggerings()
2521
3229
  if len(triggerings) > 0:
2522
3230
  triggerings_tag = ET.SubElement(element, "FRAME-TRIGGERINGS")
@@ -2525,9 +3233,12 @@ class ARXMLWriter(AbstractARXMLWriter):
2525
3233
  self.writeCanFrameTriggering(triggerings_tag, triggering)
2526
3234
  elif isinstance(triggering, LinFrameTriggering):
2527
3235
  self.writeLinFrameTriggering(triggerings_tag, triggering)
3236
+ elif isinstance(triggering, FlexrayFrameTriggering):
3237
+ self.writeFlexrayFrameTriggering(triggerings_tag, triggering)
2528
3238
  else:
2529
3239
  self.notImplemented("Unsupported Frame Triggering <%s>" % type(triggering))
2530
-
3240
+
3241
+ def writePhysicalChannelISignalTriggerings(self, element, channel):
2531
3242
  triggerings = channel.getISignalTriggerings()
2532
3243
  if len(triggerings) > 0:
2533
3244
  triggerings_tag = ET.SubElement(element, "I-SIGNAL-TRIGGERINGS")
@@ -2536,7 +3247,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2536
3247
  self.writeISignalTriggering(triggerings_tag, triggering)
2537
3248
  else:
2538
3249
  self.notImplemented("Unsupported ISignalTriggering <%s>" % type(triggering))
2539
-
3250
+
3251
+ def writePhysicalChannelPduTriggerings(self, element, channel):
2540
3252
  triggerings = channel.getPduTriggerings()
2541
3253
  if len(triggerings) > 0:
2542
3254
  triggerings_tag = ET.SubElement(element, "PDU-TRIGGERINGS")
@@ -2546,10 +3258,17 @@ class ARXMLWriter(AbstractARXMLWriter):
2546
3258
  else:
2547
3259
  self.notImplemented("Unsupported PduTriggering <%s>" % type(triggering))
2548
3260
 
3261
+ def writePhysicalChannel(self, element: ET.Element, channel: PhysicalChannel):
3262
+ self.writeIdentifiable(element, channel)
3263
+
3264
+ self.writePhysicalChannelCommConnectorRefs(element, channel)
3265
+ self.writePhysicalChannelFrameTriggerings(element, channel)
3266
+ self.writePhysicalChannelISignalTriggerings(element, channel)
3267
+ self.writePhysicalChannelPduTriggerings(element, channel)
3268
+
2549
3269
  def writeCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2550
3270
  self.logger.debug("Set CanPhysicalChannel %s" % channel.getShortName())
2551
3271
  child_element = ET.SubElement(element, "CAN-PHYSICAL-CHANNEL")
2552
- self.writeIdentifiable(child_element, channel)
2553
3272
  self.writePhysicalChannel(child_element, channel)
2554
3273
 
2555
3274
  def writeScheduleTableEntry(self, element: ET.Element, entry: ScheduleTableEntry):
@@ -2592,7 +3311,6 @@ class ARXMLWriter(AbstractARXMLWriter):
2592
3311
  def writeLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2593
3312
  self.logger.debug("Set LinPhysicalChannel %s" % channel.getShortName())
2594
3313
  child_element = ET.SubElement(element, "LIN-PHYSICAL-CHANNEL")
2595
- self.writeIdentifiable(child_element, channel)
2596
3314
  self.writePhysicalChannel(child_element, channel)
2597
3315
  self.writeLinPhysicalChannelScheduleTables(child_element, channel)
2598
3316
 
@@ -2640,7 +3358,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2640
3358
  for end_point in end_points:
2641
3359
  self.writeNetworkEndPoint(child_element, end_point)
2642
3360
 
2643
- def setSocketConnectionIpduIdentifier(self, element: ET.Element,identifier: SocketConnectionIpduIdentifier):
3361
+ def setSocketConnectionIpduIdentifier(self, element: ET.Element, identifier: SocketConnectionIpduIdentifier):
2644
3362
  if identifier is not None:
2645
3363
  child_element = ET.SubElement(element, "SOCKET-CONNECTION-IPDU-IDENTIFIER")
2646
3364
  self.setChildElementOptionalPositiveInteger(child_element, "HEADER-ID", identifier.getHeaderId())
@@ -2661,8 +3379,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2661
3379
  def setSocketConnection(self, element: ET.Element, connection: SocketConnection):
2662
3380
  if connection is not None:
2663
3381
  child_element = ET.SubElement(element, "SOCKET-CONNECTION")
2664
- self.setChildElementOptionalBooleanValue(child_element, "CLIENT-IP-ADDR-FROM-CONNECTION-REQUEST", connection.getClientIpAddrFromConnectionRequest())
2665
- self.setChildElementOptionalBooleanValue(child_element, "CLIENT-PORT-FROM-CONNECTION-REQUEST", connection.getClientPortFromConnectionRequest())
3382
+ self.setChildElementOptionalBooleanValue(child_element, "CLIENT-IP-ADDR-FROM-CONNECTION-REQUEST", connection.getClientIpAddrFromConnectionRequest()) # noqa E501
3383
+ self.setChildElementOptionalBooleanValue(child_element, "CLIENT-PORT-FROM-CONNECTION-REQUEST", connection.getClientPortFromConnectionRequest()) # noqa E501
2666
3384
  self.setChildElementOptionalRefType(child_element, "CLIENT-PORT-REF", connection.getClientPortRef())
2667
3385
  self.setSocketConnectionPdus(child_element, "PDUS", connection.getPdus())
2668
3386
  self.setChildElementOptionalPositiveInteger(child_element, "PDU-COLLECTION-MAX-BUFFER-SIZE", connection.getPduCollectionMaxBufferSize())
@@ -2749,14 +3467,6 @@ class ARXMLWriter(AbstractARXMLWriter):
2749
3467
  self.setChildElementOptionalTimeValue(child_element, "MAX-VALUE", delay.getMaxValue())
2750
3468
  self.setChildElementOptionalTimeValue(child_element, "MIN-VALUE", delay.getMinValue())
2751
3469
 
2752
- def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
2753
- if config is not None:
2754
- child_element = ET.SubElement(element, key)
2755
- self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE", config.getInitialDelayMaxValue())
2756
- self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE", config.getInitialDelayMinValue())
2757
- self.setChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY", config.getInitialRepetitionsBaseDelay())
2758
- self.setChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX", config.getInitialRepetitionsMax())
2759
-
2760
3470
  def setSdClientConfig(self, element: ET.Element, key: str, config: SdClientConfig):
2761
3471
  if config is not None:
2762
3472
  child_element = ET.SubElement(element, key)
@@ -2784,7 +3494,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2784
3494
  if isinstance(group, ConsumedEventGroup):
2785
3495
  self.writeConsumedEventGroup(child_element, group)
2786
3496
  else:
2787
- self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
3497
+ self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
2788
3498
 
2789
3499
  def writeConsumedServiceInstance(self, element: ET.Element, instance: ConsumedServiceInstance):
2790
3500
  if instance is not None:
@@ -2801,7 +3511,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2801
3511
  for instance in instances:
2802
3512
  if isinstance(instance, ConsumedServiceInstance):
2803
3513
  self.writeConsumedServiceInstance(child_element, instance)
2804
- else:
3514
+ else:
2805
3515
  self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2806
3516
 
2807
3517
  def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
@@ -2895,7 +3605,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2895
3605
  self.writeIdentifiable(child_element, address)
2896
3606
  self.writeSocketAddressApplicationEndpoint(child_element, address)
2897
3607
  self.writeSocketAddressMulticastConnectorRefs(child_element, address)
2898
- self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", address.getConnectorRef())
3608
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", address.getConnectorRef())
2899
3609
  self.setChildElementOptionalPositiveInteger(child_element, "PORT-ADDRESS", address.getPortAddress())
2900
3610
 
2901
3611
  def writeSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
@@ -2924,12 +3634,17 @@ class ARXMLWriter(AbstractARXMLWriter):
2924
3634
  def writeEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2925
3635
  self.logger.debug("Set EthernetPhysicalChannel %s" % channel.getShortName())
2926
3636
  child_element = ET.SubElement(element, "ETHERNET-PHYSICAL-CHANNEL")
2927
- self.writeIdentifiable(child_element, channel)
2928
3637
  self.writePhysicalChannel(child_element, channel)
2929
3638
  self.writeEthernetPhysicalChannelNetworkEndPoints(child_element, channel.getNetworkEndpoints())
2930
3639
  self.writeSoAdConfig(child_element, "SO-AD-CONFIG", channel.getSoAdConfig())
2931
3640
  self.writeEthernetPhysicalChannelVlan(child_element, channel)
2932
3641
 
3642
+ def writeFlexrayPhysicalChannel(self, element: ET.Element, channel: FlexrayPhysicalChannel):
3643
+ self.logger.debug("Set FlexrayPhysicalChannel %s" % channel.getShortName())
3644
+ child_element = ET.SubElement(element, "FLEXRAY-PHYSICAL-CHANNEL")
3645
+ self.writePhysicalChannel(child_element, channel)
3646
+ self.setChildElementOptionalLiteral(child_element, "CHANNEL-NAME", channel.getChannelName())
3647
+
2933
3648
  def writeCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2934
3649
  channels = cluster.getPhysicalChannels()
2935
3650
  if len(channels) > 0:
@@ -2941,6 +3656,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2941
3656
  self.writeLinPhysicalChannel(child_element, channel)
2942
3657
  elif isinstance(channel, EthernetPhysicalChannel):
2943
3658
  self.writeEthernetPhysicalChannel(child_element, channel)
3659
+ elif isinstance(channel, FlexrayPhysicalChannel):
3660
+ self.writeFlexrayPhysicalChannel(child_element, channel)
2944
3661
  else:
2945
3662
  self.notImplemented("Unsupported Physical Channel <%s>" % type(channel))
2946
3663
 
@@ -2963,22 +3680,68 @@ class ARXMLWriter(AbstractARXMLWriter):
2963
3680
  self.setChildElementOptionalNumericalValue(element, "SPEED", cluster.getSpeed())
2964
3681
 
2965
3682
  def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
2966
- self.logger.debug("LinCluster %s" % cluster.getShortName())
2967
- child_element = ET.SubElement(element, "LIN-CLUSTER")
2968
- self.writeIdentifiable(child_element, cluster)
2969
- child_element = ET.SubElement(child_element, "LIN-CLUSTER-VARIANTS")
2970
- child_element = ET.SubElement(child_element, "LIN-CLUSTER-CONDITIONAL")
2971
- self.writeCommunicationCluster(child_element, cluster)
3683
+ if cluster is not None:
3684
+ self.logger.debug("LinCluster %s" % cluster.getShortName())
3685
+ child_element = ET.SubElement(element, "LIN-CLUSTER")
3686
+ self.writeIdentifiable(child_element, cluster)
3687
+
3688
+ child_element = ET.SubElement(child_element, "LIN-CLUSTER-VARIANTS")
3689
+ child_element = ET.SubElement(child_element, "LIN-CLUSTER-CONDITIONAL")
3690
+ self.writeCommunicationCluster(child_element, cluster)
2972
3691
 
2973
3692
  def writeCanCluster(self, element: ET.Element, cluster: CanCluster):
2974
- self.logger.debug("CanCluster %s" % cluster.getShortName())
2975
- child_element = ET.SubElement(element, "CAN-CLUSTER")
2976
- self.writeIdentifiable(child_element, cluster)
2977
-
2978
- child_element = ET.SubElement(child_element, "CAN-CLUSTER-VARIANTS")
2979
- child_element = ET.SubElement(child_element, "CAN-CLUSTER-CONDITIONAL")
2980
- self.writeCommunicationCluster(child_element, cluster)
2981
- self.writeAbstractCanCluster(child_element, cluster)
3693
+ if cluster is not None:
3694
+ self.logger.debug("CanCluster %s" % cluster.getShortName())
3695
+ child_element = ET.SubElement(element, "CAN-CLUSTER")
3696
+ self.writeIdentifiable(child_element, cluster)
3697
+
3698
+ child_element = ET.SubElement(child_element, "CAN-CLUSTER-VARIANTS")
3699
+ child_element = ET.SubElement(child_element, "CAN-CLUSTER-CONDITIONAL")
3700
+ self.writeCommunicationCluster(child_element, cluster)
3701
+ self.writeAbstractCanCluster(child_element, cluster)
3702
+
3703
+ def writeFlexrayCluster(self, element: ET.Element, cluster: FlexrayCluster):
3704
+ if cluster is not None:
3705
+ self.logger.debug("Write FlexrayCluster <%s>" % cluster.getShortName())
3706
+ child_element = ET.SubElement(element, "FLEXRAY-CLUSTER")
3707
+ self.writeIdentifiable(child_element, cluster)
3708
+
3709
+ child_element = ET.SubElement(child_element, "FLEXRAY-CLUSTER-VARIANTS")
3710
+ child_element = ET.SubElement(child_element, "FLEXRAY-CLUSTER-CONDITIONAL")
3711
+ self.writeCommunicationCluster(child_element, cluster)
3712
+
3713
+ self.setChildElementOptionalIntegerValue(child_element, "ACTION-POINT-OFFSET", cluster.getActionPointOffset())
3714
+ self.setChildElementOptionalTimeValue(child_element, "BIT", cluster.getBit())
3715
+ self.setChildElementOptionalIntegerValue(child_element, "CAS-RX-LOW-MAX", cluster.getCasRxLowMax())
3716
+ self.setChildElementOptionalIntegerValue(child_element, "COLD-START-ATTEMPTS", cluster.getColdStartAttempts())
3717
+ self.setChildElementOptionalTimeValue(child_element, "CYCLE", cluster.getCycle())
3718
+ self.setChildElementOptionalIntegerValue(child_element, "CYCLE-COUNT-MAX", cluster.getCycleCountMax())
3719
+ self.setChildElementOptionalBooleanValue(child_element, "DETECT-NIT-ERROR", cluster.getDetectNitError())
3720
+ self.setChildElementOptionalIntegerValue(child_element, "DYNAMIC-SLOT-IDLE-PHASE", cluster.getDynamicSlotIdlePhase())
3721
+ self.setChildElementOptionalIntegerValue(child_element, "IGNORE-AFTER-TX", cluster.getIgnoreAfterTx())
3722
+ self.setChildElementOptionalIntegerValue(child_element, "LISTEN-NOISE", cluster.getListenNoise())
3723
+ self.setChildElementOptionalIntegerValue(child_element, "MACRO-PER-CYCLE", cluster.getMacroPerCycle())
3724
+ self.setChildElementOptionalTimeValue(child_element, "MACROTICK-DURATION", cluster.getMacrotickDuration())
3725
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-WITHOUT-CLOCK-CORRECTION-FATAL", cluster.getMaxWithoutClockCorrectionFatal())
3726
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-WITHOUT-CLOCK-CORRECTION-PASSIVE", cluster.getMaxWithoutClockCorrectionPassive()) # noqa E501
3727
+ self.setChildElementOptionalIntegerValue(child_element, "MINISLOT-ACTION-POINT-OFFSET", cluster.getMinislotActionPointOffset())
3728
+ self.setChildElementOptionalIntegerValue(child_element, "MINISLOT-DURATION", cluster.getMinislotDuration())
3729
+ self.setChildElementOptionalIntegerValue(child_element, "NETWORK-IDLE-TIME", cluster.getNetworkIdleTime())
3730
+ self.setChildElementOptionalIntegerValue(child_element, "NETWORK-MANAGEMENT-VECTOR-LENGTH", cluster.getNetworkManagementVectorLength())
3731
+ self.setChildElementOptionalIntegerValue(child_element, "NUMBER-OF-MINISLOTS", cluster.getNumberOfMinislots())
3732
+ self.setChildElementOptionalIntegerValue(child_element, "NUMBER-OF-STATIC-SLOTS", cluster.getNumberOfStaticSlots())
3733
+ self.setChildElementOptionalIntegerValue(child_element, "OFFSET-CORRECTION-START", cluster.getOffsetCorrectionStart())
3734
+ self.setChildElementOptionalIntegerValue(child_element, "PAYLOAD-LENGTH-STATIC", cluster.getPayloadLengthStatic())
3735
+ self.setChildElementOptionalIntegerValue(child_element, "SAFETY-MARGIN", cluster.getSafetyMargin())
3736
+ self.setChildElementOptionalTimeValue(child_element, "SAMPLE-CLOCK-PERIOD", cluster.getSampleClockPeriod())
3737
+ self.setChildElementOptionalIntegerValue(child_element, "STATIC-SLOT-DURATION", cluster.getStaticSlotDuration())
3738
+ self.setChildElementOptionalIntegerValue(child_element, "SYNC-FRAME-ID-COUNT-MAX", cluster.getSyncFrameIdCountMax())
3739
+ self.setChildElementOptionalIntegerValue(child_element, "TRANSMISSION-START-SEQUENCE-DURATION", cluster.getTransmissionStartSequenceDuration()) # noqa E501
3740
+ self.setChildElementOptionalIntegerValue(child_element, "WAKEUP-RX-IDLE", cluster.getWakeupRxIdle())
3741
+ self.setChildElementOptionalIntegerValue(child_element, "WAKEUP-RX-LOW", cluster.getWakeupRxLow())
3742
+ self.setChildElementOptionalIntegerValue(child_element, "WAKEUP-RX-WINDOW", cluster.getWakeupRxWindow())
3743
+ self.setChildElementOptionalIntegerValue(child_element, "WAKEUP-TX-ACTIVE", cluster.getWakeupTxActive())
3744
+ self.setChildElementOptionalIntegerValue(child_element, "WAKEUP-TX-IDLE", cluster.getWakeupTxIdle())
2982
3745
 
2983
3746
  def writeMacMulticastGroup(self, element: ET.Element, group: MacMulticastGroup):
2984
3747
  if group is not None:
@@ -3044,27 +3807,28 @@ class ARXMLWriter(AbstractARXMLWriter):
3044
3807
  elif isinstance(port, ISignalPort):
3045
3808
  self.writeISignalPort(instances_tag, port)
3046
3809
  else:
3047
- self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
3810
+ self.notImplemented("Unsupported CommConnectorPort <%s>" % type(port))
3048
3811
 
3049
3812
  def writeCommunicationController(self, element: ET.Element, controller: CommunicationController):
3050
3813
  self.setChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED", controller.getWakeUpByControllerSupported())
3051
3814
 
3052
3815
  def setCanControllerFdConfiguration(self, element: ET.Element, key: str, configuration: CanControllerFdConfiguration):
3053
3816
  if configuration is not None:
3054
- child_element = ET.SubElement(element, key)
3055
- #TODO: need to implemented
3817
+ pass
3818
+ # child_element = ET.SubElement(element, key)
3819
+ # TODO: need to implemented
3056
3820
 
3057
3821
  def setCanControllerFdConfigurationRequirements(self, element: ET.Element, key: str, requirements: CanControllerFdConfigurationRequirements):
3058
3822
  if requirements is not None:
3059
3823
  child_element = ET.SubElement(element, key)
3060
- self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3824
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit()) # noqa E501
3061
3825
  self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3062
3826
  self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3063
- self.setChildElementOptionalTimeValue(child_element, "MAX-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMaxTrcvDelayCompensationOffset())
3064
- self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3827
+ self.setChildElementOptionalTimeValue(child_element, "MAX-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMaxTrcvDelayCompensationOffset()) # noqa E501
3828
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit()) # noqa E501
3065
3829
  self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3066
3830
  self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3067
- self.setChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMinTrcvDelayCompensationOffset())
3831
+ self.setChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMinTrcvDelayCompensationOffset()) # noqa E501
3068
3832
  self.setChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH", requirements.getTxBitRateSwitch())
3069
3833
 
3070
3834
  def writeAbstractCanCommunicationControllerAttributes(self, element: ET.Element, attributes: AbstractCanCommunicationControllerAttributes):
@@ -3075,10 +3839,10 @@ class ARXMLWriter(AbstractARXMLWriter):
3075
3839
  if requirements is not None:
3076
3840
  child_element = ET.SubElement(element, "CAN-CONTROLLER-CONFIGURATION-REQUIREMENTS")
3077
3841
  self.writeAbstractCanCommunicationControllerAttributes(child_element, requirements)
3078
- self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3842
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit()) # noqa E501
3079
3843
  self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3080
3844
  self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3081
- self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3845
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit()) # noqa E501
3082
3846
  self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3083
3847
  self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3084
3848
 
@@ -3089,7 +3853,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3089
3853
  if isinstance(attributes, CanControllerConfigurationRequirements):
3090
3854
  self.writeCanControllerConfigurationRequirements(child_element, attributes)
3091
3855
  else:
3092
- self.notImplemented("Unsupported CanControllerAttributes <%s>" % type(attributes))
3856
+ self.notImplemented("Unsupported CanControllerAttributes <%s>" % type(attributes))
3093
3857
 
3094
3858
  def writeAbstractCanCommunicationController(self, element: ET.Element, controller: AbstractCanCommunicationController):
3095
3859
  self.writeCommunicationController(element, controller)
@@ -3148,10 +3912,10 @@ class ARXMLWriter(AbstractARXMLWriter):
3148
3912
 
3149
3913
  def setCouplingPortDetails(self, element: ET.Element, key: str, details: CouplingPortDetails):
3150
3914
  if details is not None:
3151
- child_element = ET.SubElement(element, key)
3152
- self.writeCouplingPortDetailsCouplingPortStructuralElements(child_element, details)
3153
- self.writeCouplingPortDetailsEthernetPriorityRegenerations(child_element, details)
3154
- self.setChildElementOptionalRefType(child_element, "LAST-EGRESS-SCHEDULER-REF", details.getLastEgressSchedulerRef())
3915
+ child_element = ET.SubElement(element, key)
3916
+ self.writeCouplingPortDetailsCouplingPortStructuralElements(child_element, details)
3917
+ self.writeCouplingPortDetailsEthernetPriorityRegenerations(child_element, details)
3918
+ self.setChildElementOptionalRefType(child_element, "LAST-EGRESS-SCHEDULER-REF", details.getLastEgressSchedulerRef())
3155
3919
 
3156
3920
  def writeVlanMembership(self, element: ET.Element, membership: VlanMembership):
3157
3921
  if membership is not None:
@@ -3173,7 +3937,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3173
3937
  child_element = ET.SubElement(element, "COUPLING-PORT")
3174
3938
  self.writeIdentifiable(child_element, port)
3175
3939
  self.setCouplingPortDetails(child_element, "COUPLING-PORT-DETAILS", port.getCouplingPortDetails())
3176
- self.setChildElementOptionalLiteral(child_element, "MAC-LAYER-TYPE", port.getMacAddressVlanAssignments())
3940
+ self.setChildElementOptionalLiteral(child_element, "MAC-LAYER-TYPE", port.getMacLayerType())
3177
3941
  self.writeCouplingPortVlanMemberships(child_element, port)
3178
3942
 
3179
3943
  def writeEthernetCommunicationControllerCouplingPorts(self, element: ET.Element, controller: EthernetCommunicationController):
@@ -3206,6 +3970,8 @@ class ARXMLWriter(AbstractARXMLWriter):
3206
3970
  self.writeEthernetCommunicationController(child_element, controller)
3207
3971
  elif isinstance(controller, LinMaster):
3208
3972
  self.writeLinMaster(child_element, controller)
3973
+ elif isinstance(controller, FlexrayCommunicationController):
3974
+ self.writeFlexrayCommunicationController(child_element, controller)
3209
3975
  else:
3210
3976
  self.notImplemented("Unsupported Communication Controller <%s>" % type(controller))
3211
3977
 
@@ -3219,15 +3985,27 @@ class ARXMLWriter(AbstractARXMLWriter):
3219
3985
  self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
3220
3986
  self.writeCommunicationConnector(element, connector)
3221
3987
 
3988
+ def writeEthernetCommunicationConnectorNetworkEndpointRefs(self, element: ET.Element, connector: EthernetCommunicationConnector):
3989
+ refs = connector.getNetworkEndpointRefs()
3990
+ if len(refs) > 0:
3991
+ child_element = ET.SubElement(element, "NETWORK-ENDPOINT-REFS")
3992
+ for ref in refs:
3993
+ self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", ref)
3994
+
3222
3995
  def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
3223
3996
  self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
3224
3997
  self.writeCommunicationConnector(element, connector)
3225
3998
  self.setChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT", connector.getMaximumTransmissionUnit())
3999
+ self.writeEthernetCommunicationConnectorNetworkEndpointRefs(element, connector)
3226
4000
 
3227
4001
  def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
3228
4002
  self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
3229
4003
  self.writeCommunicationConnector(element, connector)
3230
4004
 
4005
+ def writeFlexrayCommunicationConnector(self, element: ET.Element, connector: FlexrayCommunicationConnector):
4006
+ self.logger.debug("Write FlexrayCommunicationConnector %s" % connector.getShortName())
4007
+ self.writeCommunicationConnector(element, connector)
4008
+
3231
4009
  def writeEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
3232
4010
  connectors = instance.getConnectors()
3233
4011
  if len(connectors) > 0:
@@ -3242,8 +4020,11 @@ class ARXMLWriter(AbstractARXMLWriter):
3242
4020
  elif isinstance(connector, LinCommunicationConnector):
3243
4021
  child_element = ET.SubElement(connectors_tag, "LIN-COMMUNICATION-CONNECTOR")
3244
4022
  self.writeLinCommunicationConnector(child_element, connector)
4023
+ elif isinstance(connector, FlexrayCommunicationConnector):
4024
+ child_element = ET.SubElement(connectors_tag, "FLEXRAY-COMMUNICATION-CONNECTOR")
4025
+ self.writeFlexrayCommunicationConnector(child_element, connector)
3245
4026
  else:
3246
- self._raiseError("Unsupported Communication connector <%s>" % type(connector))
4027
+ self.notImplemented("Unsupported Communication connector <%s>" % type(connector))
3247
4028
 
3248
4029
  def writeEcuInstanceAssociatedComIPduGroupRefs(self, element: ET.Element, instance: EcuInstance):
3249
4030
  refs = instance.getAssociatedComIPduGroupRefs()
@@ -3260,9 +4041,10 @@ class ARXMLWriter(AbstractARXMLWriter):
3260
4041
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-GW-TIME-BASE", instance.getComConfigurationGwTimeBase())
3261
4042
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-RX-TIME-BASE", instance.getComConfigurationRxTimeBase())
3262
4043
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-TX-TIME-BASE", instance.getComConfigurationTxTimeBase())
3263
- self.setChildElementOptionalBooleanValue(child_element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION", instance.getComEnableMDTForCyclicTransmission())
4044
+ self.setChildElementOptionalBooleanValue(child_element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION", instance.getComEnableMDTForCyclicTransmission()) # noqa E501
3264
4045
  self.writeEcuInstanceCommControllers(child_element, instance)
3265
4046
  self.writeEcuInstanceConnectors(child_element, instance)
4047
+ self.setChildElementOptionalIntegerValue(child_element, "DIAGNOSTIC-ADDRESS", instance.getDiagnosticAddress())
3266
4048
  self.setChildElementOptionalBooleanValue(child_element, "SLEEP-MODE-SUPPORTED", instance.getSleepModeSupported())
3267
4049
  self.setChildElementOptionalBooleanValue(child_element, "WAKE-UP-OVER-BUS-SUPPORTED", instance.getWakeUpOverBusSupported())
3268
4050
 
@@ -3276,16 +4058,53 @@ class ARXMLWriter(AbstractARXMLWriter):
3276
4058
  for signal_ref in signal_refs:
3277
4059
  self.setChildElementOptionalRefType(signal_refs_tag, "SYSTEM-SIGNAL-REF", signal_ref)
3278
4060
 
3279
- def setSenderReceiverToSignalMapping(self, element: ET.Element, mapping: SenderReceiverToSignalMapping):
4061
+ def writeSenderReceiverToSignalMapping(self, element: ET.Element, mapping: SenderReceiverToSignalMapping):
3280
4062
  child_element = ET.SubElement(element, "SENDER-RECEIVER-TO-SIGNAL-MAPPING")
3281
4063
  self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-DIRECTION", mapping.getCommunicationDirection())
3282
4064
  self.setVariableDataPrototypeInSystemInstanceRef(child_element, "DATA-ELEMENT-IREF", mapping.getDataElementIRef())
3283
4065
  self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", mapping.getSystemSignalRef())
3284
4066
 
3285
- def setSenderReceiverToSignalGroupMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
4067
+ def writeSenderRecCompositeTypeMapping(self, element: ET.Element, mapping: SenderRecCompositeTypeMapping):
4068
+ self.writeARObjectAttributes(element, mapping)
4069
+
4070
+ def writeSenderRecRecordElementMapping(self, element: ET.Element, mapping: SenderRecRecordElementMapping):
4071
+ if mapping is not None:
4072
+ child_element = ET.SubElement(element, "SENDER-REC-RECORD-ELEMENT-MAPPING")
4073
+ self.writeARObjectAttributes(child_element, mapping)
4074
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-RECORD-ELEMENT-REF", mapping.getApplicationRecordElementRef())
4075
+ self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-RECORD-ELEMENT-REF", mapping.getImplementationRecordElementRef())
4076
+ self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", mapping.getSystemSignalRef())
4077
+
4078
+ def writeSenderRecArrayTypeMappingRecordElementMapping(self, element: ET.Element, mapping: SenderRecRecordTypeMapping):
4079
+ record_element_mappings = mapping.getRecordElementMappings()
4080
+ if len(record_element_mappings) > 0:
4081
+ child_element = ET.SubElement(element, "RECORD-ELEMENT-MAPPINGS")
4082
+ for record_element_mapping in record_element_mappings:
4083
+ if isinstance(record_element_mapping, SenderRecRecordElementMapping):
4084
+ self.writeSenderRecRecordElementMapping(child_element, record_element_mapping)
4085
+ else:
4086
+ self.notImplemented("Unsupported RecordElementMapping %s" % type(record_element_mapping))
4087
+
4088
+ def writeSenderRecRecordTypeMapping(self, element: ET.Element, mapping: SenderRecRecordTypeMapping):
4089
+ if mapping is not None:
4090
+ child_element = ET.SubElement(element, "SENDER-REC-RECORD-TYPE-MAPPING")
4091
+ self.writeSenderRecCompositeTypeMapping(child_element, mapping)
4092
+ self.writeSenderRecArrayTypeMappingRecordElementMapping(child_element, mapping)
4093
+
4094
+ def writeSenderReceiverToSignalGroupMappingTypeMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
4095
+ type_mapping = mapping.getTypeMapping()
4096
+ if type_mapping is not None:
4097
+ child_element = ET.SubElement(element, "TYPE-MAPPING")
4098
+ if isinstance(type_mapping, SenderRecRecordTypeMapping):
4099
+ self.writeSenderRecRecordTypeMapping(child_element, type_mapping)
4100
+ else:
4101
+ self.notImplemented("Unsupported Type Mapping %s" % type(type_mapping))
4102
+
4103
+ def writeSenderReceiverToSignalGroupMapping(self, element: ET.Element, mapping: SenderReceiverToSignalGroupMapping):
3286
4104
  child_element = ET.SubElement(element, "SENDER-RECEIVER-TO-SIGNAL-GROUP-MAPPING")
3287
4105
  self.setVariableDataPrototypeInSystemInstanceRef(child_element, "DATA-ELEMENT-IREF", mapping.getDataElementIRef())
3288
4106
  self.setChildElementOptionalRefType(child_element, "SIGNAL-GROUP-REF", mapping.getSignalGroupRef())
4107
+ self.writeSenderReceiverToSignalGroupMappingTypeMapping(child_element, mapping)
3289
4108
 
3290
4109
  def writeSystemMappingDataMappings(self, element: ET.Element, system_mapping: SystemMapping):
3291
4110
  data_mappings = system_mapping.getDataMappings()
@@ -3293,9 +4112,9 @@ class ARXMLWriter(AbstractARXMLWriter):
3293
4112
  child_element = ET.SubElement(element, "DATA-MAPPINGS")
3294
4113
  for data_mapping in data_mappings:
3295
4114
  if isinstance(data_mapping, SenderReceiverToSignalMapping):
3296
- self.setSenderReceiverToSignalMapping(child_element, data_mapping)
4115
+ self.writeSenderReceiverToSignalMapping(child_element, data_mapping)
3297
4116
  elif isinstance(data_mapping, SenderReceiverToSignalGroupMapping):
3298
- self.setSenderReceiverToSignalGroupMapping(child_element, data_mapping)
4117
+ self.writeSenderReceiverToSignalGroupMapping(child_element, data_mapping)
3299
4118
  else:
3300
4119
  self.notImplemented("Unsupported Data Mapping %s" % type(data_mapping))
3301
4120
 
@@ -3319,11 +4138,52 @@ class ARXMLWriter(AbstractARXMLWriter):
3319
4138
  else:
3320
4139
  self.notImplemented("Unsupported Sw Mapping %s" % type(sw_mapping))
3321
4140
 
4141
+ def writeEcuMapping(self, element: ET.Element, mapping: ECUMapping):
4142
+ self.logger.debug("Write ECUMapping <%s>" % mapping.getShortName())
4143
+ if mapping is not None:
4144
+ child_element = ET.SubElement(element, "ECU-MAPPING")
4145
+ self.writeIdentifiable(child_element, mapping)
4146
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", mapping.getEcuInstanceRef())
4147
+ self.setChildElementOptionalRefType(child_element, "ECU-REF", mapping.getEcuRef())
4148
+
4149
+ def writeSystemMappingEcuResourceMappings(self, element: ET.Element, mapping: SystemMapping):
4150
+ ecu_resource_mappings = mapping.getEcuResourceMappings()
4151
+ if len(ecu_resource_mappings) > 0:
4152
+ child_element = ET.SubElement(element, "ECU-RESOURCE-MAPPINGS")
4153
+ for ecu_resource_mapping in ecu_resource_mappings:
4154
+ if isinstance(ecu_resource_mapping, ECUMapping):
4155
+ self.writeEcuMapping(child_element, ecu_resource_mapping)
4156
+ else:
4157
+ self.notImplemented("Unsupported Sw Mapping %s" % type(ecu_resource_mapping))
4158
+
4159
+ def writeSwcToImplMapping(self, element: ET.Element, mapping: SwcToImplMapping):
4160
+ if mapping is not None:
4161
+ child_element = ET.SubElement(element, "SWC-TO-IMPL-MAPPING")
4162
+ self.writeIdentifiable(child_element, mapping)
4163
+ self.setChildElementOptionalRefType(child_element, "COMPONENT-IMPLEMENTATION-REF", mapping.getComponentImplementationRef())
4164
+ irefs = mapping.getComponentIRefs()
4165
+ if len(irefs) > 0:
4166
+ irefs_tag = ET.SubElement(child_element, "COMPONENT-IREFS")
4167
+ for iref in irefs:
4168
+ self.setComponentInSystemInstanceRef(irefs_tag, "COMPONENT-IREF", iref)
4169
+
4170
+ def writeSystemMappingSwImplMappings(self, element: ET.Element, mapping: SystemMapping):
4171
+ sw_impl_mappings = mapping.getSwImplMappings()
4172
+ if len(sw_impl_mappings) > 0:
4173
+ child_element = ET.SubElement(element, "SW-IMPL-MAPPINGS")
4174
+ for sw_impl_mapping in sw_impl_mappings:
4175
+ if isinstance(sw_impl_mapping, SwcToImplMapping):
4176
+ self.writeSwcToImplMapping(child_element, sw_impl_mapping)
4177
+ else:
4178
+ self.notImplemented("Unsupported SwImplMapping <%s>" % type(sw_impl_mapping))
4179
+
3322
4180
  def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
3323
- self.logger.debug("Write SystemMapping %s" % mapping.getShortName())
4181
+ self.logger.debug("Write SystemMapping <%s>" % mapping.getShortName())
3324
4182
  child_element = ET.SubElement(element, "SYSTEM-MAPPING")
3325
4183
  self.writeIdentifiable(child_element, mapping)
3326
4184
  self.writeSystemMappingDataMappings(child_element, mapping)
4185
+ self.writeSystemMappingEcuResourceMappings(child_element, mapping)
4186
+ self.writeSystemMappingSwImplMappings(child_element, mapping)
3327
4187
  self.writeSystemMappingSwMappings(child_element, mapping)
3328
4188
 
3329
4189
  def writeSystemMappings(self, element: ET.Element, system: System):
@@ -3368,9 +4228,12 @@ class ARXMLWriter(AbstractARXMLWriter):
3368
4228
  self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
3369
4229
  child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
3370
4230
  self.writeARElement(child_element, dimension)
3371
- self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3372
4231
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
4232
+ self.setChildElementOptionalNumericalValue(child_element, "LUMINOUS-INTENSITY-EXP", dimension.getLuminousIntensityExp())
4233
+ self.setChildElementOptionalNumericalValue(child_element, "MASS-EXP", dimension.getMassExp())
4234
+ self.setChildElementOptionalNumericalValue(child_element, "TEMPERATURE-EXP", dimension.getTemperatureExp())
3373
4235
  self.setChildElementOptionalNumericalValue(child_element, "TIME-EXP", dimension.getTimeExp())
4236
+ self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3374
4237
 
3375
4238
  def setFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
3376
4239
  self.logger.debug("Set FlatInstanceDescriptor %s" % desc.getShortName())
@@ -3474,7 +4337,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3474
4337
  ecuc_values_tag = ET.SubElement(element, "ECUC-VALUES")
3475
4338
  for value_ref in value_refs:
3476
4339
  child_element = ET.SubElement(ecuc_values_tag, "ECUC-MODULE-CONFIGURATION-VALUES-REF-CONDITIONAL")
3477
- self.setChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF", value_ref)
4340
+ self.setChildElementOptionalRefType(child_element, "ECUC-MODULE-CONFIGURATION-VALUES-REF", value_ref)
3478
4341
 
3479
4342
  def writeEcucValueCollection(self, element: ET.Element, collection: EcucValueCollection):
3480
4343
  self.logger.debug("EcucValueCollection %s" % collection.getShortName())
@@ -3491,7 +4354,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3491
4354
  if isinstance(sub_container, EcucContainerValue):
3492
4355
  self.writeEcucContainValue(sub_containers_tag, sub_container)
3493
4356
  else:
3494
- self.notImplemented("Unsupported Sub Container %s" % type(container))
4357
+ self.notImplemented("Unsupported Sub Container %s" % type(container))
3495
4358
 
3496
4359
  def writeEcucParameterValue(self, element: ET.Element, param_value: EcucParameterValue):
3497
4360
  self.setChildElementOptionalRefType(element, "DEFINITION-REF", param_value.getDefinitionRef())
@@ -3510,7 +4373,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3510
4373
  def writeEcucContainerValueParameterValues(self, element: ET.Element, container_value: EcucContainerValue):
3511
4374
  param_values = container_value.getParameterValues()
3512
4375
  if len(param_values) > 0:
3513
- child_element = ET.SubElement(element, "PARAMETER-VALUES")
4376
+ child_element = ET.SubElement(element, "PARAMETER-VALUES")
3514
4377
  for param_value in param_values:
3515
4378
  if isinstance(param_value, EcucTextualParamValue):
3516
4379
  self.setEcucTextualParamValue(child_element, param_value)
@@ -3523,7 +4386,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3523
4386
  self.setChildElementOptionalRefType(element, "DEFINITION-REF", value.getDefinitionRef())
3524
4387
  self.setAnnotations(element, value.getAnnotations())
3525
4388
 
3526
- def setEcucReferenceValue(self, element: ET.Element, value = EcucReferenceValue()):
4389
+ def setEcucReferenceValue(self, element: ET.Element, value=EcucReferenceValue()):
3527
4390
  child_element = ET.SubElement(element, "ECUC-REFERENCE-VALUE")
3528
4391
  self.writeEcucAbstractReferenceValue(child_element, value)
3529
4392
  self.setChildElementOptionalRefType(child_element, "VALUE-REF", value.getValueRef())
@@ -3532,13 +4395,13 @@ class ARXMLWriter(AbstractARXMLWriter):
3532
4395
  def setAnyInstanceRef(self, element: ET.Element, key, instance_ref: AnyInstanceRef):
3533
4396
  if instance_ref is not None:
3534
4397
  child_element = ET.SubElement(element, key)
3535
- self.setChildElementOptionalRefType(child_element, "BASE-REF", instance_ref.getBaseRef())
4398
+ self.setChildElementOptionalRefType(child_element, "BASE-REF", instance_ref.getBaseRef())
3536
4399
  for ref in instance_ref.getContextElementRefs():
3537
4400
  self.setChildElementOptionalRefType(child_element, "CONTEXT-ELEMENT-REF", ref)
3538
4401
  self.setChildElementOptionalRefType(child_element, "TARGET-REF", instance_ref.getTargetRef())
3539
4402
  return instance_ref
3540
4403
 
3541
- def setEcucInstanceReferenceValue(self, element: ET.Element, value : EcucInstanceReferenceValue):
4404
+ def setEcucInstanceReferenceValue(self, element: ET.Element, value: EcucInstanceReferenceValue):
3542
4405
  child_element = ET.SubElement(element, "ECUC-INSTANCE-REFERENCE-VALUE")
3543
4406
  self.writeEcucAbstractReferenceValue(child_element, value)
3544
4407
  self.setAnyInstanceRef(child_element, "VALUE-IREF", value.getValueIRef())
@@ -3547,7 +4410,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3547
4410
  def writeEcucContainerValueReferenceValues(self, element: ET.Element, container_value: EcucContainerValue):
3548
4411
  reference_values = container_value.getReferenceValues()
3549
4412
  if len(reference_values) > 0:
3550
- child_element = ET.SubElement(element, "REFERENCE-VALUES")
4413
+ child_element = ET.SubElement(element, "REFERENCE-VALUES")
3551
4414
  for reference_value in reference_values:
3552
4415
  if isinstance(reference_value, EcucReferenceValue):
3553
4416
  self.setEcucReferenceValue(child_element, reference_value)
@@ -3573,7 +4436,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3573
4436
  if isinstance(container, EcucContainerValue):
3574
4437
  self.writeEcucContainValue(containers_tag, container)
3575
4438
  else:
3576
- self.notImplemented("Unsupported Container %s" % type(container))
4439
+ self.notImplemented("Unsupported Container %s" % type(container))
3577
4440
 
3578
4441
  def writeEcucModuleConfigurationValues(self, element: ET.Element, values: EcucModuleConfigurationValues):
3579
4442
  self.logger.debug("EcucModuleConfigurationValues %s" % values.getShortName())
@@ -3584,16 +4447,58 @@ class ARXMLWriter(AbstractARXMLWriter):
3584
4447
  self.setChildElementOptionalRefType(child_element, "MODULE-DESCRIPTION-REF", values.getModuleDescriptionRef())
3585
4448
  self.writeEcucModuleConfigurationValuesContainers(child_element, values)
3586
4449
 
4450
+ def writeISignalGroupISignalRef(self, element: ET.Element, group: ISignalGroup):
4451
+ signal_refs = group.getISignalRefs()
4452
+ if len(signal_refs) > 0:
4453
+ child_element = ET.SubElement(element, "I-SIGNAL-REFS")
4454
+ for signal_ref in signal_refs:
4455
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", signal_ref)
4456
+
4457
+ def writeISignalGroupComBasedSignalGroupTransformation(self, element: ET.Element, group: ISignalGroup):
4458
+ refs = group.getComBasedSignalGroupTransformationRefs()
4459
+ if len(refs) > 0:
4460
+ com_based_element = ET.SubElement(element, "COM-BASED-SIGNAL-GROUP-TRANSFORMATIONS")
4461
+ cond_element = ET.SubElement(com_based_element, "DATA-TRANSFORMATION-REF-CONDITIONAL")
4462
+ for ref in refs:
4463
+ self.setChildElementOptionalRefType(cond_element, "DATA-TRANSFORMATION-REF", ref)
4464
+
4465
+ def writeTransformationISignalProps(self, element: ET.Element, props: TransformationISignalProps):
4466
+ self.writeDescribable(element, props)
4467
+
4468
+ def writeEndToEndTransformationISignalPropsDataIds(self, element: ET.Element, props: EndToEndTransformationISignalProps):
4469
+ ids = props.getDataIds()
4470
+ if len(ids) > 0:
4471
+ child_element = ET.SubElement(element, "DATA-IDS")
4472
+ for id in ids:
4473
+ self.setChildElementOptionalPositiveInteger(child_element, "DATA-ID", id)
4474
+
4475
+ def writeEndToEndTransformationISignalProps(self, element: ET.Element, props: EndToEndTransformationISignalProps):
4476
+ if props is not None:
4477
+ props_element = ET.SubElement(element, "END-TO-END-TRANSFORMATION-I-SIGNAL-PROPS")
4478
+ variant_element = ET.SubElement(props_element, "END-TO-END-TRANSFORMATION-I-SIGNAL-PROPS-VARIANTS")
4479
+ child_element = ET.SubElement(variant_element, "END-TO-END-TRANSFORMATION-I-SIGNAL-PROPS-CONDITIONAL")
4480
+ self.writeTransformationISignalProps(child_element, props)
4481
+ self.setChildElementOptionalRefType(child_element, "TRANSFORMER-REF", props.getTransformerRef())
4482
+ self.writeEndToEndTransformationISignalPropsDataIds(child_element, props)
4483
+ self.setChildElementOptionalPositiveInteger(child_element, "DATA-LENGTH", props.getDataLength())
4484
+
4485
+ def writeISignalGroupTransformationISignalProps(self, element: ET.Element, group: ISignalGroup):
4486
+ props = group.getTransformationISignalProps()
4487
+ if props is not None:
4488
+ child_element = ET.SubElement(element, "TRANSFORMATION-I-SIGNAL-PROPSS")
4489
+ if isinstance(props, EndToEndTransformationISignalProps):
4490
+ self.writeEndToEndTransformationISignalProps(child_element, props)
4491
+ else:
4492
+ self.notImplemented("Unsupported TransformationISignalProps %s" % type(props))
4493
+
3587
4494
  def writeISignalGroup(self, element: ET.Element, group: ISignalGroup):
3588
4495
  self.logger.debug("ISignalGroup %s" % group.getShortName())
3589
4496
  child_element = ET.SubElement(element, "I-SIGNAL-GROUP")
3590
4497
  self.writeIdentifiable(child_element, group)
3591
- signal_refs = group.getISignalRefs()
3592
- if len(signal_refs) > 0:
3593
- signal_refs_tag = ET.SubElement(child_element, "I-SIGNAL-REFS")
3594
- for signal_ref in signal_refs:
3595
- self.setChildElementOptionalRefType(signal_refs_tag, "I-SIGNAL-REF", signal_ref)
4498
+ self.writeISignalGroupComBasedSignalGroupTransformation(child_element, group)
4499
+ self.writeISignalGroupISignalRef(child_element, group)
3596
4500
  self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-GROUP-REF", group.getSystemSignalGroupRef())
4501
+ self.writeISignalGroupTransformationISignalProps(child_element, group)
3597
4502
 
3598
4503
  def writeISignalIPduGroup(self, element: ET.Element, group: ISignalIPduGroup):
3599
4504
  self.logger.debug("Set ISignalIPduGroup %s" % group.getShortName())
@@ -3660,52 +4565,265 @@ class ARXMLWriter(AbstractARXMLWriter):
3660
4565
  self.writeDiagnosticServiceTableDiagnosticConnectionRefs(child_element, table)
3661
4566
  self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", table.getEcuInstanceRef())
3662
4567
 
3663
- def writeMultiplexedIPdu(self, element: ET.Element, i_pdu: MultiplexedIPdu):
3664
- self.logger.debug("Write MultiplexedIPdu %s" % i_pdu.getShortName())
3665
- child_element = ET.SubElement(element, "MULTIPLEXED-I-PDU")
3666
- self.writeIdentifiable(child_element, i_pdu)
4568
+ def writePdu(self, element: ET.Element, pdu: Pdu):
4569
+ self.writeIdentifiable(element, pdu)
4570
+ self.setChildElementOptionalBooleanValue(element, "HAS-DYNAMIC-LENGTH", pdu.getHasDynamicLength())
4571
+ self.setChildElementOptionalNumericalValue(element, "LENGTH", pdu.getLength())
3667
4572
 
3668
- def writeUserDefinedIPdu(self, element: ET.Element, i_pdu: UserDefinedIPdu):
3669
- self.logger.debug("Write UserDefinedIPdu %s" % i_pdu.getShortName())
4573
+ def writeIPdu(self, element: ET.Element, pdu: IPdu):
4574
+ self.writePdu(element, pdu)
4575
+
4576
+ def writeSegmentPosition(self, element: ET.Element, position: SegmentPosition):
4577
+ if position is not None:
4578
+ child_element = ET.SubElement(element, "SEGMENT-POSITION")
4579
+ self.setChildElementOptionalLiteral(child_element, "SEGMENT-BYTE-ORDER", position.getSegmentByteOrder())
4580
+ self.setChildElementOptionalIntegerValue(child_element, "SEGMENT-LENGTH", position.getSegmentLength())
4581
+ self.setChildElementOptionalIntegerValue(child_element, "SEGMENT-POSITION", position.getSegmentPosition())
4582
+
4583
+ def writeMultiplexedPartSegmentPositions(self, element: ET.Element, part: MultiplexedPart):
4584
+ positions = part.getSegmentPositions()
4585
+ if len(positions) > 0:
4586
+ child_element = ET.SubElement(element, "SEGMENT-POSITIONS")
4587
+ for position in positions:
4588
+ if isinstance(position, SegmentPosition):
4589
+ self.writeSegmentPosition(child_element, position)
4590
+ else:
4591
+ self.notImplemented("Unsupported DynamicPart <%s>" % type(position))
4592
+
4593
+ def writeMultiplexedPart(self, element: ET.Element, part: MultiplexedPart):
4594
+ self.writeMultiplexedPartSegmentPositions(element, part)
4595
+
4596
+ def writeDynamicPartAlternative(self, element: ET.Element, alternative: DynamicPartAlternative):
4597
+ if alternative is not None:
4598
+ child_element = ET.SubElement(element, "DYNAMIC-PART-ALTERNATIVE")
4599
+ self.setChildElementOptionalRefType(child_element, "I-PDU-REF", alternative.getIPduRef())
4600
+ self.setChildElementOptionalBooleanValue(child_element, "INITIAL-DYNAMIC-PART", alternative.getInitialDynamicPart())
4601
+ self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-CODE", alternative.getSelectorFieldCode())
4602
+
4603
+ def writeDynamicPartDynamicPartAlternatives(self, element: ET.Element, part: DynamicPart):
4604
+ alternatives = part.getDynamicPartAlternatives()
4605
+ if len(alternatives) > 0:
4606
+ child_element = ET.SubElement(element, "DYNAMIC-PART-ALTERNATIVES")
4607
+ for alternative in alternatives:
4608
+ if isinstance(alternative, DynamicPartAlternative):
4609
+ self.writeDynamicPartAlternative(child_element, alternative)
4610
+ else:
4611
+ self.notImplemented("Unsupported DynamicPartAlternative <%s>" % type(alternative))
4612
+
4613
+ def writeDynamicPart(self, element: ET.Element, part: DynamicPart):
4614
+ child_element = ET.SubElement(element, "DYNAMIC-PART")
4615
+ self.writeMultiplexedPart(child_element, part)
4616
+ self.writeDynamicPartDynamicPartAlternatives(child_element, part)
4617
+
4618
+ def writeMultiplexedIPduDynamicParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
4619
+ part = ipdu.getDynamicPart()
4620
+ if part is not None:
4621
+ child_element = ET.SubElement(element, "DYNAMIC-PARTS")
4622
+ if isinstance(part, DynamicPart):
4623
+ self.writeDynamicPart(child_element, part)
4624
+ else:
4625
+ self.notImplemented("Unsupported DynamicPart <%s>" % type(part))
4626
+
4627
+ def writeStaticPart(self, element: ET.Element, part: StaticPart):
4628
+ child_element = ET.SubElement(element, "STATIC-PART")
4629
+ self.writeMultiplexedPart(child_element, part)
4630
+ self.setChildElementOptionalRefType(child_element, "I-PDU-REF", part.getIPduRef())
4631
+
4632
+ def writeMultiplexedIPduStaticParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
4633
+ part = ipdu.getStaticPart()
4634
+ if part is not None:
4635
+ child_element = ET.SubElement(element, "STATIC-PARTS")
4636
+ if isinstance(part, StaticPart):
4637
+ self.writeStaticPart(child_element, part)
4638
+ else:
4639
+ self.notImplemented("Unsupported StaticPart <%s>" % type(part))
4640
+
4641
+ def writeMultiplexedIPdu(self, element: ET.Element, ipdu: MultiplexedIPdu):
4642
+ self.logger.debug("Write MultiplexedIPdu <%s>" % ipdu.getShortName())
4643
+ child_element = ET.SubElement(element, "MULTIPLEXED-I-PDU")
4644
+ self.writeIPdu(child_element, ipdu)
4645
+ self.writeMultiplexedIPduDynamicParts(child_element, ipdu)
4646
+ self.setChildElementOptionalLiteral(child_element, "SELECTOR-FIELD-BYTE-ORDER", ipdu.getSelectorFieldByteOrder())
4647
+ self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-LENGTH", ipdu.getSelectorFieldLength())
4648
+ self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-START-POSITION", ipdu.getSelectorFieldStartPosition())
4649
+ self.writeMultiplexedIPduStaticParts(child_element, ipdu)
4650
+ self.setChildElementOptionalLiteral(child_element, "TRIGGER-MODE", ipdu.getTriggerMode())
4651
+ self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", ipdu.getUnusedBitPattern())
4652
+
4653
+ def writeUserDefinedIPdu(self, element: ET.Element, ipdu: UserDefinedIPdu):
4654
+ self.logger.debug("Write UserDefinedIPdu <%s>" % ipdu.getShortName())
3670
4655
  child_element = ET.SubElement(element, "USER-DEFINED-I-PDU")
3671
- self.writeIdentifiable(child_element, i_pdu)
4656
+ self.writeIPdu(child_element, ipdu)
4657
+ self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", ipdu.getCddType())
3672
4658
 
3673
4659
  def writeUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
3674
- self.logger.debug("Write UserDefinedPdu %s" % pdu.getShortName())
4660
+ self.logger.debug("Write UserDefinedPdu <%s>" % pdu.getShortName())
3675
4661
  child_element = ET.SubElement(element, "USER-DEFINED-PDU")
3676
- self.writeIdentifiable(child_element, pdu)
4662
+ self.writePdu(child_element, pdu)
4663
+ self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", pdu.getCddType())
3677
4664
 
3678
4665
  def writeGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
3679
- self.logger.debug("Write GeneralPurposePdu %s" % pdu.getShortName())
4666
+ self.logger.debug("Write GeneralPurposePdu <%s>" % pdu.getShortName())
3680
4667
  child_element = ET.SubElement(element, "GENERAL-PURPOSE-PDU")
3681
- self.writeIdentifiable(child_element, pdu)
4668
+ self.writePdu(child_element, pdu)
3682
4669
 
3683
4670
  def writeGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
3684
- self.logger.debug("Write GeneralPurposeIPdu %s" % i_pdu.getShortName())
4671
+ self.logger.debug("Write GeneralPurposeIPdu <%s>" % i_pdu.getShortName())
3685
4672
  child_element = ET.SubElement(element, "GENERAL-PURPOSE-I-PDU")
3686
- self.writeIdentifiable(child_element, i_pdu)
4673
+ self.writeIPdu(child_element, i_pdu)
4674
+
4675
+ def writeSecureCommunicationAuthenticationProps(self, element: ET.Element, props: SecureCommunicationAuthenticationProps):
4676
+ chile_element = ET.SubElement(element, "SECURE-COMMUNICATION-AUTHENTICATION-PROPS")
4677
+ self.writeIdentifiable(chile_element, props)
4678
+ self.setChildElementOptionalLiteral(chile_element, "AUTH-ALGORITHM", props.getAuthAlgorithm())
4679
+ self.setChildElementOptionalPositiveInteger(chile_element, "AUTH-INFO-TX-LENGTH", props.getAuthInfoTxLength())
4680
+
4681
+ def writeSecureCommunicationPropsSetAuthenticationProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
4682
+ propses = props_set.getAuthenticationProps()
4683
+ if len(propses) > 0:
4684
+ child_element = ET.SubElement(element, "AUTHENTICATION-PROPSS")
4685
+ for props in propses:
4686
+ if isinstance(props, SecureCommunicationAuthenticationProps):
4687
+ self.writeSecureCommunicationAuthenticationProps(child_element, props)
4688
+ else:
4689
+ self.notImplemented("Unsupported AuthenticationProps <%s>" % type(props))
4690
+
4691
+ def writeSecureCommunicationFreshnessProps(self, element: ET.Element, props: SecureCommunicationFreshnessProps):
4692
+ child_element = ET.SubElement(element, "SECURE-COMMUNICATION-FRESHNESS-PROPS")
4693
+ self.writeIdentifiable(child_element, props)
4694
+ self.setChildElementOptionalLiteral(child_element, "FRESHNESS-VALUE-LENGTH", props.getFreshnessValueLength())
4695
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH", props.getFreshnessValueTxLength())
4696
+
4697
+ def writeSecureCommunicationPropsSetFreshnessProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
4698
+ propses = props_set.getFreshnessProps()
4699
+ if len(propses) > 0:
4700
+ child_element = ET.SubElement(element, "FRESHNESS-PROPSS")
4701
+ for props in propses:
4702
+ if isinstance(props, SecureCommunicationFreshnessProps):
4703
+ self.writeSecureCommunicationFreshnessProps(child_element, props)
4704
+ else:
4705
+ self.notImplemented("Unsupported FreshnessProps <%s>" % type(props))
3687
4706
 
3688
4707
  def writeSecureCommunicationPropsSet(self, element: ET.Element, set: SecureCommunicationPropsSet):
3689
4708
  self.logger.debug("Write SecureCommunicationPropsSet %s" % set.getShortName())
3690
4709
  child_element = ET.SubElement(element, "SECURE-COMMUNICATION-PROPS-SET")
3691
4710
  self.writeIdentifiable(child_element, set)
4711
+ self.writeSecureCommunicationPropsSetAuthenticationProps(child_element, set)
4712
+ self.writeSecureCommunicationPropsSetFreshnessProps(child_element, set)
3692
4713
 
3693
4714
  def writeSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
3694
- self.logger.debug("Write SoAdRoutingGroup %s" % group.getShortName())
4715
+ self.logger.debug("Write SoAdRoutingGroup <%s>" % group.getShortName())
3695
4716
  child_element = ET.SubElement(element, "SO-AD-ROUTING-GROUP")
3696
4717
  self.writeIdentifiable(child_element, group)
4718
+ self.setChildElementOptionalLiteral(child_element, "EVENT-GROUP-CONTROL-TYPE", group.getEventGroupControlType())
4719
+
4720
+ def writeDoIpLogicAddress(self, element: ET.Element, address: DoIpLogicAddress):
4721
+ if address is not None:
4722
+ child_element = ET.SubElement(element, "DO-IP-LOGIC-ADDRESS")
4723
+ self.writeIdentifiable(child_element, address)
4724
+ self.setChildElementOptionalIntegerValue(child_element, "ADDRESS", address.getAddress())
4725
+
4726
+ def writeDoIpTpConfigDoIpLogicAddresses(self, element: ET.Element, config: DoIpTpConfig):
4727
+ addresses = config.getDoIpLogicAddresses()
4728
+ if len(addresses) > 0:
4729
+ child_element = ET.SubElement(element, "DO-IP-LOGIC-ADDRESSS")
4730
+ for address in addresses:
4731
+ if isinstance(address, DoIpLogicAddress):
4732
+ self.writeDoIpLogicAddress(child_element, address)
4733
+ else:
4734
+ self.notImplemented("Unsupported DoIpLogicAddress <%s>" % type(address))
4735
+
4736
+ def writeDoIpTpConnection(self, element: ET.Element, connection: DoIpTpConnection):
4737
+ if connection is not None:
4738
+ child_element = ET.SubElement(element, "DO-IP-TP-CONNECTION")
4739
+ self.writeTpConnection(child_element, connection)
4740
+ self.setChildElementOptionalRefType(child_element, "DO-IP-SOURCE-ADDRESS-REF", connection.getDoIpSourceAddressRef())
4741
+ self.setChildElementOptionalRefType(child_element, "DO-IP-TARGET-ADDRESS-REF", connection.getDoIpTargetAddressRef())
4742
+ self.setChildElementOptionalRefType(child_element, "TP-SDU-REF", connection.getTpSduRef())
4743
+
4744
+ def writeDoIpTpConfigTpConnections(self, element: ET.Element, config: DoIpTpConfig):
4745
+ connections = config.getTpConnections()
4746
+ if len(connections) > 0:
4747
+ child_element = ET.SubElement(element, "TP-CONNECTIONS")
4748
+ for address in connections:
4749
+ if isinstance(address, DoIpTpConnection):
4750
+ self.writeDoIpTpConnection(child_element, address)
4751
+ else:
4752
+ self.notImplemented("Unsupported TpConnection <%s>" % type(address))
3697
4753
 
3698
4754
  def writeDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
3699
- self.logger.debug("Write DoIpTpConfig %s" % config.getShortName())
4755
+ self.logger.debug("Write DoIpTpConfig <%s>" % config.getShortName())
3700
4756
  child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
3701
- self.writeIdentifiable(child_element, config)
4757
+ self.writeTpConfig(child_element, config)
4758
+ self.writeDoIpTpConfigDoIpLogicAddresses(child_element, config)
4759
+ self.writeDoIpTpConfigTpConnections(child_element, config)
4760
+
4761
+ def writeHwDescriptionEntityHwCategoryRefs(self, element: ET.Element, entity: HwDescriptionEntity):
4762
+ refs = entity.getHwCategoryRefs()
4763
+ if len(refs) > 0:
4764
+ child_element = ET.SubElement(element, "HW-CATEGORY-REFS")
4765
+ for ref in refs:
4766
+ self.setChildElementOptionalRefType(child_element, "HW-CATEGORY-REF", ref)
4767
+
4768
+ def writeHwDescriptionEntity(self, element: ET.Element, entity: HwDescriptionEntity):
4769
+ self.writeARElement(element, entity)
4770
+ self.writeHwDescriptionEntityHwCategoryRefs(element, entity)
4771
+
4772
+ def writeHwPinGroup(self, element: ET.SubElement, pin_group: HwPinGroup):
4773
+ if pin_group is not None:
4774
+ child_element = ET.SubElement(element, "HW-PIN-GROUP")
4775
+ self.writeHwDescriptionEntity(child_element, pin_group)
4776
+
4777
+ def writeHwElementHwPinGroups(self, element: ET.Element, hw_element: HwElement):
4778
+ pin_groups = hw_element.getHwPinGroups()
4779
+ if len(pin_groups) > 0:
4780
+ child_element = ET.SubElement(element, "HW-PIN-GROUPS")
4781
+ for pin_group in pin_groups:
4782
+ if isinstance(pin_group, HwPinGroup):
4783
+ self.writeHwPinGroup(child_element, pin_group)
4784
+ else:
4785
+ self.notImplemented("Unsupported Hw Pin Group <%s>" % type(pin_group))
4786
+
4787
+ def writeHwElement(self, element: ET.Element, hw_element: HwElement):
4788
+ if hw_element is not None:
4789
+ self.logger.debug("Write HwElement <%s>" % hw_element.getShortName())
4790
+ child_element = ET.SubElement(element, "HW-ELEMENT")
4791
+ self.writeHwDescriptionEntity(child_element, hw_element)
4792
+ self.writeHwElementHwPinGroups(child_element, hw_element)
4793
+
4794
+ def writeHwAttributeDef(self, element: ET.Element, attribute_def: HwAttributeDef):
4795
+ if attribute_def is not None:
4796
+ child_element = ET.SubElement(element, "HW-ATTRIBUTE-DEF")
4797
+ self.writeIdentifiable(child_element, attribute_def)
4798
+ self.setChildElementOptionalRefType(child_element, "UNIT-REF", attribute_def.getUnitRef())
4799
+
4800
+ def writeHwCategoryHwAttributeDef(self, element: ET.Element, hw_category: HwCategory):
4801
+ attribute_defs = hw_category.getHwAttributeDefs()
4802
+ if len(attribute_defs) > 0:
4803
+ child_element = ET.SubElement(element, "HW-ATTRIBUTE-DEFS")
4804
+ for attribute_def in attribute_defs:
4805
+ if isinstance(attribute_def, HwAttributeDef):
4806
+ self.writeHwAttributeDef(child_element, attribute_def)
4807
+ else:
4808
+ self.notImplemented("Unsupported Hw Attribute Defs <%s>" % type(attribute_def))
4809
+
4810
+ def writeHwCategory(self, element: ET.Element, hw_category: HwCategory):
4811
+ self.logger.debug("write HwCategory <%s>" % hw_category.getShortName())
4812
+ child_element = ET.SubElement(element, "HW-CATEGORY")
4813
+ self.writeARElement(child_element, hw_category)
4814
+ self.writeHwCategoryHwAttributeDef(child_element, hw_category)
4815
+
4816
+ def writeHwType(self, element: ET.Element, type: HwType):
4817
+ self.logger.debug("Write HwType <%s>" % type.getShortName())
4818
+ child_element = ET.SubElement(element, "HW-TYPE")
4819
+ self.writeARElement(child_element, type)
3702
4820
 
3703
4821
  def writeLinCommunicationController(self, element: ET.Element, controller: LinCommunicationController):
3704
4822
  self.writeCommunicationController(element, controller)
3705
4823
  self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", controller.getProtocolVersion())
3706
4824
 
3707
4825
  def writeLinMaster(self, element: ET.Element, controller: LinMaster):
3708
- self.logger.debug("Write LinMaster %s" % controller.getShortName())
4826
+ self.logger.debug("Write LinMaster <%s>" % controller.getShortName())
3709
4827
  child_element = ET.SubElement(element, "LIN-MASTER")
3710
4828
  self.writeIdentifiable(child_element, controller)
3711
4829
  variants_tag = ET.SubElement(child_element, "LIN-MASTER-VARIANTS")
@@ -3732,17 +4850,19 @@ class ARXMLWriter(AbstractARXMLWriter):
3732
4850
  if filter is not None:
3733
4851
  child_element = ET.SubElement(element, key)
3734
4852
  self.setChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE", filter.getDataFilterType())
4853
+ self.setChildElementOptionalIntegerValue(child_element, "MASK", filter.getMask())
4854
+ self.setChildElementOptionalIntegerValue(child_element, "X", filter.getX())
3735
4855
 
3736
- def setTransmissionModeConditions(self, element: ET.Element, conditions: List[TransmissionModeCondition]):
4856
+ def setTransmissionModeConditions(self, element: ET.Element, key: str, conditions: List[TransmissionModeCondition]):
3737
4857
  if len(conditions) > 0:
3738
- conditions_tag = ET.SubElement(element, "TRANSMISSION-MODE-CONDITIONS")
4858
+ conditions_tag = ET.SubElement(element, key)
3739
4859
  for condition in conditions:
3740
4860
  child_element = ET.SubElement(conditions_tag, "TRANSMISSION-MODE-CONDITION")
3741
4861
  self.setDataFilter(child_element, "DATA-FILTER", condition.getDataFilter())
3742
4862
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-IN-I-PDU-REF", condition.getISignalInIPduRef())
3743
4863
 
3744
4864
  def setTimeRangeType(self, element: ET.Element, key: str, time_range: TimeRangeType):
3745
- if time_range is not None:
4865
+ if time_range is not None:
3746
4866
  child_element = ET.SubElement(element, key)
3747
4867
  self.setChildElementOptionalTimeValue(child_element, "VALUE", time_range.getValue())
3748
4868
 
@@ -3751,12 +4871,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3751
4871
  child_element = ET.SubElement(element, key)
3752
4872
  self.setChildElementOptionalIntegerValue(child_element, "NUMBER-OF-REPETITIONS", timing.getNumberOfRepetitions())
3753
4873
  self.setTimeRangeType(child_element, "REPETITION-PERIOD", timing.getRepetitionPeriod())
3754
-
3755
- def setTimeRangeType(self, element: ET.Element, key: str, time_range: TimeRangeType):
3756
- if time_range is not None:
3757
- child_element = ET.SubElement(element, key)
3758
- self.setChildElementOptionalTimeValue(child_element, "VALUE", time_range.getValue())
3759
-
4874
+
3760
4875
  def setCyclicTiming(self, element: ET.Element, key: str, timing: CyclicTiming):
3761
4876
  if timing is not None:
3762
4877
  child_element = ET.SubElement(element, key)
@@ -3770,10 +4885,11 @@ class ARXMLWriter(AbstractARXMLWriter):
3770
4885
  self.setCyclicTiming(child_element, "CYCLIC-TIMING", timing.getCyclicTiming())
3771
4886
  self.setEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING", timing.getEventControlledTiming())
3772
4887
 
3773
- def setTransmissionModeDeclaration(self, element: ET.Element, key: str, decl : TransmissionModeDeclaration):
4888
+ def setTransmissionModeDeclaration(self, element: ET.Element, key: str, decl: TransmissionModeDeclaration):
3774
4889
  if decl is not None:
3775
4890
  child_element = ET.SubElement(element, key)
3776
- self.setTransmissionModeConditions(child_element, decl.getTransmissionModeConditions())
4891
+ self.setTransmissionModeConditions(child_element, "TRANSMISSION-MODE-CONDITIONS", decl.getTransmissionModeConditions())
4892
+ self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-FALSE-TIMING", decl.getTransmissionModeFalseTiming())
3777
4893
  self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING", decl.getTransmissionModeTrueTiming())
3778
4894
 
3779
4895
  def setISignalIPduIPduTimingSpecification(self, element: ET.Element, timing: IPduTiming):
@@ -3783,14 +4899,152 @@ class ARXMLWriter(AbstractARXMLWriter):
3783
4899
  self.setChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY", timing.getMinimumDelay())
3784
4900
  self.setTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION", timing.getTransmissionModeDeclaration())
3785
4901
 
3786
- def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
3787
- self.logger.debug("ISignalIPdu %s" % i_pdu.getShortName())
4902
+ def writeISignalIPdu(self, element: ET.Element, ipdu: ISignalIPdu):
4903
+ self.logger.debug("ISignalIPdu %s" % ipdu.getShortName())
3788
4904
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
3789
- self.writeIdentifiable(child_element, i_pdu)
3790
- self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
3791
- self.setISignalIPduIPduTimingSpecification(child_element, i_pdu.getIPduTimingSpecification())
3792
- self.writeISignalToPduMappings(child_element, i_pdu)
3793
- self.setChildElementOptionalLiteral(child_element, "UNUSED-BIT-PATTERN", i_pdu.getUnusedBitPattern())
4905
+ self.writeIdentifiable(child_element, ipdu)
4906
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH", ipdu.getLength())
4907
+ self.setISignalIPduIPduTimingSpecification(child_element, ipdu.getIPduTimingSpecification())
4908
+ self.writeISignalToPduMappings(child_element, ipdu)
4909
+ self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", ipdu.getUnusedBitPattern())
4910
+
4911
+ def writeFlexrayFrame(self, element: ET.Element, frame: FlexrayFrame):
4912
+ if frame is not None:
4913
+ self.logger.debug("Write FlexrayFrame <%s>" % frame.getShortName())
4914
+ child_element = ET.SubElement(element, "FLEXRAY-FRAME")
4915
+ self.writeFrame(child_element, frame)
4916
+
4917
+ def writeFlexrayCommunicationController(self, element: ET.Element, controller: FlexrayCommunicationController):
4918
+ if controller is not None:
4919
+ self.logger.debug("Write FlexrayCommunicationController <%s>" % controller.getShortName())
4920
+ controller_element = ET.SubElement(element, "FLEXRAY-COMMUNICATION-CONTROLLER")
4921
+ self.writeIdentifiable(controller_element, controller)
4922
+ variant_element = ET.SubElement(controller_element, "FLEXRAY-COMMUNICATION-CONTROLLER-VARIANTS")
4923
+ child_element = ET.SubElement(variant_element, "FLEXRAY-COMMUNICATION-CONTROLLER-CONDITIONAL")
4924
+ self.writeCommunicationController(controller_element, controller)
4925
+ self.setChildElementOptionalIntegerValue(child_element, "ACCEPTED-STARTUP-RANGE", controller.getAcceptedStartupRange())
4926
+ self.setChildElementOptionalBooleanValue(child_element, "ALLOW-HALT-DUE-TO-CLOCK", controller.getAllowHaltDueToClock())
4927
+ self.setChildElementOptionalIntegerValue(child_element, "ALLOW-PASSIVE-TO-ACTIVE", controller.getAllowPassiveToActive())
4928
+ self.setChildElementOptionalIntegerValue(child_element, "CLUSTER-DRIFT-DAMPING", controller.getClusterDriftDamping())
4929
+ self.setChildElementOptionalIntegerValue(child_element, "DECODING-CORRECTION", controller.getDecodingCorrection())
4930
+ self.setChildElementOptionalIntegerValue(child_element, "DELAY-COMPENSATION-A", controller.getDelayCompensationA())
4931
+ self.setChildElementOptionalIntegerValue(child_element, "DELAY-COMPENSATION-B", controller.getDelayCompensationB())
4932
+ self.setChildElementOptionalBooleanValue(child_element, "KEY-SLOT-ONLY-ENABLED", controller.getKeySlotOnlyEnabled())
4933
+ self.setChildElementOptionalBooleanValue(child_element, "KEY-SLOT-USED-FOR-START-UP", controller.getKeySlotUsedForStartUp())
4934
+ self.setChildElementOptionalBooleanValue(child_element, "KEY-SLOT-USED-FOR-SYNC", controller.getKeySlotUsedForSync())
4935
+ self.setChildElementOptionalIntegerValue(child_element, "LATEST-TX", controller.getLatestTX())
4936
+ self.setChildElementOptionalIntegerValue(child_element, "LISTEN-TIMEOUT", controller.getListenTimeout())
4937
+ self.setChildElementOptionalIntegerValue(child_element, "MACRO-INITIAL-OFFSET-A", controller.getMacroInitialOffsetA())
4938
+ self.setChildElementOptionalIntegerValue(child_element, "MACRO-INITIAL-OFFSET-B", controller.getMacroInitialOffsetB())
4939
+ self.setChildElementOptionalIntegerValue(child_element, "MAXIMUM-DYNAMIC-PAYLOAD-LENGTH", controller.getMaximumDynamicPayloadLength())
4940
+ self.setChildElementOptionalIntegerValue(child_element, "MICRO-INITIAL-OFFSET-A", controller.getMicroInitialOffsetA())
4941
+ self.setChildElementOptionalIntegerValue(child_element, "MICRO-INITIAL-OFFSET-B", controller.getMicroInitialOffsetB())
4942
+ self.setChildElementOptionalIntegerValue(child_element, "MICRO-PER-CYCLE", controller.getMicroPerCycle())
4943
+ self.setChildElementOptionalTimeValue(child_element, "MICROTICK-DURATION", controller.getMicrotickDuration())
4944
+ self.setChildElementOptionalIntegerValue(child_element, "OFFSET-CORRECTION-OUT", controller.getOffsetCorrectionOut())
4945
+ self.setChildElementOptionalIntegerValue(child_element, "RATE-CORRECTION-OUT", controller.getRateCorrectionOut())
4946
+ self.setChildElementOptionalIntegerValue(child_element, "SAMPLES-PER-MICROTICK", controller.getSamplesPerMicrotick())
4947
+ self.setChildElementOptionalIntegerValue(child_element, "WAKE-UP-PATTERN", controller.getWakeUpPattern())
4948
+
4949
+ def writeDataTransformationTransformerChainRefs(self, element: ET.Element, dtf: DataTransformation):
4950
+ refs = dtf.getTransformerChainRefs()
4951
+ if len(refs) > 0:
4952
+ child_element = ET.SubElement(element, "TRANSFORMER-CHAIN-REFS")
4953
+ for ref in refs:
4954
+ self.setChildElementOptionalRefType(child_element, "TRANSFORMER-CHAIN-REF", ref)
4955
+
4956
+ def writeDataTransformation(self, element: ET.Element, dtf: DataTransformation):
4957
+ if dtf is not None:
4958
+ child_element = ET.SubElement(element, "DATA-TRANSFORMATION")
4959
+ self.writeIdentifiable(child_element, dtf)
4960
+ self.setChildElementOptionalBooleanValue(child_element, "EXECUTE-DESPITE-DATA-UNAVAILABILITY", dtf.getExecuteDespiteDataUnavailability())
4961
+ self.writeDataTransformationTransformerChainRefs(child_element, dtf)
4962
+
4963
+ def writeDataTransformationSetDataTransformations(self, element: ET.Element, dtf_set: DataTransformationSet):
4964
+ dtfs = dtf_set.getDataTransformations()
4965
+ if len(dtfs) > 0:
4966
+ child_element = ET.SubElement(element, "DATA-TRANSFORMATIONS")
4967
+ for dtf in dtfs:
4968
+ if isinstance(dtf, DataTransformation):
4969
+ self.writeDataTransformation(child_element, dtf)
4970
+ else:
4971
+ self.notImplemented("Unsupported DataTransformation <%s>" % type(dtf))
4972
+
4973
+ def writeDataTransformationSetTransformationTechnologies(self, element: ET.Element, dtf_set: DataTransformationSet):
4974
+ techs = dtf_set.getTransformationTechnologies()
4975
+ if len(techs) > 0:
4976
+ child_element = ET.SubElement(element, "TRANSFORMATION-TECHNOLOGYS")
4977
+ for tech in techs:
4978
+ if isinstance(tech, TransformationTechnology):
4979
+ self.writeTransformationTechnology(child_element, tech)
4980
+ else:
4981
+ self.notImplemented("Unsupported TransformationTechnology <%s>" % type(tech))
4982
+
4983
+ def writeBufferPropertiesBufferComputation(self, element: ET.Element, properties: BufferProperties):
4984
+ computation = properties.getBufferComputation()
4985
+ if computation is not None:
4986
+ self.setCompuScale(element, "BUFFER-COMPUTATION", computation)
4987
+
4988
+ def setBufferProperties(self, element: ET.Element, key: str, properties: BufferProperties):
4989
+ if properties is not None:
4990
+ child_element = ET.SubElement(element, key)
4991
+ self.writeBufferPropertiesBufferComputation(child_element, properties)
4992
+ self.setChildElementOptionalIntegerValue(child_element, "HEADER-LENGTH", properties.getHeaderLength())
4993
+ self.setChildElementOptionalBooleanValue(child_element, "IN-PLACE", properties.getInPlace())
4994
+
4995
+ def writeDescribable(self, element: ET.Element, desc: Describable):
4996
+ self.writeARObjectAttributes(element, desc)
4997
+
4998
+ def writeTransformationDescription(self, element: ET.Element, desc: TransformationDescription):
4999
+ self.writeDescribable(element, desc)
5000
+
5001
+ def writeEndToEndTransformationDescription(self, element: ET.Element, desc: EndToEndTransformationDescription):
5002
+ if desc is not None:
5003
+ child_element = ET.SubElement(element, "END-TO-END-TRANSFORMATION-DESCRIPTION")
5004
+ self.writeTransformationDescription(child_element, desc)
5005
+ self.setChildElementOptionalLiteral(child_element, "DATA-ID-MODE", desc.getDataIdMode())
5006
+ self.setChildElementOptionalPositiveInteger(child_element, "MAX-DELTA-COUNTER", desc.getMaxDeltaCounter())
5007
+ self.setChildElementOptionalPositiveInteger(child_element, "MAX-ERROR-STATE-INIT", desc.getMaxErrorStateInit())
5008
+ self.setChildElementOptionalPositiveInteger(child_element, "MAX-ERROR-STATE-INVALID", desc.getMaxErrorStateInvalid())
5009
+ self.setChildElementOptionalPositiveInteger(child_element, "MAX-ERROR-STATE-VALID", desc.getMaxErrorStateValid())
5010
+ self.setChildElementOptionalPositiveInteger(child_element, "MAX-NO-NEW-OR-REPEATED-DATA", desc.getMaxNoNewOrRepeatedData())
5011
+ self.setChildElementOptionalPositiveInteger(child_element, "MIN-OK-STATE-INIT", desc.getMinOkStateInit())
5012
+ self.setChildElementOptionalPositiveInteger(child_element, "MIN-OK-STATE-INVALID", desc.getMinOkStateInvalid())
5013
+ self.setChildElementOptionalPositiveInteger(child_element, "MIN-OK-STATE-VALID", desc.getMinOkStateValid())
5014
+ self.setChildElementOptionalLiteral(child_element, "PROFILE-BEHAVIOR", desc.getProfileBehavior())
5015
+ self.setChildElementOptionalLiteral(child_element, "PROFILE-NAME", desc.getProfileName())
5016
+ self.setChildElementOptionalPositiveInteger(child_element, "SYNC-COUNTER-INIT", desc.getSyncCounterInit())
5017
+ self.setChildElementOptionalPositiveInteger(child_element, "UPPER-HEADER-BITS-TO-SHIFT", desc.getUpperHeaderBitsToShift())
5018
+ self.setChildElementOptionalPositiveInteger(child_element, "WINDOW-SIZE-INIT", desc.getWindowSizeInit())
5019
+ self.setChildElementOptionalPositiveInteger(child_element, "WINDOW-SIZE-INVALID", desc.getWindowSizeInvalid())
5020
+ self.setChildElementOptionalPositiveInteger(child_element, "WINDOW-SIZE-VALID", desc.getWindowSizeValid())
5021
+
5022
+ def writeTransformationTechnologyTransformationDescriptions(self, element: ET.Element, tech: TransformationTechnology):
5023
+ desc = tech.getTransformationDescription()
5024
+ if desc is not None:
5025
+ child_element = ET.SubElement(element, "TRANSFORMATION-DESCRIPTIONS")
5026
+ if isinstance(desc, EndToEndTransformationDescription):
5027
+ self.writeEndToEndTransformationDescription(child_element, desc)
5028
+ else:
5029
+ self.notImplemented("Unsupported TransformationDescription <%s>" % type(desc))
5030
+
5031
+ def writeTransformationTechnology(self, element: ET.Element, tech: TransformationTechnology):
5032
+ if tech is not None:
5033
+ child_element = ET.SubElement(element, "TRANSFORMATION-TECHNOLOGY")
5034
+ self.writeIdentifiable(child_element, tech)
5035
+ self.setBufferProperties(child_element, "BUFFER-PROPERTIES", tech.getBufferProperties())
5036
+ self.setChildElementOptionalBooleanValue(child_element, "NEEDS-ORIGINAL-DATA", tech.getNeedsOriginalData())
5037
+ self.setChildElementOptionalLiteral(child_element, "PROTOCOL", tech.getProtocol())
5038
+ self.writeTransformationTechnologyTransformationDescriptions(child_element, tech)
5039
+ self.setChildElementOptionalLiteral(child_element, "TRANSFORMER-CLASS", tech.getTransformerClass())
5040
+ self.setChildElementOptionalLiteral(child_element, "VERSION", tech.getVersion())
5041
+
5042
+ def writeDataTransformationSet(self, element: ET.Element, dtf_set: DataTransformationSet):
5043
+ if dtf_set is not None:
5044
+ child_element = ET.SubElement(element, "DATA-TRANSFORMATION-SET")
5045
+ self.writeIdentifiable(child_element, dtf_set)
5046
+ self.writeDataTransformationSetDataTransformations(child_element, dtf_set)
5047
+ self.writeDataTransformationSetTransformationTechnologies(child_element, dtf_set)
3794
5048
 
3795
5049
  def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
3796
5050
  if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
@@ -3921,9 +5175,25 @@ class ARXMLWriter(AbstractARXMLWriter):
3921
5175
  self.writeSoAdRoutingGroup(element, ar_element)
3922
5176
  elif isinstance(ar_element, DoIpTpConfig):
3923
5177
  self.writeDoIpTpConfig(element, ar_element)
5178
+ elif isinstance(ar_element, HwElement):
5179
+ self.writeHwElement(element, ar_element)
5180
+ elif isinstance(ar_element, HwCategory):
5181
+ self.writeHwCategory(element, ar_element)
5182
+ elif isinstance(ar_element, HwType):
5183
+ self.writeHwType(element, ar_element)
5184
+ elif isinstance(ar_element, DataTransformationSet):
5185
+ self.writeDataTransformationSet(element, ar_element)
5186
+ elif isinstance(ar_element, FlexrayFrame):
5187
+ self.writeFlexrayFrame(element, ar_element)
5188
+ elif isinstance(ar_element, ISignalGroup):
5189
+ self.writeISignalGroup(element, ar_element)
5190
+ elif isinstance(ar_element, SystemSignalGroup):
5191
+ self.writeSystemSignalGroup(element, ar_element)
5192
+ elif isinstance(ar_element, FlexrayCluster):
5193
+ self.writeFlexrayCluster(element, ar_element)
3924
5194
  else:
3925
5195
  self.notImplemented("Unsupported Elements of ARPackage <%s>" % type(ar_element))
3926
-
5196
+
3927
5197
  def writeReferenceBases(self, element: ET.Element, bases: List[ReferenceBase]):
3928
5198
  self.logger.debug("Write ReferenceBases")
3929
5199
  if len(bases) > 0:
@@ -3933,40 +5203,46 @@ class ARXMLWriter(AbstractARXMLWriter):
3933
5203
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", base.getShortLabel())
3934
5204
  self.setChildElementOptionalBooleanValue(child_element, "IS-DEFAULT", base.getIsDefault())
3935
5205
  self.setChildElementOptionalBooleanValue(child_element, "IS-GLOBAL", base.getIsDefault())
3936
- self.setChildElementOptionalBooleanValue(child_element, "BASE-IS-THIS-PACKAGE", base.getBaseIsThisPackage())
5206
+ self.setChildElementOptionalBooleanValue(child_element, "BASE-IS-THIS-PACKAGE", base.getBaseIsThisPackage())
3937
5207
  self.setChildElementOptionalRefType(child_element, "PACKAGE-REF", base.getPackageRef())
3938
-
3939
- def writeARPackages(self, element: ET.Element, pkgs: List[ARPackage]):
3940
- if len(pkgs) > 0:
3941
- pkgs_tag = ET.SubElement(element, "AR-PACKAGES")
3942
5208
 
3943
- for pkg in pkgs:
3944
- pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
3945
-
3946
- self.writeIdentifiable(pkg_tag, pkg)
3947
- self.logger.debug("writeARPackage %s" % pkg.full_name)
5209
+ def writeARPackage(self, element: ET.Element, pkg: ARPackage):
5210
+ self.logger.debug("Write ARPackage %s" % pkg.getFullName())
5211
+ child_element = ET.SubElement(element, "AR-PACKAGE")
3948
5212
 
3949
- self.writeReferenceBases(pkg_tag, pkg.getReferenceBases())
5213
+ self.writeIdentifiable(child_element, pkg)
5214
+ self.writeReferenceBases(child_element, pkg.getReferenceBases())
5215
+ self.writeARPackageElements(child_element, pkg)
5216
+ self.writeARPackages(child_element, pkg.getARPackages())
3950
5217
 
3951
- if pkg.getTotalElement() > 0:
3952
- elements_tag = ET.SubElement(pkg_tag, "ELEMENTS")
5218
+ def writeARPackageElements(self, element: ET.Element, pkg: ARPackage):
5219
+ if pkg.getTotalElement() > 0:
5220
+ elements_tag = ET.SubElement(element, "ELEMENTS")
3953
5221
 
3954
- for ar_element in pkg.getElements():
3955
- if not isinstance(ar_element, ARPackage):
3956
- self.writeARPackageElement(elements_tag, ar_element)
5222
+ for ar_element in pkg.getElements():
5223
+ if not isinstance(ar_element, ARPackage):
5224
+ self.writeARPackageElement(elements_tag, ar_element)
3957
5225
 
3958
- self.writeARPackages(pkg_tag, pkg.getARPackages())
3959
-
5226
+ def writeARPackages(self, element: ET.Element, pkgs: List[ARPackage]):
5227
+ if len(pkgs) > 0:
5228
+ child_element = ET.SubElement(element, "AR-PACKAGES")
5229
+ for pkg in pkgs:
5230
+ if isinstance(pkg, ARPackage):
5231
+ self.writeARPackage(child_element, pkg)
5232
+ else:
5233
+ self.notImplemented("Unsupported ARPackage <%s>" % type(pkg))
3960
5234
 
3961
5235
  def save(self, filename, document: AUTOSAR):
3962
- self.logger.info("Save %s ..." % filename)
5236
+ self.logger.info("Saving %s ..." % filename)
3963
5237
 
3964
5238
  root = ET.Element("AUTOSAR", self.nsmap)
3965
5239
  root.attrib["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"
3966
- root.attrib["xsi:schemaLocation"] = document.schema_location
5240
+ if document.schema_location is not None:
5241
+ root.attrib["xsi:schemaLocation"] = document.schema_location
5242
+ else:
5243
+ root.attrib["xsi:schemaLocation"] = "http://autosar.org/schema/r4.0 AUTOSAR_4-0-3.xsd"
3967
5244
 
3968
5245
  self.setAdminData(root, document.getAdminData())
3969
5246
  self.writeARPackages(root, document.getARPackages())
3970
5247
 
3971
5248
  self.saveToFile(filename, root)
3972
-