armodel 1.7.6__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 (41) 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/GenericStructure/GeneralTemplateClasses/ARPackage.py +1 -1
  5. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +9 -3
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +17 -1
  7. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
  8. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +53 -0
  9. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +2 -2
  10. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +19 -5
  14. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
  15. armodel/models/M2/AUTOSARTemplates/SystemTemplate/ECUResourceMapping.py +44 -0
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +9 -0
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +483 -54
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +9 -0
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +592 -17
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +20 -10
  23. armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
  24. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
  25. armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
  26. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
  27. armodel/models/__init__.py +4 -0
  28. armodel/parser/abstract_arxml_parser.py +3 -0
  29. armodel/parser/arxml_parser.py +614 -123
  30. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
  31. armodel/tests/test_armodel/models/test_datatype.py +1 -1
  32. armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
  33. armodel/tests/test_armodel/parser/test_sw_components.py +22 -1
  34. armodel/writer/abstract_arxml_writer.py +7 -6
  35. armodel/writer/arxml_writer.py +694 -139
  36. {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/METADATA +41 -3
  37. {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/RECORD +41 -37
  38. {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/LICENSE +0 -0
  39. {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/WHEEL +0 -0
  40. {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/entry_points.txt +0 -0
  41. {armodel-1.7.6.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,7 +28,7 @@ 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
@@ -49,12 +52,12 @@ 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
60
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest, TransmissionAcknowledgementRequest
58
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
@@ -78,7 +81,7 @@ 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
@@ -93,8 +96,8 @@ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunicatio
93
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
94
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, LinTpConfig
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
162
  def writeReferrable(self, element: ET.Element, referrable: Referrable):
148
- self.setARObjectAttributes(element, 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,7 +186,7 @@ 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
 
@@ -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
 
@@ -211,7 +226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
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())
@@ -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
 
@@ -2090,17 +2151,19 @@ class ARXMLWriter(AbstractARXMLWriter):
2090
2151
  child_element = ET.SubElement(element, "ECU-ABSTRACTION-SW-COMPONENT-TYPE")
2091
2152
  self.writeAtomicSwComponentType(child_element, sw_component)
2092
2153
 
2093
- def setApplicationArrayElement(self, element: ET.Element, prototype: ApplicationArrayElement):
2094
- if prototype is not None:
2154
+ def setApplicationArrayElement(self, element: ET.Element, array_element: ApplicationArrayElement):
2155
+ if array_element is not None:
2095
2156
  child_element = ET.SubElement(element, "ELEMENT")
2096
- self.setApplicationCompositeElementDataPrototype(child_element, prototype)
2097
- self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", prototype.arraySizeSemantics)
2098
- self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", prototype.maxNumberOfElements)
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())
2099
2161
 
2100
2162
  def writeApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
2101
2163
  self.logger.debug("writeApplicationArrayDataType %s" % data_type.getShortName())
2102
2164
  child_element = ET.SubElement(element, "APPLICATION-ARRAY-DATA-TYPE")
2103
2165
  self.setApplicationCompositeDataType(child_element, data_type)
2166
+ self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
2104
2167
  self.setApplicationArrayElement(child_element, data_type.element)
2105
2168
 
2106
2169
  def setSwRecordLayoutV(self, element: ET.Element, key: str, layout_v: SwRecordLayoutV):
@@ -2112,19 +2175,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2112
2175
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.getSwRecordLayoutVProp())
2113
2176
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.getSwRecordLayoutVIndex())
2114
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
+
2115
2183
  def setSwRecordLayoutGroup(self, element: ET.Element, key: str, group: SwRecordLayoutGroup):
2116
2184
  if group is not None:
2117
2185
  child_element = ET.SubElement(element, key)
2118
2186
  self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", group.getShortLabel())
2119
2187
  self.setChildElementOptionalLiteral(child_element, "CATEGORY", group.getCategory())
2188
+ #self.writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(child_element, group)
2120
2189
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
2121
2190
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX", group.getSwRecordLayoutGroupIndex())
2122
2191
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.getSwRecordLayoutGroupFrom())
2123
2192
  self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.getSwRecordLayoutGroupTo())
2124
2193
  self.setChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP", group.getSwRecordLayoutGroupStep())
2125
- #self.setSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V", group.swRecordLayoutGroupContentType.swRecordLayoutV)
2126
- #self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", group.swRecordLayoutGroupContentType.swRecordLayoutGroup)
2127
- return group
2128
2194
 
2129
2195
  def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
2130
2196
  self.logger.debug("writeSwRecordLayout %s" % layout.getShortName())
@@ -2160,7 +2226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2160
2226
  maps_tag = ET.SubElement(element, "DATA-TYPE-MAPS")
2161
2227
  for map in maps:
2162
2228
  child_element = ET.SubElement(maps_tag, "DATA-TYPE-MAP")
2163
- self.setARObjectAttributes(child_element, map)
2229
+ self.writeARObjectAttributes(child_element, map)
2164
2230
  self.setChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF", map.getApplicationDataTypeRef())
2165
2231
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
2166
2232
 
@@ -2170,7 +2236,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2170
2236
  maps_tag = ET.SubElement(element, "MODE-REQUEST-TYPE-MAPS")
2171
2237
  for map in maps:
2172
2238
  child_element = ET.SubElement(maps_tag, "MODE-REQUEST-TYPE-MAP")
2173
- self.setARObjectAttributes(child_element, map)
2239
+ self.writeARObjectAttributes(child_element, map)
2174
2240
  self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
2175
2241
  self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", map.getModeGroupRef())
2176
2242
 
@@ -2283,8 +2349,10 @@ class ARXMLWriter(AbstractARXMLWriter):
2283
2349
  self.writeFrame(child_element, frame)
2284
2350
 
2285
2351
  def writeNmNode(self, element: ET.Element, nm_node: NmNode):
2352
+ self.writeIdentifiable(element, nm_node)
2286
2353
  self.setChildElementOptionalRefType(element, "CONTROLLER-REF", nm_node.getControllerRef())
2287
2354
  self.setChildElementOptionalRefType(element, "NM-IF-ECU-REF", nm_node.getNmIfEcuRef())
2355
+ self.setChildElementOptionalBooleanValue(element, "NM-PASSIVE-MODE-ENABLED", nm_node.getNmPassiveModeEnabled())
2288
2356
  self.setChildElementOptionalNumericalValue(element, "NM-NODE-ID", nm_node.getNmNodeId())
2289
2357
 
2290
2358
  refs = nm_node.getRxNmPduRefs()
@@ -2302,9 +2370,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2302
2370
  def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
2303
2371
  self.logger.debug("write CanNmNode %s" % nm_node.getShortName())
2304
2372
  child_element = ET.SubElement(element, "CAN-NM-NODE")
2305
- self.writeIdentifiable(child_element, nm_node)
2306
2373
  self.writeNmNode(child_element, nm_node)
2307
-
2374
+ self.setChildElementOptionalBooleanValue(child_element, "NM-CAR-WAKE-UP-RX-ENABLED", nm_node.getNmCarWakeUpRxEnabled())
2308
2375
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2309
2376
  self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
2310
2377
  self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
@@ -2312,8 +2379,8 @@ class ARXMLWriter(AbstractARXMLWriter):
2312
2379
  def writeUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
2313
2380
  self.logger.debug("write UdpNmNode %s" % nm_node.getShortName())
2314
2381
  child_element = ET.SubElement(element, "UDP-NM-NODE")
2315
- self.writeIdentifiable(child_element, nm_node)
2316
2382
  self.writeNmNode(child_element, nm_node)
2383
+ self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
2317
2384
 
2318
2385
  def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2319
2386
  nodes = parent.getNmNodes()
@@ -2334,15 +2401,20 @@ class ARXMLWriter(AbstractARXMLWriter):
2334
2401
  refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
2335
2402
  for ref in refs:
2336
2403
  self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
2337
-
2338
2404
  self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
2339
2405
  self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
2340
2406
 
2341
2407
  def writeUdpNmClusterCoupling(self, element: ET.Element, coupling: UdpNmClusterCoupling):
2342
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())
2343
2415
 
