armodel 1.7.5__py3-none-any.whl → 1.7.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +2 -2
  2. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +4 -0
  3. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +7 -1
  4. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +13 -0
  5. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +165 -4
  6. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +400 -17
  7. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +356 -8
  8. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +2 -4
  9. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +76 -10
  10. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +45 -23
  11. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +1 -0
  12. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +55 -2
  13. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +2 -1
  14. armodel/parser/abstract_arxml_parser.py +5 -5
  15. armodel/parser/arxml_parser.py +632 -466
  16. armodel/writer/arxml_writer.py +347 -52
  17. {armodel-1.7.5.dist-info → armodel-1.7.6.dist-info}/METADATA +22 -1
  18. {armodel-1.7.5.dist-info → armodel-1.7.6.dist-info}/RECORD +22 -22
  19. {armodel-1.7.5.dist-info → armodel-1.7.6.dist-info}/LICENSE +0 -0
  20. {armodel-1.7.5.dist-info → armodel-1.7.6.dist-info}/WHEEL +0 -0
  21. {armodel-1.7.5.dist-info → armodel-1.7.6.dist-info}/entry_points.txt +0 -0
  22. {armodel-1.7.5.dist-info → armodel-1.7.6.dist-info}/top_level.txt +0 -0
@@ -30,7 +30,7 @@ from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecifi
30
30
  from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
31
31
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
32
32
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
33
- from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation
33
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation, ImplementationProps
34
34
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
35
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef, ExecutionOrderConstraint
36
36
  from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
@@ -55,7 +55,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import
55
55
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
56
56
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
57
57
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
58
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype
58
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype, SymbolProps
59
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
60
60
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument, SwcInternalBehavior, SynchronousServerCallPoint
61
61
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
@@ -83,18 +83,18 @@ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance imp
83
83
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
84
84
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
85
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
86
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo, CouplingPortScheduler, CouplingPortStructuralElement, EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, EthernetPriorityRegeneration, InitialSdDelayConfig, MacMulticastGroup, RequestResponseDelay, SdClientConfig, VlanMembership
87
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
89
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, ISignalMapping
88
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, EventHandler, GenericTp, ProvidedServiceInstance, SdServerConfig, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
89
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
90
90
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
91
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
91
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController, AbstractCanCommunicationControllerAttributes, CanCommunicationConnector, CanCommunicationController, CanControllerConfigurationRequirements, CanControllerFdConfiguration, CanControllerFdConfigurationRequirements
92
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
93
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, CommunicationController, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
94
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
95
95
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
96
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
97
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig, DoIpTpConfig, LinTpConfig
98
98
 
99
99
  from .abstract_arxml_writer import AbstractARXMLWriter
100
100
  class ARXMLWriter(AbstractARXMLWriter):
@@ -144,7 +144,7 @@ class ARXMLWriter(AbstractARXMLWriter):
144
144
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
145
145
  limit_tag.text = limit.value
146
146
 
147
- def setReferable(self, element: ET.Element, referrable: Referrable):
147
+ def writeReferrable(self, element: ET.Element, referrable: Referrable):
148
148
  self.setARObjectAttributes(element, referrable)
149
149
  self.setShortName(element, referrable.getShortName())
150
150
 
@@ -175,8 +175,8 @@ class ARXMLWriter(AbstractARXMLWriter):
175
175
  for l2 in paragraph.getL2s():
176
176
  self.setLOverviewParagraph(child_element, l2)
177
177
 
178
- def setMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
179
- self.setReferable(element, referrable)
178
+ def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
179
+ self.writeReferrable(element, referrable)
180
180
  if referrable.longName is not None:
181
181
  self.setMultiLongName(element, "LONG-NAME", referrable.longName)
182
182
 
@@ -198,14 +198,14 @@ class ARXMLWriter(AbstractARXMLWriter):
198
198
  self.writeSdgs(child_element, admin_data)
199
199
 
200
200
  def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
201
- self.setMultilanguageReferrable(element, identifiable)
201
+ self.writeMultilanguageReferrable(element, identifiable)
202
202
  self.setAnnotations(element, identifiable.getAnnotations())
203
203
  self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
204
204
  self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
205
205
  self.setDocumentationBlock(element, "INTRODUCTION", identifiable.getIntroduction())
206
206
  self.setAdminData(element, identifiable.getAdminData())
207
207
 
208
- def setARElement(self, parent: ET.Element, ar_element: ARElement):
208
+ def writeARElement(self, parent: ET.Element, ar_element: ARElement):
209
209
  self.writeIdentifiable(parent, ar_element)
210
210
 
211
211
  def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
@@ -728,7 +728,7 @@ class ARXMLWriter(AbstractARXMLWriter):
728
728
  self.setApplicationDataType(element, data_type)
729
729
 
730
730
  def setAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
731
- self.setARElement(element, data_type)
731
+ self.writeARElement(element, data_type)
732
732
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.getSwDataDefProps())
733
733
 
734
734
  def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
@@ -1989,12 +1989,25 @@ class ARXMLWriter(AbstractARXMLWriter):
1989
1989
  self.writeImplementationDataTypeElements(child_element, type_element)
1990
1990
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.getSwDataDefProps())
1991
1991
 
