armodel 1.7.4__py3-none-any.whl → 1.7.6__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 (33) hide show
  1. armodel/cli/file_list_cli.py +70 -0
  2. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +2 -2
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +4 -0
  4. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/DiagnosticContribution.py +47 -0
  5. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/__init__.py +0 -0
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +73 -3
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +22 -0
  8. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DiagnosticConnection.py +58 -0
  9. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +165 -4
  10. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetCommunication.py +16 -1
  11. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +514 -17
  12. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/NetworkEndpoint.py +104 -1
  13. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +783 -13
  14. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinCommunication.py +114 -6
  15. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +92 -0
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +76 -10
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +151 -6
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +143 -36
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +13 -0
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +135 -13
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +79 -2
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +4 -2
  23. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +1 -1
  24. armodel/models/__init__.py +3 -0
  25. armodel/parser/abstract_arxml_parser.py +7 -5
  26. armodel/parser/arxml_parser.py +927 -438
  27. armodel/writer/arxml_writer.py +799 -178
  28. {armodel-1.7.4.dist-info → armodel-1.7.6.dist-info}/METADATA +52 -1
  29. {armodel-1.7.4.dist-info → armodel-1.7.6.dist-info}/RECORD +33 -28
  30. {armodel-1.7.4.dist-info → armodel-1.7.6.dist-info}/entry_points.txt +1 -0
  31. {armodel-1.7.4.dist-info → armodel-1.7.6.dist-info}/LICENSE +0 -0
  32. {armodel-1.7.4.dist-info → armodel-1.7.6.dist-info}/WHEEL +0 -0
  33. {armodel-1.7.4.dist-info → armodel-1.7.6.dist-info}/top_level.txt +0 -0
@@ -30,7 +30,7 @@ from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecifi
30
30
  from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
31
31
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
32
32
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
33
- from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation
33
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation, ImplementationProps
34
34
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
35
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef, ExecutionOrderConstraint
36
36
  from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
@@ -40,6 +40,7 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import Intern
40
40
  from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype
41
41
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
42
42
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
43
+ from ..models.M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import DiagnosticServiceTable
43
44
  from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
44
45
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
45
46
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable, MultilanguageReferrable, Referrable
@@ -54,7 +55,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import
54
55
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
55
56
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
56
57
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
57
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype
58
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype, SymbolProps
58
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
59
60
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument, SwcInternalBehavior, SynchronousServerCallPoint
60
61
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
@@ -76,22 +77,24 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import S
76
77
 
77
78
  from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping, System, SystemMapping
78
79
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
79
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import FrameTriggering, IPdu, IPduTiming, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, PduTriggering, SecuredIPdu, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup
80
+ 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
80
82
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
81
83
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
82
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
84
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
83
85
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetFrame import GenericEthernetFrame
84
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController
85
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import Ipv6Configuration, NetworkEndpoint, NetworkEndpointAddress
86
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import SoAdConfig
87
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, ISignalMapping
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
88
90
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
89
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
90
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering, LinUnconditionalFrame
91
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
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
94
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
92
95
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
93
- from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
94
- from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig
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
95
98
 
96
99
  from .abstract_arxml_writer import AbstractARXMLWriter
97
100
  class ARXMLWriter(AbstractARXMLWriter):
@@ -141,7 +144,7 @@ class ARXMLWriter(AbstractARXMLWriter):
141
144
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
142
145
  limit_tag.text = limit.value
143
146
 
144
- def setReferable(self, element: ET.Element, referrable: Referrable):
147
+ def writeReferrable(self, element: ET.Element, referrable: Referrable):
145
148
  self.setARObjectAttributes(element, referrable)
146
149
  self.setShortName(element, referrable.getShortName())
147
150
 
@@ -172,8 +175,8 @@ class ARXMLWriter(AbstractARXMLWriter):
172
175
  for l2 in paragraph.getL2s():
173
176
  self.setLOverviewParagraph(child_element, l2)
174
177
 
175
- def setMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
176
- self.setReferable(element, referrable)
178
+ def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
179
+ self.writeReferrable(element, referrable)
177
180
  if referrable.longName is not None:
178
181
  self.setMultiLongName(element, "LONG-NAME", referrable.longName)
179
182
 
@@ -194,16 +197,16 @@ class ARXMLWriter(AbstractARXMLWriter):
194
197
  self.setMultiLanguagePlainText(child_element, "USED-LANGUAGES", admin_data.getUsedLanguages())
195
198
  self.writeSdgs(child_element, admin_data)
196
199
 
197
- def setIdentifiable(self, element: ET.Element, identifiable: Identifiable):
198
- self.setMultilanguageReferrable(element, identifiable)
200
+ def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
201
+ self.writeMultilanguageReferrable(element, identifiable)
199
202
  self.setAnnotations(element, identifiable.getAnnotations())
200
203
  self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
201
204
  self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
202
205
  self.setDocumentationBlock(element, "INTRODUCTION", identifiable.getIntroduction())
203
206
  self.setAdminData(element, identifiable.getAdminData())
204
207
 
205
- def setARElement(self, parent: ET.Element, ar_element: ARElement):
206
- self.setIdentifiable(parent, ar_element)
208
+ def writeARElement(self, parent: ET.Element, ar_element: ARElement):
209
+ self.writeIdentifiable(parent, ar_element)
207
210
 
208
211
  def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
209
212
  if (acknowledge != None):
@@ -436,7 +439,7 @@ class ARXMLWriter(AbstractARXMLWriter):
436
439
  def writePPortPrototype(self, ports_tag: ET.Element, prototype: PPortPrototype):
437
440
  prototype_tag = ET.SubElement(ports_tag, "P-PORT-PROTOTYPE")
438
441
 
439
- self.setIdentifiable(prototype_tag, prototype)
442
+ self.writeIdentifiable(prototype_tag, prototype)
440
443
  self.logger.debug("write PPortPrototype %s" % prototype.getShortName())
441
444
  self.setAbstractProvidedPortPrototype(prototype_tag, prototype)
442
445
  self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-INTERFACE-TREF", prototype.getProvidedInterfaceTRef())
@@ -451,14 +454,14 @@ class ARXMLWriter(AbstractARXMLWriter):
451
454
  def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
452
455
  self.logger.debug("write RPortPrototype %s" % prototype.getShortName())
453
456
  prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
454
- self.setIdentifiable(prototype_tag, prototype)
457
+ self.writeIdentifiable(prototype_tag, prototype)
455
458
  self.setAbstractRequiredPortPrototype(prototype_tag, prototype)
456
459
  self.setChildElementOptionalRefType(prototype_tag, "REQUIRED-INTERFACE-TREF", prototype.getRequiredInterfaceTRef())
457
460
 
458
461
  def writePRPortPrototype(self, ports_tag: ET.Element, prototype: PRPortPrototype):
459
462
  self.logger.debug("write PRPortPrototype %s" % prototype.getShortName())
460
463
  prototype_tag = ET.SubElement(ports_tag, "PR-PORT-PROTOTYPE")
461
- self.setIdentifiable(prototype_tag, prototype)
464
+ self.writeIdentifiable(prototype_tag, prototype)
462
465
  self.setAbstractProvidedPortPrototype(prototype_tag, prototype)
463
466
  self.setAbstractRequiredPortPrototype(prototype_tag, prototype)
464
467
  self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-REQUIRED-INTERFACE-TREF", prototype.getProvidedRequiredInterface())
@@ -497,7 +500,7 @@ class ARXMLWriter(AbstractARXMLWriter):
497
500
  def writePortGroup(self, element: ET.Element, port_group: PortGroup):
498
501
  self.logger.debug("writePortGroup %s" % port_group.getShortName())
499
502
  child_element = ET.SubElement(element, "PORT-GROUP")
500
- self.setIdentifiable(child_element, port_group)
503
+ self.writeIdentifiable(child_element, port_group)
501
504
  self.writePortGroupInnerGroupIRefs(child_element, port_group)
502
505
  self.writePortGroupOuterPortRefs(child_element, port_group)
503
506
 
@@ -509,7 +512,7 @@ class ARXMLWriter(AbstractARXMLWriter):
509
512
  self.writePortGroup(child_element, port_group)
510
513
 
511
514
  def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
512
- self.setIdentifiable(element, sw_component)
515
+ self.writeIdentifiable(element, sw_component)
513
516
  port_prototypes = sw_component.getPortPrototypes()
514
517
  if len(port_prototypes) > 0:
515
518
  ports_tag = ET.SubElement(element, "PORTS")
@@ -518,7 +521,7 @@ class ARXMLWriter(AbstractARXMLWriter):
518
521
 
519
522
  def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
520
523
  prototype_tag = ET.SubElement(element, "SW-COMPONENT-PROTOTYPE")
521
- self.setIdentifiable(prototype_tag, prototype)
524
+ self.writeIdentifiable(prototype_tag, prototype)
522
525
  self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.getTypeTRef())
523
526
 
524
527
  def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
@@ -530,7 +533,7 @@ class ARXMLWriter(AbstractARXMLWriter):
530
533
 
531
534
  def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
532
535
  child_element = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
533
- self.setIdentifiable(child_element, sw_connector)
536
+ self.writeIdentifiable(child_element, sw_connector)
534
537
  self.setChildElementOptionalRefType(child_element, "MAPPING-REF", sw_connector.getMappingRef())
535
538
 
536
539
  if sw_connector.getProviderIRef() is not None:
@@ -549,7 +552,7 @@ class ARXMLWriter(AbstractARXMLWriter):
549
552
 
550
553
  def writeDelegationSwConnector(self, element: ET.Element, sw_connector: DelegationSwConnector):
551
554
  connector_tag = ET.SubElement(element, "DELEGATION-SW-CONNECTOR")
552
- self.setIdentifiable(connector_tag, sw_connector)
555
+ self.writeIdentifiable(connector_tag, sw_connector)
553
556
 
554
557
  if sw_connector.getInnerPortIRref() is not None:
555
558
  inner_port_iref_tag = ET.SubElement(connector_tag, "INNER-PORT-IREF")
@@ -725,7 +728,7 @@ class ARXMLWriter(AbstractARXMLWriter):
725
728
  self.setApplicationDataType(element, data_type)
726
729
 
727
730
  def setAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
728
- self.setARElement(element, data_type)
731
+ self.writeARElement(element, data_type)
729
732
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.getSwDataDefProps())
730
733
 
731
734
  def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
@@ -737,7 +740,7 @@ class ARXMLWriter(AbstractARXMLWriter):
737
740
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", prototype.getSwDataDefProps())
738
741
 
739
742
  def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
740
- self.setIdentifiable(element, prototype)
743
+ self.writeIdentifiable(element, prototype)
741
744
  self.setDataPrototype(element, prototype)
742
745
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
743
746
 
@@ -775,7 +778,7 @@ class ARXMLWriter(AbstractARXMLWriter):
775
778
 
776
779
  def writeSwBaseType(self, element: ET.Element, base_type: SwBaseType):
777
780
  data_type_tag = ET.SubElement(element, "SW-BASE-TYPE")
778
- self.setIdentifiable(data_type_tag, base_type)
781
+ self.writeIdentifiable(data_type_tag, base_type)
779
782
  self.setBaseTypeDirectDefinition(data_type_tag, base_type.getBaseTypeDefinition())
780
783
 
781
784
  def writeCompuScaleConstantContents(self, element: ET.Element, contents: CompuScaleConstantContents):
@@ -844,7 +847,7 @@ class ARXMLWriter(AbstractARXMLWriter):
844
847
  def writeCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
845
848
  child_element = ET.SubElement(element, "COMPU-METHOD")
846
849
  self.logger.debug("write CompuMethods %s" % compu_method.getShortName())
847
- self.setIdentifiable(child_element, compu_method)
850
+ self.writeIdentifiable(child_element, compu_method)
848
851
  self.setChildElementOptionalRefType(child_element, "UNIT-REF", compu_method.getUnitRef())
849
852
  self.setCompu(child_element, "COMPU-INTERNAL-TO-PHYS", compu_method.getCompuInternalToPhys())
850
853
  self.setCompu(child_element, "COMPU-PHYS-TO-INTERNAL", compu_method.getCompuPhysToInternal())
@@ -878,7 +881,7 @@ class ARXMLWriter(AbstractARXMLWriter):
878
881
 
879
882
  def writeConstantSpecification(self, element: ET.Element, spec: ConstantSpecification):
880
883
  spec_tag = ET.SubElement(element, "CONSTANT-SPECIFICATION")
881
- self.setIdentifiable(spec_tag, spec)
884
+ self.writeIdentifiable(spec_tag, spec)
882
885
 
883
886
  if spec.getValueSpec() is not None:
884
887
  self.setValueSpecification(spec_tag, "VALUE-SPEC", spec.getValueSpec())
@@ -915,13 +918,13 @@ class ARXMLWriter(AbstractARXMLWriter):
915
918
 
916
919
  def writeDataConstr(self, element: ET.Element, constr: DataConstr):
917
920
  child_element = ET.SubElement(element, "DATA-CONSTR")
918
- self.setIdentifiable(child_element, constr)
921
+ self.writeIdentifiable(child_element, constr)
919
922
  self.writeDataConstrRules(child_element, constr)
920
923
 
921
924
  def writeUnit(self, element: ET.Element, unit: Unit):
922
925
  self.logger.debug("writeUnit %s" % unit.getShortName())
923
926
  child_element = ET.SubElement(element, "UNIT")
924
- self.setIdentifiable(child_element, unit)
927
+ self.writeIdentifiable(child_element, unit)
925
928
  self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.getDisplayName())
926
929
  self.setChildElementOptionalFloatValue(child_element, "FACTOR-SI-TO-UNIT", unit.getFactorSiToUnit())
927
930
  self.setChildElementOptionalFloatValue(child_element, "OFFSET-SI-TO-UNIT", unit.getOffsetSiToUnit())
@@ -943,7 +946,7 @@ class ARXMLWriter(AbstractARXMLWriter):
943
946
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.getTargetProvidedOperationRef())
944
947
 
945
948
  def setRTEEvent(self, element: ET.Element, event: RTEEvent):
946
- self.setIdentifiable(element, event)
949
+ self.writeIdentifiable(element, event)
947
950
  irefs = event.getDisabledModeIRefs()
948
951
  if len(irefs) > 0:
949
952
  child_element = ET.SubElement(element, "DISABLED-MODE-IREFS")
@@ -1030,7 +1033,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1030
1033
  areas_tag = ET.SubElement(element, "EXCLUSIVE-AREAS")
1031
1034
  for area in areas:
1032
1035
  child_element = ET.SubElement(areas_tag, "EXCLUSIVE-AREA")
1033
- self.setIdentifiable(child_element, area)
1036
+ self.writeIdentifiable(child_element, area)
1034
1037
 
1035
1038
  def writeDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
1036
1039
  refs = behavior.getDataTypeMappingRefs()
@@ -1040,7 +1043,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1040
1043
  self.setChildElementOptionalRefType(refs_tag, "DATA-TYPE-MAPPING-REF", ref)
1041
1044
 
1042
1045
  def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
1043
- self.setIdentifiable(element, behavior)
1046
+ self.writeIdentifiable(element, behavior)
1044
1047
  self.setParameterDataPrototypes(element, "CONSTANT-MEMORYS", behavior.getConstantMemories())
1045
1048
  self.writeDataTypeMappingRefs(element, behavior)
1046
1049
  self.writeExclusiveAreas(element, behavior)
@@ -1066,7 +1069,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1066
1069
 
1067
1070
  def setVariableAccess(self, element: ET.Element, access: VariableAccess):