2344
2416
  def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
2345
- self.logger.debug("writeNmConfigNmClusterCouplings %s" % config.getShortName())
2417
+ self.logger.debug("Write NmConfigNmClusterCouplings <%s>" % config.getShortName())
2346
2418
  couplings = config.getNmClusterCouplings()
2347
2419
  if len(couplings) > 0:
2348
2420
  child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
@@ -2355,6 +2427,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2355
2427
  self.notImplemented("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
2356
2428
 
2357
2429
  def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
2430
+ self.logger.debug("Write NmCluster <%s>" % cluster.getShortName())
2358
2431
  self.writeIdentifiable(element, cluster)
2359
2432
  self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
2360
2433
  self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
@@ -2363,7 +2436,7 @@ class ARXMLWriter(AbstractARXMLWriter):
2363
2436
  self.setChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK", cluster.getNmSynchronizingNetwork())
2364
2437
 
2365
2438
  def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2366
- self.logger.debug("WriteCanNmCluster %s" % cluster.getShortName())
2439
+ self.logger.debug("Write CanNmCluster <%s>" % cluster.getShortName())
2367
2440
  child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
2368
2441
  self.writeNmCluster(child_element, cluster)
2369
2442
 
@@ -2382,10 +2455,22 @@ class ARXMLWriter(AbstractARXMLWriter):
2382
2455
  self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
2383
2456
  self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
2384
2457
 
2385
- def writeUdpNmCluster(self, element: ET.Element, cluster: CanNmCluster):
2386
- 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())
2387
2460
  child_element = ET.SubElement(element, "UDP-NM-CLUSTER")
