armodel 1.7.3__py3-none-any.whl → 1.7.5__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 (43) hide show
  1. armodel/cli/file_list_cli.py +70 -0
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +2 -1
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +1 -1
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +6 -7
  5. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/DiagnosticContribution.py +47 -0
  6. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/__init__.py +0 -0
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +73 -3
  8. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +37 -1
  9. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +17 -1
  10. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +31 -0
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +4 -3
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/InstanceRefsUsage.py +17 -32
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +4 -0
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +7 -1
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +47 -15
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DiagnosticConnection.py +58 -0
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetCommunication.py +244 -0
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +281 -0
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/NetworkEndpoint.py +328 -0
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +522 -11
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinCommunication.py +114 -6
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +94 -0
  23. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +151 -6
  24. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +140 -12
  25. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +31 -6
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +7 -12
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +135 -13
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +25 -1
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +4 -3
  30. armodel/models/M2/MSR/AsamHdo/BaseTypes.py +0 -1
  31. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +1 -1
  32. armodel/models/__init__.py +6 -0
  33. armodel/parser/abstract_arxml_parser.py +2 -0
  34. armodel/parser/arxml_parser.py +561 -62
  35. armodel/tests/test_armodel/models/test_ar_ref.py +2 -2
  36. armodel/writer/abstract_arxml_writer.py +1 -3
  37. armodel/writer/arxml_writer.py +702 -223
  38. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/METADATA +47 -2
  39. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/RECORD +43 -34
  40. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/entry_points.txt +1 -0
  41. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/LICENSE +0 -0
  42. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/WHEEL +0 -0
  43. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,6 @@
1
1
  import xml.etree.cElementTree as ET
2
-
3
2
  from typing import List
4
3
 
5
-
6
-
7
4
  from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
8
5
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
9
6
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
@@ -36,13 +33,14 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMap
36
33
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation
37
34
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
38
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef, ExecutionOrderConstraint
39
- from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
36
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
40
37
  from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity
41
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
42
39
  from ..models.M2.AUTOSARTemplates.CommonStructure.InternalBehavior import InternalBehavior
43
40
  from ..models.M2.AUTOSARTemplates.CommonStructure.ModeDeclaration import ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype
44
41
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption import ResourceConsumption
45
42
  from ..models.M2.AUTOSARTemplates.CommonStructure.ResourceConsumption.StackUsage import RoughEstimateStackUsage, StackUsage
43
+ from ..models.M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import DiagnosticServiceTable
46
44
  from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
47
45
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
48
46
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable, MultilanguageReferrable, Referrable
@@ -60,12 +58,13 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import Compo
60
58
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype
61
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
62
60
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument, SwcInternalBehavior, SynchronousServerCallPoint
61
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
63
62
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
64
63
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.DataElements import ParameterAccess, VariableAccess
65
64
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector, SwComponentPrototype, SwConnector
66
65
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
67
66
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
68
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, AutosarVariableRef, VariableInAtomicSWCTypeInstanceRef
67
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, VariableInAtomicSWCTypeInstanceRef
69
68
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, ParameterRequireComSpec, QueuedReceiverComSpec, QueuedSenderComSpec, RPortComSpec, ReceiverComSpec, SenderComSpec, ServerComSpec
70
69
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
71
70
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
@@ -78,18 +77,24 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import S
78
77
 
79
78
  from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping, System, SystemMapping
80
79
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
81
- 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
82
82
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
83
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
83
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
84
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
84
85
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetFrame import GenericEthernetFrame
86
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, InitialSdDelayConfig, RequestResponseDelay, SdClientConfig
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, GenericTp, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
85
89
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, ISignalMapping
86
90
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
87
91
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
88
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering, LinUnconditionalFrame
89
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
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, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
94
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinMaster
90
95
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
91
- from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
92
- 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
93
98
 
94
99
  from .abstract_arxml_writer import AbstractARXMLWriter
95
100
  class ARXMLWriter(AbstractARXMLWriter):
@@ -192,7 +197,7 @@ class ARXMLWriter(AbstractARXMLWriter):
192
197
  self.setMultiLanguagePlainText(child_element, "USED-LANGUAGES", admin_data.getUsedLanguages())
193
198
  self.writeSdgs(child_element, admin_data)
194
199
 
195
- def setIdentifiable(self, element: ET.Element, identifiable: Identifiable):
200
+ def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
196
201
  self.setMultilanguageReferrable(element, identifiable)
197
202
  self.setAnnotations(element, identifiable.getAnnotations())
198
203
  self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
@@ -201,7 +206,7 @@ class ARXMLWriter(AbstractARXMLWriter):
201
206
  self.setAdminData(element, identifiable.getAdminData())
202
207
 
203
208
  def setARElement(self, parent: ET.Element, ar_element: ARElement):
204
- self.setIdentifiable(parent, ar_element)
209
+ self.writeIdentifiable(parent, ar_element)
205
210
 
206
211
  def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
207
212
  if (acknowledge != None):
@@ -402,11 +407,13 @@ class ARXMLWriter(AbstractARXMLWriter):
402
407
  self.setChildElementOptionalRefType(child_element, "PARAMETER-REF", com_spec.getParameterRef())
403
408
  self.setValueSpecification(child_element, "INIT-VALUE", com_spec.getInitValue())
404
409
 
405
- def writeModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
410
+ def setModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
406
411
  self.logger.debug("writeModeSwitchReceiverComSpec")
407
412
  child_element = ET.SubElement(element, "MODE-SWITCH-RECEIVER-COM-SPEC")
408
413
  self.setARObjectAttributes(child_element, com_spec)
409
- self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.modeGroupRef)
414
+ self.setChildElementOptionalBooleanValue(child_element, "ENHANCED-MODE-API", com_spec.getEnhancedModeApi())
415
+ self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
416
+ self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH", com_spec.getSupportsAsynchronousModeSwitch())
410
417
 
411
418
  def writeRPortComSpec(self, element: ET.Element, com_spec: RPortComSpec):
412
419
  if isinstance(com_spec, NonqueuedReceiverComSpec):
@@ -416,7 +423,7 @@ class ARXMLWriter(AbstractARXMLWriter):
416
423
  elif isinstance(com_spec, ClientComSpec):
417
424
  self.writeClientComSpec(element, com_spec)
418
425
  elif isinstance(com_spec, ModeSwitchReceiverComSpec):
419
- self.writeModeSwitchReceiverComSpec(element, com_spec)
426
+ self.setModeSwitchReceiverComSpec(element, com_spec)
420
427
  elif isinstance(com_spec, ParameterRequireComSpec):
421
428
  self.writeParameterRequireComSpec(element, com_spec)
422
429
  else:
@@ -432,7 +439,7 @@ class ARXMLWriter(AbstractARXMLWriter):
432
439
  def writePPortPrototype(self, ports_tag: ET.Element, prototype: PPortPrototype):
433
440
  prototype_tag = ET.SubElement(ports_tag, "P-PORT-PROTOTYPE")
434
441
 
435
- self.setIdentifiable(prototype_tag, prototype)
442
+ self.writeIdentifiable(prototype_tag, prototype)
436
443
  self.logger.debug("write PPortPrototype %s" % prototype.getShortName())
437
444
  self.setAbstractProvidedPortPrototype(prototype_tag, prototype)
438
445
  self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-INTERFACE-TREF", prototype.getProvidedInterfaceTRef())
@@ -447,14 +454,14 @@ class ARXMLWriter(AbstractARXMLWriter):
447
454
  def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
448
455
  self.logger.debug("write RPortPrototype %s" % prototype.getShortName())
449
456
  prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
450
- self.setIdentifiable(prototype_tag, prototype)
457
+ self.writeIdentifiable(prototype_tag, prototype)
451
458
  self.setAbstractRequiredPortPrototype(prototype_tag, prototype)
452
459
  self.setChildElementOptionalRefType(prototype_tag, "REQUIRED-INTERFACE-TREF", prototype.getRequiredInterfaceTRef())
453
460
 
454
461
  def writePRPortPrototype(self, ports_tag: ET.Element, prototype: PRPortPrototype):
455
462
  self.logger.debug("write PRPortPrototype %s" % prototype.getShortName())
456
463
  prototype_tag = ET.SubElement(ports_tag, "PR-PORT-PROTOTYPE")
457
- self.setIdentifiable(prototype_tag, prototype)
464
+ self.writeIdentifiable(prototype_tag, prototype)
458
465
  self.setAbstractProvidedPortPrototype(prototype_tag, prototype)
459
466
  self.setAbstractRequiredPortPrototype(prototype_tag, prototype)
460
467
  self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-REQUIRED-INTERFACE-TREF", prototype.getProvidedRequiredInterface())
@@ -493,7 +500,7 @@ class ARXMLWriter(AbstractARXMLWriter):
493
500
  def writePortGroup(self, element: ET.Element, port_group: PortGroup):
494
501
  self.logger.debug("writePortGroup %s" % port_group.getShortName())
495
502
  child_element = ET.SubElement(element, "PORT-GROUP")
496
- self.setIdentifiable(child_element, port_group)
503
+ self.writeIdentifiable(child_element, port_group)
497
504
  self.writePortGroupInnerGroupIRefs(child_element, port_group)
498
505
  self.writePortGroupOuterPortRefs(child_element, port_group)
499
506
 
@@ -505,7 +512,7 @@ class ARXMLWriter(AbstractARXMLWriter):
505
512
  self.writePortGroup(child_element, port_group)
506
513
 
507
514
  def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
508
- self.setIdentifiable(element, sw_component)
515
+ self.writeIdentifiable(element, sw_component)
509
516
  port_prototypes = sw_component.getPortPrototypes()
510
517
  if len(port_prototypes) > 0:
511
518
  ports_tag = ET.SubElement(element, "PORTS")
@@ -514,7 +521,7 @@ class ARXMLWriter(AbstractARXMLWriter):
514
521
 
515
522
  def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
516
523
  prototype_tag = ET.SubElement(element, "SW-COMPONENT-PROTOTYPE")
517
- self.setIdentifiable(prototype_tag, prototype)
524
+ self.writeIdentifiable(prototype_tag, prototype)
518
525
  self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.getTypeTRef())
519
526
 
520
527
  def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
@@ -526,7 +533,7 @@ class ARXMLWriter(AbstractARXMLWriter):
526
533
 
527
534
  def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
528
535
  child_element = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
529
- self.setIdentifiable(child_element, sw_connector)
536
+ self.writeIdentifiable(child_element, sw_connector)
530
537
  self.setChildElementOptionalRefType(child_element, "MAPPING-REF", sw_connector.getMappingRef())
531
538
 
532
539
  if sw_connector.getProviderIRef() is not None:
@@ -545,7 +552,7 @@ class ARXMLWriter(AbstractARXMLWriter):
545
552
 
546
553
  def writeDelegationSwConnector(self, element: ET.Element, sw_connector: DelegationSwConnector):
547
554
  connector_tag = ET.SubElement(element, "DELEGATION-SW-CONNECTOR")
548
- self.setIdentifiable(connector_tag, sw_connector)
555
+ self.writeIdentifiable(connector_tag, sw_connector)
549
556
 
550
557
  if sw_connector.getInnerPortIRref() is not None:
551
558
  inner_port_iref_tag = ET.SubElement(connector_tag, "INNER-PORT-IREF")
@@ -652,11 +659,11 @@ class ARXMLWriter(AbstractARXMLWriter):
652
659
  def setSwAxisIndividual(self, element: ET.Element, props: SwAxisIndividual):
653
660
  child_element = ET.SubElement(element, "SW-AXIS-INDIVIDUAL")
654
661
  self.setARObjectAttributes(child_element, props)
655
- self.setChildElementOptionalRefType(child_element, "INPUT-VARIABLE-TYPE-REF", props.inputVariableTypeRef)
656
- self.setChildElementOptionalRefType(child_element, "COMPU-METHOD-REF", props.compuMethodRef)
657
- self.setChildElementOptionalNumericalValue(child_element, "SW-MAX-AXIS-POINTS", props.swMaxAxisPoints)
658
- self.setChildElementOptionalNumericalValue(child_element, "SW-MIN-AXIS-POINTS", props.swMinAxisPoints)
659
- self.setChildElementOptionalRefType(child_element, "DATA-CONSTR-REF", props.dataConstrRef)
662
+ self.setChildElementOptionalRefType(child_element, "INPUT-VARIABLE-TYPE-REF", props.getInputVariableTypeRef())
663
+ self.setChildElementOptionalRefType(child_element, "COMPU-METHOD-REF", props.getCompuMethodRef())
664
+ self.setChildElementOptionalNumericalValue(child_element, "SW-MAX-AXIS-POINTS", props.getSwMaxAxisPoints())
665
+ self.setChildElementOptionalNumericalValue(child_element, "SW-MIN-AXIS-POINTS", props.getSwMinAxisPoints())
666
+ self.setChildElementOptionalRefType(child_element, "DATA-CONSTR-REF", props.getDataConstrRef())
660
667
 
661
668
  def setSwAxisGrouped(self, element: ET.Element, props: SwAxisGrouped):
662
669
  child_element = ET.SubElement(element, "SW-AXIS-GROUPED")
@@ -699,12 +706,13 @@ class ARXMLWriter(AbstractARXMLWriter):
699
706
  self.setAnnotations(conditional_tag, props.getAnnotations())
700
707
  self.setChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF", props.getBaseTypeRef())
701
708
  self.setChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF", props.getCompuMethodRef())
702
- self.setChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF", props.getDataConstrRef())
709
+
703
710
  self.setValueSpecification(conditional_tag, "INVALID-VALUE", props.getInvalidValue())
704
711
  self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
705
712
  self.setChildElementOptionalFloatValue(conditional_tag, "STEP-SIZE", props.getStepSize())
706
713
  self.setChildElementOptionalRefType(conditional_tag, "SW-ADDR-METHOD-REF", props.getSwAddrMethodRef())
707
714
  self.setChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS", props.getSwCalibrationAccess())
715
+ self.setChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF", props.getDataConstrRef())
708
716
  self.setSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET", props.getSwCalprmAxisSet())
709
717
  self.setChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY", props.getSwImplPolicy())
710
718
  self.setChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION", props.getSwIntendedResolution())
@@ -723,7 +731,7 @@ class ARXMLWriter(AbstractARXMLWriter):
723
731
  self.setARElement(element, data_type)
724
732
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.getSwDataDefProps())
725
733
 
726
- def setApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
734
+ def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
727
735
  self.logger.debug("writeApplicationPrimitiveDataType %s" % data_type.getShortName())
728
736
  data_type_tag = ET.SubElement(element, "APPLICATION-PRIMITIVE-DATA-TYPE")
729
737
  self.setApplicationDataType(data_type_tag, data_type)
@@ -732,6 +740,7 @@ class ARXMLWriter(AbstractARXMLWriter):
732
740
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", prototype.getSwDataDefProps())
733
741
 
734
742
  def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
743
+ self.writeIdentifiable(element, prototype)
735
744
  self.setDataPrototype(element, prototype)
736
745
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
737
746
 
@@ -746,7 +755,7 @@ class ARXMLWriter(AbstractARXMLWriter):
746
755
  child_element = ET.SubElement(elements_tag, "APPLICATION-RECORD-ELEMENT")
747
756
  self.setApplicationRecordElement(child_element, record)
748
757
 
749
- def setApplicationRecordDataType(self, element: ET.Element, data_type: ApplicationRecordDataType):
758
+ def writeApplicationRecordDataType(self, element: ET.Element, data_type: ApplicationRecordDataType):
750
759
  data_type_tag = ET.SubElement(element, "APPLICATION-RECORD-DATA-TYPE")
751
760
  self.setApplicationDataType(data_type_tag, data_type)
752
761
  self.writeApplicationRecordElements(data_type_tag, data_type)
@@ -754,22 +763,23 @@ class ARXMLWriter(AbstractARXMLWriter):
754
763
  def writeApplicationDataTypes(self, parent: ET.Element, ar_package: ARPackage):
755
764
  for data_type in ar_package.getApplicationDataType():
756
765
  if isinstance(data_type, ApplicationPrimitiveDataType):
757
- self.setApplicationPrimitiveDataType(parent, data_type)
766
+ self.writeApplicationPrimitiveDataType(parent, data_type)
758
767
  elif isinstance(data_type, ApplicationRecordDataType):
759
- self.setApplicationRecordDataType(parent, data_type)
768
+ self.writeApplicationRecordDataType(parent, data_type)
760
769
  else:
