armodel 1.7.5__py3-none-any.whl → 1.7.7__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 (48) hide show
  1. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +41 -2
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +47 -6
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +17 -7
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +2 -2
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +4 -0
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +8 -2
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +9 -3
  8. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +30 -1
  9. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
  10. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +53 -0
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +2 -2
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +19 -5
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/ECUResourceMapping.py +44 -0
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +165 -4
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +409 -17
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +356 -8
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +2 -4
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +76 -10
  23. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +483 -54
  24. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +45 -23
  25. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +10 -0
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +633 -5
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +22 -11
  30. armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
  31. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
  32. armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
  33. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
  34. armodel/models/__init__.py +4 -0
  35. armodel/parser/abstract_arxml_parser.py +8 -5
  36. armodel/parser/arxml_parser.py +1229 -572
  37. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
  38. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  39. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
  40. armodel/tests/test_armodel/parser/test_sw_components.py +22 -1
  41. armodel/writer/abstract_arxml_writer.py +7 -6
  42. armodel/writer/arxml_writer.py +1037 -187
  43. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/METADATA +62 -3
  44. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/RECORD +48 -44
  45. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/LICENSE +0 -0
  46. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/WHEEL +0 -0
  47. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/entry_points.txt +0 -0
  48. {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,9 @@
1
1
  import xml.etree.cElementTree as ET
2
2
  from typing import List
3
3
 
4
+ from armodel.models.M2.AUTOSARTemplates.SystemTemplate.ECUResourceMapping import ECUMapping
5
+ from armodel.models.M2.AUTOSARTemplates.SystemTemplate.SWmapping import SwcToImplMapping
6
+
4
7
  from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
5
8
  from ..models.M2.MSR.AsamHdo.AdminData import AdminData
6
9
  from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
@@ -25,12 +28,12 @@ from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
25
28
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
26
29
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
27
30
  from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
28
- from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswEvent, BswInternalBehavior, BswInterruptEntity, BswModeSenderPolicy, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
31
+ from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswBackgroundEvent, BswCalledEntity, BswDataReceivedEvent, BswEvent, BswExternalTriggerOccurredEvent, BswInternalBehavior, BswInterruptEntity, BswModeSenderPolicy, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
29
32
  from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ConstantSpecification, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
30
33
  from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
31
34
  from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
32
35
  from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
33
- from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation
36
+ from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation, ImplementationProps
34
37
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
35
38
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef, ExecutionOrderConstraint
36
39
  from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
@@ -49,13 +52,13 @@ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPack
49
52
  from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral, Limit
50
53
 
51
54
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
52
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent, TimingEvent
55
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent, DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent, ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent, TimingEvent
53
56
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
54
57
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType
55
58
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
56
59
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
57
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
58
- from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype
60
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest, TransmissionAcknowledgementRequest
61
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype, SymbolProps
59
62
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
60
63
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument, SwcInternalBehavior, SynchronousServerCallPoint
61
64
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
@@ -78,23 +81,23 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import S
78
81
  from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping, System, SystemMapping
79
82
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
80
83
  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
84
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DynamicPart, DynamicPartAlternative, FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalToIPduMapping, ISignalTriggering, MultiplexedIPdu, MultiplexedPart, Pdu, PduTriggering, SecureCommunicationAuthenticationProps, SecureCommunicationFreshnessProps, SecureCommunicationProps, SecureCommunicationPropsSet, SecuredIPdu, SegmentPosition, StaticPart, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
82
85
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
83
86
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
84
87
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
85
88
  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
89
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo, CouplingPortScheduler, CouplingPortStructuralElement, EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, EthernetPriorityRegeneration, InitialSdDelayConfig, MacMulticastGroup, RequestResponseDelay, SdClientConfig, VlanMembership
87
90
  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
91
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, EventHandler, GenericTp, ProvidedServiceInstance, SdServerConfig, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
92
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
90
93
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
91
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
94
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController, AbstractCanCommunicationControllerAttributes, CanCommunicationConnector, CanCommunicationController, CanControllerConfigurationRequirements, CanControllerFdConfiguration, CanControllerFdConfigurationRequirements
92
95
  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
96
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, CommunicationController, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
97
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
95
98
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
96
- from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmNode
97
- from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig, DoIpTpConfig
99
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmEcu, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmEcu, UdpNmNode
100
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpAddress, CanTpChannel, CanTpConfig, CanTpConnection, CanTpEcu, CanTpNode, DoIpLogicAddress, DoIpTpConfig, DoIpTpConnection, LinTpConfig, LinTpConnection, LinTpNode, TpAddress, TpConfig, TpConnection
98
101
 
99
102
  from .abstract_arxml_writer import AbstractARXMLWriter
100
103
  class ARXMLWriter(AbstractARXMLWriter):
@@ -120,14 +123,26 @@ class ARXMLWriter(AbstractARXMLWriter):
120
123
  sd_tag.attrib['GID'] = sd.gid
121
124
  sd_tag.text = sd.value
122
125
 
123
- def setSdg(self, parent: ET.Element, sdg: Sdg):
126
+ def writeSdgCaption(self, element: ET.Element, sdg: Sdg):
127
+ caption = sdg.getSdgCaption()
128
+ if caption is not None:
129
+ child_element = ET.SubElement(element, "SDG-CAPTION")
130
+ self.writeMultilanguageReferrable(child_element, caption)
131
+
132
+ def writeSdgSdxRefs(self, element: ET.Element, sdg: Sdg):
133
+ for ref in sdg.getSdxRefs():
134
+ self.setChildElementOptionalRefType(element, "SDX-REF", ref)
135
+
136
+ def setSdg(self, element: ET.Element, sdg: Sdg):
124
137
  if sdg is not None:
125
- sdg_tag = ET.SubElement(parent, "SDG")
138
+ child_element = ET.SubElement(element, "SDG")
126
139
  if sdg.gid is not None and sdg.gid != "":
127
- sdg_tag.attrib['GID'] = sdg.gid
128
- self.writeSds(sdg_tag, sdg)
140
+ child_element.attrib['GID'] = sdg.gid
141
+ self.writeSdgCaption(child_element, sdg)
142
+ self.writeSds(child_element, sdg)
129
143
  for sdg_item in sdg.getSdgContentsTypes():
130
- self.setSdg(sdg_tag, sdg_item)
144
+ self.setSdg(child_element, sdg_item)
145
+ self.writeSdgSdxRefs(child_element, sdg)
131
146
 
132
147
  def writeSdgs(self, parent: ET.Element, admin_data: AdminData):
133
148
  sdgs = admin_data.getSdgs()
@@ -139,18 +154,18 @@ class ARXMLWriter(AbstractARXMLWriter):
139
154
  def setChildLimitElement(self, element: ET.Element, key: str, limit: Limit):
140
155
  if limit is not None:
141
156
  limit_tag = ET.SubElement(element, key)
142
- self.setARObjectAttributes(limit_tag, limit)
157
+ self.writeARObjectAttributes(limit_tag, limit)
143
158
  if limit.intervalType is not None:
144
159
  limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
145
160
  limit_tag.text = limit.value
146
161
 
147
- def setReferable(self, element: ET.Element, referrable: Referrable):
148
- self.setARObjectAttributes(element, referrable)
162
+ def writeReferrable(self, element: ET.Element, referrable: Referrable):
163
+ self.writeARObjectAttributes(element, referrable)
149
164
  self.setShortName(element, referrable.getShortName())
150
165
 
151
166
  def setLanguageSpecific(self, element: ET.Element, key: str, specific: LanguageSpecific):
152
167
  child_element = ET.SubElement(element, key)
153
- self.setARObjectAttributes(child_element, specific)
168
+ self.writeARObjectAttributes(child_element, specific)
154
169
  if specific.l is not None:
155
170
  child_element.attrib['L'] = specific.l
156
171
  child_element.text = specific.value
@@ -161,7 +176,7 @@ class ARXMLWriter(AbstractARXMLWriter):
161
176
  def setMultiLongName(self, element: ET.Element, key: str, long_name: MultilanguageLongName):
162
177
  if long_name is not None:
163
178
  child_element = ET.SubElement(element, key)
164
- self.setARObjectAttributes(child_element, long_name)
179
+ self.writeARObjectAttributes(child_element, long_name)
165
180
  for l4 in long_name.getL4s():
166
181
  self.setLLongName(child_element, l4)
167
182
 
@@ -171,12 +186,12 @@ class ARXMLWriter(AbstractARXMLWriter):
171
186
  def setMultiLanguageOverviewParagraph(self, element: ET.Element, key: str, paragraph: MultiLanguageOverviewParagraph):
172
187
  if paragraph is not None:
173
188
  child_element = ET.SubElement(element, key)
174
- self.setARObjectAttributes(child_element, paragraph)
189
+ self.writeARObjectAttributes(child_element, paragraph)
175
190
  for l2 in paragraph.getL2s():
176
191
  self.setLOverviewParagraph(child_element, l2)
177
192
 
178
- def setMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
179
- self.setReferable(element, referrable)
193
+ def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
194
+ self.writeReferrable(element, referrable)
180
195
  if referrable.longName is not None:
181
196
  self.setMultiLongName(element, "LONG-NAME", referrable.longName)
182
197
 
@@ -186,7 +201,7 @@ class ARXMLWriter(AbstractARXMLWriter):
186
201
  def setMultiLanguagePlainText(self, element: ET.Element, key: str, paragraph: MultiLanguagePlainText):
187
202
  if paragraph is not None:
188
203
  child_element = ET.SubElement(element, key)
189
- self.setARObjectAttributes(child_element, paragraph)
204
+ self.writeARObjectAttributes(child_element, paragraph)
190
205
  for l10 in paragraph.getL10s():
191
206
  self.setLPlainText(child_element, l10)
192
207
 
@@ -198,20 +213,20 @@ class ARXMLWriter(AbstractARXMLWriter):
198
213
  self.writeSdgs(child_element, admin_data)
199
214
 
200
215
  def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
201
- self.setMultilanguageReferrable(element, identifiable)
216
+ self.writeMultilanguageReferrable(element, identifiable)
202
217
  self.setAnnotations(element, identifiable.getAnnotations())
203
218
  self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
204
219
  self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
205
220
  self.setDocumentationBlock(element, "INTRODUCTION", identifiable.getIntroduction())
206
221
  self.setAdminData(element, identifiable.getAdminData())
207
222
 
208
- def setARElement(self, parent: ET.Element, ar_element: ARElement):
223
+ def writeARElement(self, parent: ET.Element, ar_element: ARElement):
209
224
  self.writeIdentifiable(parent, ar_element)
210
225
 
211
226
  def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
212
227
  if (acknowledge != None):
213
228
  child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
214
- self.setARObjectAttributes(child_element, acknowledge)
229
+ self.writeARObjectAttributes(child_element, acknowledge)
215
230
  if acknowledge.timeout != None:
216
231
  self.setChildElementOptionalFloatValue(child_element, "TIMEOUT", acknowledge.timeout)
217
232
 
@@ -229,25 +244,32 @@ class ARXMLWriter(AbstractARXMLWriter):
229
244
 
230
245
  def setNonqueuedSenderComSpec(self, element: ET.Element, com_spec: NonqueuedSenderComSpec):
231
246
  child_element = ET.SubElement(element, "NONQUEUED-SENDER-COM-SPEC")
232
- self.setARObjectAttributes(child_element, com_spec)
247
+ self.writeARObjectAttributes(child_element, com_spec)
233
248
  self.setSenderComSpec(child_element, com_spec)
234
249
  self.setValueSpecification(child_element, "INIT-VALUE", com_spec.getInitValue())
235
250
 
236
251
  def setServerComSpec(self, element: ET.Element, com_spec: ServerComSpec):
237
252
  child_element = ET.SubElement(element, "SERVER-COM-SPEC")
238
- self.setARObjectAttributes(child_element, com_spec)
253
+ self.writeARObjectAttributes(child_element, com_spec)
239
254
  self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
240
255
  self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
241
256
 
242
257
  def setQueuedSenderComSpec(self, element: ET.Element, com_spec: QueuedSenderComSpec):
243
258
  child_element = ET.SubElement(element, "QUEUED-SENDER-COM-SPEC")
244
- self.setARObjectAttributes(child_element, com_spec)
259
+ self.writeARObjectAttributes(child_element, com_spec)
245
260
  self.setSenderComSpec(child_element, com_spec)
246
261
 
262
+ def setModeSwitchedAckRequest(self, element: ET.Element, key: str, request: ModeSwitchedAckRequest):
263
+ if request is not None:
264
+ child_element = ET.SubElement(element, key)
265
+ self.writeARObjectAttributes(child_element, request)
266
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT", request.getTimeout())
267
+
247
268
  def setModeSwitchSenderComSpec(self, element: ET.Element, com_spec: ModeSwitchSenderComSpec):
248
269
  child_element = ET.SubElement(element, "MODE-SWITCH-SENDER-COM-SPEC")
249
- self.setARObjectAttributes(child_element, com_spec)
270
+ self.writeARObjectAttributes(child_element, com_spec)
250
271
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
272
+ self.setModeSwitchedAckRequest(child_element, "MODE-SWITCHED-ACK", com_spec.getModeSwitchedAck())
251
273
  self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.getQueueLength())
252
274
 
253
275
  def writePPortComSpec(self, com_specs_tag: ET.Element, com_spec: PPortComSpec):
@@ -291,7 +313,7 @@ class ARXMLWriter(AbstractARXMLWriter):
291
313
  def setSwValues(self, element: ET.Element, key: str, sw_values: SwValues):
292
314
  if sw_values is not None:
293
315
  child_element = ET.SubElement(element, key)
294
- self.setARObjectAttributes(child_element, sw_values)
316
+ self.writeARObjectAttributes(child_element, sw_values)
295
317
  for v in sw_values.getVs():
296
318
  self.setChildElementOptionalFloatValue(child_element, "V", v)
297
319
  self.setChildElementOptionalLiteral(child_element, "VT", sw_values.vt)
@@ -299,20 +321,20 @@ class ARXMLWriter(AbstractARXMLWriter):
299
321
  def setValueList(self, element: ET.Element, key: str, value_list: ValueList):
300
322
  if value_list is not None:
301
323
  child_element = ET.SubElement(element, key)
302
- self.setARObjectAttributes(child_element, value_list)
324
+ self.writeARObjectAttributes(child_element, value_list)
303
325
  self.setChildElementOptionalFloatValue(child_element, "V", value_list.v)
304
326
 
305
327
  def writeSwValueCont(self, element: ET.Element, cont: SwValueCont):
306
328
  if cont is not None:
307
329
  child_element = ET.SubElement(element, "SW-VALUE-CONT")
308
- self.setARObjectAttributes(child_element, cont)
330
+ self.writeARObjectAttributes(child_element, cont)
309
331
  self.setChildElementOptionalRefType(child_element, "UNIT-REF", cont.unitRef)
310
332
  self.setValueList(child_element, "SW-ARRAYSIZE", cont.swArraysize)
311
333
  self.setSwValues(child_element, "SW-VALUES-PHYS", cont.swValuesPhys)
312
334
 
313
335
  def writeValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
314
336
  if value_spec is not None:
315
- self.setARObjectAttributes(element, value_spec)
337
+ self.writeARObjectAttributes(element, value_spec)
316
338
  self.setChildElementOptionalLiteral(element, "SHORT-LABEL", value_spec.getShortLabel())
317
339
 
318
340
  def setApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
@@ -379,7 +401,7 @@ class ARXMLWriter(AbstractARXMLWriter):
379
401
 
380
402
  def writeNonqueuedReceiverComSpec(self, element: ET.Element, com_spec: NonqueuedReceiverComSpec):
381
403
  child_element = ET.SubElement(element, "NONQUEUED-RECEIVER-COM-SPEC")
382
- self.setARObjectAttributes(child_element, com_spec)
404
+ self.writeARObjectAttributes(child_element, com_spec)
383
405
  self.writeReceiverComSpec(child_element, com_spec)
384
406
  self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.getAliveTimeout())
385
407
  self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.getEnableUpdated())
@@ -390,27 +412,27 @@ class ARXMLWriter(AbstractARXMLWriter):
390
412
 
391
413
  def writeQueuedReceiverComSpec(self, element: ET.Element, com_spec: QueuedReceiverComSpec):
392
414
  child_element = ET.SubElement(element, "QUEUED-RECEIVER-COM-SPEC")
393
- self.setARObjectAttributes(child_element, com_spec)
415
+ self.writeARObjectAttributes(child_element, com_spec)
394
416
  self.writeReceiverComSpec(child_element, com_spec)
395
417
  self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queueLength)
396
418
 