1068
1071
  child_element = ET.SubElement(element, "VARIABLE-ACCESS")
1069
- self.setIdentifiable(child_element, access)
1072
+ self.writeIdentifiable(child_element, access)
1070
1073
  self.setAutosarVariableRef(child_element, "ACCESSED-VARIABLE", access.getAccessedVariableRef())
1071
1074
 
1072
1075
  def setAutosarParameterRef(self, element: ET.Element, key: str, parameter_ref: AutosarParameterRef):
@@ -1076,7 +1079,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1076
1079
 
1077
1080
  def writeParameterAccess(self, element: ET.Element, parameter_access: ParameterAccess):
1078
1081
  child_element = ET.SubElement(element, "PARAMETER-ACCESS")
1079
- self.setIdentifiable(child_element, parameter_access)
1082
+ self.writeIdentifiable(child_element, parameter_access)
1080
1083
  self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.getAccessedParameter())
1081
1084
 
1082
1085
  def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
@@ -1134,12 +1137,12 @@ class ARXMLWriter(AbstractARXMLWriter):
1134
1137
 
1135
1138
  def setSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
1136
1139
  child_element = ET.SubElement(element, "SYNCHRONOUS-SERVER-CALL-POINT")
1137
- self.setIdentifiable(child_element, call_point)
1140
+ self.writeIdentifiable(child_element, call_point)
1138
1141
  self.setServerCallPoint(child_element, call_point)
1139
1142
 
1140
1143
  def setAsynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
1141
1144
  child_element = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-POINT")
1142
- self.setIdentifiable(child_element, call_point)
1145
+ self.writeIdentifiable(child_element, call_point)
1143
1146
  self.setServerCallPoint(child_element, call_point)
1144
1147
 
1145
1148
  def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
@@ -1188,7 +1191,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1188
1191
  mode_access_points_tag = ET.SubElement(element, "MODE-SWITCH-POINTS")
1189
1192
  for point in points:
1190
1193
  child_element = ET.SubElement(mode_access_points_tag, "MODE-SWITCH-POINT")
1191
- self.setIdentifiable(child_element, point)
1194
+ self.writeIdentifiable(child_element, point)
1192
1195
  self.setPModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1193
1196
 
1194
1197
  def setRunnableEntityArgument(self, element: ET.Element, argument: RunnableEntityArgument):
@@ -1211,7 +1214,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1211
1214
  points_tag = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINTS")
1212
1215
  for point in points:
1213
1216
  child_element = ET.SubElement(points_tag, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINT")
1214
- self.setIdentifiable(child_element, point)
1217
+ self.writeIdentifiable(child_element, point)
1215
1218
  self.setChildElementOptionalRefType(child_element, "ASYNCHRONOUS-SERVER-CALL-POINT-REF", point.getAsynchronousServerCallPointRef())
1216
1219
 
1217
1220
  def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
@@ -1269,7 +1272,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1269
1272
  memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
1270
1273
  for memory in memories:
1271
1274
  child_element = ET.SubElement(memories_tag, "PER-INSTANCE-MEMORY")
1272
- self.setIdentifiable(child_element, memory)
1275
+ self.writeIdentifiable(child_element, memory)
1273
1276
  self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.getInitValue())
1274
1277
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.getSwDataDefProps())
1275
1278
  self.setChildElementOptionalLiteral(child_element, "TYPE", memory.getType())
@@ -1277,7 +1280,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1277
1280
 
1278
1281
  def setParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1279
1282
  child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
1280
- self.setIdentifiable(child_element, prototype)
1283
+ self.writeIdentifiable(child_element, prototype)
1281
1284
  self.setAutosarDataPrototype(child_element, prototype)
1282
1285
  self.setValueSpecification(child_element, "INIT-VALUE", prototype.getInitValue())
1283
1286
 
@@ -1324,7 +1327,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1324
1327
  self._raiseError("Unsupported Assigned Data <%s>" % type(data))
1325
1328
 
1326
1329
  def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
1327
- self.setIdentifiable(element, dependency)
1330
+ self.writeIdentifiable(element, dependency)
1328
1331
  self.writeServiceDependencyAssignedDataType(element, dependency)
1329
1332
 
1330
1333
  def writeRoleBasedDataAssignment(self, element: ET.Element, assignment: RoleBasedDataAssignment):
@@ -1362,7 +1365,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1362
1365
  def setNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1363
1366
  child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
1364
1367
  self.logger.debug("write NvBlockNeeds %s" % needs.getShortName())
1365
- self.setIdentifiable(child_element, needs)
1368
+ self.writeIdentifiable(child_element, needs)
1366
1369
  self.setChildElementOptionalBooleanValue(child_element, "CALC-RAM-BLOCK-CRC", needs.getCalcRamBlockCrc())
1367
1370
  self.setChildElementOptionalBooleanValue(child_element, "CHECK-STATIC-BLOCK-ID", needs.getCheckStaticBlockId())
1368
1371
  self.setChildElementOptionalNumericalValue(child_element, "N-DATA-SETS", needs.getNDataSets())
@@ -1386,20 +1389,20 @@ class ARXMLWriter(AbstractARXMLWriter):
1386
1389
  def setDiagnosticCommunicationManagerNeeds(self, element: ET.Element, needs: DiagnosticCommunicationManagerNeeds):
1387
1390
  child_element = ET.SubElement(element, "DIAGNOSTIC-COMMUNICATION-MANAGER-NEEDS")
1388
1391
  self.logger.debug("write DiagnosticCommunicationManagerNeeds %s" % needs.getShortName())
1389
- self.setIdentifiable(child_element, needs)
1392
+ self.writeIdentifiable(child_element, needs)
1390
1393
  self.setChildElementOptionalLiteral(child_element, "SERVICE-REQUEST-CALLBACK-TYPE", needs.getServiceRequestCallbackType())
1391
1394
 
1392
1395
  def setDiagnosticRoutineNeeds(self, element: ET.Element, needs: DiagnosticRoutineNeeds):
1393
1396
  child_element = ET.SubElement(element, "DIAGNOSTIC-ROUTINE-NEEDS")
1394
1397
  self.logger.debug("write DiagnosticRoutineNeeds %s" % needs.getShortName())
1395
- self.setIdentifiable(child_element, needs)
1398
+ self.writeIdentifiable(child_element, needs)
1396
1399
  self.setChildElementOptionalLiteral(child_element, "DIAG-ROUTINE-TYPE", needs.getDiagRoutineType())
1397
1400
  self.setChildElementOptionalIntegerValue(child_element, "RID-NUMBER", needs.getRidNumber())
1398
1401
 
1399
1402
  def setDiagnosticValueNeeds(self, element: ET.Element, needs: DiagnosticValueNeeds):
1400
1403
  child_element = ET.SubElement(element, "DIAGNOSTIC-VALUE-NEEDS")
1401
1404
  self.logger.debug("write DiagnosticValueNeeds %s" % needs.getShortName())
1402
- self.setIdentifiable(child_element, needs)
1405
+ self.writeIdentifiable(child_element, needs)
1403
1406
  self.setChildElementOptionalPositiveInteger(child_element, "DATA-LENGTH", needs.getDataLength())
1404
1407
  self.setChildElementOptionalLiteral(child_element, "DIAGNOSTIC-VALUE-ACCESS", needs.getDiagnosticValueAccess())
1405
1408
  self.setChildElementOptionalIntegerValue(child_element, "DID-NUMBER", needs.getDidNumber())
@@ -1408,7 +1411,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1408
1411
 
1409
1412
  def setDiagEventDebounceMonitorInternal(self, element: ET.Element, algorithm: DiagEventDebounceMonitorInternal):
1410
1413
  child_element = ET.SubElement(element, "DIAG-EVENT-DEBOUNCE-MONITOR-INTERNAL")
1411
- self.setIdentifiable(child_element, algorithm)
1414
+ self.writeIdentifiable(child_element, algorithm)
1412
1415
 
1413
1416
  def writeDiagEventDebounceAlgorithm(self, element: ET.Element, needs: DiagnosticEventNeeds):
1414
1417
  algorithm = needs.getDiagEventDebounceAlgorithm()
@@ -1422,7 +1425,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1422
1425
  def setDiagnosticEventNeeds(self, element: ET.Element, needs: DiagnosticEventNeeds):
1423
1426
  child_element = ET.SubElement(element, "DIAGNOSTIC-EVENT-NEEDS")
1424
1427
  self.logger.debug("write DiagnosticEventNeeds %s" % needs.getShortName())
1425
- self.setIdentifiable(child_element, needs)
1428
+ self.writeIdentifiable(child_element, needs)
1426
1429
  self.writeDiagEventDebounceAlgorithm(child_element, needs)
1427
1430
  self.setChildElementOptionalLiteral(child_element, "DTC-KIND", needs.getDtcKind())
1428
1431
  self.setChildElementOptionalIntegerValue(child_element, "UDS-DTC-NUMBER", needs.getUdsDtcNumber())
@@ -1430,19 +1433,19 @@ class ARXMLWriter(AbstractARXMLWriter):
1430
1433
  def setDiagnosticEventInfoNeeds(self, element: ET.Element, needs: DiagnosticEventInfoNeeds):
1431
1434
  child_element = ET.SubElement(element, "DIAGNOSTIC-EVENT-INFO-NEEDS")
1432
1435
  self.logger.debug("write DiagnosticEventNeeds %s" % needs.getShortName())
1433
- self.setIdentifiable(child_element, needs)
1436
+ self.writeIdentifiable(child_element, needs)
1434
1437
  self.setChildElementOptionalPositiveInteger(child_element, "UDS-DTC-NUMBER", needs.getUdsDtcNumber())
1435
1438
 
1436
1439
  def setCryptoServiceNeeds(self, element: ET.Element, needs: CryptoServiceNeeds):
1437
1440
  child_element = ET.SubElement(element, "CRYPTO-SERVICE-NEEDS")
1438
1441
  self.logger.debug("write CryptoServiceNeeds %s" % needs.getShortName())
1439
- self.setIdentifiable(child_element, needs)
1442
+ self.writeIdentifiable(child_element, needs)
1440
1443
  self.setChildElementOptionalPositiveInteger(child_element, "MAXIMUM-KEY-LENGTH", needs.getMaximumKeyLength())
1441
1444
 
1442
1445
  def setEcuStateMgrUserNeeds(self, element: ET.Element, needs: EcuStateMgrUserNeeds):
1443
1446
  child_element = ET.SubElement(element, "ECU-STATE-MGR-USER-NEEDS")
1444
1447
  self.logger.debug("write EcuStateMgrUserNeeds %s" % needs.getShortName())
1445
- self.setIdentifiable(child_element, needs)
1448
+ self.writeIdentifiable(child_element, needs)
1446
1449
 
1447
1450
  def writeSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
1448
1451
  needs = parent.getServiceNeeds()
@@ -1547,7 +1550,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1547
1550
  def setCode(self, element: ET.SubElement, code_desc: Code):
1548
1551
  self.logger.debug("setCode %s" % code_desc.getShortName())
1549
1552
  child_element = ET.SubElement(element, "CODE")
1550
- self.setIdentifiable(child_element, code_desc)
1553
+ self.writeIdentifiable(child_element, code_desc)
1551
1554
  self.writeArtifactDescriptor(child_element, code_desc)
1552
1555
 
1553
1556
  def writeCodeDescriptors(self, element: ET.Element, impl: Implementation):
@@ -1572,7 +1575,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1572
1575
  sections_tag = ET.SubElement(element, "MEMORY-SECTIONS")
1573
1576
  for memory_section in memory_sections:
1574
1577
  child_element = ET.SubElement(sections_tag, "MEMORY-SECTION")
1575
- self.setIdentifiable(child_element, memory_section)
1578
+ self.writeIdentifiable(child_element, memory_section)
1576
1579
  self.setChildElementOptionalLiteral(child_element, "ALIGNMENT", memory_section.getAlignment())
1577
1580
  self.setChildElementOptionalLiteral(child_element, "MEM-CLASS-SYMBOL", memory_section.getMemClassSymbol())
1578
1581
  self.setMemorySectionOptions(child_element, memory_section.getOptions())
@@ -1583,7 +1586,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1583
1586
 
1584
1587
  def setStackUsage(self, element: ET.Element, usage: StackUsage):
1585
1588
  self.logger.debug("Write StackUsage %s" % usage.getShortName())
1586
- self.setIdentifiable(element, usage)
1589
+ self.writeIdentifiable(element, usage)
1587
1590
 
1588
1591
  def setRoughEstimateStackUsage(self, element: ET.Element, usage: RoughEstimateStackUsage):
1589
1592
  if usage is not None:
@@ -1603,12 +1606,12 @@ class ARXMLWriter(AbstractARXMLWriter):
1603
1606
  def setResourceConsumption(self, element: ET.Element, consumption: ResourceConsumption):
1604
1607
  if consumption is not None:
1605
1608
  child_element = ET.SubElement(element, "RESOURCE-CONSUMPTION")
1606
- self.setIdentifiable(child_element, consumption)
1609
+ self.writeIdentifiable(child_element, consumption)
1607
1610
  self.writeMemorySections(child_element, consumption)
1608
1611
  self.writeStackUsages(child_element, consumption.getStackUsages())
1609
1612
 
1610
1613
  def writeImplementation(self, element: ET.Element, impl: Implementation):
1611
- self.setIdentifiable(element, impl)
1614
+ self.writeIdentifiable(element, impl)
1612
1615
  self.writeCodeDescriptors(element, impl)
1613
1616
  self.setChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE", impl.getProgrammingLanguage())
1614
1617
  self.setResourceConsumption(element, impl.getResourceConsumption())
@@ -1671,7 +1674,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1671
1674
  def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1672
1675
  if protection is not None:
1673
1676
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
1674
- self.setIdentifiable(child_element, protection)
1677
+ self.writeIdentifiable(child_element, protection)
1675
1678
  self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
1676
1679
  self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
1677
1680
 
@@ -1686,7 +1689,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1686
1689
  def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1687
1690
  self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.getShortName())
1688
1691
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION-SET")
1689
- self.setIdentifiable(child_element, protection_set)
1692
+ self.writeIdentifiable(child_element, protection_set)
1690
1693
  self.writeEndToEndProtections(child_element, protection_set)
1691
1694
 
1692
1695
  def setAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
@@ -1696,7 +1699,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1696
1699
  def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
1697
1700
  self.logger.debug("writeVariableDataPrototype %s" % prototype.getShortName())
1698
1701
  child_element = ET.SubElement(element, "VARIABLE-DATA-PROTOTYPE")
1699
- self.setIdentifiable(child_element, prototype)
1702
+ self.writeIdentifiable(child_element, prototype)
1700
1703
  self.setAutosarDataPrototype(child_element, prototype)
1701
1704
  self.setValueSpecification(child_element, "INIT-VALUE", prototype.getInitValue())
1702
1705
 
@@ -1722,7 +1725,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1722
1725
  def writeSenderReceiverInterface(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1723
1726
  self.logger.debug("writeSenderReceiverInterface %s" % sr_interface.getShortName())
1724
1727
  child_element = ET.SubElement(element, "SENDER-RECEIVER-INTERFACE")
1725
- self.setIdentifiable(child_element, sr_interface)
1728
+ self.writeIdentifiable(child_element, sr_interface)
1726
1729
  self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.getIsService())
1727
1730
  self.writeSenderReceiverInterfaceDataElements(child_element, sr_interface)
1728
1731
  self.writeSenderReceiverInterfaceInvalidationPolicies(child_element, sr_interface)
@@ -1736,7 +1739,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1736
1739
  self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
1737
1740
 
1738
1741
  def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1739