761
770
  self.notImplemented("Unsupported ApplicationDataType <%s>" % type(data_type))
762
771
 
763
- def writeBaseTypeDirectDefinition(self, element: ET.Element, base_type_definition: BaseTypeDirectDefinition):
764
- self.setChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE", base_type_definition.baseTypeSize)
765
- self.setChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING", base_type_definition.baseTypeEncoding)
766
- self.setChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT", base_type_definition.memAlignment)
767
- self.setChildElementOptionalLiteral(element, "NATIVE-DECLARATION", base_type_definition.nativeDeclaration)
772
+ def setBaseTypeDirectDefinition(self, element: ET.Element, base_type_definition: BaseTypeDirectDefinition):
773
+ self.setChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE", base_type_definition.getBaseTypeSize())
774
+ self.setChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING", base_type_definition.getBaseTypeEncoding())
775
+ self.setChildElementOptionalLiteral(element, "BYTE-ORDER", base_type_definition.getByteOrder())
776
+ self.setChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT", base_type_definition.getMemAlignment())
777
+ self.setChildElementOptionalLiteral(element, "NATIVE-DECLARATION", base_type_definition.getNativeDeclaration())
768
778
 
769
- def setSwBaseType(self, element: ET.Element, base_type: SwBaseType):
779
+ def writeSwBaseType(self, element: ET.Element, base_type: SwBaseType):
770
780
  data_type_tag = ET.SubElement(element, "SW-BASE-TYPE")
771
- self.setIdentifiable(data_type_tag, base_type)
772
- self.writeBaseTypeDirectDefinition(data_type_tag, base_type.baseTypeDefinition)
781
+ self.writeIdentifiable(data_type_tag, base_type)
782
+ self.setBaseTypeDirectDefinition(data_type_tag, base_type.getBaseTypeDefinition())
773
783
 
774
784
  def writeCompuScaleConstantContents(self, element: ET.Element, contents: CompuScaleConstantContents):
775
785
  compu_const_tag = ET.SubElement(element, "COMPU-CONST")
@@ -834,10 +844,10 @@ class ARXMLWriter(AbstractARXMLWriter):
834
844
  self.setCompuScales(child_element, compu.getCompuContent())
835
845
  self.setCompuConst(child_element, "COMPU-DEFAULT-VALUE", compu.getCompuDefaultValue())
836
846
 
837
- def setCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
847
+ def writeCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
838
848
  child_element = ET.SubElement(element, "COMPU-METHOD")
839
849
  self.logger.debug("write CompuMethods %s" % compu_method.getShortName())
840
- self.setIdentifiable(child_element, compu_method)
850
+ self.writeIdentifiable(child_element, compu_method)
841
851
  self.setChildElementOptionalRefType(child_element, "UNIT-REF", compu_method.getUnitRef())
842
852
  self.setCompu(child_element, "COMPU-INTERNAL-TO-PHYS", compu_method.getCompuInternalToPhys())
843
853
  self.setCompu(child_element, "COMPU-PHYS-TO-INTERNAL", compu_method.getCompuPhysToInternal())
@@ -871,7 +881,7 @@ class ARXMLWriter(AbstractARXMLWriter):
871
881
 
872
882
  def writeConstantSpecification(self, element: ET.Element, spec: ConstantSpecification):
873
883
  spec_tag = ET.SubElement(element, "CONSTANT-SPECIFICATION")
874
- self.setIdentifiable(spec_tag, spec)
884
+ self.writeIdentifiable(spec_tag, spec)
875
885
 
876
886
  if spec.getValueSpec() is not None:
877
887
  self.setValueSpecification(spec_tag, "VALUE-SPEC", spec.getValueSpec())
@@ -908,13 +918,13 @@ class ARXMLWriter(AbstractARXMLWriter):
908
918
 
909
919
  def writeDataConstr(self, element: ET.Element, constr: DataConstr):
910
920
  child_element = ET.SubElement(element, "DATA-CONSTR")
911
- self.setIdentifiable(child_element, constr)
921
+ self.writeIdentifiable(child_element, constr)
912
922
  self.writeDataConstrRules(child_element, constr)
913
923
 
914
924
  def writeUnit(self, element: ET.Element, unit: Unit):
915
925
  self.logger.debug("writeUnit %s" % unit.getShortName())
916
926
  child_element = ET.SubElement(element, "UNIT")
917
- self.setIdentifiable(child_element, unit)
927
+ self.writeIdentifiable(child_element, unit)
918
928
  self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.getDisplayName())
919
929
  self.setChildElementOptionalFloatValue(child_element, "FACTOR-SI-TO-UNIT", unit.getFactorSiToUnit())
920
930
  self.setChildElementOptionalFloatValue(child_element, "OFFSET-SI-TO-UNIT", unit.getOffsetSiToUnit())
@@ -936,7 +946,7 @@ class ARXMLWriter(AbstractARXMLWriter):
936
946
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.getTargetProvidedOperationRef())
937
947
 
938
948
  def setRTEEvent(self, element: ET.Element, event: RTEEvent):
939
- self.setIdentifiable(element, event)
949
+ self.writeIdentifiable(element, event)
940
950
  irefs = event.getDisabledModeIRefs()
941
951
  if len(irefs) > 0:
942
952
  child_element = ET.SubElement(element, "DISABLED-MODE-IREFS")
@@ -1023,7 +1033,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1023
1033
  areas_tag = ET.SubElement(element, "EXCLUSIVE-AREAS")
1024
1034
  for area in areas:
1025
1035
  child_element = ET.SubElement(areas_tag, "EXCLUSIVE-AREA")
1026
- self.setIdentifiable(child_element, area)
1036
+ self.writeIdentifiable(child_element, area)
1027
1037
 
1028
1038
  def writeDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
1029
1039
  refs = behavior.getDataTypeMappingRefs()
@@ -1032,22 +1042,15 @@ class ARXMLWriter(AbstractARXMLWriter):
1032
1042
  for ref in refs:
1033
1043
  self.setChildElementOptionalRefType(refs_tag, "DATA-TYPE-MAPPING-REF", ref)
1034
1044
 
1035
- def writeInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
1036
- memories = behavior.getConstantMemorys()
1037
- if len(memories) > 0:
1038
- child_element = ET.SubElement(element, "CONSTANT-MEMORYS")
1039
- for memory in memories:
1040
- self.writeParameterDataPrototype(child_element, memory)
1041
-
1042
1045
  def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
1043
- self.setIdentifiable(element, behavior)
1044
- self.writeInternalBehaviorConstantMemories(element, behavior)
1046
+ self.writeIdentifiable(element, behavior)
1047
+ self.setParameterDataPrototypes(element, "CONSTANT-MEMORYS", behavior.getConstantMemories())
1045
1048
  self.writeDataTypeMappingRefs(element, behavior)
1046
1049
  self.writeExclusiveAreas(element, behavior)
1047
1050
 
1048
- def setAutosarVariableRef(self, element: ET.Element, ref: AutosarVariableRef):
1051
+ def setAutosarVariableRef(self, element: ET.Element, key: str, ref: AutosarVariableRef):
1049
1052
  if ref is not None:
1050
- child_element = ET.SubElement(element, "ACCESSED-VARIABLE")
1053
+ child_element = ET.SubElement(element, key)
1051
1054
  self.setARObjectAttributes(child_element, ref)
1052
1055
  if ref.getAutosarVariableIRef() is not None:
1053
1056
  child_element = ET.SubElement(child_element, "AUTOSAR-VARIABLE-IREF")
@@ -1066,20 +1069,18 @@ 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)
1070
- self.setAutosarVariableRef(child_element, access.getAccessedVariableRef())
1071
-
1072
-
1072
+ self.writeIdentifiable(child_element, access)
1073
+ self.setAutosarVariableRef(child_element, "ACCESSED-VARIABLE", access.getAccessedVariableRef())
1073
1074
 
1074
1075
  def setAutosarParameterRef(self, element: ET.Element, key: str, parameter_ref: AutosarParameterRef):
1075
1076
  if parameter_ref is not None:
1076
1077
  child_element = ET.SubElement(element, key)
1077
- self.setChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF", parameter_ref.local_parameter_ref)
1078
+ self.setChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF", parameter_ref.getLocalParameterRef())
1078
1079
 
1079
1080
  def writeParameterAccess(self, element: ET.Element, parameter_access: ParameterAccess):
1080
1081
  child_element = ET.SubElement(element, "PARAMETER-ACCESS")
1081
- self.setIdentifiable(child_element, parameter_access)
1082
- self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.accessed_parameter)
1082
+ self.writeIdentifiable(child_element, parameter_access)
1083
+ self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.getAccessedParameter())
1083
1084
 
1084
1085
  def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
1085
1086
  parameter_accesses = entity.getParameterAccesses()
@@ -1136,12 +1137,12 @@ class ARXMLWriter(AbstractARXMLWriter):
1136
1137
 
1137
1138
  def setSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
1138
1139
  child_element = ET.SubElement(element, "SYNCHRONOUS-SERVER-CALL-POINT")
1139
- self.setIdentifiable(child_element, call_point)
1140
+ self.writeIdentifiable(child_element, call_point)
1140
1141
  self.setServerCallPoint(child_element, call_point)
1141
1142
 
1142
1143
  def setAsynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
1143
1144
  child_element = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-POINT")
1144
- self.setIdentifiable(child_element, call_point)
1145
+ self.writeIdentifiable(child_element, call_point)
1145
1146
  self.setServerCallPoint(child_element, call_point)
1146
1147
 
1147
1148
  def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
@@ -1190,7 +1191,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1190
1191
  mode_access_points_tag = ET.SubElement(element, "MODE-SWITCH-POINTS")
1191
1192
  for point in points:
1192
1193
  child_element = ET.SubElement(mode_access_points_tag, "MODE-SWITCH-POINT")
1193
- self.setIdentifiable(child_element, point)
1194
+ self.writeIdentifiable(child_element, point)
1194
1195
  self.setPModeGroupInAtomicSWCInstanceRef(child_element, "MODE-GROUP-IREF", point.getModeGroupIRef())
1195
1196
 
1196
1197
  def setRunnableEntityArgument(self, element: ET.Element, argument: RunnableEntityArgument):
@@ -1213,7 +1214,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1213
1214
  points_tag = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINTS")
1214
1215
  for point in points:
1215
1216
  child_element = ET.SubElement(points_tag, "ASYNCHRONOUS-SERVER-CALL-RESULT-POINT")
1216
- self.setIdentifiable(child_element, point)
1217
+ self.writeIdentifiable(child_element, point)
1217
1218
  self.setChildElementOptionalRefType(child_element, "ASYNCHRONOUS-SERVER-CALL-POINT-REF", point.getAsynchronousServerCallPointRef())
1218
1219
 
1219
1220
  def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
@@ -1223,13 +1224,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1223
1224
  self.writeRunnableEntityArguments(child_element, entity)
1224
1225
  self.writeAsynchronousServerCallResultPoint(child_element, entity)
1225
1226
  self.setChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY", entity.getCanBeInvokedConcurrently())
1226
- self.writeParameterAccesses(child_element, entity)
1227
1227
  self.writeDataReadAccesses(child_element, entity)
1228
1228
  self.writeDataReceivePointByArguments(child_element, entity)
1229
1229
  self.writeDataSendPoints(child_element, entity)
1230
1230
  self.writeDataWriteAccesses(child_element, entity)
1231
1231
  self.writeModeAccessPoints(child_element, entity)
1232
1232
  self.writeModeSwitchPoints(child_element, entity)
1233
+ self.writeParameterAccesses(child_element, entity)
1233
1234
  self.writeReadLocalVariables(child_element, entity)
1234
1235
  self.writeServerCallPoints(child_element, entity)
1235
1236
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", entity.symbol)
@@ -1244,6 +1245,16 @@ class ARXMLWriter(AbstractARXMLWriter):
1244
1245
  self.writeRunnableEntity(runnables_tag, entity)
1245
1246
  else:
1246
1247
  self.notImplemented("Unsupported RunnableEntity <%s>" % type(entity))
1248
+
1249
+ def writeSwcInternalBehaviorArTypedPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
1250
+ prototypes = behavior.getArTypedPerInstanceMemories()
1251
+ if len(prototypes) > 0:
1252
+ child_element = ET.SubElement(element, "AR-TYPED-PER-INSTANCE-MEMORYS")
1253
+ for prototype in prototypes:
1254
+ if isinstance(prototype, VariableDataPrototype):
1255
+ self.writeVariableDataPrototype(child_element, prototype)
1256
+ else:
1257
+ self._raiseError("Unsupported ArTypedPerInstanceMemories <%s>" % type(prototype))
1247
1258
 
1248
1259
  def writeExplicitInterRunnableVariables(self, element: ET.Element, behavior: SwcInternalBehavior):
1249
1260
  prototypes = behavior.getExplicitInterRunnableVariables()
@@ -1261,24 +1272,23 @@ class ARXMLWriter(AbstractARXMLWriter):
1261
1272
  memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
1262
1273
  for memory in memories:
1263
1274
  child_element = ET.SubElement(memories_tag, "PER-INSTANCE-MEMORY")
1264
- self.setIdentifiable(child_element, memory)
1275
+ self.writeIdentifiable(child_element, memory)
1265
1276
  self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.getInitValue())
1266
1277
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.getSwDataDefProps())
1267
1278
  self.setChildElementOptionalLiteral(child_element, "TYPE", memory.getType())
1268
1279
  self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.getTypeDefinition())
1269
1280
 
1270
- def writeParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1281
+ def setParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
1271
1282
  child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
1272
- self.setIdentifiable(child_element, prototype)
1283
+ self.writeIdentifiable(child_element, prototype)
1273
1284
  self.setAutosarDataPrototype(child_element, prototype)
1274
1285
  self.setValueSpecification(child_element, "INIT-VALUE", prototype.getInitValue())
1275
1286
 
1276
- def writePerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
1277
- prototypes = behavior.getPerInstanceParameters()
1278
- if len(prototypes) > 0:
1279
- child_element = ET.SubElement(element, "PER-INSTANCE-PARAMETERS")
1280
- for prototype in prototypes:
1281
- self.writeParameterDataPrototype(child_element, prototype)
1287
+ def setParameterDataPrototypes(self, element: ET.Element, key: str, parameters: List[ParameterDataPrototype]):
1288
+ if len(parameters) > 0:
1289
+ child_element = ET.SubElement(element, key)
1290
+ for parameter in parameters:
1291
+ self.setParameterDataPrototype(child_element, parameter)
1282
1292
 
1283
1293
  def writePortDefinedArgumentValues(self, element: ET.Element, argument_values: List[PortDefinedArgumentValue]) :
1284
1294
  if len(argument_values) > 0:
@@ -1317,12 +1327,13 @@ class ARXMLWriter(AbstractARXMLWriter):
1317
1327
  self._raiseError("Unsupported Assigned Data <%s>" % type(data))
1318
1328
 
1319
1329
  def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
1320
- self.setIdentifiable(element, dependency)
1330
+ self.writeIdentifiable(element, dependency)
1321
1331
  self.writeServiceDependencyAssignedDataType(element, dependency)
1322
1332
 
1323
1333
  def writeRoleBasedDataAssignment(self, element: ET.Element, assignment: RoleBasedDataAssignment):
1324
1334
  child_element = ET.SubElement(element, "ROLE-BASED-DATA-ASSIGNMENT")
1325
1335
  self.setChildElementOptionalLiteral(child_element, "ROLE", assignment.role)
1336
+ self.setAutosarVariableRef(child_element, "USED-DATA-ELEMENT", assignment.getUsedDataElement())
1326
1337
  self.setAutosarParameterRef(child_element, "USED-PARAMETER-ELEMENT", assignment.getUsedParameterElement())
1327
1338
  self.setChildElementOptionalRefType(child_element, "USED-PIM-REF", assignment.getUsedPimRef())
1328
1339
 
@@ -1351,10 +1362,10 @@ class ARXMLWriter(AbstractARXMLWriter):
1351
1362
  else:
1352
1363
  self._raiseError("Unsupported Assigned Data <%s>" % type(data))
1353
1364
 
1354
- def writeNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1365
+ def setNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
1355
1366
  child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
1356
1367
  self.logger.debug("write NvBlockNeeds %s" % needs.getShortName())
1357
- self.setIdentifiable(child_element, needs)
1368
+ self.writeIdentifiable(child_element, needs)
1358
1369
  self.setChildElementOptionalBooleanValue(child_element, "CALC-RAM-BLOCK-CRC", needs.getCalcRamBlockCrc())