397
419
  def writeClientComSpec(self, element: ET.Element, com_spec: ClientComSpec):
398
420
  self.logger.debug("writeClientComSpec")
399
421
  child_element = ET.SubElement(element, "CLIENT-COM-SPEC")
400
- self.setARObjectAttributes(child_element, com_spec)
422
+ self.writeARObjectAttributes(child_element, com_spec)
401
423
  self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.getOperationRef())
402
424
 
403
425
  def writeParameterRequireComSpec(self, element: ET.Element, com_spec: ParameterRequireComSpec):
404
426
  self.logger.debug("writeParameterRequireComSpec")
405
427
  child_element = ET.SubElement(element, "PARAMETER-REQUIRE-COM-SPEC")
406
- self.setARObjectAttributes(child_element, com_spec)
428
+ self.writeARObjectAttributes(child_element, com_spec)
407
429
  self.setChildElementOptionalRefType(child_element, "PARAMETER-REF", com_spec.getParameterRef())
408
430
  self.setValueSpecification(child_element, "INIT-VALUE", com_spec.getInitValue())
409
431
 
410
432
  def setModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
411
433
  self.logger.debug("writeModeSwitchReceiverComSpec")
412
434
  child_element = ET.SubElement(element, "MODE-SWITCH-RECEIVER-COM-SPEC")
413
- self.setARObjectAttributes(child_element, com_spec)
435
+ self.writeARObjectAttributes(child_element, com_spec)
414
436
  self.setChildElementOptionalBooleanValue(child_element, "ENHANCED-MODE-API", com_spec.getEnhancedModeApi())
415
437
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.getModeGroupRef())
416
438
  self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH", com_spec.getSupportsAsynchronousModeSwitch())
@@ -539,14 +561,14 @@ class ARXMLWriter(AbstractARXMLWriter):
539
561
  if sw_connector.getProviderIRef() is not None:
540
562
  provider_iref_tag = ET.SubElement(child_element, "PROVIDER-IREF")
541
563
  provider_iref = sw_connector.getProviderIRef()
542
- self.setARObjectAttributes(provider_iref_tag, provider_iref)
564
+ self.writeARObjectAttributes(provider_iref_tag, provider_iref)
543
565
  self.setChildElementOptionalRefType(provider_iref_tag, "CONTEXT-COMPONENT-REF", provider_iref.getContextComponentRef())
544
566
  self.setChildElementOptionalRefType(provider_iref_tag, "TARGET-P-PORT-REF", provider_iref.getTargetPPortRef())
545
567
 
546
568
  if sw_connector.getRequesterIRef() is not None:
547
569
  requester_iref_tag = ET.SubElement(child_element, "REQUESTER-IREF")
548
570
  requester_iref = sw_connector.getRequesterIRef()
549
- self.setARObjectAttributes(requester_iref_tag, requester_iref)
571
+ self.writeARObjectAttributes(requester_iref_tag, requester_iref)
550
572
  self.setChildElementOptionalRefType(requester_iref_tag, "CONTEXT-COMPONENT-REF", requester_iref.getContextComponentRef())
551
573
  self.setChildElementOptionalRefType(requester_iref_tag, "TARGET-R-PORT-REF", requester_iref.getTargetRPortRef())
552
574
 
@@ -615,7 +637,7 @@ class ARXMLWriter(AbstractARXMLWriter):
615
637
  def writeLParagraphs(self, element: ET.Element, paragraph: MultiLanguageParagraph):
616
638
  for l1 in paragraph.getL1s():
617
639
  l1_tag = ET.SubElement(element, "L-1")
618
- self.setARObjectAttributes(l1_tag, l1)
640
+ self.writeARObjectAttributes(l1_tag, l1)
619
641
  if l1.l is not None:
620
642
  l1_tag.attrib['L'] = l1.l
621
643
  l1_tag.text = l1.value
@@ -623,7 +645,7 @@ class ARXMLWriter(AbstractARXMLWriter):
623
645
  def setMultiLanguageParagraphs(self, element: ET.Element, key: str, paragraphs: List[MultiLanguageParagraph]):
624
646
  for paragraph in paragraphs:
625
647
  child_element = ET.SubElement(element, key)
626
- self.setARObjectAttributes(child_element, paragraph)
648
+ self.writeARObjectAttributes(child_element, paragraph)
627
649
  self.writeLParagraphs(child_element, paragraph)
628
650
  return paragraphs
629
651
 
@@ -639,7 +661,7 @@ class ARXMLWriter(AbstractARXMLWriter):
639
661
  def setDocumentationBlock(self, element: ET.Element, key: str, block: DocumentationBlock):
640
662
  if block is not None:
641
663
  child_element = ET.SubElement(element, key)
642
- self.setARObjectAttributes(child_element, block)
664
+ self.writeARObjectAttributes(child_element, block)
643
665
  self.setMultiLanguageParagraphs(child_element, "P", block.getPs())
644
666
  for list in block.getLists():
645
667
  self.setListElement(child_element, "LIST", list)
@@ -658,7 +680,7 @@ class ARXMLWriter(AbstractARXMLWriter):
658
680
 
659
681
  def setSwAxisIndividual(self, element: ET.Element, props: SwAxisIndividual):
660
682
  child_element = ET.SubElement(element, "SW-AXIS-INDIVIDUAL")
661
- self.setARObjectAttributes(child_element, props)
683
+ self.writeARObjectAttributes(child_element, props)
662
684
  self.setChildElementOptionalRefType(child_element, "INPUT-VARIABLE-TYPE-REF", props.getInputVariableTypeRef())
663
685
  self.setChildElementOptionalRefType(child_element, "COMPU-METHOD-REF", props.getCompuMethodRef())
664
686
  self.setChildElementOptionalNumericalValue(child_element, "SW-MAX-AXIS-POINTS", props.getSwMaxAxisPoints())
@@ -667,7 +689,7 @@ class ARXMLWriter(AbstractARXMLWriter):
667
689
 
668
690
  def setSwAxisGrouped(self, element: ET.Element, props: SwAxisGrouped):
669
691
  child_element = ET.SubElement(element, "SW-AXIS-GROUPED")
670
- self.setARObjectAttributes(child_element, props)
692
+ self.writeARObjectAttributes(child_element, props)
671
693
  self.setChildElementOptionalRefType(child_element, "SHARED-AXIS-TYPE-REF", props.sharedAxisTypeRef)
672
694
 
673
695
  def setSwCalprmAxis(self, element: ET.Element, axis: SwCalprmAxis):
@@ -699,20 +721,19 @@ class ARXMLWriter(AbstractARXMLWriter):
699
721
  def setSwDataDefProps(self, element: ET.Element, key: str, props: SwDataDefProps):
700
722
  if props is not None:
701
723
  child_element = ET.SubElement(element, key)
702
- self.setARObjectAttributes(child_element, props)
724
+ self.writeARObjectAttributes(child_element, props)
703
725
  sw_data_def_props_variants_tag = ET.SubElement(child_element, "SW-DATA-DEF-PROPS-VARIANTS")
704
726
  conditional_tag = ET.SubElement(sw_data_def_props_variants_tag, "SW-DATA-DEF-PROPS-CONDITIONAL")
705
- self.setARObjectAttributes(conditional_tag, props.conditional)
727
+ self.writeARObjectAttributes(conditional_tag, props.conditional)
706
728
  self.setAnnotations(conditional_tag, props.getAnnotations())
707
729
  self.setChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF", props.getBaseTypeRef())
708
730
  self.setChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF", props.getCompuMethodRef())
709
-
710
731
  self.setValueSpecification(conditional_tag, "INVALID-VALUE", props.getInvalidValue())
711
- self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
712
732
  self.setChildElementOptionalFloatValue(conditional_tag, "STEP-SIZE", props.getStepSize())
713
733
  self.setChildElementOptionalRefType(conditional_tag, "SW-ADDR-METHOD-REF", props.getSwAddrMethodRef())
714
734
  self.setChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS", props.getSwCalibrationAccess())
715
735
  self.setChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF", props.getDataConstrRef())
736
+ self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
716
737
  self.setSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET", props.getSwCalprmAxisSet())
717
738
  self.setChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY", props.getSwImplPolicy())
718
739
  self.setChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION", props.getSwIntendedResolution())
@@ -728,7 +749,7 @@ class ARXMLWriter(AbstractARXMLWriter):
728
749
  self.setApplicationDataType(element, data_type)
729
750
 
730
751
  def setAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
731
- self.setARElement(element, data_type)
752
+ self.writeARElement(element, data_type)
732
753
  self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.getSwDataDefProps())
733
754
 
734
755
  def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
@@ -824,9 +845,10 @@ class ARXMLWriter(AbstractARXMLWriter):
824
845
  compu_scales_tag = ET.SubElement(element, "COMPU-SCALES")
825
846
  for compu_scale in compu_scales.getCompuScales():
826
847
  child_element = ET.SubElement(compu_scales_tag, "COMPU-SCALE")
827
- self.setARObjectAttributes(child_element, compu_scale)
848
+ self.writeARObjectAttributes(child_element, compu_scale)
828
849
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", compu_scale.getShortLabel())
829
850
  self.setChildElementOptionalLiteral(child_element, "SYMBOL", compu_scale.getSymbol())
851
+ self.setMultiLanguageOverviewParagraph(child_element, "DESC", compu_scale.getDesc())
830
852
  self.setChildLimitElement(child_element, "LOWER-LIMIT", compu_scale.getLowerLimit())
831
853
  self.setChildLimitElement(child_element, "UPPER-LIMIT", compu_scale.getUpperLimit())
832
854
  self.writeCompuScaleContents(child_element, compu_scale)
@@ -834,13 +856,13 @@ class ARXMLWriter(AbstractARXMLWriter):
834
856
  def setCompuConst(self, element: ET.Element, key: str, compu_const: CompuConst):
835
857
  if compu_const is not None:
836
858
  child_element = ET.SubElement(element, key)
837
- self.setARObjectAttributes(child_element, compu_const)
859
+ self.writeARObjectAttributes(child_element, compu_const)
838
860
  self.setCompuConstContent(child_element, compu_const.getCompuConstContentType())
839
861
 
840
862
  def setCompu(self, element: ET.Element, key: str, compu: Compu):
841
863
  if compu is not None:
842
864
  child_element = ET.SubElement(element, key)
843
- self.setARObjectAttributes(child_element, compu)
865
+ self.writeARObjectAttributes(child_element, compu)
844
866
  self.setCompuScales(child_element, compu.getCompuContent())
845
867
  self.setCompuConst(child_element, "COMPU-DEFAULT-VALUE", compu.getCompuDefaultValue())
846
868
 
@@ -860,7 +882,7 @@ class ARXMLWriter(AbstractARXMLWriter):
860
882
 
861
883
  def setRecordValueSpecification(self, element: ET.Element, spec: RecordValueSpecification):
862
884
  child_element = ET.SubElement(element, "RECORD-VALUE-SPECIFICATION")
863
- self.setARObjectAttributes(child_element, spec)
885
+ self.writeARObjectAttributes(child_element, spec)
864
886
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", spec.getShortLabel())
865
887
  fields = spec.getFields()
866
888
  if len(fields) > 0:
@@ -889,7 +911,7 @@ class ARXMLWriter(AbstractARXMLWriter):
889
911
  def setInternalConstrs(self, element: ET.Element, constrs: InternalConstrs):
890
912
  if constrs is not None:
891
913
  constrs_tag = ET.SubElement(element, "INTERNAL-CONSTRS")
892
- self.setARObjectAttributes(constrs_tag, constrs)
914
+ self.writeARObjectAttributes(constrs_tag, constrs)
893
915
  if constrs.lower_limit is not None:
894
916
  self.setChildLimitElement(constrs_tag, "LOWER-LIMIT", constrs.lower_limit)
895
917
  if constrs.upper_limit is not None:
@@ -898,7 +920,7 @@ class ARXMLWriter(AbstractARXMLWriter):
898
920
  def setPhysConstrs(self, element: ET.Element, constrs: PhysConstrs):
899
921
  if constrs is not None:
900
922
  child_element = ET.SubElement(element, "PHYS-CONSTRS")
901
- self.setARObjectAttributes(child_element, constrs)
923
+ self.writeARObjectAttributes(child_element, constrs)
902
924
  if constrs.lower_limit is not None:
903
925
  self.setChildLimitElement(child_element, "LOWER-LIMIT", constrs.lower_limit)
904
926
  if constrs.upper_limit is not None:
@@ -911,7 +933,7 @@ class ARXMLWriter(AbstractARXMLWriter):
911
933
  rules_tag = ET.SubElement(element, "DATA-CONSTR-RULES")
912
934
  for rule in rules:
913
935
  child_element = ET.SubElement(rules_tag, "DATA-CONSTR-RULE")
914
- self.setARObjectAttributes(child_element, rule)
936
+ self.writeARObjectAttributes(child_element, rule)
915
937
  self.setChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL", rule.constrLevel)
916
938
  self.setPhysConstrs(child_element, rule.physConstrs)
917
939
  self.setInternalConstrs(child_element, rule.internalConstrs)
@@ -932,7 +954,7 @@ class ARXMLWriter(AbstractARXMLWriter):
932
954
 
933
955
  def setRModeInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: RModeInAtomicSwcInstanceRef):
934
956
  child_element = ET.SubElement(element, key)
935
- self.setARObjectAttributes(child_element, iref)
957
+ self.writeARObjectAttributes(child_element, iref)
936
958
  self.setChildElementOptionalRefType(child_element, "BASE", iref.getBaseRef())
937
959
  self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.getContextPortRef())
938
960
  self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.getContextModeDeclarationGroupPrototypeRef())
@@ -941,7 +963,7 @@ class ARXMLWriter(AbstractARXMLWriter):
941
963
  def setPOperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: POperationInAtomicSwcInstanceRef):
942
964
  if iref is not None:
943
965
  child_element = ET.SubElement(element, key)
944
- self.setARObjectAttributes(child_element, iref)
966
+ self.writeARObjectAttributes(child_element, iref)
945
967
  self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", iref.getContextPPortRef())
946
968
  self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.getTargetProvidedOperationRef())
947
969
 
@@ -954,20 +976,20 @@ class ARXMLWriter(AbstractARXMLWriter):
954
976
  self.setRModeInAtomicSwcInstanceRef(child_element, "DISABLED-MODE-IREF", iref)
955
977
  self.setChildElementOptionalRefType(element, "START-ON-EVENT-REF", event.startOnEventRef)
956
978
 
957
- def setTimingEvent(self, element: ET.Element, event: TimingEvent):
979
+ def writeTimingEvent(self, element: ET.Element, event: TimingEvent):
958
980
  if event is not None:
959
981
  child_element = ET.SubElement(element, "TIMING-EVENT")
960
982
  self.setRTEEvent(child_element, event)
961
983
  self.setChildElementOptionalTimeValue(child_element, "OFFSET", event.getOffset())
962
984
  self.setChildElementOptionalTimeValue(child_element, "PERIOD", event.getPeriod())
963
985
 
964
- def setOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
986
+ def writeOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
965
987
  if event is not None:
966
988
  child_element = ET.SubElement(element, "OPERATION-INVOKED-EVENT")
967
989
  self.setRTEEvent(child_element, event)
968
990
  self.setPOperationInAtomicSwcInstanceRef(child_element, "OPERATION-IREF", event.operationIRef)
969
991
 
970
- def setSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
992
+ def writeSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
971
993
  if event is not None:
972
994
  child_element = ET.SubElement(element, "SWC-MODE-SWITCH-EVENT")
973
995
  self.setRTEEvent(child_element, event)
@@ -984,26 +1006,37 @@ class ARXMLWriter(AbstractARXMLWriter):
984
1006
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
985
1007
  self.setChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF", iref.getTargetDataElementRef())
986
1008
 
987
- def setDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
1009
+ def writeDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
988
1010
  if event is not None:
989
1011
  child_element = ET.SubElement(element, "DATA-RECEIVED-EVENT")
990
1012
  self.setRTEEvent(child_element, event)
991
1013
  self.setRVariableInAtomicSwcInstanceRef(child_element, event.dataIRef)
992
1014
 
993
- def setInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
1015
+ def writeInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
994
1016
  pass
995
1017
 
996
- def setInitEvent(self, element: ET.Element, event: InitEvent):
1018
+ def writeInitEvent(self, element: ET.Element, event: InitEvent):
997
1019
  if event is not None:
998
1020
  child_element = ET.SubElement(element, "INIT-EVENT")
999
1021
  self.setRTEEvent(child_element, event)
1000
1022
 
1001
- def setAsynchronousServerCallReturnsEvent(self, element: ET.Element, event: InitEvent):
1023
+ def writeAsynchronousServerCallReturnsEvent(self, element: ET.Element, event: InitEvent):
1002
1024
  if event is not None:
1003
1025
  child_element = ET.SubElement(element, "ASYNCHRONOUS-SERVER-CALL-RETURNS-EVENT")
1004
1026
  self.setRTEEvent(child_element, event)
1005
1027
  self.setChildElementOptionalRefType(child_element, "EVENT-SOURCE-REF", event.getActivationReasonRepresentationRef())
1006
1028
 
1029
+ def writeModeSwitchedAckEvent(self, element: ET.Element, event: ModeSwitchedAckEvent):
1030
+ if event is not None:
1031
+ child_element = ET.SubElement(element, "MODE-SWITCHED-ACK-EVENT")
1032
+ self.setRTEEvent(child_element, event)
1033
+ self.setChildElementOptionalRefType(child_element, "EVENT-SOURCE-REF", event.getEventSourceRef())
1034
+
1035
+ def writeBackgroundEvent(self, element: ET.Element, event: BackgroundEvent):
1036
+ if event is not None:
1037
+ child_element = ET.SubElement(element, "BACKGROUND-EVENT")
1038
+ self.setRTEEvent(child_element, event)
1039
+
1007
1040
  def writeRTEEvents(self, element: ET.Element, parent: SwcInternalBehavior):
1008
1041
  events = parent.getRteEvents()
1009
1042
  if len(events) > 0:
@@ -1011,19 +1044,23 @@ class ARXMLWriter(AbstractARXMLWriter):
1011
1044
 
1012
1045
  for event in events:
1013
1046
  if isinstance(event, TimingEvent):
1014
- self.setTimingEvent(child_element, event)
1047
+ self.writeTimingEvent(child_element, event)
1015
1048
  elif isinstance(event, OperationInvokedEvent):
1016
- self.setOperationInvokedEvent(child_element, event)
1049
+ self.writeOperationInvokedEvent(child_element, event)
1017
1050
  elif isinstance(event, SwcModeSwitchEvent):
1018
- self.setSwcModeSwitchEvent(child_element, event)
1051
+ self.writeSwcModeSwitchEvent(child_element, event)
1019
1052
  elif isinstance(event, DataReceivedEvent):
1020
- self.setDataReceivedEvent(child_element, event)
1053
+ self.writeDataReceivedEvent(child_element, event)
1021
1054
  elif isinstance(event, InternalTriggerOccurredEvent):
1022
- self.setInternalTriggerOccurredEvent(child_element, event)
1055
+ self.writeInternalTriggerOccurredEvent(child_element, event)
1023
1056
  elif isinstance(event, InitEvent):
1024
- self.setInitEvent(child_element, event)
1057
+ self.writeInitEvent(child_element, event)
1025
1058
  elif isinstance(event, AsynchronousServerCallReturnsEvent):
1026
- self.setAsynchronousServerCallReturnsEvent(child_element, event)
1059
+ self.writeAsynchronousServerCallReturnsEvent(child_element, event)
1060
+ elif isinstance(event, ModeSwitchedAckEvent):
1061
+ self.writeModeSwitchedAckEvent(child_element, event)
1062
+ elif isinstance(event, BackgroundEvent):
1063
+ self.writeBackgroundEvent(child_element, event)
1027
1064
  else:
1028
1065
  self.notImplemented("Unsupported Event <%s>" % type(event))
1029
1066
 
@@ -1051,7 +1088,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1051
1088
  def setAutosarVariableRef(self, element: ET.Element, key: str, ref: AutosarVariableRef):
1052
1089
  if ref is not None:
1053
1090
  child_element = ET.SubElement(element, key)
1054
- self.setARObjectAttributes(child_element, ref)
1091
+ self.writeARObjectAttributes(child_element, ref)
1055
1092
  if ref.getAutosarVariableIRef() is not None:
1056
1093
  child_element = ET.SubElement(child_element, "AUTOSAR-VARIABLE-IREF")
1057
1094
  #self.setARObjectAttributes(child_element, ref)
@@ -1062,7 +1099,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1062
1099
  def setComponentInSystemInstanceRef(self, element: ET.Element, tag_name: str, ref: ComponentInSystemInstanceRef):
1063
1100
  if ref is not None:
1064
1101
  child_element = ET.SubElement(element, tag_name)
1065
- self.setARObjectAttributes(child_element, ref)
1102
+ self.writeARObjectAttributes(child_element, ref)
1066
1103
  self.setChildElementOptionalRefType(child_element, "BASE-REF", ref.getBaseRef())
1067
1104
  self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", ref.getContextCompositionRef())
1068
1105
  self.setChildElementOptionalRefType(child_element, "TARGET-COMPONENT-REF", ref.getTargetComponentRef())
@@ -1127,7 +1164,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1127
1164
  def setROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
1128
1165
  if iref is not None:
1129
1166
  child_element = ET.SubElement(element, key)
1130
- self.setARObjectAttributes(child_element, iref)
1167
+ self.writeARObjectAttributes(child_element, iref)
1131
1168
  self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.getContextRPortRef())
1132
1169
  self.setChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF", iref.getTargetRequiredOperationRef())
1133
1170
 
@@ -1493,7 +1530,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1493
1530
  include_data_type_sets_tag = ET.SubElement(element, "INCLUDED-DATA-TYPE-SETS")
1494
1531
  for set in sets:
1495
1532
  child_element = ET.SubElement(include_data_type_sets_tag, "INCLUDED-DATA-TYPE-SET")
1496
- self.setARObjectAttributes(child_element, set)
1533
+ self.writeARObjectAttributes(child_element, set)
1497
1534
  type_refs = set.getDataTypeRefs()
1498
1535
  if len(type_refs) > 0:
1499
1536
  data_type_refs_tag = ET.SubElement(child_element, "DATA-TYPE-REFS")
@@ -1529,7 +1566,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1529
1566
 
1530
1567
  def writeAtomicSwComponentType(self, element: ET.Element, sw_component: AtomicSwComponentType):
1531
1568
  self.writeSwComponentType(element, sw_component)
1532
- self.writeAtomicSwComponentTypeInternalBehaviors(element, sw_component.internal_behavior)
1569
+ self.writeAtomicSwComponentTypeInternalBehaviors(element, sw_component.getInternalBehavior())
1533
1570
 
1534
1571
  def writeComplexDeviceDriverSwComponentType(self, element: ET.Element, sw_component: ComplexDeviceDriverSwComponentType):
1535
1572
  self.logger.debug("writeComplexDeviceDriverSwComponentType %s" % sw_component.getShortName())
@@ -1543,7 +1580,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1543
1580
  for artifact_desc in artifact_descriptors:
1544
1581
  artifact_desc_tag = ET.SubElement(artifact_descs_tag, "AUTOSAR-ENGINEERING-OBJECT")
1545
1582
  self.logger.debug("writeArtifactDescriptor %s", artifact_desc.short_label)
1546
- self.setARObjectAttributes(artifact_desc_tag, artifact_desc)
1583
+ self.writeARObjectAttributes(artifact_desc_tag, artifact_desc)
1547
1584
  self.setChildElementOptionalLiteral(artifact_desc_tag, "SHORT-LABEL", artifact_desc.short_label)
1548
1585
  self.setChildElementOptionalLiteral(artifact_desc_tag, "CATEGORY", artifact_desc.category)
1549
1586
 
@@ -1811,22 +1848,46 @@ class ARXMLWriter(AbstractARXMLWriter):
1811
1848
  self.writeIdentifiable(element, event)
1812
1849
  self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
1813
1850
 
1814
- def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
1851
+ def writeBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
1815
1852
  self.setBswEvent(element, event)
1816
1853
 
1817
- def setBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
1818
- self.logger.debug("setBswTimingEvent %s" % event.getShortName())
1854
+ def writeBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
1855
+ self.logger.debug("Write BswTimingEvent <%s>" % event.getShortName())
1819
1856
  child_element = ET.SubElement(element, "BSW-TIMING-EVENT")
1820
- self.setBswScheduleEvent(child_element, event)
1857
+ self.writeBswScheduleEvent(child_element, event)
1821
1858
  self.setChildElementOptionalTimeValue(child_element, "PERIOD", event.getPeriod())
1822
1859
 
1860
+ def writeBswBackgroundEvent(self, element: ET.Element, event: BswBackgroundEvent):
1861
+ self.logger.debug("Write BswTimingEvent <%s>" % event.getShortName())
1862
+ child_element = ET.SubElement(element, "BSW-BACKGROUND-EVENT")
1863
+ self.writeBswScheduleEvent(child_element, event)
1864
+
1865
+ def writeBswExternalTriggerOccurredEvent(self, element: ET.Element, event: BswExternalTriggerOccurredEvent):
1866
+ self.logger.debug("Write BswExternalTriggerOccurredEvent %s" % event.getShortName())
1867
+ child_element = ET.SubElement(element, "BSW-EXTERNAL-TRIGGER-OCCURRED-EVENT")
1868
+ self.writeBswScheduleEvent(child_element, event)
1869
+ self.setChildElementOptionalRefType(child_element, "TRIGGER-REF", event.getTriggerRef())
1870
+
1871
+ def writeBswDataReceivedEvent(self, element: ET.Element, event: BswDataReceivedEvent):
1872
+ self.logger.debug("Write BswDataReceivedEvent %s" % event.getShortName())
1873
+ # Read the Inherit BswScheduleEvent
1874
+ child_element = ET.SubElement(element, "BSW-DATA-RECEIVED-EVENT")
1875
+ self.writeBswScheduleEvent(child_element, event)
1876
+ self.setChildElementOptionalRefType(child_element, "DATA-REF", event.getDataRef())
1877
+
1823
1878
  def writeBswInternalBehaviorBswEvents(self, element: ET.Element, parent: BswInternalBehavior):
1824
1879
  events = parent.getBswEvents()
1825
1880
  if len(events) > 0:
1826
1881
  child_element = ET.SubElement(element, "EVENTS")
1827
1882
  for event in events:
1828
1883
  if isinstance(event, BswTimingEvent):
1829
- self.setBswTimingEvent(child_element, event)
1884
+ self.writeBswTimingEvent(child_element, event)
1885
+ elif isinstance(event, BswBackgroundEvent):
1886
+ self.writeBswBackgroundEvent(child_element, event)
1887
+ elif isinstance(event, BswExternalTriggerOccurredEvent):
1888
+ self.writeBswExternalTriggerOccurredEvent(child_element, event)
1889
+ elif isinstance(event, BswDataReceivedEvent):
1890
+ self.writeBswDataReceivedEvent(child_element, event)
1830
1891
  else:
1831
1892
  self._raiseError("Unsupported BswModuleEntity <%s>" % type(event))
1832
1893
 
@@ -1941,7 +2002,7 @@ class ARXMLWriter(AbstractARXMLWriter):
1941
2002
  self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.getSwcBehaviorRef())
1942
2003
 
1943
2004
  def writeEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
1944
- self.setARObjectAttributes(element, engineering_obj)
2005
+ self.writeARObjectAttributes(element, engineering_obj)
1945
2006
  self.setChildElementOptionalLiteral(element, "SHORT-LABEL", engineering_obj.short_label)
1946
2007
  self.setChildElementOptionalLiteral(element, "CATEGORY", engineering_obj.category)
1947
2008
 
@@ -1989,12 +2050,25 @@ class ARXMLWriter(AbstractARXMLWriter):
1989
2050
  self.writeImplementationDataTypeElements(child_element, type_element)
1990
2051
  self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.getSwDataDefProps())
1991
2052
 
2053
+ def writeImplementationProps(self, element: ET.Element, props: ImplementationProps):
2054
+ self.writeReferrable(element, props)
2055
+ self.setChildElementOptionalLiteral(element, "SYMBOL", props.getSymbol())
2056
+
2057
+ def writeSymbolProps(self, element: ET.Element, props: SymbolProps):
2058
+ if props is not None:
2059
+ child_element = ET.SubElement(element, "SYMBOL-PROPS")
2060
+ self.writeImplementationProps(child_element, props)
2061
+
2062
+ def writeImplementationDataTypeSymbolProps(self, element: ET.Element, data_type: ImplementationDataType):
2063
+ self.writeSymbolProps(element, data_type.getSymbolProps())
2064
+
1992
2065
  def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1993
2066
  self.logger.debug("writeImplementationDataType %s" % data_type.getShortName())
1994
2067
  child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
1995
2068
  self.setAutosarDataType(child_element, data_type)
1996
2069
  self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
1997
2070
  self.writeImplementationDataTypeElements(child_element, data_type)
2071
+ self.writeImplementationDataTypeSymbolProps(child_element, data_type)
1998
2072
  self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
1999
2073
 
2000
2074
  def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
@@ -2077,17 +2151,19 @@ class ARXMLWriter(AbstractARXMLWriter):
2077
2151
  child_element = ET.SubElement(element, "ECU-ABSTRACTION-SW-COMPONENT-TYPE")
2078
2152
  self.writeAtomicSwComponentType(child_element, sw_component)
2079
2153
 
2080
- def setApplicationArrayElement(self, element: ET.Element, prototype: ApplicationArrayElement):
2081
- if prototype is not None:
2154
+ def setApplicationArrayElement(self, element: ET.Element, array_element: ApplicationArrayElement):
2155
+ if array_element is not None:
2082
2156
  child_element = ET.SubElement(element, "ELEMENT")
2083
- self.setApplicationCompositeElementDataPrototype(child_element, prototype)
2084
- self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", prototype.arraySizeSemantics)
2085
- self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", prototype.maxNumberOfElements)
2157
+ self.setApplicationCompositeElementDataPrototype(child_element, array_element)
2158
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING", array_element.getArraySizeHandling())
2159
+ self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", array_element.getArraySizeSemantics())
2160
+ self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", array_element.getMaxNumberOfElements())
2086
2161
 
2087
2162
  def writeApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
2088
2163
  self.logger.debug("writeApplicationArrayDataType %s" % data_type.getShortName())
2089
2164
  child_element = ET.SubElement(element, "APPLICATION-ARRAY-DATA-TYPE")
2090
2165
  self.setApplicationCompositeDataType(child_element, data_type)
2166
+ self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
2091
2167
  self.setApplicationArrayElement(child_element, data_type.element)
2092
2168
 
2093
2169
  def setSwRecordLayoutV(self, element: ET.Element, key: str, layout_v: SwRecordLayoutV):
@@ -2099,19 +2175,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2099
2175
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.getSwRecordLayoutVProp())
2100
2176
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.getSwRecordLayoutVIndex())
2101
2177
 
2178
+ def writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(self, element: ET.Element, group: SwRecordLayoutGroup):
2179
+ content = group.getSwRecordLayoutGroupContentType()
2180
+ self.setSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP", content.getSwRecordLayoutGroup())
2181
+ self.setSwRecordLayoutV(element, "SW-RECORD-LAYOUT-V", content.getSwRecordLayoutV())
2182
+
2102
2183
  def setSwRecordLayoutGroup(self, element: ET.Element, key: str, group: SwRecordLayoutGroup):
2103
2184
  if group is not None:
2104
2185
  child_element = ET.SubElement(element, key)
2105
2186
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", group.getShortLabel())
2106
2187
  self.setChildElementOptionalLiteral(child_element, "CATEGORY", group.getCategory())
2188
+ #self.writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(child_element, group)
2107
2189
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
2108
2190
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX", group.getSwRecordLayoutGroupIndex())
2109
2191
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.getSwRecordLayoutGroupFrom())
2110
2192
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.getSwRecordLayoutGroupTo())
2111
2193
  self.setChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP", group.getSwRecordLayoutGroupStep())
2112
- #self.setSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V", group.swRecordLayoutGroupContentType.swRecordLayoutV)
2113
- #self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", group.swRecordLayoutGroupContentType.swRecordLayoutGroup)
2114
- return group
2115
2194
 
2116
2195
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
2117
2196
  self.logger.debug("writeSwRecordLayout %s" % layout.getShortName())
@@ -2147,7 +2226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2147
2226
  maps_tag = ET.SubElement(element, "DATA-TYPE-MAPS")
2148
2227
  for map in maps:
2149
2228
  child_element = ET.SubElement(maps_tag, "DATA-TYPE-MAP")
2150
- self.setARObjectAttributes(child_element, map)
2229
+ self.writeARObjectAttributes(child_element, map)
2151
2230
  self.setChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF", map.getApplicationDataTypeRef())
2152
2231
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
2153
2232
 
@@ -2157,7 +2236,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2157
2236
  maps_tag = ET.SubElement(element, "MODE-REQUEST-TYPE-MAPS")
2158
2237
  for map in maps:
2159
2238
  child_element = ET.SubElement(maps_tag, "MODE-REQUEST-TYPE-MAP")