- self.setIdentifiable(element, prototype)
1742
+ self.writeIdentifiable(element, prototype)
1740
1743
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1741
1744
 
1742
1745
  def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
@@ -1755,7 +1758,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1755
1758
  self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
1756
1759
 
1757
1760
  def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1758
- self.setIdentifiable(element, entity)
1761
+ self.writeIdentifiable(element, entity)
1759
1762
  self.writeCanEnterExclusiveAreaRefs(element, entity)
1760
1763
  self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.getMinimumStartInterval())
1761
1764
  self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.getSwAddrMethodRef())
@@ -1805,7 +1808,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1805
1808
  self.notImplemented("Unsupported BswModuleEntity <%s>" % type(entity))
1806
1809
 
1807
1810
  def setBswEvent(self, element: ET.Element, event: BswEvent):
1808
- self.setIdentifiable(element, event)
1811
+ self.writeIdentifiable(element, event)
1809
1812
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1810
1813
 
1811
1814
  def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
@@ -1872,7 +1875,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1872
1875
  def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
1873
1876
  self.logger.debug("writeBswModuleDescription %s" % desc.getShortName())
1874
1877
  child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
1875
- self.setIdentifiable(child_element, desc)
1878
+ self.writeIdentifiable(child_element, desc)
1876
1879
  self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.getModuleId())
1877
1880
  self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
1878
1881
  self.writeProvidedModeGroup(child_element, desc)
@@ -1891,7 +1894,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1891
1894
  self.logger.debug("Set SwServiceArg <%s>" % arg.getShortName())
1892
1895
  if arg is not None:
1893
1896
  child_element = ET.SubElement(element, "SW-SERVICE-ARG")
1894
- self.setIdentifiable(child_element, arg)
1897
+ self.writeIdentifiable(child_element, arg)
1895
1898
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", arg.getDirection())
1896
1899
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", arg.getSwDataDefProps())
1897
1900
 
@@ -1905,7 +1908,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1905
1908
  def writeBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
1906
1909
  self.logger.debug("writeBswModuleDescription %s" % entry.getShortName())
1907
1910
  child_element = ET.SubElement(element, "BSW-MODULE-ENTRY")
1908
- self.setIdentifiable(child_element, entry)
1911
+ self.writeIdentifiable(child_element, entry)
1909
1912
  self.setChildElementOptionalNumericalValue(child_element, "SERVICE-ID", entry.getServiceId())
1910
1913
  self.setChildElementOptionalBooleanValue(child_element, "IS-REENTRANT", entry.getIsReentrant())
1911
1914
  self.setChildElementOptionalBooleanValue(child_element, "IS-SYNCHRONOUS", entry.getIsSynchronous())
@@ -1932,7 +1935,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1932
1935
  def writeSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1933
1936
  self.logger.debug("writeBswModuleDescription %s" % mapping.getShortName())
1934
1937
  child_element = ET.SubElement(element, "SWC-BSW-MAPPING")
1935
- self.setIdentifiable(child_element, mapping)
1938
+ self.writeIdentifiable(child_element, mapping)
1936
1939
  self.setChildElementOptionalRefType(child_element, "BSW-BEHAVIOR-REF", mapping.getBswBehaviorRef())
1937
1940
  self.writeSwcBswRunnableMappings(child_element, mapping)
1938
1941
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.getSwcBehaviorRef())
@@ -1979,19 +1982,32 @@ class ARXMLWriter(AbstractARXMLWriter):
1979
1982
  sub_elements_tag = ET.SubElement(element, "SUB-ELEMENTS")
1980
1983
  for type_element in sub_elements:
1981
1984
  child_element = ET.SubElement(sub_elements_tag, "IMPLEMENTATION-DATA-TYPE-ELEMENT")
1982
- self.setIdentifiable(child_element, type_element)
1985
+ self.writeIdentifiable(child_element, type_element)
1983
1986
  self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE", type_element.getArraySize())
1984
1987
  self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING", type_element.getArraySizeHandling())
1985
1988
  self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", type_element.getArraySizeSemantics())
1986
1989
  self.writeImplementationDataTypeElements(child_element, type_element)
1987
1990
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.getSwDataDefProps())
1988
1991
 
1992
+ def writeImplementationProps(self, element: ET.Element, props: ImplementationProps):
1993
+ self.writeReferrable(element, props)
1994
+ self.setChildElementOptionalLiteral(element, "SYMBOL", props.getSymbol())
1995
+
1996
+ def writeSymbolProps(self, element: ET.Element, props: SymbolProps):
1997
+ if props is not None:
1998
+ child_element = ET.SubElement(element, "SYMBOL-PROPS")
1999
+ self.writeImplementationProps(child_element, props)
2000
+
2001
+ def writeImplementationDataTypeSymbolProps(self, element: ET.Element, data_type: ImplementationDataType):
2002
+ self.writeSymbolProps(element, data_type.getSymbolProps())
2003
+
1989
2004
  def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1990
2005
  self.logger.debug("writeImplementationDataType %s" % data_type.getShortName())
1991
2006
  child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
1992
2007
  self.setAutosarDataType(child_element, data_type)
1993
2008
  self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
1994
2009
  self.writeImplementationDataTypeElements(child_element, data_type)
2010
+ self.writeImplementationDataTypeSymbolProps(child_element, data_type)
1995
2011
  self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1996
2012
 
1997
2013
  def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
@@ -2000,7 +2016,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2000
2016
  arguments_tag = ET.SubElement(element, "ARGUMENTS")
2001
2017
  for prototype in arguments:
2002
2018
  child_element = ET.SubElement(arguments_tag, "ARGUMENT-DATA-PROTOTYPE")
2003
- self.setIdentifiable(child_element, prototype)
2019
+ self.writeIdentifiable(child_element, prototype)
2004
2020
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
2005
2021
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.typeTRef)
2006
2022
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
@@ -2016,7 +2032,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2016
2032
  def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
2017
2033
  self.logger.debug("writeClientServerOperation %s" % operation.getShortName())
2018
2034
  child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
2019
- self.setIdentifiable(child_element, operation)
2035
+ self.writeIdentifiable(child_element, operation)
2020
2036
  self.writeArgumentDataPrototypes(child_element, operation)
2021
2037
  self.writePossibleErrorRefs(child_element, operation)
2022
2038
 
@@ -2033,7 +2049,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2033
2049
  def writeApplicationError(self, element: ET.Element, error: ApplicationError):
2034
2050
  self.logger.debug("writeApplicationError %s" % error.getShortName())
2035
2051
  child_element = ET.SubElement(element, "APPLICATION-ERROR")
2036
- self.setIdentifiable(child_element, error)
2052
+ self.writeIdentifiable(child_element, error)
2037
2053
  self.setChildElementOptionalNumericalValue(child_element, "ERROR-CODE", error.error_code)
2038
2054
 
2039
2055
  def writePossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
@@ -2047,7 +2063,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2047
2063
  self._raiseError("Unsupported PossibleError %s" % type(error))
2048
2064
 
2049
2065
  def setPortInterface(self, element: ET.Element, port_interface: PortInterface):
2050
- self.setIdentifiable(element, port_interface)
2066
+ self.writeIdentifiable(element, port_interface)
2051
2067
  self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.isService)
2052
2068
  self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
2053
2069
 
@@ -2092,7 +2108,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2092
2108
  child_element = ET.SubElement(element, key)
2093
2109
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", layout_v.getShortLabel())
2094
2110
  self.setChildElementOptionalRefType(child_element, "BASE-TYPE-REF", layout_v.getBaseTypeRef())
2095
- self.setChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS", layout_v.getSwRecordLayoutVAxis())
2111
+ self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-AXIS", layout_v.getSwRecordLayoutVAxis())
2096
2112
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.getSwRecordLayoutVProp())
2097
2113
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.getSwRecordLayoutVIndex())
2098
2114
 
@@ -2101,7 +2117,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2101
2117
  child_element = ET.SubElement(element, key)
2102
2118
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", group.getShortLabel())
2103
2119
  self.setChildElementOptionalLiteral(child_element, "CATEGORY", group.getCategory())
2104
- self.setChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
2120
+ self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
2105
2121
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX", group.getSwRecordLayoutGroupIndex())
2106
2122
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.getSwRecordLayoutGroupFrom())
2107
2123
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.getSwRecordLayoutGroupTo())
@@ -2113,13 +2129,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2113
2129
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
2114
2130
  self.logger.debug("writeSwRecordLayout %s" % layout.getShortName())
2115
2131
  child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
2116
- self.setIdentifiable(child_element, layout)
2132
+ self.writeIdentifiable(child_element, layout)
2117
2133
  self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", layout.getSwRecordLayoutGroup())
2118
2134
 
2119
2135
  def writeSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
2120
2136
  self.logger.debug("writeSwAddrMethod %s" % method.getShortName())
2121
2137
  child_element = ET.SubElement(element, "SW-ADDR-METHOD")
2122
- self.setIdentifiable(child_element, method)
2138
+ self.writeIdentifiable(child_element, method)
2123
2139
  self.setChildElementOptionalLiteral(child_element, "MEMORY-ALLOCATION-KEYWORD-POLICY", method.getMemoryAllocationKeywordPolicy())
2124
2140
  options = method.getOptions()
2125
2141
  if len(options) > 0:
@@ -2161,13 +2177,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2161
2177
  def writeDataTypeMappingSet(self, element: ET.Element, mapping_set: DataTypeMappingSet):
2162
2178
  self.logger.debug("writeDataTypeMappingSet %s" % mapping_set.getShortName())
2163
2179
  child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-SET")
2164
- self.setIdentifiable(child_element, mapping_set)
2180
+ self.writeIdentifiable(child_element, mapping_set)
2165
2181
  self.writeDataTypeMaps(child_element, mapping_set)
2166
2182
  self.writeModeRequestTypeMaps(child_element, mapping_set)
2167
2183
 
2168
2184
  def setModeDeclaration(self, element: ET.Element, mode_declaration: ModeDeclaration):
2169
2185
  child_element = ET.SubElement(element, "MODE-DECLARATION")
2170
- self.setIdentifiable(child_element, mode_declaration)
2186
+ self.writeIdentifiable(child_element, mode_declaration)
2171
2187
  self.setChildElementOptionalNumericalValue(child_element, "VALUE", mode_declaration.getValue())
2172
2188
 
2173
2189
  def writeModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
@@ -2180,7 +2196,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2180
2196
  def writeModeDeclarationGroup(self, element: ET.Element, group: ModeDeclarationGroup):
2181
2197
  self.logger.debug("writeModeDeclarationGroup %s" % group.getShortName())
2182
2198
  child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP")
2183
- self.setIdentifiable(child_element, group)
2199
+ self.writeIdentifiable(child_element, group)
2184
2200
  self.setChildElementOptionalRefType(child_element, "INITIAL-MODE-REF", group.initialModeRef)
2185
2201
  self.writeModeDeclarationGroupModeDeclaration(child_element, group)
2186
2202
  self.setChildElementOptionalNumericalValue(child_element, "ON-TRANSITION-VALUE", group.getOnTransitionValue())
@@ -2190,7 +2206,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2190
2206
  if len(mode_groups) > 0:
2191
2207
  mode_group = mode_groups[0]
2192
2208
  child_element = ET.SubElement(element, "MODE-GROUP")
2193
- self.setIdentifiable(child_element, mode_group)
2209
+ self.writeIdentifiable(child_element, mode_group)
2194
2210
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", mode_group.type_tref)
2195
2211
 
2196
2212
  def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
@@ -2207,7 +2223,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2207
2223
 
2208
2224
  def writeEOCExecutableEntityRef(self, element: ET.Element, entity_ref: EOCExecutableEntityRef):
2209
2225
  child_element = ET.SubElement(element, "EOC-EXECUTABLE-ENTITY-REF")
2210
- self.setIdentifiable(child_element, entity_ref)
2226
+ self.writeIdentifiable(child_element, entity_ref)
2211
2227
  self.setEOCExecutableEntityRefSuccessorRefs(child_element, entity_ref.getSuccessorRefs())
2212
2228
 
2213
2229
  def writeExecutionOrderConstraintOrderedElement(self, element: ET.Element, constraint: ExecutionOrderConstraint):
@@ -2223,7 +2239,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2223
2239
  def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
2224
2240
  self.logger.debug("writeExecutionOrderConstraint %s" % constraint.getShortName())
2225
2241
  child_element = ET.SubElement(element, "EXECUTION-ORDER-CONSTRAINT")
2226
- self.setIdentifiable(child_element, constraint)
2242
+ self.writeIdentifiable(child_element, constraint)
2227
2243
  self.writeExecutionOrderConstraintOrderedElement(child_element, constraint)
2228
2244
 
2229
2245
  def writeTimingRequirements(self, element: ET.Element, extension: TimingExtension):
@@ -2242,7 +2258,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2242
2258
  def writeSwcTiming(self, element: ET.Element, timing: SwcTiming):
2243
2259
  self.logger.debug("writeSWcTiming %s" % timing.getShortName())
2244
2260
  child_element = ET.SubElement(element, "SWC-TIMING")
2245
- self.setIdentifiable(child_element, timing)
2261
+ self.writeIdentifiable(child_element, timing)
2246
2262
  self.writeTimingExtension(child_element, timing)
2247
2263
 
2248
2264
  def writePduToFrameMappings(self, element: ET.Element, parent: Frame):
@@ -2251,13 +2267,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2251
2267
  mappings_tags = ET.SubElement(element, "PDU-TO-FRAME-MAPPINGS")
2252
2268
  for mapping in mappings:
2253
2269
  child_element = ET.SubElement(mappings_tags, "PDU-TO-FRAME-MAPPING")
2254
- self.setIdentifiable(child_element, mapping)
2270
+ self.writeIdentifiable(child_element, mapping)
2255
2271
  self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.packingByteOrder)
2256
2272
  self.setChildElementOptionalRefType(child_element, "PDU-REF", mapping.pduRef)
2257
2273
  self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.startPosition)
2258
2274
 
2259
2275
  def writeFrame(self, element: ET.Element, frame: Frame):
2260
- self.setIdentifiable(element, frame)
2276
+ self.writeIdentifiable(element, frame)
2261
2277
  self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
2262
2278
  self.writePduToFrameMappings(element, frame)
2263
2279
 
@@ -2284,15 +2300,21 @@ class ARXMLWriter(AbstractARXMLWriter):
2284
2300
  self.setChildElementOptionalRefType(refs_tag, "TX-NM-PDU-REF", ref)
2285
2301
 
2286
2302
  def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
2287
- self.logger.debug("writeCanNmNode %s" % nm_node.getShortName())
2303
+ self.logger.debug("write CanNmNode %s" % nm_node.getShortName())
2288
2304
  child_element = ET.SubElement(element, "CAN-NM-NODE")
2289
- self.setIdentifiable(child_element, nm_node)
2305
+ self.writeIdentifiable(child_element, nm_node)
2290
2306
  self.writeNmNode(child_element, nm_node)
2291
2307
 
2292
2308
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2293
2309
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
2294
2310
  self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
2295
2311
 
2312
+ def writeUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
2313
+ self.logger.debug("write UdpNmNode %s" % nm_node.getShortName())
2314
+ child_element = ET.SubElement(element, "UDP-NM-NODE")
2315
+ self.writeIdentifiable(child_element, nm_node)
2316
+ self.writeNmNode(child_element, nm_node)
2317
+
2296
2318
  def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2297
2319
  nodes = parent.getNmNodes()
2298
2320
  if len(nodes) > 0:
@@ -2300,10 +2322,12 @@ class ARXMLWriter(AbstractARXMLWriter):
2300
2322
  for node in nodes:
2301
2323
  if isinstance(node, CanNmNode):
2302
2324
  self.writeCanNmNode(child_element, node)
2325
+ elif isinstance(node, UdpNmNode):
2326
+ self.writeUdpNmNode(child_element, node)
2303
2327
  else:
2304
- self._raiseError("Unsupported Nm Node <%s>" % type(node))
2328
+ self.notImplemented("Unsupported Nm Node <%s>" % type(node))
2305
2329
 
2306
- def setCanNmClusterCoupling(self, element: ET.Element, coupling: CanNmClusterCoupling):
2330
+ def writeCanNmClusterCoupling(self, element: ET.Element, coupling: CanNmClusterCoupling):
2307
2331
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER-COUPLING")
2308
2332
  refs = coupling.getCoupledClusterRefs()
2309
2333
  if len(refs) > 0:
@@ -2314,6 +2338,9 @@ class ARXMLWriter(AbstractARXMLWriter):
2314
2338
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
2315
2339
  self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2316
2340
 
2341
+ def writeUdpNmClusterCoupling(self, element: ET.Element, coupling: UdpNmClusterCoupling):
2342
+ child_element = ET.SubElement(element, "UDP-NM-CLUSTER-COUPLING")
2343
+
2317
2344
  def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
2318
2345
  self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
2319
2346
  couplings = config.getNmClusterCouplings()
@@ -2321,11 +2348,14 @@ class ARXMLWriter(AbstractARXMLWriter):
2321
2348
  child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
2322
2349
  for coupling in couplings:
2323
2350
  if isinstance(coupling, CanNmClusterCoupling):
2324
- self.setCanNmClusterCoupling(child_element, coupling)
2351
+ self.writeCanNmClusterCoupling(child_element, coupling)
2352
+ elif isinstance(coupling, UdpNmClusterCoupling):
2353
+ self.writeUdpNmClusterCoupling(child_element, coupling)
2325
2354
  else:
2326
- self._raiseError("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2355
+ self.notImplemented("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2327
2356
 
2328
2357
  def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
2358
+ self.writeIdentifiable(element, cluster)
2329
2359
  self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
2330
2360
  self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
2331
2361
  self.setChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER", cluster.nmChannelSleepMaster)
@@ -2335,7 +2365,6 @@ class ARXMLWriter(AbstractARXMLWriter):
2335
2365
  def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2336
2366
  self.logger.debug("WriteCanNmCluster %s" % cluster.getShortName())
2337
2367
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
2338
- self.setIdentifiable(child_element, cluster)
2339
2368
  self.writeNmCluster(child_element, cluster)
2340
2369
 
2341
2370
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ACTIVE", cluster.getNmBusloadReductionActive())
@@ -2353,6 +2382,11 @@ class ARXMLWriter(AbstractARXMLWriter):
2353
2382
  self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2354
2383
  self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2355
2384
 
2385
+ def writeUdpNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2386
+ self.logger.debug("Write UdpNmCluster %s" % cluster.getShortName())
2387
+ child_element = ET.SubElement(element, "UDP-NM-CLUSTER")
2388
+ self.writeNmCluster(child_element, cluster)
2389
+
2356
2390
  def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2357
2391
  clusters = parent.getNmClusters()
2358
2392
  if len(clusters) > 0:
@@ -2360,48 +2394,55 @@ class ARXMLWriter(AbstractARXMLWriter):
2360
2394
  for cluster in clusters:
2361
2395
  if isinstance(cluster, CanNmCluster):
2362
2396
  self.writeCanNmCluster(child_element, cluster)
2397
+ elif isinstance(cluster, UdpNmCluster):
2398
+ self.writeUdpNmCluster(child_element, cluster)
2363
2399
  else:
2364
- self._raiseError("Unsupported Nm Cluster <%s>" % type(cluster))
2400
+ self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
2365
2401
 
2366
2402
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
2367
- self.logger.debug("WriteNmConfig %s" % config.getShortName())
2403
+ self.logger.debug("Write NmConfig <%s>" % config.getShortName())
2368
2404
  child_element = ET.SubElement(element, "NM-CONFIG")
2369
- self.setIdentifiable(child_element, config)
2405
+ self.writeIdentifiable(child_element, config)
2370
2406
  self.writeNmConfigNmClusters(child_element, config)
2371
2407
  self.writeNmConfigNmClusterCouplings(child_element, config)
2372
2408
 
2373
2409
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2374
- self.logger.debug("NmPdu %s" % pdu.getShortName())
2410
+ self.logger.debug("Write NmPdu <%s>" % pdu.getShortName())
2375
2411
  child_element = ET.SubElement(element, "NM-PDU")
2376
- self.setIdentifiable(child_element, pdu)
2412
+ self.writeIdentifiable(child_element, pdu)
2377
2413
  self.writeIPdu(child_element, pdu)
2378
2414
 
2379
2415
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
2380
- self.logger.debug("NPdu %s" % pdu.getShortName())
2416
+ self.logger.debug("Write NPdu <%s>" % pdu.getShortName())
2381
2417
  child_element = ET.SubElement(element, "N-PDU")
2382
- self.setIdentifiable(child_element, pdu)
2418
+ self.writeIdentifiable(child_element, pdu)
2383
2419
  self.writeIPdu(child_element, pdu)
2384
2420
 
2385
2421
  def writeIPdu(self, element: ET.Element, pdu: IPdu):
2386
2422
  self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
2387
2423
 
2388
2424
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2389
- self.logger.debug("DcmIPdu %s" % pdu.getShortName())
2425
+ self.logger.debug("Write DcmIPdu <%s>" % pdu.getShortName())
2390
2426
  child_element = ET.SubElement(element, "DCM-I-PDU")
2391
- self.setIdentifiable(child_element, pdu)
2427
+ self.writeIdentifiable(child_element, pdu)
2392
2428
  self.writeIPdu(child_element, pdu)
2393
2429
  self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2394
2430
 
2395
2431
  def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2396
- self.logger.debug("SecuredIPdu %s" % pdu.getShortName())
2432
+ self.logger.debug("Write SecuredIPdu <%s>" % pdu.getShortName())
2397
2433
  child_element = ET.SubElement(element, "SECURED-I-PDU")
2398
- self.setIdentifiable(child_element, pdu)
2434
+ self.writeIdentifiable(child_element, pdu)
2399
2435
  self.writeIPdu(child_element, pdu)
2400
2436
 
2401
2437
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2402
- self.logger.debug("CanTpConfig %s" % config.getShortName())
2438
+ self.logger.debug("Write CanTpConfig <%s>" % config.getShortName())
2403
2439
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2404
- self.setIdentifiable(child_element, config)
2440
+ self.writeIdentifiable(child_element, config)
2441
+
2442
+ def writeLinTpConfig(self, element: ET.Element, config: LinTpConfig):
2443
+ self.logger.debug("Write LinTpConfig <%s>" % config.getShortName())
2444
+ child_element = ET.SubElement(element, "LIN-TP-CONFIG")
2445
+ self.writeIdentifiable(child_element, config)
2405
2446
 
2406
2447
  def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2407
2448
  ref_list = triggering.getFramePortRefs()
@@ -2421,7 +2462,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2421
2462
  def writeCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2422
2463
  self.logger.debug("WRite CanFrameTriggering %s" % triggering.getShortName())
2423
2464
  child_element = ET.SubElement(element, "CAN-FRAME-TRIGGERING")
2424
- self.setIdentifiable(child_element, triggering)
2465
+ self.writeIdentifiable(child_element, triggering)
2425
2466
  self.writeFrameTriggering(child_element, triggering)
2426
2467
  self.setChildElementOptionalLiteral(child_element, "CAN-ADDRESSING-MODE", triggering.getCanAddressingMode())
2427
2468
  self.setChildElementOptionalBooleanValue(child_element, "CAN-FD-FRAME-SUPPORT", triggering.getCanFdFrameSupport())
@@ -2433,7 +2474,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2433
2474
  def writeLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2434
2475
  self.logger.debug("Write LinFrameTriggering %s" % triggering.getShortName())
2435
2476
  child_element = ET.SubElement(element, "LIN-FRAME-TRIGGERING")
2436
- self.setIdentifiable(child_element, triggering)
2477
+ self.writeIdentifiable(child_element, triggering)
2437
2478
  self.writeFrameTriggering(child_element, triggering)
2438
2479
  self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2439
2480
  self.setChildElementOptionalLiteral(child_element, "LIN-CHECKSUM", triggering.getLinChecksum())
@@ -2441,7 +2482,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2441
2482
  def writeISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2442
2483
  self.logger.debug("Write ISignalTriggering %s" % triggering.getShortName())
2443
2484
  child_element = ET.SubElement(element, "I-SIGNAL-TRIGGERING")
2444
- self.setIdentifiable(child_element, triggering)
2485
+ self.writeIdentifiable(child_element, triggering)
2445
2486
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", triggering.getISignalGroupRef())
2446
2487
  ref_list = triggering.getISignalPortRefs()
2447
2488
  if len(ref_list) > 0:
@@ -2453,7 +2494,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2453
2494
  def writePduTriggering(self, element: ET.Element, triggering: PduTriggering):
2454
2495
  self.logger.debug("Write PduTriggering %s" % triggering.getShortName())
2455
2496
  child_element = ET.SubElement(element, "PDU-TRIGGERING")
2456
- self.setIdentifiable(child_element, triggering)
2497
+ self.writeIdentifiable(child_element, triggering)
2457
2498
  ref_list = triggering.getIPduPortRefs()
2458
2499
  if len(ref_list) > 0:
2459
2500
  i_signal_port_refs_tag = ET.SubElement(child_element, "I-PDU-PORT-REFS")
@@ -2505,17 +2546,55 @@ class ARXMLWriter(AbstractARXMLWriter):
2505
2546
  else:
2506
2547
  self.notImplemented("Unsupported PduTriggering <%s>" % type(triggering))
2507
2548
 
2508
- def setCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2549
+ def writeCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2509
2550
  self.logger.debug("Set CanPhysicalChannel %s" % channel.getShortName())
2510
2551
  child_element = ET.SubElement(element, "CAN-PHYSICAL-CHANNEL")
2511
- self.setIdentifiable(child_element, channel)
2552
+ self.writeIdentifiable(child_element, channel)
2512
2553
  self.writePhysicalChannel(child_element, channel)
2513
2554
 
2555
+ def writeScheduleTableEntry(self, element: ET.Element, entry: ScheduleTableEntry):
2556
+ self.setChildElementOptionalTimeValue(element, "DELAY", entry.getDelay())
2557
+ self.setChildElementOptionalIntegerValue(element, "POSITION-IN-TABLE", entry.getPositionInTable())
2558
+
2559
+ def setApplicationEntry(self, element: ET.Element, key: str, entry: ApplicationEntry):
2560
+ if entry is not None:
2561
+ child_element = ET.SubElement(element, key)
2562
+ self.writeScheduleTableEntry(child_element, entry)
2563
+ self.setChildElementOptionalRefType(child_element, "FRAME-TRIGGERING-REF", entry.getFrameTriggeringRef())
2564
+
2565
+ def writeLinScheduleTableTableEntries(self, element: ET.Element, table: LinScheduleTable):
2566
+ entries = table.getTableEntries()
2567
+ if len(entries) > 0:
2568
+ child_element = ET.SubElement(element, "TABLE-ENTRYS")
2569
+ for entry in entries:
2570
+ if isinstance(entry, ApplicationEntry):
2571
+ self.setApplicationEntry(child_element, "APPLICATION-ENTRY", entry)
2572
+ else:
2573
+ self.notImplemented("Unsupported Schedule Table <%s>" % type(entry))
2574
+
2575
+ def writeLinScheduleTable(self, element: ET.Element, table: LinScheduleTable):
2576
+ child_element = ET.SubElement(element, "LIN-SCHEDULE-TABLE")
2577
+ self.writeIdentifiable(child_element, table)
2578
+ self.setChildElementOptionalLiteral(child_element, "RESUME-POSITION", table.getResumePosition())
2579
+ self.setChildElementOptionalLiteral(child_element, "RUN-MODE", table.getRunMode())
2580
+ self.writeLinScheduleTableTableEntries(child_element, table)
2581
+
2582
+ def writeLinPhysicalChannelScheduleTables(self, element: ET.Element, channel: LinPhysicalChannel):
2583
+ tables = channel.getScheduleTables()
2584
+ if len(tables) > 0:
2585
+ child_element = ET.SubElement(element, "SCHEDULE-TABLES")
2586
+ for table in tables:
2587
+ if isinstance(table, LinScheduleTable):
2588
+ self.writeLinScheduleTable(child_element, table)
2589
+ else:
2590
+ self.notImplemented("Unsupported Schedule Table <%s>" % type(table))
2591
+
2514
2592
  def writeLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2515
2593
  self.logger.debug("Set LinPhysicalChannel %s" % channel.getShortName())
2516
2594
  child_element = ET.SubElement(element, "LIN-PHYSICAL-CHANNEL")
2517
- self.setIdentifiable(child_element, channel)
2595
+ self.writeIdentifiable(child_element, channel)
2518
2596
  self.writePhysicalChannel(child_element, channel)
2597
+ self.writeLinPhysicalChannelScheduleTables(child_element, channel)
2519
2598
 
2520
2599
  def setIpv6Configuration(self, element: ET.Element, configuration: Ipv6Configuration):
2521
2600
  if configuration is not None:
@@ -2537,10 +2616,21 @@ class ARXMLWriter(AbstractARXMLWriter):
2537
2616
  else:
2538
2617
  self.notImplemented("Unsupported Network EndPoint Address <%s>" % type(address))
2539
2618
 
2619
+ def setDoIpEntity(self, element: ET.Element, key: str, entity: DoIpEntity):
2620
+ if entity is not None:
2621
+ child_element = ET.SubElement(element, key)
2622
+ self.setChildElementOptionalLiteral(child_element, "DO-IP-ENTITY-ROLE", entity.getDoIpEntityRole())
2623
+
2624
+ def setInfrastructureServices(self, element: ET.Element, key: str, services: InfrastructureServices):
2625
+ if services is not None:
2626
+ child_element = ET.SubElement(element, key)
2627
+ self.setDoIpEntity(child_element, "DO-IP-ENTITY", services.getDoIpEntity())
2628
+
2540
2629
  def writeNetworkEndPoint(self, element: ET.Element, end_point: NetworkEndpoint):
2541
2630
  self.logger.debug("Set NetworkEndpoint %s" % end_point.getShortName())
2542
2631
  child_element = ET.SubElement(element, "NETWORK-ENDPOINT")
2543
- self.setIdentifiable(child_element, end_point)
2632
+ self.writeIdentifiable(child_element, end_point)
2633
+ self.setInfrastructureServices(child_element, "INFRASTRUCTURE-SERVICES", end_point.getInfrastructureServices())
2544
2634
  self.writeNetworkEndPointNetworkEndPointAddresses(child_element, end_point.getNetworkEndpointAddresses())
2545
2635
  self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
2546
2636
 
@@ -2571,10 +2661,14 @@ class ARXMLWriter(AbstractARXMLWriter):
2571
2661
  def setSocketConnection(self, element: ET.Element, connection: SocketConnection):
2572
2662
  if connection is not None:
2573
2663
  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())
2574
2666
  self.setChildElementOptionalRefType(child_element, "CLIENT-PORT-REF", connection.getClientPortRef())
2575
2667
  self.setSocketConnectionPdus(child_element, "PDUS", connection.getPdus())
2576
2668
  self.setChildElementOptionalPositiveInteger(child_element, "PDU-COLLECTION-MAX-BUFFER-SIZE", connection.getPduCollectionMaxBufferSize())
2577
2669
  self.setChildElementOptionalTimeValue(child_element, "PDU-COLLECTION-TIMEOUT", connection.getPduCollectionTimeout())
2670
+ self.setChildElementOptionalLiteral(child_element, "RUNTIME-IP-ADDRESS-CONFIGURATION", connection.getRuntimeIpAddressConfiguration())
2671
+ self.setChildElementOptionalLiteral(child_element, "RUNTIME-PORT-CONFIGURATION", connection.getRuntimePortConfiguration())
2578
2672
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", connection.getShortLabel())
2579
2673
 
2580
2674
  def writeSocketConnectionBundleConnections(self, element: ET.Element, bundle: SocketConnectionBundle):
@@ -2590,7 +2684,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2590
2684
  def writeSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
2591
2685
  if bundle is not None:
2592
2686
  child_element = ET.SubElement(element, "SOCKET-CONNECTION-BUNDLE")
2593
- self.setReferable(child_element, bundle)
2687
+ self.writeReferrable(child_element, bundle)
2594
2688
  self.writeSocketConnectionBundleConnections(child_element, bundle)
2595
2689
  self.setChildElementOptionalRefType(child_element, "SERVER-PORT-REF", bundle.getServerPortRef())
2596
2690
 
@@ -2604,18 +2698,237 @@ class ARXMLWriter(AbstractARXMLWriter):
2604
2698
  else:
2605
2699
  self.notImplemented("Unsupported Connection Bundle <%s>" % type(bundle))
2606
2700
 
2607
- def setSoAdConfig(self, element: ET.Element, key: str, config: SoAdConfig):
2701
+ def setTpPort(self, element: ET.SubElement, key: str, port: TpPort):
2702
+ if port is not None:
2703
+ child_element = ET.SubElement(element, key)
2704
+ self.setChildElementOptionalBooleanValue(child_element, "DYNAMICALLY-ASSIGNED", port.getDynamicallyAssigned())
2705
+ self.setChildElementOptionalPositiveInteger(child_element, "PORT-NUMBER", port.getPortNumber())
2706
+
2707
+ def writeUdpTp(self, element: ET.Element, tp: UdpTp):
2708
+ child_element = ET.SubElement(element, "UDP-TP")
2709
+ self.setTpPort(child_element, "UDP-TP-PORT", tp.getUdpTpPort())
2710
+
2711
+ def writeTcpTp(self, element: ET.Element, tp: TcpTp):
2712
+ child_element = ET.SubElement(element, "TCP-TP")
2713
+ self.setChildElementOptionalTimeValue(child_element, "KEEP-ALIVE-INTERVAL", tp.getKeepAliveInterval())
2714
+ self.setChildElementOptionalPositiveInteger(child_element, "KEEP-ALIVE-PROBES-MAX", tp.getKeepAliveProbesMax())
2715
+ self.setChildElementOptionalTimeValue(child_element, "KEEP-ALIVE-TIME", tp.getKeepAliveTime())
2716
+ self.setChildElementOptionalBooleanValue(child_element, "KEEP-ALIVES", tp.getKeepAlives())
2717
+ self.setChildElementOptionalLiteral(child_element, "NAGLES-ALGORITHM", tp.getNaglesAlgorithm())
2718
+ self.setTpPort(child_element, "TCP-TP-PORT", tp.getTcpTpPort())
2719
+
2720
+ def writeGenericTp(self, element: ET.Element, tp: GenericTp):
2721
+ child_element = ET.SubElement(element, "GENERIC-TP")
2722
+ self.setChildElementOptionalLiteral(child_element, "TP-ADDRESS", tp.getTpAddress())
2723
+ self.setChildElementOptionalLiteral(child_element, "TP-TECHNOLOGY", tp.getTpTechnology())
2724
+
2725
+ def writeTransportProtocolConfiguration(self, element: ET.Element, configuration: TransportProtocolConfiguration):
2726
+ if configuration is not None:
2727
+ child_element = ET.SubElement(element, "TP-CONFIGURATION")
2728
+ if isinstance(configuration, UdpTp):
2729
+ self.writeUdpTp(child_element, configuration)
2730
+ elif isinstance(configuration, TcpTp):
2731
+ self.writeTcpTp(child_element, configuration)
2732
+ elif isinstance(configuration, GenericTp):
2733
+ self.writeGenericTp(child_element, configuration)
2734
+ else:
2735
+ self.notImplemented("Unsupported TransportProtocolConfiguration <%s>" % type(configuration))
2736
+
2737
+ return configuration
2738
+
2739
+ def writeConsumedEventGroupRoutingGroupRefs(self, element: ET.Element, group: ConsumedEventGroup):
2740
+ refs = group.getRoutingGroupRefs()
2741
+ if len(refs) > 0:
2742
+ child_element = ET.SubElement(element, "ROUTING-GROUP-REFS")
2743
+ for ref in refs:
2744
+ self.setChildElementOptionalRefType(child_element, "ROUTING-GROUP-REF", ref)
2745
+
2746
+ def setRequestResponseDelay(self, element: ET.Element, key: str, delay: RequestResponseDelay):
2747
+ if delay is not None:
2748
+ child_element = ET.SubElement(element, key)
2749
+ self.setChildElementOptionalTimeValue(child_element, "MAX-VALUE", delay.getMaxValue())
2750
+ self.setChildElementOptionalTimeValue(child_element, "MIN-VALUE", delay.getMinValue())
2751
+
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
+ def setSdClientConfig(self, element: ET.Element, key: str, config: SdClientConfig):
2761
+ if config is not None:
2762
+ child_element = ET.SubElement(element, key)
2763
+
2764
+ self.setChildElementOptionalPositiveInteger(child_element, "CLIENT-SERVICE-MAJOR-VERSION", config.getClientServiceMajorVersion())
2765
+ self.setChildElementOptionalPositiveInteger(child_element, "CLIENT-SERVICE-MINOR-VERSION", config.getClientServiceMinorVersion())
2766
+ self.setInitialSdDelayConfig(child_element, "INITIAL-FIND-BEHAVIOR", config.getInitialFindBehavior())
2767
+ self.setRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY", config.getRequestResponseDelay())
2768
+ self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
2769
+
2770
+ def writeConsumedEventGroup(self, element: ET.Element, group: ConsumedEventGroup):
2771
+ if group is not None:
2772
+ child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUP")
2773
+ self.writeIdentifiable(child_element, group)
2774
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", group.getApplicationEndpointRef())
2775
+ self.setChildElementOptionalPositiveInteger(child_element, "EVENT-GROUP-IDENTIFIER", group.getEventGroupIdentifier())
2776
+ self.writeConsumedEventGroupRoutingGroupRefs(child_element, group)
2777
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", group.getSdClientConfig())
2778
+
2779
+ def writeConsumedServiceInstanceConsumedEventGroups(self, element: ET.Element, instance: ConsumedServiceInstance):
2780
+ groups = instance.getConsumedEventGroups()
2781
+ if len(groups) > 0:
2782
+ child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUPS")
2783
+ for group in groups:
2784
+ if isinstance(group, ConsumedEventGroup):
2785
+ self.writeConsumedEventGroup(child_element, group)
2786
+ else:
2787
+ self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
2788
+
2789
+ def writeConsumedServiceInstance(self, element: ET.Element, instance: ConsumedServiceInstance):
2790
+ if instance is not None:
2791
+ child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCE")
2792
+ self.writeIdentifiable(child_element, instance)
2793
+ self.writeConsumedServiceInstanceConsumedEventGroups(child_element, instance)
2794
+ self.setChildElementOptionalRefType(child_element, "PROVIDED-SERVICE-INSTANCE-REF", instance.getProvidedServiceInstanceRef())
2795
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", instance.getSdClientConfig())
2796
+
2797
+ def writeSocketAddressApplicationEndpointConsumedServiceInstances(self, element: ET.Element, end_point: ApplicationEndpoint):
2798
+ instances = end_point.getConsumedServiceInstances()
2799
+ if len(instances) > 0:
2800
+ child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCES")
2801
+ for instance in instances:
2802
+ if isinstance(instance, ConsumedServiceInstance):
2803
+ self.writeConsumedServiceInstance(child_element, instance)
2804
+ else:
2805
+ self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2806
+
2807
+ def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
2808
+ if config is not None:
2809
+ child_element = ET.SubElement(element, key)
2810
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE", config.getInitialDelayMaxValue())
2811
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE", config.getInitialDelayMinValue())
2812
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY", config.getInitialRepetitionsBaseDelay())
2813
+ self.setChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX", config.getInitialRepetitionsMax())
2814
+
2815
+ def setSdServerConfig(self, element: ET.Element, key: str, config: SdServerConfig):
2816
+ if config is not None:
2817
+ child_element = ET.SubElement(element, key)
2818
+ self.setInitialSdDelayConfig(child_element, "INITIAL-OFFER-BEHAVIOR", config.getInitialOfferBehavior())
2819
+ self.setChildElementOptionalTimeValue(child_element, "OFFER-CYCLIC-DELAY", config.getOfferCyclicDelay())
2820
+ self.setRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY", config.getRequestResponseDelay())
2821
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MAJOR-VERSION", config.getServerServiceMajorVersion())
2822
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MINOR-VERSION", config.getServerServiceMinorVersion())
2823
+ self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
2824
+
2825
+ def writeEventHandler(self, element: ET.Element, handler: EventHandler):
2826
+ if handler is not None:
2827
+ child_element = ET.SubElement(element, "EVENT-HANDLER")
2828
+ self.writeIdentifiable(child_element, handler)
2829
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", handler.getApplicationEndpointRef())
2830
+
2831
+ refs = handler.getConsumedEventGroupRefs()
2832
+ if len(refs) > 0:
2833
+ refs_tag = ET.SubElement(child_element, "CONSUMED-EVENT-GROUP-REFS")
2834
+ for ref in refs:
2835
+ self.setChildElementOptionalRefType(refs_tag, "CONSUMED-EVENT-GROUP-REF", ref)
2836
+
2837
+ self.setChildElementOptionalPositiveInteger(child_element, "MULTICAST-THRESHOLD", handler.getMulticastThreshold())
2838
+
2839
+ refs = handler.getRoutingGroupRefs()
2840
+ if len(refs) > 0:
2841
+ refs_tag = ET.SubElement(child_element, "ROUTING-GROUP-REFS")
2842
+ for ref in refs:
2843
+ self.setChildElementOptionalRefType(refs_tag, "ROUTING-GROUP-REF", ref)
2844
+ self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", handler.getSdServerConfig())
2845
+
2846
+ def writeProvidedServiceInstanceEventHandlers(self, element: ET.Element, instance: ProvidedServiceInstance):
2847
+ handlers = instance.getEventHandlers()
2848
+ if len(handlers) > 0:
2849
+ child_element = ET.SubElement(element, "EVENT-HANDLERS")
2850
+ for handler in handlers:
2851
+ if isinstance(handler, EventHandler):
2852
+ self.writeEventHandler(child_element, handler)
2853
+ else:
2854
+ self.notImplemented("Unsupported Event Handler <%s>" % type(handler))
2855
+
2856
+ def writeProvidedServiceInstance(self, element: ET.Element, instance: ProvidedServiceInstance):
2857
+ if instance is not None:
2858
+ child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCE")
2859
+ self.writeIdentifiable(child_element, instance)
2860
+ self.writeProvidedServiceInstanceEventHandlers(child_element, instance)
2861
+ self.setChildElementOptionalPositiveInteger(child_element, "INSTANCE-IDENTIFIER", instance.getInstanceIdentifier())
2862
+ self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", instance.getSdServerConfig())
2863
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVICE-IDENTIFIER", instance.getServiceIdentifier())
2864
+
2865
+ def writeSocketAddressApplicationEndpointProvidedServiceInstance(self, element: ET.Element, end_point: ApplicationEndpoint):
2866
+ instances = end_point.getProvidedServiceInstances()
2867
+ if len(instances) > 0:
2868
+ child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCES")
2869
+ for instance in instances:
2870
+ if isinstance(instance, ProvidedServiceInstance):
2871
+ self.writeProvidedServiceInstance(child_element, instance)
2872
+ else:
2873
+ self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2874
+
2875
+ def writeSocketAddressApplicationEndpoint(self, element: ET.Element, address: SocketAddress):
2876
+ end_point = address.getApplicationEndpoint()
2877
+ if end_point is not None:
2878
+ child_element = ET.SubElement(element, "APPLICATION-ENDPOINT")
2879
+ self.writeIdentifiable(child_element, end_point)
2880
+ self.writeSocketAddressApplicationEndpointConsumedServiceInstances(child_element, end_point)
2881
+ self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", end_point.getNetworkEndpointRef())
2882
+ self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
2883
+ self.writeSocketAddressApplicationEndpointProvidedServiceInstance(child_element, end_point)
2884
+ self.writeTransportProtocolConfiguration(child_element, end_point.getTpConfiguration())
2885
+
2886
+ def writeSocketAddressMulticastConnectorRefs(self, element: ET.Element, address: SocketAddress):
2887
+ refs = address.getMulticastConnectorRefs()
2888
+ if len(refs) > 0:
2889
+ child_element = ET.SubElement(element, "MULTICAST-CONNECTOR-REFS")
2890
+ for ref in refs:
2891
+ self.setChildElementOptionalRefType(child_element, "MULTICAST-CONNECTOR-REF", ref)
2892
+
2893
+ def writeSocketAddress(self, element: ET.Element, address: SocketAddress):
2894
+ child_element = ET.SubElement(element, "SOCKET-ADDRESS")
2895
+ self.writeIdentifiable(child_element, address)
2896
+ self.writeSocketAddressApplicationEndpoint(child_element, address)
2897
+ self.writeSocketAddressMulticastConnectorRefs(child_element, address)
2898
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", address.getConnectorRef())
2899
+ self.setChildElementOptionalPositiveInteger(child_element, "PORT-ADDRESS", address.getPortAddress())
2900
+
2901
+ def writeSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
2902
+ addresses = config.getSocketAddresses()
2903
+ if len(addresses) > 0:
2904
+ child_element = ET.SubElement(element, "SOCKET-ADDRESSS")
2905
+ for address in addresses:
2906
+ if isinstance(address, SocketAddress):
2907
+ self.writeSocketAddress(child_element, address)
2908
+ else:
2909
+ self.notImplemented("Unsupported Socket Address <%s>" % type(address))
2910
+
2911
+ def writeSoAdConfig(self, element: ET.Element, key: str, config: SoAdConfig):
2608
2912
  if config is not None:
2609
2913
  child_element = ET.SubElement(element, key)
2610
2914
  self.writeSoAdConfigConnectionBundles(child_element, config)
2915
+ self.writeSoAdConfigSocketAddresses(child_element, config)
2916
+
2917
+ def writeEthernetPhysicalChannelVlan(self, element: ET.Element, channel: EthernetPhysicalChannel):
2918
+ vlan = channel.getVlan()
2919
+ if vlan is not None:
2920
+ child_element = ET.SubElement(element, "VLAN")
2921
+ self.writeIdentifiable(child_element, vlan)
2922
+ self.setChildElementOptionalPositiveInteger(child_element, "VLAN-IDENTIFIER", vlan.getVlanIdentifier())
2611
2923
 
2612
- def setEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2924
+ def writeEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2613
2925
  self.logger.debug("Set EthernetPhysicalChannel %s" % channel.getShortName())
2614
2926
  child_element = ET.SubElement(element, "ETHERNET-PHYSICAL-CHANNEL")
2615
- self.setIdentifiable(child_element, channel)
2927
+ self.writeIdentifiable(child_element, channel)
2616
2928
  self.writePhysicalChannel(child_element, channel)
2617
2929
  self.writeEthernetPhysicalChannelNetworkEndPoints(child_element, channel.getNetworkEndpoints())
2618
- self.setSoAdConfig(child_element, "SO-AD-CONFIG", channel.getSoAdConfig())
2930
+ self.writeSoAdConfig(child_element, "SO-AD-CONFIG", channel.getSoAdConfig())
2931
+ self.writeEthernetPhysicalChannelVlan(child_element, channel)
2619
2932
 
2620
2933
  def writeCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2621
2934
  channels = cluster.getPhysicalChannels()
@@ -2623,11 +2936,11 @@ class ARXMLWriter(AbstractARXMLWriter):
2623
2936
  child_element = ET.SubElement(element, "PHYSICAL-CHANNELS")
2624
2937
  for channel in channels:
2625
2938
  if isinstance(channel, CanPhysicalChannel):
2626
- self.setCanPhysicalChannel(child_element, channel)
2939
+ self.writeCanPhysicalChannel(child_element, channel)
2627
2940
  elif isinstance(channel, LinPhysicalChannel):
2628
2941
  self.writeLinPhysicalChannel(child_element, channel)
2629
2942
  elif isinstance(channel, EthernetPhysicalChannel):
2630
- self.setEthernetPhysicalChannel(child_element, channel)
2943
+ self.writeEthernetPhysicalChannel(child_element, channel)
2631
2944
  else:
2632
2945
  self.notImplemented("Unsupported Physical Channel <%s>" % type(channel))
2633
2946
 
@@ -2637,14 +2950,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2637
2950
  self.setChildElementOptionalLiteral(element, "PROTOCOL-NAME", cluster.getProtocolName())
2638
2951
  self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", cluster.getProtocolVersion())
2639
2952
 
2640
- def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2953
+ def setCanClusterBusOffRecovery(self, element: ET.Element, key: str, recovery: CanClusterBusOffRecovery):
2954
+ if recovery is not None:
2955
+ child_element = ET.SubElement(element, key)
2956
+ self.setChildElementOptionalPositiveInteger(child_element, "BOR-COUNTER-L-1-TO-L-2", recovery.getBorCounterL1ToL2())
2957
+ self.setChildElementOptionalTimeValue(child_element, "BOR-TIME-L-1", recovery.getBorTimeL1())
2958
+ self.setChildElementOptionalTimeValue(child_element, "BOR-TIME-L-2", recovery.getBorTimeL2())
2959
+
2960
+ def writeAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2961
+ self.setCanClusterBusOffRecovery(element, "BUS-OFF-RECOVERY", cluster.getBusOffRecovery())
2641
2962
  self.setChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE", cluster.getCanFdBaudrate())
2642
2963
  self.setChildElementOptionalNumericalValue(element, "SPEED", cluster.getSpeed())
2643
2964
 
2644
2965
  def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
2645
2966
  self.logger.debug("LinCluster %s" % cluster.getShortName())
2646
2967
  child_element = ET.SubElement(element, "LIN-CLUSTER")
2647
- self.setIdentifiable(child_element, cluster)
2968
+ self.writeIdentifiable(child_element, cluster)
2648
2969
  child_element = ET.SubElement(child_element, "LIN-CLUSTER-VARIANTS")
2649
2970
  child_element = ET.SubElement(child_element, "LIN-CLUSTER-CONDITIONAL")
2650
2971
  self.writeCommunicationCluster(child_element, cluster)
@@ -2652,21 +2973,38 @@ class ARXMLWriter(AbstractARXMLWriter):
2652
2973
  def writeCanCluster(self, element: ET.Element, cluster: CanCluster):
2653
2974
  self.logger.debug("CanCluster %s" % cluster.getShortName())
2654
2975
  child_element = ET.SubElement(element, "CAN-CLUSTER")
2655
- self.setIdentifiable(child_element, cluster)
2976
+ self.writeIdentifiable(child_element, cluster)
2656
2977
 
2657
2978
  child_element = ET.SubElement(child_element, "CAN-CLUSTER-VARIANTS")
2658
2979
  child_element = ET.SubElement(child_element, "CAN-CLUSTER-CONDITIONAL")
2659
2980
  self.writeCommunicationCluster(child_element, cluster)
2660
- self.readAbstractCanCluster(child_element, cluster)
2981
+ self.writeAbstractCanCluster(child_element, cluster)
2982
+
2983
+ def writeMacMulticastGroup(self, element: ET.Element, group: MacMulticastGroup):
2984
+ if group is not None:
2985
+ child_element = ET.SubElement(element, "MAC-MULTICAST-GROUP")
2986
+ self.writeIdentifiable(child_element, group)
2987
+ self.setChildElementOptionalLiteral(child_element, "MAC-MULTICAST-ADDRESS", group.getMacMulticastAddress())
2988
+
2989
+ def writeEthernetClusterMacMulticastGroups(self, element: ET.Element, cluster: EthernetCluster):
2990
+ groups = cluster.getMacMulticastGroups()
2991
+ if len(groups) > 0:
2992
+ child_element = ET.SubElement(element, "MAC-MULTICAST-GROUPS")
2993
+ for group in groups:
2994
+ if isinstance(group, MacMulticastGroup):
2995
+ self.writeMacMulticastGroup(child_element, group)
2996
+ else:
2997
+ self.notImplemented("Unsupported assigned data type <%s>" % type(group))
2661
2998
 
2662
2999
  def writeEthernetCluster(self, element: ET.Element, cluster: EthernetCluster):
2663
3000
  self.logger.debug("Set EthernetCluster %s" % cluster.getShortName())
2664
3001
  child_element = ET.SubElement(element, "ETHERNET-CLUSTER")
2665
- self.setARElement(child_element, cluster)
3002
+ self.writeARElement(child_element, cluster)
2666
3003
 
2667
3004
  child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-VARIANTS")
2668
3005
  child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-CONDITIONAL")
2669
3006
  self.writeCommunicationCluster(child_element, cluster)
3007
+ self.writeEthernetClusterMacMulticastGroups(child_element, cluster)
2670
3008
 
2671
3009
  def writeCanFrame(self, element: ET.Element, frame: CanFrame):
2672
3010
  self.logger.debug("Write CanFrame %s" % frame.getShortName())
@@ -2674,7 +3012,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2674
3012
  self.writeFrame(child_element, frame)
2675
3013
 
2676
3014
  def writeCommConnectorPort(self, element: ET.Element, port: CommConnectorPort):
2677
- self.setIdentifiable(element, port)
3015
+ self.writeIdentifiable(element, port)
2678
3016
  self.setChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION", port.getCommunicationDirection())
2679
3017
 
2680
3018
  def writeFramePort(self, element: ET.Element, port: FramePort):
@@ -2684,10 +3022,14 @@ class ARXMLWriter(AbstractARXMLWriter):
2684
3022
  def writeIPduPort(self, element: ET.Element, port: IPduPort):
2685
3023
  child_element = ET.SubElement(element, "I-PDU-PORT")
2686
3024
  self.writeCommConnectorPort(child_element, port)
3025
+ self.setChildElementOptionalPositiveInteger(child_element, "KEY-ID", port.getKeyId())
3026
+ self.setChildElementOptionalBooleanValue(child_element, "RX-SECURITY-VERIFICATION", port.getRxSecurityVerification())
3027
+ self.setChildElementOptionalBooleanValue(child_element, "USE-AUTH-DATA-FRESHNESS", port.getUseAuthDataFreshness())
2687
3028
 
2688
3029
  def writeISignalPort(self, element: ET.Element, port: ISignalPort):
2689
3030
  child_element = ET.SubElement(element, "I-SIGNAL-PORT")
2690
3031
  self.writeCommConnectorPort(child_element, port)
3032
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT", port.getTimeout())
2691
3033
 
2692
3034
  def writeCommunicationConnectorEcuCommPortInstances(self, element: ET.Element, connector: CommunicationConnector):
2693
3035
  self.logger.debug("write EcuCommPortInstances of CommunicationConnector %s" % connector.getShortName())
@@ -2702,34 +3044,176 @@ class ARXMLWriter(AbstractARXMLWriter):
2702
3044
  elif isinstance(port, ISignalPort):
2703
3045
  self.writeISignalPort(instances_tag, port)
2704
3046
  else:
2705
- self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
3047
+ self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
2706
3048
 
2707
- def setCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
3049
+ def writeCommunicationController(self, element: ET.Element, controller: CommunicationController):
3050
+ self.setChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED", controller.getWakeUpByControllerSupported())
3051
+
3052
+ def setCanControllerFdConfiguration(self, element: ET.Element, key: str, configuration: CanControllerFdConfiguration):
3053
+ if configuration is not None:
3054
+ child_element = ET.SubElement(element, key)
3055
+ #TODO: need to implemented
3056
+
3057
+ def setCanControllerFdConfigurationRequirements(self, element: ET.Element, key: str, requirements: CanControllerFdConfigurationRequirements):
3058
+ if requirements is not None:
3059
+ child_element = ET.SubElement(element, key)
3060
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3061
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3062
+ 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())
3065
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3066
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3067
+ self.setChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMinTrcvDelayCompensationOffset())
3068
+ self.setChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH", requirements.getTxBitRateSwitch())
3069
+
3070
+ def writeAbstractCanCommunicationControllerAttributes(self, element: ET.Element, attributes: AbstractCanCommunicationControllerAttributes):
3071
+ self.setCanControllerFdConfiguration(element, "CAN-CONTROLLER-FD-CONFIGURATION", attributes.getCanControllerFdAttributes())
3072
+ self.setCanControllerFdConfigurationRequirements(element, "CAN-CONTROLLER-FD-REQUIREMENTS", attributes.getCanControllerFdRequirements())
3073
+
3074
+ def writeCanControllerConfigurationRequirements(self, element: ET.Element, requirements: CanControllerConfigurationRequirements):
3075
+ if requirements is not None:
3076
+ child_element = ET.SubElement(element, "CAN-CONTROLLER-CONFIGURATION-REQUIREMENTS")
3077
+ self.writeAbstractCanCommunicationControllerAttributes(child_element, requirements)
3078
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3079
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3080
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3081
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3082
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3083
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3084
+
3085
+ def writeAbstractCanCommunicationControllerCanControllerAttributes(self, element: ET.SubElement, controller: AbstractCanCommunicationController):
3086
+ attributes = controller.getCanControllerAttributes()
3087
+ if attributes is not None:
3088
+ child_element = ET.SubElement(element, "CAN-CONTROLLER-ATTRIBUTES")
3089
+ if isinstance(attributes, CanControllerConfigurationRequirements):
3090
+ self.writeCanControllerConfigurationRequirements(child_element, attributes)
3091
+ else:
3092
+ self.notImplemented("Unsupported CanControllerAttributes <%s>" % type(attributes))
3093
+
3094
+ def writeAbstractCanCommunicationController(self, element: ET.Element, controller: AbstractCanCommunicationController):
3095
+ self.writeCommunicationController(element, controller)
3096
+ self.writeAbstractCanCommunicationControllerCanControllerAttributes(element, controller)
3097
+
3098
+ def writeCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
3099
+ child_element = ET.SubElement(element, "CAN-COMMUNICATION-CONTROLLER")
2708
3100
  self.logger.debug("Write CanCommunicationController %s" % controller.getShortName())