1359
1370
  self.setChildElementOptionalBooleanValue(child_element, "CHECK-STATIC-BLOCK-ID", needs.getCheckStaticBlockId())
1360
1371
  self.setChildElementOptionalNumericalValue(child_element, "N-DATA-SETS", needs.getNDataSets())
@@ -1372,25 +1383,26 @@ class ARXMLWriter(AbstractARXMLWriter):
1372
1383
  self.setChildElementOptionalBooleanValue(child_element, "USE-CRC-COMP-MECHANISM", needs.getUseCRCCompMechanism())
1373
1384
  self.setChildElementOptionalBooleanValue(child_element, "WRITE-ONLY-ONCE", needs.getWriteOnlyOnce())
1374
1385
  self.setChildElementOptionalBooleanValue(child_element, "WRITE-VERIFICATION", needs.getWriteVerification())
1386
+ self.setChildElementOptionalPositiveInteger(child_element, "WRITING-FREQUENCY", needs.getWritingFrequency())
1375
1387
  self.setChildElementOptionalLiteral(child_element, "WRITING-PRIORITY", needs.getWritingPriority())
1376
1388
 
1377
- def writeDiagnosticCommunicationManagerNeeds(self, element: ET.Element, needs: DiagnosticCommunicationManagerNeeds):
1389
+ def setDiagnosticCommunicationManagerNeeds(self, element: ET.Element, needs: DiagnosticCommunicationManagerNeeds):
1378
1390
  child_element = ET.SubElement(element, "DIAGNOSTIC-COMMUNICATION-MANAGER-NEEDS")
1379
1391
  self.logger.debug("write DiagnosticCommunicationManagerNeeds %s" % needs.getShortName())
1380
- self.setIdentifiable(child_element, needs)
1392
+ self.writeIdentifiable(child_element, needs)
1381
1393
  self.setChildElementOptionalLiteral(child_element, "SERVICE-REQUEST-CALLBACK-TYPE", needs.getServiceRequestCallbackType())
1382
1394
 
1383
- def writeDiagnosticRoutineNeeds(self, element: ET.Element, needs: DiagnosticRoutineNeeds):
1395
+ def setDiagnosticRoutineNeeds(self, element: ET.Element, needs: DiagnosticRoutineNeeds):
1384
1396
  child_element = ET.SubElement(element, "DIAGNOSTIC-ROUTINE-NEEDS")
1385
1397
  self.logger.debug("write DiagnosticRoutineNeeds %s" % needs.getShortName())
1386
- self.setIdentifiable(child_element, needs)
1398
+ self.writeIdentifiable(child_element, needs)
1387
1399
  self.setChildElementOptionalLiteral(child_element, "DIAG-ROUTINE-TYPE", needs.getDiagRoutineType())
1388
1400
  self.setChildElementOptionalIntegerValue(child_element, "RID-NUMBER", needs.getRidNumber())
1389
1401
 
1390
- def writeDiagnosticValueNeeds(self, element: ET.Element, needs: DiagnosticValueNeeds):
1402
+ def setDiagnosticValueNeeds(self, element: ET.Element, needs: DiagnosticValueNeeds):
1391
1403
  child_element = ET.SubElement(element, "DIAGNOSTIC-VALUE-NEEDS")
1392
1404
  self.logger.debug("write DiagnosticValueNeeds %s" % needs.getShortName())
1393
- self.setIdentifiable(child_element, needs)
1405
+ self.writeIdentifiable(child_element, needs)
1394
1406
  self.setChildElementOptionalPositiveInteger(child_element, "DATA-LENGTH", needs.getDataLength())
1395
1407
  self.setChildElementOptionalLiteral(child_element, "DIAGNOSTIC-VALUE-ACCESS", needs.getDiagnosticValueAccess())
1396
1408
  self.setChildElementOptionalIntegerValue(child_element, "DID-NUMBER", needs.getDidNumber())
@@ -1399,7 +1411,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1399
1411
 
1400
1412
  def setDiagEventDebounceMonitorInternal(self, element: ET.Element, algorithm: DiagEventDebounceMonitorInternal):
1401
1413
  child_element = ET.SubElement(element, "DIAG-EVENT-DEBOUNCE-MONITOR-INTERNAL")
1402
- self.setIdentifiable(child_element, algorithm)
1414
+ self.writeIdentifiable(child_element, algorithm)
1403
1415
 
1404
1416
  def writeDiagEventDebounceAlgorithm(self, element: ET.Element, needs: DiagnosticEventNeeds):
1405
1417
  algorithm = needs.getDiagEventDebounceAlgorithm()
@@ -1410,24 +1422,30 @@ class ARXMLWriter(AbstractARXMLWriter):
1410
1422
  else:
1411
1423
  self.notImplemented("Unsupported DiagEventDebounceAlgorithm <%s>" % type(algorithm))
1412
1424
 
1413
- def writeDiagnosticEventNeeds(self, element: ET.Element, needs: DiagnosticEventNeeds):
1425
+ def setDiagnosticEventNeeds(self, element: ET.Element, needs: DiagnosticEventNeeds):
1414
1426
  child_element = ET.SubElement(element, "DIAGNOSTIC-EVENT-NEEDS")
1415
1427
  self.logger.debug("write DiagnosticEventNeeds %s" % needs.getShortName())
1416
- self.setIdentifiable(child_element, needs)
1428
+ self.writeIdentifiable(child_element, needs)
1417
1429
  self.writeDiagEventDebounceAlgorithm(child_element, needs)
1418
1430
  self.setChildElementOptionalLiteral(child_element, "DTC-KIND", needs.getDtcKind())
1419
1431
  self.setChildElementOptionalIntegerValue(child_element, "UDS-DTC-NUMBER", needs.getUdsDtcNumber())
1432
+
1433
+ def setDiagnosticEventInfoNeeds(self, element: ET.Element, needs: DiagnosticEventInfoNeeds):
1434
+ child_element = ET.SubElement(element, "DIAGNOSTIC-EVENT-INFO-NEEDS")
1435
+ self.logger.debug("write DiagnosticEventNeeds %s" % needs.getShortName())
1436
+ self.writeIdentifiable(child_element, needs)
1437
+ self.setChildElementOptionalPositiveInteger(child_element, "UDS-DTC-NUMBER", needs.getUdsDtcNumber())
1420
1438
 
1421
- def writeCryptoServiceNeeds(self, element: ET.Element, needs: CryptoServiceNeeds):
1439
+ def setCryptoServiceNeeds(self, element: ET.Element, needs: CryptoServiceNeeds):
1422
1440
  child_element = ET.SubElement(element, "CRYPTO-SERVICE-NEEDS")
1423
1441
  self.logger.debug("write CryptoServiceNeeds %s" % needs.getShortName())
1424
- self.setIdentifiable(child_element, needs)
1442
+ self.writeIdentifiable(child_element, needs)
1425
1443
  self.setChildElementOptionalPositiveInteger(child_element, "MAXIMUM-KEY-LENGTH", needs.getMaximumKeyLength())
1426
1444
 
1427
- def writeEcuStateMgrUserNeeds(self, element: ET.Element, needs: EcuStateMgrUserNeeds):
1445
+ def setEcuStateMgrUserNeeds(self, element: ET.Element, needs: EcuStateMgrUserNeeds):
1428
1446
  child_element = ET.SubElement(element, "ECU-STATE-MGR-USER-NEEDS")
1429
1447
  self.logger.debug("write EcuStateMgrUserNeeds %s" % needs.getShortName())
1430
- self.setIdentifiable(child_element, needs)
1448
+ self.writeIdentifiable(child_element, needs)
1431
1449
 
1432
1450
  def writeSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
1433
1451
  needs = parent.getServiceNeeds()
@@ -1435,21 +1453,23 @@ class ARXMLWriter(AbstractARXMLWriter):
1435
1453
  child_element = ET.SubElement(element, "SERVICE-NEEDS")
1436
1454
  for need in needs:
1437
1455
  if isinstance(need, NvBlockNeeds):
1438
- self.writeNvBlockNeeds(child_element, need)
1456
+ self.setNvBlockNeeds(child_element, need)
1439
1457
  elif isinstance(need, DiagnosticCommunicationManagerNeeds):
1440
- self.writeDiagnosticCommunicationManagerNeeds(child_element, need)
1458
+ self.setDiagnosticCommunicationManagerNeeds(child_element, need)
1441
1459
  elif isinstance(need, DiagnosticRoutineNeeds):
1442
- self.writeDiagnosticRoutineNeeds(child_element, need)
1460
+ self.setDiagnosticRoutineNeeds(child_element, need)
1443
1461
  elif isinstance(need, DiagnosticValueNeeds):
1444
- self.writeDiagnosticValueNeeds(child_element, need)
1462
+ self.setDiagnosticValueNeeds(child_element, need)
1445
1463
  elif isinstance(need, DiagnosticEventNeeds):
1446
- self.writeDiagnosticEventNeeds(child_element, need)
1464
+ self.setDiagnosticEventNeeds(child_element, need)
1465
+ elif isinstance(need, DiagnosticEventInfoNeeds):
1466
+ self.setDiagnosticEventInfoNeeds(child_element, need)
1447
1467
  elif isinstance(need, CryptoServiceNeeds):
1448
- self.writeCryptoServiceNeeds(child_element, need)
1468
+ self.setCryptoServiceNeeds(child_element, need)
1449
1469
  elif isinstance(need, EcuStateMgrUserNeeds):
1450
- self.writeEcuStateMgrUserNeeds(child_element, need)
1470
+ self.setEcuStateMgrUserNeeds(child_element, need)
1451
1471
  else:
1452
- self._raiseError("Unsupported service needs <%s>" % type(need))
1472
+ self.notImplemented("Unsupported service needs <%s>" % type(need))
1453
1473
 
1454
1474
  def writeSwcServiceDependency(self, element: ET.Element, dependency: SwcServiceDependency):
1455
1475
  child_element = ET.SubElement(element, "SWC-SERVICE-DEPENDENCY")
@@ -1480,21 +1500,24 @@ class ARXMLWriter(AbstractARXMLWriter):
1480
1500
  for type_ref in type_refs:
1481
1501
  self.setChildElementOptionalRefType(data_type_refs_tag, "DATA-TYPE-REF", type_ref)
1482
1502
 
1503
+
1483
1504
  def writeSwcInternalBehavior(self, element: ET.Element, behavior: SwcInternalBehavior):
1484
1505
  self.logger.debug("writeSwInternalBehavior %s" % behavior.getShortName())
1485
1506
 
1486
1507
  child_element = ET.SubElement(element, "SWC-INTERNAL-BEHAVIOR")
1487
1508
  self.writeInternalBehavior(child_element, behavior)
1509
+ self.writeSwcInternalBehaviorArTypedPerInstanceMemories(child_element, behavior)
1488
1510
  self.writeRTEEvents(child_element, behavior)
1489
1511
  self.writeExplicitInterRunnableVariables(child_element, behavior)
1490
- self.setChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART", behavior.handleTerminationAndRestart)
1512
+ self.setChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART", behavior.getHandleTerminationAndRestart())
1491
1513
  self.setIncludedDataTypeSets(child_element, behavior.getIncludedDataTypeSets())
1492
1514
  self.writePerInstanceMemories(child_element, behavior)
1493
- self.writePerInstanceParameters(child_element, behavior)
1515
+ self.setParameterDataPrototypes(child_element, "PER-INSTANCE-PARAMETERS", behavior.getPerInstanceParameters())
1494
1516
  self.writePortAPIOptions(child_element, behavior)
1495
1517
  self.writeSwcInternalBehaviorRunnableEntities(child_element, behavior)
1496
1518
  self.writeSwcInternalBehaviorServiceDependencies(child_element, behavior)
1497
- self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION", behavior.supportsMultipleInstantiation)
1519
+ self.setParameterDataPrototypes(child_element, "SHARED-PARAMETERS", behavior.getSharedParameters())
1520
+ self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION", behavior.getSupportsMultipleInstantiation())
1498
1521
 
1499
1522
  def writeAtomicSwComponentTypeInternalBehaviors(self, element: ET.Element, behavior: InternalBehavior):
1500
1523
  if behavior is not None:
@@ -1527,7 +1550,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1527
1550
  def setCode(self, element: ET.SubElement, code_desc: Code):
1528
1551
  self.logger.debug("setCode %s" % code_desc.getShortName())
1529
1552
  child_element = ET.SubElement(element, "CODE")
1530
- self.setIdentifiable(child_element, code_desc)
1553
+ self.writeIdentifiable(child_element, code_desc)
1531
1554
  self.writeArtifactDescriptor(child_element, code_desc)
1532
1555
 
1533
1556
  def writeCodeDescriptors(self, element: ET.Element, impl: Implementation):
@@ -1552,7 +1575,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1552
1575
  sections_tag = ET.SubElement(element, "MEMORY-SECTIONS")
1553
1576
  for memory_section in memory_sections:
1554
1577
  child_element = ET.SubElement(sections_tag, "MEMORY-SECTION")
1555
- self.setIdentifiable(child_element, memory_section)
1578
+ self.writeIdentifiable(child_element, memory_section)
1556
1579
  self.setChildElementOptionalLiteral(child_element, "ALIGNMENT", memory_section.getAlignment())
1557
1580
  self.setChildElementOptionalLiteral(child_element, "MEM-CLASS-SYMBOL", memory_section.getMemClassSymbol())
1558
1581
  self.setMemorySectionOptions(child_element, memory_section.getOptions())
@@ -1563,7 +1586,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1563
1586
 
1564
1587
  def setStackUsage(self, element: ET.Element, usage: StackUsage):
1565
1588
  self.logger.debug("Write StackUsage %s" % usage.getShortName())
1566
- self.setIdentifiable(element, usage)
1589
+ self.writeIdentifiable(element, usage)
1567
1590
 
1568
1591
  def setRoughEstimateStackUsage(self, element: ET.Element, usage: RoughEstimateStackUsage):
1569
1592
  if usage is not None:
@@ -1583,12 +1606,12 @@ class ARXMLWriter(AbstractARXMLWriter):
1583
1606
  def setResourceConsumption(self, element: ET.Element, consumption: ResourceConsumption):
1584
1607
  if consumption is not None:
1585
1608
  child_element = ET.SubElement(element, "RESOURCE-CONSUMPTION")
1586
- self.setIdentifiable(child_element, consumption)
1609
+ self.writeIdentifiable(child_element, consumption)
1587
1610
  self.writeMemorySections(child_element, consumption)
1588
1611
  self.writeStackUsages(child_element, consumption.getStackUsages())
1589
1612
 
1590
1613
  def writeImplementation(self, element: ET.Element, impl: Implementation):
1591
- self.setIdentifiable(element, impl)
1614
+ self.writeIdentifiable(element, impl)
1592
1615
  self.writeCodeDescriptors(element, impl)
1593
1616
  self.setChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE", impl.getProgrammingLanguage())
1594
1617
  self.setResourceConsumption(element, impl.getResourceConsumption())
@@ -1651,7 +1674,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1651
1674
  def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
1652
1675
  if protection is not None:
1653
1676
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
1654
- self.setIdentifiable(child_element, protection)
1677
+ self.writeIdentifiable(child_element, protection)
1655
1678
  self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
1656
1679
  self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
1657
1680
 
@@ -1666,7 +1689,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1666
1689
  def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
1667
1690
  self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.getShortName())
1668
1691
  child_element = ET.SubElement(element, "END-TO-END-PROTECTION-SET")
1669
- self.setIdentifiable(child_element, protection_set)
1692
+ self.writeIdentifiable(child_element, protection_set)
1670
1693
  self.writeEndToEndProtections(child_element, protection_set)
1671
1694
 
1672
1695
  def setAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
@@ -1676,7 +1699,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1676
1699
  def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
1677
1700
  self.logger.debug("writeVariableDataPrototype %s" % prototype.getShortName())
1678
1701
  child_element = ET.SubElement(element, "VARIABLE-DATA-PROTOTYPE")
1679
- self.setIdentifiable(child_element, prototype)
1702
+ self.writeIdentifiable(child_element, prototype)
1680
1703
  self.setAutosarDataPrototype(child_element, prototype)
1681
1704
  self.setValueSpecification(child_element, "INIT-VALUE", prototype.getInitValue())
1682
1705
 
@@ -1702,7 +1725,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1702
1725
  def writeSenderReceiverInterface(self, element: ET.Element, sr_interface: SenderReceiverInterface):