2160
- self.setARObjectAttributes(child_element, map)
2239
+ self.writeARObjectAttributes(child_element, map)
2161
2240
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
2162
2241
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", map.getModeGroupRef())
2163
2242
 
@@ -2270,8 +2349,10 @@ class ARXMLWriter(AbstractARXMLWriter):
2270
2349
  self.writeFrame(child_element, frame)
2271
2350
 
2272
2351
  def writeNmNode(self, element: ET.Element, nm_node: NmNode):
2352
+ self.writeIdentifiable(element, nm_node)
2273
2353
  self.setChildElementOptionalRefType(element, "CONTROLLER-REF", nm_node.getControllerRef())
2274
2354
  self.setChildElementOptionalRefType(element, "NM-IF-ECU-REF", nm_node.getNmIfEcuRef())
2355
+ self.setChildElementOptionalBooleanValue(element, "NM-PASSIVE-MODE-ENABLED", nm_node.getNmPassiveModeEnabled())
2275
2356
  self.setChildElementOptionalNumericalValue(element, "NM-NODE-ID", nm_node.getNmNodeId())
2276
2357
 
2277
2358
  refs = nm_node.getRxNmPduRefs()
@@ -2289,9 +2370,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2289
2370
  def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
2290
2371
  self.logger.debug("write CanNmNode %s" % nm_node.getShortName())
2291
2372
  child_element = ET.SubElement(element, "CAN-NM-NODE")
2292
- self.writeIdentifiable(child_element, nm_node)
2293
2373
  self.writeNmNode(child_element, nm_node)
2294
-
2374
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CAR-WAKE-UP-RX-ENABLED", nm_node.getNmCarWakeUpRxEnabled())
2295
2375
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2296
2376
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
2297
2377
  self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
@@ -2299,8 +2379,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2299
2379
  def writeUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
2300
2380
  self.logger.debug("write UdpNmNode %s" % nm_node.getShortName())
2301
2381
  child_element = ET.SubElement(element, "UDP-NM-NODE")
2302
- self.writeIdentifiable(child_element, nm_node)
2303
2382
  self.writeNmNode(child_element, nm_node)
2383
+ self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2304
2384
 
2305
2385
  def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2306
2386
  nodes = parent.getNmNodes()
@@ -2321,15 +2401,20 @@ class ARXMLWriter(AbstractARXMLWriter):
2321
2401
  refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
2322
2402
  for ref in refs:
2323
2403
  self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
2324
-
2325
2404
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
2326
2405
  self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2327
2406
 
2328
2407
  def writeUdpNmClusterCoupling(self, element: ET.Element, coupling: UdpNmClusterCoupling):
2329
2408
  child_element = ET.SubElement(element, "UDP-NM-CLUSTER-COUPLING")
2409
+ refs = coupling.getCoupledClusterRefs()
2410
+ if len(refs) > 0:
2411
+ refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
2412
+ for ref in refs:
2413
+ self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
2414
+ self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2330
2415
 
2331
2416
  def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
2332
- self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
2417
+ self.logger.debug("Write NmConfigNmClusterCouplings <%s>" % config.getShortName())
2333
2418
  couplings = config.getNmClusterCouplings()
2334
2419
  if len(couplings) > 0:
2335
2420
  child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
@@ -2342,6 +2427,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2342
2427
  self.notImplemented("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2343
2428
 
2344
2429
  def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
2430
+ self.logger.debug("Write NmCluster <%s>" % cluster.getShortName())
2345
2431
  self.writeIdentifiable(element, cluster)
2346
2432
  self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
2347
2433
  self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
@@ -2350,7 +2436,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2350
2436
  self.setChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK", cluster.getNmSynchronizingNetwork())
2351
2437
 
2352
2438
  def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2353
- self.logger.debug("WriteCanNmCluster %s" % cluster.getShortName())
2439
+ self.logger.debug("Write CanNmCluster <%s>" % cluster.getShortName())
2354
2440
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
2355
2441
  self.writeNmCluster(child_element, cluster)
2356
2442
 
@@ -2369,10 +2455,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2369
2455
  self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2370
2456
  self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2371
2457
 
2372
- def writeUdpNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2373
- self.logger.debug("Write UdpNmCluster %s" % cluster.getShortName())
2458
+ def writeUdpNmCluster(self, element: ET.Element, cluster: UdpNmCluster):
2459
+ self.logger.debug("Write UdpNmCluster <%s>" % cluster.getShortName())
2374
2460
  child_element = ET.SubElement(element, "UDP-NM-CLUSTER")
2375
2461
  self.writeNmCluster(child_element, cluster)
2462
+ self.setChildElementOptionalIntegerValue(child_element, "NM-CBV-POSITION", cluster.getNmCbvPosition())
2463
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CHANNEL-ACTIVE", cluster.getNmChannelActive())
2464
+ self.setChildElementOptionalTimeValue(child_element, "NM-IMMEDIATE-NM-CYCLE-TIME", cluster.getNmImmediateNmCycleTime())
2465
+ self.setChildElementOptionalPositiveInteger(child_element, "NM-IMMEDIATE-NM-TRANSMISSIONS", cluster.getNmImmediateNmTransmissions())
2466
+ self.setChildElementOptionalTimeValue(child_element, "NM-MESSAGE-TIMEOUT-TIME", cluster.getNmMessageTimeoutTime())
2467
+ self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-TIME", cluster.getNmMsgCycleTime())
2468
+ self.setChildElementOptionalTimeValue(child_element, "NM-NETWORK-TIMEOUT", cluster.getNmNetworkTimeout())
2469
+ self.setChildElementOptionalIntegerValue(child_element, "NM-NID-POSITION", cluster.getNmNidPosition())
2470
+ self.setChildElementOptionalTimeValue(child_element, "NM-REMOTE-SLEEP-INDICATION-TIME", cluster.getNmRemoteSleepIndicationTime())
2471
+ self.setChildElementOptionalTimeValue(child_element, "NM-REPEAT-MESSAGE-TIME", cluster.getNmRepeatMessageTime())
2472
+ self.setChildElementOptionalTimeValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2473
+ self.setChildElementOptionalRefType(child_element, "VLAN-REF", cluster.getVlanRef())
2376
2474
 
2377
2475
  def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2378
2476
  clusters = parent.getNmClusters()
@@ -2386,45 +2484,311 @@ class ARXMLWriter(AbstractARXMLWriter):
2386
2484
  else:
2387
2485
  self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
2388
2486
 
2487
+ def writeUdpNmEcu(self, element: ET.Element, ecu: UdpNmEcu):
2488
+ if ecu is not None:
2489
+ child_element = ET.SubElement(element, "UDP-NM-ECU")
2490
+ self.setChildElementOptionalBooleanValue(child_element, "NM-SYNCHRONIZATION-POINT-ENABLED", ecu.getNmSynchronizationPointEnabled())
2491
+
2492
+ def writeBusDependentNmEcus(self, element: ET.Element, nm_ecu: NmEcu):
2493
+ dependent_nm_ecus = nm_ecu.getBusDependentNmEcus()
2494
+ if len(dependent_nm_ecus) > 0:
2495
+ child_element = ET.SubElement(element, "BUS-DEPENDENT-NM-ECUS")
2496
+ for dependent_nm_ecu in dependent_nm_ecus:
2497
+ if isinstance(dependent_nm_ecu, UdpNmEcu):
2498
+ self.writeUdpNmEcu(child_element, dependent_nm_ecu)
2499
+ else:
2500
+ self.notImplemented("Unsupported BusDependentNmEcu <%s>" % type(dependent_nm_ecu))
2501
+
2502
+ def writeNmEcu(self, element: ET.Element, nm_ecu: NmEcu):
2503
+ child_element = ET.SubElement(element, "NM-ECU")
2504
+ self.writeIdentifiable(child_element, nm_ecu)
2505
+ self.writeBusDependentNmEcus(child_element, nm_ecu)
2506
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", nm_ecu.getEcuInstanceRef())
2507
+ self.setChildElementOptionalBooleanValue(child_element, "NM-BUS-SYNCHRONIZATION-ENABLED", nm_ecu.getNmBusSynchronizationEnabled())
2508
+ self.setChildElementOptionalBooleanValue(child_element, "NM-COM-CONTROL-ENABLED", nm_ecu.getNmComControlEnabled())
2509
+ self.setChildElementOptionalBooleanValue(child_element, "NM-NODE-DETECTION-ENABLED", nm_ecu.getNmNodeDetectionEnabled())
2510
+ self.setChildElementOptionalBooleanValue(child_element, "NM-NODE-ID-ENABLED", nm_ecu.getNmNodeIdEnabled())
2511
+ self.setChildElementOptionalBooleanValue(child_element, "NM-PDU-RX-INDICATION-ENABLED", nm_ecu.getNmPduRxIndicationEnabled())
2512
+ self.setChildElementOptionalBooleanValue(child_element, "NM-REMOTE-SLEEP-IND-ENABLED", nm_ecu.getNmRemoteSleepIndEnabled())
2513
+ self.setChildElementOptionalBooleanValue(child_element, "NM-REPEAT-MSG-IND-ENABLED", nm_ecu.getNmRepeatMsgIndEnabled())
2514
+ self.setChildElementOptionalBooleanValue(child_element, "NM-STATE-CHANGE-IND-ENABLED", nm_ecu.getNmStateChangeIndEnabled())
2515
+ self.setChildElementOptionalBooleanValue(child_element, "NM-USER-DATA-ENABLED", nm_ecu.getNmUserDataEnabled())
2516
+
2517
+ def writeNmConfigNmIfEcus(self, element: ET.Element, nm_config: NmConfig):
2518
+ ecus = nm_config.getNmIfEcus()
2519
+ if len(ecus) > 0:
2520
+ child_element = ET.SubElement(element, "NM-IF-ECUS")
2521
+ for ecu in ecus:
2522
+ if isinstance(ecu, NmEcu):
2523
+ self.writeNmEcu(child_element, ecu)
2524
+ else:
2525
+ self.notImplemented("Unsupported NmIfEcus <%s>" % type(ecu))
2526
+
2389
2527
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
2390
- self.logger.debug("WriteNmConfig %s" % config.getShortName())
2528
+ self.logger.debug("Write NmConfig <%s>" % config.getShortName())
2391
2529
  child_element = ET.SubElement(element, "NM-CONFIG")
2392
2530
  self.writeIdentifiable(child_element, config)
2393
2531
  self.writeNmConfigNmClusters(child_element, config)
2394
2532
  self.writeNmConfigNmClusterCouplings(child_element, config)
2533
+ self.writeNmConfigNmIfEcus(child_element, config)
2534
+
2535
+ def writeISignalToIPduMapping(self, element: ET.Element, mapping: ISignalToIPduMapping):
2536
+ if mapping is not None:
2537
+ child_element = ET.SubElement(element, "I-SIGNAL-TO-I-PDU-MAPPING")
2538
+ self.writeIdentifiable(child_element, mapping)
2539
+ self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
2540
+ self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
2541
+ self.setChildElementOptionalIntegerValue(child_element, "START-POSITION", mapping.getStartPosition())
2542
+ self.setChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY", mapping.getTransferProperty())
2543
+
2544
+ def writeNmPduISignalToIPduMappings(self, element: ET.Element, pdu: NmPdu):
2545
+ mappings = pdu.getISignalToIPduMappings()
2546
+ if len(mappings) > 0:
2547
+ child_element = ET.SubElement(element, "I-SIGNAL-TO-I-PDU-MAPPINGS")
2548
+ for mapping in mappings:
2549
+ if isinstance(mapping, ISignalToIPduMapping):
2550
+ self.writeISignalToIPduMapping(child_element, mapping)
2551
+ else:
2552
+ self.notImplemented("Unsupported ISignalToIPduMapping <%s>" % type(mapping))
2395
2553
 
2396
2554
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2397
- self.logger.debug("NmPdu %s" % pdu.getShortName())
2555
+ self.logger.debug("Write NmPdu <%s>" % pdu.getShortName())
2398
2556
  child_element = ET.SubElement(element, "NM-PDU")
2399
- self.writeIdentifiable(child_element, pdu)
2400
- self.writeIPdu(child_element, pdu)
2557
+ self.writePdu(child_element, pdu)
2558
+ self.writeNmPduISignalToIPduMappings(child_element, pdu)
2559
+ self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", pdu.getUnusedBitPattern())
2401
2560
 
2402
2561
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
2403
- self.logger.debug("NPdu %s" % pdu.getShortName())
2562
+ self.logger.debug("Write NPdu <%s>" % pdu.getShortName())
2404
2563
  child_element = ET.SubElement(element, "N-PDU")
2405
- self.writeIdentifiable(child_element, pdu)
2406
- self.writeIPdu(child_element, pdu)
2407
-
2408
- def writeIPdu(self, element: ET.Element, pdu: IPdu):
2409
- self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
2564
+ self.writePdu(child_element, pdu)
2410
2565
 
2411
2566
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2412
- self.logger.debug("DcmIPdu %s" % pdu.getShortName())
2567
+ self.logger.debug("Write DcmIPdu <%s>" % pdu.getShortName())
2413
2568
  child_element = ET.SubElement(element, "DCM-I-PDU")
2414
- self.writeIdentifiable(child_element, pdu)
2415
2569
  self.writeIPdu(child_element, pdu)
2416
2570
  self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2417
2571
 
2418
- def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2419
- self.logger.debug("SecuredIPdu %s" % pdu.getShortName())
2572
+ def setSecureCommunicationProps(self, element: ET.Element, key: str, props: SecureCommunicationProps):
2573
+ if props is not None:
2574
+ child_element = ET.SubElement(element, key)
2575
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-LENGTH", props.getAuthDataFreshnessLength())
2576
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-START-POSITION", props.getAuthDataFreshnessStartPosition())
2577
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTH-INFO-TX-LENGTH", props.getAuthInfoTxLength())
2578
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-BUILD-ATTEMPTS", props.getAuthenticationBuildAttempts())
2579
+ self.setChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-RETRIES", props.getAuthenticationRetries())
2580
+ self.setChildElementOptionalPositiveInteger(child_element, "DATA-ID", props.getDataId())
2581
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-ID", props.getFreshnessValueId())
2582
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-LENGTH", props.getFreshnessValueLength())
2583
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH", props.getFreshnessValueTxLength())
2584
+
2585
+ def writeSecuredIPdu(self, element: ET.Element, i_pdu: SecuredIPdu):
2586
+ self.logger.debug("Write SecuredIPdu <%s>" % i_pdu.getShortName())
2420
2587
  child_element = ET.SubElement(element, "SECURED-I-PDU")
2421
- self.writeIdentifiable(child_element, pdu)
2422
- self.writeIPdu(child_element, pdu)
2588
+ self.writeIPdu(child_element, i_pdu)
2589
+ self.setChildElementOptionalRefType(child_element, "AUTHENTICATION-PROPS-REF", i_pdu.getAuthenticationPropsRef())
2590
+ self.setChildElementOptionalRefType(child_element, "FRESHNESS-PROPS-REF", i_pdu.getFreshnessPropsRef())
2591
+ self.setChildElementOptionalRefType(child_element, "PAYLOAD-REF", i_pdu.getPayloadRef())
2592
+ self.setSecureCommunicationProps(child_element, "SECURE-COMMUNICATION-PROPS", i_pdu.getSecureCommunicationProps())
2593
+ self.setChildElementOptionalBooleanValue(child_element, "USE-AS-CRYPTOGRAPHIC-I-PDU", i_pdu.getUseAsCryptographicIPdu())
2594
+
2595
+ def writeTpConfig(self, element: ET.Element, config: TpConfig):
2596
+ self.writeIdentifiable(element, config)
2597
+ self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", config.getCommunicationClusterRef())
2598
+
2599
+ def writeCanTpAddress(self, element: ET.Element, address: CanTpAddress):
2600
+ if address is not None:
2601
+ child_element = ET.SubElement(element, "CAN-TP-ADDRESS")
2602
+ self.writeIdentifiable(child_element, address)
2603
+ self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS", address.getTpAddress())
2604
+ self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS-EXTENSION-VALUE", address.getTpAddressExtensionValue())
2605
+
2606
+ def writeCanTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
2607
+ addresses = config.getTpAddresses()
2608
+ if len(addresses) > 0:
2609
+ child_element = ET.SubElement(element, "TP-ADDRESSS")
2610
+ for address in addresses:
2611
+ if isinstance(address, CanTpAddress):
2612
+ self.writeCanTpAddress(child_element, address)
2613
+ else:
2614
+ self.notImplemented("Unsupported TpAddress <%s>" % type(address))
2615
+
2616
+ def writeCanTpChannel(self, element: ET.Element, channel: CanTpChannel):
2617
+ if channel is not None:
2618
+ child_element = ET.SubElement(element, "CAN-TP-CHANNEL")
2619
+ self.writeIdentifiable(child_element, channel)
2620
+ self.setChildElementOptionalPositiveInteger(child_element, "CHANNEL-ID", channel.getChannelId())
2621
+ self.setChildElementOptionalLiteral(child_element, "CHANNEL-MODE", channel.getChannelMode())
2622
+
2623
+ def writeCanTpConfigTpChannels(self, element: ET.Element, config: CanTpConfig):
2624
+ channels = config.getTpChannels()
2625
+ if len(channels) > 0:
2626
+ child_element = ET.SubElement(element, "TP-CHANNELS")
2627
+ for channel in channels:
2628
+ if isinstance(channel, CanTpChannel):
2629
+ self.writeCanTpChannel(child_element, channel)
2630
+ else:
2631
+ self.notImplemented("Unsupported TpChannel <%s>" % type(channel))
2632
+
2633
+ def writeTpConnection(self, element: ET.Element, connection: TpConnection):
2634
+ self.writeARObjectAttributes(element, connection)
2635
+ ident = connection.getIdent()
2636
+ if ident is not None:
2637
+ child_element = ET.SubElement(element, "IDENT")
2638
+ self.writeReferrable(child_element, ident)
2639
+
2640
+ def writeTpConnectionReceiverRefs(self, element: ET.Element, connection: CanTpConnection):
2641
+ refs = connection.getReceiverRefs()
2642
+ if len(refs) > 0:
2643
+ child_element = ET.SubElement(element, "RECEIVER-REFS")
2644
+ for ref in refs:
2645
+ self.setChildElementOptionalRefType(child_element, "RECEIVER-REF", ref)
2646
+
2647
+ def writeCanTpConnection(self, element: ET.Element, connection: CanTpConnection):
2648
+ if connection is not None:
2649
+ child_element = ET.SubElement(element, "CAN-TP-CONNECTION")
2650
+ self.writeTpConnection(child_element, connection)
2651
+ self.setChildElementOptionalLiteral(child_element, "ADDRESSING-FORMAT", connection.getAddressingFormat())
2652
+ self.setChildElementOptionalRefType(child_element, "CAN-TP-CHANNEL-REF", connection.getCanTpChannelRef())
2653
+ self.setChildElementOptionalBooleanValue(child_element, "CANCELLATION", connection.getCancellation())
2654
+ self.setChildElementOptionalRefType(child_element, "DATA-PDU-REF", connection.getDataPduRef())
2655
+ self.setChildElementOptionalRefType(child_element, "FLOW-CONTROL-PDU-REF", connection.getFlowControlPduRef())
2656
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-BLOCK-SIZE", connection.getMaxBlockSize())
2657
+ self.setChildElementOptionalRefType(child_element, "MULTICAST-REF", connection.getMulticastRef())
2658
+ self.setChildElementOptionalBooleanValue(child_element, "PADDING-ACTIVATION", connection.getPaddingActivation())
2659
+ self.writeTpConnectionReceiverRefs(child_element, connection)
2660
+ self.setChildElementOptionalLiteral(child_element, "TA-TYPE", connection.getTaType())
2661
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-BR", connection.getTimeoutBr())
2662
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-BS", connection.getTimeoutBs())
2663
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CR", connection.getTimeoutCr())
2664
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CS", connection.getTimeoutCs())
2665
+ self.setChildElementOptionalRefType(child_element, "TP-SDU-REF", connection.getTpSduRef())
2666
+ self.setChildElementOptionalRefType(child_element, "TRANSMITTER-REF", connection.getTransmitterRef())
2667
+
2668
+ def writeCanTpConfigTpConnections(self, element: ET.Element, config: CanTpConfig):
2669
+ connections = config.getTpConnections()
2670
+ if len(connections) > 0:
2671
+ child_element = ET.SubElement(element, "TP-CONNECTIONS")
2672
+ for connection in connections:
2673
+ if isinstance(connection, CanTpConnection):
2674
+ self.writeCanTpConnection(child_element, connection)
2675
+ else:
2676
+ self.notImplemented("Unsupported TpConnection <%s>" % type(connection))
2677
+
2678
+ def writeCanTpEcu(self, element: ET.Element, tp_ecu: CanTpEcu):
2679
+ if tp_ecu is not None:
2680
+ child_element = ET.SubElement(element, "CAN-TP-ECU")
2681
+ self.setChildElementOptionalTimeValue(child_element, "CYCLE-TIME-MAIN-FUNCTION", tp_ecu.getCycleTimeMainFunction())
2682
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", tp_ecu.getEcuInstanceRef())
2683
+
2684
+ def writeCanTpConfigTpEcus(self, element: ET.Element, config: CanTpConfig):
2685
+ tp_ecus = config.getTpEcus()
2686
+ if len(tp_ecus) > 0:
2687
+ child_element = ET.SubElement(element, "TP-ECUS")
2688
+ for tp_ecu in tp_ecus:
2689
+ if isinstance(tp_ecu, CanTpEcu):
2690
+ self.writeCanTpEcu(child_element, tp_ecu)
2691
+ else:
2692
+ self.notImplemented("Unsupported TpEcu <%s>" % type(tp_ecu))
2693
+
2694
+ def writeCanTpNode(self, element: ET.Element, tp_node: CanTpNode):
2695
+ if tp_node is not None:
2696
+ child_element = ET.SubElement(element, "CAN-TP-NODE")
2697
+ self.writeIdentifiable(child_element, tp_node)
2698
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", tp_node.getConnectorRef())
2699
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-FC-WAIT", tp_node.getMaxFcWait())
2700
+ self.setChildElementOptionalTimeValue(child_element, "ST-MIN", tp_node.getStMin())
2701
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AR", tp_node.getTimeoutAr())
2702
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AS", tp_node.getTimeoutAs())
2703
+ self.setChildElementOptionalRefType(child_element, "TP-ADDRESS-REF", tp_node.getTpAddressRef())
2704
+
2705
+ def writeCanTpConfigTpNodes(self, element: ET.Element, config: CanTpConfig):
2706
+ tp_nodes = config.getTpNodes()
2707
+ if len(tp_nodes) > 0:
2708
+ child_element = ET.SubElement(element, "TP-NODES")
2709
+ for tp_node in tp_nodes:
2710
+ if isinstance(tp_node, CanTpNode):
2711
+ self.writeCanTpNode(child_element, tp_node)
2712
+ else:
2713
+ self.notImplemented("Unsupported TpNode <%s>" % type(tp_node))
2714
+
2423
2715
 
2424
2716
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2425
- self.logger.debug("CanTpConfig %s" % config.getShortName())
2717
+ self.logger.debug("Write CanTpConfig <%s>" % config.getShortName())
2426
2718
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2427
- self.writeIdentifiable(child_element, config)
2719
+ self.writeTpConfig(child_element, config)
2720
+ self.writeCanTpConfigTpAddresses(child_element, config)
2721
+ self.writeCanTpConfigTpChannels(child_element, config)
2722
+ self.writeCanTpConfigTpConnections(child_element, config)
2723
+ self.writeCanTpConfigTpEcus(child_element, config)
2724
+ self.writeCanTpConfigTpNodes(child_element, config)
2725
+
2726
+ def writeTpAddress(self, element: ET.Element, address: TpAddress):
2727
+ if address is not None:
2728
+ child_element = ET.SubElement(element, "TP-ADDRESS")
2729
+ self.writeIdentifiable(child_element, address)
2730
+ self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS", address.getTpAddress())
2731
+
2732
+ def writeLinTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
2733
+ addresses = config.getTpAddresses()
2734
+ if len(addresses) > 0:
2735
+ child_element = ET.SubElement(element, "TP-ADDRESSS")
2736
+ for address in addresses:
2737
+ if isinstance(address, TpAddress):
2738
+ self.writeTpAddress(child_element, address)
2739
+ else:
2740
+ self.notImplemented("Unsupported TpAddress <%s>" % type(address))
2741
+
2742
+ def writeLinTpConnection(self, element: ET.Element, connection: LinTpConnection):
2743
+ if connection is not None:
2744
+ child_element = ET.SubElement(element, "LIN-TP-CONNECTION")
2745
+ self.writeTpConnection(child_element, connection)
2746
+ self.setChildElementOptionalRefType(child_element, "DATA-PDU-REF", connection.getDataPduRef())
2747
+ self.setChildElementOptionalRefType(child_element, "FLOW-CONTROL-REF", connection.getFlowControlRef())
2748
+ self.setChildElementOptionalRefType(child_element, "LIN-TP-N-SDU-REF", connection.getLinTpNSduRef())
2749
+ self.writeTpConnectionReceiverRefs(child_element, connection)
2750
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AS", connection.getTimeoutAs())
2751
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CR", connection.getTimeoutCr())
2752
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CS", connection.getTimeoutCs())
2753
+ self.setChildElementOptionalRefType(child_element, "TRANSMITTER-REF", connection.getTransmitterRef())
2754
+
2755
+ def writeLinTpConfigTpConnections(self, element: ET.Element, config: LinTpConfig):
2756
+ connections = config.getTpConnections()
2757
+ if len(connections) > 0:
2758
+ child_element = ET.SubElement(element, "TP-CONNECTIONS")
2759
+ for connection in connections:
2760
+ if isinstance(connection, LinTpConnection):
2761
+ self.writeLinTpConnection(child_element, connection)
2762
+ else:
2763
+ self.notImplemented("Unsupported TpConnection <%s>" % type(connection))
2764
+
2765
+ def writeLinTpNode(self, element: ET.Element, tp_node: LinTpNode):
2766
+ if tp_node is not None:
2767
+ child_element = ET.SubElement(element, "LIN-TP-NODE")
2768
+ self.writeIdentifiable(child_element, tp_node)
2769
+ self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", tp_node.getConnectorRef())
2770
+ self.setChildElementOptionalBooleanValue(element, "DROP-NOT-REQUESTED-NAD", tp_node.getDropNotRequestedNad())
2771
+ self.setChildElementOptionalTimeValue(child_element, "P-2-MAX", tp_node.getP2Max())
2772
+ self.setChildElementOptionalTimeValue(child_element, "P-2-TIMING", tp_node.getP2Timing())
2773
+ self.setChildElementOptionalRefType(child_element, "TP-ADDRESS-REF", tp_node.getTpAddressRef())
2774
+
2775
+ def writeLinTpConfigTpNodes(self, element: ET.Element, config: LinTpConfig):
2776
+ tp_nodes = config.getTpNodes()
2777
+ if len(tp_nodes) > 0:
2778
+ child_element = ET.SubElement(element, "TP-NODES")
2779
+ for tp_node in tp_nodes:
2780
+ if isinstance(tp_node, LinTpNode):
2781
+ self.writeLinTpNode(child_element, tp_node)
2782
+ else:
2783
+ self.notImplemented("Unsupported TpNode <%s>" % type(tp_node))
2784
+
2785
+ def writeLinTpConfig(self, element: ET.Element, config: LinTpConfig):
2786
+ self.logger.debug("Write LinTpConfig <%s>" % config.getShortName())
2787
+ child_element = ET.SubElement(element, "LIN-TP-CONFIG")
2788
+ self.writeTpConfig(child_element, config)
2789
+ self.writeLinTpConfigTpAddresses(child_element, config)
2790
+ self.writeLinTpConfigTpConnections(child_element, config)
2791
+ self.writeLinTpConfigTpNodes(child_element, config)
2428
2792
 
2429
2793
  def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2430
2794
  ref_list = triggering.getFramePortRefs()
@@ -2666,7 +3030,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2666
3030
  def writeSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
2667
3031
  if bundle is not None:
2668
3032
  child_element = ET.SubElement(element, "SOCKET-CONNECTION-BUNDLE")
2669
- self.setReferable(child_element, bundle)
3033
+ self.writeReferrable(child_element, bundle)
2670
3034
  self.writeSocketConnectionBundleConnections(child_element, bundle)
2671
3035
  self.setChildElementOptionalRefType(child_element, "SERVER-PORT-REF", bundle.getServerPortRef())
2672
3036
 
@@ -2750,12 +3114,13 @@ class ARXMLWriter(AbstractARXMLWriter):
2750
3114
  self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
2751
3115
 
2752
3116
  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())