1992
+ def writeImplementationProps(self, element: ET.Element, props: ImplementationProps):
1993
+ self.writeReferrable(element, props)
1994
+ self.setChildElementOptionalLiteral(element, "SYMBOL", props.getSymbol())
1995
+
1996
+ def writeSymbolProps(self, element: ET.Element, props: SymbolProps):
1997
+ if props is not None:
1998
+ child_element = ET.SubElement(element, "SYMBOL-PROPS")
1999
+ self.writeImplementationProps(child_element, props)
2000
+
2001
+ def writeImplementationDataTypeSymbolProps(self, element: ET.Element, data_type: ImplementationDataType):
2002
+ self.writeSymbolProps(element, data_type.getSymbolProps())
2003
+
1992
2004
  def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1993
2005
  self.logger.debug("writeImplementationDataType %s" % data_type.getShortName())
1994
2006
  child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
1995
2007
  self.setAutosarDataType(child_element, data_type)
1996
2008
  self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
1997
2009
  self.writeImplementationDataTypeElements(child_element, data_type)
2010
+ self.writeImplementationDataTypeSymbolProps(child_element, data_type)
1998
2011
  self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1999
2012
 
2000
2013
  def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
@@ -2387,20 +2400,20 @@ class ARXMLWriter(AbstractARXMLWriter):
2387
2400
  self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
2388
2401
 
2389
2402
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
2390
- self.logger.debug("WriteNmConfig %s" % config.getShortName())
2403
+ self.logger.debug("Write NmConfig <%s>" % config.getShortName())
2391
2404
  child_element = ET.SubElement(element, "NM-CONFIG")
2392
2405
  self.writeIdentifiable(child_element, config)
2393
2406
  self.writeNmConfigNmClusters(child_element, config)
2394
2407
  self.writeNmConfigNmClusterCouplings(child_element, config)
2395
2408
 
2396
2409
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2397
- self.logger.debug("NmPdu %s" % pdu.getShortName())
2410
+ self.logger.debug("Write NmPdu <%s>" % pdu.getShortName())
2398
2411
  child_element = ET.SubElement(element, "NM-PDU")
2399
2412
  self.writeIdentifiable(child_element, pdu)
2400
2413
  self.writeIPdu(child_element, pdu)
2401
2414
 
2402
2415
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
2403
- self.logger.debug("NPdu %s" % pdu.getShortName())
2416
+ self.logger.debug("Write NPdu <%s>" % pdu.getShortName())
2404
2417
  child_element = ET.SubElement(element, "N-PDU")
2405
2418
  self.writeIdentifiable(child_element, pdu)
2406
2419
  self.writeIPdu(child_element, pdu)
@@ -2409,23 +2422,28 @@ class ARXMLWriter(AbstractARXMLWriter):
2409
2422
  self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
2410
2423
 
2411
2424
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2412
- self.logger.debug("DcmIPdu %s" % pdu.getShortName())
2425
+ self.logger.debug("Write DcmIPdu <%s>" % pdu.getShortName())
2413
2426
  child_element = ET.SubElement(element, "DCM-I-PDU")
2414
2427
  self.writeIdentifiable(child_element, pdu)
2415
2428
  self.writeIPdu(child_element, pdu)
2416
2429
  self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2417
2430
 
2418
2431
  def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2419
- self.logger.debug("SecuredIPdu %s" % pdu.getShortName())
2432
+ self.logger.debug("Write SecuredIPdu <%s>" % pdu.getShortName())
2420
2433
  child_element = ET.SubElement(element, "SECURED-I-PDU")
2421
2434
  self.writeIdentifiable(child_element, pdu)
2422
2435
  self.writeIPdu(child_element, pdu)
2423
2436
 
2424
2437
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2425
- self.logger.debug("CanTpConfig %s" % config.getShortName())
2438
+ self.logger.debug("Write CanTpConfig <%s>" % config.getShortName())
2426
2439
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2427
2440
  self.writeIdentifiable(child_element, config)
2428
2441
 
2442
+ def writeLinTpConfig(self, element: ET.Element, config: LinTpConfig):
2443
+ self.logger.debug("Write LinTpConfig <%s>" % config.getShortName())
2444
+ child_element = ET.SubElement(element, "LIN-TP-CONFIG")
2445
+ self.writeIdentifiable(child_element, config)
2446
+
2429
2447
  def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2430
2448
  ref_list = triggering.getFramePortRefs()
2431
2449
  if len(ref_list) > 0:
@@ -2666,7 +2684,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2666
2684
  def writeSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
2667
2685
  if bundle is not None:
2668
2686
  child_element = ET.SubElement(element, "SOCKET-CONNECTION-BUNDLE")
2669
- self.setReferable(child_element, bundle)
2687
+ self.writeReferrable(child_element, bundle)
2670
2688
  self.writeSocketConnectionBundleConnections(child_element, bundle)
2671
2689
  self.setChildElementOptionalRefType(child_element, "SERVER-PORT-REF", bundle.getServerPortRef())
2672
2690
 
@@ -2750,12 +2768,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2750
2768
  self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
2751
2769
 
2752
2770
  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())
2771
+ if group is not None:
2772
+ child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUP")
2773
+ self.writeIdentifiable(child_element, group)
2774
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", group.getApplicationEndpointRef())
2775
+ self.setChildElementOptionalPositiveInteger(child_element, "EVENT-GROUP-IDENTIFIER", group.getEventGroupIdentifier())
2776
+ self.writeConsumedEventGroupRoutingGroupRefs(child_element, group)
2777
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", group.getSdClientConfig())
2759
2778
 