1703
1726
  self.logger.debug("writeSenderReceiverInterface %s" % sr_interface.getShortName())
1704
1727
  child_element = ET.SubElement(element, "SENDER-RECEIVER-INTERFACE")
1705
- self.setIdentifiable(child_element, sr_interface)
1728
+ self.writeIdentifiable(child_element, sr_interface)
1706
1729
  self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.getIsService())
1707
1730
  self.writeSenderReceiverInterfaceDataElements(child_element, sr_interface)
1708
1731
  self.writeSenderReceiverInterfaceInvalidationPolicies(child_element, sr_interface)
@@ -1716,7 +1739,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1716
1739
  self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
1717
1740
 
1718
1741
  def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
1719
- self.setIdentifiable(element, prototype)
1742
+ self.writeIdentifiable(element, prototype)
1720
1743
  self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
1721
1744
 
1722
1745
  def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
@@ -1735,7 +1758,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1735
1758
  self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
1736
1759
 
1737
1760
  def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
1738
- self.setIdentifiable(element, entity)
1761
+ self.writeIdentifiable(element, entity)
1739
1762
  self.writeCanEnterExclusiveAreaRefs(element, entity)
1740
1763
  self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.getMinimumStartInterval())
1741
1764
  self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.getSwAddrMethodRef())
@@ -1785,7 +1808,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1785
1808
  self.notImplemented("Unsupported BswModuleEntity <%s>" % type(entity))
1786
1809
 
1787
1810
  def setBswEvent(self, element: ET.Element, event: BswEvent):
1788
- self.setIdentifiable(element, event)
1811
+ self.writeIdentifiable(element, event)
1789
1812
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1790
1813
 
1791
1814
  def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
@@ -1852,7 +1875,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1852
1875
  def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
1853
1876
  self.logger.debug("writeBswModuleDescription %s" % desc.getShortName())
1854
1877
  child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
1855
- self.setIdentifiable(child_element, desc)
1878
+ self.writeIdentifiable(child_element, desc)
1856
1879
  self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.getModuleId())
1857
1880
  self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
1858
1881
  self.writeProvidedModeGroup(child_element, desc)
@@ -1871,7 +1894,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1871
1894
  self.logger.debug("Set SwServiceArg <%s>" % arg.getShortName())
1872
1895
  if arg is not None:
1873
1896
  child_element = ET.SubElement(element, "SW-SERVICE-ARG")
1874
- self.setIdentifiable(child_element, arg)
1897
+ self.writeIdentifiable(child_element, arg)
1875
1898
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", arg.getDirection())
1876
1899
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", arg.getSwDataDefProps())
1877
1900
 
@@ -1885,7 +1908,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1885
1908
  def writeBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
1886
1909
  self.logger.debug("writeBswModuleDescription %s" % entry.getShortName())
1887
1910
  child_element = ET.SubElement(element, "BSW-MODULE-ENTRY")
1888
- self.setIdentifiable(child_element, entry)
1911
+ self.writeIdentifiable(child_element, entry)
1889
1912
  self.setChildElementOptionalNumericalValue(child_element, "SERVICE-ID", entry.getServiceId())
1890
1913
  self.setChildElementOptionalBooleanValue(child_element, "IS-REENTRANT", entry.getIsReentrant())
1891
1914
  self.setChildElementOptionalBooleanValue(child_element, "IS-SYNCHRONOUS", entry.getIsSynchronous())
@@ -1909,10 +1932,10 @@ class ARXMLWriter(AbstractARXMLWriter):
1909
1932
  else:
1910
1933
  self._raiseError("Unsupported Runnable Mapping <%s>" % type(mapping))
1911
1934
 
1912
- def setSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1935
+ def writeSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
1913
1936
  self.logger.debug("writeBswModuleDescription %s" % mapping.getShortName())
1914
1937
  child_element = ET.SubElement(element, "SWC-BSW-MAPPING")
1915
- self.setIdentifiable(child_element, mapping)
1938
+ self.writeIdentifiable(child_element, mapping)
1916
1939
  self.setChildElementOptionalRefType(child_element, "BSW-BEHAVIOR-REF", mapping.getBswBehaviorRef())
1917
1940
  self.writeSwcBswRunnableMappings(child_element, mapping)
1918
1941
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.getSwcBehaviorRef())
@@ -1959,7 +1982,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1959
1982
  sub_elements_tag = ET.SubElement(element, "SUB-ELEMENTS")
1960
1983
  for type_element in sub_elements:
1961
1984
  child_element = ET.SubElement(sub_elements_tag, "IMPLEMENTATION-DATA-TYPE-ELEMENT")
1962
- self.setIdentifiable(child_element, type_element)
1985
+ self.writeIdentifiable(child_element, type_element)
1963
1986
  self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE", type_element.getArraySize())
1964
1987
  self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING", type_element.getArraySizeHandling())
1965
1988
  self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", type_element.getArraySizeSemantics())
@@ -1980,7 +2003,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1980
2003
  arguments_tag = ET.SubElement(element, "ARGUMENTS")
1981
2004
  for prototype in arguments:
1982
2005
  child_element = ET.SubElement(arguments_tag, "ARGUMENT-DATA-PROTOTYPE")
1983
- self.setIdentifiable(child_element, prototype)
2006
+ self.writeIdentifiable(child_element, prototype)
1984
2007
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.swDataDefProps)
1985
2008
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.typeTRef)
1986
2009
  self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
@@ -1996,7 +2019,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1996
2019
  def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
1997
2020
  self.logger.debug("writeClientServerOperation %s" % operation.getShortName())
1998
2021
  child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
1999
- self.setIdentifiable(child_element, operation)
2022
+ self.writeIdentifiable(child_element, operation)
2000
2023
  self.writeArgumentDataPrototypes(child_element, operation)
2001
2024
  self.writePossibleErrorRefs(child_element, operation)
2002
2025
 
@@ -2013,7 +2036,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2013
2036
  def writeApplicationError(self, element: ET.Element, error: ApplicationError):
2014
2037
  self.logger.debug("writeApplicationError %s" % error.getShortName())
2015
2038
  child_element = ET.SubElement(element, "APPLICATION-ERROR")
2016
- self.setIdentifiable(child_element, error)
2039
+ self.writeIdentifiable(child_element, error)
2017
2040
  self.setChildElementOptionalNumericalValue(child_element, "ERROR-CODE", error.error_code)
2018
2041
 
2019
2042
  def writePossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
@@ -2027,22 +2050,15 @@ class ARXMLWriter(AbstractARXMLWriter):
2027
2050
  self._raiseError("Unsupported PossibleError %s" % type(error))
2028
2051
 
2029
2052
  def setPortInterface(self, element: ET.Element, port_interface: PortInterface):
2030
- self.setIdentifiable(element, port_interface)
2053
+ self.writeIdentifiable(element, port_interface)
2031
2054
  self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.isService)
2032
2055
  self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
2033
2056
 
2034
- def writeParameterInterfaceParameters(self, element: ET.Element, param_interface: ParameterInterface):
2035
- parameters = param_interface.getParameters()
2036
- if len(parameters) > 0:
2037
- child_element = ET.SubElement(element, "PARAMETERS")
2038
- for prototype in parameters:
2039
- self.writeParameterDataPrototype(child_element, prototype)
2040
-
2041
2057
  def writeParameterInterface(self, element: ET.Element, param_interface: ParameterInterface):
2042
2058
  self.logger.debug("Write ParameterInterface %s" % param_interface.getShortName())
2043
2059
  child_element = ET.SubElement(element, "PARAMETER-INTERFACE")
2044
2060
  self.setPortInterface(child_element, param_interface)
2045
- self.writeParameterInterfaceParameters(child_element, param_interface)
2061
+ self.setParameterDataPrototypes(child_element, "PARAMETERS", param_interface.getParameters())
2046
2062
 
2047
2063
  def writeClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
2048
2064
  self.logger.debug("writeClientServerInterface %s" % cs_interface.getShortName())
@@ -2079,7 +2095,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2079
2095
  child_element = ET.SubElement(element, key)
2080
2096
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", layout_v.getShortLabel())
2081
2097
  self.setChildElementOptionalRefType(child_element, "BASE-TYPE-REF", layout_v.getBaseTypeRef())
2082
- self.setChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS", layout_v.getSwRecordLayoutVAxis())
2098
+ self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-AXIS", layout_v.getSwRecordLayoutVAxis())
2083
2099
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.getSwRecordLayoutVProp())
2084
2100
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.getSwRecordLayoutVIndex())
2085
2101
 
@@ -2088,7 +2104,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2088
2104
  child_element = ET.SubElement(element, key)
2089
2105
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", group.getShortLabel())
2090
2106
  self.setChildElementOptionalLiteral(child_element, "CATEGORY", group.getCategory())
2091
- self.setChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
2107
+ self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
2092
2108
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX", group.getSwRecordLayoutGroupIndex())
2093
2109
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.getSwRecordLayoutGroupFrom())
2094
2110
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.getSwRecordLayoutGroupTo())
@@ -2100,13 +2116,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2100
2116
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
2101
2117
  self.logger.debug("writeSwRecordLayout %s" % layout.getShortName())
2102
2118
  child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
2103
- self.setIdentifiable(child_element, layout)
2119
+ self.writeIdentifiable(child_element, layout)
2104
2120
  self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", layout.getSwRecordLayoutGroup())
2105
2121
 
2106
2122
  def writeSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
2107
2123
  self.logger.debug("writeSwAddrMethod %s" % method.getShortName())
2108
2124
  child_element = ET.SubElement(element, "SW-ADDR-METHOD")
2109
- self.setIdentifiable(child_element, method)
2125
+ self.writeIdentifiable(child_element, method)
2110
2126
  self.setChildElementOptionalLiteral(child_element, "MEMORY-ALLOCATION-KEYWORD-POLICY", method.getMemoryAllocationKeywordPolicy())
2111
2127
  options = method.getOptions()
2112
2128
  if len(options) > 0:
@@ -2148,13 +2164,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2148
2164
  def writeDataTypeMappingSet(self, element: ET.Element, mapping_set: DataTypeMappingSet):
2149
2165
  self.logger.debug("writeDataTypeMappingSet %s" % mapping_set.getShortName())
2150
2166
  child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-SET")
2151
- self.setIdentifiable(child_element, mapping_set)
2167
+ self.writeIdentifiable(child_element, mapping_set)
2152
2168
  self.writeDataTypeMaps(child_element, mapping_set)
2153
2169
  self.writeModeRequestTypeMaps(child_element, mapping_set)
2154
2170
 
2155
2171
  def setModeDeclaration(self, element: ET.Element, mode_declaration: ModeDeclaration):
2156
2172
  child_element = ET.SubElement(element, "MODE-DECLARATION")
2157
- self.setIdentifiable(child_element, mode_declaration)
2173
+ self.writeIdentifiable(child_element, mode_declaration)
2158
2174
  self.setChildElementOptionalNumericalValue(child_element, "VALUE", mode_declaration.getValue())
2159
2175
 
2160
2176
  def writeModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
@@ -2167,7 +2183,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2167
2183
  def writeModeDeclarationGroup(self, element: ET.Element, group: ModeDeclarationGroup):
2168
2184
  self.logger.debug("writeModeDeclarationGroup %s" % group.getShortName())
2169
2185
  child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP")
2170
- self.setIdentifiable(child_element, group)
2186
+ self.writeIdentifiable(child_element, group)
2171
2187
  self.setChildElementOptionalRefType(child_element, "INITIAL-MODE-REF", group.initialModeRef)
2172
2188
  self.writeModeDeclarationGroupModeDeclaration(child_element, group)
2173
2189
  self.setChildElementOptionalNumericalValue(child_element, "ON-TRANSITION-VALUE", group.getOnTransitionValue())
@@ -2177,7 +2193,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2177
2193
  if len(mode_groups) > 0:
2178
2194
  mode_group = mode_groups[0]
2179
2195
  child_element = ET.SubElement(element, "MODE-GROUP")
2180
- self.setIdentifiable(child_element, mode_group)
2196
+ self.writeIdentifiable(child_element, mode_group)
2181
2197
  self.setChildElementOptionalRefType(child_element, "TYPE-TREF", mode_group.type_tref)
2182
2198
 
2183
2199
  def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
@@ -2194,7 +2210,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2194
2210
 
2195
2211
  def writeEOCExecutableEntityRef(self, element: ET.Element, entity_ref: EOCExecutableEntityRef):
2196
2212
  child_element = ET.SubElement(element, "EOC-EXECUTABLE-ENTITY-REF")
2197
- self.setIdentifiable(child_element, entity_ref)
2213
+ self.writeIdentifiable(child_element, entity_ref)
2198
2214
  self.setEOCExecutableEntityRefSuccessorRefs(child_element, entity_ref.getSuccessorRefs())
2199
2215
 
2200
2216
  def writeExecutionOrderConstraintOrderedElement(self, element: ET.Element, constraint: ExecutionOrderConstraint):
@@ -2210,7 +2226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2210
2226
  def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
2211
2227
  self.logger.debug("writeExecutionOrderConstraint %s" % constraint.getShortName())
2212
2228
  child_element = ET.SubElement(element, "EXECUTION-ORDER-CONSTRAINT")
2213
- self.setIdentifiable(child_element, constraint)
2229
+ self.writeIdentifiable(child_element, constraint)
2214
2230
  self.writeExecutionOrderConstraintOrderedElement(child_element, constraint)
2215
2231
 
2216
2232
  def writeTimingRequirements(self, element: ET.Element, extension: TimingExtension):
@@ -2229,7 +2245,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2229
2245
  def writeSwcTiming(self, element: ET.Element, timing: SwcTiming):
2230
2246
  self.logger.debug("writeSWcTiming %s" % timing.getShortName())
2231
2247
  child_element = ET.SubElement(element, "SWC-TIMING")
2232
- self.setIdentifiable(child_element, timing)
2248
+ self.writeIdentifiable(child_element, timing)
2233
2249
  self.writeTimingExtension(child_element, timing)
2234
2250
 
2235
2251
  def writePduToFrameMappings(self, element: ET.Element, parent: Frame):
@@ -2238,13 +2254,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2238
2254
  mappings_tags = ET.SubElement(element, "PDU-TO-FRAME-MAPPINGS")
2239
2255
  for mapping in mappings:
2240
2256
  child_element = ET.SubElement(mappings_tags, "PDU-TO-FRAME-MAPPING")
2241
- self.setIdentifiable(child_element, mapping)
2257
+ self.writeIdentifiable(child_element, mapping)
2242
2258
  self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.packingByteOrder)
2243
2259
  self.setChildElementOptionalRefType(child_element, "PDU-REF", mapping.pduRef)
2244
2260
  self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.startPosition)
2245
2261
 
2246
2262
  def writeFrame(self, element: ET.Element, frame: Frame):
2247
- self.setIdentifiable(element, frame)
2263
+ self.writeIdentifiable(element, frame)
2248
2264
  self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
2249
2265
  self.writePduToFrameMappings(element, frame)
2250
2266
 
@@ -2271,15 +2287,21 @@ class ARXMLWriter(AbstractARXMLWriter):
2271
2287
  self.setChildElementOptionalRefType(refs_tag, "TX-NM-PDU-REF", ref)
2272
2288
 
2273
2289
  def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
2274
- self.logger.debug("writeCanNmNode %s" % nm_node.getShortName())
2290
+ self.logger.debug("write CanNmNode %s" % nm_node.getShortName())
2275
2291
  child_element = ET.SubElement(element, "CAN-NM-NODE")
2276
- self.setIdentifiable(child_element, nm_node)
2292
+ self.writeIdentifiable(child_element, nm_node)
2277
2293
  self.writeNmNode(child_element, nm_node)
2278
2294
 
2279
2295
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2280
2296
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
2281
2297
  self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
2282
2298
 
2299
+ def writeUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
2300
+ self.logger.debug("write UdpNmNode %s" % nm_node.getShortName())
2301
+ child_element = ET.SubElement(element, "UDP-NM-NODE")
2302
+ self.writeIdentifiable(child_element, nm_node)
2303
+ self.writeNmNode(child_element, nm_node)
2304
+
2283
2305
  def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2284
2306
  nodes = parent.getNmNodes()
2285
2307
  if len(nodes) > 0:
@@ -2287,10 +2309,12 @@ class ARXMLWriter(AbstractARXMLWriter):
2287
2309
  for node in nodes:
2288
2310
  if isinstance(node, CanNmNode):
2289
2311
  self.writeCanNmNode(child_element, node)