3117
+ if group is not None:
3118
+ child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUP")
3119
+ self.writeIdentifiable(child_element, group)
3120
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", group.getApplicationEndpointRef())
3121
+ self.setChildElementOptionalPositiveInteger(child_element, "EVENT-GROUP-IDENTIFIER", group.getEventGroupIdentifier())
3122
+ self.writeConsumedEventGroupRoutingGroupRefs(child_element, group)
3123
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", group.getSdClientConfig())
2759
3124
 
2760
3125
  def writeConsumedServiceInstanceConsumedEventGroups(self, element: ET.Element, instance: ConsumedServiceInstance):
2761
3126
  groups = instance.getConsumedEventGroups()
@@ -2768,11 +3133,12 @@ class ARXMLWriter(AbstractARXMLWriter):
2768
3133
  self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
2769
3134
 
2770
3135
  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())
3136
+ if instance is not None:
3137
+ child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCE")
3138
+ self.writeIdentifiable(child_element, instance)
3139
+ self.writeConsumedServiceInstanceConsumedEventGroups(child_element, instance)
3140
+ self.setChildElementOptionalRefType(child_element, "PROVIDED-SERVICE-INSTANCE-REF", instance.getProvidedServiceInstanceRef())
3141
+ self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", instance.getSdClientConfig())
2776
3142
 
2777
3143
  def writeSocketAddressApplicationEndpointConsumedServiceInstances(self, element: ET.Element, end_point: ApplicationEndpoint):
2778
3144
  instances = end_point.getConsumedServiceInstances()
@@ -2784,6 +3150,74 @@ class ARXMLWriter(AbstractARXMLWriter):
2784
3150
  else:
2785
3151
  self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
2786
3152
 
3153
+ def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
3154
+ if config is not None:
3155
+ child_element = ET.SubElement(element, key)
3156
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE", config.getInitialDelayMaxValue())
3157
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE", config.getInitialDelayMinValue())
3158
+ self.setChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY", config.getInitialRepetitionsBaseDelay())
3159
+ self.setChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX", config.getInitialRepetitionsMax())
3160
+
3161
+ def setSdServerConfig(self, element: ET.Element, key: str, config: SdServerConfig):
3162
+ if config is not None:
3163
+ child_element = ET.SubElement(element, key)
3164
+ self.setInitialSdDelayConfig(child_element, "INITIAL-OFFER-BEHAVIOR", config.getInitialOfferBehavior())
3165
+ self.setChildElementOptionalTimeValue(child_element, "OFFER-CYCLIC-DELAY", config.getOfferCyclicDelay())
3166
+ self.setRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY", config.getRequestResponseDelay())
3167
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MAJOR-VERSION", config.getServerServiceMajorVersion())
3168
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MINOR-VERSION", config.getServerServiceMinorVersion())
3169
+ self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
3170
+
3171
+ def writeEventHandler(self, element: ET.Element, handler: EventHandler):
3172
+ if handler is not None:
3173
+ child_element = ET.SubElement(element, "EVENT-HANDLER")
3174
+ self.writeIdentifiable(child_element, handler)
3175
+ self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", handler.getApplicationEndpointRef())
3176
+
3177
+ refs = handler.getConsumedEventGroupRefs()
3178
+ if len(refs) > 0:
3179
+ refs_tag = ET.SubElement(child_element, "CONSUMED-EVENT-GROUP-REFS")
3180
+ for ref in refs:
3181
+ self.setChildElementOptionalRefType(refs_tag, "CONSUMED-EVENT-GROUP-REF", ref)
3182
+
3183
+ self.setChildElementOptionalPositiveInteger(child_element, "MULTICAST-THRESHOLD", handler.getMulticastThreshold())
3184
+
3185
+ refs = handler.getRoutingGroupRefs()
3186
+ if len(refs) > 0:
3187
+ refs_tag = ET.SubElement(child_element, "ROUTING-GROUP-REFS")
3188
+ for ref in refs:
3189
+ self.setChildElementOptionalRefType(refs_tag, "ROUTING-GROUP-REF", ref)
3190
+ self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", handler.getSdServerConfig())
3191
+
3192
+ def writeProvidedServiceInstanceEventHandlers(self, element: ET.Element, instance: ProvidedServiceInstance):
3193
+ handlers = instance.getEventHandlers()
3194
+ if len(handlers) > 0:
3195
+ child_element = ET.SubElement(element, "EVENT-HANDLERS")
3196
+ for handler in handlers:
3197
+ if isinstance(handler, EventHandler):
3198
+ self.writeEventHandler(child_element, handler)
3199
+ else:
3200
+ self.notImplemented("Unsupported Event Handler <%s>" % type(handler))
3201
+
3202
+ def writeProvidedServiceInstance(self, element: ET.Element, instance: ProvidedServiceInstance):
3203
+ if instance is not None:
3204
+ child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCE")
3205
+ self.writeIdentifiable(child_element, instance)
3206
+ self.writeProvidedServiceInstanceEventHandlers(child_element, instance)
3207
+ self.setChildElementOptionalPositiveInteger(child_element, "INSTANCE-IDENTIFIER", instance.getInstanceIdentifier())
3208
+ self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", instance.getSdServerConfig())
3209
+ self.setChildElementOptionalPositiveInteger(child_element, "SERVICE-IDENTIFIER", instance.getServiceIdentifier())
3210
+
3211
+ def writeSocketAddressApplicationEndpointProvidedServiceInstance(self, element: ET.Element, end_point: ApplicationEndpoint):
3212
+ instances = end_point.getProvidedServiceInstances()
3213
+ if len(instances) > 0:
3214
+ child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCES")
3215
+ for instance in instances:
3216
+ if isinstance(instance, ProvidedServiceInstance):
3217
+ self.writeProvidedServiceInstance(child_element, instance)
3218
+ else:
3219
+ self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
3220
+
2787
3221
  def writeSocketAddressApplicationEndpoint(self, element: ET.Element, address: SocketAddress):