2388
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())
2389
2474
 
2390
2475
  def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2391
2476
  clusters = parent.getNmClusters()
@@ -2399,50 +2484,311 @@ class ARXMLWriter(AbstractARXMLWriter):
2399
2484
  else:
2400
2485
  self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
2401
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
+
2402
2527
  def writeNmConfig(self, element: ET.Element, config: NmConfig):
2403
2528
  self.logger.debug("Write NmConfig <%s>" % config.getShortName())
2404
2529
  child_element = ET.SubElement(element, "NM-CONFIG")
2405
2530
  self.writeIdentifiable(child_element, config)
2406
2531
  self.writeNmConfigNmClusters(child_element, config)
2407
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))
2408
2553
 
2409
2554
  def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
2410
2555
  self.logger.debug("Write NmPdu <%s>" % pdu.getShortName())
2411
2556
  child_element = ET.SubElement(element, "NM-PDU")
2412
- self.writeIdentifiable(child_element, pdu)
2413
- 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())
2414
2560
 
2415
2561
  def writeNPdu(self, element: ET.Element, pdu: NPdu):
2416
2562
  self.logger.debug("Write NPdu <%s>" % pdu.getShortName())
2417
2563
  child_element = ET.SubElement(element, "N-PDU")
2418
- self.writeIdentifiable(child_element, pdu)
2419
- self.writeIPdu(child_element, pdu)
2420
-
2421
- def writeIPdu(self, element: ET.Element, pdu: IPdu):
2422
- self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
2564
+ self.writePdu(child_element, pdu)
2423
2565
 
2424
2566
  def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
2425
2567
  self.logger.debug("Write DcmIPdu <%s>" % pdu.getShortName())
2426
2568
  child_element = ET.SubElement(element, "DCM-I-PDU")
2427
- self.writeIdentifiable(child_element, pdu)
2428
2569
  self.writeIPdu(child_element, pdu)
2429
2570
  self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
2430
2571
 
