armodel 1.7.5__py3-none-any.whl → 1.7.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +41 -2
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +47 -6
- armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +17 -7
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +2 -2
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ResourceConsumption/MemorySectionUsage.py +4 -0
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +8 -2
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +9 -3
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +30 -1
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +19 -5
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Components/__init__.py +53 -0
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Composition/__init__.py +2 -2
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/DataPrototypes.py +41 -16
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Datatype/Datatypes.py +10 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +26 -8
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +19 -5
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/DoIp.py +29 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/ECUResourceMapping.py +44 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +165 -4
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +409 -17
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +356 -8
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +2 -4
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +76 -10
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +483 -54
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +45 -23
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +10 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +245 -130
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/SWmapping.py +27 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +633 -5
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +22 -11
- armodel/models/M2/MSR/AsamHdo/AdminData.py +1 -2
- armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +3 -1
- armodel/models/M2/MSR/AsamHdo/SpecialData.py +35 -8
- armodel/models/M2/MSR/DataDictionary/RecordLayout.py +0 -3
- armodel/models/__init__.py +4 -0
- armodel/parser/abstract_arxml_parser.py +8 -5
- armodel/parser/arxml_parser.py +1229 -572
- armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -3
- armodel/tests/test_armodel/models/test_datatype.py +1 -1
- armodel/tests/test_armodel/parser/test_bsw_module_descriiption.py +218 -0
- armodel/tests/test_armodel/parser/test_sw_components.py +22 -1
- armodel/writer/abstract_arxml_writer.py +7 -6
- armodel/writer/arxml_writer.py +1037 -187
- {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/METADATA +62 -3
- {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/RECORD +48 -44
- {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/LICENSE +0 -0
- {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/WHEEL +0 -0
- {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/entry_points.txt +0 -0
- {armodel-1.7.5.dist-info → armodel-1.7.7.dist-info}/top_level.txt +0 -0
armodel/writer/arxml_writer.py
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import xml.etree.cElementTree as ET
|
|
2
2
|
from typing import List
|
|
3
3
|
|
|
4
|
+
from armodel.models.M2.AUTOSARTemplates.SystemTemplate.ECUResourceMapping import ECUMapping
|
|
5
|
+
from armodel.models.M2.AUTOSARTemplates.SystemTemplate.SWmapping import SwcToImplMapping
|
|
6
|
+
|
|
4
7
|
from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
|
|
5
8
|
from ..models.M2.MSR.AsamHdo.AdminData import AdminData
|
|
6
9
|
from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
|
|
@@ -25,12 +28,12 @@ from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
|
|
|
25
28
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
|
|
26
29
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
|
|
27
30
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
|
|
28
|
-
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswEvent, BswInternalBehavior, BswInterruptEntity, BswModeSenderPolicy, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
|
|
31
|
+
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswBackgroundEvent, BswCalledEntity, BswDataReceivedEvent, BswEvent, BswExternalTriggerOccurredEvent, BswInternalBehavior, BswInterruptEntity, BswModeSenderPolicy, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
|
|
29
32
|
from ..models.M2.AUTOSARTemplates.CommonStructure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, ConstantSpecification, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
|
|
30
33
|
from ..models.M2.AUTOSARTemplates.CommonStructure.FlatMap import FlatInstanceDescriptor, FlatMap
|
|
31
34
|
from ..models.M2.AUTOSARTemplates.CommonStructure.Filter import DataFilter
|
|
32
35
|
from ..models.M2.AUTOSARTemplates.CommonStructure.SwcBswMapping import SwcBswMapping, SwcBswRunnableMapping
|
|
33
|
-
from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation
|
|
36
|
+
from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Code, Implementation, ImplementationProps
|
|
34
37
|
from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
|
|
35
38
|
from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import EOCExecutableEntityRef, ExecutionOrderConstraint
|
|
36
39
|
from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import CryptoServiceNeeds, DiagEventDebounceMonitorInternal, DiagnosticCommunicationManagerNeeds, DiagnosticEventInfoNeeds, DiagnosticEventNeeds, DiagnosticRoutineNeeds, DiagnosticValueNeeds, EcuStateMgrUserNeeds, NvBlockNeeds, RoleBasedDataAssignment, RoleBasedDataTypeAssignment, ServiceDependency
|
|
@@ -49,13 +52,13 @@ from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPack
|
|
|
49
52
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral, Limit
|
|
50
53
|
|
|
51
54
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
|
|
52
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent, TimingEvent
|
|
55
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent, DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent, ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent, TimingEvent
|
|
53
56
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
|
|
54
57
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType
|
|
55
58
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
|
|
56
59
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet
|
|
57
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
|
|
58
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype
|
|
60
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest, TransmissionAcknowledgementRequest
|
|
61
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PRPortPrototype, PortGroup, SwComponentType, PPortPrototype, PortPrototype, RPortPrototype, SymbolProps
|
|
59
62
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
|
|
60
63
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import AsynchronousServerCallPoint, RunnableEntity, RunnableEntityArgument, SwcInternalBehavior, SynchronousServerCallPoint
|
|
61
64
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
|
|
@@ -78,23 +81,23 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcImplementation import S
|
|
|
78
81
|
from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping, System, SystemMapping
|
|
79
82
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
|
|
80
83
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import DiagnosticConnection
|
|
81
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, MultiplexedIPdu, PduTriggering, SecureCommunicationPropsSet, SecuredIPdu, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
|
|
84
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DynamicPart, DynamicPartAlternative, FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalToIPduMapping, ISignalTriggering, MultiplexedIPdu, MultiplexedPart, Pdu, PduTriggering, SecureCommunicationAuthenticationProps, SecureCommunicationFreshnessProps, SecureCommunicationProps, SecureCommunicationPropsSet, SecuredIPdu, SegmentPosition, StaticPart, SystemSignal, DcmIPdu, Frame, ISignal, NPdu, NmPdu, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
|
|
82
85
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
|
|
83
86
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
|
|
84
87
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SoAdRoutingGroup, SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
|
|
85
88
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetFrame import GenericEthernetFrame
|
|
86
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, InitialSdDelayConfig, RequestResponseDelay, SdClientConfig
|
|
89
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo, CouplingPortScheduler, CouplingPortStructuralElement, EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, EthernetPriorityRegeneration, InitialSdDelayConfig, MacMulticastGroup, RequestResponseDelay, SdClientConfig, VlanMembership
|
|
87
90
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import DoIpEntity, InfrastructureServices, Ipv6Configuration, NetworkEndpoint, NetworkEndpointAddress
|
|
88
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, GenericTp, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
|
|
89
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, ISignalMapping
|
|
91
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, EventHandler, GenericTp, ProvidedServiceInstance, SdServerConfig, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
|
|
92
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
|
|
90
93
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
|
|
91
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
|
|
94
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import AbstractCanCommunicationController, AbstractCanCommunicationControllerAttributes, CanCommunicationConnector, CanCommunicationController, CanControllerConfigurationRequirements, CanControllerFdConfiguration, CanControllerFdConfigurationRequirements
|
|
92
95
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable, LinUnconditionalFrame, ScheduleTableEntry
|
|
93
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
|
|
94
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinMaster
|
|
96
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, CommunicationController, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
|
|
97
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
|
|
95
98
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
|
|
96
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmNode
|
|
97
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig, DoIpTpConfig
|
|
99
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmEcu, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmEcu, UdpNmNode
|
|
100
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpAddress, CanTpChannel, CanTpConfig, CanTpConnection, CanTpEcu, CanTpNode, DoIpLogicAddress, DoIpTpConfig, DoIpTpConnection, LinTpConfig, LinTpConnection, LinTpNode, TpAddress, TpConfig, TpConnection
|
|
98
101
|
|
|
99
102
|
from .abstract_arxml_writer import AbstractARXMLWriter
|
|
100
103
|
class ARXMLWriter(AbstractARXMLWriter):
|
|
@@ -120,14 +123,26 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
120
123
|
sd_tag.attrib['GID'] = sd.gid
|
|
121
124
|
sd_tag.text = sd.value
|
|
122
125
|
|
|
123
|
-
def
|
|
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
|
-
|
|
138
|
+
child_element = ET.SubElement(element, "SDG")
|
|
126
139
|
if sdg.gid is not None and sdg.gid != "":
|
|
127
|
-
|
|
128
|
-
self.
|
|
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(
|
|
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.
|
|
157
|
+
self.writeARObjectAttributes(limit_tag, limit)
|
|
143
158
|
if limit.intervalType is not None:
|
|
144
159
|
limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
|
|
145
160
|
limit_tag.text = limit.value
|
|
146
161
|
|
|
147
|
-
def
|
|
148
|
-
self.
|
|
162
|
+
def writeReferrable(self, element: ET.Element, referrable: Referrable):
|
|
163
|
+
self.writeARObjectAttributes(element, referrable)
|
|
149
164
|
self.setShortName(element, referrable.getShortName())
|
|
150
165
|
|
|
151
166
|
def setLanguageSpecific(self, element: ET.Element, key: str, specific: LanguageSpecific):
|
|
152
167
|
child_element = ET.SubElement(element, key)
|
|
153
|
-
self.
|
|
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.
|
|
179
|
+
self.writeARObjectAttributes(child_element, long_name)
|
|
165
180
|
for l4 in long_name.getL4s():
|
|
166
181
|
self.setLLongName(child_element, l4)
|
|
167
182
|
|
|
@@ -171,12 +186,12 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
171
186
|
def setMultiLanguageOverviewParagraph(self, element: ET.Element, key: str, paragraph: MultiLanguageOverviewParagraph):
|
|
172
187
|
if paragraph is not None:
|
|
173
188
|
child_element = ET.SubElement(element, key)
|
|
174
|
-
self.
|
|
189
|
+
self.writeARObjectAttributes(child_element, paragraph)
|
|
175
190
|
for l2 in paragraph.getL2s():
|
|
176
191
|
self.setLOverviewParagraph(child_element, l2)
|
|
177
192
|
|
|
178
|
-
def
|
|
179
|
-
self.
|
|
193
|
+
def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
194
|
+
self.writeReferrable(element, referrable)
|
|
180
195
|
if referrable.longName is not None:
|
|
181
196
|
self.setMultiLongName(element, "LONG-NAME", referrable.longName)
|
|
182
197
|
|
|
@@ -186,7 +201,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
186
201
|
def setMultiLanguagePlainText(self, element: ET.Element, key: str, paragraph: MultiLanguagePlainText):
|
|
187
202
|
if paragraph is not None:
|
|
188
203
|
child_element = ET.SubElement(element, key)
|
|
189
|
-
self.
|
|
204
|
+
self.writeARObjectAttributes(child_element, paragraph)
|
|
190
205
|
for l10 in paragraph.getL10s():
|
|
191
206
|
self.setLPlainText(child_element, l10)
|
|
192
207
|
|
|
@@ -198,20 +213,20 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
198
213
|
self.writeSdgs(child_element, admin_data)
|
|
199
214
|
|
|
200
215
|
def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
|
|
201
|
-
self.
|
|
216
|
+
self.writeMultilanguageReferrable(element, identifiable)
|
|
202
217
|
self.setAnnotations(element, identifiable.getAnnotations())
|
|
203
218
|
self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.getDesc())
|
|
204
219
|
self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.getCategory())
|
|
205
220
|
self.setDocumentationBlock(element, "INTRODUCTION", identifiable.getIntroduction())
|
|
206
221
|
self.setAdminData(element, identifiable.getAdminData())
|
|
207
222
|
|
|
208
|
-
def
|
|
223
|
+
def writeARElement(self, parent: ET.Element, ar_element: ARElement):
|
|
209
224
|
self.writeIdentifiable(parent, ar_element)
|
|
210
225
|
|
|
211
226
|
def setTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
|
|
212
227
|
if (acknowledge != None):
|
|
213
228
|
child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
|
|
214
|
-
self.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
727
|
+
self.writeARObjectAttributes(conditional_tag, props.conditional)
|
|
706
728
|
self.setAnnotations(conditional_tag, props.getAnnotations())
|
|
707
729
|
self.setChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF", props.getBaseTypeRef())
|
|
708
730
|
self.setChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF", props.getCompuMethodRef())
|
|
709
|
-
|
|
710
731
|
self.setValueSpecification(conditional_tag, "INVALID-VALUE", props.getInvalidValue())
|
|
711
|
-
self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
|
|
712
732
|
self.setChildElementOptionalFloatValue(conditional_tag, "STEP-SIZE", props.getStepSize())
|
|
713
733
|
self.setChildElementOptionalRefType(conditional_tag, "SW-ADDR-METHOD-REF", props.getSwAddrMethodRef())
|
|
714
734
|
self.setChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS", props.getSwCalibrationAccess())
|
|
715
735
|
self.setChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF", props.getDataConstrRef())
|
|
736
|
+
self.setChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", props.getImplementationDataTypeRef())
|
|
716
737
|
self.setSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET", props.getSwCalprmAxisSet())
|
|
717
738
|
self.setChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY", props.getSwImplPolicy())
|
|
718
739
|
self.setChildElementOptionalNumericalValue(conditional_tag, "SW-INTENDED-RESOLUTION", props.getSwIntendedResolution())
|
|
@@ -728,7 +749,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
728
749
|
self.setApplicationDataType(element, data_type)
|
|
729
750
|
|
|
730
751
|
def setAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
|
|
731
|
-
self.
|
|
752
|
+
self.writeARElement(element, data_type)
|
|
732
753
|
self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.getSwDataDefProps())
|
|
733
754
|
|
|
734
755
|
def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
|
|
@@ -824,9 +845,10 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
824
845
|
compu_scales_tag = ET.SubElement(element, "COMPU-SCALES")
|
|
825
846
|
for compu_scale in compu_scales.getCompuScales():
|
|
826
847
|
child_element = ET.SubElement(compu_scales_tag, "COMPU-SCALE")
|
|
827
|
-
self.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1015
|
+
def writeInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
|
|
994
1016
|
pass
|
|
995
1017
|
|
|
996
|
-
def
|
|
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
|
|
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.
|
|
1047
|
+
self.writeTimingEvent(child_element, event)
|
|
1015
1048
|
elif isinstance(event, OperationInvokedEvent):
|
|
1016
|
-
self.
|
|
1049
|
+
self.writeOperationInvokedEvent(child_element, event)
|
|
1017
1050
|
elif isinstance(event, SwcModeSwitchEvent):
|
|
1018
|
-
self.
|
|
1051
|
+
self.writeSwcModeSwitchEvent(child_element, event)
|
|
1019
1052
|
elif isinstance(event, DataReceivedEvent):
|
|
1020
|
-
self.
|
|
1053
|
+
self.writeDataReceivedEvent(child_element, event)
|
|
1021
1054
|
elif isinstance(event, InternalTriggerOccurredEvent):
|
|
1022
|
-
self.
|
|
1055
|
+
self.writeInternalTriggerOccurredEvent(child_element, event)
|
|
1023
1056
|
elif isinstance(event, InitEvent):
|
|
1024
|
-
self.
|
|
1057
|
+
self.writeInitEvent(child_element, event)
|
|
1025
1058
|
elif isinstance(event, AsynchronousServerCallReturnsEvent):
|
|
1026
|
-
self.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
1851
|
+
def writeBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
1815
1852
|
self.setBswEvent(element, event)
|
|
1816
1853
|
|
|
1817
|
-
def
|
|
1818
|
-
self.logger.debug("
|
|
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.
|
|
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.
|
|
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.
|
|
2005
|
+
self.writeARObjectAttributes(element, engineering_obj)
|
|
1945
2006
|
self.setChildElementOptionalLiteral(element, "SHORT-LABEL", engineering_obj.short_label)
|
|
1946
2007
|
self.setChildElementOptionalLiteral(element, "CATEGORY", engineering_obj.category)
|
|
1947
2008
|
|
|
@@ -1989,12 +2050,25 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
1989
2050
|
self.writeImplementationDataTypeElements(child_element, type_element)
|
|
1990
2051
|
self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.getSwDataDefProps())
|
|
1991
2052
|
|
|
2053
|
+
def writeImplementationProps(self, element: ET.Element, props: ImplementationProps):
|
|
2054
|
+
self.writeReferrable(element, props)
|
|
2055
|
+
self.setChildElementOptionalLiteral(element, "SYMBOL", props.getSymbol())
|
|
2056
|
+
|
|
2057
|
+
def writeSymbolProps(self, element: ET.Element, props: SymbolProps):
|
|
2058
|
+
if props is not None:
|
|
2059
|
+
child_element = ET.SubElement(element, "SYMBOL-PROPS")
|
|
2060
|
+
self.writeImplementationProps(child_element, props)
|
|
2061
|
+
|
|
2062
|
+
def writeImplementationDataTypeSymbolProps(self, element: ET.Element, data_type: ImplementationDataType):
|
|
2063
|
+
self.writeSymbolProps(element, data_type.getSymbolProps())
|
|
2064
|
+
|
|
1992
2065
|
def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
|
|
1993
2066
|
self.logger.debug("writeImplementationDataType %s" % data_type.getShortName())
|
|
1994
2067
|
child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
|
|
1995
2068
|
self.setAutosarDataType(child_element, data_type)
|
|
1996
2069
|
self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
|
|
1997
2070
|
self.writeImplementationDataTypeElements(child_element, data_type)
|
|
2071
|
+
self.writeImplementationDataTypeSymbolProps(child_element, data_type)
|
|
1998
2072
|
self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
|
|
1999
2073
|
|
|
2000
2074
|
def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
|
|
@@ -2077,17 +2151,19 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2077
2151
|
child_element = ET.SubElement(element, "ECU-ABSTRACTION-SW-COMPONENT-TYPE")
|
|
2078
2152
|
self.writeAtomicSwComponentType(child_element, sw_component)
|
|
2079
2153
|
|
|
2080
|
-
def setApplicationArrayElement(self, element: ET.Element,
|
|
2081
|
-
if
|
|
2154
|
+
def setApplicationArrayElement(self, element: ET.Element, array_element: ApplicationArrayElement):
|
|
2155
|
+
if array_element is not None:
|
|
2082
2156
|
child_element = ET.SubElement(element, "ELEMENT")
|
|
2083
|
-
self.setApplicationCompositeElementDataPrototype(child_element,
|
|
2084
|
-
self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-
|
|
2085
|
-
self.
|
|
2157
|
+
self.setApplicationCompositeElementDataPrototype(child_element, array_element)
|
|
2158
|
+
self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING", array_element.getArraySizeHandling())
|
|
2159
|
+
self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", array_element.getArraySizeSemantics())
|
|
2160
|
+
self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", array_element.getMaxNumberOfElements())
|
|
2086
2161
|
|
|
2087
2162
|
def writeApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
|
|
2088
2163
|
self.logger.debug("writeApplicationArrayDataType %s" % data_type.getShortName())
|
|
2089
2164
|
child_element = ET.SubElement(element, "APPLICATION-ARRAY-DATA-TYPE")
|
|
2090
2165
|
self.setApplicationCompositeDataType(child_element, data_type)
|
|
2166
|
+
self.setChildElementOptionalLiteral(child_element, "DYNAMIC-ARRAY-SIZE-PROFILE", data_type.getDynamicArraySizeProfile())
|
|
2091
2167
|
self.setApplicationArrayElement(child_element, data_type.element)
|
|
2092
2168
|
|
|
2093
2169
|
def setSwRecordLayoutV(self, element: ET.Element, key: str, layout_v: SwRecordLayoutV):
|
|
@@ -2099,19 +2175,22 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2099
2175
|
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.getSwRecordLayoutVProp())
|
|
2100
2176
|
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.getSwRecordLayoutVIndex())
|
|
2101
2177
|
|
|
2178
|
+
def writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(self, element: ET.Element, group: SwRecordLayoutGroup):
|
|
2179
|
+
content = group.getSwRecordLayoutGroupContentType()
|
|
2180
|
+
self.setSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP", content.getSwRecordLayoutGroup())
|
|
2181
|
+
self.setSwRecordLayoutV(element, "SW-RECORD-LAYOUT-V", content.getSwRecordLayoutV())
|
|
2182
|
+
|
|
2102
2183
|
def setSwRecordLayoutGroup(self, element: ET.Element, key: str, group: SwRecordLayoutGroup):
|
|
2103
2184
|
if group is not None:
|
|
2104
2185
|
child_element = ET.SubElement(element, key)
|
|
2105
2186
|
self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", group.getShortLabel())
|
|
2106
2187
|
self.setChildElementOptionalLiteral(child_element, "CATEGORY", group.getCategory())
|
|
2188
|
+
#self.writeSwRecordLayoutGroupSwRecordLayoutGroupContentType(child_element, group)
|
|
2107
2189
|
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.getSwRecordLayoutGroupAxis())
|
|
2108
2190
|
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX", group.getSwRecordLayoutGroupIndex())
|
|
2109
2191
|
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.getSwRecordLayoutGroupFrom())
|
|
2110
2192
|
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.getSwRecordLayoutGroupTo())
|
|
2111
2193
|
self.setChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP", group.getSwRecordLayoutGroupStep())
|
|
2112
|
-
#self.setSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V", group.swRecordLayoutGroupContentType.swRecordLayoutV)
|
|
2113
|
-
#self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", group.swRecordLayoutGroupContentType.swRecordLayoutGroup)
|
|
2114
|
-
return group
|
|
2115
2194
|
|
|
2116
2195
|
def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
|
|
2117
2196
|
self.logger.debug("writeSwRecordLayout %s" % layout.getShortName())
|
|
@@ -2147,7 +2226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2147
2226
|
maps_tag = ET.SubElement(element, "DATA-TYPE-MAPS")
|
|
2148
2227
|
for map in maps:
|
|
2149
2228
|
child_element = ET.SubElement(maps_tag, "DATA-TYPE-MAP")
|
|
2150
|
-
self.
|
|
2229
|
+
self.writeARObjectAttributes(child_element, map)
|
|
2151
2230
|
self.setChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF", map.getApplicationDataTypeRef())
|
|
2152
2231
|
self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
|
|
2153
2232
|
|
|
@@ -2157,7 +2236,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2157
2236
|
maps_tag = ET.SubElement(element, "MODE-REQUEST-TYPE-MAPS")
|
|
2158
2237
|
for map in maps:
|
|
2159
2238
|
child_element = ET.SubElement(maps_tag, "MODE-REQUEST-TYPE-MAP")
|
|
2160
|
-
self.
|
|
2239
|
+
self.writeARObjectAttributes(child_element, map)
|
|
2161
2240
|
self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.getImplementationDataTypeRef())
|
|
2162
2241
|
self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", map.getModeGroupRef())
|
|
2163
2242
|
|
|
@@ -2270,8 +2349,10 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2270
2349
|
self.writeFrame(child_element, frame)
|
|
2271
2350
|
|
|
2272
2351
|
def writeNmNode(self, element: ET.Element, nm_node: NmNode):
|
|
2352
|
+
self.writeIdentifiable(element, nm_node)
|
|
2273
2353
|
self.setChildElementOptionalRefType(element, "CONTROLLER-REF", nm_node.getControllerRef())
|
|
2274
2354
|
self.setChildElementOptionalRefType(element, "NM-IF-ECU-REF", nm_node.getNmIfEcuRef())
|
|
2355
|
+
self.setChildElementOptionalBooleanValue(element, "NM-PASSIVE-MODE-ENABLED", nm_node.getNmPassiveModeEnabled())
|
|
2275
2356
|
self.setChildElementOptionalNumericalValue(element, "NM-NODE-ID", nm_node.getNmNodeId())
|
|
2276
2357
|
|
|
2277
2358
|
refs = nm_node.getRxNmPduRefs()
|
|
@@ -2289,9 +2370,8 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2289
2370
|
def writeCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
|
|
2290
2371
|
self.logger.debug("write CanNmNode %s" % nm_node.getShortName())
|
|
2291
2372
|
child_element = ET.SubElement(element, "CAN-NM-NODE")
|
|
2292
|
-
self.writeIdentifiable(child_element, nm_node)
|
|
2293
2373
|
self.writeNmNode(child_element, nm_node)
|
|
2294
|
-
|
|
2374
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-CAR-WAKE-UP-RX-ENABLED", nm_node.getNmCarWakeUpRxEnabled())
|
|
2295
2375
|
self.setChildElementOptionalFloatValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
|
|
2296
2376
|
self.setChildElementOptionalFloatValue(child_element, "NM-MSG-REDUCED-TIME", nm_node.getNmMsgReducedTime())
|
|
2297
2377
|
self.setChildElementRxIdentifierRange(child_element, "NM-RANGE-CONFIG", nm_node.getNmRangeConfig())
|
|
@@ -2299,8 +2379,8 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2299
2379
|
def writeUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
|
|
2300
2380
|
self.logger.debug("write UdpNmNode %s" % nm_node.getShortName())
|
|
2301
2381
|
child_element = ET.SubElement(element, "UDP-NM-NODE")
|
|
2302
|
-
self.writeIdentifiable(child_element, nm_node)
|
|
2303
2382
|
self.writeNmNode(child_element, nm_node)
|
|
2383
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-OFFSET", nm_node.getNmMsgCycleOffset())
|
|
2304
2384
|
|
|
2305
2385
|
def writeNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
|
|
2306
2386
|
nodes = parent.getNmNodes()
|
|
@@ -2321,15 +2401,20 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2321
2401
|
refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
|
|
2322
2402
|
for ref in refs:
|
|
2323
2403
|
self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
|
|
2324
|
-
|
|
2325
2404
|
self.setChildElementOptionalBooleanValue(child_element, "NM-BUSLOAD-REDUCTION-ENABLED", coupling.getNmBusloadReductionEnabled())
|
|
2326
2405
|
self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
|
|
2327
2406
|
|
|
2328
2407
|
def writeUdpNmClusterCoupling(self, element: ET.Element, coupling: UdpNmClusterCoupling):
|
|
2329
2408
|
child_element = ET.SubElement(element, "UDP-NM-CLUSTER-COUPLING")
|
|
2409
|
+
refs = coupling.getCoupledClusterRefs()
|
|
2410
|
+
if len(refs) > 0:
|
|
2411
|
+
refs_tag = ET.SubElement(child_element, "COUPLED-CLUSTER-REFS")
|
|
2412
|
+
for ref in refs:
|
|
2413
|
+
self.setChildElementOptionalRefType(refs_tag, "COUPLED-CLUSTER-REF", ref)
|
|
2414
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-IMMEDIATE-RESTART-ENABLED", coupling.getNmImmediateRestartEnabled())
|
|
2330
2415
|
|
|
2331
2416
|
def writeNmConfigNmClusterCouplings(self, element: ET.Element, config: NmConfig):
|
|
2332
|
-
self.logger.debug("
|
|
2417
|
+
self.logger.debug("Write NmConfigNmClusterCouplings <%s>" % config.getShortName())
|
|
2333
2418
|
couplings = config.getNmClusterCouplings()
|
|
2334
2419
|
if len(couplings) > 0:
|
|
2335
2420
|
child_element= ET.SubElement(element, "NM-CLUSTER-COUPLINGS")
|
|
@@ -2342,6 +2427,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2342
2427
|
self.notImplemented("Unsupported Nm Cluster Coupling <%s>" % type(coupling))
|
|
2343
2428
|
|
|
2344
2429
|
def writeNmCluster(self, element: ET.Element, cluster: NmCluster):
|
|
2430
|
+
self.logger.debug("Write NmCluster <%s>" % cluster.getShortName())
|
|
2345
2431
|
self.writeIdentifiable(element, cluster)
|
|
2346
2432
|
self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", cluster.communicationClusterRef)
|
|
2347
2433
|
self.setChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID", cluster.nmChannelId)
|
|
@@ -2350,7 +2436,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2350
2436
|
self.setChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK", cluster.getNmSynchronizingNetwork())
|
|
2351
2437
|
|
|
2352
2438
|
def writeCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
|
|
2353
|
-
self.logger.debug("
|
|
2439
|
+
self.logger.debug("Write CanNmCluster <%s>" % cluster.getShortName())
|
|
2354
2440
|
child_element = ET.SubElement(element, "CAN-NM-CLUSTER")
|
|
2355
2441
|
self.writeNmCluster(child_element, cluster)
|
|
2356
2442
|
|
|
@@ -2369,10 +2455,22 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2369
2455
|
self.setChildElementOptionalNumericalValue(child_element, "NM-USER-DATA-LENGTH", cluster.getNmUserDataLength())
|
|
2370
2456
|
self.setChildElementOptionalFloatValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
|
|
2371
2457
|
|
|
2372
|
-
def writeUdpNmCluster(self, element: ET.Element, cluster:
|
|
2373
|
-
self.logger.debug("Write UdpNmCluster
|
|
2458
|
+
def writeUdpNmCluster(self, element: ET.Element, cluster: UdpNmCluster):
|
|
2459
|
+
self.logger.debug("Write UdpNmCluster <%s>" % cluster.getShortName())
|
|
2374
2460
|
child_element = ET.SubElement(element, "UDP-NM-CLUSTER")
|
|
2375
2461
|
self.writeNmCluster(child_element, cluster)
|
|
2462
|
+
self.setChildElementOptionalIntegerValue(child_element, "NM-CBV-POSITION", cluster.getNmCbvPosition())
|
|
2463
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-CHANNEL-ACTIVE", cluster.getNmChannelActive())
|
|
2464
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-IMMEDIATE-NM-CYCLE-TIME", cluster.getNmImmediateNmCycleTime())
|
|
2465
|
+
self.setChildElementOptionalPositiveInteger(child_element, "NM-IMMEDIATE-NM-TRANSMISSIONS", cluster.getNmImmediateNmTransmissions())
|
|
2466
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-MESSAGE-TIMEOUT-TIME", cluster.getNmMessageTimeoutTime())
|
|
2467
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-MSG-CYCLE-TIME", cluster.getNmMsgCycleTime())
|
|
2468
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-NETWORK-TIMEOUT", cluster.getNmNetworkTimeout())
|
|
2469
|
+
self.setChildElementOptionalIntegerValue(child_element, "NM-NID-POSITION", cluster.getNmNidPosition())
|
|
2470
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-REMOTE-SLEEP-INDICATION-TIME", cluster.getNmRemoteSleepIndicationTime())
|
|
2471
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-REPEAT-MESSAGE-TIME", cluster.getNmRepeatMessageTime())
|
|
2472
|
+
self.setChildElementOptionalTimeValue(child_element, "NM-WAIT-BUS-SLEEP-TIME", cluster.getNmWaitBusSleepTime())
|
|
2473
|
+
self.setChildElementOptionalRefType(child_element, "VLAN-REF", cluster.getVlanRef())
|
|
2376
2474
|
|
|
2377
2475
|
def writeNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
|
|
2378
2476
|
clusters = parent.getNmClusters()
|
|
@@ -2386,45 +2484,311 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2386
2484
|
else:
|
|
2387
2485
|
self.notImplemented("Unsupported Nm Cluster <%s>" % type(cluster))
|
|
2388
2486
|
|
|
2487
|
+
def writeUdpNmEcu(self, element: ET.Element, ecu: UdpNmEcu):
|
|
2488
|
+
if ecu is not None:
|
|
2489
|
+
child_element = ET.SubElement(element, "UDP-NM-ECU")
|
|
2490
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-SYNCHRONIZATION-POINT-ENABLED", ecu.getNmSynchronizationPointEnabled())
|
|
2491
|
+
|
|
2492
|
+
def writeBusDependentNmEcus(self, element: ET.Element, nm_ecu: NmEcu):
|
|
2493
|
+
dependent_nm_ecus = nm_ecu.getBusDependentNmEcus()
|
|
2494
|
+
if len(dependent_nm_ecus) > 0:
|
|
2495
|
+
child_element = ET.SubElement(element, "BUS-DEPENDENT-NM-ECUS")
|
|
2496
|
+
for dependent_nm_ecu in dependent_nm_ecus:
|
|
2497
|
+
if isinstance(dependent_nm_ecu, UdpNmEcu):
|
|
2498
|
+
self.writeUdpNmEcu(child_element, dependent_nm_ecu)
|
|
2499
|
+
else:
|
|
2500
|
+
self.notImplemented("Unsupported BusDependentNmEcu <%s>" % type(dependent_nm_ecu))
|
|
2501
|
+
|
|
2502
|
+
def writeNmEcu(self, element: ET.Element, nm_ecu: NmEcu):
|
|
2503
|
+
child_element = ET.SubElement(element, "NM-ECU")
|
|
2504
|
+
self.writeIdentifiable(child_element, nm_ecu)
|
|
2505
|
+
self.writeBusDependentNmEcus(child_element, nm_ecu)
|
|
2506
|
+
self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", nm_ecu.getEcuInstanceRef())
|
|
2507
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-BUS-SYNCHRONIZATION-ENABLED", nm_ecu.getNmBusSynchronizationEnabled())
|
|
2508
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-COM-CONTROL-ENABLED", nm_ecu.getNmComControlEnabled())
|
|
2509
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-NODE-DETECTION-ENABLED", nm_ecu.getNmNodeDetectionEnabled())
|
|
2510
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-NODE-ID-ENABLED", nm_ecu.getNmNodeIdEnabled())
|
|
2511
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-PDU-RX-INDICATION-ENABLED", nm_ecu.getNmPduRxIndicationEnabled())
|
|
2512
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-REMOTE-SLEEP-IND-ENABLED", nm_ecu.getNmRemoteSleepIndEnabled())
|
|
2513
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-REPEAT-MSG-IND-ENABLED", nm_ecu.getNmRepeatMsgIndEnabled())
|
|
2514
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-STATE-CHANGE-IND-ENABLED", nm_ecu.getNmStateChangeIndEnabled())
|
|
2515
|
+
self.setChildElementOptionalBooleanValue(child_element, "NM-USER-DATA-ENABLED", nm_ecu.getNmUserDataEnabled())
|
|
2516
|
+
|
|
2517
|
+
def writeNmConfigNmIfEcus(self, element: ET.Element, nm_config: NmConfig):
|
|
2518
|
+
ecus = nm_config.getNmIfEcus()
|
|
2519
|
+
if len(ecus) > 0:
|
|
2520
|
+
child_element = ET.SubElement(element, "NM-IF-ECUS")
|
|
2521
|
+
for ecu in ecus:
|
|
2522
|
+
if isinstance(ecu, NmEcu):
|
|
2523
|
+
self.writeNmEcu(child_element, ecu)
|
|
2524
|
+
else:
|
|
2525
|
+
self.notImplemented("Unsupported NmIfEcus <%s>" % type(ecu))
|
|
2526
|
+
|
|
2389
2527
|
def writeNmConfig(self, element: ET.Element, config: NmConfig):
|
|
2390
|
-
self.logger.debug("
|
|
2528
|
+
self.logger.debug("Write NmConfig <%s>" % config.getShortName())
|
|
2391
2529
|
child_element = ET.SubElement(element, "NM-CONFIG")
|
|
2392
2530
|
self.writeIdentifiable(child_element, config)
|
|
2393
2531
|
self.writeNmConfigNmClusters(child_element, config)
|
|
2394
2532
|
self.writeNmConfigNmClusterCouplings(child_element, config)
|
|
2533
|
+
self.writeNmConfigNmIfEcus(child_element, config)
|
|
2534
|
+
|
|
2535
|
+
def writeISignalToIPduMapping(self, element: ET.Element, mapping: ISignalToIPduMapping):
|
|
2536
|
+
if mapping is not None:
|
|
2537
|
+
child_element = ET.SubElement(element, "I-SIGNAL-TO-I-PDU-MAPPING")
|
|
2538
|
+
self.writeIdentifiable(child_element, mapping)
|
|
2539
|
+
self.setChildElementOptionalRefType(child_element, "I-SIGNAL-REF", mapping.getISignalRef())
|
|
2540
|
+
self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.getPackingByteOrder())
|
|
2541
|
+
self.setChildElementOptionalIntegerValue(child_element, "START-POSITION", mapping.getStartPosition())
|
|
2542
|
+
self.setChildElementOptionalLiteral(child_element, "TRANSFER-PROPERTY", mapping.getTransferProperty())
|
|
2543
|
+
|
|
2544
|
+
def writeNmPduISignalToIPduMappings(self, element: ET.Element, pdu: NmPdu):
|
|
2545
|
+
mappings = pdu.getISignalToIPduMappings()
|
|
2546
|
+
if len(mappings) > 0:
|
|
2547
|
+
child_element = ET.SubElement(element, "I-SIGNAL-TO-I-PDU-MAPPINGS")
|
|
2548
|
+
for mapping in mappings:
|
|
2549
|
+
if isinstance(mapping, ISignalToIPduMapping):
|
|
2550
|
+
self.writeISignalToIPduMapping(child_element, mapping)
|
|
2551
|
+
else:
|
|
2552
|
+
self.notImplemented("Unsupported ISignalToIPduMapping <%s>" % type(mapping))
|
|
2395
2553
|
|
|
2396
2554
|
def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
|
|
2397
|
-
self.logger.debug("NmPdu
|
|
2555
|
+
self.logger.debug("Write NmPdu <%s>" % pdu.getShortName())
|
|
2398
2556
|
child_element = ET.SubElement(element, "NM-PDU")
|
|
2399
|
-
self.
|
|
2400
|
-
self.
|
|
2557
|
+
self.writePdu(child_element, pdu)
|
|
2558
|
+
self.writeNmPduISignalToIPduMappings(child_element, pdu)
|
|
2559
|
+
self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", pdu.getUnusedBitPattern())
|
|
2401
2560
|
|
|
2402
2561
|
def writeNPdu(self, element: ET.Element, pdu: NPdu):
|
|
2403
|
-
self.logger.debug("NPdu
|
|
2562
|
+
self.logger.debug("Write NPdu <%s>" % pdu.getShortName())
|
|
2404
2563
|
child_element = ET.SubElement(element, "N-PDU")
|
|
2405
|
-
self.
|
|
2406
|
-
self.writeIPdu(child_element, pdu)
|
|
2407
|
-
|
|
2408
|
-
def writeIPdu(self, element: ET.Element, pdu: IPdu):
|
|
2409
|
-
self.setChildElementOptionalLiteral(element, "LENGTH", pdu.getLength())
|
|
2564
|
+
self.writePdu(child_element, pdu)
|
|
2410
2565
|
|
|
2411
2566
|
def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
|
|
2412
|
-
self.logger.debug("DcmIPdu
|
|
2567
|
+
self.logger.debug("Write DcmIPdu <%s>" % pdu.getShortName())
|
|
2413
2568
|
child_element = ET.SubElement(element, "DCM-I-PDU")
|
|
2414
|
-
self.writeIdentifiable(child_element, pdu)
|
|
2415
2569
|
self.writeIPdu(child_element, pdu)
|
|
2416
2570
|
self.setChildElementOptionalLiteral(child_element, "DIAG-PDU-TYPE", pdu.getDiagPduType())
|
|
2417
2571
|
|
|
2418
|
-
def
|
|
2419
|
-
|
|
2572
|
+
def setSecureCommunicationProps(self, element: ET.Element, key: str, props: SecureCommunicationProps):
|
|
2573
|
+
if props is not None:
|
|
2574
|
+
child_element = ET.SubElement(element, key)
|
|
2575
|
+
self.setChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-LENGTH", props.getAuthDataFreshnessLength())
|
|
2576
|
+
self.setChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-START-POSITION", props.getAuthDataFreshnessStartPosition())
|
|
2577
|
+
self.setChildElementOptionalPositiveInteger(child_element, "AUTH-INFO-TX-LENGTH", props.getAuthInfoTxLength())
|
|
2578
|
+
self.setChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-BUILD-ATTEMPTS", props.getAuthenticationBuildAttempts())
|
|
2579
|
+
self.setChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-RETRIES", props.getAuthenticationRetries())
|
|
2580
|
+
self.setChildElementOptionalPositiveInteger(child_element, "DATA-ID", props.getDataId())
|
|
2581
|
+
self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-ID", props.getFreshnessValueId())
|
|
2582
|
+
self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-LENGTH", props.getFreshnessValueLength())
|
|
2583
|
+
self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH", props.getFreshnessValueTxLength())
|
|
2584
|
+
|
|
2585
|
+
def writeSecuredIPdu(self, element: ET.Element, i_pdu: SecuredIPdu):
|
|
2586
|
+
self.logger.debug("Write SecuredIPdu <%s>" % i_pdu.getShortName())
|
|
2420
2587
|
child_element = ET.SubElement(element, "SECURED-I-PDU")
|
|
2421
|
-
self.
|
|
2422
|
-
self.
|
|
2588
|
+
self.writeIPdu(child_element, i_pdu)
|
|
2589
|
+
self.setChildElementOptionalRefType(child_element, "AUTHENTICATION-PROPS-REF", i_pdu.getAuthenticationPropsRef())
|
|
2590
|
+
self.setChildElementOptionalRefType(child_element, "FRESHNESS-PROPS-REF", i_pdu.getFreshnessPropsRef())
|
|
2591
|
+
self.setChildElementOptionalRefType(child_element, "PAYLOAD-REF", i_pdu.getPayloadRef())
|
|
2592
|
+
self.setSecureCommunicationProps(child_element, "SECURE-COMMUNICATION-PROPS", i_pdu.getSecureCommunicationProps())
|
|
2593
|
+
self.setChildElementOptionalBooleanValue(child_element, "USE-AS-CRYPTOGRAPHIC-I-PDU", i_pdu.getUseAsCryptographicIPdu())
|
|
2594
|
+
|
|
2595
|
+
def writeTpConfig(self, element: ET.Element, config: TpConfig):
|
|
2596
|
+
self.writeIdentifiable(element, config)
|
|
2597
|
+
self.setChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF", config.getCommunicationClusterRef())
|
|
2598
|
+
|
|
2599
|
+
def writeCanTpAddress(self, element: ET.Element, address: CanTpAddress):
|
|
2600
|
+
if address is not None:
|
|
2601
|
+
child_element = ET.SubElement(element, "CAN-TP-ADDRESS")
|
|
2602
|
+
self.writeIdentifiable(child_element, address)
|
|
2603
|
+
self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS", address.getTpAddress())
|
|
2604
|
+
self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS-EXTENSION-VALUE", address.getTpAddressExtensionValue())
|
|
2605
|
+
|
|
2606
|
+
def writeCanTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
|
|
2607
|
+
addresses = config.getTpAddresses()
|
|
2608
|
+
if len(addresses) > 0:
|
|
2609
|
+
child_element = ET.SubElement(element, "TP-ADDRESSS")
|
|
2610
|
+
for address in addresses:
|
|
2611
|
+
if isinstance(address, CanTpAddress):
|
|
2612
|
+
self.writeCanTpAddress(child_element, address)
|
|
2613
|
+
else:
|
|
2614
|
+
self.notImplemented("Unsupported TpAddress <%s>" % type(address))
|
|
2615
|
+
|
|
2616
|
+
def writeCanTpChannel(self, element: ET.Element, channel: CanTpChannel):
|
|
2617
|
+
if channel is not None:
|
|
2618
|
+
child_element = ET.SubElement(element, "CAN-TP-CHANNEL")
|
|
2619
|
+
self.writeIdentifiable(child_element, channel)
|
|
2620
|
+
self.setChildElementOptionalPositiveInteger(child_element, "CHANNEL-ID", channel.getChannelId())
|
|
2621
|
+
self.setChildElementOptionalLiteral(child_element, "CHANNEL-MODE", channel.getChannelMode())
|
|
2622
|
+
|
|
2623
|
+
def writeCanTpConfigTpChannels(self, element: ET.Element, config: CanTpConfig):
|
|
2624
|
+
channels = config.getTpChannels()
|
|
2625
|
+
if len(channels) > 0:
|
|
2626
|
+
child_element = ET.SubElement(element, "TP-CHANNELS")
|
|
2627
|
+
for channel in channels:
|
|
2628
|
+
if isinstance(channel, CanTpChannel):
|
|
2629
|
+
self.writeCanTpChannel(child_element, channel)
|
|
2630
|
+
else:
|
|
2631
|
+
self.notImplemented("Unsupported TpChannel <%s>" % type(channel))
|
|
2632
|
+
|
|
2633
|
+
def writeTpConnection(self, element: ET.Element, connection: TpConnection):
|
|
2634
|
+
self.writeARObjectAttributes(element, connection)
|
|
2635
|
+
ident = connection.getIdent()
|
|
2636
|
+
if ident is not None:
|
|
2637
|
+
child_element = ET.SubElement(element, "IDENT")
|
|
2638
|
+
self.writeReferrable(child_element, ident)
|
|
2639
|
+
|
|
2640
|
+
def writeTpConnectionReceiverRefs(self, element: ET.Element, connection: CanTpConnection):
|
|
2641
|
+
refs = connection.getReceiverRefs()
|
|
2642
|
+
if len(refs) > 0:
|
|
2643
|
+
child_element = ET.SubElement(element, "RECEIVER-REFS")
|
|
2644
|
+
for ref in refs:
|
|
2645
|
+
self.setChildElementOptionalRefType(child_element, "RECEIVER-REF", ref)
|
|
2646
|
+
|
|
2647
|
+
def writeCanTpConnection(self, element: ET.Element, connection: CanTpConnection):
|
|
2648
|
+
if connection is not None:
|
|
2649
|
+
child_element = ET.SubElement(element, "CAN-TP-CONNECTION")
|
|
2650
|
+
self.writeTpConnection(child_element, connection)
|
|
2651
|
+
self.setChildElementOptionalLiteral(child_element, "ADDRESSING-FORMAT", connection.getAddressingFormat())
|
|
2652
|
+
self.setChildElementOptionalRefType(child_element, "CAN-TP-CHANNEL-REF", connection.getCanTpChannelRef())
|
|
2653
|
+
self.setChildElementOptionalBooleanValue(child_element, "CANCELLATION", connection.getCancellation())
|
|
2654
|
+
self.setChildElementOptionalRefType(child_element, "DATA-PDU-REF", connection.getDataPduRef())
|
|
2655
|
+
self.setChildElementOptionalRefType(child_element, "FLOW-CONTROL-PDU-REF", connection.getFlowControlPduRef())
|
|
2656
|
+
self.setChildElementOptionalIntegerValue(child_element, "MAX-BLOCK-SIZE", connection.getMaxBlockSize())
|
|
2657
|
+
self.setChildElementOptionalRefType(child_element, "MULTICAST-REF", connection.getMulticastRef())
|
|
2658
|
+
self.setChildElementOptionalBooleanValue(child_element, "PADDING-ACTIVATION", connection.getPaddingActivation())
|
|
2659
|
+
self.writeTpConnectionReceiverRefs(child_element, connection)
|
|
2660
|
+
self.setChildElementOptionalLiteral(child_element, "TA-TYPE", connection.getTaType())
|
|
2661
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-BR", connection.getTimeoutBr())
|
|
2662
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-BS", connection.getTimeoutBs())
|
|
2663
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CR", connection.getTimeoutCr())
|
|
2664
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CS", connection.getTimeoutCs())
|
|
2665
|
+
self.setChildElementOptionalRefType(child_element, "TP-SDU-REF", connection.getTpSduRef())
|
|
2666
|
+
self.setChildElementOptionalRefType(child_element, "TRANSMITTER-REF", connection.getTransmitterRef())
|
|
2667
|
+
|
|
2668
|
+
def writeCanTpConfigTpConnections(self, element: ET.Element, config: CanTpConfig):
|
|
2669
|
+
connections = config.getTpConnections()
|
|
2670
|
+
if len(connections) > 0:
|
|
2671
|
+
child_element = ET.SubElement(element, "TP-CONNECTIONS")
|
|
2672
|
+
for connection in connections:
|
|
2673
|
+
if isinstance(connection, CanTpConnection):
|
|
2674
|
+
self.writeCanTpConnection(child_element, connection)
|
|
2675
|
+
else:
|
|
2676
|
+
self.notImplemented("Unsupported TpConnection <%s>" % type(connection))
|
|
2677
|
+
|
|
2678
|
+
def writeCanTpEcu(self, element: ET.Element, tp_ecu: CanTpEcu):
|
|
2679
|
+
if tp_ecu is not None:
|
|
2680
|
+
child_element = ET.SubElement(element, "CAN-TP-ECU")
|
|
2681
|
+
self.setChildElementOptionalTimeValue(child_element, "CYCLE-TIME-MAIN-FUNCTION", tp_ecu.getCycleTimeMainFunction())
|
|
2682
|
+
self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", tp_ecu.getEcuInstanceRef())
|
|
2683
|
+
|
|
2684
|
+
def writeCanTpConfigTpEcus(self, element: ET.Element, config: CanTpConfig):
|
|
2685
|
+
tp_ecus = config.getTpEcus()
|
|
2686
|
+
if len(tp_ecus) > 0:
|
|
2687
|
+
child_element = ET.SubElement(element, "TP-ECUS")
|
|
2688
|
+
for tp_ecu in tp_ecus:
|
|
2689
|
+
if isinstance(tp_ecu, CanTpEcu):
|
|
2690
|
+
self.writeCanTpEcu(child_element, tp_ecu)
|
|
2691
|
+
else:
|
|
2692
|
+
self.notImplemented("Unsupported TpEcu <%s>" % type(tp_ecu))
|
|
2693
|
+
|
|
2694
|
+
def writeCanTpNode(self, element: ET.Element, tp_node: CanTpNode):
|
|
2695
|
+
if tp_node is not None:
|
|
2696
|
+
child_element = ET.SubElement(element, "CAN-TP-NODE")
|
|
2697
|
+
self.writeIdentifiable(child_element, tp_node)
|
|
2698
|
+
self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", tp_node.getConnectorRef())
|
|
2699
|
+
self.setChildElementOptionalIntegerValue(child_element, "MAX-FC-WAIT", tp_node.getMaxFcWait())
|
|
2700
|
+
self.setChildElementOptionalTimeValue(child_element, "ST-MIN", tp_node.getStMin())
|
|
2701
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AR", tp_node.getTimeoutAr())
|
|
2702
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AS", tp_node.getTimeoutAs())
|
|
2703
|
+
self.setChildElementOptionalRefType(child_element, "TP-ADDRESS-REF", tp_node.getTpAddressRef())
|
|
2704
|
+
|
|
2705
|
+
def writeCanTpConfigTpNodes(self, element: ET.Element, config: CanTpConfig):
|
|
2706
|
+
tp_nodes = config.getTpNodes()
|
|
2707
|
+
if len(tp_nodes) > 0:
|
|
2708
|
+
child_element = ET.SubElement(element, "TP-NODES")
|
|
2709
|
+
for tp_node in tp_nodes:
|
|
2710
|
+
if isinstance(tp_node, CanTpNode):
|
|
2711
|
+
self.writeCanTpNode(child_element, tp_node)
|
|
2712
|
+
else:
|
|
2713
|
+
self.notImplemented("Unsupported TpNode <%s>" % type(tp_node))
|
|
2714
|
+
|
|
2423
2715
|
|
|
2424
2716
|
def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
|
|
2425
|
-
self.logger.debug("CanTpConfig
|
|
2717
|
+
self.logger.debug("Write CanTpConfig <%s>" % config.getShortName())
|
|
2426
2718
|
child_element = ET.SubElement(element, "CAN-TP-CONFIG")
|
|
2427
|
-
self.
|
|
2719
|
+
self.writeTpConfig(child_element, config)
|
|
2720
|
+
self.writeCanTpConfigTpAddresses(child_element, config)
|
|
2721
|
+
self.writeCanTpConfigTpChannels(child_element, config)
|
|
2722
|
+
self.writeCanTpConfigTpConnections(child_element, config)
|
|
2723
|
+
self.writeCanTpConfigTpEcus(child_element, config)
|
|
2724
|
+
self.writeCanTpConfigTpNodes(child_element, config)
|
|
2725
|
+
|
|
2726
|
+
def writeTpAddress(self, element: ET.Element, address: TpAddress):
|
|
2727
|
+
if address is not None:
|
|
2728
|
+
child_element = ET.SubElement(element, "TP-ADDRESS")
|
|
2729
|
+
self.writeIdentifiable(child_element, address)
|
|
2730
|
+
self.setChildElementOptionalIntegerValue(child_element, "TP-ADDRESS", address.getTpAddress())
|
|
2731
|
+
|
|
2732
|
+
def writeLinTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
|
|
2733
|
+
addresses = config.getTpAddresses()
|
|
2734
|
+
if len(addresses) > 0:
|
|
2735
|
+
child_element = ET.SubElement(element, "TP-ADDRESSS")
|
|
2736
|
+
for address in addresses:
|
|
2737
|
+
if isinstance(address, TpAddress):
|
|
2738
|
+
self.writeTpAddress(child_element, address)
|
|
2739
|
+
else:
|
|
2740
|
+
self.notImplemented("Unsupported TpAddress <%s>" % type(address))
|
|
2741
|
+
|
|
2742
|
+
def writeLinTpConnection(self, element: ET.Element, connection: LinTpConnection):
|
|
2743
|
+
if connection is not None:
|
|
2744
|
+
child_element = ET.SubElement(element, "LIN-TP-CONNECTION")
|
|
2745
|
+
self.writeTpConnection(child_element, connection)
|
|
2746
|
+
self.setChildElementOptionalRefType(child_element, "DATA-PDU-REF", connection.getDataPduRef())
|
|
2747
|
+
self.setChildElementOptionalRefType(child_element, "FLOW-CONTROL-REF", connection.getFlowControlRef())
|
|
2748
|
+
self.setChildElementOptionalRefType(child_element, "LIN-TP-N-SDU-REF", connection.getLinTpNSduRef())
|
|
2749
|
+
self.writeTpConnectionReceiverRefs(child_element, connection)
|
|
2750
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-AS", connection.getTimeoutAs())
|
|
2751
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CR", connection.getTimeoutCr())
|
|
2752
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT-CS", connection.getTimeoutCs())
|
|
2753
|
+
self.setChildElementOptionalRefType(child_element, "TRANSMITTER-REF", connection.getTransmitterRef())
|
|
2754
|
+
|
|
2755
|
+
def writeLinTpConfigTpConnections(self, element: ET.Element, config: LinTpConfig):
|
|
2756
|
+
connections = config.getTpConnections()
|
|
2757
|
+
if len(connections) > 0:
|
|
2758
|
+
child_element = ET.SubElement(element, "TP-CONNECTIONS")
|
|
2759
|
+
for connection in connections:
|
|
2760
|
+
if isinstance(connection, LinTpConnection):
|
|
2761
|
+
self.writeLinTpConnection(child_element, connection)
|
|
2762
|
+
else:
|
|
2763
|
+
self.notImplemented("Unsupported TpConnection <%s>" % type(connection))
|
|
2764
|
+
|
|
2765
|
+
def writeLinTpNode(self, element: ET.Element, tp_node: LinTpNode):
|
|
2766
|
+
if tp_node is not None:
|
|
2767
|
+
child_element = ET.SubElement(element, "LIN-TP-NODE")
|
|
2768
|
+
self.writeIdentifiable(child_element, tp_node)
|
|
2769
|
+
self.setChildElementOptionalRefType(child_element, "CONNECTOR-REF", tp_node.getConnectorRef())
|
|
2770
|
+
self.setChildElementOptionalBooleanValue(element, "DROP-NOT-REQUESTED-NAD", tp_node.getDropNotRequestedNad())
|
|
2771
|
+
self.setChildElementOptionalTimeValue(child_element, "P-2-MAX", tp_node.getP2Max())
|
|
2772
|
+
self.setChildElementOptionalTimeValue(child_element, "P-2-TIMING", tp_node.getP2Timing())
|
|
2773
|
+
self.setChildElementOptionalRefType(child_element, "TP-ADDRESS-REF", tp_node.getTpAddressRef())
|
|
2774
|
+
|
|
2775
|
+
def writeLinTpConfigTpNodes(self, element: ET.Element, config: LinTpConfig):
|
|
2776
|
+
tp_nodes = config.getTpNodes()
|
|
2777
|
+
if len(tp_nodes) > 0:
|
|
2778
|
+
child_element = ET.SubElement(element, "TP-NODES")
|
|
2779
|
+
for tp_node in tp_nodes:
|
|
2780
|
+
if isinstance(tp_node, LinTpNode):
|
|
2781
|
+
self.writeLinTpNode(child_element, tp_node)
|
|
2782
|
+
else:
|
|
2783
|
+
self.notImplemented("Unsupported TpNode <%s>" % type(tp_node))
|
|
2784
|
+
|
|
2785
|
+
def writeLinTpConfig(self, element: ET.Element, config: LinTpConfig):
|
|
2786
|
+
self.logger.debug("Write LinTpConfig <%s>" % config.getShortName())
|
|
2787
|
+
child_element = ET.SubElement(element, "LIN-TP-CONFIG")
|
|
2788
|
+
self.writeTpConfig(child_element, config)
|
|
2789
|
+
self.writeLinTpConfigTpAddresses(child_element, config)
|
|
2790
|
+
self.writeLinTpConfigTpConnections(child_element, config)
|
|
2791
|
+
self.writeLinTpConfigTpNodes(child_element, config)
|
|
2428
2792
|
|
|
2429
2793
|
def writeFrameTriggering(self, element: ET.Element, triggering: FrameTriggering):
|
|
2430
2794
|
ref_list = triggering.getFramePortRefs()
|
|
@@ -2666,7 +3030,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2666
3030
|
def writeSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
|
|
2667
3031
|
if bundle is not None:
|
|
2668
3032
|
child_element = ET.SubElement(element, "SOCKET-CONNECTION-BUNDLE")
|
|
2669
|
-
self.
|
|
3033
|
+
self.writeReferrable(child_element, bundle)
|
|
2670
3034
|
self.writeSocketConnectionBundleConnections(child_element, bundle)
|
|
2671
3035
|
self.setChildElementOptionalRefType(child_element, "SERVER-PORT-REF", bundle.getServerPortRef())
|
|
2672
3036
|
|
|
@@ -2750,12 +3114,13 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2750
3114
|
self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
|
|
2751
3115
|
|
|
2752
3116
|
def writeConsumedEventGroup(self, element: ET.Element, group: ConsumedEventGroup):
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
3117
|
+
if group is not None:
|
|
3118
|
+
child_element = ET.SubElement(element, "CONSUMED-EVENT-GROUP")
|
|
3119
|
+
self.writeIdentifiable(child_element, group)
|
|
3120
|
+
self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", group.getApplicationEndpointRef())
|
|
3121
|
+
self.setChildElementOptionalPositiveInteger(child_element, "EVENT-GROUP-IDENTIFIER", group.getEventGroupIdentifier())
|
|
3122
|
+
self.writeConsumedEventGroupRoutingGroupRefs(child_element, group)
|
|
3123
|
+
self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", group.getSdClientConfig())
|
|
2759
3124
|
|
|
2760
3125
|
def writeConsumedServiceInstanceConsumedEventGroups(self, element: ET.Element, instance: ConsumedServiceInstance):
|
|
2761
3126
|
groups = instance.getConsumedEventGroups()
|
|
@@ -2768,11 +3133,12 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2768
3133
|
self.notImplemented("Unsupported ConsumedEventGroups <%s>" % type(group))
|
|
2769
3134
|
|
|
2770
3135
|
def writeConsumedServiceInstance(self, element: ET.Element, instance: ConsumedServiceInstance):
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
3136
|
+
if instance is not None:
|
|
3137
|
+
child_element = ET.SubElement(element, "CONSUMED-SERVICE-INSTANCE")
|
|
3138
|
+
self.writeIdentifiable(child_element, instance)
|
|
3139
|
+
self.writeConsumedServiceInstanceConsumedEventGroups(child_element, instance)
|
|
3140
|
+
self.setChildElementOptionalRefType(child_element, "PROVIDED-SERVICE-INSTANCE-REF", instance.getProvidedServiceInstanceRef())
|
|
3141
|
+
self.setSdClientConfig(child_element, "SD-CLIENT-CONFIG", instance.getSdClientConfig())
|
|
2776
3142
|
|
|
2777
3143
|
def writeSocketAddressApplicationEndpointConsumedServiceInstances(self, element: ET.Element, end_point: ApplicationEndpoint):
|
|
2778
3144
|
instances = end_point.getConsumedServiceInstances()
|
|
@@ -2784,6 +3150,74 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2784
3150
|
else:
|
|
2785
3151
|
self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
|
|
2786
3152
|
|
|
3153
|
+
def setInitialSdDelayConfig(self, element: ET.Element, key: str, config: InitialSdDelayConfig):
|
|
3154
|
+
if config is not None:
|
|
3155
|
+
child_element = ET.SubElement(element, key)
|
|
3156
|
+
self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE", config.getInitialDelayMaxValue())
|
|
3157
|
+
self.setChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE", config.getInitialDelayMinValue())
|
|
3158
|
+
self.setChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY", config.getInitialRepetitionsBaseDelay())
|
|
3159
|
+
self.setChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX", config.getInitialRepetitionsMax())
|
|
3160
|
+
|
|
3161
|
+
def setSdServerConfig(self, element: ET.Element, key: str, config: SdServerConfig):
|
|
3162
|
+
if config is not None:
|
|
3163
|
+
child_element = ET.SubElement(element, key)
|
|
3164
|
+
self.setInitialSdDelayConfig(child_element, "INITIAL-OFFER-BEHAVIOR", config.getInitialOfferBehavior())
|
|
3165
|
+
self.setChildElementOptionalTimeValue(child_element, "OFFER-CYCLIC-DELAY", config.getOfferCyclicDelay())
|
|
3166
|
+
self.setRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY", config.getRequestResponseDelay())
|
|
3167
|
+
self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MAJOR-VERSION", config.getServerServiceMajorVersion())
|
|
3168
|
+
self.setChildElementOptionalPositiveInteger(child_element, "SERVER-SERVICE-MINOR-VERSION", config.getServerServiceMinorVersion())
|
|
3169
|
+
self.setChildElementOptionalPositiveInteger(child_element, "TTL", config.getTtl())
|
|
3170
|
+
|
|
3171
|
+
def writeEventHandler(self, element: ET.Element, handler: EventHandler):
|
|
3172
|
+
if handler is not None:
|
|
3173
|
+
child_element = ET.SubElement(element, "EVENT-HANDLER")
|
|
3174
|
+
self.writeIdentifiable(child_element, handler)
|
|
3175
|
+
self.setChildElementOptionalRefType(child_element, "APPLICATION-ENDPOINT-REF", handler.getApplicationEndpointRef())
|
|
3176
|
+
|
|
3177
|
+
refs = handler.getConsumedEventGroupRefs()
|
|
3178
|
+
if len(refs) > 0:
|
|
3179
|
+
refs_tag = ET.SubElement(child_element, "CONSUMED-EVENT-GROUP-REFS")
|
|
3180
|
+
for ref in refs:
|
|
3181
|
+
self.setChildElementOptionalRefType(refs_tag, "CONSUMED-EVENT-GROUP-REF", ref)
|
|
3182
|
+
|
|
3183
|
+
self.setChildElementOptionalPositiveInteger(child_element, "MULTICAST-THRESHOLD", handler.getMulticastThreshold())
|
|
3184
|
+
|
|
3185
|
+
refs = handler.getRoutingGroupRefs()
|
|
3186
|
+
if len(refs) > 0:
|
|
3187
|
+
refs_tag = ET.SubElement(child_element, "ROUTING-GROUP-REFS")
|
|
3188
|
+
for ref in refs:
|
|
3189
|
+
self.setChildElementOptionalRefType(refs_tag, "ROUTING-GROUP-REF", ref)
|
|
3190
|
+
self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", handler.getSdServerConfig())
|
|
3191
|
+
|
|
3192
|
+
def writeProvidedServiceInstanceEventHandlers(self, element: ET.Element, instance: ProvidedServiceInstance):
|
|
3193
|
+
handlers = instance.getEventHandlers()
|
|
3194
|
+
if len(handlers) > 0:
|
|
3195
|
+
child_element = ET.SubElement(element, "EVENT-HANDLERS")
|
|
3196
|
+
for handler in handlers:
|
|
3197
|
+
if isinstance(handler, EventHandler):
|
|
3198
|
+
self.writeEventHandler(child_element, handler)
|
|
3199
|
+
else:
|
|
3200
|
+
self.notImplemented("Unsupported Event Handler <%s>" % type(handler))
|
|
3201
|
+
|
|
3202
|
+
def writeProvidedServiceInstance(self, element: ET.Element, instance: ProvidedServiceInstance):
|
|
3203
|
+
if instance is not None:
|
|
3204
|
+
child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCE")
|
|
3205
|
+
self.writeIdentifiable(child_element, instance)
|
|
3206
|
+
self.writeProvidedServiceInstanceEventHandlers(child_element, instance)
|
|
3207
|
+
self.setChildElementOptionalPositiveInteger(child_element, "INSTANCE-IDENTIFIER", instance.getInstanceIdentifier())
|
|
3208
|
+
self.setSdServerConfig(child_element, "SD-SERVER-CONFIG", instance.getSdServerConfig())
|
|
3209
|
+
self.setChildElementOptionalPositiveInteger(child_element, "SERVICE-IDENTIFIER", instance.getServiceIdentifier())
|
|
3210
|
+
|
|
3211
|
+
def writeSocketAddressApplicationEndpointProvidedServiceInstance(self, element: ET.Element, end_point: ApplicationEndpoint):
|
|
3212
|
+
instances = end_point.getProvidedServiceInstances()
|
|
3213
|
+
if len(instances) > 0:
|
|
3214
|
+
child_element = ET.SubElement(element, "PROVIDED-SERVICE-INSTANCES")
|
|
3215
|
+
for instance in instances:
|
|
3216
|
+
if isinstance(instance, ProvidedServiceInstance):
|
|
3217
|
+
self.writeProvidedServiceInstance(child_element, instance)
|
|
3218
|
+
else:
|
|
3219
|
+
self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % type(instance))
|
|
3220
|
+
|
|
2787
3221
|
def writeSocketAddressApplicationEndpoint(self, element: ET.Element, address: SocketAddress):
|
|
2788
3222
|
end_point = address.getApplicationEndpoint()
|
|
2789
3223
|
if end_point is not None:
|
|
@@ -2792,6 +3226,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2792
3226
|
self.writeSocketAddressApplicationEndpointConsumedServiceInstances(child_element, end_point)
|
|
2793
3227
|
self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", end_point.getNetworkEndpointRef())
|
|
2794
3228
|
self.setChildElementOptionalPositiveInteger(child_element, "PRIORITY", end_point.getPriority())
|
|
3229
|
+
self.writeSocketAddressApplicationEndpointProvidedServiceInstance(child_element, end_point)
|
|
2795
3230
|
self.writeTransportProtocolConfiguration(child_element, end_point.getTpConfiguration())
|
|
2796
3231
|
|
|
2797
3232
|
def writeSocketAddressMulticastConnectorRefs(self, element: ET.Element, address: SocketAddress):
|
|
@@ -2891,14 +3326,31 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2891
3326
|
self.writeCommunicationCluster(child_element, cluster)
|
|
2892
3327
|
self.writeAbstractCanCluster(child_element, cluster)
|
|
2893
3328
|
|
|
3329
|
+
def writeMacMulticastGroup(self, element: ET.Element, group: MacMulticastGroup):
|
|
3330
|
+
if group is not None:
|
|
3331
|
+
child_element = ET.SubElement(element, "MAC-MULTICAST-GROUP")
|
|
3332
|
+
self.writeIdentifiable(child_element, group)
|
|
3333
|
+
self.setChildElementOptionalLiteral(child_element, "MAC-MULTICAST-ADDRESS", group.getMacMulticastAddress())
|
|
3334
|
+
|
|
3335
|
+
def writeEthernetClusterMacMulticastGroups(self, element: ET.Element, cluster: EthernetCluster):
|
|
3336
|
+
groups = cluster.getMacMulticastGroups()
|
|
3337
|
+
if len(groups) > 0:
|
|
3338
|
+
child_element = ET.SubElement(element, "MAC-MULTICAST-GROUPS")
|
|
3339
|
+
for group in groups:
|
|
3340
|
+
if isinstance(group, MacMulticastGroup):
|
|
3341
|
+
self.writeMacMulticastGroup(child_element, group)
|
|
3342
|
+
else:
|
|
3343
|
+
self.notImplemented("Unsupported assigned data type <%s>" % type(group))
|
|
3344
|
+
|
|
2894
3345
|
def writeEthernetCluster(self, element: ET.Element, cluster: EthernetCluster):
|
|
2895
3346
|
self.logger.debug("Set EthernetCluster %s" % cluster.getShortName())
|
|
2896
3347
|
child_element = ET.SubElement(element, "ETHERNET-CLUSTER")
|
|
2897
|
-
self.
|
|
3348
|
+
self.writeARElement(child_element, cluster)
|
|
2898
3349
|
|
|
2899
3350
|
child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-VARIANTS")
|
|
2900
3351
|
child_element = ET.SubElement(child_element, "ETHERNET-CLUSTER-CONDITIONAL")
|
|
2901
3352
|
self.writeCommunicationCluster(child_element, cluster)
|
|
3353
|
+
self.writeEthernetClusterMacMulticastGroups(child_element, cluster)
|
|
2902
3354
|
|
|
2903
3355
|
def writeCanFrame(self, element: ET.Element, frame: CanFrame):
|
|
2904
3356
|
self.logger.debug("Write CanFrame %s" % frame.getShortName())
|
|
@@ -2916,10 +3368,14 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2916
3368
|
def writeIPduPort(self, element: ET.Element, port: IPduPort):
|
|
2917
3369
|
child_element = ET.SubElement(element, "I-PDU-PORT")
|
|
2918
3370
|
self.writeCommConnectorPort(child_element, port)
|
|
3371
|
+
self.setChildElementOptionalPositiveInteger(child_element, "KEY-ID", port.getKeyId())
|
|
3372
|
+
self.setChildElementOptionalBooleanValue(child_element, "RX-SECURITY-VERIFICATION", port.getRxSecurityVerification())
|
|
3373
|
+
self.setChildElementOptionalBooleanValue(child_element, "USE-AUTH-DATA-FRESHNESS", port.getUseAuthDataFreshness())
|
|
2919
3374
|
|
|
2920
3375
|
def writeISignalPort(self, element: ET.Element, port: ISignalPort):
|
|
2921
3376
|
child_element = ET.SubElement(element, "I-SIGNAL-PORT")
|
|
2922
3377
|
self.writeCommConnectorPort(child_element, port)
|
|
3378
|
+
self.setChildElementOptionalTimeValue(child_element, "TIMEOUT", port.getTimeout())
|
|
2923
3379
|
|
|
2924
3380
|
def writeCommunicationConnectorEcuCommPortInstances(self, element: ET.Element, connector: CommunicationConnector):
|
|
2925
3381
|
self.logger.debug("write EcuCommPortInstances of CommunicationConnector %s" % connector.getShortName())
|
|
@@ -2934,17 +3390,156 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2934
3390
|
elif isinstance(port, ISignalPort):
|
|
2935
3391
|
self.writeISignalPort(instances_tag, port)
|
|
2936
3392
|
else:
|
|
2937
|
-
self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
|
|
3393
|
+
self._raiseError("Unsupported CommConnectorPort <%s>" % type(port))
|
|
3394
|
+
|
|
3395
|
+
def writeCommunicationController(self, element: ET.Element, controller: CommunicationController):
|
|
3396
|
+
self.setChildElementOptionalBooleanValue(element, "WAKE-UP-BY-CONTROLLER-SUPPORTED", controller.getWakeUpByControllerSupported())
|
|
3397
|
+
|
|
3398
|
+
def setCanControllerFdConfiguration(self, element: ET.Element, key: str, configuration: CanControllerFdConfiguration):
|
|
3399
|
+
if configuration is not None:
|
|
3400
|
+
child_element = ET.SubElement(element, key)
|
|
3401
|
+
#TODO: need to implemented
|
|
3402
|
+
|
|
3403
|
+
def setCanControllerFdConfigurationRequirements(self, element: ET.Element, key: str, requirements: CanControllerFdConfigurationRequirements):
|
|
3404
|
+
if requirements is not None:
|
|
3405
|
+
child_element = ET.SubElement(element, key)
|
|
3406
|
+
self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
|
|
3407
|
+
self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
|
|
3408
|
+
self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
|
|
3409
|
+
self.setChildElementOptionalTimeValue(child_element, "MAX-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMaxTrcvDelayCompensationOffset())
|
|
3410
|
+
self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
|
|
3411
|
+
self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
|
|
3412
|
+
self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
|
|
3413
|
+
self.setChildElementOptionalTimeValue(child_element, "MIN-TRCV-DELAY-COMPENSATION-OFFSET", requirements.getMinTrcvDelayCompensationOffset())
|
|
3414
|
+
self.setChildElementOptionalBooleanValue(child_element, "TX-BIT-RATE-SWITCH", requirements.getTxBitRateSwitch())
|
|
3415
|
+
|
|
3416
|
+
def writeAbstractCanCommunicationControllerAttributes(self, element: ET.Element, attributes: AbstractCanCommunicationControllerAttributes):
|
|
3417
|
+
self.setCanControllerFdConfiguration(element, "CAN-CONTROLLER-FD-CONFIGURATION", attributes.getCanControllerFdAttributes())
|
|
3418
|
+
self.setCanControllerFdConfigurationRequirements(element, "CAN-CONTROLLER-FD-REQUIREMENTS", attributes.getCanControllerFdRequirements())
|
|
3419
|
+
|
|
3420
|
+
def writeCanControllerConfigurationRequirements(self, element: ET.Element, requirements: CanControllerConfigurationRequirements):
|
|
3421
|
+
if requirements is not None:
|
|
3422
|
+
child_element = ET.SubElement(element, "CAN-CONTROLLER-CONFIGURATION-REQUIREMENTS")
|
|
3423
|
+
self.writeAbstractCanCommunicationControllerAttributes(child_element, requirements)
|
|
3424
|
+
self.setChildElementOptionalIntegerValue(child_element, "MAX-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMaxNumberOfTimeQuantaPerBit())
|
|
3425
|
+
self.setChildElementOptionalFloatValue(child_element, "MAX-SAMPLE-POINT", requirements.getMaxSamplePoint())
|
|
3426
|
+
self.setChildElementOptionalFloatValue(child_element, "MAX-SYNC-JUMP-WIDTH", requirements.getMaxSyncJumpWidth())
|
|
3427
|
+
self.setChildElementOptionalIntegerValue(child_element, "MIN-NUMBER-OF-TIME-QUANTA-PER-BIT", requirements.getMinNumberOfTimeQuantaPerBit())
|
|
3428
|
+
self.setChildElementOptionalFloatValue(child_element, "MIN-SAMPLE-POINT", requirements.getMinSamplePoint())
|
|
3429
|
+
self.setChildElementOptionalFloatValue(child_element, "MIN-SYNC-JUMP-WIDTH", requirements.getMinSyncJumpWidth())
|
|
3430
|
+
|
|
3431
|
+
def writeAbstractCanCommunicationControllerCanControllerAttributes(self, element: ET.SubElement, controller: AbstractCanCommunicationController):
|
|
3432
|
+
attributes = controller.getCanControllerAttributes()
|
|
3433
|
+
if attributes is not None:
|
|
3434
|
+
child_element = ET.SubElement(element, "CAN-CONTROLLER-ATTRIBUTES")
|
|
3435
|
+
if isinstance(attributes, CanControllerConfigurationRequirements):
|
|
3436
|
+
self.writeCanControllerConfigurationRequirements(child_element, attributes)
|
|
3437
|
+
else:
|
|
3438
|
+
self.notImplemented("Unsupported CanControllerAttributes <%s>" % type(attributes))
|
|
3439
|
+
|
|
3440
|
+
def writeAbstractCanCommunicationController(self, element: ET.Element, controller: AbstractCanCommunicationController):
|
|
3441
|
+
self.writeCommunicationController(element, controller)
|
|
3442
|
+
self.writeAbstractCanCommunicationControllerCanControllerAttributes(element, controller)
|
|
2938
3443
|
|
|
2939
3444
|
def writeCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
|
|
2940
3445
|
child_element = ET.SubElement(element, "CAN-COMMUNICATION-CONTROLLER")
|
|
2941
3446
|
self.logger.debug("Write CanCommunicationController %s" % controller.getShortName())
|
|
2942
3447
|
self.writeIdentifiable(child_element, controller)
|
|
3448
|
+
variants_tag = ET.SubElement(child_element, "CAN-COMMUNICATION-CONTROLLER-VARIANTS")
|
|
3449
|
+
cond_tag = ET.SubElement(variants_tag, "CAN-COMMUNICATION-CONTROLLER-CONDITIONAL")
|
|
3450
|
+
self.writeAbstractCanCommunicationController(cond_tag, controller)
|
|
3451
|
+
|
|
3452
|
+
def writeCouplingPortSchedulerCouplingPortStructuralElement(self, element: ET.Element, item: CouplingPortStructuralElement):
|
|
3453
|
+
self.writeIdentifiable(element, item)
|
|
3454
|
+
|
|
3455
|
+
def writeCouplingPortFifo(self, element: ET.Element, fifo: CouplingPortFifo):
|
|
3456
|
+
if fifo is not None:
|
|
3457
|
+
child_element = ET.SubElement(element, "COUPLING-PORT-FIFO")
|
|
3458
|
+
self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, fifo)
|
|
3459
|
+
|
|
3460
|
+
def writeCouplingPortScheduler(self, element: ET.Element, scheduler: CouplingPortScheduler):
|
|
3461
|
+
if scheduler is not None:
|
|
3462
|
+
child_element = ET.SubElement(element, "COUPLING-PORT-SCHEDULER")
|
|
3463
|
+
self.writeCouplingPortSchedulerCouplingPortStructuralElement(child_element, scheduler)
|
|
3464
|
+
self.setChildElementOptionalLiteral(child_element, "PORT-SCHEDULER", scheduler.getPortScheduler())
|
|
3465
|
+
|
|
3466
|
+
def writeCouplingPortDetailsCouplingPortStructuralElements(self, element: ET.Element, details: CouplingPortDetails):
|
|
3467
|
+
items = details.getCouplingPortStructuralElements()
|
|
3468
|
+
if len(items) > 0:
|
|
3469
|
+
child_element = ET.SubElement(element, "COUPLING-PORT-STRUCTURAL-ELEMENTS")
|
|
3470
|
+
for item in items:
|
|
3471
|
+
if isinstance(item, CouplingPortFifo):
|
|
3472
|
+
self.writeCouplingPortFifo(child_element, item)
|
|
3473
|
+
elif isinstance(item, CouplingPortScheduler):
|
|
3474
|
+
self.writeCouplingPortScheduler(child_element, item)
|
|
3475
|
+
else:
|
|
3476
|
+
self.notImplemented("Unsupported CouplingPortStructuralElement <%s>" % type(item))
|
|
3477
|
+
|
|
3478
|
+
def writeEthernetPriorityRegeneration(self, element: ET.Element, regeneration: EthernetPriorityRegeneration):
|
|
3479
|
+
if regeneration is not None:
|
|
3480
|
+
child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATION")
|
|
3481
|
+
self.writeReferrable(child_element, regeneration)
|
|
3482
|
+
self.setChildElementOptionalPositiveInteger(child_element, "INGRESS-PRIORITY", regeneration.getIngressPriority())
|
|
3483
|
+
self.setChildElementOptionalPositiveInteger(child_element, "REGENERATED-PRIORITY", regeneration.getRegeneratedPriority())
|
|
3484
|
+
|
|
3485
|
+
def writeCouplingPortDetailsEthernetPriorityRegenerations(self, element: ET.Element, details: CouplingPortDetails):
|
|
3486
|
+
regenerations = details.getEthernetPriorityRegenerations()
|
|
3487
|
+
if len(regenerations) > 0:
|
|
3488
|
+
child_element = ET.SubElement(element, "ETHERNET-PRIORITY-REGENERATIONS")
|
|
3489
|
+
for regeneration in regenerations:
|
|
3490
|
+
if isinstance(regeneration, EthernetPriorityRegeneration):
|
|
3491
|
+
self.writeEthernetPriorityRegeneration(child_element, regeneration)
|
|
3492
|
+
else:
|
|
3493
|
+
self.notImplemented("Unsupported EthernetPriorityRegeneration <%s>" % type(regeneration))
|
|
3494
|
+
|
|
3495
|
+
def setCouplingPortDetails(self, element: ET.Element, key: str, details: CouplingPortDetails):
|
|
3496
|
+
if details is not None:
|
|
3497
|
+
child_element = ET.SubElement(element, key)
|
|
3498
|
+
self.writeCouplingPortDetailsCouplingPortStructuralElements(child_element, details)
|
|
3499
|
+
self.writeCouplingPortDetailsEthernetPriorityRegenerations(child_element, details)
|
|
3500
|
+
self.setChildElementOptionalRefType(child_element, "LAST-EGRESS-SCHEDULER-REF", details.getLastEgressSchedulerRef())
|
|
3501
|
+
|
|
3502
|
+
def writeVlanMembership(self, element: ET.Element, membership: VlanMembership):
|
|
3503
|
+
if membership is not None:
|
|
3504
|
+
child_element = ET.SubElement(element, "VLAN-MEMBERSHIP")
|
|
3505
|
+
self.setChildElementOptionalLiteral(child_element, "SEND-ACTIVITY", membership.getSendActivity())
|
|
3506
|
+
self.setChildElementOptionalRefType(child_element, "VLAN-REF", membership.getVlanRef())
|
|
3507
|
+
|
|
3508
|
+
def writeCouplingPortVlanMemberships(self, element: ET.Element, port: CouplingPort):
|
|
3509
|
+
memberships = port.getVlanMemberships()
|
|
3510
|
+
if len(memberships) > 0:
|
|
3511
|
+
child_element = ET.SubElement(element, "VLAN-MEMBERSHIPS")
|
|
3512
|
+
for membership in memberships:
|
|
3513
|
+
if isinstance(membership, VlanMembership):
|
|
3514
|
+
self.writeVlanMembership(child_element, membership)
|
|
3515
|
+
else:
|
|
3516
|
+
self.notImplemented("Unsupported VlanMembership <%s>" % type(membership))
|
|
3517
|
+
|
|
3518
|
+
def writeCouplingPort(self, element: ET.Element, port: CouplingPort):
|
|
3519
|
+
child_element = ET.SubElement(element, "COUPLING-PORT")
|
|
3520
|
+
self.writeIdentifiable(child_element, port)
|
|
3521
|
+
self.setCouplingPortDetails(child_element, "COUPLING-PORT-DETAILS", port.getCouplingPortDetails())
|
|
3522
|
+
self.setChildElementOptionalLiteral(child_element, "MAC-LAYER-TYPE", port.getMacAddressVlanAssignments())
|
|
3523
|
+
self.writeCouplingPortVlanMemberships(child_element, port)
|
|
3524
|
+
|
|
3525
|
+
def writeEthernetCommunicationControllerCouplingPorts(self, element: ET.Element, controller: EthernetCommunicationController):
|
|
3526
|
+
ports = controller.getCouplingPorts()
|
|
3527
|
+
if len(ports) > 0:
|
|
3528
|
+
child_element = ET.SubElement(element, "COUPLING-PORTS")
|
|
3529
|
+
for port in ports:
|
|
3530
|
+
if isinstance(port, CouplingPort):
|
|
3531
|
+
self.writeCouplingPort(child_element, port)
|
|
3532
|
+
else:
|
|
3533
|
+
self.notImplemented("Unsupported Coupling Port <%s>" % type(port))
|
|
2943
3534
|
|
|
2944
3535
|
def writeEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
|
|
2945
3536
|
child_element = ET.SubElement(element, "ETHERNET-COMMUNICATION-CONTROLLER")
|
|
2946
3537
|
self.logger.debug("Write EthernetCommunicationController %s" % controller.getShortName())
|
|
2947
3538
|
self.writeIdentifiable(child_element, controller)
|
|
3539
|
+
variants_tag = ET.SubElement(child_element, "ETHERNET-COMMUNICATION-CONTROLLER-VARIANTS")
|
|
3540
|
+
cond_tag = ET.SubElement(variants_tag, "ETHERNET-COMMUNICATION-CONTROLLER-CONDITIONAL")
|
|
3541
|
+
self.writeCommunicationController(cond_tag, controller)
|
|
3542
|
+
self.writeEthernetCommunicationControllerCouplingPorts(cond_tag, controller)
|
|
2948
3543
|
|
|
2949
3544
|
def writeEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
|
|
2950
3545
|
controllers = instance.getCommControllers()
|
|
@@ -2964,14 +3559,24 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2964
3559
|
self.writeIdentifiable(element, connector)
|
|
2965
3560
|
self.setChildElementOptionalRefType(element, "COMM-CONTROLLER-REF", connector.getCommControllerRef())
|
|
2966
3561
|
self.writeCommunicationConnectorEcuCommPortInstances(element, connector)
|
|
3562
|
+
self.setChildElementOptionalLiteral(element, "PNC-GATEWAY-TYPE", connector.getPncGatewayType())
|
|
2967
3563
|
|
|
2968
3564
|
def writeCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
|
|
2969
3565
|
self.logger.debug("Write CanCommunicationConnector %s" % connector.getShortName())
|
|
2970
3566
|
self.writeCommunicationConnector(element, connector)
|
|
2971
3567
|
|
|
3568
|
+
def writeEthernetCommunicationConnectorNetworkEndpointRefs(self, element: ET.Element, connector: EthernetCommunicationConnector):
|
|
3569
|
+
refs = connector.getNetworkEndpointRefs()
|
|
3570
|
+
if len(refs) > 0:
|
|
3571
|
+
child_element = ET.SubElement(element, "NETWORK-ENDPOINT-REFS")
|
|
3572
|
+
for ref in refs:
|
|
3573
|
+
self.setChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF", ref)
|
|
3574
|
+
|
|
2972
3575
|
def writeEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
|
|
2973
3576
|
self.logger.debug("Write EthernetCommunicationConnector %s" % connector.getShortName())
|
|
2974
3577
|
self.writeCommunicationConnector(element, connector)
|
|
3578
|
+
self.setChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT", connector.getMaximumTransmissionUnit())
|
|
3579
|
+
self.writeEthernetCommunicationConnectorNetworkEndpointRefs(element, connector)
|
|
2975
3580
|
|
|
2976
3581
|
def writeLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
|
|
2977
3582
|
self.logger.debug("Write LinCommunicationConnector %s" % connector.getShortName())
|
|
@@ -2994,16 +3599,25 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
2994
3599
|
else:
|
|
2995
3600
|
self._raiseError("Unsupported Communication connector <%s>" % type(connector))
|
|
2996
3601
|
|
|
3602
|
+
def writeEcuInstanceAssociatedComIPduGroupRefs(self, element: ET.Element, instance: EcuInstance):
|
|
3603
|
+
refs = instance.getAssociatedComIPduGroupRefs()
|
|
3604
|
+
if len(refs) > 0:
|
|
3605
|
+
child_element = ET.SubElement(element, "ASSOCIATED-COM-I-PDU-GROUP-REFS")
|
|
3606
|
+
for ref in refs:
|
|
3607
|
+
self.setChildElementOptionalRefType(child_element, "ASSOCIATED-COM-I-PDU-GROUP-REF", ref)
|
|
3608
|
+
|
|
2997
3609
|
def writeEcuInstance(self, element: ET.Element, instance: EcuInstance):
|
|
2998
3610
|
self.logger.debug("EcuInstance %s" % instance.getShortName())
|
|
2999
3611
|
child_element = ET.SubElement(element, "ECU-INSTANCE")
|
|
3000
3612
|
self.writeIdentifiable(child_element, instance)
|
|
3613
|
+
self.writeEcuInstanceAssociatedComIPduGroupRefs(child_element, instance)
|
|
3001
3614
|
self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-GW-TIME-BASE", instance.getComConfigurationGwTimeBase())
|
|
3002
3615
|
self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-RX-TIME-BASE", instance.getComConfigurationRxTimeBase())
|
|
3003
3616
|
self.setChildElementOptionalTimeValue(child_element, "COM-CONFIGURATION-TX-TIME-BASE", instance.getComConfigurationTxTimeBase())
|
|
3004
3617
|
self.setChildElementOptionalBooleanValue(child_element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION", instance.getComEnableMDTForCyclicTransmission())
|
|
3005
3618
|
self.writeEcuInstanceCommControllers(child_element, instance)
|
|
3006
3619
|
self.writeEcuInstanceConnectors(child_element, instance)
|
|
3620
|
+
self.setChildElementOptionalIntegerValue(child_element, "DIAGNOSTIC-ADDRESS", instance.getDiagnosticAddress())
|
|
3007
3621
|
self.setChildElementOptionalBooleanValue(child_element, "SLEEP-MODE-SUPPORTED", instance.getSleepModeSupported())
|
|
3008
3622
|
self.setChildElementOptionalBooleanValue(child_element, "WAKE-UP-OVER-BUS-SUPPORTED", instance.getWakeUpOverBusSupported())
|
|
3009
3623
|
|
|
@@ -3060,11 +3674,52 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3060
3674
|
else:
|
|
3061
3675
|
self.notImplemented("Unsupported Sw Mapping %s" % type(sw_mapping))
|
|
3062
3676
|
|
|
3677
|
+
def writeEcuMapping(self, element: ET.Element, mapping: ECUMapping):
|
|
3678
|
+
self.logger.debug("Write ECUMapping <%s>" % mapping.getShortName())
|
|
3679
|
+
if mapping is not None:
|
|
3680
|
+
child_element = ET.SubElement(element, "ECU-MAPPING")
|
|
3681
|
+
self.writeIdentifiable(child_element, mapping)
|
|
3682
|
+
self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", mapping.getEcuInstanceRef())
|
|
3683
|
+
self.setChildElementOptionalRefType(child_element, "ECU-REF", mapping.getEcuRef())
|
|
3684
|
+
|
|
3685
|
+
def writeSystemMappingEcuResourceMappings(self, element: ET.Element, mapping: SystemMapping):
|
|
3686
|
+
ecu_resource_mappings = mapping.getEcuResourceMappings()
|
|
3687
|
+
if len(ecu_resource_mappings) > 0:
|
|
3688
|
+
child_element = ET.SubElement(element, "ECU-RESOURCE-MAPPINGS")
|
|
3689
|
+
for ecu_resource_mapping in ecu_resource_mappings:
|
|
3690
|
+
if isinstance(ecu_resource_mapping, ECUMapping):
|
|
3691
|
+
self.writeEcuMapping(child_element, ecu_resource_mapping)
|
|
3692
|
+
else:
|
|
3693
|
+
self.notImplemented("Unsupported Sw Mapping %s" % type(ecu_resource_mapping))
|
|
3694
|
+
|
|
3695
|
+
def writeSwcToImplMapping(self, element: ET.Element, mapping: SwcToImplMapping):
|
|
3696
|
+
if mapping is not None:
|
|
3697
|
+
child_element = ET.SubElement(element, "SWC-TO-IMPL-MAPPING")
|
|
3698
|
+
self.writeIdentifiable(child_element, mapping)
|
|
3699
|
+
self.setChildElementOptionalRefType(child_element, "COMPONENT-IMPLEMENTATION-REF", mapping.getComponentImplementationRef())
|
|
3700
|
+
irefs = mapping.getComponentIRefs()
|
|
3701
|
+
if len(irefs) > 0:
|
|
3702
|
+
irefs_tag = ET.SubElement(child_element, "COMPONENT-IREFS")
|
|
3703
|
+
for iref in irefs:
|
|
3704
|
+
self.setComponentInSystemInstanceRef(irefs_tag, "COMPONENT-IREF", iref)
|
|
3705
|
+
|
|
3706
|
+
def writeSystemMappingSwImplMappings(self, element: ET.Element, mapping: SystemMapping):
|
|
3707
|
+
sw_impl_mappings = mapping.getSwImplMappings()
|
|
3708
|
+
if len(sw_impl_mappings) > 0:
|
|
3709
|
+
child_element = ET.SubElement(element, "SW-IMPL-MAPPINGS")
|
|
3710
|
+
for sw_impl_mapping in sw_impl_mappings:
|
|
3711
|
+
if isinstance(sw_impl_mapping, SwcToImplMapping):
|
|
3712
|
+
self.writeSwcToImplMapping(child_element, sw_impl_mapping)
|
|
3713
|
+
else:
|
|
3714
|
+
self.notImplemented("Unsupported SwImplMapping <%s>" % type(sw_impl_mapping))
|
|
3715
|
+
|
|
3063
3716
|
def writeSystemMapping(self, element: ET.Element, mapping: SystemMapping):
|
|
3064
|
-
self.logger.debug("Write SystemMapping
|
|
3717
|
+
self.logger.debug("Write SystemMapping <%s>" % mapping.getShortName())
|
|
3065
3718
|
child_element = ET.SubElement(element, "SYSTEM-MAPPING")
|
|
3066
3719
|
self.writeIdentifiable(child_element, mapping)
|
|
3067
3720
|
self.writeSystemMappingDataMappings(child_element, mapping)
|
|
3721
|
+
self.writeSystemMappingEcuResourceMappings(child_element, mapping)
|
|
3722
|
+
self.writeSystemMappingSwImplMappings(child_element, mapping)
|
|
3068
3723
|
self.writeSystemMappingSwMappings(child_element, mapping)
|
|
3069
3724
|
|
|
3070
3725
|
def writeSystemMappings(self, element: ET.Element, system: System):
|
|
@@ -3086,20 +3741,21 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3086
3741
|
self.writeIdentifiable(child_element, prototype)
|
|
3087
3742
|
self.setChildElementOptionalRefType(child_element, "FLAT-MAP-REF", prototype.getFlatMapRef())
|
|
3088
3743
|
self.setChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF", prototype.getSoftwareCompositionTRef())
|
|
3744
|
+
|
|
3745
|
+
def writeSystemFibexElementRefs(self, element: ET.Element, system: System):
|
|
3746
|
+
refs = system.getFibexElementRefs()
|
|
3747
|
+
if len(refs) > 0:
|
|
3748
|
+
fibex_elements_tag = ET.SubElement(element, "FIBEX-ELEMENTS")
|
|
3749
|
+
for ref in refs:
|
|
3750
|
+
child_element = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
|
|
3751
|
+
self.setChildElementOptionalRefType(child_element, "FIBEX-ELEMENT-REF", ref)
|
|
3089
3752
|
|
|
3090
3753
|
def writeSystem(self, element: ET.Element, system: System):
|
|
3091
3754
|
self.logger.debug("Write System %s" % system.getShortName())
|
|
3092
3755
|
child_element = ET.SubElement(element, "SYSTEM")
|
|
3093
|
-
self.
|
|
3094
|
-
|
|
3756
|
+
self.writeARElement(child_element, system)
|
|
3095
3757
|
self.setChildElementOptionalLiteral(child_element, "ECU-EXTRACT-VERSION", system.getEcuExtractVersion())
|
|
3096
|
-
|
|
3097
|
-
if len(refs) > 0:
|
|
3098
|
-
fibex_elements_tag = ET.SubElement(child_element, "FIBEX-ELEMENTS")
|
|
3099
|
-
for ref in refs:
|
|
3100
|
-
fibex_element_ref_conditional_tag = ET.SubElement(fibex_elements_tag, "FIBEX-ELEMENT-REF-CONDITIONAL")
|
|
3101
|
-
self.setChildElementOptionalRefType(fibex_element_ref_conditional_tag, "FIBEX-ELEMENT-REF", ref)
|
|
3102
|
-
|
|
3758
|
+
self.writeSystemFibexElementRefs(child_element, system)
|
|
3103
3759
|
self.writeSystemMappings(child_element, system)
|
|
3104
3760
|
self.writeRootSwCompositionPrototype(child_element, system)
|
|
3105
3761
|
self.setChildElementOptionalRevisionLabelString(child_element, "SYSTEM-VERSION", system.getSystemVersion())
|
|
@@ -3107,10 +3763,13 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3107
3763
|
def writePhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
|
|
3108
3764
|
self.logger.debug("Set PhysicalDimension %s" % dimension.getShortName())
|
|
3109
3765
|
child_element = ET.SubElement(element, "PHYSICAL-DIMENSION")
|
|
3110
|
-
self.
|
|
3111
|
-
self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
|
|
3766
|
+
self.writeARElement(child_element, dimension)
|
|
3112
3767
|
self.setChildElementOptionalNumericalValue(child_element, "LENGTH-EXP", dimension.getLengthExp())
|
|
3768
|
+
self.setChildElementOptionalNumericalValue(child_element, "LUMINOUS-INTENSITY-EXP", dimension.getLuminousIntensityExp())
|
|
3769
|
+
self.setChildElementOptionalNumericalValue(child_element, "MASS-EXP", dimension.getMassExp())
|
|
3770
|
+
self.setChildElementOptionalNumericalValue(child_element, "TEMPERATURE-EXP", dimension.getTemperatureExp())
|
|
3113
3771
|
self.setChildElementOptionalNumericalValue(child_element, "TIME-EXP", dimension.getTimeExp())
|
|
3772
|
+
self.setChildElementOptionalNumericalValue(child_element, "CURRENT-EXP", dimension.getCurrentExp())
|
|
3114
3773
|
|
|
3115
3774
|
def setFlatInstanceDescriptor(self, element: ET.Element, desc: FlatInstanceDescriptor):
|
|
3116
3775
|
self.logger.debug("Set FlatInstanceDescriptor %s" % desc.getShortName())
|
|
@@ -3132,7 +3791,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3132
3791
|
def writeFlatMap(self, element: ET.Element, map: FlatMap):
|
|
3133
3792
|
self.logger.debug("Set FlatMap %s" % map.getShortName())
|
|
3134
3793
|
child_element = ET.SubElement(element, "FLAT-MAP")
|
|
3135
|
-
self.
|
|
3794
|
+
self.writeARElement(child_element, map)
|
|
3136
3795
|
self.writeFlatMapInstances(child_element, map)
|
|
3137
3796
|
|
|
3138
3797
|
def setDataPrototypeMapping(self, element: ET.Element, mapping: DataPrototypeMapping):
|
|
@@ -3165,7 +3824,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3165
3824
|
def writePortInterfaceMappingSet(self, element: ET.Element, mapping_set: PortInterfaceMappingSet):
|
|
3166
3825
|
self.logger.debug("Set PortInterfaceMappingSet %s" % mapping_set.getShortName())
|
|
3167
3826
|
child_element = ET.SubElement(element, "PORT-INTERFACE-MAPPING-SET")
|
|
3168
|
-
self.
|
|
3827
|
+
self.writeARElement(child_element, mapping_set)
|
|
3169
3828
|
self.writePortInterfaceMappings(child_element, mapping_set)
|
|
3170
3829
|
|
|
3171
3830
|
def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
|
|
@@ -3173,14 +3832,28 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3173
3832
|
mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
|
|
3174
3833
|
for mapping in mappings:
|
|
3175
3834
|
child_element = ET.SubElement(mappings_tag, "I-SIGNAL-MAPPING")
|
|
3176
|
-
self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.
|
|
3177
|
-
self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.
|
|
3835
|
+
self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.getSourceSignalRef())
|
|
3836
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.getTargetSignalRef())
|
|
3837
|
+
|
|
3838
|
+
def setTargetIPduRef(self, element: ET.Element, key: str, i_pdu_ref: TargetIPduRef):
|
|
3839
|
+
if i_pdu_ref is not None:
|
|
3840
|
+
child_element = ET.SubElement(element, key)
|
|
3841
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-I-PDU-REF", i_pdu_ref.getTargetIPdu())
|
|
3842
|
+
|
|
3843
|
+
def setIPduMappings(self, element: ET.Element, mappings: List[IPduMapping]):
|
|
3844
|
+
if len(mappings) > 0:
|
|
3845
|
+
mappings_tag = ET.SubElement(element, "I-PDU-MAPPINGS")
|
|
3846
|
+
for mapping in mappings:
|
|
3847
|
+
child_element = ET.SubElement(mappings_tag, "I-PDU-MAPPING")
|
|
3848
|
+
self.setChildElementOptionalRefType(child_element, "SOURCE-I-PDU-REF", mapping.getSourceIpduRef())
|
|
3849
|
+
self.setTargetIPduRef(child_element, "TARGET-I-PDU", mapping.getTargetIPdu())
|
|
3178
3850
|
|
|
3179
3851
|
def writeGateway(self, element: ET.Element, gateway: Gateway):
|
|
3180
3852
|
self.logger.debug("Gateway %s" % gateway.getShortName())
|
|
3181
3853
|
child_element = ET.SubElement(element, "GATEWAY")
|
|
3182
3854
|
self.writeIdentifiable(child_element, gateway)
|
|
3183
3855
|
self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
|
|
3856
|
+
self.setIPduMappings(child_element, gateway.getIPduMappings())
|
|
3184
3857
|
self.setISignalMappings(child_element, gateway.getSignalMappings())
|
|
3185
3858
|
|
|
3186
3859
|
def writeISignal(self, element: ET.Element, signal: ISignal):
|
|
@@ -3371,55 +4044,227 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3371
4044
|
self.setChildElementOptionalRefType(child_element, "PHYSICAL-REQUEST-REF", connection.getPhysicalRequestRef())
|
|
3372
4045
|
self.setChildElementOptionalRefType(child_element, "RESPONSE-REF", connection.getResponseOnEventRef())
|
|
3373
4046
|
|
|
4047
|
+
def writeDiagnosticServiceTableDiagnosticConnectionRefs(self, element: ET.Element, table: DiagnosticServiceTable):
|
|
4048
|
+
refs = table.getDiagnosticConnectionRefs()
|
|
4049
|
+
if len(refs) > 0:
|
|
4050
|
+
refs_tag = ET.SubElement(element, "DIAGNOSTIC-CONNECTIONS")
|
|
4051
|
+
for ref in refs:
|
|
4052
|
+
child_element = ET.SubElement(refs_tag, "DIAGNOSTIC-CONNECTION-REF-CONDITIONAL")
|
|
4053
|
+
self.setChildElementOptionalRefType(child_element, "DIAGNOSTIC-CONNECTION-REF", ref)
|
|
4054
|
+
|
|
3374
4055
|
def writeDiagnosticServiceTable(self, element: ET.Element, table: DiagnosticServiceTable):
|
|
3375
4056
|
self.logger.debug("Write DiagnosticServiceTable %s" % table.getShortName())
|
|
3376
4057
|
child_element = ET.SubElement(element, "DIAGNOSTIC-SERVICE-TABLE")
|
|
3377
4058
|
self.writeIdentifiable(child_element, table)
|
|
4059
|
+
self.writeDiagnosticServiceTableDiagnosticConnectionRefs(child_element, table)
|
|
4060
|
+
self.setChildElementOptionalRefType(child_element, "ECU-INSTANCE-REF", table.getEcuInstanceRef())
|
|
3378
4061
|
|
|
3379
|
-
def
|
|
3380
|
-
self.
|
|
3381
|
-
|
|
3382
|
-
self.
|
|
4062
|
+
def writePdu(self, element: ET.Element, pdu: Pdu):
|
|
4063
|
+
self.writeIdentifiable(element, pdu)
|
|
4064
|
+
self.setChildElementOptionalBooleanValue(element, "HAS-DYNAMIC-LENGTH", pdu.getHasDynamicLength())
|
|
4065
|
+
self.setChildElementOptionalNumericalValue(element, "LENGTH", pdu.getLength())
|
|
3383
4066
|
|
|
3384
|
-
def
|
|
3385
|
-
self.
|
|
4067
|
+
def writeIPdu(self, element: ET.Element, pdu: IPdu):
|
|
4068
|
+
self.writePdu(element, pdu)
|
|
4069
|
+
|
|
4070
|
+
def writeSegmentPosition(self, element: ET.Element, position: SegmentPosition):
|
|
4071
|
+
if position is not None:
|
|
4072
|
+
child_element = ET.SubElement(element, "SEGMENT-POSITION")
|
|
4073
|
+
self.setChildElementOptionalLiteral(child_element, "SEGMENT-BYTE-ORDER", position.getSegmentByteOrder())
|
|
4074
|
+
self.setChildElementOptionalIntegerValue(child_element, "SEGMENT-LENGTH", position.getSegmentLength())
|
|
4075
|
+
self.setChildElementOptionalIntegerValue(child_element, "SEGMENT-POSITION", position.getSegmentPosition())
|
|
4076
|
+
|
|
4077
|
+
def writeMultiplexedPartSegmentPositions(self, element: ET.Element, part: MultiplexedPart):
|
|
4078
|
+
positions = part.getSegmentPositions()
|
|
4079
|
+
if len(positions) > 0:
|
|
4080
|
+
child_element = ET.SubElement(element, "SEGMENT-POSITIONS")
|
|
4081
|
+
for position in positions:
|
|
4082
|
+
if isinstance(position, SegmentPosition):
|
|
4083
|
+
self.writeSegmentPosition(child_element, position)
|
|
4084
|
+
else:
|
|
4085
|
+
self.notImplemented("Unsupported DynamicPart <%s>" % type(position))
|
|
4086
|
+
|
|
4087
|
+
def writeMultiplexedPart(self, element: ET.Element, part: MultiplexedPart):
|
|
4088
|
+
self.writeMultiplexedPartSegmentPositions(element, part)
|
|
4089
|
+
|
|
4090
|
+
def writeDynamicPartAlternative(self, element: ET.Element, alternative: DynamicPartAlternative):
|
|
4091
|
+
if alternative is not None:
|
|
4092
|
+
child_element = ET.SubElement(element, "DYNAMIC-PART-ALTERNATIVE")
|
|
4093
|
+
self.setChildElementOptionalRefType(child_element, "I-PDU-REF", alternative.getIPduRef())
|
|
4094
|
+
self.setChildElementOptionalBooleanValue(child_element, "INITIAL-DYNAMIC-PART", alternative.getInitialDynamicPart())
|
|
4095
|
+
self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-CODE", alternative.getSelectorFieldCode())
|
|
4096
|
+
|
|
4097
|
+
def writeDynamicPartDynamicPartAlternatives(self, element: ET.Element, part: DynamicPart):
|
|
4098
|
+
alternatives = part.getDynamicPartAlternatives()
|
|
4099
|
+
if len(alternatives) > 0:
|
|
4100
|
+
child_element = ET.SubElement(element, "DYNAMIC-PART-ALTERNATIVES")
|
|
4101
|
+
for alternative in alternatives:
|
|
4102
|
+
if isinstance(alternative, DynamicPartAlternative):
|
|
4103
|
+
self.writeDynamicPartAlternative(child_element, alternative)
|
|
4104
|
+
else:
|
|
4105
|
+
self.notImplemented("Unsupported DynamicPartAlternative <%s>" % type(alternative))
|
|
4106
|
+
|
|
4107
|
+
def writeDynamicPart(self, element: ET.Element, part: DynamicPart):
|
|
4108
|
+
child_element = ET.SubElement(element, "DYNAMIC-PART")
|
|
4109
|
+
self.writeMultiplexedPart(child_element, part)
|
|
4110
|
+
self.writeDynamicPartDynamicPartAlternatives(child_element, part)
|
|
4111
|
+
|
|
4112
|
+
def writeMultiplexedIPduDynamicParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
|
|
4113
|
+
part = ipdu.getDynamicPart()
|
|
4114
|
+
if part is not None:
|
|
4115
|
+
child_element = ET.SubElement(element, "DYNAMIC-PARTS")
|
|
4116
|
+
if isinstance(part, DynamicPart):
|
|
4117
|
+
self.writeDynamicPart(child_element, part)
|
|
4118
|
+
else:
|
|
4119
|
+
self.notImplemented("Unsupported DynamicPart <%s>" % type(part))
|
|
4120
|
+
|
|
4121
|
+
def writeStaticPart(self, element: ET.Element, part: StaticPart):
|
|
4122
|
+
child_element = ET.SubElement(element, "STATIC-PART")
|
|
4123
|
+
self.writeMultiplexedPart(child_element, part)
|
|
4124
|
+
self.setChildElementOptionalRefType(child_element, "I-PDU-REF", part.getIPduRef())
|
|
4125
|
+
|
|
4126
|
+
def writeMultiplexedIPduStaticParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
|
|
4127
|
+
part = ipdu.getStaticPart()
|
|
4128
|
+
if part is not None:
|
|
4129
|
+
child_element = ET.SubElement(element, "STATIC-PARTS")
|
|
4130
|
+
if isinstance(part, StaticPart):
|
|
4131
|
+
self.writeStaticPart(child_element, part)
|
|
4132
|
+
else:
|
|
4133
|
+
self.notImplemented("Unsupported StaticPart <%s>" % type(part))
|
|
4134
|
+
|
|
4135
|
+
def writeMultiplexedIPdu(self, element: ET.Element, ipdu: MultiplexedIPdu):
|
|
4136
|
+
self.logger.debug("Write MultiplexedIPdu <%s>" % ipdu.getShortName())
|
|
4137
|
+
child_element = ET.SubElement(element, "MULTIPLEXED-I-PDU")
|
|
4138
|
+
self.writeIPdu(child_element, ipdu)
|
|
4139
|
+
self.writeMultiplexedIPduDynamicParts(child_element, ipdu)
|
|
4140
|
+
self.setChildElementOptionalLiteral(child_element, "SELECTOR-FIELD-BYTE-ORDER", ipdu.getSelectorFieldByteOrder())
|
|
4141
|
+
self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-LENGTH", ipdu.getSelectorFieldLength())
|
|
4142
|
+
self.setChildElementOptionalIntegerValue(child_element, "SELECTOR-FIELD-START-POSITION", ipdu.getSelectorFieldStartPosition())
|
|
4143
|
+
self.writeMultiplexedIPduStaticParts(child_element, ipdu)
|
|
4144
|
+
self.setChildElementOptionalLiteral(child_element, "TRIGGER-MODE", ipdu.getTriggerMode())
|
|
4145
|
+
self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", ipdu.getUnusedBitPattern())
|
|
4146
|
+
|
|
4147
|
+
def writeUserDefinedIPdu(self, element: ET.Element, ipdu: UserDefinedIPdu):
|
|
4148
|
+
self.logger.debug("Write UserDefinedIPdu <%s>" % ipdu.getShortName())
|
|
3386
4149
|
child_element = ET.SubElement(element, "USER-DEFINED-I-PDU")
|
|
3387
|
-
self.
|
|
4150
|
+
self.writeIPdu(child_element, ipdu)
|
|
4151
|
+
self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", ipdu.getCddType())
|
|
3388
4152
|
|
|
3389
4153
|
def writeUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
|
|
3390
|
-
self.logger.debug("Write UserDefinedPdu
|
|
4154
|
+
self.logger.debug("Write UserDefinedPdu <%s>" % pdu.getShortName())
|
|
3391
4155
|
child_element = ET.SubElement(element, "USER-DEFINED-PDU")
|
|
3392
|
-
self.
|
|
4156
|
+
self.writePdu(child_element, pdu)
|
|
4157
|
+
self.setChildElementOptionalLiteral(child_element, "CDD-TYPE", pdu.getCddType())
|
|
3393
4158
|
|
|
3394
4159
|
def writeGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
|
|
3395
|
-
self.logger.debug("Write GeneralPurposePdu
|
|
4160
|
+
self.logger.debug("Write GeneralPurposePdu <%s>" % pdu.getShortName())
|
|
3396
4161
|
child_element = ET.SubElement(element, "GENERAL-PURPOSE-PDU")
|
|
3397
|
-
self.
|
|
4162
|
+
self.writePdu(child_element, pdu)
|
|
3398
4163
|
|
|
3399
4164
|
def writeGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
|
|
3400
|
-
self.logger.debug("Write GeneralPurposeIPdu
|
|
4165
|
+
self.logger.debug("Write GeneralPurposeIPdu <%s>" % i_pdu.getShortName())
|
|
3401
4166
|
child_element = ET.SubElement(element, "GENERAL-PURPOSE-I-PDU")
|
|
3402
|
-
self.
|
|
4167
|
+
self.writeIPdu(child_element, i_pdu)
|
|
4168
|
+
|
|
4169
|
+
def writeSecureCommunicationAuthenticationProps(self, element: ET.Element, props: SecureCommunicationAuthenticationProps):
|
|
4170
|
+
chile_element = ET.SubElement(element, "SECURE-COMMUNICATION-AUTHENTICATION-PROPS")
|
|
4171
|
+
self.writeIdentifiable(chile_element, props)
|
|
4172
|
+
self.setChildElementOptionalLiteral(chile_element, "AUTH-ALGORITHM", props.getAuthAlgorithm())
|
|
4173
|
+
self.setChildElementOptionalPositiveInteger(chile_element, "AUTH-INFO-TX-LENGTH", props.getAuthInfoTxLength())
|
|
4174
|
+
|
|
4175
|
+
def writeSecureCommunicationPropsSetAuthenticationProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
|
|
4176
|
+
propses = props_set.getAuthenticationProps()
|
|
4177
|
+
if len(propses) > 0:
|
|
4178
|
+
child_element = ET.SubElement(element, "AUTHENTICATION-PROPSS")
|
|
4179
|
+
for props in propses:
|
|
4180
|
+
if isinstance(props, SecureCommunicationAuthenticationProps):
|
|
4181
|
+
self.writeSecureCommunicationAuthenticationProps(child_element, props)
|
|
4182
|
+
else:
|
|
4183
|
+
self.notImplemented("Unsupported AuthenticationProps <%s>" % type(props))
|
|
4184
|
+
|
|
4185
|
+
def writeSecureCommunicationFreshnessProps(self, element: ET.Element, props: SecureCommunicationFreshnessProps):
|
|
4186
|
+
child_element = ET.SubElement(element, "SECURE-COMMUNICATION-FRESHNESS-PROPS")
|
|
4187
|
+
self.writeIdentifiable(child_element, props)
|
|
4188
|
+
self.setChildElementOptionalLiteral(child_element, "FRESHNESS-VALUE-LENGTH", props.getFreshnessValueLength())
|
|
4189
|
+
self.setChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH", props.getFreshnessValueTxLength())
|
|
4190
|
+
|
|
4191
|
+
def writeSecureCommunicationPropsSetFreshnessProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
|
|
4192
|
+
propses = props_set.getFreshnessProps()
|
|
4193
|
+
if len(propses) > 0:
|
|
4194
|
+
child_element = ET.SubElement(element, "FRESHNESS-PROPSS")
|
|
4195
|
+
for props in propses:
|
|
4196
|
+
if isinstance(props, SecureCommunicationFreshnessProps):
|
|
4197
|
+
self.writeSecureCommunicationFreshnessProps(child_element, props)
|
|
4198
|
+
else:
|
|
4199
|
+
self.notImplemented("Unsupported FreshnessProps <%s>" % type(props))
|
|
3403
4200
|
|
|
3404
4201
|
def writeSecureCommunicationPropsSet(self, element: ET.Element, set: SecureCommunicationPropsSet):
|
|
3405
4202
|
self.logger.debug("Write SecureCommunicationPropsSet %s" % set.getShortName())
|
|
3406
4203
|
child_element = ET.SubElement(element, "SECURE-COMMUNICATION-PROPS-SET")
|
|
3407
4204
|
self.writeIdentifiable(child_element, set)
|
|
4205
|
+
self.writeSecureCommunicationPropsSetAuthenticationProps(child_element, set)
|
|
4206
|
+
self.writeSecureCommunicationPropsSetFreshnessProps(child_element, set)
|
|
3408
4207
|
|
|
3409
4208
|
def writeSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
|
|
3410
|
-
self.logger.debug("Write SoAdRoutingGroup
|
|
4209
|
+
self.logger.debug("Write SoAdRoutingGroup <%s>" % group.getShortName())
|
|
3411
4210
|
child_element = ET.SubElement(element, "SO-AD-ROUTING-GROUP")
|
|
3412
4211
|
self.writeIdentifiable(child_element, group)
|
|
4212
|
+
self.setChildElementOptionalLiteral(child_element, "EVENT-GROUP-CONTROL-TYPE", group.getEventGroupControlType())
|
|
4213
|
+
|
|
4214
|
+
def writeDoIpLogicAddress(self, element: ET.Element, address: DoIpLogicAddress):
|
|
4215
|
+
if address is not None:
|
|
4216
|
+
child_element = ET.SubElement(element, "DO-IP-LOGIC-ADDRESS")
|
|
4217
|
+
self.writeIdentifiable(child_element, address)
|
|
4218
|
+
self.setChildElementOptionalIntegerValue(child_element, "ADDRESS", address.getAddress())
|
|
4219
|
+
|
|
4220
|
+
def writeDoIpTpConfigDoIpLogicAddresses(self, element: ET.Element, config: DoIpTpConfig):
|
|
4221
|
+
addresses = config.getDoIpLogicAddresses()
|
|
4222
|
+
if len(addresses) > 0:
|
|
4223
|
+
child_element = ET.SubElement(element, "DO-IP-LOGIC-ADDRESSS")
|
|
4224
|
+
for address in addresses:
|
|
4225
|
+
if isinstance(address, DoIpLogicAddress):
|
|
4226
|
+
self.writeDoIpLogicAddress(child_element, address)
|
|
4227
|
+
else:
|
|
4228
|
+
self.notImplemented("Unsupported DoIpLogicAddress <%s>" % type(address))
|
|
4229
|
+
|
|
4230
|
+
def writeDoIpTpConnection(self, element: ET.Element, connection: DoIpTpConnection):
|
|
4231
|
+
if connection is not None:
|
|
4232
|
+
child_element = ET.SubElement(element, "DO-IP-TP-CONNECTION")
|
|
4233
|
+
self.writeTpConnection(child_element, connection)
|
|
4234
|
+
self.setChildElementOptionalRefType(child_element, "DO-IP-SOURCE-ADDRESS-REF", connection.getDoIpSourceAddressRef())
|
|
4235
|
+
self.setChildElementOptionalRefType(child_element, "DO-IP-TARGET-ADDRESS-REF", connection.getDoIpTargetAddressRef())
|
|
4236
|
+
self.setChildElementOptionalRefType(child_element, "TP-SDU-REF", connection.getTpSduRef())
|
|
4237
|
+
|
|
4238
|
+
def writeDoIpTpConfigTpConnections(self, element: ET.Element, config: DoIpTpConfig):
|
|
4239
|
+
connections = config.getTpConnections()
|
|
4240
|
+
if len(connections) > 0:
|
|
4241
|
+
child_element = ET.SubElement(element, "TP-CONNECTIONS")
|
|
4242
|
+
for address in connections:
|
|
4243
|
+
if isinstance(address, DoIpTpConnection):
|
|
4244
|
+
self.writeDoIpTpConnection(child_element, address)
|
|
4245
|
+
else:
|
|
4246
|
+
self.notImplemented("Unsupported TpConnection <%s>" % type(address))
|
|
3413
4247
|
|
|
3414
4248
|
def writeDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
|
|
3415
|
-
self.logger.debug("Write DoIpTpConfig
|
|
4249
|
+
self.logger.debug("Write DoIpTpConfig <%s>" % config.getShortName())
|
|
3416
4250
|
child_element = ET.SubElement(element, "DO-IP-TP-CONFIG")
|
|
3417
|
-
self.
|
|
4251
|
+
self.writeTpConfig(child_element, config)
|
|
4252
|
+
self.writeDoIpTpConfigDoIpLogicAddresses(child_element, config)
|
|
4253
|
+
self.writeDoIpTpConfigTpConnections(child_element, config)
|
|
3418
4254
|
|
|
3419
|
-
def
|
|
3420
|
-
self.
|
|
4255
|
+
def writeLinCommunicationController(self, element: ET.Element, controller: LinCommunicationController):
|
|
4256
|
+
self.writeCommunicationController(element, controller)
|
|
4257
|
+
self.setChildElementOptionalLiteral(element, "PROTOCOL-VERSION", controller.getProtocolVersion())
|
|
4258
|
+
|
|
4259
|
+
def writeLinMaster(self, element: ET.Element, controller: LinMaster):
|
|
4260
|
+
self.logger.debug("Write LinMaster <%s>" % controller.getShortName())
|
|
3421
4261
|
child_element = ET.SubElement(element, "LIN-MASTER")
|
|
3422
|
-
self.writeIdentifiable(child_element,
|
|
4262
|
+
self.writeIdentifiable(child_element, controller)
|
|
4263
|
+
variants_tag = ET.SubElement(child_element, "LIN-MASTER-VARIANTS")
|
|
4264
|
+
cond_tag = ET.SubElement(variants_tag, "LIN-MASTER-CONDITIONAL")
|
|
4265
|
+
self.writeLinCommunicationController(cond_tag, controller)
|
|
4266
|
+
self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE", controller.getTimeBase())
|
|
4267
|
+
self.setChildElementOptionalTimeValue(cond_tag, "TIME-BASE-JITTER", controller.getTimeBaseJitter())
|
|
3423
4268
|
|
|
3424
4269
|
def writeISignalToPduMappings(self, element: ET.Element, parent: ISignalIPdu):
|
|
3425
4270
|
mappings = parent.getISignalToPduMappings()
|
|
@@ -3439,10 +4284,12 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3439
4284
|
if filter is not None:
|
|
3440
4285
|
child_element = ET.SubElement(element, key)
|
|
3441
4286
|
self.setChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE", filter.getDataFilterType())
|
|
4287
|
+
self.setChildElementOptionalIntegerValue(child_element, "MASK", filter.getMask())
|
|
4288
|
+
self.setChildElementOptionalIntegerValue(child_element, "X", filter.getX())
|
|
3442
4289
|
|
|
3443
|
-
def setTransmissionModeConditions(self, element: ET.Element, conditions: List[TransmissionModeCondition]):
|
|
4290
|
+
def setTransmissionModeConditions(self, element: ET.Element, key: str, conditions: List[TransmissionModeCondition]):
|
|
3444
4291
|
if len(conditions) > 0:
|
|
3445
|
-
conditions_tag = ET.SubElement(element,
|
|
4292
|
+
conditions_tag = ET.SubElement(element, key)
|
|
3446
4293
|
for condition in conditions:
|
|
3447
4294
|
child_element = ET.SubElement(conditions_tag, "TRANSMISSION-MODE-CONDITION")
|
|
3448
4295
|
self.setDataFilter(child_element, "DATA-FILTER", condition.getDataFilter())
|
|
@@ -3480,7 +4327,8 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3480
4327
|
def setTransmissionModeDeclaration(self, element: ET.Element, key: str, decl : TransmissionModeDeclaration):
|
|
3481
4328
|
if decl is not None:
|
|
3482
4329
|
child_element = ET.SubElement(element, key)
|
|
3483
|
-
self.setTransmissionModeConditions(child_element, decl.getTransmissionModeConditions())
|
|
4330
|
+
self.setTransmissionModeConditions(child_element, "TRANSMISSION-MODE-CONDITIONS", decl.getTransmissionModeConditions())
|
|
4331
|
+
self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-FALSE-TIMING", decl.getTransmissionModeFalseTiming())
|
|
3484
4332
|
self.setTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING", decl.getTransmissionModeTrueTiming())
|
|
3485
4333
|
|
|
3486
4334
|
def setISignalIPduIPduTimingSpecification(self, element: ET.Element, timing: IPduTiming):
|
|
@@ -3490,14 +4338,14 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3490
4338
|
self.setChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY", timing.getMinimumDelay())
|
|
3491
4339
|
self.setTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION", timing.getTransmissionModeDeclaration())
|
|
3492
4340
|
|
|
3493
|
-
def writeISignalIPdu(self, element: ET.Element,
|
|
3494
|
-
self.logger.debug("ISignalIPdu %s" %
|
|
4341
|
+
def writeISignalIPdu(self, element: ET.Element, ipdu: ISignalIPdu):
|
|
4342
|
+
self.logger.debug("ISignalIPdu %s" % ipdu.getShortName())
|
|
3495
4343
|
child_element = ET.SubElement(element, "I-SIGNAL-I-PDU")
|
|
3496
|
-
self.writeIdentifiable(child_element,
|
|
3497
|
-
self.setChildElementOptionalNumericalValue(child_element, "LENGTH",
|
|
3498
|
-
self.setISignalIPduIPduTimingSpecification(child_element,
|
|
3499
|
-
self.writeISignalToPduMappings(child_element,
|
|
3500
|
-
self.
|
|
4344
|
+
self.writeIdentifiable(child_element, ipdu)
|
|
4345
|
+
self.setChildElementOptionalNumericalValue(child_element, "LENGTH", ipdu.getLength())
|
|
4346
|
+
self.setISignalIPduIPduTimingSpecification(child_element, ipdu.getIPduTimingSpecification())
|
|
4347
|
+
self.writeISignalToPduMappings(child_element, ipdu)
|
|
4348
|
+
self.setChildElementOptionalIntegerValue(child_element, "UNUSED-BIT-PATTERN", ipdu.getUnusedBitPattern())
|
|
3501
4349
|
|
|
3502
4350
|
def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
|
|
3503
4351
|
if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
|
|
@@ -3572,6 +4420,8 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3572
4420
|
self.writeSecuredIPdu(element, ar_element)
|
|
3573
4421
|
elif isinstance(ar_element, CanTpConfig):
|
|
3574
4422
|
self.writeCanTpConfig(element, ar_element)
|
|
4423
|
+
elif isinstance(ar_element, LinTpConfig):
|
|
4424
|
+
self.writeLinTpConfig(element, ar_element)
|
|
3575
4425
|
elif isinstance(ar_element, LinCluster):
|
|
3576
4426
|
self.writeLinCluster(element, ar_element)
|
|
3577
4427
|
elif isinstance(ar_element, CanCluster):
|
|
@@ -3664,7 +4514,7 @@ class ARXMLWriter(AbstractARXMLWriter):
|
|
|
3664
4514
|
|
|
3665
4515
|
|
|
3666
4516
|
def save(self, filename, document: AUTOSAR):
|
|
3667
|
-
self.logger.info("
|
|
4517
|
+
self.logger.info("Saving %s ..." % filename)
|
|
3668
4518
|
|
|
3669
4519
|
root = ET.Element("AUTOSAR", self.nsmap)
|
|
3670
4520
|
root.attrib["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"
|