2760
2779
  def writeConsumedServiceInstanceConsumedEventGroups(self, element: ET.Element, instance: ConsumedServiceInstance):
2761
2780
  groups = instance.getConsumedEventGroups()
@@ -2768,11 +2787,12 @@ class ARXMLWriter(AbstractARXMLWriter):
2768
2787
  self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
2769
2788
 
2770
2789
  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())
2790
+ if instance is not None:
2791
+ child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCE")
2792
+ self.writeIdentifiable(child_element, instance)
2793
+ self.writeConsumedServiceInstanceConsumedEventGroups(child_element, instance)
2794
+ self.setChildElementOptionalRefType(child_element, "PROVIDED-SERVICE-INSTANCE-REF", instance.getProvidedServiceInstanceRef())
2795
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", instance.getSdClientConfig())
2776
2796
 
2777
2797
  def writeSocketAddressApplicationEndpointConsumedServiceInstances(self, element: ET.Element, end_point: ApplicationEndpoint):
2778
2798
  instances = end_point.getConsumedServiceInstances()
@@ -2784,6 +2804,74 @@ class ARXMLWriter(AbstractARXMLWriter):
2784
2804
  else:
2785
2805
  self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2786
2806
 
2807
+ def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
2808
+ if config is not None:
2809
+ child_element = ET.SubElement(element, key)
2810
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE", config.getInitialDelayMaxValue())
2811
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE", config.getInitialDelayMinValue())
2812
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY", config.getInitialRepetitionsBaseDelay())
2813
+ self.setChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX", config.getInitialRepetitionsMax())
2814
+
2815
+ def setSdServerConfig(self, element: ET.Element, key: str, config: SdServerConfig):
2816
+ if config is not None:
2817
+ child_element = ET.SubElement(element, key)
2818
+ self.setInitialSdDelayConfig(child_element, "INITIAL-OFFER-BEHAVIOR", config.getInitialOfferBehavior())
2819
+ self.setChildElementOptionalTimeValue(child_element, "OFFER-CYCLIC-DELAY", config.getOfferCyclicDelay())
2820
+ self.setRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY", config.getRequestResponseDelay())
2821
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MAJOR-VERSION", config.getServerServiceMajorVersion())
2822
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MINOR-VERSION", config.getServerServiceMinorVersion())
2823
+ self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
2824
+
2825
+ def writeEventHandler(self, element: ET.Element, handler: EventHandler):
2826
+ if handler is not None:
2827
+ child_element = ET.SubElement(element, "EVENT-HANDLER")
2828
+ self.writeIdentifiable(child_element, handler)
2829
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", handler.getApplicationEndpointRef())
2830
+
2831
+ refs = handler.getConsumedEventGroupRefs()
2832
+ if len(refs) > 0:
2833
+ refs_tag = ET.SubElement(child_element, "CONSUMED-EVENT-GROUP-REFS")
2834
+ for ref in refs:
2835
+ self.setChildElementOptionalRefType(refs_tag, "CONSUMED-EVENT-GROUP-REF", ref)
2836
+
2837
+ self.setChildElementOptionalPositiveInteger(child_element, "MULTICAST-THRESHOLD", handler.getMulticastThreshold())
2838
+
2839
+ refs = handler.getRoutingGroupRefs()
2840
+ if len(refs) > 0:
2841
+ refs_tag = ET.SubElement(child_element, "ROUTING-GROUP-REFS")
2842
+ for ref in refs:
2843
+ self.setChildElementOptionalRefType(refs_tag, "ROUTING-GROUP-REF", ref)
2844
+ self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", handler.getSdServerConfig())
2845
+
2846
+ def writeProvidedServiceInstanceEventHandlers(self, element: ET.Element, instance: ProvidedServiceInstance):
2847
+ handlers = instance.getEventHandlers()
2848
+ if len(handlers) > 0:
2849
+ child_element = ET.SubElement(element, "EVENT-HANDLERS")
2850
+ for handler in handlers:
2851
+ if isinstance(handler, EventHandler):
2852
+ self.writeEventHandler(child_element, handler)
2853
+ else:
2854
+ self.notImplemented("Unsupported Event Handler <%s>" % type(handler))
2855
+
2856
+ def writeProvidedServiceInstance(self, element: ET.Element, instance: ProvidedServiceInstance):
2857
+ if instance is not None:
2858
+ child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCE")
2859
+ self.writeIdentifiable(child_element, instance)
2860
+ self.writeProvidedServiceInstanceEventHandlers(child_element, instance)
2861
+ self.setChildElementOptionalPositiveInteger(child_element, "INSTANCE-IDENTIFIER", instance.getInstanceIdentifier())
2862
+ self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", instance.getSdServerConfig())
2863
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVICE-IDENTIFIER", instance.getServiceIdentifier())
2864
+
2865
+ def writeSocketAddressApplicationEndpointProvidedServiceInstance(self, element: ET.Element, end_point: ApplicationEndpoint):
2866
+ instances = end_point.getProvidedServiceInstances()
2867
+ if len(instances) > 0:
2868
+ child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCES")
2869
+ for instance in instances:
2870
+ if isinstance(instance, ProvidedServiceInstance):
2871
+ self.writeProvidedServiceInstance(child_element, instance)
2872
+ else:
2873
+ self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2874
+
2787
2875
  def writeSocketAddressApplicationEndpoint(self, element: ET.Element, address: SocketAddress):