2431
- def writeSecuredIPdu(self, element: ET.Element, pdu: DcmIPdu):
2432
- self.logger.debug("Write 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())
2433
2587
  child_element = ET.SubElement(element, "SECURED-I-PDU")
2434
- self.writeIdentifiable(child_element, pdu)
2435
- 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
+
2436
2715
 
2437
2716
  def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
2438
2717
  self.logger.debug("Write CanTpConfig <%s>" % config.getShortName())
2439
2718
  child_element = ET.SubElement(element, "CAN-TP-CONFIG")
2440
- 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))
2441
2784
 
2442
2785
  def writeLinTpConfig(self, element: ET.Element, config: LinTpConfig):
2443
2786
  self.logger.debug("Write LinTpConfig <%s>" % config.getShortName())
2444
2787
  child_element = ET.SubElement(element, "LIN-TP-CONFIG")
2445
- self.writeIdentifiable(child_element, 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)
2446
2792
 
2447
2793
  def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
2448
2794
  ref_list = triggering.getFramePortRefs()
@@ -3219,10 +3565,18 @@ class ARXMLWriter(AbstractARXMLWriter):
3219
3565
  self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
3220
3566
  self.writeCommunicationConnector(element, connector)
3221
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
+
3222
3575
  def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
3223
3576
  self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
3224
3577
  self.writeCommunicationConnector(element, connector)
3225
3578
  self.setChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT", connector.getMaximumTransmissionUnit())
3579
+ self.writeEthernetCommunicationConnectorNetworkEndpointRefs(element, connector)
3226
3580
 
3227
3581
  def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
3228
3582
  self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
@@ -3263,6 +3617,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3263
3617
  self.setChildElementOptionalBooleanValue(child_element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION", instance.getComEnableMDTForCyclicTransmission())
3264
3618
  self.writeEcuInstanceCommControllers(child_element, instance)
3265
3619
  self.writeEcuInstanceConnectors(child_element, instance)
3620
+ self.setChildElementOptionalIntegerValue(child_element, "DIAGNOSTIC-ADDRESS", instance.getDiagnosticAddress())
3266
3621
  self.setChildElementOptionalBooleanValue(child_element, "SLEEP-MODE-SUPPORTED", instance.getSleepModeSupported())
3267
3622
  self.setChildElementOptionalBooleanValue(child_element, "WAKE-UP-OVER-BUS-SUPPORTED", instance.getWakeUpOverBusSupported())
3268
3623
 
@@ -3319,11 +3674,52 @@ class ARXMLWriter(AbstractARXMLWriter):
3319
3674
  else:
3320
3675
  self.notImplemented("Unsupported Sw Mapping %s" % type(sw_mapping))
3321
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
+
3322
3716
  def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
3323
- self.logger.debug("Write SystemMapping %s" % mapping.getShortName())
3717
+ self.logger.debug("Write SystemMapping <%s>" % mapping.getShortName())
3324
3718
  child_element = ET.SubElement(element, "SYSTEM-MAPPING")
3325
3719
  self.writeIdentifiable(child_element, mapping)
3326
3720
  self.writeSystemMappingDataMappings(child_element, mapping)
3721
+ self.writeSystemMappingEcuResourceMappings(child_element, mapping)
3722
+ self.writeSystemMappingSwImplMappings(child_element, mapping)
3327
3723
  self.writeSystemMappingSwMappings(child_element, mapping)
3328
3724
 
3329
3725
  def writeSystemMappings(self, element: ET.Element, system: System):
@@ -3368,9 +3764,12 @@ class ARXMLWriter(AbstractARXMLWriter):
3368
3764
  self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
3369
3765
  child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
3370
3766
  self.writeARElement(child_element, dimension)
3371
- self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3372
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())
3373
3771
  self.setChildElementOptionalNumericalValue(child_element, "TIME-EXP", dimension.getTimeExp())
3772
+ self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
3374
3773
 
3375
3774
  def setFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
3376
3775
  self.logger.debug("Set FlatInstanceDescriptor %s" % desc.getShortName())