2788
3222
  end_point = address.getApplicationEndpoint()
2789
3223
  if end_point is not None:
@@ -2792,6 +3226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2792
3226
  self.writeSocketAddressApplicationEndpointConsumedServiceInstances(child_element, end_point)
2793
3227
  self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", end_point.getNetworkEndpointRef())
2794
3228
  self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
3229
+ self.writeSocketAddressApplicationEndpointProvidedServiceInstance(child_element, end_point)
2795
3230
  self.writeTransportProtocolConfiguration(child_element, end_point.getTpConfiguration())
2796
3231
 
2797
3232
  def writeSocketAddressMulticastConnectorRefs(self, element: ET.Element, address: SocketAddress):
@@ -2891,14 +3326,31 @@ class ARXMLWriter(AbstractARXMLWriter):
2891
3326
  self.writeCommunicationCluster(child_element, cluster)
2892
3327
  self.writeAbstractCanCluster(child_element, cluster)
2893
3328
 
3329
+ def writeMacMulticastGroup(self, element: ET.Element, group: MacMulticastGroup):
3330
+ if group is not None:
3331
+ child_element = ET.SubElement(element, "MAC-MULTICAST-GROUP")
3332
+ self.writeIdentifiable(child_element, group)
3333
+ self.setChildElementOptionalLiteral(child_element, "MAC-MULTICAST-ADDRESS", group.getMacMulticastAddress())
3334
+
3335
+ def writeEthernetClusterMacMulticastGroups(self, element: ET.Element, cluster: EthernetCluster):
3336
+ groups = cluster.getMacMulticastGroups()
3337
+ if len(groups) > 0:
3338
+ child_element = ET.SubElement(element, "MAC-MULTICAST-GROUPS")
3339
+ for group in groups:
3340
+ if isinstance(group, MacMulticastGroup):
3341
+ self.writeMacMulticastGroup(child_element, group)
3342
+ else:
3343
+ self.notImplemented("Unsupported assigned data type <%s>" % type(group))
3344
+
2894
3345
  def writeEthernetCluster(self, element: ET.Element, cluster: EthernetCluster):
2895
3346
  self.logger.debug("Set EthernetCluster %s" % cluster.getShortName())
2896
3347
  child_element = ET.SubElement(element, "ETHERNET-CLUSTER")
2897
- self.setARElement(child_element, cluster)
3348
+ self.writeARElement(child_element, cluster)
2898
3349
 
2899
3350
  child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-VARIANTS")
2900
3351
  child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-CONDITIONAL")
2901
3352
  self.writeCommunicationCluster(child_element, cluster)
3353
+ self.writeEthernetClusterMacMulticastGroups(child_element, cluster)
2902
3354
 
2903
3355
  def writeCanFrame(self, element: ET.Element, frame: CanFrame):
2904
3356
  self.logger.debug("Write CanFrame %s" % frame.getShortName())
@@ -2916,10 +3368,14 @@ class ARXMLWriter(AbstractARXMLWriter):
2916
3368
  def writeIPduPort(self, element: ET.Element, port: IPduPort):
2917
3369
  child_element = ET.SubElement(element, "I-PDU-PORT")
2918
3370
  self.writeCommConnectorPort(child_element, port)
3371
+ self.setChildElementOptionalPositiveInteger(child_element, "KEY-ID", port.getKeyId())
3372
+ self.setChildElementOptionalBooleanValue(child_element, "RX-SECURITY-VERIFICATION", port.getRxSecurityVerification())
3373
+ self.setChildElementOptionalBooleanValue(child_element, "USE-AUTH-DATA-FRESHNESS", port.getUseAuthDataFreshness())
2919
3374
 
2920
3375
  def writeISignalPort(self, element: ET.Element, port: ISignalPort):
2921
3376
  child_element = ET.SubElement(element, "I-SIGNAL-PORT")
2922
3377
  self.writeCommConnectorPort(child_element, port)
3378
+ self.setChildElementOptionalTimeValue(child_element, "TIMEOUT", port.getTimeout())
2923
3379
 
2924
3380
  def writeCommunicationConnectorEcuCommPortInstances(self, element: ET.Element, connector: CommunicationConnector):
2925
3381
  self.logger.debug("write EcuCommPortInstances of CommunicationConnector %s" % connector.getShortName())
@@ -2934,17 +3390,156 @@ class ARXMLWriter(AbstractARXMLWriter):
2934
3390
  elif isinstance(port, ISignalPort):
2935
3391
  self.writeISignalPort(instances_tag, port)
2936
3392
  else:
2937
- self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
3393
+ self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
3394
+
3395
+ def writeCommunicationController(self, element: ET.Element, controller: CommunicationController):
3396
+ self.setChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED", controller.getWakeUpByControllerSupported())
3397
+
3398
+ def setCanControllerFdConfiguration(self, element: ET.Element, key: str, configuration: CanControllerFdConfiguration):
3399
+ if configuration is not None:
3400
+ child_element = ET.SubElement(element, key)
3401
+ #TODO: need to implemented
3402
+
3403
+ def setCanControllerFdConfigurationRequirements(self, element: ET.Element, key: str, requirements: CanControllerFdConfigurationRequirements):
3404
+ if requirements is not None:
3405
+ child_element = ET.SubElement(element, key)
3406
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3407
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3408
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3409
+ self.setChildElementOptionalTimeValue(child_element, "MAX-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMaxTrcvDelayCompensationOffset())
3410
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3411
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3412
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3413
+ self.setChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMinTrcvDelayCompensationOffset())
3414
+ self.setChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH", requirements.getTxBitRateSwitch())
3415
+
3416
+ def writeAbstractCanCommunicationControllerAttributes(self, element: ET.Element, attributes: AbstractCanCommunicationControllerAttributes):
3417
+ self.setCanControllerFdConfiguration(element, "CAN-CONTROLLER-FD-CONFIGURATION", attributes.getCanControllerFdAttributes())
3418
+ self.setCanControllerFdConfigurationRequirements(element, "CAN-CONTROLLER-FD-REQUIREMENTS", attributes.getCanControllerFdRequirements())
3419
+
3420
+ def writeCanControllerConfigurationRequirements(self, element: ET.Element, requirements: CanControllerConfigurationRequirements):
3421
+ if requirements is not None:
3422
+ child_element = ET.SubElement(element, "CAN-CONTROLLER-CONFIGURATION-REQUIREMENTS")
3423
+ self.writeAbstractCanCommunicationControllerAttributes(child_element, requirements)
3424
+ self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
3425
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
3426
+ self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
3427
+ self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
3428
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
3429
+ self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
3430
+
3431
+ def writeAbstractCanCommunicationControllerCanControllerAttributes(self, element: ET.SubElement, controller: AbstractCanCommunicationController):
3432
+ attributes = controller.getCanControllerAttributes()
3433
+ if attributes is not None:
3434
+ child_element = ET.SubElement(element, "CAN-CONTROLLER-ATTRIBUTES")
3435
+ if isinstance(attributes, CanControllerConfigurationRequirements):
3436
+ self.writeCanControllerConfigurationRequirements(child_element, attributes)
3437
+ else:
3438
+ self.notImplemented("Unsupported CanControllerAttributes <%s>" % type(attributes))
3439
+
3440
+ def writeAbstractCanCommunicationController(self, element: ET.Element, controller: AbstractCanCommunicationController):
3441
+ self.writeCommunicationController(element, controller)
3442
+ self.writeAbstractCanCommunicationControllerCanControllerAttributes(element, controller)
2938
3443
 
2939
3444
  def writeCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
2940
3445
  child_element = ET.SubElement(element, "CAN-COMMUNICATION-CONTROLLER")
2941
3446
  self.logger.debug("Write CanCommunicationController %s" % controller.getShortName())
2942
3447
  self.writeIdentifiable(child_element, controller)
3448
+ variants_tag = ET.SubElement(child_element, "CAN-COMMUNICATION-CONTROLLER-VARIANTS")
3449
+ cond_tag = ET.SubElement(variants_tag, "CAN-COMMUNICATION-CONTROLLER-CONDITIONAL")
3450
+ self.writeAbstractCanCommunicationController(cond_tag, controller)
3451
+
3452
+ def writeCouplingPortSchedulerCouplingPortStructuralElement(self, element: ET.Element, item: CouplingPortStructuralElement):
3453
+ self.writeIdentifiable(element, item)
3454
+
3455
+ def writeCouplingPortFifo(self, element: ET.Element, fifo: CouplingPortFifo):
3456
+ if fifo is not None:
3457
+ child_element = ET.SubElement(element, "COUPLING-PORT-FIFO")
3458
+ self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, fifo)
3459
+
3460
+ def writeCouplingPortScheduler(self, element: ET.Element, scheduler: CouplingPortScheduler):
3461
+ if scheduler is not None:
3462
+ child_element = ET.SubElement(element, "COUPLING-PORT-SCHEDULER")
3463
+ self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, scheduler)
3464
+ self.setChildElementOptionalLiteral(child_element, "PORT-SCHEDULER", scheduler.getPortScheduler())
3465
+
3466
+ def writeCouplingPortDetailsCouplingPortStructuralElements(self, element: ET.Element, details: CouplingPortDetails):
3467
+ items = details.getCouplingPortStructuralElements()
3468
+ if len(items) > 0:
3469
+ child_element = ET.SubElement(element, "COUPLING-PORT-STRUCTURAL-ELEMENTS")
3470
+ for item in items:
3471
+ if isinstance(item, CouplingPortFifo):
3472
+ self.writeCouplingPortFifo(child_element, item)
3473
+ elif isinstance(item, CouplingPortScheduler):
3474
+ self.writeCouplingPortScheduler(child_element, item)
3475
+ else:
3476
+ self.notImplemented("Unsupported CouplingPortStructuralElement <%s>" % type(item))
3477
+
3478
+ def writeEthernetPriorityRegeneration(self, element: ET.Element, regeneration: EthernetPriorityRegeneration):
3479
+ if regeneration is not None:
3480
+ child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATION")
3481
+ self.writeReferrable(child_element, regeneration)
3482
+ self.setChildElementOptionalPositiveInteger(child_element, "INGRESS-PRIORITY", regeneration.getIngressPriority())
3483
+ self.setChildElementOptionalPositiveInteger(child_element, "REGENERATED-PRIORITY", regeneration.getRegeneratedPriority())
3484
+
3485
+ def writeCouplingPortDetailsEthernetPriorityRegenerations(self, element: ET.Element, details: CouplingPortDetails):
3486
+ regenerations = details.getEthernetPriorityRegenerations()
3487
+ if len(regenerations) > 0:
3488
+ child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATIONS")
3489
+ for regeneration in regenerations:
3490
+ if isinstance(regeneration, EthernetPriorityRegeneration):
3491
+ self.writeEthernetPriorityRegeneration(child_element, regeneration)
3492
+ else:
3493
+ self.notImplemented("Unsupported EthernetPriorityRegeneration <%s>" % type(regeneration))
3494
+
3495
+ def setCouplingPortDetails(self, element: ET.Element, key: str, details: CouplingPortDetails):
3496
+ if details is not None:
3497
+ child_element = ET.SubElement(element, key)
3498
+ self.writeCouplingPortDetailsCouplingPortStructuralElements(child_element, details)
3499
+ self.writeCouplingPortDetailsEthernetPriorityRegenerations(child_element, details)
3500
+ self.setChildElementOptionalRefType(child_element, "LAST-EGRESS-SCHEDULER-REF", details.getLastEgressSchedulerRef())
3501
+
3502
+ def writeVlanMembership(self, element: ET.Element, membership: VlanMembership):
3503
+ if membership is not None:
3504
+ child_element = ET.SubElement(element, "VLAN-MEMBERSHIP")
3505
+ self.setChildElementOptionalLiteral(child_element, "SEND-ACTIVITY", membership.getSendActivity())
3506
+ self.setChildElementOptionalRefType(child_element, "VLAN-REF", membership.getVlanRef())
3507
+
3508
+ def writeCouplingPortVlanMemberships(self, element: ET.Element, port: CouplingPort):
3509
+ memberships = port.getVlanMemberships()
3510
+ if len(memberships) > 0:
3511
+ child_element = ET.SubElement(element, "VLAN-MEMBERSHIPS")
3512
+ for membership in memberships:
3513
+ if isinstance(membership, VlanMembership):
3514
+ self.writeVlanMembership(child_element, membership)
3515
+ else:
3516
+ self.notImplemented("Unsupported VlanMembership <%s>" % type(membership))
3517
+
3518
+ def writeCouplingPort(self, element: ET.Element, port: CouplingPort):
3519
+ child_element = ET.SubElement(element, "COUPLING-PORT")
3520
+ self.writeIdentifiable(child_element, port)
3521
+ self.setCouplingPortDetails(child_element, "COUPLING-PORT-DETAILS", port.getCouplingPortDetails())
3522
+ self.setChildElementOptionalLiteral(child_element, "MAC-LAYER-TYPE", port.getMacAddressVlanAssignments())
3523
+ self.writeCouplingPortVlanMemberships(child_element, port)
3524
+
3525
+ def writeEthernetCommunicationControllerCouplingPorts(self, element: ET.Element, controller: EthernetCommunicationController):
3526
+ ports = controller.getCouplingPorts()
3527
+ if len(ports) > 0:
3528
+ child_element = ET.SubElement(element, "COUPLING-PORTS")
3529
+ for port in ports:
3530
+ if isinstance(port, CouplingPort):
3531
+ self.writeCouplingPort(child_element, port)
3532
+ else:
3533
+ self.notImplemented("Unsupported Coupling Port <%s>" % type(port))
2943
3534
 
2944
3535
  def writeEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
2945
3536
  child_element = ET.SubElement(element, "ETHERNET-COMMUNICATION-CONTROLLER")
2946
3537
  self.logger.debug("Write EthernetCommunicationController %s" % controller.getShortName())
2947
3538
  self.writeIdentifiable(child_element, controller)
3539
+ variants_tag = ET.SubElement(child_element, "ETHERNET-COMMUNICATION-CONTROLLER-VARIANTS")
3540
+ cond_tag = ET.SubElement(variants_tag, "ETHERNET-COMMUNICATION-CONTROLLER-CONDITIONAL")
3541
+ self.writeCommunicationController(cond_tag, controller)
3542
+ self.writeEthernetCommunicationControllerCouplingPorts(cond_tag, controller)
2948
3543
 
2949
3544
  def writeEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
2950
3545
  controllers = instance.getCommControllers()
@@ -2964,14 +3559,24 @@ class ARXMLWriter(AbstractARXMLWriter):
2964
3559
  self.writeIdentifiable(element, connector)
2965
3560
  self.setChildElementOptionalRefType(element, "COMM-CONTROLLER-REF", connector.getCommControllerRef())
2966
3561
  self.writeCommunicationConnectorEcuCommPortInstances(element, connector)
3562
+ self.setChildElementOptionalLiteral(element, "PNC-GATEWAY-TYPE", connector.getPncGatewayType())
2967
3563
 
2968
3564
  def writeCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2969
3565
  self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
2970
3566
  self.writeCommunicationConnector(element, connector)
2971
3567
 
3568
+ def writeEthernetCommunicationConnectorNetworkEndpointRefs(self, element: ET.Element, connector: EthernetCommunicationConnector):
3569
+ refs = connector.getNetworkEndpointRefs()
3570
+ if len(refs) > 0:
3571
+ child_element = ET.SubElement(element, "NETWORK-ENDPOINT-REFS")
3572
+ for ref in refs:
3573
+ self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", ref)
3574
+
2972
3575
  def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