2788
2876
  end_point = address.getApplicationEndpoint()
2789
2877
  if end_point is not None:
@@ -2792,6 +2880,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2792
2880
  self.writeSocketAddressApplicationEndpointConsumedServiceInstances(child_element, end_point)
2793
2881
  self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", end_point.getNetworkEndpointRef())
2794
2882
  self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
2883
+ self.writeSocketAddressApplicationEndpointProvidedServiceInstance(child_element, end_point)
2795
2884
  self.writeTransportProtocolConfiguration(child_element, end_point.getTpConfiguration())
2796
2885
 
2797
2886
  def writeSocketAddressMulticastConnectorRefs(self, element: ET.Element, address: SocketAddress):
@@ -2891,14 +2980,31 @@ class ARXMLWriter(AbstractARXMLWriter):
2891
2980
  self.writeCommunicationCluster(child_element, cluster)
2892
2981
  self.writeAbstractCanCluster(child_element, cluster)
2893
2982
 
2983
+ def writeMacMulticastGroup(self, element: ET.Element, group: MacMulticastGroup):
2984
+ if group is not None:
2985
+ child_element = ET.SubElement(element, "MAC-MULTICAST-GROUP")
2986
+ self.writeIdentifiable(child_element, group)
2987
+ self.setChildElementOptionalLiteral(child_element, "MAC-MULTICAST-ADDRESS", group.getMacMulticastAddress())
2988
+
2989
+ def writeEthernetClusterMacMulticastGroups(self, element: ET.Element, cluster: EthernetCluster):
2990
+ groups = cluster.getMacMulticastGroups()
2991
+ if len(groups) > 0:
2992
+ child_element = ET.SubElement(element, "MAC-MULTICAST-GROUPS")
2993
+ for group in groups:
2994
+ if isinstance(group, MacMulticastGroup):
2995
+ self.writeMacMulticastGroup(child_element, group)
2996
+ else:
2997
+ self.notImplemented("Unsupported assigned data type <%s>" % type(group))
2998
+
2894
2999
  def writeEthernetCluster(self, element: ET.Element, cluster: EthernetCluster):
2895
3000
  self.logger.debug("Set EthernetCluster %s" % cluster.getShortName())
2896
3001
  child_element = ET.SubElement(element, "ETHERNET-CLUSTER")
2897
- self.setARElement(child_element, cluster)
3002
+ self.writeARElement(child_element, cluster)
2898
3003
 
2899
3004
  child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-VARIANTS")
2900
3005
  child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-CONDITIONAL")
2901
3006
  self.writeCommunicationCluster(child_element, cluster)
3007
+ self.writeEthernetClusterMacMulticastGroups(child_element, cluster)
2902
3008
 
2903
3009
  def writeCanFrame(self, element: ET.Element, frame: CanFrame):
2904
3010
  self.logger.debug("Write CanFrame %s" % frame.getShortName())
@@ -2916,10 +3022,14 @@ class ARXMLWriter(AbstractARXMLWriter):
2916
3022
  def writeIPduPort(self, element: ET.Element, port: IPduPort):
2917
3023
  child_element = ET.SubElement(element, "I-PDU-PORT")
2918
3024
  self.writeCommConnectorPort(child_element, port)
3025
+ self.setChildElementOptionalPositiveInteger(child_element, "KEY-ID", port.getKeyId())
3026
+ self.setChildElementOptionalBooleanValue(child_element, "RX-SECURITY-VERIFICATION", port.getRxSecurityVerification())
3027
+ self.setChildElementOptionalBooleanValue(child_element, "USE-AUTH-DATA-FRESHNESS", port.getUseAuthDataFreshness())
2919
3028
 
2920
3029
  def writeISignalPort(self, element: ET.Element, port: ISignalPort):
2921
3030
  child_element = ET.SubElement(element, "I-SIGNAL-PORT")
2922
3031
  self.writeCommConnectorPort(child_element, port)
3032
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT", port.getTimeout())
2923
3033
 
2924
3034
  def writeCommunicationConnectorEcuCommPortInstances(self, element: ET.Element, connector: CommunicationConnector):
2925
3035
  self.logger.debug("write EcuCommPortInstances of CommunicationConnector %s" % connector.getShortName())
@@ -2934,17 +3044,156 @@ class ARXMLWriter(AbstractARXMLWriter):
2934
3044
  elif isinstance(port, ISignalPort):
2935
3045
  self.writeISignalPort(instances_tag, port)
2936
3046
  else:
2937
- self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
3047
+ self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
3048
+
3049
+ def writeCommunicationController(self, element: ET.Element, controller: CommunicationController):
3050
+ self.setChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED", controller.getWakeUpByControllerSupported())
3051
+
3052
+ def setCanControllerFdConfiguration(self, element: ET.Element, key: str, configuration: CanControllerFdConfiguration):
3053
+ if configuration is not None:
3054
+ child_element = ET.SubElement(element, key)
3055
+ #TODO: need to implemented
3056
+
3057
+ def setCanControllerFdConfigurationRequirements(self, element: ET.Element, key: str, requirements: CanControllerFdConfigurationRequirements):
3058
+ if requirements is not None:
3059
+ child_element = ET.SubElement(element, key)
3060
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3061
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3062
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3063
+ self.setChildElementOptionalTimeValue(child_element, "MAX-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMaxTrcvDelayCompensationOffset())
3064
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3065
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3066
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3067
+ self.setChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMinTrcvDelayCompensationOffset())
3068
+ self.setChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH", requirements.getTxBitRateSwitch())
3069
+
3070
+ def writeAbstractCanCommunicationControllerAttributes(self, element: ET.Element, attributes: AbstractCanCommunicationControllerAttributes):
3071
+ self.setCanControllerFdConfiguration(element, "CAN-CONTROLLER-FD-CONFIGURATION", attributes.getCanControllerFdAttributes())
3072
+ self.setCanControllerFdConfigurationRequirements(element, "CAN-CONTROLLER-FD-REQUIREMENTS", attributes.getCanControllerFdRequirements())
3073
+
3074
+ def writeCanControllerConfigurationRequirements(self, element: ET.Element, requirements: CanControllerConfigurationRequirements):
3075
+ if requirements is not None:
3076
+ child_element = ET.SubElement(element, "CAN-CONTROLLER-CONFIGURATION-REQUIREMENTS")
3077
+ self.writeAbstractCanCommunicationControllerAttributes(child_element, requirements)
3078
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3079
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3080
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3081
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3082
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3083
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3084
+
3085
+ def writeAbstractCanCommunicationControllerCanControllerAttributes(self, element: ET.SubElement, controller: AbstractCanCommunicationController):
3086
+ attributes = controller.getCanControllerAttributes()
3087
+ if attributes is not None:
3088
+ child_element = ET.SubElement(element, "CAN-CONTROLLER-ATTRIBUTES")
3089
+ if isinstance(attributes, CanControllerConfigurationRequirements):
3090
+ self.writeCanControllerConfigurationRequirements(child_element, attributes)
3091
+ else:
3092
+ self.notImplemented("Unsupported CanControllerAttributes <%s>" % type(attributes))
3093
+
3094
+ def writeAbstractCanCommunicationController(self, element: ET.Element, controller: AbstractCanCommunicationController):
3095
+ self.writeCommunicationController(element, controller)
3096
+ self.writeAbstractCanCommunicationControllerCanControllerAttributes(element, controller)
2938
3097
 
2939
3098
  def writeCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
2940
3099
  child_element = ET.SubElement(element, "CAN-COMMUNICATION-CONTROLLER")
2941
3100
  self.logger.debug("Write CanCommunicationController %s" % controller.getShortName())
2942
3101
  self.writeIdentifiable(child_element, controller)