2709
- self.setIdentifiable(element, controller)
3101
+ self.writeIdentifiable(child_element, controller)
3102
+ variants_tag = ET.SubElement(child_element, "CAN-COMMUNICATION-CONTROLLER-VARIANTS")
3103
+ cond_tag = ET.SubElement(variants_tag, "CAN-COMMUNICATION-CONTROLLER-CONDITIONAL")
3104
+ self.writeAbstractCanCommunicationController(cond_tag, controller)
3105
+
3106
+ def writeCouplingPortSchedulerCouplingPortStructuralElement(self, element: ET.Element, item: CouplingPortStructuralElement):
3107
+ self.writeIdentifiable(element, item)
3108
+
3109
+ def writeCouplingPortFifo(self, element: ET.Element, fifo: CouplingPortFifo):
3110
+ if fifo is not None:
3111
+ child_element = ET.SubElement(element, "COUPLING-PORT-FIFO")
3112
+ self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, fifo)
3113
+
3114
+ def writeCouplingPortScheduler(self, element: ET.Element, scheduler: CouplingPortScheduler):
3115
+ if scheduler is not None:
3116
+ child_element = ET.SubElement(element, "COUPLING-PORT-SCHEDULER")
3117
+ self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, scheduler)
3118
+ self.setChildElementOptionalLiteral(child_element, "PORT-SCHEDULER", scheduler.getPortScheduler())
3119
+
3120
+ def writeCouplingPortDetailsCouplingPortStructuralElements(self, element: ET.Element, details: CouplingPortDetails):
3121
+ items = details.getCouplingPortStructuralElements()
3122
+ if len(items) > 0:
3123
+ child_element = ET.SubElement(element, "COUPLING-PORT-STRUCTURAL-ELEMENTS")
3124
+ for item in items:
3125
+ if isinstance(item, CouplingPortFifo):
3126
+ self.writeCouplingPortFifo(child_element, item)
3127
+ elif isinstance(item, CouplingPortScheduler):
3128
+ self.writeCouplingPortScheduler(child_element, item)
3129
+ else:
3130
+ self.notImplemented("Unsupported CouplingPortStructuralElement <%s>" % type(item))
3131
+
3132
+ def writeEthernetPriorityRegeneration(self, element: ET.Element, regeneration: EthernetPriorityRegeneration):
3133
+ if regeneration is not None:
3134
+ child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATION")
3135
+ self.writeReferrable(child_element, regeneration)
3136
+ self.setChildElementOptionalPositiveInteger(child_element, "INGRESS-PRIORITY", regeneration.getIngressPriority())
3137
+ self.setChildElementOptionalPositiveInteger(child_element, "REGENERATED-PRIORITY", regeneration.getRegeneratedPriority())
3138
+
3139
+ def writeCouplingPortDetailsEthernetPriorityRegenerations(self, element: ET.Element, details: CouplingPortDetails):
3140
+ regenerations = details.getEthernetPriorityRegenerations()
3141
+ if len(regenerations) > 0:
3142
+ child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATIONS")
3143
+ for regeneration in regenerations:
3144
+ if isinstance(regeneration, EthernetPriorityRegeneration):
3145
+ self.writeEthernetPriorityRegeneration(child_element, regeneration)
3146
+ else:
3147
+ self.notImplemented("Unsupported EthernetPriorityRegeneration <%s>" % type(regeneration))
3148
+
3149
+ def setCouplingPortDetails(self, element: ET.Element, key: str, details: CouplingPortDetails):
3150
+ 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())
3155
+
3156
+ def writeVlanMembership(self, element: ET.Element, membership: VlanMembership):
3157
+ if membership is not None:
3158
+ child_element = ET.SubElement(element, "VLAN-MEMBERSHIP")
3159
+ self.setChildElementOptionalLiteral(child_element, "SEND-ACTIVITY", membership.getSendActivity())
3160
+ self.setChildElementOptionalRefType(child_element, "VLAN-REF", membership.getVlanRef())
3161
+
3162
+ def writeCouplingPortVlanMemberships(self, element: ET.Element, port: CouplingPort):
3163
+ memberships = port.getVlanMemberships()
3164
+ if len(memberships) > 0:
3165
+ child_element = ET.SubElement(element, "VLAN-MEMBERSHIPS")
3166
+ for membership in memberships:
3167
+ if isinstance(membership, VlanMembership):
3168
+ self.writeVlanMembership(child_element, membership)
3169
+ else:
3170
+ self.notImplemented("Unsupported VlanMembership <%s>" % type(membership))
3171
+
3172
+ def writeCouplingPort(self, element: ET.Element, port: CouplingPort):
3173
+ child_element = ET.SubElement(element, "COUPLING-PORT")
3174
+ self.writeIdentifiable(child_element, port)
3175
+ self.setCouplingPortDetails(child_element, "COUPLING-PORT-DETAILS", port.getCouplingPortDetails())
3176
+ self.setChildElementOptionalLiteral(child_element, "MAC-LAYER-TYPE", port.getMacAddressVlanAssignments())
3177
+ self.writeCouplingPortVlanMemberships(child_element, port)
2710
3178
 