2973
3576
  self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
2974
3577
  self.writeCommunicationConnector(element, connector)
3578
+ self.setChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT", connector.getMaximumTransmissionUnit())
3579
+ self.writeEthernetCommunicationConnectorNetworkEndpointRefs(element, connector)
2975
3580
 
2976
3581
  def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
2977
3582
  self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
@@ -2994,16 +3599,25 @@ class ARXMLWriter(AbstractARXMLWriter):
2994
3599
  else:
2995
3600
  self._raiseError("Unsupported Communication connector <%s>" % type(connector))
2996
3601
 
3602
+ def writeEcuInstanceAssociatedComIPduGroupRefs(self, element: ET.Element, instance: EcuInstance):
3603
+ refs = instance.getAssociatedComIPduGroupRefs()
3604
+ if len(refs) > 0:
3605
+ child_element = ET.SubElement(element, "ASSOCIATED-COM-I-PDU-GROUP-REFS")
3606
+ for ref in refs:
3607
+ self.setChildElementOptionalRefType(child_element, "ASSOCIATED-COM-I-PDU-GROUP-REF", ref)
3608
+
2997
3609
  def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
2998
3610
  self.logger.debug("EcuInstance %s" % instance.getShortName())
2999
3611
  child_element = ET.SubElement(element, "ECU-INSTANCE")
3000
3612
  self.writeIdentifiable(child_element, instance)
3613
+ self.writeEcuInstanceAssociatedComIPduGroupRefs(child_element, instance)
3001
3614
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-GW-TIME-BASE", instance.getComConfigurationGwTimeBase())
3002
3615
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-RX-TIME-BASE", instance.getComConfigurationRxTimeBase())
3003
3616
  self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-TX-TIME-BASE", instance.getComConfigurationTxTimeBase())
3004
3617
  self.setChildElementOptionalBooleanValue(child_element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION", instance.getComEnableMDTForCyclicTransmission())
3005
3618
  self.writeEcuInstanceCommControllers(child_element, instance)
3006
3619
  self.writeEcuInstanceConnectors(child_element, instance)
3620
+ self.setChildElementOptionalIntegerValue(child_element, "DIAGNOSTIC-ADDRESS", instance.getDiagnosticAddress())
3007
3621
  self.setChildElementOptionalBooleanValue(child_element, "SLEEP-MODE-SUPPORTED", instance.getSleepModeSupported())
3008
3622
  self.setChildElementOptionalBooleanValue(child_element, "WAKE-UP-OVER-BUS-SUPPORTED", instance.getWakeUpOverBusSupported())
3009
3623
 
@@ -3060,11 +3674,52 @@ class ARXMLWriter(AbstractARXMLWriter):
3060
3674
  else:
3061
3675
  self.notImplemented("Unsupported Sw Mapping %s" % type(sw_mapping))
3062
3676
 
3677
+ def writeEcuMapping(self, element: ET.Element, mapping: ECUMapping):
3678
+ self.logger.debug("Write ECUMapping <%s>" % mapping.getShortName())
3679
+ if mapping is not None:
3680
+ child_element = ET.SubElement(element, "ECU-MAPPING")
3681
+ self.writeIdentifiable(child_element, mapping)
3682
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", mapping.getEcuInstanceRef())
3683
+ self.setChildElementOptionalRefType(child_element, "ECU-REF", mapping.getEcuRef())
3684
+
3685
+ def writeSystemMappingEcuResourceMappings(self, element: ET.Element, mapping: SystemMapping):
3686
+ ecu_resource_mappings = mapping.getEcuResourceMappings()
3687
+ if len(ecu_resource_mappings) > 0:
3688
+ child_element = ET.SubElement(element, "ECU-RESOURCE-MAPPINGS")
3689
+ for ecu_resource_mapping in ecu_resource_mappings:
3690
+ if isinstance(ecu_resource_mapping, ECUMapping):
3691
+ self.writeEcuMapping(child_element, ecu_resource_mapping)
3692
+ else:
3693
+ self.notImplemented("Unsupported Sw Mapping %s" % type(ecu_resource_mapping))
3694
+
3695
+ def writeSwcToImplMapping(self, element: ET.Element, mapping: SwcToImplMapping):
3696
+ if mapping is not None:
3697
+ child_element = ET.SubElement(element, "SWC-TO-IMPL-MAPPING")
3698
+ self.writeIdentifiable(child_element, mapping)
3699
+ self.setChildElementOptionalRefType(child_element, "COMPONENT-IMPLEMENTATION-REF", mapping.getComponentImplementationRef())
3700
+ irefs = mapping.getComponentIRefs()
3701
+ if len(irefs) > 0:
3702
+ irefs_tag = ET.SubElement(child_element, "COMPONENT-IREFS")
3703
+ for iref in irefs:
3704
+ self.setComponentInSystemInstanceRef(irefs_tag, "COMPONENT-IREF", iref)
3705
+
3706
+ def writeSystemMappingSwImplMappings(self, element: ET.Element, mapping: SystemMapping):
3707
+ sw_impl_mappings = mapping.getSwImplMappings()
3708
+ if len(sw_impl_mappings) > 0:
3709
+ child_element = ET.SubElement(element, "SW-IMPL-MAPPINGS")
3710
+ for sw_impl_mapping in sw_impl_mappings:
3711
+ if isinstance(sw_impl_mapping, SwcToImplMapping):
3712
+ self.writeSwcToImplMapping(child_element, sw_impl_mapping)
3713
+ else:
3714
+ self.notImplemented("Unsupported SwImplMapping <%s>" % type(sw_impl_mapping))
3715
+
3063
3716
  def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
3064
- self.logger.debug("Write SystemMapping %s" % mapping.getShortName())
3717
+ self.logger.debug("Write SystemMapping <%s>" % mapping.getShortName())
3065
3718
  child_element = ET.SubElement(element, "SYSTEM-MAPPING")
3066
3719
  self.writeIdentifiable(child_element, mapping)
3067
3720
  self.writeSystemMappingDataMappings(child_element, mapping)
3721
+ self.writeSystemMappingEcuResourceMappings(child_element, mapping)
3722
+ self.writeSystemMappingSwImplMappings(child_element, mapping)
3068
3723
  self.writeSystemMappingSwMappings(child_element, mapping)
3069
3724
 
3070
3725
  def writeSystemMappings(self, element: ET.Element, system: System):
@@ -3086,20 +3741,21 @@ class ARXMLWriter(AbstractARXMLWriter):
3086
3741
  self.writeIdentifiable(child_element, prototype)
3087
3742
  self.setChildElementOptionalRefType(child_element, "FLAT-MAP-REF", prototype.getFlatMapRef())
3088
3743
  self.setChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF", prototype.getSoftwareCompositionTRef())
3744
+
3745
+ def writeSystemFibexElementRefs(self, element: ET.Element, system: System):
3746
+ refs = system.getFibexElementRefs()
3747
+ if len(refs) > 0:
3748
+ fibex_elements_tag = ET.SubElement(element, "FIBEX-ELEMENTS")
3749
+ for ref in refs:
3750
+ child_element = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
3751
+ self.setChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF", ref)
3089
3752
 
3090
3753
  def writeSystem(self, element: ET.Element, system: System):
3091
3754
  self.logger.debug("Write System %s" % system.getShortName())
3092
3755
  child_element = ET.SubElement(element, "SYSTEM")
3093
- self.setARElement(child_element, system)
3094
-
3756
+ self.writeARElement(child_element, system)
3095
3757
  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
-
3758
+ self.writeSystemFibexElementRefs(child_element, system)
3103
3759
  self.writeSystemMappings(child_element, system)
3104
3760
  self.writeRootSwCompositionPrototype(child_element, system)
3105
3761
  self.setChildElementOptionalRevisionLabelString(child_element, "SYSTEM-VERSION", system.getSystemVersion())
@@ -3107,10 +3763,13 @@ class ARXMLWriter(AbstractARXMLWriter):
3107
3763
  def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
3108
3764
  self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
3109
3765
  child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
3110
- self.setARElement(child_element, dimension)
3111
- self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3766
+ self.writeARElement(child_element, dimension)
3112
3767
  self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
3768
+ self.setChildElementOptionalNumericalValue(child_element, "LUMINOUS-INTENSITY-EXP", dimension.getLuminousIntensityExp())
3769
+ self.setChildElementOptionalNumericalValue(child_element, "MASS-EXP", dimension.getMassExp())
3770
+ self.setChildElementOptionalNumericalValue(child_element, "TEMPERATURE-EXP", dimension.getTemperatureExp())
3113
3771
  self.setChildElementOptionalNumericalValue(child_element, "TIME-EXP", dimension.getTimeExp())
3772
+ self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3114
3773
 
3115
3774
  def setFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
3116
3775
  self.logger.debug("Set FlatInstanceDescriptor %s" % desc.getShortName())
@@ -3132,7 +3791,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3132
3791
  def writeFlatMap(self, element: ET.Element, map: FlatMap):
3133
3792
  self.logger.debug("Set FlatMap %s" % map.getShortName())
3134
3793
  child_element = ET.SubElement(element, "FLAT-MAP")
3135
- self.setARElement(child_element, map)
3794
+ self.writeARElement(child_element, map)
3136
3795
  self.writeFlatMapInstances(child_element, map)
3137
3796
 
3138
3797
  def setDataPrototypeMapping(self, element: ET.Element, mapping: DataPrototypeMapping):
@@ -3165,7 +3824,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3165
3824
  def writePortInterfaceMappingSet(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
3166
3825
  self.logger.debug("Set PortInterfaceMappingSet %s" % mapping_set.getShortName())
3167
3826
  child_element = ET.SubElement(element, "PORT-INTERFACE-MAPPING-SET")
3168
- self.setARElement(child_element, mapping_set)
3827
+ self.writeARElement(child_element, mapping_set)
3169
3828
  self.writePortInterfaceMappings(child_element, mapping_set)
3170
3829
 
3171
3830
  def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
@@ -3173,14 +3832,28 @@ class ARXMLWriter(AbstractARXMLWriter):
3173
3832
  mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
3174
3833
  for mapping in mappings:
3175
3834
  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)
3835
+ self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.getSourceSignalRef())
3836
+ self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.getTargetSignalRef())
3837
+
3838
+ def setTargetIPduRef(self, element: ET.Element, key: str, i_pdu_ref: TargetIPduRef):
3839
+ if i_pdu_ref is not None:
3840
+ child_element = ET.SubElement(element, key)
3841
+ self.setChildElementOptionalRefType(child_element, "TARGET-I-PDU-REF", i_pdu_ref.getTargetIPdu())
3842
+
3843
+ def setIPduMappings(self, element: ET.Element, mappings: List[IPduMapping]):
3844
+ if len(mappings) > 0:
3845
+ mappings_tag = ET.SubElement(element, "I-PDU-MAPPINGS")
3846
+ for mapping in mappings:
3847
+ child_element = ET.SubElement(mappings_tag, "I-PDU-MAPPING")
3848
+ self.setChildElementOptionalRefType(child_element, "SOURCE-I-PDU-REF", mapping.getSourceIpduRef())
3849
+ self.setTargetIPduRef(child_element, "TARGET-I-PDU", mapping.getTargetIPdu())
3178
3850
 
3179
3851
  def writeGateway(self, element: ET.Element, gateway: Gateway):
3180
3852
  self.logger.debug("Gateway %s" % gateway.getShortName())
3181
3853
  child_element = ET.SubElement(element, "GATEWAY")
3182
3854
  self.writeIdentifiable(child_element, gateway)
3183
3855
  self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
3856
+ self.setIPduMappings(child_element, gateway.getIPduMappings())
3184
3857
  self.setISignalMappings(child_element, gateway.getSignalMappings())
3185
3858
 
3186
3859
  def writeISignal(self, element: ET.Element, signal: ISignal):
@@ -3371,55 +4044,227 @@ class ARXMLWriter(AbstractARXMLWriter):
3371
4044
  self.setChildElementOptionalRefType(child_element, "PHYSICAL-REQUEST-REF", connection.getPhysicalRequestRef())
3372
4045
  self.setChildElementOptionalRefType(child_element, "RESPONSE-REF", connection.getResponseOnEventRef())
3373
4046
 
4047
+ def writeDiagnosticServiceTableDiagnosticConnectionRefs(self, element: ET.Element, table: DiagnosticServiceTable):
4048
+ refs = table.getDiagnosticConnectionRefs()
4049
+ if len(refs) > 0:
4050
+ refs_tag = ET.SubElement(element, "DIAGNOSTIC-CONNECTIONS")
4051
+ for ref in refs:
4052
+ child_element = ET.SubElement(refs_tag, "DIAGNOSTIC-CONNECTION-REF-CONDITIONAL")
4053
+ self.setChildElementOptionalRefType(child_element, "DIAGNOSTIC-CONNECTION-REF", ref)
4054
+
3374
4055
  def writeDiagnosticServiceTable(self, element: ET.Element, table: DiagnosticServiceTable):
3375
4056
  self.logger.debug("Write DiagnosticServiceTable %s" % table.getShortName())
3376
4057
  child_element = ET.SubElement(element, "DIAGNOSTIC-SERVICE-TABLE")
3377
4058
  self.writeIdentifiable(child_element, table)
4059
+ self.writeDiagnosticServiceTableDiagnosticConnectionRefs(child_element, table)
4060
+ self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", table.getEcuInstanceRef())
3378
4061
 
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)
4062
+ def writePdu(self, element: ET.Element, pdu: Pdu):
4063
+ self.writeIdentifiable(element, pdu)
4064
+ self.setChildElementOptionalBooleanValue(element, "HAS-DYNAMIC-LENGTH", pdu.getHasDynamicLength())
4065
+ self.setChildElementOptionalNumericalValue(element, "LENGTH", pdu.getLength())
3383
4066
 