2312
+ elif isinstance(node, UdpNmNode):
2313
+ self.writeUdpNmNode(child_element, node)
2290
2314
  else:
2291
- self._raiseError("Unsupported Nm Node <%s>" % type(node))
2315
+ self.notImplemented("Unsupported Nm Node <%s>" % type(node))
2292
2316
 
2293
- def setCanNmClusterCoupling(self, element: ET.Element, coupling: CanNmClusterCoupling):
2317
+ def writeCanNmClusterCoupling(self, element: ET.Element, coupling: CanNmClusterCoupling):
2294
2318
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER-COUPLING")
2295
2319
  refs = coupling.getCoupledClusterRefs()
2296
2320
  if len(refs) > 0:
@@ -2301,6 +2325,9 @@ class ARXMLWriter(AbstractARXMLWriter):
2301
2325
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
2302
2326
  self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2303
2327
 
2328
+ def writeUdpNmClusterCoupling(self, element: ET.Element, coupling: UdpNmClusterCoupling):
2329
+ child_element = ET.SubElement(element, "UDP-NM-CLUSTER-COUPLING")
2330
+
2304
2331
  def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
2305
2332
  self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
2306
2333
  couplings = config.getNmClusterCouplings()
@@ -2308,11 +2335,14 @@ class ARXMLWriter(AbstractARXMLWriter):
2308
2335
  child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
2309
2336
  for coupling in couplings:
2310
2337
  if isinstance(coupling, CanNmClusterCoupling):
2311
- self.setCanNmClusterCoupling(child_element, coupling)
2338
+ self.writeCanNmClusterCoupling(child_element, coupling)
2339
+ elif isinstance(coupling, UdpNmClusterCoupling):
2340
+ self.writeUdpNmClusterCoupling(child_element, coupling)
2312
2341
  else:
2313
- self._raiseError("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2342
+ self.notImplemented("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2314
2343
 
2315
2344
  def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
2345
+ self.writeIdentifiable(element, cluster)
2316
2346
  self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
2317
2347
  self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
2318
2348
  self.setChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER", cluster.nmChannelSleepMaster)
@@ -2322,7 +2352,6 @@ class ARXMLWriter(AbstractARXMLWriter):
2322
2352
  def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2323
2353
  self.logger.debug("WriteCanNmCluster %s" % cluster.getShortName())
2324
2354
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
2325
- self.setIdentifiable(child_element, cluster)
2326
2355
  self.writeNmCluster(child_element, cluster)
2327
2356
 
2328
2357
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ACTIVE", cluster.getNmBusloadReductionActive())
@@ -2340,6 +2369,11 @@ class ARXMLWriter(AbstractARXMLWriter):
2340
2369
  self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2341
2370
  self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2342
2371
 
2372
+ def writeUdpNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2373
+ self.logger.debug("Write UdpNmCluster %s" % cluster.getShortName())
2374
+ child_element = ET.SubElement(element, "UDP-NM-CLUSTER")
2375
+ self.writeNmCluster(child_element, cluster)
2376
+
2343
2377
  def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2344
2378
  clusters = parent.getNmClusters()
2345
2379
  if len(clusters) > 0:
@@ -2347,26 +2381,28 @@ class ARXMLWriter(AbstractARXMLWriter):
2347
2381
  for cluster in clusters:
2348
2382
  if isinstance(cluster, CanNmCluster):
2349
2383
  self.writeCanNmCluster(child_element, cluster)
2384
+ elif isinstance(cluster, UdpNmCluster):
2385
+ self.writeUdpNmCluster(child_element, cluster)
2350
2386
  else:
2351
- self._raiseError("Unsupported Nm Cluster <%s>" % type(cluster))
2387
+ self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
2352
2388
 
2353
2389
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
2354
2390
  self.logger.debug("WriteNmConfig %s" % config.getShortName())
2355
2391
  child_element = ET.SubElement(element, "NM-CONFIG")
2356
- self.setIdentifiable(child_element, config)
2392
+ self.writeIdentifiable(child_element, config)
2357
2393
  self.writeNmConfigNmClusters(child_element, config)
2358
2394
  self.writeNmConfigNmClusterCouplings(child_element, config)
2359
2395
 
2360
2396
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2361
2397
  self.logger.debug("NmPdu %s" % pdu.getShortName())
2362
2398
  child_element = ET.SubElement(element, "NM-PDU")
2363
- self.setIdentifiable(child_element, pdu)
2399
+ self.writeIdentifiable(child_element, pdu)
2364
2400
  self.writeIPdu(child_element, pdu)
2365
2401
 
2366
2402
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
2367
2403
  self.logger.debug("NPdu %s" % pdu.getShortName())
2368
2404
  child_element = ET.SubElement(element, "N-PDU")
2369
- self.setIdentifiable(child_element, pdu)
2405
+ self.writeIdentifiable(child_element, pdu)
2370
2406
  self.writeIPdu(child_element, pdu)
2371
2407
 
2372
2408
  def writeIPdu(self, element: ET.Element, pdu: IPdu):
@@ -2375,20 +2411,20 @@ class ARXMLWriter(AbstractARXMLWriter):
2375
2411
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2376
2412
  self.logger.debug("DcmIPdu %s" % pdu.getShortName())
2377
2413
  child_element = ET.SubElement(element, "DCM-I-PDU")
2378
- self.setIdentifiable(child_element, pdu)
2414
+ self.writeIdentifiable(child_element, pdu)
2379
2415
  self.writeIPdu(child_element, pdu)
2380
2416
  self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2381
2417
 
2382
2418
  def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2383
2419
  self.logger.debug("SecuredIPdu %s" % pdu.getShortName())
2384
2420
  child_element = ET.SubElement(element, "SECURED-I-PDU")
2385
- self.setIdentifiable(child_element, pdu)
2421
+ self.writeIdentifiable(child_element, pdu)
2386
2422
  self.writeIPdu(child_element, pdu)
2387
2423
 
2388
2424
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2389
2425
  self.logger.debug("CanTpConfig %s" % config.getShortName())
2390
2426
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2391
- self.setIdentifiable(child_element, config)
2427
+ self.writeIdentifiable(child_element, config)
2392
2428
 
2393
2429
  def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2394
2430
  ref_list = triggering.getFramePortRefs()
@@ -2408,7 +2444,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2408
2444
  def writeCanFrameTriggering(self, element: ET.Element, triggering: CanFrameTriggering):
2409
2445
  self.logger.debug("WRite CanFrameTriggering %s" % triggering.getShortName())
2410
2446
  child_element = ET.SubElement(element, "CAN-FRAME-TRIGGERING")
2411
- self.setIdentifiable(child_element, triggering)
2447
+ self.writeIdentifiable(child_element, triggering)
2412
2448
  self.writeFrameTriggering(child_element, triggering)
2413
2449
  self.setChildElementOptionalLiteral(child_element, "CAN-ADDRESSING-MODE", triggering.getCanAddressingMode())
2414
2450
  self.setChildElementOptionalBooleanValue(child_element, "CAN-FD-FRAME-SUPPORT", triggering.getCanFdFrameSupport())
@@ -2420,7 +2456,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2420
2456
  def writeLinFrameTriggering(self, element: ET.Element, triggering: LinFrameTriggering):
2421
2457
  self.logger.debug("Write LinFrameTriggering %s" % triggering.getShortName())
2422
2458
  child_element = ET.SubElement(element, "LIN-FRAME-TRIGGERING")
2423
- self.setIdentifiable(child_element, triggering)
2459
+ self.writeIdentifiable(child_element, triggering)
2424
2460
  self.writeFrameTriggering(child_element, triggering)
2425
2461
  self.setChildElementOptionalNumericalValue(child_element, "IDENTIFIER", triggering.getIdentifier())
2426
2462
  self.setChildElementOptionalLiteral(child_element, "LIN-CHECKSUM", triggering.getLinChecksum())
@@ -2428,7 +2464,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2428
2464
  def writeISignalTriggering(self, element: ET.Element, triggering: ISignalTriggering):
2429
2465
  self.logger.debug("Write ISignalTriggering %s" % triggering.getShortName())
2430
2466
  child_element = ET.SubElement(element, "I-SIGNAL-TRIGGERING")
2431
- self.setIdentifiable(child_element, triggering)
2467
+ self.writeIdentifiable(child_element, triggering)
2432
2468
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", triggering.getISignalGroupRef())
2433
2469
  ref_list = triggering.getISignalPortRefs()
2434
2470
  if len(ref_list) > 0:
@@ -2440,7 +2476,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2440
2476
  def writePduTriggering(self, element: ET.Element, triggering: PduTriggering):
2441
2477
  self.logger.debug("Write PduTriggering %s" % triggering.getShortName())
2442
2478
  child_element = ET.SubElement(element, "PDU-TRIGGERING")
2443
- self.setIdentifiable(child_element, triggering)
2479
+ self.writeIdentifiable(child_element, triggering)
2444
2480
  ref_list = triggering.getIPduPortRefs()
2445
2481
  if len(ref_list) > 0:
2446
2482
  i_signal_port_refs_tag = ET.SubElement(child_element, "I-PDU-PORT-REFS")
@@ -2493,16 +2529,317 @@ class ARXMLWriter(AbstractARXMLWriter):
2493
2529
  self.notImplemented("Unsupported PduTriggering <%s>" % type(triggering))
2494
2530
 
2495
2531
  def writeCanPhysicalChannel(self, element: ET.Element, channel: CanPhysicalChannel):
2496
- self.logger.debug("CanPhysicalChannel %s" % channel.getShortName())
2532
+ self.logger.debug("Set CanPhysicalChannel %s" % channel.getShortName())
2497
2533
  child_element = ET.SubElement(element, "CAN-PHYSICAL-CHANNEL")
2498
- self.setIdentifiable(child_element, channel)
2534
+ self.writeIdentifiable(child_element, channel)
2499
2535
  self.writePhysicalChannel(child_element, channel)
2500
2536
 
2537
+ def writeScheduleTableEntry(self, element: ET.Element, entry: ScheduleTableEntry):
2538
+ self.setChildElementOptionalTimeValue(element, "DELAY", entry.getDelay())
2539
+ self.setChildElementOptionalIntegerValue(element, "POSITION-IN-TABLE", entry.getPositionInTable())
2540
+
2541
+ def setApplicationEntry(self, element: ET.Element, key: str, entry: ApplicationEntry):
2542
+ if entry is not None:
2543
+ child_element = ET.SubElement(element, key)
2544
+ self.writeScheduleTableEntry(child_element, entry)
2545
+ self.setChildElementOptionalRefType(child_element, "FRAME-TRIGGERING-REF", entry.getFrameTriggeringRef())
2546
+
2547
+ def writeLinScheduleTableTableEntries(self, element: ET.Element, table: LinScheduleTable):
2548
+ entries = table.getTableEntries()
2549
+ if len(entries) > 0:
2550
+ child_element = ET.SubElement(element, "TABLE-ENTRYS")
2551
+ for entry in entries:
2552
+ if isinstance(entry, ApplicationEntry):
2553
+ self.setApplicationEntry(child_element, "APPLICATION-ENTRY", entry)
2554
+ else:
2555
+ self.notImplemented("Unsupported Schedule Table <%s>" % type(entry))
2556
+
2557
+ def writeLinScheduleTable(self, element: ET.Element, table: LinScheduleTable):
2558
+ child_element = ET.SubElement(element, "LIN-SCHEDULE-TABLE")
2559
+ self.writeIdentifiable(child_element, table)
2560
+ self.setChildElementOptionalLiteral(child_element, "RESUME-POSITION", table.getResumePosition())
2561
+ self.setChildElementOptionalLiteral(child_element, "RUN-MODE", table.getRunMode())
2562
+ self.writeLinScheduleTableTableEntries(child_element, table)
2563
+
2564
+ def writeLinPhysicalChannelScheduleTables(self, element: ET.Element, channel: LinPhysicalChannel):
2565
+ tables = channel.getScheduleTables()
2566
+ if len(tables) > 0:
2567
+ child_element = ET.SubElement(element, "SCHEDULE-TABLES")
2568
+ for table in tables:
2569
+ if isinstance(table, LinScheduleTable):
2570
+ self.writeLinScheduleTable(child_element, table)
2571
+ else:
2572
+ self.notImplemented("Unsupported Schedule Table <%s>" % type(table))
2573
+
2501
2574
  def writeLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2502
- self.logger.debug("LinPhysicalChannel %s" % channel.getShortName())
2575
+ self.logger.debug("Set LinPhysicalChannel %s" % channel.getShortName())
2503
2576
  child_element = ET.SubElement(element, "LIN-PHYSICAL-CHANNEL")
2504
- self.setIdentifiable(child_element, channel)
2577
+ self.writeIdentifiable(child_element, channel)
2505
2578
  self.writePhysicalChannel(child_element, channel)
2579
+ self.writeLinPhysicalChannelScheduleTables(child_element, channel)
2580
+
2581
+ def setIpv6Configuration(self, element: ET.Element, configuration: Ipv6Configuration):
2582
+ if configuration is not None:
2583
+ child_element = ET.SubElement(element, "IPV-6-CONFIGURATION")
2584
+ self.setChildElementOptionalPositiveInteger(child_element, "ASSIGNMENT-PRIORITY", configuration.getAssignmentPriority())
2585
+ self.setChildElementOptionalLiteral(child_element, "DEFAULT-ROUTER", configuration.getDefaultRouter())
2586
+ self.setChildElementOptionalBooleanValue(child_element, "ENABLE-ANYCAST", configuration.getEnableAnycast())
2587
+ self.setChildElementOptionalPositiveInteger(child_element, "HOP-COUNT", configuration.getHopCount())
2588
+ self.setChildElementOptionalPositiveInteger(child_element, "IP-ADDRESS-PREFIX-LENGTH", configuration.getIpAddressPrefixLength())
2589
+ self.setChildElementOptionalLiteral(child_element, "IPV-6-ADDRESS", configuration.getIpv6Address())
2590
+ self.setChildElementOptionalLiteral(child_element, "IPV-6-ADDRESS-SOURCE", configuration.getIpv6AddressSource())
2591
+
2592
+ def writeNetworkEndPointNetworkEndPointAddresses(self, element: ET.Element, addresses: List[NetworkEndpointAddress]):
2593
+ if len(addresses) > 0:
2594
+ child_element = ET.SubElement(element, "NETWORK-ENDPOINT-ADDRESSES")
2595
+ for address in addresses:
2596
+ if isinstance(address, Ipv6Configuration):
2597
+ self.setIpv6Configuration(child_element, address)
2598
+ else:
2599
+ self.notImplemented("Unsupported Network EndPoint Address <%s>" % type(address))
2600
+
2601
+ def setDoIpEntity(self, element: ET.Element, key: str, entity: DoIpEntity):
2602
+ if entity is not None:
2603
+ child_element = ET.SubElement(element, key)
2604
+ self.setChildElementOptionalLiteral(child_element, "DO-IP-ENTITY-ROLE", entity.getDoIpEntityRole())
2605
+
2606
+ def setInfrastructureServices(self, element: ET.Element, key: str, services: InfrastructureServices):
2607
+ if services is not None:
2608
+ child_element = ET.SubElement(element, key)
2609
+ self.setDoIpEntity(child_element, "DO-IP-ENTITY", services.getDoIpEntity())
2610
+
2611
+ def writeNetworkEndPoint(self, element: ET.Element, end_point: NetworkEndpoint):
2612
+ self.logger.debug("Set NetworkEndpoint %s" % end_point.getShortName())
2613
+ child_element = ET.SubElement(element, "NETWORK-ENDPOINT")
2614
+ self.writeIdentifiable(child_element, end_point)
2615
+ self.setInfrastructureServices(child_element, "INFRASTRUCTURE-SERVICES", end_point.getInfrastructureServices())
2616
+ self.writeNetworkEndPointNetworkEndPointAddresses(child_element, end_point.getNetworkEndpointAddresses())
2617
+ self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
2618
+
2619
+ def writeEthernetPhysicalChannelNetworkEndPoints(self, element: ET.Element, end_points: List[NetworkEndpoint]):
2620
+ if len(end_points) > 0:
2621
+ child_element = ET.SubElement(element, "NETWORK-ENDPOINTS")
2622
+ for end_point in end_points:
2623
+ self.writeNetworkEndPoint(child_element, end_point)
2624
+
2625
+ def setSocketConnectionIpduIdentifier(self, element: ET.Element,identifier: SocketConnectionIpduIdentifier):
2626
+ if identifier is not None:
2627
+ child_element = ET.SubElement(element, "SOCKET-CONNECTION-IPDU-IDENTIFIER")
2628
+ self.setChildElementOptionalPositiveInteger(child_element, "HEADER-ID", identifier.getHeaderId())
2629
+ self.setChildElementOptionalLiteral(child_element, "PDU-COLLECTION-SEMANTICS", identifier.getPduCollectionSemantics())
2630
+ self.setChildElementOptionalLiteral(child_element, "PDU-COLLECTION-TRIGGER", identifier.getPduCollectionTrigger())
2631
+ self.setChildElementOptionalRefType(child_element, "PDU-REF", identifier.getPduRef())
2632
+ self.setChildElementOptionalRefType(child_element, "PDU-TRIGGERING-REF", identifier.getPduTriggeringRef())
2633
+
2634
+ def setSocketConnectionPdus(self, element: ET.Element, key: str, pdus: List[SocketConnectionIpduIdentifier]):
2635
+ if len(pdus) > 0:
2636
+ child_element = ET.SubElement(element, key)
2637
+ for pdu in pdus:
2638
+ if isinstance(pdu, SocketConnectionIpduIdentifier):
2639
+ self.setSocketConnectionIpduIdentifier(child_element, pdu)
2640
+ else:
2641
+ self.notImplemented("Unsupported Pdu <%s>" % type(pdu))
2642
+
2643
+ def setSocketConnection(self, element: ET.Element, connection: SocketConnection):
2644
+ if connection is not None:
2645
+ child_element = ET.SubElement(element, "SOCKET-CONNECTION")
2646
+ self.setChildElementOptionalBooleanValue(child_element, "CLIENT-IP-ADDR-FROM-CONNECTION-REQUEST", connection.getClientIpAddrFromConnectionRequest())
2647
+ self.setChildElementOptionalBooleanValue(child_element, "CLIENT-PORT-FROM-CONNECTION-REQUEST", connection.getClientPortFromConnectionRequest())
2648
+ self.setChildElementOptionalRefType(child_element, "CLIENT-PORT-REF", connection.getClientPortRef())
2649
+ self.setSocketConnectionPdus(child_element, "PDUS", connection.getPdus())
2650
+ self.setChildElementOptionalPositiveInteger(child_element, "PDU-COLLECTION-MAX-BUFFER-SIZE", connection.getPduCollectionMaxBufferSize())
2651
+ self.setChildElementOptionalTimeValue(child_element, "PDU-COLLECTION-TIMEOUT", connection.getPduCollectionTimeout())
2652
+ self.setChildElementOptionalLiteral(child_element, "RUNTIME-IP-ADDRESS-CONFIGURATION", connection.getRuntimeIpAddressConfiguration())
2653
+ self.setChildElementOptionalLiteral(child_element, "RUNTIME-PORT-CONFIGURATION", connection.getRuntimePortConfiguration())
2654
+ self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", connection.getShortLabel())
2655
+
2656
+ def writeSocketConnectionBundleConnections(self, element: ET.Element, bundle: SocketConnectionBundle):
2657
+ connections = bundle.getBundledConnections()
2658
+ if len(connections) > 0:
2659
+ child_element = ET.SubElement(element, "BUNDLED-CONNECTIONS")
2660
+ for connection in connections:
2661
+ if isinstance(connection, SocketConnection):
2662
+ self.setSocketConnection(child_element, connection)
2663
+ else:
2664
+ self.notImplemented("Unsupported Bundled Connection <%s>" % type(connection))
2665
+
2666
+ def writeSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
2667
+ if bundle is not None:
2668
+ child_element = ET.SubElement(element, "SOCKET-CONNECTION-BUNDLE")
2669
+ self.setReferable(child_element, bundle)
2670
+ self.writeSocketConnectionBundleConnections(child_element, bundle)
2671
+ self.setChildElementOptionalRefType(child_element, "SERVER-PORT-REF", bundle.getServerPortRef())
2672
+
2673
+ def writeSoAdConfigConnectionBundles(self, element: ET.Element, config: SoAdConfig):
2674
+ bundles = config.getConnectionBundles()
2675
+ if len(bundles) > 0:
2676
+ child_element = ET.SubElement(element, "CONNECTION-BUNDLES")
2677
+ for bundle in bundles:
2678
+ if isinstance(bundle, SocketConnectionBundle):
2679
+ self.writeSocketConnectionBundle(child_element, bundle)
2680
+ else:
2681
+ self.notImplemented("Unsupported Connection Bundle <%s>" % type(bundle))
2682
+
2683
+ def setTpPort(self, element: ET.SubElement, key: str, port: TpPort):
2684
+ if port is not None:
2685
+ child_element = ET.SubElement(element, key)
2686
+ self.setChildElementOptionalBooleanValue(child_element, "DYNAMICALLY-ASSIGNED", port.getDynamicallyAssigned())
2687
+ self.setChildElementOptionalPositiveInteger(child_element, "PORT-NUMBER", port.getPortNumber())
2688
+
2689
+ def writeUdpTp(self, element: ET.Element, tp: UdpTp):
2690
+ child_element = ET.SubElement(element, "UDP-TP")
2691
+ self.setTpPort(child_element, "UDP-TP-PORT", tp.getUdpTpPort())
2692
+
2693
+ def writeTcpTp(self, element: ET.Element, tp: TcpTp):
2694
+ child_element = ET.SubElement(element, "TCP-TP")
2695
+ self.setChildElementOptionalTimeValue(child_element, "KEEP-ALIVE-INTERVAL", tp.getKeepAliveInterval())
2696
+ self.setChildElementOptionalPositiveInteger(child_element, "KEEP-ALIVE-PROBES-MAX", tp.getKeepAliveProbesMax())
2697
+ self.setChildElementOptionalTimeValue(child_element, "KEEP-ALIVE-TIME", tp.getKeepAliveTime())
2698
+ self.setChildElementOptionalBooleanValue(child_element, "KEEP-ALIVES", tp.getKeepAlives())
2699
+ self.setChildElementOptionalLiteral(child_element, "NAGLES-ALGORITHM", tp.getNaglesAlgorithm())
2700
+ self.setTpPort(child_element, "TCP-TP-PORT", tp.getTcpTpPort())
2701
+
2702
+ def writeGenericTp(self, element: ET.Element, tp: GenericTp):
2703
+ child_element = ET.SubElement(element, "GENERIC-TP")
2704
+ self.setChildElementOptionalLiteral(child_element, "TP-ADDRESS", tp.getTpAddress())
2705
+ self.setChildElementOptionalLiteral(child_element, "TP-TECHNOLOGY", tp.getTpTechnology())
2706
+
2707
+ def writeTransportProtocolConfiguration(self, element: ET.Element, configuration: TransportProtocolConfiguration):
2708
+ if configuration is not None:
2709
+ child_element = ET.SubElement(element, "TP-CONFIGURATION")
2710
+ if isinstance(configuration, UdpTp):
2711
+ self.writeUdpTp(child_element, configuration)
2712
+ elif isinstance(configuration, TcpTp):
2713
+ self.writeTcpTp(child_element, configuration)
2714
+ elif isinstance(configuration, GenericTp):
2715
+ self.writeGenericTp(child_element, configuration)
2716
+ else:
2717
+ self.notImplemented("Unsupported TransportProtocolConfiguration <%s>" % type(configuration))
2718
+
2719
+ return configuration
2720
+
2721
+ def writeConsumedEventGroupRoutingGroupRefs(self, element: ET.Element, group: ConsumedEventGroup):
2722
+ refs = group.getRoutingGroupRefs()
2723
+ if len(refs) > 0:
2724
+ child_element = ET.SubElement(element, "ROUTING-GROUP-REFS")
2725
+ for ref in refs:
2726
+ self.setChildElementOptionalRefType(child_element, "ROUTING-GROUP-REF", ref)
2727
+
2728
+ def setRequestResponseDelay(self, element: ET.Element, key: str, delay: RequestResponseDelay):
2729
+ if delay is not None:
2730
+ child_element = ET.SubElement(element, key)
2731
+ self.setChildElementOptionalTimeValue(child_element, "MAX-VALUE", delay.getMaxValue())
2732
+ self.setChildElementOptionalTimeValue(child_element, "MIN-VALUE", delay.getMinValue())
2733
+
2734
+ def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
2735
+ if config is not None:
2736
+ child_element = ET.SubElement(element, key)
2737
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE", config.getInitialDelayMaxValue())
2738
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE", config.getInitialDelayMinValue())
2739
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY", config.getInitialRepetitionsBaseDelay())
2740
+ self.setChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX", config.getInitialRepetitionsMax())
2741
+
2742
+ def setSdClientConfig(self, element: ET.Element, key: str, config: SdClientConfig):
2743
+ if config is not None:
2744
+ child_element = ET.SubElement(element, key)
2745
+
2746
+ self.setChildElementOptionalPositiveInteger(child_element, "CLIENT-SERVICE-MAJOR-VERSION", config.getClientServiceMajorVersion())
2747
+ self.setChildElementOptionalPositiveInteger(child_element, "CLIENT-SERVICE-MINOR-VERSION", config.getClientServiceMinorVersion())
2748
+ self.setInitialSdDelayConfig(child_element, "INITIAL-FIND-BEHAVIOR", config.getInitialFindBehavior())
2749
+ self.setRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY", config.getRequestResponseDelay())
2750
+ self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
2751
+
2752
+ def writeConsumedEventGroup(self, element: ET.Element, group: ConsumedEventGroup):
2753
+ child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUP")
2754
+ self.writeIdentifiable(child_element, group)
2755
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", group.getApplicationEndpointRef())
2756
+ self.setChildElementOptionalPositiveInteger(child_element, "EVENT-GROUP-IDENTIFIER", group.getEventGroupIdentifier())
2757
+ self.writeConsumedEventGroupRoutingGroupRefs(child_element, group)
2758
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", group.getSdClientConfig())
2759
+
2760
+ def writeConsumedServiceInstanceConsumedEventGroups(self, element: ET.Element, instance: ConsumedServiceInstance):
2761
+ groups = instance.getConsumedEventGroups()
2762
+ if len(groups) > 0:
2763
+ child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUPS")
2764
+ for group in groups:
2765
+ if isinstance(group, ConsumedEventGroup):
2766
+ self.writeConsumedEventGroup(child_element, group)
2767
+ else:
2768
+ self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
2769
+
2770
+ def writeConsumedServiceInstance(self, element: ET.Element, instance: ConsumedServiceInstance):
2771
+ child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCE")
2772
+ self.writeIdentifiable(child_element, instance)
2773
+ self.writeConsumedServiceInstanceConsumedEventGroups(child_element, instance)
2774
+ self.setChildElementOptionalRefType(child_element, "PROVIDED-SERVICE-INSTANCE-REF", instance.getProvidedServiceInstanceRef())
2775
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", instance.getSdClientConfig())
2776
+
2777
+ def writeSocketAddressApplicationEndpointConsumedServiceInstances(self, element: ET.Element, end_point: ApplicationEndpoint):
2778
+ instances = end_point.getConsumedServiceInstances()
2779
+ if len(instances) > 0:
2780
+ child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCES")
2781
+ for instance in instances:
2782
+ if isinstance(instance, ConsumedServiceInstance):
2783
+ self.writeConsumedServiceInstance(child_element, instance)
2784
+ else:
2785
+ self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2786
+
2787
+ def writeSocketAddressApplicationEndpoint(self, element: ET.Element, address: SocketAddress):
2788
+ end_point = address.getApplicationEndpoint()
2789
+ if end_point is not None:
2790
+ child_element = ET.SubElement(element, "APPLICATION-ENDPOINT")
2791
+ self.writeIdentifiable(child_element, end_point)
2792
+ self.writeSocketAddressApplicationEndpointConsumedServiceInstances(child_element, end_point)
2793
+ self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", end_point.getNetworkEndpointRef())
2794
+ self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
2795
+ self.writeTransportProtocolConfiguration(child_element, end_point.getTpConfiguration())
2796
+
2797
+ def writeSocketAddressMulticastConnectorRefs(self, element: ET.Element, address: SocketAddress):
2798
+ refs = address.getMulticastConnectorRefs()
2799
+ if len(refs) > 0:
2800
+ child_element = ET.SubElement(element, "MULTICAST-CONNECTOR-REFS")
2801
+ for ref in refs:
2802
+ self.setChildElementOptionalRefType(child_element, "MULTICAST-CONNECTOR-REF", ref)
2803
+
2804
+ def writeSocketAddress(self, element: ET.Element, address: SocketAddress):
2805
+ child_element = ET.SubElement(element, "SOCKET-ADDRESS")
2806
+ self.writeIdentifiable(child_element, address)
2807
+ self.writeSocketAddressApplicationEndpoint(child_element, address)
2808
+ self.writeSocketAddressMulticastConnectorRefs(child_element, address)
2809
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", address.getConnectorRef())
2810
+ self.setChildElementOptionalPositiveInteger(child_element, "PORT-ADDRESS", address.getPortAddress())
2811
+
2812
+ def writeSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
2813
+ addresses = config.getSocketAddresses()
2814
+ if len(addresses) > 0:
2815
+ child_element = ET.SubElement(element, "SOCKET-ADDRESSS")
2816
+ for address in addresses:
2817
+ if isinstance(address, SocketAddress):
2818
+ self.writeSocketAddress(child_element, address)
2819
+ else:
2820
+ self.notImplemented("Unsupported Socket Address <%s>" % type(address))
2821
+
2822
+ def writeSoAdConfig(self, element: ET.Element, key: str, config: SoAdConfig):
2823
+ if config is not None:
2824
+ child_element = ET.SubElement(element, key)
2825
+ self.writeSoAdConfigConnectionBundles(child_element, config)
2826
+ self.writeSoAdConfigSocketAddresses(child_element, config)
2827
+
2828
+ def writeEthernetPhysicalChannelVlan(self, element: ET.Element, channel: EthernetPhysicalChannel):
2829
+ vlan = channel.getVlan()
2830
+ if vlan is not None:
2831
+ child_element = ET.SubElement(element, "VLAN")
2832
+ self.writeIdentifiable(child_element, vlan)
2833
+ self.setChildElementOptionalPositiveInteger(child_element, "VLAN-IDENTIFIER", vlan.getVlanIdentifier())
2834
+
2835
+ def writeEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2836
+ self.logger.debug("Set EthernetPhysicalChannel %s" % channel.getShortName())
2837
+ child_element = ET.SubElement(element, "ETHERNET-PHYSICAL-CHANNEL")
2838
+ self.writeIdentifiable(child_element, channel)
2839
+ self.writePhysicalChannel(child_element, channel)
2840
+ self.writeEthernetPhysicalChannelNetworkEndPoints(child_element, channel.getNetworkEndpoints())
2841
+ self.writeSoAdConfig(child_element, "SO-AD-CONFIG", channel.getSoAdConfig())
2842
+ self.writeEthernetPhysicalChannelVlan(child_element, channel)
2506
2843
 
2507
2844
  def writeCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2508
2845
  channels = cluster.getPhysicalChannels()
@@ -2513,6 +2850,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2513
2850
  self.writeCanPhysicalChannel(child_element, channel)
2514
2851
  elif isinstance(channel, LinPhysicalChannel):
2515
2852
  self.writeLinPhysicalChannel(child_element, channel)
2853
+ elif isinstance(channel, EthernetPhysicalChannel):
2854
+ self.writeEthernetPhysicalChannel(child_element, channel)
2516
2855
  else:
2517
2856
  self.notImplemented("Unsupported Physical Channel <%s>" % type(channel))
2518
2857
 
@@ -2522,14 +2861,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2522
2861
  self.setChildElementOptionalLiteral(element, "PROTOCOL-NAME", cluster.getProtocolName())
2523
2862
  self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", cluster.getProtocolVersion())
2524
2863
 
2525
- def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2864
+ def setCanClusterBusOffRecovery(self, element: ET.Element, key: str, recovery: CanClusterBusOffRecovery):
2865
+ if recovery is not None:
2866
+ child_element = ET.SubElement(element, key)
2867
+ self.setChildElementOptionalPositiveInteger(child_element, "BOR-COUNTER-L-1-TO-L-2", recovery.getBorCounterL1ToL2())
2868
+ self.setChildElementOptionalTimeValue(child_element, "BOR-TIME-L-1", recovery.getBorTimeL1())
2869
+ self.setChildElementOptionalTimeValue(child_element, "BOR-TIME-L-2", recovery.getBorTimeL2())
2870
+
2871
+ def writeAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2872
+ self.setCanClusterBusOffRecovery(element, "BUS-OFF-RECOVERY", cluster.getBusOffRecovery())
2526
2873
  self.setChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE", cluster.getCanFdBaudrate())
2527
2874
  self.setChildElementOptionalNumericalValue(element, "SPEED", cluster.getSpeed())
2528
2875
 
2529
2876
  def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
2530
2877
  self.logger.debug("LinCluster %s" % cluster.getShortName())
2531
2878
  child_element = ET.SubElement(element, "LIN-CLUSTER")
2532
- self.setIdentifiable(child_element, cluster)
2879
+ self.writeIdentifiable(child_element, cluster)
2533
2880
  child_element = ET.SubElement(child_element, "LIN-CLUSTER-VARIANTS")
2534
2881
  child_element = ET.SubElement(child_element, "LIN-CLUSTER-CONDITIONAL")
2535
2882
  self.writeCommunicationCluster(child_element, cluster)
@@ -2537,12 +2884,21 @@ class ARXMLWriter(AbstractARXMLWriter):
2537
2884
  def writeCanCluster(self, element: ET.Element, cluster: CanCluster):
2538
2885
  self.logger.debug("CanCluster %s" % cluster.getShortName())
2539
2886
  child_element = ET.SubElement(element, "CAN-CLUSTER")
2540
- self.setIdentifiable(child_element, cluster)
2887
+ self.writeIdentifiable(child_element, cluster)
2541
2888
 
2542
2889
  child_element = ET.SubElement(child_element, "CAN-CLUSTER-VARIANTS")
2543
2890
  child_element = ET.SubElement(child_element, "CAN-CLUSTER-CONDITIONAL")
2544
2891
  self.writeCommunicationCluster(child_element, cluster)
2545
- self.readAbstractCanCluster(child_element, cluster)
2892
+ self.writeAbstractCanCluster(child_element, cluster)
2893
+
2894
+ def writeEthernetCluster(self, element: ET.Element, cluster: EthernetCluster):
2895
+ self.logger.debug("Set EthernetCluster %s" % cluster.getShortName())
2896
+ child_element = ET.SubElement(element, "ETHERNET-CLUSTER")
2897
+ self.setARElement(child_element, cluster)
2898
+
2899
+ child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-VARIANTS")
2900
+ child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-CONDITIONAL")
2901
+ self.writeCommunicationCluster(child_element, cluster)
2546
2902
 
2547
2903
  def writeCanFrame(self, element: ET.Element, frame: CanFrame):
2548
2904
  self.logger.debug("Write CanFrame %s" % frame.getShortName())
@@ -2550,7 +2906,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2550
2906
  self.writeFrame(child_element, frame)
2551
2907
 
2552
2908
  def writeCommConnectorPort(self, element: ET.Element, port: CommConnectorPort):
2553
- self.setIdentifiable(element, port)
2909
+ self.writeIdentifiable(element, port)
2554
2910
  self.setChildElementOptionalLiteral(element, "COMMUNICATION-DIRECTION", port.getCommunicationDirection())
2555
2911
 
2556
2912
  def writeFramePort(self, element: ET.Element, port: FramePort):
@@ -2581,29 +2937,45 @@ class ARXMLWriter(AbstractARXMLWriter):
2581
2937
  self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
2582
2938
 
2583
2939
  def writeCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
2940
+ child_element = ET.SubElement(element, "CAN-COMMUNICATION-CONTROLLER")
2584
2941
  self.logger.debug("Write CanCommunicationController %s" % controller.getShortName())
2585
- self.setIdentifiable(element, controller)
2942
+ self.writeIdentifiable(child_element, controller)
2943
+
2944
+ def writeEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
2945
+ child_element = ET.SubElement(element, "ETHERNET-COMMUNICATION-CONTROLLER")
2946
+ self.logger.debug("Write EthernetCommunicationController %s" % controller.getShortName())
2947
+ self.writeIdentifiable(child_element, controller)
2586
2948
 
2587
2949
  def writeEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
2588
2950
  controllers = instance.getCommControllers()
2589
2951
  if len(controllers) > 0:
2590
- controllers_tag = ET.SubElement(element, "COMM-CONTROLLERS")
2952
+ child_element = ET.SubElement(element, "COMM-CONTROLLERS")
2591
2953
  for controller in controllers:
2592
2954
  if isinstance(controller, CanCommunicationController):
2593
- child_element = ET.SubElement(controllers_tag, "CAN-COMMUNICATION-CONTROLLER")
2594
2955
  self.writeCanCommunicationController(child_element, controller)
2956
+ elif isinstance(controller, EthernetCommunicationController):
2957
+ self.writeEthernetCommunicationController(child_element, controller)
2958
+ elif isinstance(controller, LinMaster):
2959
+ self.writeLinMaster(child_element, controller)
2595
2960
  else:
2596
- self._raiseError("Unsupported Communication Controller <%s>" % type(controller))
2961
+ self.notImplemented("Unsupported Communication Controller <%s>" % type(controller))
2597
2962
 
2598
2963
  def writeCommunicationConnector(self, element: ET.Element, connector: CommunicationConnector):
2599
- self.setIdentifiable(element, connector)
2964
+ self.writeIdentifiable(element, connector)
2600
2965
  self.setChildElementOptionalRefType(element, "COMM-CONTROLLER-REF", connector.getCommControllerRef())
2601
2966
  self.writeCommunicationConnectorEcuCommPortInstances(element, connector)
2602
2967
 
2603
-
2604
2968
  def writeCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2605
2969
  self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
2606
- self.writeCommunicationConnector(element, connector)
2970
+ self.writeCommunicationConnector(element, connector)
2971
+
2972
+ def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
2973
+ self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
2974
+ self.writeCommunicationConnector(element, connector)
2975
+
2976
+ def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
2977
+ self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
2978
+ self.writeCommunicationConnector(element, connector)
2607
2979
 
2608
2980
  def writeEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
2609
2981
  connectors = instance.getConnectors()
@@ -2613,13 +2985,19 @@ class ARXMLWriter(AbstractARXMLWriter):
2613
2985
  if isinstance(connector, CanCommunicationConnector):
2614
2986
  child_element = ET.SubElement(connectors_tag, "CAN-COMMUNICATION-CONNECTOR")
2615
2987
  self.writeCanCommunicationConnector(child_element, connector)
2988
+ elif isinstance(connector, EthernetCommunicationConnector):
2989
+ child_element = ET.SubElement(connectors_tag, "ETHERNET-COMMUNICATION-CONNECTOR")
2990
+ self.writeEthernetCommunicationConnector(child_element, connector)
2991
+ elif isinstance(connector, LinCommunicationConnector):
2992
+ child_element = ET.SubElement(connectors_tag, "LIN-COMMUNICATION-CONNECTOR")
2993
+ self.writeLinCommunicationConnector(child_element, connector)
2616
2994
  else:
2617
2995
  self._raiseError("Unsupported Communication connector <%s>" % type(connector))
2618
2996
 
2619
2997
  def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
2620
2998
  self.logger.debug("EcuInstance %s" % instance.getShortName())
2621
2999
  child_element = ET.SubElement(element, "ECU-INSTANCE")
2622
- self.setIdentifiable(child_element, instance)
3000
+ self.writeIdentifiable(child_element, instance)
2623
3001
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-GW-TIME-BASE", instance.getComConfigurationGwTimeBase())
2624
3002
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-RX-TIME-BASE", instance.getComConfigurationRxTimeBase())
2625
3003
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-TX-TIME-BASE", instance.getComConfigurationTxTimeBase())
@@ -2632,7 +3010,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2632
3010
  def writeSystemSignalGroup(self, element: ET.Element, group: SystemSignalGroup):
2633
3011
  self.logger.debug("Write SystemSignalGroup %s" % group.getShortName())
2634
3012
  child_element = ET.SubElement(element, "SYSTEM-SIGNAL-GROUP")
2635
- self.setIdentifiable(child_element, group)
3013
+ self.writeIdentifiable(child_element, group)
2636
3014
  signal_refs = group.getSystemSignalRefs()
2637
3015
  if len(signal_refs) > 0:
2638
3016
  signal_refs_tag = ET.SubElement(child_element, "SYSTEM-SIGNAL-REFS")
@@ -2664,7 +3042,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2664
3042
 
2665
3043
  def setSwcToEcuMapping(self, element: ET.Element, mapping: SwcToEcuMapping):
2666
3044
  child_element = ET.SubElement(element, "SWC-TO-ECU-MAPPING")
2667
- self.setIdentifiable(child_element, mapping)
3045
+ self.writeIdentifiable(child_element, mapping)
2668
3046
  irefs = mapping.getComponentIRefs()
2669
3047
  if len(irefs) > 0:
2670
3048
  irefs_tag = ET.SubElement(child_element, "COMPONENT-IREFS")
@@ -2685,7 +3063,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2685
3063
  def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
2686
3064
  self.logger.debug("Write SystemMapping %s" % mapping.getShortName())
2687
3065
  child_element = ET.SubElement(element, "SYSTEM-MAPPING")
2688
- self.setIdentifiable(child_element, mapping)
3066
+ self.writeIdentifiable(child_element, mapping)
2689
3067
  self.writeSystemMappingDataMappings(child_element, mapping)
2690
3068
  self.writeSystemMappingSwMappings(child_element, mapping)
2691
3069
 
@@ -2705,7 +3083,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2705
3083
  self.logger.debug("Write RootSwCompositionPrototype <%s>" % prototype.getShortName())
2706
3084
  child_element = ET.SubElement(element, "ROOT-SOFTWARE-COMPOSITIONS")
2707
3085
  child_element = ET.SubElement(child_element, "ROOT-SW-COMPOSITION-PROTOTYPE")
2708
- self.setIdentifiable(child_element, prototype)
3086
+ self.writeIdentifiable(child_element, prototype)
2709
3087
  self.setChildElementOptionalRefType(child_element, "FLAT-MAP-REF", prototype.getFlatMapRef())
2710
3088
  self.setChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF", prototype.getSoftwareCompositionTRef())
2711
3089
 
@@ -2726,7 +3104,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2726
3104
  self.writeRootSwCompositionPrototype(child_element, system)
2727
3105
  self.setChildElementOptionalRevisionLabelString(child_element, "SYSTEM-VERSION", system.getSystemVersion())
2728
3106
 
2729
- def setPhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
3107
+ def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
2730
3108
  self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
2731
3109
  child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
2732
3110
  self.setARElement(child_element, dimension)
@@ -2737,7 +3115,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2737
3115
  def setFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
2738
3116
  self.logger.debug("Set FlatInstanceDescriptor %s" % desc.getShortName())
2739
3117
  child_element = ET.SubElement(element, "FLAT-INSTANCE-DESCRIPTOR")
2740
- self.setIdentifiable(child_element, desc)
3118
+ self.writeIdentifiable(child_element, desc)
2741
3119
  self.setAnyInstanceRef(child_element, "UPSTREAM-REFERENCE-IREF", desc.getUpstreamReferenceIRef())
2742
3120
  self.setAnyInstanceRef(child_element, "ECU-EXTRACT-REFERENCE-IREF", desc.getEcuExtractReferenceIRef())
2743
3121
 
@@ -2751,7 +3129,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2751
3129
  else:
2752
3130
  self.notImplemented("Unsupported Flat Map Instances <%s>" % type(instance))
2753
3131
 
2754
- def setFlatMap(self, element: ET.Element, map: FlatMap):
3132
+ def writeFlatMap(self, element: ET.Element, map: FlatMap):
2755
3133
  self.logger.debug("Set FlatMap %s" % map.getShortName())
2756
3134
  child_element = ET.SubElement(element, "FLAT-MAP")
2757
3135
  self.setARElement(child_element, map)
@@ -2771,7 +3149,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2771
3149
  def setVariableAndParameterInterfaceMapping(self, element: ET.Element, mapping: VariableAndParameterInterfaceMapping):
2772
3150
  self.logger.debug("set VariableAndParameterInterfaceMapping %s" % mapping.getShortName())
2773
3151
  child_element = ET.SubElement(element, "VARIABLE-AND-PARAMETER-INTERFACE-MAPPING")
2774
- self.setIdentifiable(child_element, mapping)
3152
+ self.writeIdentifiable(child_element, mapping)
2775
3153
  self.setDataPrototypeMappings(child_element, "DATA-MAPPINGS", mapping.getDataMappings())
2776
3154
 
2777
3155
  def writePortInterfaceMappings(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
@@ -2784,7 +3162,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2784
3162
  else:
2785
3163
  self.notImplemented("Unsupported PortInterfaceMapping <%s>" % type(mapping))
2786
3164
 
2787
- def setPortInterfaceMappingSet(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
3165
+ def writePortInterfaceMappingSet(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
2788
3166
  self.logger.debug("Set PortInterfaceMappingSet %s" % mapping_set.getShortName())
2789
3167
  child_element = ET.SubElement(element, "PORT-INTERFACE-MAPPING-SET")
2790
3168
  self.setARElement(child_element, mapping_set)
@@ -2801,16 +3179,17 @@ class ARXMLWriter(AbstractARXMLWriter):
2801
3179
  def writeGateway(self, element: ET.Element, gateway: Gateway):
2802
3180
  self.logger.debug("Gateway %s" % gateway.getShortName())
2803
3181
  child_element = ET.SubElement(element, "GATEWAY")
2804
- self.setIdentifiable(child_element, gateway)
3182
+ self.writeIdentifiable(child_element, gateway)
2805
3183
  self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
2806
3184
  self.setISignalMappings(child_element, gateway.getSignalMappings())
2807
3185
 
2808
3186
  def writeISignal(self, element: ET.Element, signal: ISignal):
2809
3187
  self.logger.debug("ISignal %s" % signal.getShortName())
2810
3188
  child_element = ET.SubElement(element, "I-SIGNAL")
2811
- self.setIdentifiable(child_element, signal)
3189
+ self.writeIdentifiable(child_element, signal)
2812
3190
  self.setChildElementOptionalLiteral(child_element, "DATA-TYPE-POLICY", signal.getDataTypePolicy())
2813
- self.setValueSpecification(element, "INIT-VALUE", signal.getInitValue())
3191
+ self.setChildElementOptionalLiteral(child_element, "I-SIGNAL-TYPE", signal.getISignalType())
3192
+ self.setValueSpecification(child_element, "INIT-VALUE", signal.getInitValue())
2814
3193
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH", signal.getLength())
2815
3194
  self.setSwDataDefProps(child_element, "NETWORK-REPRESENTATION-PROPS", signal.getNetworkRepresentationProps())
2816
3195
  self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", signal.getSystemSignalRef())
@@ -2826,7 +3205,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2826
3205
  def writeEcucValueCollection(self, element: ET.Element, collection: EcucValueCollection):
2827
3206
  self.logger.debug("EcucValueCollection %s" % collection.getShortName())
2828
3207
  child_element = ET.SubElement(element, "ECUC-VALUE-COLLECTION")
2829
- self.setIdentifiable(child_element, collection)
3208
+ self.writeIdentifiable(child_element, collection)
2830
3209
  self.setChildElementOptionalRefType(child_element, "ECU-EXTRACT-REF", collection.getEcuExtractRef())
2831
3210
  self.writeEcucValueCollectionEcucValues(child_element, collection)
2832
3211
 
@@ -2906,7 +3285,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2906
3285
  def writeEcucContainValue(self, element: ET.Element, container_value: EcucContainerValue):
2907
3286
  self.logger.debug("EcucContainerValue %s" % container_value.getShortName())
2908
3287
  child_element = ET.SubElement(element, "ECUC-CONTAINER-VALUE")
2909
- self.setIdentifiable(child_element, container_value)
3288
+ self.writeIdentifiable(child_element, container_value)
2910
3289
  self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", container_value.getDefinitionRef())
2911
3290
  self.writeEcucContainerValueParameterValues(child_element, container_value)
2912
3291
  self.writeEcucContainerValueReferenceValues(child_element, container_value)
@@ -2925,7 +3304,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2925
3304
  def writeEcucModuleConfigurationValues(self, element: ET.Element, values: EcucModuleConfigurationValues):
2926
3305
  self.logger.debug("EcucModuleConfigurationValues %s" % values.getShortName())
2927
3306
  child_element = ET.SubElement(element, "ECUC-MODULE-CONFIGURATION-VALUES")
2928
- self.setIdentifiable(child_element, values)
3307
+ self.writeIdentifiable(child_element, values)
2929
3308
  self.setChildElementOptionalRefType(child_element, "DEFINITION-REF", values.getDefinitionRef())
2930
3309
  self.setChildElementOptionalLiteral(child_element, "IMPLEMENTATION-CONFIG-VARIANT", values.getImplementationConfigVariant())
2931
3310
  self.setChildElementOptionalRefType(child_element, "MODULE-DESCRIPTION-REF", values.getModuleDescriptionRef())
@@ -2934,7 +3313,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2934
3313
  def writeISignalGroup(self, element: ET.Element, group: ISignalGroup):
2935
3314
  self.logger.debug("ISignalGroup %s" % group.getShortName())
2936
3315
  child_element = ET.SubElement(element, "I-SIGNAL-GROUP")
2937
- self.setIdentifiable(child_element, group)
3316
+ self.writeIdentifiable(child_element, group)
2938
3317
  signal_refs = group.getISignalRefs()
2939
3318
  if len(signal_refs) > 0:
2940
3319
  signal_refs_tag = ET.SubElement(child_element, "I-SIGNAL-REFS")
@@ -2943,9 +3322,9 @@ class ARXMLWriter(AbstractARXMLWriter):
2943
3322
  self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-GROUP-REF", group.getSystemSignalGroupRef())
2944
3323
 
2945
3324
  def writeISignalIPduGroup(self, element: ET.Element, group: ISignalIPduGroup):
2946
- self.logger.debug("ISignalIPduGroup %s" % group.getShortName())
3325
+ self.logger.debug("Set ISignalIPduGroup %s" % group.getShortName())
2947
3326
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU-GROUP")
2948
- self.setIdentifiable(child_element, group)
3327
+ self.writeIdentifiable(child_element, group)
2949
3328
  self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-DIRECTION", group.getCommunicationDirection())
2950
3329
  self.setChildElementOptionalLiteral(child_element, "COMMUNICATION-MODE", group.getCommunicationMode())
2951
3330
  group_refs = group.getContainedISignalIPduGroupRefs()
@@ -2963,20 +3342,84 @@ class ARXMLWriter(AbstractARXMLWriter):
2963
3342
  def writeSystemSignal(self, element: ET.Element, signal: SystemSignal):
2964
3343
  self.logger.debug("SystemSignal %s" % signal.getShortName())
2965
3344
  child_element = ET.SubElement(element, "SYSTEM-SIGNAL")
2966
- self.setIdentifiable(child_element, signal)
3345
+ self.writeIdentifiable(child_element, signal)
2967
3346
  self.setChildElementOptionalBooleanValue(child_element, "DYNAMIC-LENGTH", signal.getDynamicLength())
3347
+ self.setSwDataDefProps(child_element, "PHYSICAL-PROPS", signal.getPhysicalProps())
2968
3348
 
2969
-
2970
-
2971
- def writeGenericEthernetFrame(self, element: ET.Element, signal: GenericEthernetFrame):
2972
- self.logger.debug("Write GenericEthernetFrame %s" % signal.getShortName())
3349
+ def writeGenericEthernetFrame(self, element: ET.Element, frame: GenericEthernetFrame):
3350
+ self.logger.debug("Write GenericEthernetFrame %s" % frame.getShortName())
2973
3351
  child_element = ET.SubElement(element, "ETHERNET-FRAME")
2974
- self.writeFrame(child_element, signal)
3352
+ self.writeFrame(child_element, frame)
2975
3353
 
2976
3354
  def writeLifeCycleInfoSet(self, element: ET.Element, set: LifeCycleInfoSet):
2977
3355
  self.logger.debug("Write LifeCycleInfoSet %s" % set.getShortName())
2978
3356
  child_element = ET.SubElement(element, "LIFE-CYCLE-INFO-SET")
2979
- self.setIdentifiable(child_element, set)
3357
+ self.writeIdentifiable(child_element, set)
3358
+
3359
+ def writeDiagnosticConnectionFunctionalRequestRefs(self, element: ET.Element, connection: DiagnosticConnection):
3360
+ refs = connection.getFunctionalRequestRefs()
3361
+ if len(refs) > 0:
3362
+ refs_tag = ET.SubElement(element, "FUNCTIONAL-REQUEST-REFS")
3363
+ for ref in refs:
3364
+ self.setChildElementOptionalRefType(refs_tag, "FUNCTIONAL-REQUEST-REF", ref)
3365
+
3366
+ def writeDiagnosticConnection(self, element: ET.Element, connection: DiagnosticConnection):
3367
+ self.logger.debug("Write DiagnosticConnection %s" % connection.getShortName())
3368
+ child_element = ET.SubElement(element, "DIAGNOSTIC-CONNECTION")
3369
+ self.writeIdentifiable(child_element, connection)
3370
+ self.writeDiagnosticConnectionFunctionalRequestRefs(child_element, connection)
3371
+ self.setChildElementOptionalRefType(child_element, "PHYSICAL-REQUEST-REF", connection.getPhysicalRequestRef())
3372
+ self.setChildElementOptionalRefType(child_element, "RESPONSE-REF", connection.getResponseOnEventRef())
3373
+
3374
+ def writeDiagnosticServiceTable(self, element: ET.Element, table: DiagnosticServiceTable):
3375
+ self.logger.debug("Write DiagnosticServiceTable %s" % table.getShortName())
3376
+ child_element = ET.SubElement(element, "DIAGNOSTIC-SERVICE-TABLE")
3377
+ self.writeIdentifiable(child_element, table)
3378
+
3379
+ def writeMultiplexedIPdu(self, element: ET.Element, i_pdu: MultiplexedIPdu):
3380
+ self.logger.debug("Write MultiplexedIPdu %s" % i_pdu.getShortName())
3381
+ child_element = ET.SubElement(element, "MULTIPLEXED-I-PDU")
3382
+ self.writeIdentifiable(child_element, i_pdu)
3383
+
3384
+ def writeUserDefinedIPdu(self, element: ET.Element, i_pdu: UserDefinedIPdu):
3385
+ self.logger.debug("Write UserDefinedIPdu %s" % i_pdu.getShortName())
3386
+ child_element = ET.SubElement(element, "USER-DEFINED-I-PDU")
3387
+ self.writeIdentifiable(child_element, i_pdu)
3388
+
3389
+ def writeUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
3390
+ self.logger.debug("Write UserDefinedPdu %s" % pdu.getShortName())
3391
+ child_element = ET.SubElement(element, "USER-DEFINED-PDU")
3392
+ self.writeIdentifiable(child_element, pdu)
3393
+
3394
+ def writeGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
3395
+ self.logger.debug("Write GeneralPurposePdu %s" % pdu.getShortName())
3396
+ child_element = ET.SubElement(element, "GENERAL-PURPOSE-PDU")
3397
+ self.writeIdentifiable(child_element, pdu)
3398
+
3399
+ def writeGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
3400
+ self.logger.debug("Write GeneralPurposeIPdu %s" % i_pdu.getShortName())
3401
+ child_element = ET.SubElement(element, "GENERAL-PURPOSE-I-PDU")
3402
+ self.writeIdentifiable(child_element, i_pdu)
3403
+
3404
+ def writeSecureCommunicationPropsSet(self, element: ET.Element, set: SecureCommunicationPropsSet):
3405
+ self.logger.debug("Write SecureCommunicationPropsSet %s" % set.getShortName())
3406
+ child_element = ET.SubElement(element, "SECURE-COMMUNICATION-PROPS-SET")
3407
+ self.writeIdentifiable(child_element, set)
3408
+
3409
+ def writeSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
3410
+ self.logger.debug("Write SoAdRoutingGroup %s" % group.getShortName())
3411
+ child_element = ET.SubElement(element, "SO-AD-ROUTING-GROUP")
3412
+ self.writeIdentifiable(child_element, group)
3413
+
3414
+ def writeDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
3415
+ self.logger.debug("Write DoIpTpConfig %s" % config.getShortName())
3416
+ child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
3417
+ self.writeIdentifiable(child_element, config)
3418
+
3419
+ def writeLinMaster(self, element: ET.Element, master: LinMaster):
3420
+ self.logger.debug("Write LinMaster %s" % master.getShortName())
3421
+ child_element = ET.SubElement(element, "LIN-MASTER")
3422
+ self.writeIdentifiable(child_element, master)
2980
3423
 
2981
3424
  def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
2982
3425
  mappings = parent.getISignalToPduMappings()
@@ -2984,7 +3427,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2984
3427
  mappings_tag = ET.SubElement(element, "I-SIGNAL-TO-PDU-MAPPINGS")
2985
3428
  for mapping in mappings:
2986
3429
  child_element = ET.SubElement(mappings_tag, "I-SIGNAL-TO-I-PDU-MAPPING")
2987
- self.setIdentifiable(child_element, mapping)
3430
+ self.writeIdentifiable(child_element, mapping)
2988
3431
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
2989
3432
  self.setChildElementOptionalRefType(child_element, "I-SIGNAL-GROUP-REF", mapping.getISignalGroupRef())
2990
3433
  self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
@@ -3016,11 +3459,22 @@ class ARXMLWriter(AbstractARXMLWriter):
3016
3459
  self.setChildElementOptionalIntegerValue(child_element, "NUMBER-OF-REPETITIONS", timing.getNumberOfRepetitions())
3017
3460
  self.setTimeRangeType(child_element, "REPETITION-PERIOD", timing.getRepetitionPeriod())
3018
3461
 
3462
+ def setTimeRangeType(self, element: ET.Element, key: str, time_range: TimeRangeType):
3463
+ if time_range is not None:
3464
+ child_element = ET.SubElement(element, key)
3465
+ self.setChildElementOptionalTimeValue(child_element, "VALUE", time_range.getValue())
3466
+
3467
+ def setCyclicTiming(self, element: ET.Element, key: str, timing: CyclicTiming):
3468
+ if timing is not None:
3469
+ child_element = ET.SubElement(element, key)
3470
+ self.setTimeRangeType(child_element, "TIME-OFFSET", timing.getTimeOffset())
3471
+ self.setTimeRangeType(child_element, "TIME-PERIOD", timing.getTimePeriod())
3472
+
3019
3473
  def setTransmissionModeTiming(self, element: ET.Element, key: str, timing: TransmissionModeTiming):
3020
3474
  if timing is not None:
3021
3475
  self.logger.debug("Set TransmissionModeTiming of <%s>" % key)
3022
3476
  child_element = ET.SubElement(element, key)
3023
- #timing.getCyclicTiming(child_element, "")
3477
+ self.setCyclicTiming(child_element, "CYCLIC-TIMING", timing.getCyclicTiming())
3024
3478
  self.setEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING", timing.getEventControlledTiming())
3025
3479
 
3026
3480
  def setTransmissionModeDeclaration(self, element: ET.Element, key: str, decl : TransmissionModeDeclaration):
@@ -3033,12 +3487,13 @@ class ARXMLWriter(AbstractARXMLWriter):
3033
3487
  if timing is not None:
3034
3488
  spec_tag = ET.SubElement(element, "I-PDU-TIMING-SPECIFICATIONS")
3035
3489
  child_element = ET.SubElement(spec_tag, "I-PDU-TIMING")
3490
+ self.setChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY", timing.getMinimumDelay())
3036
3491
  self.setTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION", timing.getTransmissionModeDeclaration())
3037
3492
 
3038
3493
  def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
3039
3494
  self.logger.debug("ISignalIPdu %s" % i_pdu.getShortName())
3040
3495
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
3041
- self.setIdentifiable(child_element, i_pdu)
3496
+ self.writeIdentifiable(child_element, i_pdu)
3042
3497
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
3043
3498
  self.setISignalIPduIPduTimingSpecification(child_element, i_pdu.getIPduTimingSpecification())
3044
3499
  self.writeISignalToPduMappings(child_element, i_pdu)
@@ -3052,13 +3507,13 @@ class ARXMLWriter(AbstractARXMLWriter):
3052
3507
  elif isinstance(ar_element, CompositionSwComponentType):
3053
3508
  self.writeCompositionSwComponentType(element, ar_element)
3054
3509
  elif isinstance(ar_element, ApplicationPrimitiveDataType):
3055
- self.setApplicationPrimitiveDataType(element, ar_element)
3510
+ self.writeApplicationPrimitiveDataType(element, ar_element)
3056
3511
  elif isinstance(ar_element, ApplicationRecordDataType):
3057
- self.setApplicationRecordDataType(element, ar_element)
3512
+ self.writeApplicationRecordDataType(element, ar_element)
3058
3513
  elif isinstance(ar_element, SwBaseType):
3059
- self.setSwBaseType(element, ar_element)
3514
+ self.writeSwBaseType(element, ar_element)
3060
3515
  elif isinstance(ar_element, CompuMethod):
3061
- self.setCompuMethod(element, ar_element)
3516
+ self.writeCompuMethod(element, ar_element)
3062
3517
  elif isinstance(ar_element, ConstantSpecification):
3063
3518
  self.writeConstantSpecification(element, ar_element)
3064
3519
  elif isinstance(ar_element, DataConstr):
@@ -3074,7 +3529,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3074
3529
  elif isinstance(ar_element, BswModuleEntry):
3075
3530
  self.writeBswModuleEntry(element, ar_element)
3076
3531
  elif isinstance(ar_element, SwcBswMapping):
3077
- self.setSwcBswMapping(element, ar_element)
3532
+ self.writeSwcBswMapping(element, ar_element)
3078
3533
  elif isinstance(ar_element, BswImplementation):
3079
3534
  self.writeBswImplementation(element, ar_element)
3080
3535
  elif isinstance(ar_element, ImplementationDataType):
@@ -3142,11 +3597,35 @@ class ARXMLWriter(AbstractARXMLWriter):
3142
3597
  elif isinstance(ar_element, LifeCycleInfoSet):
3143
3598
  self.writeLifeCycleInfoSet(element, ar_element)
3144
3599
  elif isinstance(ar_element, PhysicalDimension):
3145
- self.setPhysicalDimension(element, ar_element)
3600
+ self.writePhysicalDimension(element, ar_element)
3146
3601
  elif isinstance(ar_element, FlatMap):
3147
- self.setFlatMap(element, ar_element)
3602
+ self.writeFlatMap(element, ar_element)
3148
3603
  elif isinstance(ar_element, PortInterfaceMappingSet):
3149
- self.setPortInterfaceMappingSet(element, ar_element)
3604
+ self.writePortInterfaceMappingSet(element, ar_element)
3605
+ elif isinstance(ar_element, EthernetCluster):
3606
+ self.writeEthernetCluster(element, ar_element)
3607
+ elif isinstance(ar_element, ISignalIPduGroup):
3608
+ self.writeISignalIPduGroup(element, ar_element)
3609
+ elif isinstance(ar_element, DiagnosticConnection):
3610
+ self.writeDiagnosticConnection(element, ar_element)
3611
+ elif isinstance(ar_element, DiagnosticServiceTable):
3612
+ self.writeDiagnosticServiceTable(element, ar_element)
3613
+ elif isinstance(ar_element, MultiplexedIPdu):
3614
+ self.writeMultiplexedIPdu(element, ar_element)
3615
+ elif isinstance(ar_element, UserDefinedIPdu):
3616
+ self.writeUserDefinedIPdu(element, ar_element)
3617
+ elif isinstance(ar_element, UserDefinedPdu):
3618
+ self.writeUserDefinedPdu(element, ar_element)
3619
+ elif isinstance(ar_element, GeneralPurposePdu):
3620
+ self.writeGeneralPurposePdu(element, ar_element)
3621
+ elif isinstance(ar_element, GeneralPurposeIPdu):
3622
+ self.writeGeneralPurposeIPdu(element, ar_element)
3623
+ elif isinstance(ar_element, SecureCommunicationPropsSet):
3624
+ self.writeSecureCommunicationPropsSet(element, ar_element)
3625
+ elif isinstance(ar_element, SoAdRoutingGroup):
3626
+ self.writeSoAdRoutingGroup(element, ar_element)
3627
+ elif isinstance(ar_element, DoIpTpConfig):
3628
+ self.writeDoIpTpConfig(element, ar_element)
3150
3629
  else:
3151
3630
  self.notImplemented("Unsupported Elements of ARPackage <%s>" % type(ar_element))
3152
3631
 
@@ -3169,7 +3648,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3169
3648
  for pkg in pkgs:
3170
3649
  pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
3171
3650
 
3172
- self.setIdentifiable(pkg_tag, pkg)
3651
+ self.writeIdentifiable(pkg_tag, pkg)
3173
3652
  self.logger.debug("writeARPackage %s" % pkg.full_name)
3174
3653
 
3175
3654
  self.writeReferenceBases(pkg_tag, pkg.getReferenceBases())