3102
+ variants_tag = ET.SubElement(child_element, "CAN-COMMUNICATION-CONTROLLER-VARIANTS")
3103
+ cond_tag = ET.SubElement(variants_tag, "CAN-COMMUNICATION-CONTROLLER-CONDITIONAL")
3104
+ self.writeAbstractCanCommunicationController(cond_tag, controller)
3105
+
3106
+ def writeCouplingPortSchedulerCouplingPortStructuralElement(self, element: ET.Element, item: CouplingPortStructuralElement):
3107
+ self.writeIdentifiable(element, item)
3108
+
3109
+ def writeCouplingPortFifo(self, element: ET.Element, fifo: CouplingPortFifo):
3110
+ if fifo is not None:
3111
+ child_element = ET.SubElement(element, "COUPLING-PORT-FIFO")
3112
+ self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, fifo)
3113
+
3114
+ def writeCouplingPortScheduler(self, element: ET.Element, scheduler: CouplingPortScheduler):
3115
+ if scheduler is not None:
3116
+ child_element = ET.SubElement(element, "COUPLING-PORT-SCHEDULER")
3117
+ self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, scheduler)
3118
+ self.setChildElementOptionalLiteral(child_element, "PORT-SCHEDULER", scheduler.getPortScheduler())
3119
+
3120
+ def writeCouplingPortDetailsCouplingPortStructuralElements(self, element: ET.Element, details: CouplingPortDetails):
3121
+ items = details.getCouplingPortStructuralElements()
3122
+ if len(items) > 0:
3123
+ child_element = ET.SubElement(element, "COUPLING-PORT-STRUCTURAL-ELEMENTS")
3124
+ for item in items:
3125
+ if isinstance(item, CouplingPortFifo):
3126
+ self.writeCouplingPortFifo(child_element, item)
3127
+ elif isinstance(item, CouplingPortScheduler):
3128
+ self.writeCouplingPortScheduler(child_element, item)
3129
+ else:
3130
+ self.notImplemented("Unsupported CouplingPortStructuralElement <%s>" % type(item))
3131
+
3132
+ def writeEthernetPriorityRegeneration(self, element: ET.Element, regeneration: EthernetPriorityRegeneration):
3133
+ if regeneration is not None:
3134
+ child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATION")
3135
+ self.writeReferrable(child_element, regeneration)
3136
+ self.setChildElementOptionalPositiveInteger(child_element, "INGRESS-PRIORITY", regeneration.getIngressPriority())
3137
+ self.setChildElementOptionalPositiveInteger(child_element, "REGENERATED-PRIORITY", regeneration.getRegeneratedPriority())
3138
+
3139
+ def writeCouplingPortDetailsEthernetPriorityRegenerations(self, element: ET.Element, details: CouplingPortDetails):
3140
+ regenerations = details.getEthernetPriorityRegenerations()
3141
+ if len(regenerations) > 0:
3142
+ child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATIONS")
3143
+ for regeneration in regenerations:
3144
+ if isinstance(regeneration, EthernetPriorityRegeneration):
3145
+ self.writeEthernetPriorityRegeneration(child_element, regeneration)
3146
+ else:
3147
+ self.notImplemented("Unsupported EthernetPriorityRegeneration <%s>" % type(regeneration))
3148
+
3149
+ def setCouplingPortDetails(self, element: ET.Element, key: str, details: CouplingPortDetails):
3150
+ if details is not None:
3151
+ child_element = ET.SubElement(element, key)
3152
+ self.writeCouplingPortDetailsCouplingPortStructuralElements(child_element, details)
3153
+ self.writeCouplingPortDetailsEthernetPriorityRegenerations(child_element, details)
3154
+ self.setChildElementOptionalRefType(child_element, "LAST-EGRESS-SCHEDULER-REF", details.getLastEgressSchedulerRef())
3155
+
3156
+ def writeVlanMembership(self, element: ET.Element, membership: VlanMembership):
3157
+ if membership is not None:
3158
+ child_element = ET.SubElement(element, "VLAN-MEMBERSHIP")
3159
+ self.setChildElementOptionalLiteral(child_element, "SEND-ACTIVITY", membership.getSendActivity())
3160
+ self.setChildElementOptionalRefType(child_element, "VLAN-REF", membership.getVlanRef())
3161
+
3162
+ def writeCouplingPortVlanMemberships(self, element: ET.Element, port: CouplingPort):
3163
+ memberships = port.getVlanMemberships()
3164
+ if len(memberships) > 0:
3165
+ child_element = ET.SubElement(element, "VLAN-MEMBERSHIPS")
3166
+ for membership in memberships:
3167
+ if isinstance(membership, VlanMembership):
3168
+ self.writeVlanMembership(child_element, membership)
3169
+ else:
3170
+ self.notImplemented("Unsupported VlanMembership <%s>" % type(membership))
3171
+
3172
+ def writeCouplingPort(self, element: ET.Element, port: CouplingPort):
3173
+ child_element = ET.SubElement(element, "COUPLING-PORT")
3174
+ self.writeIdentifiable(child_element, port)
3175
+ self.setCouplingPortDetails(child_element, "COUPLING-PORT-DETAILS", port.getCouplingPortDetails())
3176
+ self.setChildElementOptionalLiteral(child_element, "MAC-LAYER-TYPE", port.getMacAddressVlanAssignments())
3177
+ self.writeCouplingPortVlanMemberships(child_element, port)
3178
+
3179
+ def writeEthernetCommunicationControllerCouplingPorts(self, element: ET.Element, controller: EthernetCommunicationController):
3180
+ ports = controller.getCouplingPorts()
3181
+ if len(ports) > 0:
3182
+ child_element = ET.SubElement(element, "COUPLING-PORTS")
3183
+ for port in ports:
3184
+ if isinstance(port, CouplingPort):
3185
+ self.writeCouplingPort(child_element, port)
3186
+ else:
3187
+ self.notImplemented("Unsupported Coupling Port <%s>" % type(port))
2943
3188
 
2944
3189
  def writeEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
2945
3190
  child_element = ET.SubElement(element, "ETHERNET-COMMUNICATION-CONTROLLER")
2946
3191
  self.logger.debug("Write EthernetCommunicationController %s" % controller.getShortName())
2947
3192
  self.writeIdentifiable(child_element, controller)
3193
+ variants_tag = ET.SubElement(child_element, "ETHERNET-COMMUNICATION-CONTROLLER-VARIANTS")
3194
+ cond_tag = ET.SubElement(variants_tag, "ETHERNET-COMMUNICATION-CONTROLLER-CONDITIONAL")
3195
+ self.writeCommunicationController(cond_tag, controller)
3196
+ self.writeEthernetCommunicationControllerCouplingPorts(cond_tag, controller)
2948
3197
 
2949
3198
  def writeEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
2950
3199
  controllers = instance.getCommControllers()
@@ -2964,6 +3213,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2964
3213
  self.writeIdentifiable(element, connector)
2965
3214
  self.setChildElementOptionalRefType(element, "COMM-CONTROLLER-REF", connector.getCommControllerRef())
2966
3215
  self.writeCommunicationConnectorEcuCommPortInstances(element, connector)
3216
+ self.setChildElementOptionalLiteral(element, "PNC-GATEWAY-TYPE", connector.getPncGatewayType())
2967
3217
 
2968
3218
  def writeCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2969
3219
  self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
@@ -2972,6 +3222,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2972
3222
  def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
2973
3223
  self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
2974
3224
  self.writeCommunicationConnector(element, connector)
3225
+ self.setChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT", connector.getMaximumTransmissionUnit())
2975
3226
 
2976
3227
  def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
2977
3228
  self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
@@ -2994,10 +3245,18 @@ class ARXMLWriter(AbstractARXMLWriter):
2994
3245
  else:
2995
3246
  self._raiseError("Unsupported Communication connector <%s>" % type(connector))
2996
3247
 