3384
- def writeUserDefinedIPdu(self, element: ET.Element, i_pdu: UserDefinedIPdu):
3385
- self.logger.debug("Write UserDefinedIPdu %s" % i_pdu.getShortName())
4067
+ def writeIPdu(self, element: ET.Element, pdu: IPdu):
4068
+ self.writePdu(element, pdu)
4069
+
4070
+ def writeSegmentPosition(self, element: ET.Element, position: SegmentPosition):
4071
+ if position is not None:
4072
+ child_element = ET.SubElement(element, "SEGMENT-POSITION")
4073
+ self.setChildElementOptionalLiteral(child_element, "SEGMENT-BYTE-ORDER", position.getSegmentByteOrder())
4074
+ self.setChildElementOptionalIntegerValue(child_element, "SEGMENT-LENGTH", position.getSegmentLength())
4075
+ self.setChildElementOptionalIntegerValue(child_element, "SEGMENT-POSITION", position.getSegmentPosition())
4076
+
4077
+ def writeMultiplexedPartSegmentPositions(self, element: ET.Element, part: MultiplexedPart):
4078
+ positions = part.getSegmentPositions()
4079
+ if len(positions) > 0:
4080
+ child_element = ET.SubElement(element, "SEGMENT-POSITIONS")
4081
+ for position in positions:
4082
+ if isinstance(position, SegmentPosition):
4083
+ self.writeSegmentPosition(child_element, position)
4084
+ else:
4085
+ self.notImplemented("Unsupported DynamicPart <%s>" % type(position))
4086
+
4087
+ def writeMultiplexedPart(self, element: ET.Element, part: MultiplexedPart):
4088
+ self.writeMultiplexedPartSegmentPositions(element, part)
4089
+
4090
+ def writeDynamicPartAlternative(self, element: ET.Element, alternative: DynamicPartAlternative):
4091
+ if alternative is not None:
4092
+ child_element = ET.SubElement(element, "DYNAMIC-PART-ALTERNATIVE")
4093
+ self.setChildElementOptionalRefType(child_element, "I-PDU-REF", alternative.getIPduRef())
4094
+ self.setChildElementOptionalBooleanValue(child_element, "INITIAL-DYNAMIC-PART", alternative.getInitialDynamicPart())
4095
+ self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-CODE", alternative.getSelectorFieldCode())
4096
+
4097
+ def writeDynamicPartDynamicPartAlternatives(self, element: ET.Element, part: DynamicPart):
4098
+ alternatives = part.getDynamicPartAlternatives()
4099
+ if len(alternatives) > 0:
4100
+ child_element = ET.SubElement(element, "DYNAMIC-PART-ALTERNATIVES")
4101
+ for alternative in alternatives:
4102
+ if isinstance(alternative, DynamicPartAlternative):
4103
+ self.writeDynamicPartAlternative(child_element, alternative)
4104
+ else:
4105
+ self.notImplemented("Unsupported DynamicPartAlternative <%s>" % type(alternative))
4106
+
4107
+ def writeDynamicPart(self, element: ET.Element, part: DynamicPart):
4108
+ child_element = ET.SubElement(element, "DYNAMIC-PART")
4109
+ self.writeMultiplexedPart(child_element, part)
4110
+ self.writeDynamicPartDynamicPartAlternatives(child_element, part)
4111
+
4112
+ def writeMultiplexedIPduDynamicParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
4113
+ part = ipdu.getDynamicPart()
4114
+ if part is not None:
4115
+ child_element = ET.SubElement(element, "DYNAMIC-PARTS")
4116
+ if isinstance(part, DynamicPart):
4117
+ self.writeDynamicPart(child_element, part)
4118
+ else:
4119
+ self.notImplemented("Unsupported DynamicPart <%s>" % type(part))
4120
+
4121
+ def writeStaticPart(self, element: ET.Element, part: StaticPart):
4122
+ child_element = ET.SubElement(element, "STATIC-PART")
4123
+ self.writeMultiplexedPart(child_element, part)
4124
+ self.setChildElementOptionalRefType(child_element, "I-PDU-REF", part.getIPduRef())
4125
+
4126
+ def writeMultiplexedIPduStaticParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
4127
+ part = ipdu.getStaticPart()
4128
+ if part is not None:
4129
+ child_element = ET.SubElement(element, "STATIC-PARTS")
4130
+ if isinstance(part, StaticPart):
4131
+ self.writeStaticPart(child_element, part)
4132
+ else:
4133
+ self.notImplemented("Unsupported StaticPart <%s>" % type(part))
4134
+
4135
+ def writeMultiplexedIPdu(self, element: ET.Element, ipdu: MultiplexedIPdu):
4136
+ self.logger.debug("Write MultiplexedIPdu <%s>" % ipdu.getShortName())
4137
+ child_element = ET.SubElement(element, "MULTIPLEXED-I-PDU")
4138
+ self.writeIPdu(child_element, ipdu)
4139
+ self.writeMultiplexedIPduDynamicParts(child_element, ipdu)
4140
+ self.setChildElementOptionalLiteral(child_element, "SELECTOR-FIELD-BYTE-ORDER", ipdu.getSelectorFieldByteOrder())
4141
+ self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-LENGTH", ipdu.getSelectorFieldLength())
4142
+ self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-START-POSITION", ipdu.getSelectorFieldStartPosition())
4143
+ self.writeMultiplexedIPduStaticParts(child_element, ipdu)
4144
+ self.setChildElementOptionalLiteral(child_element, "TRIGGER-MODE", ipdu.getTriggerMode())
4145
+ self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", ipdu.getUnusedBitPattern())
4146
+
4147
+ def writeUserDefinedIPdu(self, element: ET.Element, ipdu: UserDefinedIPdu):
4148
+ self.logger.debug("Write UserDefinedIPdu <%s>" % ipdu.getShortName())
3386
4149
  child_element = ET.SubElement(element, "USER-DEFINED-I-PDU")
3387
- self.writeIdentifiable(child_element, i_pdu)
4150
+ self.writeIPdu(child_element, ipdu)
4151
+ self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", ipdu.getCddType())
3388
4152
 
3389
4153
  def writeUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
3390
- self.logger.debug("Write UserDefinedPdu %s" % pdu.getShortName())
4154
+ self.logger.debug("Write UserDefinedPdu <%s>" % pdu.getShortName())
3391
4155
  child_element = ET.SubElement(element, "USER-DEFINED-PDU")
3392
- self.writeIdentifiable(child_element, pdu)
4156
+ self.writePdu(child_element, pdu)
4157
+ self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", pdu.getCddType())
3393
4158
 
3394
4159
  def writeGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
3395
- self.logger.debug("Write GeneralPurposePdu %s" % pdu.getShortName())
4160
+ self.logger.debug("Write GeneralPurposePdu <%s>" % pdu.getShortName())
3396
4161
  child_element = ET.SubElement(element, "GENERAL-PURPOSE-PDU")
3397
- self.writeIdentifiable(child_element, pdu)
4162
+ self.writePdu(child_element, pdu)
3398
4163
 
3399
4164
  def writeGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
3400
- self.logger.debug("Write GeneralPurposeIPdu %s" % i_pdu.getShortName())
4165
+ self.logger.debug("Write GeneralPurposeIPdu <%s>" % i_pdu.getShortName())
3401
4166
  child_element = ET.SubElement(element, "GENERAL-PURPOSE-I-PDU")
3402
- self.writeIdentifiable(child_element, i_pdu)
4167
+ self.writeIPdu(child_element, i_pdu)
4168
+
4169
+ def writeSecureCommunicationAuthenticationProps(self, element: ET.Element, props: SecureCommunicationAuthenticationProps):
4170
+ chile_element = ET.SubElement(element, "SECURE-COMMUNICATION-AUTHENTICATION-PROPS")
4171
+ self.writeIdentifiable(chile_element, props)
4172
+ self.setChildElementOptionalLiteral(chile_element, "AUTH-ALGORITHM", props.getAuthAlgorithm())
4173
+ self.setChildElementOptionalPositiveInteger(chile_element, "AUTH-INFO-TX-LENGTH", props.getAuthInfoTxLength())
4174
+
4175
+ def writeSecureCommunicationPropsSetAuthenticationProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
4176
+ propses = props_set.getAuthenticationProps()
4177
+ if len(propses) > 0:
4178
+ child_element = ET.SubElement(element, "AUTHENTICATION-PROPSS")
4179
+ for props in propses:
4180
+ if isinstance(props, SecureCommunicationAuthenticationProps):
4181
+ self.writeSecureCommunicationAuthenticationProps(child_element, props)
4182
+ else:
4183
+ self.notImplemented("Unsupported AuthenticationProps <%s>" % type(props))
4184
+
4185
+ def writeSecureCommunicationFreshnessProps(self, element: ET.Element, props: SecureCommunicationFreshnessProps):
4186
+ child_element = ET.SubElement(element, "SECURE-COMMUNICATION-FRESHNESS-PROPS")
4187
+ self.writeIdentifiable(child_element, props)
4188
+ self.setChildElementOptionalLiteral(child_element, "FRESHNESS-VALUE-LENGTH", props.getFreshnessValueLength())
4189
+ self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH", props.getFreshnessValueTxLength())
4190
+
4191
+ def writeSecureCommunicationPropsSetFreshnessProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
4192
+ propses = props_set.getFreshnessProps()
4193
+ if len(propses) > 0:
4194
+ child_element = ET.SubElement(element, "FRESHNESS-PROPSS")
4195
+ for props in propses:
4196
+ if isinstance(props, SecureCommunicationFreshnessProps):
4197
+ self.writeSecureCommunicationFreshnessProps(child_element, props)
4198
+ else:
4199
+ self.notImplemented("Unsupported FreshnessProps <%s>" % type(props))
3403
4200
 
3404
4201
  def writeSecureCommunicationPropsSet(self, element: ET.Element, set: SecureCommunicationPropsSet):
3405
4202
  self.logger.debug("Write SecureCommunicationPropsSet %s" % set.getShortName())
3406
4203
  child_element = ET.SubElement(element, "SECURE-COMMUNICATION-PROPS-SET")
3407
4204
  self.writeIdentifiable(child_element, set)
4205
+ self.writeSecureCommunicationPropsSetAuthenticationProps(child_element, set)
4206
+ self.writeSecureCommunicationPropsSetFreshnessProps(child_element, set)
3408
4207
 
3409
4208
  def writeSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
3410
- self.logger.debug("Write SoAdRoutingGroup %s" % group.getShortName())
4209
+ self.logger.debug("Write SoAdRoutingGroup <%s>" % group.getShortName())
3411
4210
  child_element = ET.SubElement(element, "SO-AD-ROUTING-GROUP")
3412
4211
  self.writeIdentifiable(child_element, group)
4212
+ self.setChildElementOptionalLiteral(child_element, "EVENT-GROUP-CONTROL-TYPE", group.getEventGroupControlType())
4213
+
4214
+ def writeDoIpLogicAddress(self, element: ET.Element, address: DoIpLogicAddress):
4215
+ if address is not None:
4216
+ child_element = ET.SubElement(element, "DO-IP-LOGIC-ADDRESS")
4217
+ self.writeIdentifiable(child_element, address)
4218
+ self.setChildElementOptionalIntegerValue(child_element, "ADDRESS", address.getAddress())
4219
+
4220
+ def writeDoIpTpConfigDoIpLogicAddresses(self, element: ET.Element, config: DoIpTpConfig):
4221
+ addresses = config.getDoIpLogicAddresses()
4222
+ if len(addresses) > 0:
4223
+ child_element = ET.SubElement(element, "DO-IP-LOGIC-ADDRESSS")
4224
+ for address in addresses:
4225
+ if isinstance(address, DoIpLogicAddress):
4226
+ self.writeDoIpLogicAddress(child_element, address)
4227
+ else:
4228
+ self.notImplemented("Unsupported DoIpLogicAddress <%s>" % type(address))
4229
+
4230
+ def writeDoIpTpConnection(self, element: ET.Element, connection: DoIpTpConnection):
4231
+ if connection is not None:
4232
+ child_element = ET.SubElement(element, "DO-IP-TP-CONNECTION")
4233
+ self.writeTpConnection(child_element, connection)
4234
+ self.setChildElementOptionalRefType(child_element, "DO-IP-SOURCE-ADDRESS-REF", connection.getDoIpSourceAddressRef())
4235
+ self.setChildElementOptionalRefType(child_element, "DO-IP-TARGET-ADDRESS-REF", connection.getDoIpTargetAddressRef())
4236
+ self.setChildElementOptionalRefType(child_element, "TP-SDU-REF", connection.getTpSduRef())
4237
+
4238
+ def writeDoIpTpConfigTpConnections(self, element: ET.Element, config: DoIpTpConfig):
4239
+ connections = config.getTpConnections()
4240
+ if len(connections) > 0:
4241
+ child_element = ET.SubElement(element, "TP-CONNECTIONS")
4242
+ for address in connections:
4243
+ if isinstance(address, DoIpTpConnection):
4244
+ self.writeDoIpTpConnection(child_element, address)
4245
+ else:
4246
+ self.notImplemented("Unsupported TpConnection <%s>" % type(address))
3413
4247
 
3414
4248
  def writeDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
3415
- self.logger.debug("Write DoIpTpConfig %s" % config.getShortName())
4249
+ self.logger.debug("Write DoIpTpConfig <%s>" % config.getShortName())
3416
4250
  child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
3417
- self.writeIdentifiable(child_element, config)
4251
+ self.writeTpConfig(child_element, config)
4252
+ self.writeDoIpTpConfigDoIpLogicAddresses(child_element, config)
4253
+ self.writeDoIpTpConfigTpConnections(child_element, config)
3418
4254
 
3419
- def writeLinMaster(self, element: ET.Element, master: LinMaster):
3420
- self.logger.debug("Write LinMaster %s" % master.getShortName())
4255
+ def writeLinCommunicationController(self, element: ET.Element, controller: LinCommunicationController):
4256
+ self.writeCommunicationController(element, controller)
4257
+ self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", controller.getProtocolVersion())
4258
+
4259
+ def writeLinMaster(self, element: ET.Element, controller: LinMaster):
4260
+ self.logger.debug("Write LinMaster <%s>" % controller.getShortName())
3421
4261
  child_element = ET.SubElement(element, "LIN-MASTER")
3422
- self.writeIdentifiable(child_element, master)
4262
+ self.writeIdentifiable(child_element, controller)
4263
+ variants_tag = ET.SubElement(child_element, "LIN-MASTER-VARIANTS")
4264
+ cond_tag = ET.SubElement(variants_tag, "LIN-MASTER-CONDITIONAL")
4265
+ self.writeLinCommunicationController(cond_tag, controller)
4266
+ self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE", controller.getTimeBase())
4267
+ self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE-JITTER", controller.getTimeBaseJitter())
3423
4268
 
3424
4269
  def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
3425
4270
  mappings = parent.getISignalToPduMappings()
@@ -3439,10 +4284,12 @@ class ARXMLWriter(AbstractARXMLWriter):
3439
4284
  if filter is not None:
3440
4285
  child_element = ET.SubElement(element, key)
3441
4286
  self.setChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE", filter.getDataFilterType())
4287
+ self.setChildElementOptionalIntegerValue(child_element, "MASK", filter.getMask())
4288
+ self.setChildElementOptionalIntegerValue(child_element, "X", filter.getX())
3442
4289
 
3443
- def setTransmissionModeConditions(self, element: ET.Element, conditions: List[TransmissionModeCondition]):
4290
+ def setTransmissionModeConditions(self, element: ET.Element, key: str, conditions: List[TransmissionModeCondition]):
3444
4291
  if len(conditions) > 0:
3445
- conditions_tag = ET.SubElement(element, "TRANSMISSION-MODE-CONDITIONS")
4292
+ conditions_tag = ET.SubElement(element, key)
3446
4293
  for condition in conditions:
3447
4294
  child_element = ET.SubElement(conditions_tag, "TRANSMISSION-MODE-CONDITION")
3448
4295
  self.setDataFilter(child_element, "DATA-FILTER", condition.getDataFilter())
@@ -3480,7 +4327,8 @@ class ARXMLWriter(AbstractARXMLWriter):
3480
4327
  def setTransmissionModeDeclaration(self, element: ET.Element, key: str, decl : TransmissionModeDeclaration):
3481
4328
  if decl is not None:
3482
4329
  child_element = ET.SubElement(element, key)
3483
- self.setTransmissionModeConditions(child_element, decl.getTransmissionModeConditions())
4330
+ self.setTransmissionModeConditions(child_element, "TRANSMISSION-MODE-CONDITIONS", decl.getTransmissionModeConditions())
4331
+ self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-FALSE-TIMING", decl.getTransmissionModeFalseTiming())
3484
4332
  self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING", decl.getTransmissionModeTrueTiming())
3485
4333
 
3486
4334
  def setISignalIPduIPduTimingSpecification(self, element: ET.Element, timing: IPduTiming):
@@ -3490,14 +4338,14 @@ class ARXMLWriter(AbstractARXMLWriter):
3490
4338
  self.setChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY", timing.getMinimumDelay())
3491
4339
  self.setTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION", timing.getTransmissionModeDeclaration())
3492
4340
 
3493
- def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
3494
- self.logger.debug("ISignalIPdu %s" % i_pdu.getShortName())
4341
+ def writeISignalIPdu(self, element: ET.Element, ipdu: ISignalIPdu):
4342
+ self.logger.debug("ISignalIPdu %s" % ipdu.getShortName())
3495
4343
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
3496
- self.writeIdentifiable(child_element, i_pdu)
3497
- self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
3498
- self.setISignalIPduIPduTimingSpecification(child_element, i_pdu.getIPduTimingSpecification())
3499
- self.writeISignalToPduMappings(child_element, i_pdu)
3500
- self.setChildElementOptionalLiteral(child_element, "UNUSED-BIT-PATTERN", i_pdu.getUnusedBitPattern())
4344
+ self.writeIdentifiable(child_element, ipdu)
4345
+ self.setChildElementOptionalNumericalValue(child_element, "LENGTH", ipdu.getLength())
4346
+ self.setISignalIPduIPduTimingSpecification(child_element, ipdu.getIPduTimingSpecification())
4347
+ self.writeISignalToPduMappings(child_element, ipdu)
4348
+ self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", ipdu.getUnusedBitPattern())
3501
4349
 
3502
4350
  def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
3503
4351
  if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
@@ -3572,6 +4420,8 @@ class ARXMLWriter(AbstractARXMLWriter):
3572
4420
  self.writeSecuredIPdu(element, ar_element)
3573
4421
  elif isinstance(ar_element, CanTpConfig):
3574
4422
  self.writeCanTpConfig(element, ar_element)
4423
+ elif isinstance(ar_element, LinTpConfig):
4424
+ self.writeLinTpConfig(element, ar_element)
3575
4425
  elif isinstance(ar_element, LinCluster):
3576
4426
  self.writeLinCluster(element, ar_element)
3577
4427
  elif isinstance(ar_element, CanCluster):
@@ -3664,7 +4514,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3664
4514
 
3665
4515
 
3666
4516
  def save(self, filename, document: AUTOSAR):
3667
- self.logger.info("Save %s ..." % filename)
4517
+ self.logger.info("Saving %s ..." % filename)
3668
4518
 
3669
4519
  root = ET.Element("AUTOSAR", self.nsmap)
3670
4520
  root.attrib["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"