@@ -3660,52 +4059,205 @@ class ARXMLWriter(AbstractARXMLWriter):
3660
4059
  self.writeDiagnosticServiceTableDiagnosticConnectionRefs(child_element, table)
3661
4060
  self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", table.getEcuInstanceRef())
3662
4061
 
3663
- def writeMultiplexedIPdu(self, element: ET.Element, i_pdu: MultiplexedIPdu):
3664
- self.logger.debug("Write MultiplexedIPdu %s" % i_pdu.getShortName())
3665
- child_element = ET.SubElement(element, "MULTIPLEXED-I-PDU")
3666
- self.writeIdentifiable(child_element, i_pdu)
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())
4066
+
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))
3667
4134
 
3668
- def writeUserDefinedIPdu(self, element: ET.Element, i_pdu: UserDefinedIPdu):
3669
- self.logger.debug("Write UserDefinedIPdu %s" % i_pdu.getShortName())
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())
3670
4149
  child_element = ET.SubElement(element, "USER-DEFINED-I-PDU")
3671
- self.writeIdentifiable(child_element, i_pdu)
4150
+ self.writeIPdu(child_element, ipdu)
4151
+ self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", ipdu.getCddType())
3672
4152
 
3673
4153
  def writeUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
3674
- self.logger.debug("Write UserDefinedPdu %s" % pdu.getShortName())
4154
+ self.logger.debug("Write UserDefinedPdu <%s>" % pdu.getShortName())
3675
4155
  child_element = ET.SubElement(element, "USER-DEFINED-PDU")
3676
- self.writeIdentifiable(child_element, pdu)
4156
+ self.writePdu(child_element, pdu)
4157
+ self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", pdu.getCddType())
3677
4158
 
3678
4159
  def writeGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
3679
- self.logger.debug("Write GeneralPurposePdu %s" % pdu.getShortName())
4160
+ self.logger.debug("Write GeneralPurposePdu <%s>" % pdu.getShortName())
3680
4161
  child_element = ET.SubElement(element, "GENERAL-PURPOSE-PDU")
3681
- self.writeIdentifiable(child_element, pdu)
4162
+ self.writePdu(child_element, pdu)
3682
4163
 
3683
4164
  def writeGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
3684
- self.logger.debug("Write GeneralPurposeIPdu %s" % i_pdu.getShortName())
4165
+ self.logger.debug("Write GeneralPurposeIPdu <%s>" % i_pdu.getShortName())
3685
4166
  child_element = ET.SubElement(element, "GENERAL-PURPOSE-I-PDU")
3686
- 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))
3687
4200
 
3688
4201
  def writeSecureCommunicationPropsSet(self, element: ET.Element, set: SecureCommunicationPropsSet):
3689
4202
  self.logger.debug("Write SecureCommunicationPropsSet %s" % set.getShortName())
3690
4203
  child_element = ET.SubElement(element, "SECURE-COMMUNICATION-PROPS-SET")
3691
4204
  self.writeIdentifiable(child_element, set)
4205
+ self.writeSecureCommunicationPropsSetAuthenticationProps(child_element, set)
4206
+ self.writeSecureCommunicationPropsSetFreshnessProps(child_element, set)
3692
4207
 
3693
4208
  def writeSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
3694
- self.logger.debug("Write SoAdRoutingGroup %s" % group.getShortName())
4209
+ self.logger.debug("Write SoAdRoutingGroup <%s>" % group.getShortName())
3695
4210
  child_element = ET.SubElement(element, "SO-AD-ROUTING-GROUP")
3696
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))
3697
4247
 
3698
4248
  def writeDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
3699
- self.logger.debug("Write DoIpTpConfig %s" % config.getShortName())
4249
+ self.logger.debug("Write DoIpTpConfig <%s>" % config.getShortName())
3700
4250
  child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