2711
- def setEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
3179
+ def writeEthernetCommunicationControllerCouplingPorts(self, element: ET.Element, controller: EthernetCommunicationController):
3180
+ ports = controller.getCouplingPorts()
3181
+ if len(ports) > 0:
3182
+ child_element = ET.SubElement(element, "COUPLING-PORTS")
3183
+ for port in ports:
3184
+ if isinstance(port, CouplingPort):
3185
+ self.writeCouplingPort(child_element, port)
3186
+ else:
3187
+ self.notImplemented("Unsupported Coupling Port <%s>" % type(port))
3188
+
3189
+ def writeEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
3190
+ child_element = ET.SubElement(element, "ETHERNET-COMMUNICATION-CONTROLLER")
2712
3191
  self.logger.debug("Write EthernetCommunicationController %s" % controller.getShortName())
2713
- self.setIdentifiable(element, controller)
3192
+ self.writeIdentifiable(child_element, controller)
3193
+ variants_tag = ET.SubElement(child_element, "ETHERNET-COMMUNICATION-CONTROLLER-VARIANTS")
3194
+ cond_tag = ET.SubElement(variants_tag, "ETHERNET-COMMUNICATION-CONTROLLER-CONDITIONAL")
3195
+ self.writeCommunicationController(cond_tag, controller)
3196
+ self.writeEthernetCommunicationControllerCouplingPorts(cond_tag, controller)
2714
3197
 
2715
3198
  def writeEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
2716
3199
  controllers = instance.getCommControllers()
2717
3200
  if len(controllers) > 0:
2718
- controllers_tag = ET.SubElement(element, "COMM-CONTROLLERS")
3201
+ child_element = ET.SubElement(element, "COMM-CONTROLLERS")
2719
3202
  for controller in controllers:
2720
3203
  if isinstance(controller, CanCommunicationController):
2721
- child_element = ET.SubElement(controllers_tag, "CAN-COMMUNICATION-CONTROLLER")
2722
- self.setCanCommunicationController(child_element, controller)
3204
+ self.writeCanCommunicationController(child_element, controller)
2723
3205
  elif isinstance(controller, EthernetCommunicationController):
2724
- child_element = ET.SubElement(controllers_tag, "ETHERNET-COMMUNICATION-CONTROLLER")
2725
- self.setEthernetCommunicationController(child_element, controller)
3206
+ self.writeEthernetCommunicationController(child_element, controller)
3207
+ elif isinstance(controller, LinMaster):
3208
+ self.writeLinMaster(child_element, controller)
2726
3209
  else:
2727
3210
  self.notImplemented("Unsupported Communication Controller <%s>" % type(controller))
2728
3211
 
2729
3212
  def writeCommunicationConnector(self, element: ET.Element, connector: CommunicationConnector):
2730
- self.setIdentifiable(element, connector)
3213
+ self.writeIdentifiable(element, connector)
2731
3214
  self.setChildElementOptionalRefType(element, "COMM-CONTROLLER-REF", connector.getCommControllerRef())
2732
3215
  self.writeCommunicationConnectorEcuCommPortInstances(element, connector)
3216
+ self.setChildElementOptionalLiteral(element, "PNC-GATEWAY-TYPE", connector.getPncGatewayType())
2733
3217
 
2734
3218
  def writeCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2735
3219
  self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
@@ -2738,6 +3222,11 @@ class ARXMLWriter(AbstractARXMLWriter):
2738
3222
  def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
2739
3223
  self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
2740
3224
  self.writeCommunicationConnector(element, connector)
3225
+ self.setChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT", connector.getMaximumTransmissionUnit())
3226
+
3227
+ def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
3228
+ self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
3229
+ self.writeCommunicationConnector(element, connector)
2741
3230
 
2742
3231
  def writeEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
2743
3232
  connectors = instance.getConnectors()
@@ -2750,13 +3239,24 @@ class ARXMLWriter(AbstractARXMLWriter):
2750
3239
  elif isinstance(connector, EthernetCommunicationConnector):
2751
3240
  child_element = ET.SubElement(connectors_tag, "ETHERNET-COMMUNICATION-CONNECTOR")
2752
3241
  self.writeEthernetCommunicationConnector(child_element, connector)
3242
+ elif isinstance(connector, LinCommunicationConnector):
3243
+ child_element = ET.SubElement(connectors_tag, "LIN-COMMUNICATION-CONNECTOR")
3244
+ self.writeLinCommunicationConnector(child_element, connector)
2753
3245
  else:
2754
3246
  self._raiseError("Unsupported Communication connector <%s>" % type(connector))
2755
3247
 
3248
+ def writeEcuInstanceAssociatedComIPduGroupRefs(self, element: ET.Element, instance: EcuInstance):
3249
+ refs = instance.getAssociatedComIPduGroupRefs()
3250
+ if len(refs) > 0:
3251
+ child_element = ET.SubElement(element, "ASSOCIATED-COM-I-PDU-GROUP-REFS")
3252
+ for ref in refs:
3253
+ self.setChildElementOptionalRefType(child_element, "ASSOCIATED-COM-I-PDU-GROUP-REF", ref)
3254
+
2756
3255
  def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
2757
3256
  self.logger.debug("EcuInstance %s" % instance.getShortName())
2758
3257
  child_element = ET.SubElement(element, "ECU-INSTANCE")
2759
- self.setIdentifiable(child_element, instance)
3258
+ self.writeIdentifiable(child_element, instance)
3259
+ self.writeEcuInstanceAssociatedComIPduGroupRefs(child_element, instance)
2760
3260
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-GW-TIME-BASE", instance.getComConfigurationGwTimeBase())
2761
3261
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-RX-TIME-BASE", instance.getComConfigurationRxTimeBase())
2762
3262
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-TX-TIME-BASE", instance.getComConfigurationTxTimeBase())
@@ -2769,7 +3269,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2769
3269
  def writeSystemSignalGroup(self, element: ET.Element, group: SystemSignalGroup):
2770
3270
  self.logger.debug("Write SystemSignalGroup %s" % group.getShortName())
2771
3271
  child_element = ET.SubElement(element, "SYSTEM-SIGNAL-GROUP")
2772
- self.setIdentifiable(child_element, group)
3272
+ self.writeIdentifiable(child_element, group)
2773
3273
  signal_refs = group.getSystemSignalRefs()
2774
3274
  if len(signal_refs) > 0:
2775
3275
  signal_refs_tag = ET.SubElement(child_element, "SYSTEM-SIGNAL-REFS")
@@ -2801,7 +3301,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2801
3301
 
2802
3302
  def setSwcToEcuMapping(self, element: ET.Element, mapping: SwcToEcuMapping):
2803
3303
  child_element = ET.SubElement(element, "SWC-TO-ECU-MAPPING")
2804
- self.setIdentifiable(child_element, mapping)
3304
+ self.writeIdentifiable(child_element, mapping)
2805
3305
  irefs = mapping.getComponentIRefs()
2806
3306
  if len(irefs) > 0:
2807
3307
  irefs_tag = ET.SubElement(child_element, "COMPONENT-IREFS")
@@ -2822,7 +3322,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2822
3322
  def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
2823
3323
  self.logger.debug("Write SystemMapping %s" % mapping.getShortName())
2824
3324
  child_element = ET.SubElement(element, "SYSTEM-MAPPING")
2825
- self.setIdentifiable(child_element, mapping)
3325
+ self.writeIdentifiable(child_element, mapping)
2826
3326
  self.writeSystemMappingDataMappings(child_element, mapping)
2827
3327
  self.writeSystemMappingSwMappings(child_element, mapping)
2828
3328
 
@@ -2842,23 +3342,24 @@ class ARXMLWriter(AbstractARXMLWriter):
2842
3342
  self.logger.debug("Write RootSwCompositionPrototype <%s>" % prototype.getShortName())
2843
3343
  child_element = ET.SubElement(element, "ROOT-SOFTWARE-COMPOSITIONS")
2844
3344
  child_element = ET.SubElement(child_element, "ROOT-SW-COMPOSITION-PROTOTYPE")
2845
- self.setIdentifiable(child_element, prototype)
3345
+ self.writeIdentifiable(child_element, prototype)
2846
3346
  self.setChildElementOptionalRefType(child_element, "FLAT-MAP-REF", prototype.getFlatMapRef())
2847
3347
  self.setChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF", prototype.getSoftwareCompositionTRef())
3348
+
3349
+ def writeSystemFibexElementRefs(self, element: ET.Element, system: System):
3350
+ refs = system.getFibexElementRefs()
3351
+ if len(refs) > 0:
3352
+ fibex_elements_tag = ET.SubElement(element, "FIBEX-ELEMENTS")
3353
+ for ref in refs:
3354
+ child_element = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
3355
+ self.setChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF", ref)
2848
3356
 
2849
3357
  def writeSystem(self, element: ET.Element, system: System):
2850
3358
  self.logger.debug("Write System %s" % system.getShortName())
2851
3359
  child_element = ET.SubElement(element, "SYSTEM")
2852
- self.setARElement(child_element, system)
2853
-
3360
+ self.writeARElement(child_element, system)
2854
3361
  self.setChildElementOptionalLiteral(child_element, "ECU-EXTRACT-VERSION", system.getEcuExtractVersion())
2855
- refs = system.getFibexElementRefs()
2856
- if len(refs) > 0:
2857
- fibex_elements_tag = ET.SubElement(child_element, "FIBEX-ELEMENTS")
2858
- for ref in refs:
2859
- fibex_element_ref_conditional_tag = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
2860
- self.setChildElementOptionalRefType(fibex_element_ref_conditional_tag, "FIBEX-ELEMENT-REF", ref)
2861
-
3362
+ self.writeSystemFibexElementRefs(child_element, system)
2862
3363
  self.writeSystemMappings(child_element, system)
2863
3364
  self.writeRootSwCompositionPrototype(child_element, system)
2864
3365
  self.setChildElementOptionalRevisionLabelString(child_element, "SYSTEM-VERSION", system.getSystemVersion())
@@ -2866,7 +3367,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2866
3367
  def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
2867
3368
  self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
2868
3369
  child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
2869
- self.setARElement(child_element, dimension)
3370
+ self.writeARElement(child_element, dimension)
2870
3371
  self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
2871
3372
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
2872
3373
  self.setChildElementOptionalNumericalValue(child_element, "TIME-EXP", dimension.getTimeExp())
@@ -2874,7 +3375,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2874
3375
  def setFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
2875
3376
  self.logger.debug("Set FlatInstanceDescriptor %s" % desc.getShortName())
2876
3377
  child_element = ET.SubElement(element, "FLAT-INSTANCE-DESCRIPTOR")
2877
- self.setIdentifiable(child_element, desc)
3378
+ self.writeIdentifiable(child_element, desc)
2878
3379
  self.setAnyInstanceRef(child_element, "UPSTREAM-REFERENCE-IREF", desc.getUpstreamReferenceIRef())
2879
3380
  self.setAnyInstanceRef(child_element, "ECU-EXTRACT-REFERENCE-IREF", desc.getEcuExtractReferenceIRef())
2880
3381
 
@@ -2891,7 +3392,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2891
3392
  def writeFlatMap(self, element: ET.Element, map: FlatMap):
2892
3393
  self.logger.debug("Set FlatMap %s" % map.getShortName())
2893
3394
  child_element = ET.SubElement(element, "FLAT-MAP")
2894
- self.setARElement(child_element, map)
3395
+ self.writeARElement(child_element, map)
2895
3396
  self.writeFlatMapInstances(child_element, map)
2896
3397
 
2897
3398
  def setDataPrototypeMapping(self, element: ET.Element, mapping: DataPrototypeMapping):
@@ -2908,7 +3409,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2908
3409
  def setVariableAndParameterInterfaceMapping(self, element: ET.Element, mapping: VariableAndParameterInterfaceMapping):
2909
3410
  self.logger.debug("set VariableAndParameterInterfaceMapping %s" % mapping.getShortName())
2910
3411
  child_element = ET.SubElement(element, "VARIABLE-AND-PARAMETER-INTERFACE-MAPPING")
2911
- self.setIdentifiable(child_element, mapping)
3412
+ self.writeIdentifiable(child_element, mapping)
2912
3413
  self.setDataPrototypeMappings(child_element, "DATA-MAPPINGS", mapping.getDataMappings())
2913
3414
 
2914
3415
  def writePortInterfaceMappings(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
@@ -2924,7 +3425,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2924
3425
  def writePortInterfaceMappingSet(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
2925
3426
  self.logger.debug("Set PortInterfaceMappingSet %s" % mapping_set.getShortName())
2926
3427
  child_element = ET.SubElement(element, "PORT-INTERFACE-MAPPING-SET")
2927
- self.setARElement(child_element, mapping_set)
3428
+ self.writeARElement(child_element, mapping_set)
2928
3429
  self.writePortInterfaceMappings(child_element, mapping_set)
2929
3430
 
2930
3431
  def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
@@ -2932,20 +3433,34 @@ class ARXMLWriter(AbstractARXMLWriter):
2932
3433
  mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
2933
3434
  for mapping in mappings:
2934
3435
  child_element = ET.SubElement(mappings_tag, "I-SIGNAL-MAPPING")
2935
- self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.sourceSignalRef)
2936
- self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.targetSignalRef)
3436
+ self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.getSourceSignalRef())
3437
+ self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.getTargetSignalRef())
3438
+
3439
+ def setTargetIPduRef(self, element: ET.Element, key: str, i_pdu_ref: TargetIPduRef):
3440
+ if i_pdu_ref is not None:
3441
+ child_element = ET.SubElement(element, key)
3442
+ self.setChildElementOptionalRefType(child_element, "TARGET-I-PDU-REF", i_pdu_ref.getTargetIPdu())
3443
+
3444
+ def setIPduMappings(self, element: ET.Element, mappings: List[IPduMapping]):
3445
+ if len(mappings) > 0:
3446
+ mappings_tag = ET.SubElement(element, "I-PDU-MAPPINGS")
3447
+ for mapping in mappings:
3448
+ child_element = ET.SubElement(mappings_tag, "I-PDU-MAPPING")
3449
+ self.setChildElementOptionalRefType(child_element, "SOURCE-I-PDU-REF", mapping.getSourceIpduRef())
3450
+ self.setTargetIPduRef(child_element, "TARGET-I-PDU", mapping.getTargetIPdu())
2937
3451
 
2938
3452
  def writeGateway(self, element: ET.Element, gateway: Gateway):
2939
3453
  self.logger.debug("Gateway %s" % gateway.getShortName())
2940
3454
  child_element = ET.SubElement(element, "GATEWAY")
2941
- self.setIdentifiable(child_element, gateway)
3455
+ self.writeIdentifiable(child_element, gateway)
2942
3456
  self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