3248
+ def writeEcuInstanceAssociatedComIPduGroupRefs(self, element: ET.Element, instance: EcuInstance):
3249
+ refs = instance.getAssociatedComIPduGroupRefs()
3250
+ if len(refs) > 0:
3251
+ child_element = ET.SubElement(element, "ASSOCIATED-COM-I-PDU-GROUP-REFS")
3252
+ for ref in refs:
3253
+ self.setChildElementOptionalRefType(child_element, "ASSOCIATED-COM-I-PDU-GROUP-REF", ref)
3254
+
2997
3255
  def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
2998
3256
  self.logger.debug("EcuInstance %s" % instance.getShortName())
2999
3257
  child_element = ET.SubElement(element, "ECU-INSTANCE")
3000
3258
  self.writeIdentifiable(child_element, instance)
3259
+ self.writeEcuInstanceAssociatedComIPduGroupRefs(child_element, instance)
3001
3260
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-GW-TIME-BASE", instance.getComConfigurationGwTimeBase())
3002
3261
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-RX-TIME-BASE", instance.getComConfigurationRxTimeBase())
3003
3262
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-TX-TIME-BASE", instance.getComConfigurationTxTimeBase())
@@ -3086,20 +3345,21 @@ class ARXMLWriter(AbstractARXMLWriter):
3086
3345
  self.writeIdentifiable(child_element, prototype)
3087
3346
  self.setChildElementOptionalRefType(child_element, "FLAT-MAP-REF", prototype.getFlatMapRef())
3088
3347
  self.setChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF", prototype.getSoftwareCompositionTRef())
3348
+
3349
+ def writeSystemFibexElementRefs(self, element: ET.Element, system: System):
3350
+ refs = system.getFibexElementRefs()
3351
+ if len(refs) > 0:
3352
+ fibex_elements_tag = ET.SubElement(element, "FIBEX-ELEMENTS")
3353
+ for ref in refs:
3354
+ child_element = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
3355
+ self.setChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF", ref)
3089
3356
 
3090
3357
  def writeSystem(self, element: ET.Element, system: System):
3091
3358
  self.logger.debug("Write System %s" % system.getShortName())
3092
3359
  child_element = ET.SubElement(element, "SYSTEM")
3093
- self.setARElement(child_element, system)
3094
-
3360
+ self.writeARElement(child_element, system)
3095
3361
  self.setChildElementOptionalLiteral(child_element, "ECU-EXTRACT-VERSION", system.getEcuExtractVersion())
3096
- refs = system.getFibexElementRefs()
3097
- if len(refs) > 0:
3098
- fibex_elements_tag = ET.SubElement(child_element, "FIBEX-ELEMENTS")
3099
- for ref in refs:
3100
- fibex_element_ref_conditional_tag = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
3101
- self.setChildElementOptionalRefType(fibex_element_ref_conditional_tag, "FIBEX-ELEMENT-REF", ref)
3102
-
3362
+ self.writeSystemFibexElementRefs(child_element, system)
3103
3363
  self.writeSystemMappings(child_element, system)
3104
3364
  self.writeRootSwCompositionPrototype(child_element, system)
3105
3365
  self.setChildElementOptionalRevisionLabelString(child_element, "SYSTEM-VERSION", system.getSystemVersion())
@@ -3107,7 +3367,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3107
3367
  def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
3108
3368
  self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
3109
3369
  child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
3110
- self.setARElement(child_element, dimension)
3370
+ self.writeARElement(child_element, dimension)
3111
3371
  self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3112
3372
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
3113
3373
  self.setChildElementOptionalNumericalValue(child_element, "TIME-EXP", dimension.getTimeExp())
@@ -3132,7 +3392,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3132
3392
  def writeFlatMap(self, element: ET.Element, map: FlatMap):
3133
3393
  self.logger.debug("Set FlatMap %s" % map.getShortName())
3134
3394
  child_element = ET.SubElement(element, "FLAT-MAP")
3135
- self.setARElement(child_element, map)
3395
+ self.writeARElement(child_element, map)
3136
3396
  self.writeFlatMapInstances(child_element, map)
3137
3397
 
3138
3398
  def setDataPrototypeMapping(self, element: ET.Element, mapping: DataPrototypeMapping):
@@ -3165,7 +3425,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3165
3425
  def writePortInterfaceMappingSet(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
3166
3426
  self.logger.debug("Set PortInterfaceMappingSet %s" % mapping_set.getShortName())
3167
3427
  child_element = ET.SubElement(element, "PORT-INTERFACE-MAPPING-SET")
3168
- self.setARElement(child_element, mapping_set)
3428
+ self.writeARElement(child_element, mapping_set)
3169
3429
  self.writePortInterfaceMappings(child_element, mapping_set)
3170
3430
 
3171
3431
  def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
@@ -3173,14 +3433,28 @@ class ARXMLWriter(AbstractARXMLWriter):
3173
3433
  mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
3174
3434
  for mapping in mappings:
3175
3435
  child_element = ET.SubElement(mappings_tag, "I-SIGNAL-MAPPING")
3176
- self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.sourceSignalRef)
3177
- self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.targetSignalRef)
3436
+ self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.getSourceSignalRef())
3437
+ self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.getTargetSignalRef())
3438
+
3439
+ def setTargetIPduRef(self, element: ET.Element, key: str, i_pdu_ref: TargetIPduRef):
3440
+ if i_pdu_ref is not None:
3441
+ child_element = ET.SubElement(element, key)
3442
+ self.setChildElementOptionalRefType(child_element, "TARGET-I-PDU-REF", i_pdu_ref.getTargetIPdu())
3443
+
3444
+ def setIPduMappings(self, element: ET.Element, mappings: List[IPduMapping]):
3445
+ if len(mappings) > 0:
3446
+ mappings_tag = ET.SubElement(element, "I-PDU-MAPPINGS")
3447
+ for mapping in mappings:
3448
+ child_element = ET.SubElement(mappings_tag, "I-PDU-MAPPING")
3449
+ self.setChildElementOptionalRefType(child_element, "SOURCE-I-PDU-REF", mapping.getSourceIpduRef())
3450
+ self.setTargetIPduRef(child_element, "TARGET-I-PDU", mapping.getTargetIPdu())
3178
3451
 