3701
- self.writeIdentifiable(child_element, config)
4251
+ self.writeTpConfig(child_element, config)
4252
+ self.writeDoIpTpConfigDoIpLogicAddresses(child_element, config)
4253
+ self.writeDoIpTpConfigTpConnections(child_element, config)
3702
4254
 
3703
4255
  def writeLinCommunicationController(self, element: ET.Element, controller: LinCommunicationController):
3704
4256
  self.writeCommunicationController(element, controller)
3705
4257
  self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", controller.getProtocolVersion())
3706
4258
 
3707
4259
  def writeLinMaster(self, element: ET.Element, controller: LinMaster):
3708
- self.logger.debug("Write LinMaster %s" % controller.getShortName())
4260
+ self.logger.debug("Write LinMaster <%s>" % controller.getShortName())
3709
4261
  child_element = ET.SubElement(element, "LIN-MASTER")
3710
4262
  self.writeIdentifiable(child_element, controller)
3711
4263
  variants_tag = ET.SubElement(child_element, "LIN-MASTER-VARIANTS")
@@ -3732,10 +4284,12 @@ class ARXMLWriter(AbstractARXMLWriter):
3732
4284
  if filter is not None:
3733
4285
  child_element = ET.SubElement(element, key)
3734
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())
3735
4289
 
3736
- def setTransmissionModeConditions(self, element: ET.Element, conditions: List[TransmissionModeCondition]):
4290
+ def setTransmissionModeConditions(self, element: ET.Element, key: str, conditions: List[TransmissionModeCondition]):
3737
4291
  if len(conditions) > 0:
3738
- conditions_tag = ET.SubElement(element, "TRANSMISSION-MODE-CONDITIONS")
4292
+ conditions_tag = ET.SubElement(element, key)
3739
4293
  for condition in conditions:
3740
4294
  child_element = ET.SubElement(conditions_tag, "TRANSMISSION-MODE-CONDITION")
3741
4295
  self.setDataFilter(child_element, "DATA-FILTER", condition.getDataFilter())
@@ -3773,7 +4327,8 @@ class ARXMLWriter(AbstractARXMLWriter):
3773
4327
  def setTransmissionModeDeclaration(self, element: ET.Element, key: str, decl : TransmissionModeDeclaration):
3774
4328
  if decl is not None:
3775
4329
  child_element = ET.SubElement(element, key)
3776
- 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())
3777
4332
  self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING", decl.getTransmissionModeTrueTiming())
3778
4333
 
3779
4334
  def setISignalIPduIPduTimingSpecification(self, element: ET.Element, timing: IPduTiming):
@@ -3783,14 +4338,14 @@ class ARXMLWriter(AbstractARXMLWriter):
3783
4338
  self.setChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY", timing.getMinimumDelay())
3784
4339
  self.setTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION", timing.getTransmissionModeDeclaration())
3785
4340
 
3786
- def writeISignalIPdu(self, element: ET.Element, i_pdu: ISignalIPdu):
3787
- 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())
3788
4343
  child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
3789
- self.writeIdentifiable(child_element, i_pdu)
3790
- self.setChildElementOptionalNumericalValue(child_element, "LENGTH", i_pdu.getLength())
3791
- self.setISignalIPduIPduTimingSpecification(child_element, i_pdu.getIPduTimingSpecification())
3792
- self.writeISignalToPduMappings(child_element, i_pdu)
3793
- self.setChildElementOptionalLiteral(child_element, "UNUSED-BIT-PATTERN", i_pdu.getUnusedBitPattern())
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())
3794
4349
 
3795
4350
  def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
3796
4351
  if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
@@ -3959,7 +4514,7 @@ class ARXMLWriter(AbstractARXMLWriter):
3959
4514
 
3960
4515
 
3961
4516
  def save(self, filename, document: AUTOSAR):
3962
- self.logger.info("Save %s ..." % filename)
4517
+ self.logger.info("Saving %s ..." % filename)
3963
4518
 
3964
4519
  root = ET.Element("AUTOSAR", self.nsmap)
3965
4520
  root.attrib["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"