3457
+ self.setIPduMappings(child_element, gateway.getIPduMappings())
2943
3458
  self.setISignalMappings(child_element, gateway.getSignalMappings())
2944
3459
 
2945
3460
  def writeISignal(self, element: ET.Element, signal: ISignal):
2946
3461
  self.logger.debug("ISignal %s" % signal.getShortName())
2947
3462
  child_element = ET.SubElement(element, "I-SIGNAL")
2948
- self.setIdentifiable(child_element, signal)
3463
+ self.writeIdentifiable(child_element, signal)
2949
3464
  self.setChildElementOptionalLiteral(child_element, "DATA-TYPE-POLICY", signal.getDataTypePolicy())
2950
3465
  self.setChildElementOptionalLiteral(child_element, "I-SIGNAL-TYPE", signal.getISignalType())
2951
3466
  self.setValueSpecification(child_element, "INIT-VALUE", signal.getInitValue())
@@ -2964,7 +3479,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2964
3479
  def writeEcucValueCollection(self, element: ET.Element, collection: EcucValueCollection):
2965
3480
  self.logger.debug("EcucValueCollection %s" % collection.getShortName())
2966
3481
  child_element = ET.SubElement(element, "ECUC-VALUE-COLLECTION")
2967
- self.setIdentifiable(child_element, collection)
3482
+ self.writeIdentifiable(child_element, collection)
2968
3483
  self.setChildElementOptionalRefType(child_element, "ECU-EXTRACT-REF", collection.getEcuExtractRef())
2969
3484
  self.writeEcucValueCollectionEcucValues(child_element, collection)
2970
3485
 
@@ -3044,7 +3559,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3044
3559
  def writeEcucContainValue(self, element: ET.Element, container_value: EcucContainerValue):
3045
3560
  self.logger.debug("EcucContainerValue %s" % container_value.getShortName())
3046
3561
  child_element = ET.SubElement(element, "ECUC-CONTAINER-VALUE")
3047
- self.setIdentifiable(child_element, container_value)
3562
+ self.writeIdentifiable(child_element, container_value)
3048
3563
  self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", container_value.getDefinitionRef())
3049
3564
  self.writeEcucContainerValueParameterValues(child_element, container_value)
3050
3565
  self.writeEcucContainerValueReferenceValues(child_element, container_value)
@@ -3063,7 +3578,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3063
3578
  def writeEcucModuleConfigurationValues(self, element: ET.Element, values: EcucModuleConfigurationValues):
3064
3579
  self.logger.debug("EcucModuleConfigurationValues %s" % values.getShortName())
3065
3580
  child_element = ET.SubElement(element, "ECUC-MODULE-CONFIGURATION-VALUES")
3066
- self.setIdentifiable(child_element, values)
3581
+ self.writeIdentifiable(child_element, values)
3067
3582
  self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", values.getDefinitionRef())
3068
3583
  self.setChildElementOptionalLiteral(child_element, "IMPLEMENTATION-CONFIG-VARIANT", values.getImplementationConfigVariant())
3069
3584
  self.setChildElementOptionalRefType(child_element, "MODULE-DESCRIPTION-REF", values.getModuleDescriptionRef())
@@ -3072,7 +3587,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3072
3587
  def writeISignalGroup(self, element: ET.Element, group: ISignalGroup):
3073
3588
  self.logger.debug("ISignalGroup %s" % group.getShortName())
3074
3589
  child_element = ET.SubElement(element, "I-SIGNAL-GROUP")
3075
- self.setIdentifiable(child_element, group)
3590
+ self.writeIdentifiable(child_element, group)
3076
3591
  signal_refs = group.getISignalRefs()
3077
3592
  if len(signal_refs) > 0:
3078
3593
  signal_refs_tag = ET.SubElement(child_element, "I-SIGNAL-REFS")
@@ -3083,7 +3598,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3083
3598
  def writeISignalIPduGroup(self, element: ET.Element, group: ISignalIPduGroup):
3084
3599
  self.logger.debug("Set ISignalIPduGroup %s" % group.getShortName())
3085
3600
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU-GROUP")
3086
- self.setIdentifiable(child_element, group)
3601
+ self.writeIdentifiable(child_element, group)
3087
3602
  self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-DIRECTION", group.getCommunicationDirection())
3088
3603
  self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-MODE", group.getCommunicationMode())
3089
3604
  group_refs = group.getContainedISignalIPduGroupRefs()
@@ -3101,19 +3616,103 @@ class ARXMLWriter(AbstractARXMLWriter):
3101
3616
  def writeSystemSignal(self, element: ET.Element, signal: SystemSignal):
3102
3617
  self.logger.debug("SystemSignal %s" % signal.getShortName())
3103
3618
  child_element = ET.SubElement(element, "SYSTEM-SIGNAL")
3104
- self.setIdentifiable(child_element, signal)
3619
+ self.writeIdentifiable(child_element, signal)
3105
3620
  self.setChildElementOptionalBooleanValue(child_element, "DYNAMIC-LENGTH", signal.getDynamicLength())
3106
3621
  self.setSwDataDefProps(child_element, "PHYSICAL-PROPS", signal.getPhysicalProps())
3107
3622
 
3108
- def writeGenericEthernetFrame(self, element: ET.Element, signal: GenericEthernetFrame):
3109
- self.logger.debug("Write GenericEthernetFrame %s" % signal.getShortName())
3623
+ def writeGenericEthernetFrame(self, element: ET.Element, frame: GenericEthernetFrame):
3624
+ self.logger.debug("Write GenericEthernetFrame %s" % frame.getShortName())
3110
3625
  child_element = ET.SubElement(element, "ETHERNET-FRAME")
3111
- self.writeFrame(child_element, signal)
3626
+ self.writeFrame(child_element, frame)
3112
3627
 
3113
3628
  def writeLifeCycleInfoSet(self, element: ET.Element, set: LifeCycleInfoSet):
3114
3629
  self.logger.debug("Write LifeCycleInfoSet %s" % set.getShortName())
3115
3630
  child_element = ET.SubElement(element, "LIFE-CYCLE-INFO-SET")
3116
- self.setIdentifiable(child_element, set)
3631
+ self.writeIdentifiable(child_element, set)
3632
+
3633
+ def writeDiagnosticConnectionFunctionalRequestRefs(self, element: ET.Element, connection: DiagnosticConnection):
3634
+ refs = connection.getFunctionalRequestRefs()
3635
+ if len(refs) > 0:
3636
+ refs_tag = ET.SubElement(element, "FUNCTIONAL-REQUEST-REFS")
3637
+ for ref in refs:
3638
+ self.setChildElementOptionalRefType(refs_tag, "FUNCTIONAL-REQUEST-REF", ref)
3639
+
3640
+ def writeDiagnosticConnection(self, element: ET.Element, connection: DiagnosticConnection):
3641
+ self.logger.debug("Write DiagnosticConnection %s" % connection.getShortName())
3642
+ child_element = ET.SubElement(element, "DIAGNOSTIC-CONNECTION")
3643
+ self.writeIdentifiable(child_element, connection)
3644
+ self.writeDiagnosticConnectionFunctionalRequestRefs(child_element, connection)
3645
+ self.setChildElementOptionalRefType(child_element, "PHYSICAL-REQUEST-REF", connection.getPhysicalRequestRef())
3646
+ self.setChildElementOptionalRefType(child_element, "RESPONSE-REF", connection.getResponseOnEventRef())
3647
+
3648
+ def writeDiagnosticServiceTableDiagnosticConnectionRefs(self, element: ET.Element, table: DiagnosticServiceTable):
3649
+ refs = table.getDiagnosticConnectionRefs()
3650
+ if len(refs) > 0:
3651
+ refs_tag = ET.SubElement(element, "DIAGNOSTIC-CONNECTIONS")
3652
+ for ref in refs:
3653
+ child_element = ET.SubElement(refs_tag, "DIAGNOSTIC-CONNECTION-REF-CONDITIONAL")
3654
+ self.setChildElementOptionalRefType(child_element, "DIAGNOSTIC-CONNECTION-REF", ref)
3655
+
3656
+ def writeDiagnosticServiceTable(self, element: ET.Element, table: DiagnosticServiceTable):
3657
+ self.logger.debug("Write DiagnosticServiceTable %s" % table.getShortName())
3658
+ child_element = ET.SubElement(element, "DIAGNOSTIC-SERVICE-TABLE")
3659
+ self.writeIdentifiable(child_element, table)
3660
+ self.writeDiagnosticServiceTableDiagnosticConnectionRefs(child_element, table)
3661
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", table.getEcuInstanceRef())
3662
+
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)
3667
+
3668
+ def writeUserDefinedIPdu(self, element: ET.Element, i_pdu: UserDefinedIPdu):
3669
+ self.logger.debug("Write UserDefinedIPdu %s" % i_pdu.getShortName())
3670
+ child_element = ET.SubElement(element, "USER-DEFINED-I-PDU")
3671
+ self.writeIdentifiable(child_element, i_pdu)
3672
+
3673
+ def writeUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
3674
+ self.logger.debug("Write UserDefinedPdu %s" % pdu.getShortName())
3675
+ child_element = ET.SubElement(element, "USER-DEFINED-PDU")
3676
+ self.writeIdentifiable(child_element, pdu)
3677
+
3678
+ def writeGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
3679
+ self.logger.debug("Write GeneralPurposePdu %s" % pdu.getShortName())
3680
+ child_element = ET.SubElement(element, "GENERAL-PURPOSE-PDU")
3681
+ self.writeIdentifiable(child_element, pdu)
3682
+
3683
+ def writeGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
3684
+ self.logger.debug("Write GeneralPurposeIPdu %s" % i_pdu.getShortName())
3685
+ child_element = ET.SubElement(element, "GENERAL-PURPOSE-I-PDU")
3686
+ self.writeIdentifiable(child_element, i_pdu)
3687
+
3688
+ def writeSecureCommunicationPropsSet(self, element: ET.Element, set: SecureCommunicationPropsSet):
3689
+ self.logger.debug("Write SecureCommunicationPropsSet %s" % set.getShortName())
3690
+ child_element = ET.SubElement(element, "SECURE-COMMUNICATION-PROPS-SET")
3691
+ self.writeIdentifiable(child_element, set)
3692
+
3693
+ def writeSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
3694
+ self.logger.debug("Write SoAdRoutingGroup %s" % group.getShortName())
3695
+ child_element = ET.SubElement(element, "SO-AD-ROUTING-GROUP")
3696
+ self.writeIdentifiable(child_element, group)
3697
+
3698
+ def writeDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
3699
+ self.logger.debug("Write DoIpTpConfig %s" % config.getShortName())
3700
+ child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
3701
+ self.writeIdentifiable(child_element, config)
3702
+
3703
+ def writeLinCommunicationController(self, element: ET.Element, controller: LinCommunicationController):
3704
+ self.writeCommunicationController(element, controller)
3705
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", controller.getProtocolVersion())
3706
+
3707
+ def writeLinMaster(self, element: ET.Element, controller: LinMaster):
3708
+ self.logger.debug("Write LinMaster %s" % controller.getShortName())
3709
+ child_element = ET.SubElement(element, "LIN-MASTER")
3710
+ self.writeIdentifiable(child_element, controller)
3711
+ variants_tag = ET.SubElement(child_element, "LIN-MASTER-VARIANTS")
3712
+ cond_tag = ET.SubElement(variants_tag, "LIN-MASTER-CONDITIONAL")
3713
+ self.writeLinCommunicationController(cond_tag, controller)
3714
+ self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE", controller.getTimeBase())
3715
+ self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE-JITTER", controller.getTimeBaseJitter())
3117
3716
 
3118
3717
  def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
3119
3718
  mappings = parent.getISignalToPduMappings()
@@ -3121,7 +3720,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3121
3720
  mappings_tag = ET.SubElement(element, "I-SIGNAL-TO-PDU-MAPPINGS")
3122
3721
  for mapping in mappings:
3123
3722
  child_element = ET.SubElement(mappings_tag, "I-SIGNAL-TO-I-PDU-MAPPING")
3124
- self.setIdentifiable(child_element, mapping)
3723
+ self.writeIdentifiable(child_element, mapping)
3125
3724
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
3126
3725
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", mapping.getISignalGroupRef())
3127
3726
  self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
@@ -3187,7 +3786,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3187
3786
  def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
3188
3787
  self.logger.debug("ISignalIPdu %s" % i_pdu.getShortName())
3189
3788
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
3190
- self.setIdentifiable(child_element, i_pdu)
3789
+ self.writeIdentifiable(child_element, i_pdu)
3191
3790
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
3192
3791
  self.setISignalIPduIPduTimingSpecification(child_element, i_pdu.getIPduTimingSpecification())
3193
3792
  self.writeISignalToPduMappings(child_element, i_pdu)
@@ -3266,6 +3865,8 @@ class ARXMLWriter(AbstractARXMLWriter):
3266
3865
  self.writeSecuredIPdu(element, ar_element)
3267
3866
  elif isinstance(ar_element, CanTpConfig):
3268
3867
  self.writeCanTpConfig(element, ar_element)
3868
+ elif isinstance(ar_element, LinTpConfig):
3869
+ self.writeLinTpConfig(element, ar_element)
3269
3870
  elif isinstance(ar_element, LinCluster):
3270
3871
  self.writeLinCluster(element, ar_element)
3271
3872
  elif isinstance(ar_element, CanCluster):
@@ -3300,6 +3901,26 @@ class ARXMLWriter(AbstractARXMLWriter):
3300
3901
  self.writeEthernetCluster(element, ar_element)
3301
3902
  elif isinstance(ar_element, ISignalIPduGroup):
3302
3903
  self.writeISignalIPduGroup(element, ar_element)
3904
+ elif isinstance(ar_element, DiagnosticConnection):
3905
+ self.writeDiagnosticConnection(element, ar_element)
3906
+ elif isinstance(ar_element, DiagnosticServiceTable):
3907
+ self.writeDiagnosticServiceTable(element, ar_element)
3908
+ elif isinstance(ar_element, MultiplexedIPdu):
3909
+ self.writeMultiplexedIPdu(element, ar_element)
3910
+ elif isinstance(ar_element, UserDefinedIPdu):
3911
+ self.writeUserDefinedIPdu(element, ar_element)
3912
+ elif isinstance(ar_element, UserDefinedPdu):
3913
+ self.writeUserDefinedPdu(element, ar_element)
3914
+ elif isinstance(ar_element, GeneralPurposePdu):
3915
+ self.writeGeneralPurposePdu(element, ar_element)
3916
+ elif isinstance(ar_element, GeneralPurposeIPdu):
3917
+ self.writeGeneralPurposeIPdu(element, ar_element)
3918
+ elif isinstance(ar_element, SecureCommunicationPropsSet):
3919
+ self.writeSecureCommunicationPropsSet(element, ar_element)
3920
+ elif isinstance(ar_element, SoAdRoutingGroup):
3921
+ self.writeSoAdRoutingGroup(element, ar_element)
3922
+ elif isinstance(ar_element, DoIpTpConfig):
3923
+ self.writeDoIpTpConfig(element, ar_element)
3303
3924
  else:
3304
3925
  self.notImplemented("Unsupported Elements of ARPackage <%s>" % type(ar_element))
3305
3926
 
@@ -3322,7 +3943,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3322
3943
  for pkg in pkgs:
3323
3944
  pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
3324
3945
 
3325
- self.setIdentifiable(pkg_tag, pkg)
3946
+ self.writeIdentifiable(pkg_tag, pkg)
3326
3947
  self.logger.debug("writeARPackage %s" % pkg.full_name)
3327
3948
 
3328
3949
  self.writeReferenceBases(pkg_tag, pkg.getReferenceBases())