3179
3452
  def writeGateway(self, element: ET.Element, gateway: Gateway):
3180
3453
  self.logger.debug("Gateway %s" % gateway.getShortName())
3181
3454
  child_element = ET.SubElement(element, "GATEWAY")
3182
3455
  self.writeIdentifiable(child_element, gateway)
3183
3456
  self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
3457
+ self.setIPduMappings(child_element, gateway.getIPduMappings())
3184
3458
  self.setISignalMappings(child_element, gateway.getSignalMappings())
3185
3459
 
3186
3460
  def writeISignal(self, element: ET.Element, signal: ISignal):
@@ -3371,10 +3645,20 @@ class ARXMLWriter(AbstractARXMLWriter):
3371
3645
  self.setChildElementOptionalRefType(child_element, "PHYSICAL-REQUEST-REF", connection.getPhysicalRequestRef())
3372
3646
  self.setChildElementOptionalRefType(child_element, "RESPONSE-REF", connection.getResponseOnEventRef())
3373
3647
 
3648
+ def writeDiagnosticServiceTableDiagnosticConnectionRefs(self, element: ET.Element, table: DiagnosticServiceTable):
3649
+ refs = table.getDiagnosticConnectionRefs()
3650
+ if len(refs) > 0:
3651
+ refs_tag = ET.SubElement(element, "DIAGNOSTIC-CONNECTIONS")
3652
+ for ref in refs:
3653
+ child_element = ET.SubElement(refs_tag, "DIAGNOSTIC-CONNECTION-REF-CONDITIONAL")
3654
+ self.setChildElementOptionalRefType(child_element, "DIAGNOSTIC-CONNECTION-REF", ref)
3655
+
3374
3656
  def writeDiagnosticServiceTable(self, element: ET.Element, table: DiagnosticServiceTable):
3375
3657
  self.logger.debug("Write DiagnosticServiceTable %s" % table.getShortName())
3376
3658
  child_element = ET.SubElement(element, "DIAGNOSTIC-SERVICE-TABLE")
3377
3659
  self.writeIdentifiable(child_element, table)
3660
+ self.writeDiagnosticServiceTableDiagnosticConnectionRefs(child_element, table)
3661
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", table.getEcuInstanceRef())
3378
3662
 
3379
3663
  def writeMultiplexedIPdu(self, element: ET.Element, i_pdu: MultiplexedIPdu):
3380
3664
  self.logger.debug("Write MultiplexedIPdu %s" % i_pdu.getShortName())
@@ -3416,10 +3700,19 @@ class ARXMLWriter(AbstractARXMLWriter):
3416
3700
  child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
3417
3701
  self.writeIdentifiable(child_element, config)
3418
3702
 
3419
- def writeLinMaster(self, element: ET.Element, master: LinMaster):
3420
- self.logger.debug("Write LinMaster %s" % master.getShortName())
3703
+ def writeLinCommunicationController(self, element: ET.Element, controller: LinCommunicationController):
3704
+ self.writeCommunicationController(element, controller)
3705
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", controller.getProtocolVersion())
3706
+
3707
+ def writeLinMaster(self, element: ET.Element, controller: LinMaster):
3708
+ self.logger.debug("Write LinMaster %s" % controller.getShortName())
3421
3709
  child_element = ET.SubElement(element, "LIN-MASTER")
3422
- self.writeIdentifiable(child_element, master)
3710
+ self.writeIdentifiable(child_element, controller)
3711
+ variants_tag = ET.SubElement(child_element, "LIN-MASTER-VARIANTS")
3712
+ cond_tag = ET.SubElement(variants_tag, "LIN-MASTER-CONDITIONAL")
3713
+ self.writeLinCommunicationController(cond_tag, controller)
3714
+ self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE", controller.getTimeBase())
3715
+ self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE-JITTER", controller.getTimeBaseJitter())
3423
3716
 
3424
3717
  def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
3425
3718
  mappings = parent.getISignalToPduMappings()
@@ -3572,6 +3865,8 @@ class ARXMLWriter(AbstractARXMLWriter):
3572
3865
  self.writeSecuredIPdu(element, ar_element)
3573
3866
  elif isinstance(ar_element, CanTpConfig):
3574
3867
  self.writeCanTpConfig(element, ar_element)
3868
+ elif isinstance(ar_element, LinTpConfig):
3869
+ self.writeLinTpConfig(element, ar_element)
3575
3870
  elif isinstance(ar_element, LinCluster):
3576
3871
  self.writeLinCluster(element, ar_element)
3577
3872
  elif isinstance(ar_element, CanCluster):