armodel 1.7.6__py3-none-any.whl → 1.7.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/GenericStructure/GeneralTemplateClasses/ARPackage.py +1 -1
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +9 -3
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +17 -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/Fibex4Ethernet/EthernetTopology.py +9 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +483 -54
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +9 -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 +592 -17
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +20 -10
- 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 +3 -0
- armodel/parser/arxml_parser.py +614 -123
- 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 +694 -139
- {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/METADATA +41 -3
- {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/RECORD +41 -37
- {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/LICENSE +0 -0
- {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/WHEEL +0 -0
- {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/entry_points.txt +0 -0
- {armodel-1.7.6.dist-info → armodel-1.7.7.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -2,6 +2,10 @@ from typing import List
|
|
|
2
2
|
import xml.etree.ElementTree as ET
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
+
from armodel.models.M2.AUTOSARTemplates.SystemTemplate.SWmapping import SwcToImplMapping
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
5
9
|
from ..models.M2.MSR.AsamHdo.AdminData import AdminData
|
|
6
10
|
from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition, SwBaseType
|
|
7
11
|
from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
|
|
@@ -25,7 +29,7 @@ from ..models.M2.MSR.Documentation.TextModel.LanguageDataModel import LLongName,
|
|
|
25
29
|
from ..models.M2.MSR.Documentation.TextModel.MultilanguageData import MultiLanguageOverviewParagraph, MultiLanguageParagraph, MultiLanguagePlainText, MultilanguageLongName
|
|
26
30
|
|
|
27
31
|
from ..models.M2.AUTOSARTemplates.AutosarTopLevelStructure import AUTOSAR
|
|
28
|
-
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswCalledEntity, BswDataReceivedEvent, BswInternalBehavior, BswInternalTriggerOccurredEvent, BswInterruptEntity, BswModeSwitchEvent, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswModeSenderPolicy, BswTimingEvent
|
|
32
|
+
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswBehavior import BswBackgroundEvent, BswCalledEntity, BswDataReceivedEvent, BswExternalTriggerOccurredEvent, BswInternalBehavior, BswInternalTriggerOccurredEvent, BswInterruptEntity, BswModeSwitchEvent, BswModuleEntity, BswSchedulableEntity, BswScheduleEvent, BswModeSenderPolicy, BswTimingEvent
|
|
29
33
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswInterfaces import BswModuleEntry
|
|
30
34
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswImplementation import BswImplementation
|
|
31
35
|
from ..models.M2.AUTOSARTemplates.BswModuleTemplate.BswOverview import BswModuleDescription
|
|
@@ -47,19 +51,19 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.Timing
|
|
|
47
51
|
from ..models.M2.AUTOSARTemplates.DiagnosticExtract.DiagnosticContribution import DiagnosticServiceTable
|
|
48
52
|
from ..models.M2.AUTOSARTemplates.ECUCDescriptionTemplate import EcucAbstractReferenceValue, EcucContainerValue, EcucInstanceReferenceValue, EcucModuleConfigurationValues, EcucNumericalParamValue, EcucParameterValue, EcucReferenceValue, EcucTextualParamValue, EcucValueCollection
|
|
49
53
|
from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyInstanceRef
|
|
50
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable
|
|
54
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable, Referrable
|
|
51
55
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
|
|
52
56
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
|
|
53
57
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Ip6AddressString, RefType, ARLiteral
|
|
54
58
|
from ..models.M2.AUTOSARTemplates.GenericStructure.LifeCycles import LifeCycleInfoSet
|
|
55
59
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
|
|
56
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
|
|
60
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent, DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent, ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent, TimingEvent
|
|
57
61
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationPrimitiveDataType, ApplicationRecordDataType, ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
|
|
58
62
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet, EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
|
|
59
63
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
|
|
60
64
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
|
|
61
65
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, VariableInAtomicSWCTypeInstanceRef
|
|
62
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
|
|
66
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest, TransmissionAcknowledgementRequest
|
|
63
67
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
|
|
64
68
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, ApplicationSwComponentType, ComplexDeviceDriverSwComponentType, CompositionSwComponentType, EcuAbstractionSwComponentType, PortGroup, SensorActuatorSwComponentType, ServiceSwComponentType, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
|
|
65
69
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
|
|
@@ -78,12 +82,13 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes im
|
|
|
78
82
|
from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping , System, SystemMapping
|
|
79
83
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
|
|
80
84
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import DiagnosticConnection
|
|
81
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.
|
|
85
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.ECUResourceMapping import ECUMapping
|
|
86
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmEcu, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmEcu, UdpNmNode
|
|
82
87
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
|
|
83
88
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable, LinUnconditionalFrame, ScheduleTableEntry
|
|
84
89
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinCommunicationController, LinMaster
|
|
85
90
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, CommunicationController, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinCluster, LinPhysicalChannel, PhysicalChannel
|
|
86
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DcmIPdu, Frame, FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignal, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalTriggering, MultiplexedIPdu, NPdu, NmPdu, PduTriggering, SecureCommunicationPropsSet, SecuredIPdu, SystemSignal, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
|
|
91
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import DcmIPdu, DynamicPart, DynamicPartAlternative, Frame, FrameTriggering, GeneralPurposeIPdu, GeneralPurposePdu, IPdu, IPduTiming, ISignal, ISignalGroup, ISignalIPdu, ISignalIPduGroup, ISignalToIPduMapping, ISignalTriggering, MultiplexedIPdu, MultiplexedPart, NPdu, NmPdu, Pdu, PduTriggering, SecureCommunicationAuthenticationProps, SecureCommunicationFreshnessProps, SecureCommunicationProps, SecureCommunicationPropsSet, SecuredIPdu, SegmentPosition, StaticPart, SystemSignal, SystemSignalGroup, UserDefinedIPdu, UserDefinedPdu
|
|
87
92
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
|
|
88
93
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
|
|
89
94
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrame, CanFrameTriggering, RxIdentifierRange
|
|
@@ -94,7 +99,7 @@ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEnd
|
|
|
94
99
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, EventHandler, GenericTp, ProvidedServiceInstance, SdServerConfig, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
|
|
95
100
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import CouplingPort, CouplingPortDetails, CouplingPortFifo, CouplingPortScheduler, CouplingPortStructuralElement, EthernetCluster, EthernetCommunicationConnector, EthernetCommunicationController, EthernetPriorityRegeneration, InitialSdDelayConfig, MacMulticastGroup, RequestResponseDelay, SdClientConfig, VlanMembership
|
|
96
101
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import Gateway, IPduMapping, ISignalMapping, TargetIPduRef
|
|
97
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpConfig, DoIpTpConfig, LinTpConfig
|
|
102
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.TransportProtocols import CanTpAddress, CanTpChannel, CanTpConfig, CanTpConnection, CanTpEcu, CanTpNode, DoIpLogicAddress, DoIpTpConfig, DoIpTpConnection, LinTpConfig, LinTpConnection, LinTpNode, TpAddress, TpConfig, TpConnection
|
|
98
103
|
|
|
99
104
|
from .abstract_arxml_parser import AbstractARXMLParser
|
|
100
105
|
|
|
@@ -119,13 +124,24 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
119
124
|
sd.setValue(child_element.text)
|
|
120
125
|
sdg.addSd(sd)
|
|
121
126
|
|
|
127
|
+
def readSdgCaption(self, element: ET.Element, sdg:Sdg):
|
|
128
|
+
child_element = self.find(element, "SDG-CAPTION")
|
|
129
|
+
if child_element is not None:
|
|
130
|
+
sdg.createSdgCaption(self.getShortName(child_element))
|
|
131
|
+
|
|
132
|
+
def readSdgSdxRefs(self, element: ET.SubElement, sdg:Sdg):
|
|
133
|
+
for ref in self.getChildElementRefTypeList(element, "SDX-REF"):
|
|
134
|
+
sdg.addSdxRef(ref)
|
|
135
|
+
|
|
122
136
|
def getSdg(self, element: ET.Element) -> Sdg:
|
|
123
137
|
sdg = Sdg()
|
|
124
138
|
if 'GID' in element.attrib:
|
|
125
139
|
sdg.setGID(element.attrib["GID"])
|
|
140
|
+
self.readSdgCaption(element, sdg)
|
|
126
141
|
self.readSd(element, sdg)
|
|
127
142
|
for child_element in self.findall(element, "SDG"):
|
|
128
143
|
sdg.addSdgContentsType(self.getSdg(child_element))
|
|
144
|
+
self.readSdgSdxRefs(element, sdg)
|
|
129
145
|
return sdg
|
|
130
146
|
|
|
131
147
|
def readSdgs(self, element: ET.Element, admin_data: AdminData):
|
|
@@ -143,9 +159,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
143
159
|
|
|
144
160
|
self.readSdgs(child_element, admin_data)
|
|
145
161
|
return admin_data
|
|
162
|
+
|
|
163
|
+
def readReferrable(self, element: ET.Element, referrable: Referrable):
|
|
164
|
+
self.readARObjectAttributes(element, referrable)
|
|
146
165
|
|
|
147
166
|
def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
148
|
-
self.
|
|
167
|
+
self.readReferrable(element, referrable)
|
|
149
168
|
referrable.setLongName(self.getMultilanguageLongName(element, "LONG-NAME"))
|
|
150
169
|
|
|
151
170
|
def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
|
|
@@ -315,12 +334,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
315
334
|
self.readBswEvent(element, event)
|
|
316
335
|
|
|
317
336
|
def readBswModeSwitchEvent(self, element: ET.Element, event: BswModeSwitchEvent):
|
|
318
|
-
self.logger.debug("
|
|
337
|
+
self.logger.debug("Read BswModeSwitchEvent <%s>" % event.getShortName())
|
|
319
338
|
# Read the Inherit BswScheduleEvent
|
|
320
339
|
self.readBswScheduleEvent(element, event)
|
|
321
340
|
|
|
322
341
|
def readBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
|
|
323
|
-
self.logger.debug("
|
|
342
|
+
self.logger.debug("Read BswTimingEvent <%s>" % event.getShortName())
|
|
324
343
|
# Read the Inherit BswScheduleEvent
|
|
325
344
|
self.readBswScheduleEvent(element, event)
|
|
326
345
|
event.setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
|
|
@@ -330,13 +349,13 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
330
349
|
self.logger.debug(" Period: <%f, %s>" % (event.getPeriod().getValue(), event.getPeriod().getText()))
|
|
331
350
|
|
|
332
351
|
def readBswDataReceivedEvent(self, element: ET.Element, event: BswDataReceivedEvent):
|
|
333
|
-
self.logger.debug("
|
|
352
|
+
self.logger.debug("Read BswDataReceivedEvent <%s>" % event.getShortName())
|
|
334
353
|
# Read the Inherit BswScheduleEvent
|
|
335
354
|
self.readBswScheduleEvent(element, event)
|
|
336
355
|
event.setDataRef(self.getChildElementOptionalRefType(element, "DATA-REF"))
|
|
337
356
|
|
|
338
357
|
def readBswInternalTriggerOccurredEvent(self, element: ET.Element, event: BswInternalTriggerOccurredEvent):
|
|
339
|
-
self.logger.debug("
|
|
358
|
+
self.logger.debug("Read BswInternalTriggerOccurredEvent <%s>" % event.getShortName())
|
|
340
359
|
# Read the Inherit BswScheduleEvent
|
|
341
360
|
self.readBswScheduleEvent(element, event)
|
|
342
361
|
event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
|
|
@@ -639,6 +658,13 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
639
658
|
else:
|
|
640
659
|
self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
|
|
641
660
|
|
|
661
|
+
def readBswBackgroundEvent(self, element: ET.Element, event: BswBackgroundEvent):
|
|
662
|
+
self.readBswScheduleEvent(element, event)
|
|
663
|
+
|
|
664
|
+
def readBswExternalTriggerOccurredEvent(self, element: ET.Element, event: BswExternalTriggerOccurredEvent):
|
|
665
|
+
self.readBswScheduleEvent(element, event)
|
|
666
|
+
event.setTriggerRef(self.getChildElementOptionalRefType(element, "TRIGGER-REF"))
|
|
667
|
+
|
|
642
668
|
def readBswInternalBehaviorEvents(self, element: ET.Element, behavior: BswInternalBehavior):
|
|
643
669
|
for child_element in self.findall(element, "EVENTS/*"):
|
|
644
670
|
tag_name = self.getTagName(child_element)
|
|
@@ -654,6 +680,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
654
680
|
elif tag_name == "BSW-INTERNAL-TRIGGER-OCCURRED-EVENT":
|
|
655
681
|
event = behavior.createBswInternalTriggerOccurredEvent(self.getShortName(child_element))
|
|
656
682
|
self.readBswInternalTriggerOccurredEvent(child_element, event)
|
|
683
|
+
elif tag_name == "BSW-BACKGROUND-EVENT":
|
|
684
|
+
event = behavior.createBswBackgroundEvent(self.getShortName(child_element))
|
|
685
|
+
self.readBswBackgroundEvent(child_element, event)
|
|
686
|
+
elif tag_name == "BSW-EXTERNAL-TRIGGER-OCCURRED-EVENT":
|
|
687
|
+
event = behavior.createBswExternalTriggerOccurredEvent(self.getShortName(child_element))
|
|
688
|
+
self.readBswExternalTriggerOccurredEvent(child_element, event)
|
|
657
689
|
else:
|
|
658
690
|
self.notImplemented("Unsupported BswModuleEntity <%s>" % tag_name)
|
|
659
691
|
|
|
@@ -800,11 +832,13 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
800
832
|
impl.setArReleaseVersion(self.getChildElementOptionalLiteral(element, "AR-RELEASE-VERSION")) \
|
|
801
833
|
.setBehaviorRef(self.getChildElementOptionalRefType(element, "BEHAVIOR-REF"))
|
|
802
834
|
self.readBswImplementationVendorSpecificModuleDefRefs(element, impl)
|
|
835
|
+
AUTOSAR.getInstance().addImplementationBehaviorMap(impl.getFullName(), impl.getBehaviorRef().getValue())
|
|
803
836
|
|
|
804
837
|
def readSwcImplementation(self, element: ET.Element, impl: SwcImplementation):
|
|
805
838
|
self.logger.debug("Read SwcImplementation <%s>" % impl.getShortName())
|
|
806
839
|
self.readImplementation(element, impl)
|
|
807
840
|
impl.setBehaviorRef(self.getChildElementOptionalRefType(element, "BEHAVIOR-REF"))
|
|
841
|
+
AUTOSAR.getInstance().addImplementationBehaviorMap(impl.getFullName(), impl.getBehaviorRef().getValue())
|
|
808
842
|
|
|
809
843
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
810
844
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
@@ -1008,9 +1042,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1008
1042
|
.setTargetProvidedOperationRef(self.getChildElementRefType(parent.getShortName(), child_element, "TARGET-PROVIDED-OPERATION-REF"))
|
|
1009
1043
|
parent.setOperationIRef(operation_iref)
|
|
1010
1044
|
|
|
1011
|
-
def readOperationInvokedEvent(self, element: ET.Element,
|
|
1012
|
-
|
|
1013
|
-
event = parent.createOperationInvokedEvent(short_name)
|
|
1045
|
+
def readOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
|
|
1046
|
+
self.logger.debug("Read OperationInvokedEvent <%s>" % event.getShortName())
|
|
1014
1047
|
self.readPOperationIRef(element, "OPERATION-IREF", event)
|
|
1015
1048
|
self.readRTEEvent(element, event)
|
|
1016
1049
|
|
|
@@ -1068,60 +1101,76 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1068
1101
|
option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
|
|
1069
1102
|
behavior.addPortAPIOption(option)
|
|
1070
1103
|
|
|
1071
|
-
def readTimingEvent(self, element: ET.Element,
|
|
1072
|
-
|
|
1073
|
-
event = parent.createTimingEvent(short_name)
|
|
1104
|
+
def readTimingEvent(self, element: ET.Element, event: TimingEvent):
|
|
1105
|
+
self.logger.debug("Read TimingEvent <%s>" % event.getShortName())
|
|
1074
1106
|
self.readRTEEvent(element, event)
|
|
1075
1107
|
event.setOffset(self.getChildElementOptionalTimeValue(element, "OFFSET")) \
|
|
1076
1108
|
.setPeriod(self.getChildElementOptionalTimeValue(element, "PERIOD"))
|
|
1077
1109
|
|
|
1078
|
-
def readDataReceivedEvent(self, element: ET.Element,
|
|
1079
|
-
|
|
1080
|
-
event = parent.createDataReceivedEvent(short_name)
|
|
1110
|
+
def readDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
|
|
1111
|
+
self.logger.debug("Read DataReceivedEvent <%s>" % event.getShortName())
|
|
1081
1112
|
self.readRTEEvent(element, event)
|
|
1082
1113
|
self.readRVariableInAtomicSwcInstanceRef(element, event)
|
|
1083
1114
|
|
|
1084
|
-
def readSwcModeSwitchEvent(self, element: ET.Element,
|
|
1085
|
-
|
|
1086
|
-
event = parent.createSwcModeSwitchEvent(short_name)
|
|
1115
|
+
def readSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
|
|
1116
|
+
self.logger.debug("Read SwcModeSwitchEvent <%s>" % event.getShortName())
|
|
1087
1117
|
self.readRTEEvent(element, event)
|
|
1088
1118
|
event.setActivation(self.getChildElementOptionalLiteral(element, "ACTIVATION"))
|
|
1089
1119
|
self.readRModeInAtomicSwcInstanceRef(element, event)
|
|
1090
1120
|
|
|
1091
|
-
def readInternalTriggerOccurredEvent(self, element: ET.Element,
|
|
1092
|
-
|
|
1093
|
-
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
1121
|
+
def readInternalTriggerOccurredEvent(self, element: ET.Element, event: InternalTriggerOccurredEvent):
|
|
1122
|
+
self.logger.debug("Read InternalTriggerOccurredEvent <%s>" % event.getShortName())
|
|
1094
1123
|
self.readRTEEvent(element, event)
|
|
1095
1124
|
event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
|
|
1096
1125
|
|
|
1097
|
-
def readInitEvent(self, element,
|
|
1098
|
-
|
|
1099
|
-
event = parent.createInitEvent(short_name)
|
|
1126
|
+
def readInitEvent(self, element, event: InitEvent):
|
|
1127
|
+
self.logger.debug("Read InitEvent <%s>" % event.getShortName())
|
|
1100
1128
|
self.readRTEEvent(element, event)
|
|
1101
1129
|
|
|
1102
|
-
def readAsynchronousServerCallReturnsEvent(self, element,
|
|
1103
|
-
|
|
1104
|
-
event = parent.createAsynchronousServerCallReturnsEvent(short_name)
|
|
1130
|
+
def readAsynchronousServerCallReturnsEvent(self, element, event: AsynchronousServerCallReturnsEvent):
|
|
1131
|
+
self.logger.debug("Read AsynchronousServerCallReturnsEvent <%s>" % event.getShortName())
|
|
1105
1132
|
self.readRTEEvent(element, event)
|
|
1106
1133
|
event.setActivationReasonRepresentationRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
|
|
1107
1134
|
|
|
1135
|
+
def readModeSwitchedAckEvent(self, element, event: ModeSwitchedAckEvent):
|
|
1136
|
+
self.logger.debug("Read ModeSwitchedAckEvent <%s>" % event.getShortName())
|
|
1137
|
+
self.readRTEEvent(element, event)
|
|
1138
|
+
event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
|
|
1139
|
+
|
|
1140
|
+
def readBackgroundEvent(self, element, event: BackgroundEvent):
|
|
1141
|
+
self.logger.debug("Read BackgroundEvent <%s>" % event.getShortName())
|
|
1142
|
+
self.readRTEEvent(element, event)
|
|
1143
|
+
|
|
1108
1144
|
def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
1109
1145
|
for child_element in self.findall(element, "EVENTS/*"):
|
|
1110
1146
|
tag_name = self.getTagName(child_element)
|
|
1111
1147
|
if tag_name == "TIMING-EVENT":
|
|
1112
|
-
self.
|
|
1148
|
+
event = parent.createTimingEvent(self.getShortName(child_element))
|
|
1149
|
+
self.readTimingEvent(child_element, event)
|
|
1113
1150
|
elif tag_name == "SWC-MODE-SWITCH-EVENT":
|
|
1114
|
-
self.
|
|
1151
|
+
event = parent.createSwcModeSwitchEvent(self.getShortName(child_element))
|
|
1152
|
+
self.readSwcModeSwitchEvent(child_element, event)
|
|
1115
1153
|
elif tag_name == "OPERATION-INVOKED-EVENT":
|
|
1116
|
-
self.
|
|
1154
|
+
event = parent.createOperationInvokedEvent(self.getShortName(child_element))
|
|
1155
|
+
self.readOperationInvokedEvent(child_element, event)
|
|
1117
1156
|
elif tag_name == "DATA-RECEIVED-EVENT":
|
|
1118
|
-
self.
|
|
1157
|
+
event = parent.createDataReceivedEvent(self.getShortName(child_element))
|
|
1158
|
+
self.readDataReceivedEvent(child_element, event)
|
|
1119
1159
|
elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
|
|
1120
|
-
self.
|
|
1160
|
+
event = parent.createInternalTriggerOccurredEvent(self.getShortName(child_element))
|
|
1161
|
+
self.readInternalTriggerOccurredEvent(child_element, event)
|
|
1121
1162
|
elif tag_name == "INIT-EVENT":
|
|
1122
|
-
self.
|
|
1163
|
+
event = parent.createInitEvent(self.getShortName(child_element))
|
|
1164
|
+
self.readInitEvent(child_element, event)
|
|
1123
1165
|
elif tag_name == "ASYNCHRONOUS-SERVER-CALL-RETURNS-EVENT":
|
|
1124
|
-
self.
|
|
1166
|
+
event = parent.createAsynchronousServerCallReturnsEvent(self.getShortName(child_element))
|
|
1167
|
+
self.readAsynchronousServerCallReturnsEvent(child_element, event)
|
|
1168
|
+
elif tag_name == "MODE-SWITCHED-ACK-EVENT":
|
|
1169
|
+
event = parent.createModeSwitchedAckEvent(self.getShortName(child_element))
|
|
1170
|
+
self.readModeSwitchedAckEvent(child_element, event)
|
|
1171
|
+
elif tag_name == "BACKGROUND-EVENT":
|
|
1172
|
+
event = parent.createBackgroundEvent(self.getShortName(child_element))
|
|
1173
|
+
self.readBackgroundEvent(child_element, event)
|
|
1125
1174
|
else:
|
|
1126
1175
|
self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
|
|
1127
1176
|
|
|
@@ -1553,27 +1602,36 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1553
1602
|
.setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
|
|
1554
1603
|
.setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
|
|
1555
1604
|
|
|
1556
|
-
def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
|
|
1605
|
+
def getNonqueuedSenderComSpec(self, element:ET.Element) -> NonqueuedSenderComSpec:
|
|
1557
1606
|
com_spec = NonqueuedSenderComSpec()
|
|
1558
1607
|
self.readSenderComSpec(element, com_spec)
|
|
1559
1608
|
com_spec.setInitValue(self.getInitValue(element))
|
|
1560
1609
|
return com_spec
|
|
1561
1610
|
|
|
1562
|
-
def getServerComSpec(self, element) -> ServerComSpec:
|
|
1611
|
+
def getServerComSpec(self, element:ET.Element) -> ServerComSpec:
|
|
1563
1612
|
com_spec = ServerComSpec()
|
|
1564
1613
|
self.readARObjectAttributes(element, com_spec)
|
|
1565
1614
|
com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
|
|
1566
1615
|
.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
|
|
1567
1616
|
return com_spec
|
|
1568
1617
|
|
|
1569
|
-
def getQueuedSenderComSpec(self, element) -> QueuedSenderComSpec:
|
|
1618
|
+
def getQueuedSenderComSpec(self, element:ET.Element) -> QueuedSenderComSpec:
|
|
1570
1619
|
com_spec = QueuedSenderComSpec()
|
|
1571
1620
|
self.readSenderComSpec(element, com_spec)
|
|
1572
1621
|
return com_spec
|
|
1573
1622
|
|
|
1623
|
+
def getModeSwitchedAckRequest(self, element: ET.Element, key: str) -> ModeSwitchedAckRequest:
|
|
1624
|
+
request = None
|
|
1625
|
+
child_element = self.find(element, key)
|
|
1626
|
+
if child_element is not None:
|
|
1627
|
+
request = ModeSwitchedAckRequest()
|
|
1628
|
+
request.setTimeout(self.getChildElementOptionalTimeValue(child_element, "TIMEOUT"))
|
|
1629
|
+
return request
|
|
1630
|
+
|
|
1574
1631
|
def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
|
|
1575
1632
|
com_spec = ModeSwitchSenderComSpec()
|
|
1576
1633
|
com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
|
|
1634
|
+
.setModeSwitchedAck(self.getModeSwitchedAckRequest(element, "MODE-SWITCHED-ACK")) \
|
|
1577
1635
|
.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
|
|
1578
1636
|
return com_spec
|
|
1579
1637
|
|
|
@@ -1931,6 +1989,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1931
1989
|
self.readARObjectAttributes(child_element, compu_scale)
|
|
1932
1990
|
compu_scale.setLowerLimit(self.getChildLimitElement(child_element, "LOWER-LIMIT")) \
|
|
1933
1991
|
.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
1992
|
+
.setDesc(self.getMultiLanguageOverviewParagraph(child_element, "DESC")) \
|
|
1934
1993
|
.setSymbol(self.getChildElementOptionalLiteral(child_element, "SYMBOL")) \
|
|
1935
1994
|
.setUpperLimit(self.getChildLimitElement(child_element, "UPPER-LIMIT"))
|
|
1936
1995
|
self.readCompuScaleContents(child_element, compu_scale)
|
|
@@ -2144,7 +2203,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2144
2203
|
self.readEndToEndProtectionVariablePrototypes(element, protection)
|
|
2145
2204
|
|
|
2146
2205
|
def readEndToEndProtections(self, element: ET.Element, parent: EndToEndProtectionSet):
|
|
2147
|
-
for child_element in self.findall(element, "END-TO-END-PROTECTIONS/*"
|
|
2206
|
+
for child_element in self.findall(element, "END-TO-END-PROTECTIONS/*"):
|
|
2148
2207
|
tag_name = self.getTagName(child_element)
|
|
2149
2208
|
if tag_name == "END-TO-END-PROTECTION":
|
|
2150
2209
|
self.readEndToEndProtection(child_element, parent)
|
|
@@ -2193,12 +2252,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2193
2252
|
self.logger.debug("readApplicationArrayElement %s" % short_name)
|
|
2194
2253
|
array_element = parent.createApplicationArrayElement(short_name)
|
|
2195
2254
|
self.readApplicationCompositeElementDataPrototype(child_element, array_element)
|
|
2255
|
+
array_element.setArraySizeHandling(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING"))
|
|
2196
2256
|
array_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
|
|
2197
2257
|
array_element.setMaxNumberOfElements(self.getChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS"))
|
|
2198
2258
|
|
|
2199
2259
|
def readApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
|
|
2200
2260
|
self.logger.debug("Read ApplicationArrayDataType <%s>" % data_type)
|
|
2201
2261
|
self.readApplicationCompositeDataType(element, data_type)
|
|
2262
|
+
data_type.setDynamicArraySizeProfile(self.getChildElementOptionalLiteral(element, "DYNAMIC-ARRAY-SIZE-PROFILE"))
|
|
2202
2263
|
self.readApplicationArrayElement(element, data_type)
|
|
2203
2264
|
|
|
2204
2265
|
def getSwRecordLayoutV(self, element: ET.Element, key: str) -> SwRecordLayoutV:
|
|
@@ -2211,7 +2272,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2211
2272
|
.setSwRecordLayoutVAxis(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
|
|
2212
2273
|
.setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
|
|
2213
2274
|
.setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
|
|
2275
|
+
#print(layout_v.getShortLabel())
|
|
2214
2276
|
return layout_v
|
|
2277
|
+
|
|
2278
|
+
def readSwRecordLayoutGroupSwRecordLayoutGroupContentType(self, element: ET.Element, group: SwRecordLayoutGroup):
|
|
2279
|
+
content = SwRecordLayoutGroupContent()
|
|
2280
|
+
content.setSwRecordLayoutGroup(self.getSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP")) \
|
|
2281
|
+
.setSwRecordLayoutV(self.getSwRecordLayoutV(element, "SW-RECORD-LAYOUT-V"))
|
|
2282
|
+
group.setSwRecordLayoutGroupContentType(content)
|
|
2215
2283
|
|
|
2216
2284
|
def getSwRecordLayoutGroup(self, element: ET.Element, key: str) -> SwRecordLayoutGroup:
|
|
2217
2285
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
@@ -2219,22 +2287,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2219
2287
|
if child_element is not None:
|
|
2220
2288
|
group = SwRecordLayoutGroup()
|
|
2221
2289
|
group.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
2222
|
-
.setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY"))
|
|
2223
|
-
|
|
2290
|
+
.setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY"))
|
|
2291
|
+
self.readSwRecordLayoutGroupSwRecordLayoutGroupContentType(child_element, group)
|
|
2292
|
+
group.setSwRecordLayoutGroupAxis(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
|
|
2224
2293
|
.setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
|
|
2225
2294
|
.setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
|
|
2226
2295
|
.setSwRecordLayoutGroupStep(self.getChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP")) \
|
|
2227
|
-
.setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO"))
|
|
2228
|
-
|
|
2229
|
-
group_content = SwRecordLayoutGroupContent()
|
|
2230
|
-
group_content.swRecordLayoutGroup = self.getSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP")
|
|
2231
|
-
group_content.swRecordLayoutV = self.getSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V")
|
|
2232
|
-
|
|
2233
|
-
if group_content.swRecordLayoutGroup is not None:
|
|
2234
|
-
group.setSwRecordLayoutGroupContentType(group_content)
|
|
2235
|
-
elif group_content.swRecordLayoutV is not None:
|
|
2236
|
-
group.setSwRecordLayoutGroupContentType(group_content)
|
|
2237
|
-
|
|
2296
|
+
.setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO"))
|
|
2297
|
+
#print(group.getShortLabel())
|
|
2238
2298
|
return group
|
|
2239
2299
|
|
|
2240
2300
|
def readSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
|
|
@@ -2858,37 +2918,169 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2858
2918
|
self.readDiagnosticServiceTableDiagnosticConnectionRefs(element, table)
|
|
2859
2919
|
table.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF"))
|
|
2860
2920
|
|
|
2861
|
-
def
|
|
2862
|
-
self.
|
|
2863
|
-
|
|
2921
|
+
def readSegmentPosition(self, element: ET.Element, position: SegmentPosition):
|
|
2922
|
+
position.setSegmentByteOrder(self.getChildElementOptionalLiteral(element, "SEGMENT-BYTE-ORDER")) \
|
|
2923
|
+
.setSegmentLength(self.getChildElementOptionalIntegerValue(element, "SEGMENT-LENGTH")) \
|
|
2924
|
+
.setSegmentPosition(self.getChildElementOptionalIntegerValue(element, "SEGMENT-POSITION"))
|
|
2925
|
+
|
|
2926
|
+
def readMultiplexedPartSegmentPositions(self, element: ET.Element, part: MultiplexedPart):
|
|
2927
|
+
for child_element in self.findall(element, "SEGMENT-POSITIONS/*"):
|
|
2928
|
+
tag_name = self.getTagName(child_element)
|
|
2929
|
+
if tag_name == "SEGMENT-POSITION":
|
|
2930
|
+
position = SegmentPosition()
|
|
2931
|
+
self.readSegmentPosition(child_element, position)
|
|
2932
|
+
part.addSegmentPosition(position)
|
|
2933
|
+
else:
|
|
2934
|
+
self.notImplemented("Unsupported DynamicPart <%s>" % tag_name)
|
|
2935
|
+
|
|
2936
|
+
def readMultiplexedPart(self, element: ET.Element, part: MultiplexedPart):
|
|
2937
|
+
self.readMultiplexedPartSegmentPositions(element, part)
|
|
2938
|
+
|
|
2939
|
+
def readDynamicPartAlternative(self, element: ET.Element, alternative: DynamicPartAlternative):
|
|
2940
|
+
alternative.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF")) \
|
|
2941
|
+
.setInitialDynamicPart(self.getChildElementOptionalBooleanValue(element, "INITIAL-DYNAMIC-PART")) \
|
|
2942
|
+
.setSelectorFieldCode(self.getChildElementOptionalIntegerValue(element, "SELECTOR-FIELD-CODE"))
|
|
2943
|
+
|
|
2944
|
+
def readDynamicPartDynamicPartAlternatives(self, element: ET.Element, part: DynamicPart):
|
|
2945
|
+
for child_element in self.findall(element, "DYNAMIC-PART-ALTERNATIVES/*"):
|
|
2946
|
+
tag_name = self.getTagName(child_element)
|
|
2947
|
+
if tag_name == "DYNAMIC-PART-ALTERNATIVE":
|
|
2948
|
+
alternative = DynamicPartAlternative()
|
|
2949
|
+
self.readDynamicPartAlternative(child_element, alternative)
|
|
2950
|
+
part.addDynamicPartAlternative(alternative)
|
|
2951
|
+
else:
|
|
2952
|
+
self.notImplemented("Unsupported DynamicPartAlternative <%s>" % tag_name)
|
|
2953
|
+
|
|
2954
|
+
def readDynamicPart(self, element: ET.Element, part: DynamicPart):
|
|
2955
|
+
self.readMultiplexedPart(element, part)
|
|
2956
|
+
self.readDynamicPartDynamicPartAlternatives(element, part)
|
|
2957
|
+
|
|
2958
|
+
def readMultiplexedIPduDynamicParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
|
|
2959
|
+
for child_element in self.findall(element, "DYNAMIC-PARTS/*"):
|
|
2960
|
+
tag_name = self.getTagName(child_element)
|
|
2961
|
+
if tag_name == "DYNAMIC-PART":
|
|
2962
|
+
part = DynamicPart()
|
|
2963
|
+
self.readDynamicPart(child_element, part)
|
|
2964
|
+
ipdu.setDynamicPart(part)
|
|
2965
|
+
else:
|
|
2966
|
+
self.notImplemented("Unsupported DynamicPart <%s>" % tag_name)
|
|
2864
2967
|
|
|
2865
|
-
def
|
|
2866
|
-
self.
|
|
2867
|
-
self.
|
|
2968
|
+
def readStaticPart(self, element: ET.Element, part: StaticPart):
|
|
2969
|
+
self.readMultiplexedPart(element, part)
|
|
2970
|
+
part.setIPduRef(self.getChildElementOptionalRefType(element, "I-PDU-REF"))
|
|
2971
|
+
|
|
2972
|
+
def readMultiplexedIPduStaticParts(self, element: ET.Element, ipdu: MultiplexedIPdu):
|
|
2973
|
+
for child_element in self.findall(element, "STATIC-PARTS/*"):
|
|
2974
|
+
tag_name = self.getTagName(child_element)
|
|
2975
|
+
if tag_name == "STATIC-PART":
|
|
2976
|
+
part = StaticPart()
|
|
2977
|
+
self.readStaticPart(child_element, part)
|
|
2978
|
+
ipdu.setStaticPart(part)
|
|
2979
|
+
else:
|
|
2980
|
+
self.notImplemented("Unsupported StaticPart <%s>" % tag_name)
|
|
2981
|
+
|
|
2982
|
+
def readMultiplexedIPdu(self, element: ET.Element, ipdu: MultiplexedIPdu):
|
|
2983
|
+
self.logger.debug("Read MultiplexedIPdu <%s>" % ipdu.getShortName())
|
|
2984
|
+
self.readIPdu(element, ipdu)
|
|
2985
|
+
self.readMultiplexedIPduDynamicParts(element, ipdu)
|
|
2986
|
+
ipdu.setSelectorFieldByteOrder(self.getChildElementOptionalLiteral(element, "SELECTOR-FIELD-BYTE-ORDER")) \
|
|
2987
|
+
.setSelectorFieldLength(self.getChildElementOptionalIntegerValue(element, "SELECTOR-FIELD-LENGTH")) \
|
|
2988
|
+
.setSelectorFieldStartPosition(self.getChildElementOptionalIntegerValue(element, "SELECTOR-FIELD-START-POSITION"))
|
|
2989
|
+
self.readMultiplexedIPduStaticParts(element, ipdu)
|
|
2990
|
+
ipdu.setTriggerMode(self.getChildElementOptionalLiteral(element, "TRIGGER-MODE")) \
|
|
2991
|
+
.setUnusedBitPattern(self.getChildElementOptionalIntegerValue(element, "UNUSED-BIT-PATTERN"))
|
|
2992
|
+
|
|
2993
|
+
def readUserDefinedIPdu(self, element: ET.Element, ipdu: UserDefinedIPdu):
|
|
2994
|
+
self.logger.debug("Read UserDefinedIPdu <%s>" % ipdu.getShortName())
|
|
2995
|
+
self.readIPdu(element, ipdu)
|
|
2996
|
+
ipdu.setCddType(self.getChildElementOptionalLiteral(element, "CDD-TYPE"))
|
|
2868
2997
|
|
|
2869
2998
|
def readUserDefinedPdu(self, element: ET.Element, pdu: UserDefinedPdu):
|
|
2870
2999
|
self.logger.debug("Read UserDefinedPdu <%s>" % pdu.getShortName())
|
|
2871
|
-
self.
|
|
3000
|
+
self.readPdu(element, pdu)
|
|
3001
|
+
pdu.setCddType(self.getChildElementOptionalLiteral(element, "CDD-TYPE"))
|
|
2872
3002
|
|
|
2873
3003
|
def readGeneralPurposePdu(self, element: ET.Element, pdu: GeneralPurposePdu):
|
|
2874
3004
|
self.logger.debug("Read GeneralPurposePdu <%s>" % pdu.getShortName())
|
|
2875
|
-
self.
|
|
3005
|
+
self.readPdu(element, pdu)
|
|
2876
3006
|
|
|
2877
3007
|
def readGeneralPurposeIPdu(self, element: ET.Element, i_pdu: GeneralPurposeIPdu):
|
|
2878
3008
|
self.logger.debug("Read GeneralPurposeIPdu <%s>" % i_pdu.getShortName())
|
|
2879
|
-
self.
|
|
3009
|
+
self.readIPdu(element, i_pdu)
|
|
3010
|
+
|
|
3011
|
+
def readSecureCommunicationAuthenticationProps(self, element: ET.Element, props: SecureCommunicationAuthenticationProps):
|
|
3012
|
+
self.readIdentifiable(element, props)
|
|
3013
|
+
props.setAuthAlgorithm(self.getChildElementOptionalLiteral(element, "AUTH-ALGORITHM")) \
|
|
3014
|
+
.setAuthInfoTxLength(self.getChildElementOptionalPositiveInteger(element, "AUTH-INFO-TX-LENGTH"))
|
|
3015
|
+
|
|
3016
|
+
def readSecureCommunicationPropsSetAuthenticationProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
|
|
3017
|
+
for child_element in self.findall(element, "AUTHENTICATION-PROPSS/*"):
|
|
3018
|
+
tag_name = self.getTagName(child_element)
|
|
3019
|
+
if tag_name == "SECURE-COMMUNICATION-AUTHENTICATION-PROPS":
|
|
3020
|
+
props = props_set.createSecureCommunicationAuthenticationProps(self.getShortName(child_element))
|
|
3021
|
+
self.readSecureCommunicationAuthenticationProps(child_element, props)
|
|
3022
|
+
else:
|
|
3023
|
+
self.notImplemented("Unsupported AuthenticationProps <%s>" % tag_name)
|
|
3024
|
+
|
|
3025
|
+
def readSecureCommunicationFreshnessProps(self, element: ET.Element, props: SecureCommunicationFreshnessProps):
|
|
3026
|
+
self.readIdentifiable(element, props)
|
|
3027
|
+
props.setFreshnessValueLength(self.getChildElementOptionalLiteral(element, "FRESHNESS-VALUE-LENGTH")) \
|
|
3028
|
+
.setFreshnessValueTxLength(self.getChildElementOptionalPositiveInteger(element, "FRESHNESS-VALUE-TX-LENGTH"))
|
|
3029
|
+
|
|
3030
|
+
def readSecureCommunicationPropsSetFreshnessProps(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
|
|
3031
|
+
for child_element in self.findall(element, "FRESHNESS-PROPSS/*"):
|
|
3032
|
+
tag_name = self.getTagName(child_element)
|
|
3033
|
+
if tag_name == "SECURE-COMMUNICATION-FRESHNESS-PROPS":
|
|
3034
|
+
props = props_set.createSecureCommunicationFreshnessProps(self.getShortName(child_element))
|
|
3035
|
+
self.readSecureCommunicationFreshnessProps(child_element, props)
|
|
3036
|
+
else:
|
|
3037
|
+
self.notImplemented("Unsupported FreshnessProps <%s>" % tag_name)
|
|
2880
3038
|
|
|
2881
3039
|
def readSecureCommunicationPropsSet(self, element: ET.Element, props_set: SecureCommunicationPropsSet):
|
|
2882
3040
|
self.logger.debug("Read SecureCommunicationPropsSet <%s>" % props_set.getShortName())
|
|
2883
3041
|
self.readIdentifiable(element, props_set)
|
|
2884
|
-
|
|
3042
|
+
self.readSecureCommunicationPropsSetAuthenticationProps(element, props_set)
|
|
3043
|
+
self.readSecureCommunicationPropsSetFreshnessProps(element, props_set)
|
|
3044
|
+
|
|
2885
3045
|
def readSoAdRoutingGroup(self, element: ET.Element, group: SoAdRoutingGroup):
|
|
2886
3046
|
self.logger.debug("Read SoAdRoutingGroup <%s>" % group.getShortName())
|
|
2887
3047
|
self.readIdentifiable(element, group)
|
|
3048
|
+
group.setEventGroupControlType(self.getChildElementOptionalLiteral(element, "EVENT-GROUP-CONTROL-TYPE"))
|
|
3049
|
+
|
|
3050
|
+
def readDoIpLogicAddress(self, element: ET.Element, address: DoIpLogicAddress):
|
|
3051
|
+
self.readIdentifiable(element, address)
|
|
3052
|
+
address.setAddress(self.getChildElementOptionalIntegerValue(element, "ADDRESS"))
|
|
3053
|
+
|
|
3054
|
+
def readDoIpTpConfigDoIpLogicAddresses(self, element: ET.Element, config: DoIpTpConfig):
|
|
3055
|
+
for child_element in self.findall(element, "DO-IP-LOGIC-ADDRESSS/*"):
|
|
3056
|
+
tag_name = self.getTagName(child_element)
|
|
3057
|
+
if tag_name == "DO-IP-LOGIC-ADDRESS":
|
|
3058
|
+
address = config.createDoIpLogicAddress(self.getShortName(child_element))
|
|
3059
|
+
self.readDoIpLogicAddress(child_element, address)
|
|
3060
|
+
else:
|
|
3061
|
+
self.notImplemented("Unsupported DoIpLogicAddress <%s>" % tag_name)
|
|
3062
|
+
|
|
3063
|
+
def readDoIpTpConnection(self, element: ET.Element, connection: DoIpTpConnection):
|
|
3064
|
+
self.readTpConnection(element, connection)
|
|
3065
|
+
connection.setDoIpSourceAddressRef(self.getChildElementOptionalRefType(element, "DO-IP-SOURCE-ADDRESS-REF")) \
|
|
3066
|
+
.setDoIpTargetAddressRef(self.getChildElementOptionalRefType(element, "DO-IP-TARGET-ADDRESS-REF")) \
|
|
3067
|
+
.setTpSduRef(self.getChildElementOptionalRefType(element, "TP-SDU-REF"))
|
|
3068
|
+
|
|
3069
|
+
def readDoIpTpConfigTpConnections(self, element: ET.Element, config: DoIpTpConfig):
|
|
3070
|
+
for child_element in self.findall(element, "TP-CONNECTIONS/*"):
|
|
3071
|
+
tag_name = self.getTagName(child_element)
|
|
3072
|
+
if tag_name == "DO-IP-TP-CONNECTION":
|
|
3073
|
+
connection = DoIpTpConnection()
|
|
3074
|
+
self.readDoIpTpConnection(child_element, connection)
|
|
3075
|
+
config.addTpConnection(connection)
|
|
3076
|
+
else:
|
|
3077
|
+
self.notImplemented("Unsupported TpConnection <%s>" % tag_name)
|
|
2888
3078
|
|
|
2889
3079
|
def readDoIpTpConfig(self, element: ET.Element, config: DoIpTpConfig):
|
|
2890
3080
|
self.logger.debug("Read DoIpTpConfig <%s>" % config.getShortName())
|
|
2891
|
-
self.
|
|
3081
|
+
self.readTpConfig(element, config)
|
|
3082
|
+
self.readDoIpTpConfigDoIpLogicAddresses(element, config)
|
|
3083
|
+
self.readDoIpTpConfigTpConnections(element, config)
|
|
2892
3084
|
|
|
2893
3085
|
def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
|
|
2894
3086
|
for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
|
|
@@ -2909,82 +3101,125 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2909
3101
|
self.logger.debug("Read LinUnconditionalFrame <%s>" % frame.getShortName())
|
|
2910
3102
|
self.readFrame(element, frame)
|
|
2911
3103
|
|
|
3104
|
+
def readPdu(self, element: ET.Element, pdu: Pdu):
|
|
3105
|
+
self.readIdentifiable(element, pdu)
|
|
3106
|
+
pdu.setHasDynamicLength(self.getChildElementOptionalBooleanValue(element, "HAS-DYNAMIC-LENGTH")) \
|
|
3107
|
+
.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
|
|
3108
|
+
|
|
3109
|
+
def readISignalToIPduMapping(self, element: ET.Element, mapping: ISignalToIPduMapping):
|
|
3110
|
+
self.readIdentifiable(element, mapping)
|
|
3111
|
+
mapping.setISignalRef(self.getChildElementOptionalRefType(element, "I-SIGNAL-REF")) \
|
|
3112
|
+
.setPackingByteOrder(self.getChildElementOptionalLiteral(element, "PACKING-BYTE-ORDER")) \
|
|
3113
|
+
.setStartPosition(self.getChildElementOptionalIntegerValue(element, "START-POSITION")) \
|
|
3114
|
+
.setTransferProperty(self.getChildElementOptionalLiteral(element, "TRANSFER-PROPERTY"))
|
|
3115
|
+
|
|
3116
|
+
def readNmPduISignalToIPduMappings(self, element: ET.Element, pdu: NmPdu):
|
|
3117
|
+
for child_element in self.findall(element, "I-SIGNAL-TO-I-PDU-MAPPINGS/*"):
|
|
3118
|
+
tag_name = self.getTagName(child_element)
|
|
3119
|
+
if tag_name == "I-SIGNAL-TO-I-PDU-MAPPING":
|
|
3120
|
+
mapping = pdu.createISignalToIPduMapping(self.getShortName(child_element))
|
|
3121
|
+
self.readISignalToIPduMapping(child_element, mapping)
|
|
3122
|
+
else:
|
|
3123
|
+
self.notImplemented("Unsupported ISignalToIPduMapping <%s>" % tag_name)
|
|
3124
|
+
|
|
2912
3125
|
def readNmPdu(self, element: ET.Element, pdu: NmPdu):
|
|
2913
3126
|
self.logger.debug("Read NmPdu <%s>" % pdu.getShortName())
|
|
2914
|
-
self.
|
|
3127
|
+
self.readPdu(element, pdu)
|
|
3128
|
+
self.readNmPduISignalToIPduMappings(element, pdu)
|
|
3129
|
+
pdu.setUnusedBitPattern(self.getChildElementOptionalIntegerValue(element, "UNUSED-BIT-PATTERN"))
|
|
3130
|
+
|
|
3131
|
+
def readIPdu(self, element: ET.Element, pdu: IPdu):
|
|
3132
|
+
self.readPdu(element, pdu)
|
|
2915
3133
|
|
|
2916
3134
|
def readNPdu(self, element: ET.Element, pdu: NPdu):
|
|
2917
3135
|
self.logger.debug("Read NPdu <%s>" % pdu.getShortName())
|
|
2918
3136
|
self.readIPdu(element, pdu)
|
|
2919
3137
|
|
|
2920
|
-
def readIPdu(self, element: ET.Element, pdu: IPdu):
|
|
2921
|
-
self.readIdentifiable(element, pdu)
|
|
2922
|
-
pdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH"))
|
|
2923
|
-
|
|
2924
3138
|
def readDcmIPdu(self, element: ET.Element, i_pdu: DcmIPdu):
|
|
2925
3139
|
self.logger.debug("Read DcmIPdu <%s>" % i_pdu.getShortName())
|
|
2926
3140
|
self.readIPdu(element, i_pdu)
|
|
2927
3141
|
i_pdu.setDiagPduType(self.getChildElementOptionalLiteral(element, "DIAG-PDU-TYPE"))
|
|
2928
3142
|
|
|
3143
|
+
def getSecureCommunicationProps(self, element: ET.Element, key: str) -> SecureCommunicationProps:
|
|
3144
|
+
props = None
|
|
3145
|
+
child_element = self.find(element, key)
|
|
3146
|
+
if child_element is not None:
|
|
3147
|
+
props = SecureCommunicationProps()
|
|
3148
|
+
props.setAuthDataFreshnessLength(self.getChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-LENGTH")) \
|
|
3149
|
+
.setAuthDataFreshnessStartPosition(self.getChildElementOptionalPositiveInteger(child_element, "AUTH-DATA-FRESHNESS-START-POSITION")) \
|
|
3150
|
+
.setAuthInfoTxLength(self.getChildElementOptionalPositiveInteger(child_element, "AUTH-INFO-TX-LENGTH")) \
|
|
3151
|
+
.setAuthenticationBuildAttempts(self.getChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-BUILD-ATTEMPTS")) \
|
|
3152
|
+
.setAuthenticationRetries(self.getChildElementOptionalPositiveInteger(child_element, "AUTHENTICATION-RETRIES")) \
|
|
3153
|
+
.setDataId(self.getChildElementOptionalPositiveInteger(child_element, "DATA-ID")) \
|
|
3154
|
+
.setFreshnessValueId(self.getChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-ID")) \
|
|
3155
|
+
.setFreshnessValueLength(self.getChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-LENGTH")) \
|
|
3156
|
+
.setFreshnessValueTxLength(self.getChildElementOptionalPositiveInteger(child_element, "FRESHNESS-VALUE-TX-LENGTH"))
|
|
3157
|
+
return props
|
|
3158
|
+
|
|
2929
3159
|
def readSecuredIPdu(self, element: ET.Element, i_pdu: SecuredIPdu):
|
|
2930
3160
|
self.logger.debug("Read SecuredIPdu <%s>" % i_pdu.getShortName())
|
|
2931
3161
|
self.readIPdu(element, i_pdu)
|
|
3162
|
+
i_pdu.setAuthenticationPropsRef(self.getChildElementOptionalRefType(element, "AUTHENTICATION-PROPS-REF")) \
|
|
3163
|
+
.setFreshnessPropsRef(self.getChildElementOptionalRefType(element, "FRESHNESS-PROPS-REF")) \
|
|
3164
|
+
.setPayloadRef(self.getChildElementOptionalRefType(element, "PAYLOAD-REF")) \
|
|
3165
|
+
.setSecureCommunicationProps(self.getSecureCommunicationProps(element, "SECURE-COMMUNICATION-PROPS")) \
|
|
3166
|
+
.setUseAsCryptographicIPdu(self.getChildElementOptionalBooleanValue(element, "USE-AS-CRYPTOGRAPHIC-I-PDU"))
|
|
2932
3167
|
|
|
2933
3168
|
def readNmNode(self, element: ET.Element, nm_node: NmNode):
|
|
2934
3169
|
self.readIdentifiable(element, nm_node)
|
|
2935
3170
|
|
|
2936
3171
|
nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
|
|
2937
|
-
|
|
2938
|
-
|
|
3172
|
+
.setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
|
|
3173
|
+
.setNmPassiveModeEnabled(self.getChildElementOptionalBooleanValue(element, "NM-PASSIVE-MODE-ENABLED")) \
|
|
3174
|
+
.setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
|
|
2939
3175
|
for ref in self.getChildElementRefTypeList(element, "RX-NM-PDU-REFS/RX-NM-PDU-REF"):
|
|
2940
3176
|
nm_node.addRxNmPduRef(ref)
|
|
2941
3177
|
for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
|
|
2942
3178
|
nm_node.addTxNmPduRefs(ref)
|
|
3179
|
+
|
|
2943
3180
|
|
|
2944
3181
|
def readCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
|
|
2945
|
-
self.logger.debug("Read CanNmNode
|
|
2946
|
-
|
|
3182
|
+
self.logger.debug("Read CanNmNode <%s>" % nm_node.getShortName())
|
|
2947
3183
|
self.readNmNode(element, nm_node)
|
|
2948
|
-
|
|
2949
|
-
|
|
3184
|
+
nm_node.setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
|
|
3185
|
+
.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
|
|
2950
3186
|
.setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
|
|
2951
3187
|
.setNmRangeConfig(self.getChildElementRxIdentifierRange(element, "NM-RANGE-CONFIG"))
|
|
2952
3188
|
|
|
2953
3189
|
def readUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
|
|
2954
|
-
self.logger.debug("Read UdpNmNode
|
|
2955
|
-
|
|
3190
|
+
self.logger.debug("Read UdpNmNode <%s>" % nm_node.getShortName())
|
|
2956
3191
|
self.readNmNode(element, nm_node)
|
|
3192
|
+
nm_node.setNmMsgCycleOffset(self.getChildElementOptionalTimeValue(element, "NM-MSG-CYCLE-OFFSET"))
|
|
2957
3193
|
|
|
2958
|
-
def readNmClusterNmNodes(self, element: ET.Element,
|
|
2959
|
-
self.logger.debug("readNmConfigNmNodes %s" %
|
|
3194
|
+
def readNmClusterNmNodes(self, element: ET.Element, cluster: NmCluster):
|
|
3195
|
+
self.logger.debug("readNmConfigNmNodes %s" % cluster.getShortName())
|
|
2960
3196
|
for child_element in self.findall(element, "NM-NODES/*"):
|
|
2961
3197
|
tag_name = self.getTagName(child_element)
|
|
2962
3198
|
if tag_name == "CAN-NM-NODE":
|
|
2963
|
-
nm_node =
|
|
3199
|
+
nm_node = cluster.createCanNmNode(self.getShortName(child_element))
|
|
2964
3200
|
self.readCanNmNode(child_element, nm_node)
|
|
2965
3201
|
elif tag_name == "UDP-NM-NODE":
|
|
2966
|
-
nm_node =
|
|
3202
|
+
nm_node = cluster.readUdpNmNode(self.getShortName(child_element))
|
|
2967
3203
|
self.readUdpNmNode(child_element, nm_node)
|
|
2968
3204
|
else:
|
|
2969
|
-
self.
|
|
3205
|
+
self.notImplemented("Unsupported Nm Node <%s>" % tag_name)
|
|
2970
3206
|
|
|
2971
3207
|
def getCanNmClusterCoupling(self, element: ET.Element) -> CanNmClusterCoupling:
|
|
2972
3208
|
coupling = CanNmClusterCoupling()
|
|
2973
|
-
|
|
2974
3209
|
for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
|
|
2975
3210
|
coupling.addCoupledClusterRef(ref)
|
|
2976
|
-
|
|
2977
3211
|
coupling.setNmBusloadReductionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ENABLED")) \
|
|
2978
3212
|
.setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
|
|
2979
|
-
|
|
2980
3213
|
return coupling
|
|
2981
3214
|
|
|
2982
3215
|
def getUdpNmClusterCoupling(self, element: ET.Element) -> UdpNmClusterCoupling:
|
|
2983
3216
|
coupling = UdpNmClusterCoupling()
|
|
3217
|
+
for ref in self.getChildElementRefTypeList(element, "COUPLED-CLUSTER-REFS/COUPLED-CLUSTER-REF"):
|
|
3218
|
+
coupling.addCoupledClusterRef(ref)
|
|
3219
|
+
coupling.setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
|
|
2984
3220
|
return coupling
|
|
2985
3221
|
|
|
2986
3222
|
def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
|
|
2987
|
-
self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
|
|
2988
3223
|
for child_element in self.findall(element, "NM-CLUSTER-COUPLINGS/*"):
|
|
2989
3224
|
tag_name = self.getTagName(child_element)
|
|
2990
3225
|
if tag_name == "CAN-NM-CLUSTER-COUPLING":
|
|
@@ -2995,6 +3230,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2995
3230
|
self.notImplemented("Unsupported Nm Node <%s>" % tag_name)
|
|
2996
3231
|
|
|
2997
3232
|
def readNmCluster(self, element: ET.Element, cluster: NmCluster):
|
|
3233
|
+
self.logger.debug("read NmCluster %s" % cluster.getShortName())
|
|
2998
3234
|
self.readIdentifiable(element, cluster)
|
|
2999
3235
|
cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
|
|
3000
3236
|
.setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
|
|
@@ -3002,12 +3238,9 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3002
3238
|
self.readNmClusterNmNodes(element, cluster)
|
|
3003
3239
|
cluster.setNmSynchronizingNetwork(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZING-NETWORK"))
|
|
3004
3240
|
|
|
3005
|
-
def readCanNmCluster(self, element: ET.Element,
|
|
3006
|
-
|
|
3007
|
-
self.logger.debug("readCanNmCluster %s" % short_name)
|
|
3008
|
-
cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
|
|
3241
|
+
def readCanNmCluster(self, element: ET.Element, cluster: CanNmCluster):
|
|
3242
|
+
self.logger.debug("Read CanNmCluster <%s>" % cluster.getShortName())
|
|
3009
3243
|
self.readNmCluster(element, cluster)
|
|
3010
|
-
|
|
3011
3244
|
cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
|
|
3012
3245
|
.setNmCarWakeUpRxEnabled(self.getChildElementOptionalBooleanValue(element, "NM-CAR-WAKE-UP-RX-ENABLED")) \
|
|
3013
3246
|
.setNmCbvPosition(self.getChildElementOptionalNumericalValue(element, "NM-CBV-POSITION")) \
|
|
@@ -3023,35 +3256,247 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3023
3256
|
.setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
|
|
3024
3257
|
.setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
|
|
3025
3258
|
|
|
3026
|
-
def readUdpNmCluster(self, element: ET.Element,
|
|
3027
|
-
|
|
3028
|
-
self.logger.debug("readCanNmCluster %s" % short_name)
|
|
3029
|
-
cluster = parent.createUdpNmCluster(short_name) # type: CanNmCluster
|
|
3259
|
+
def readUdpNmCluster(self, element: ET.Element, cluster: UdpNmCluster):
|
|
3260
|
+
self.logger.debug("Read UdpNmCluster %s" % cluster.getShortName())
|
|
3030
3261
|
self.readNmCluster(element, cluster)
|
|
3262
|
+
cluster.setNmCbvPosition(self.getChildElementOptionalIntegerValue(element, "NM-CBV-POSITION")) \
|
|
3263
|
+
.setNmChannelActive(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-ACTIVE")) \
|
|
3264
|
+
.setNmImmediateNmCycleTime(self.getChildElementOptionalTimeValue(element, "NM-IMMEDIATE-NM-CYCLE-TIME")) \
|
|
3265
|
+
.setNmImmediateNmTransmissions(self.getChildElementOptionalPositiveInteger(element, "NM-IMMEDIATE-NM-TRANSMISSIONS")) \
|
|
3266
|
+
.setNmMessageTimeoutTime(self.getChildElementOptionalTimeValue(element, "NM-MESSAGE-TIMEOUT-TIME")) \
|
|
3267
|
+
.setNmMsgCycleTime(self.getChildElementOptionalTimeValue(element, "NM-MSG-CYCLE-TIME")) \
|
|
3268
|
+
.setNmNetworkTimeout(self.getChildElementOptionalTimeValue(element, "NM-NETWORK-TIMEOUT")) \
|
|
3269
|
+
.setNmNidPosition(self.getChildElementOptionalIntegerValue(element, "NM-NID-POSITION")) \
|
|
3270
|
+
.setNmRemoteSleepIndicationTime(self.getChildElementOptionalTimeValue(element, "NM-REMOTE-SLEEP-INDICATION-TIME")) \
|
|
3271
|
+
.setNmRepeatMessageTime(self.getChildElementOptionalTimeValue(element, "NM-REPEAT-MESSAGE-TIME")) \
|
|
3272
|
+
.setNmWaitBusSleepTime(self.getChildElementOptionalTimeValue(element, "NM-WAIT-BUS-SLEEP-TIME")) \
|
|
3273
|
+
.setVlanRef(self.getChildElementOptionalRefType(element, "VLAN-REF"))
|
|
3031
3274
|
|
|
3032
|
-
def readNmConfigNmClusters(self, element: ET.Element,
|
|
3275
|
+
def readNmConfigNmClusters(self, element: ET.Element, nm_config: NmConfig):
|
|
3033
3276
|
for child_element in self.findall(element, "NM-CLUSTERS/*"):
|
|
3034
3277
|
tag_name = self.getTagName(child_element)
|
|
3035
3278
|
if tag_name == "CAN-NM-CLUSTER":
|
|
3036
|
-
self.
|
|
3279
|
+
cluster = nm_config.createCanNmCluster(self.getShortName(child_element))
|
|
3280
|
+
self.readCanNmCluster(child_element, cluster)
|
|
3037
3281
|
elif tag_name == "UDP-NM-CLUSTER":
|
|
3038
|
-
self.
|
|
3282
|
+
cluster = nm_config.createUdpNmCluster(self.getShortName(child_element))
|
|
3283
|
+
self.readUdpNmCluster(child_element, cluster)
|
|
3039
3284
|
else:
|
|
3040
3285
|
self.raiseError("Unsupported Nm Cluster <%s>" % tag_name)
|
|
3286
|
+
|
|
3287
|
+
def readUdpNmEcu(self, element: ET.Element, ecu: UdpNmEcu):
|
|
3288
|
+
ecu.setNmSynchronizationPointEnabled(self.getChildElementOptionalBooleanValue(element, "NM-SYNCHRONIZATION-POINT-ENABLED"))
|
|
3289
|
+
|
|
3290
|
+
def readBusDependentNmEcus(self, element: ET.Element, nm_ecu: NmEcu):
|
|
3291
|
+
for child_element in self.findall(element, "BUS-DEPENDENT-NM-ECUS/*"):
|
|
3292
|
+
tag_name = self.getTagName(child_element)
|
|
3293
|
+
if tag_name == "UDP-NM-ECU":
|
|
3294
|
+
udp_nm_ecu = UdpNmEcu()
|
|
3295
|
+
self.readUdpNmEcu(child_element, udp_nm_ecu)
|
|
3296
|
+
nm_ecu.addBusDependentNmEcu(udp_nm_ecu)
|
|
3297
|
+
else:
|
|
3298
|
+
self.notImplemented("Unsupported BusDependentNmEcu <%s>" % tag_name)
|
|
3299
|
+
|
|
3300
|
+
def readNmEcu(self, element: ET.Element, nm_ecu: NmEcu):
|
|
3301
|
+
self.readIdentifiable(element, nm_ecu)
|
|
3302
|
+
self.readBusDependentNmEcus(element, nm_ecu)
|
|
3303
|
+
nm_ecu.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF")) \
|
|
3304
|
+
.setNmBusSynchronizationEnabled(self.getChildElementOptionalBooleanValue(element, "NM-BUS-SYNCHRONIZATION-ENABLED")) \
|
|
3305
|
+
.setNmComControlEnabled(self.getChildElementOptionalBooleanValue(element, "NM-COM-CONTROL-ENABLED")) \
|
|
3306
|
+
.setNmNodeDetectionEnabled(self.getChildElementOptionalBooleanValue(element, "NM-NODE-DETECTION-ENABLED")) \
|
|
3307
|
+
.setNmNodeIdEnabled(self.getChildElementOptionalBooleanValue(element, "NM-NODE-ID-ENABLED")) \
|
|
3308
|
+
.setNmPduRxIndicationEnabled(self.getChildElementOptionalBooleanValue(element, "NM-PDU-RX-INDICATION-ENABLED")) \
|
|
3309
|
+
.setNmRemoteSleepIndEnabled(self.getChildElementOptionalBooleanValue(element, "NM-REMOTE-SLEEP-IND-ENABLED")) \
|
|
3310
|
+
.setNmRepeatMsgIndEnabled(self.getChildElementOptionalBooleanValue(element, "NM-REPEAT-MSG-IND-ENABLED")) \
|
|
3311
|
+
.setNmStateChangeIndEnabled(self.getChildElementOptionalBooleanValue(element, "NM-STATE-CHANGE-IND-ENABLED")) \
|
|
3312
|
+
.setNmUserDataEnabled(self.getChildElementOptionalBooleanValue(element, "NM-USER-DATA-ENABLED"))
|
|
3313
|
+
|
|
3314
|
+
def readNmConfigNmIfEcus(self, element: ET.Element, nm_config: NmConfig):
|
|
3315
|
+
for child_element in self.findall(element, "NM-IF-ECUS/*"):
|
|
3316
|
+
tag_name = self.getTagName(child_element)
|
|
3317
|
+
if tag_name == "NM-ECU":
|
|
3318
|
+
ecu = nm_config.createNmEcu(self.getShortName(child_element))
|
|
3319
|
+
self.readNmEcu(child_element, ecu)
|
|
3320
|
+
else:
|
|
3321
|
+
self.notImplemented("Unsupported NmIfEcus <%s>" % tag_name)
|
|
3041
3322
|
|
|
3042
3323
|
def readNmConfig(self, element: ET.Element, config: NmConfig):
|
|
3043
3324
|
self.logger.debug("Read NmConfig <%s>" % config.getShortName())
|
|
3044
3325
|
self.readIdentifiable(element, config)
|
|
3045
3326
|
self.readNmConfigNmClusters(element, config)
|
|
3046
3327
|
self.readNmConfigNmClusterCouplings(element, config)
|
|
3328
|
+
self.readNmConfigNmIfEcus(element, config)
|
|
3329
|
+
|
|
3330
|
+
def readTpConfig(self, element: ET.Element, config: TpConfig):
|
|
3331
|
+
self.readIdentifiable(element, config)
|
|
3332
|
+
config.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF"))
|
|
3333
|
+
|
|
3334
|
+
def readCanTpAddress(self, element: ET.Element, address: CanTpAddress):
|
|
3335
|
+
self.readIdentifiable(element, address)
|
|
3336
|
+
address.setTpAddress(self.getChildElementOptionalIntegerValue(element, "TP-ADDRESS")) \
|
|
3337
|
+
.setTpAddressExtensionValue(self.getChildElementOptionalIntegerValue(element, "TP-ADDRESS-EXTENSION-VALUE"))
|
|
3338
|
+
|
|
3339
|
+
def readCanTpConfigTpAddresses(self, element: ET.Element, config: CanTpConfig):
|
|
3340
|
+
for child_element in self.findall(element, "TP-ADDRESSS/*"):
|
|
3341
|
+
tag_name = self.getTagName(child_element)
|
|
3342
|
+
if tag_name == "CAN-TP-ADDRESS":
|
|
3343
|
+
address = config.createCanTpAddress(self.getShortName(child_element))
|
|
3344
|
+
self.readCanTpAddress(child_element, address)
|
|
3345
|
+
else:
|
|
3346
|
+
self.notImplemented("Unsupported TpAddress <%s>" % tag_name)
|
|
3347
|
+
|
|
3348
|
+
def readCanTpChannel(self, element: ET.Element, channel: CanTpChannel):
|
|
3349
|
+
self.readIdentifiable(element, channel)
|
|
3350
|
+
channel.setChannelId(self.getChildElementOptionalPositiveInteger(element, "CHANNEL-ID")) \
|
|
3351
|
+
.setChannelMode(self.getChildElementOptionalLiteral(element, "CHANNEL-MODE"))
|
|
3352
|
+
|
|
3353
|
+
def readCanTpConfigTpChannels(self, element: ET.Element, config: CanTpConfig):
|
|
3354
|
+
for child_element in self.findall(element, "TP-CHANNELS/*"):
|
|
3355
|
+
tag_name = self.getTagName(child_element)
|
|
3356
|
+
if tag_name == "CAN-TP-CHANNEL":
|
|
3357
|
+
channel = config.createCanTpChannel(self.getShortName(child_element))
|
|
3358
|
+
self.readCanTpChannel(child_element, channel)
|
|
3359
|
+
else:
|
|
3360
|
+
self.notImplemented("Unsupported TpChannel <%s>" % tag_name)
|
|
3361
|
+
|
|
3362
|
+
def readTpConnection(self, element: ET.Element, connection: TpConnection):
|
|
3363
|
+
self.readARObjectAttributes(element, connection)
|
|
3364
|
+
child_element = self.find(element, "IDENT")
|
|
3365
|
+
if child_element is not None:
|
|
3366
|
+
ident = connection.createTpConnectionIdent(self.getShortName(child_element))
|
|
3367
|
+
self.readReferrable(child_element, ident)
|
|
3368
|
+
|
|
3369
|
+
def readTpConnectionReceiverRefs(self, element: ET.Element, connection: CanTpConnection):
|
|
3370
|
+
for ref in self.getChildElementRefTypeList(element, "RECEIVER-REFS/RECEIVER-REF"):
|
|
3371
|
+
connection.addReceiverRef(ref)
|
|
3372
|
+
|
|
3373
|
+
def readCanTpConnection(self, element: ET.Element, connection: CanTpConnection):
|
|
3374
|
+
self.readTpConnection(element, connection)
|
|
3375
|
+
connection.setAddressingFormat(self.getChildElementOptionalLiteral(element, "ADDRESSING-FORMAT")) \
|
|
3376
|
+
.setCanTpChannelRef(self.getChildElementOptionalRefType(element, "CAN-TP-CHANNEL-REF")) \
|
|
3377
|
+
.setCancellation(self.getChildElementOptionalBooleanValue(element, "CANCELLATION")) \
|
|
3378
|
+
.setDataPduRef(self.getChildElementOptionalRefType(element, "DATA-PDU-REF")) \
|
|
3379
|
+
.setFlowControlPduRef(self.getChildElementOptionalRefType(element, "FLOW-CONTROL-PDU-REF")) \
|
|
3380
|
+
.setMaxBlockSize(self.getChildElementOptionalIntegerValue(element, "MAX-BLOCK-SIZE")) \
|
|
3381
|
+
.setMulticastRef(self.getChildElementOptionalRefType(element, "MULTICAST-REF")) \
|
|
3382
|
+
.setPaddingActivation(self.getChildElementOptionalBooleanValue(element, "PADDING-ACTIVATION"))
|
|
3383
|
+
self.readTpConnectionReceiverRefs(element, connection)
|
|
3384
|
+
connection.setTaType(self.getChildElementOptionalLiteral(element, "TA-TYPE")) \
|
|
3385
|
+
.setTimeoutBr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-BR")) \
|
|
3386
|
+
.setTimeoutBs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-BS")) \
|
|
3387
|
+
.setTimeoutCr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CR")) \
|
|
3388
|
+
.setTimeoutCs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CS")) \
|
|
3389
|
+
.setTpSduRef(self.getChildElementOptionalRefType(element, "TP-SDU-REF")) \
|
|
3390
|
+
.setTransmitterRef(self.getChildElementOptionalRefType(element, "TRANSMITTER-REF"))
|
|
3391
|
+
|
|
3392
|
+
def readCanTpConfigTpConnections(self, element: ET.Element, config: CanTpConfig):
|
|
3393
|
+
for child_element in self.findall(element, "TP-CONNECTIONS/*"):
|
|
3394
|
+
tag_name = self.getTagName(child_element)
|
|
3395
|
+
if tag_name == "CAN-TP-CONNECTION":
|
|
3396
|
+
connection = CanTpConnection()
|
|
3397
|
+
self.readCanTpConnection(child_element, connection)
|
|
3398
|
+
config.addTpConnection(connection)
|
|
3399
|
+
else:
|
|
3400
|
+
self.notImplemented("Unsupported TpConnection <%s>" % tag_name)
|
|
3401
|
+
|
|
3402
|
+
def readCanTpEcu(self, element: ET.Element, tp_ecu: CanTpEcu):
|
|
3403
|
+
tp_ecu.setCycleTimeMainFunction(self.getChildElementOptionalTimeValue(element, "CYCLE-TIME-MAIN-FUNCTION")) \
|
|
3404
|
+
.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF"))
|
|
3405
|
+
|
|
3406
|
+
def readCanTpConfigTpEcus(self, element: ET.Element, config: CanTpConfig):
|
|
3407
|
+
for child_element in self.findall(element, "TP-ECUS/*"):
|
|
3408
|
+
tag_name = self.getTagName(child_element)
|
|
3409
|
+
if tag_name == "CAN-TP-ECU":
|
|
3410
|
+
tp_ecu = CanTpEcu()
|
|
3411
|
+
self.readCanTpEcu(child_element, tp_ecu)
|
|
3412
|
+
config.addTpEcu(tp_ecu)
|
|
3413
|
+
else:
|
|
3414
|
+
self.notImplemented("Unsupported TpEcu <%s>" % tag_name)
|
|
3415
|
+
|
|
3416
|
+
def readCanTpNode(self, element: ET.Element, tp_node: CanTpNode):
|
|
3417
|
+
self.readIdentifiable(element, tp_node)
|
|
3418
|
+
tp_node.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF")) \
|
|
3419
|
+
.setMaxFcWait(self.getChildElementOptionalIntegerValue(element, "MAX-FC-WAIT")) \
|
|
3420
|
+
.setStMin(self.getChildElementOptionalTimeValue(element, "ST-MIN")) \
|
|
3421
|
+
.setTimeoutAr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-AR")) \
|
|
3422
|
+
.setTimeoutAs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-AS")) \
|
|
3423
|
+
.setTpAddressRef(self.getChildElementOptionalRefType(element, "TP-ADDRESS-REF"))
|
|
3424
|
+
|
|
3425
|
+
def readCanTpConfigTpNodes(self, element: ET.Element, config: CanTpConfig):
|
|
3426
|
+
for child_element in self.findall(element, "TP-NODES/*"):
|
|
3427
|
+
tag_name = self.getTagName(child_element)
|
|
3428
|
+
if tag_name == "CAN-TP-NODE":
|
|
3429
|
+
tp_node = config.createCanTpNode(self.getShortName(child_element))
|
|
3430
|
+
self.readCanTpNode(child_element, tp_node)
|
|
3431
|
+
else:
|
|
3432
|
+
self.notImplemented("Unsupported TpNode <%s>" % tag_name)
|
|
3047
3433
|
|
|
3048
3434
|
def readCanTpConfig(self, element: ET.Element, config: CanTpConfig):
|
|
3049
3435
|
self.logger.debug("Read CanTpConfig <%s>" % config.getShortName())
|
|
3050
|
-
self.
|
|
3436
|
+
self.readTpConfig(element, config)
|
|
3437
|
+
self.readCanTpConfigTpAddresses(element, config)
|
|
3438
|
+
self.readCanTpConfigTpChannels(element, config)
|
|
3439
|
+
self.readCanTpConfigTpConnections(element, config)
|
|
3440
|
+
self.readCanTpConfigTpEcus(element, config)
|
|
3441
|
+
self.readCanTpConfigTpNodes(element, config)
|
|
3442
|
+
|
|
3443
|
+
def readTpAddress(self, element: ET.Element, address: TpAddress):
|
|
3444
|
+
self.readIdentifiable(element, address)
|
|
3445
|
+
address.setTpAddress(self.getChildElementOptionalIntegerValue(element, "TP-ADDRESS"))
|
|
3446
|
+
|
|
3447
|
+
def readLinTpConfigTpAddresses(self, element: ET.Element, config: LinTpConfig):
|
|
3448
|
+
for child_element in self.findall(element, "TP-ADDRESSS/*"):
|
|
3449
|
+
tag_name = self.getTagName(child_element)
|
|
3450
|
+
if tag_name == "TP-ADDRESS":
|
|
3451
|
+
address = config.createTpAddress(self.getShortName(child_element))
|
|
3452
|
+
self.readTpAddress(child_element, address)
|
|
3453
|
+
else:
|
|
3454
|
+
self.notImplemented("Unsupported TpAddress <%s>" % tag_name)
|
|
3455
|
+
|
|
3456
|
+
def readLinTpConnection(self, element: ET.Element, connection: LinTpConnection):
|
|
3457
|
+
self.readTpConnection(element, connection)
|
|
3458
|
+
connection.setDataPduRef(self.getChildElementOptionalRefType(element, "DATA-PDU-REF")) \
|
|
3459
|
+
.setFlowControlRef(self.getChildElementOptionalRefType(element, "FLOW-CONTROL-REF")) \
|
|
3460
|
+
.setLinTpNSduRef(self.getChildElementOptionalRefType(element, "LIN-TP-N-SDU-REF"))
|
|
3461
|
+
self.readTpConnectionReceiverRefs(element, connection)
|
|
3462
|
+
connection.setTimeoutAs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-AS")) \
|
|
3463
|
+
.setTimeoutCr(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CR")) \
|
|
3464
|
+
.setTimeoutCs(self.getChildElementOptionalTimeValue(element, "TIMEOUT-CS")) \
|
|
3465
|
+
.setTransmitterRef(self.getChildElementOptionalRefType(element, "TRANSMITTER-REF"))
|
|
3466
|
+
|
|
3467
|
+
def readLinTpConfigTpConnections(self, element: ET.Element, config: LinTpConfig):
|
|
3468
|
+
for child_element in self.findall(element, "TP-CONNECTIONS/*"):
|
|
3469
|
+
tag_name = self.getTagName(child_element)
|
|
3470
|
+
if tag_name == "LIN-TP-CONNECTION":
|
|
3471
|
+
connection = LinTpConnection()
|
|
3472
|
+
self.readLinTpConnection(child_element, connection)
|
|
3473
|
+
config.addTpConnection(connection)
|
|
3474
|
+
else:
|
|
3475
|
+
self.notImplemented("Unsupported TpConnection <%s>" % tag_name)
|
|
3476
|
+
|
|
3477
|
+
def readLinTpNode(self, element: ET.Element, tp_node: LinTpNode):
|
|
3478
|
+
self.readIdentifiable(element, tp_node)
|
|
3479
|
+
tp_node.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF")) \
|
|
3480
|
+
.setDropNotRequestedNad(self.getChildElementOptionalBooleanValue(element, "DROP-NOT-REQUESTED-NAD")) \
|
|
3481
|
+
.setP2Max(self.getChildElementOptionalTimeValue(element, "P-2-MAX")) \
|
|
3482
|
+
.setP2Timing(self.getChildElementOptionalTimeValue(element, "P-2-TIMING")) \
|
|
3483
|
+
.setTpAddressRef(self.getChildElementOptionalRefType(element, "TP-ADDRESS-REF"))
|
|
3484
|
+
|
|
3485
|
+
def readLinTpConfigTpNodes(self, element: ET.Element, config: LinTpConfig):
|
|
3486
|
+
for child_element in self.findall(element, "TP-NODES/*"):
|
|
3487
|
+
tag_name = self.getTagName(child_element)
|
|
3488
|
+
if tag_name == "LIN-TP-NODE":
|
|
3489
|
+
tp_node = config.createLinTpNode(self.getShortName(child_element))
|
|
3490
|
+
self.readLinTpNode(child_element, tp_node)
|
|
3491
|
+
else:
|
|
3492
|
+
self.notImplemented("Unsupported TpNode <%s>" % tag_name)
|
|
3051
3493
|
|
|
3052
3494
|
def readLinTpConfig(self, element: ET.Element, config: LinTpConfig):
|
|
3053
3495
|
self.logger.debug("Read LinTpConfig <%s>" % config.getShortName())
|
|
3054
|
-
self.
|
|
3496
|
+
self.readTpConfig(element, config)
|
|
3497
|
+
self.readLinTpConfigTpAddresses(element, config)
|
|
3498
|
+
self.readLinTpConfigTpConnections(element, config)
|
|
3499
|
+
self.readLinTpConfigTpNodes(element, config)
|
|
3055
3500
|
|
|
3056
3501
|
def readCanFrame(self, element: ET.Element, frame: CanFrame):
|
|
3057
3502
|
self.logger.debug("Read CanFrame <%s>" % frame.getShortName())
|
|
@@ -3272,9 +3717,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3272
3717
|
def readCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
|
|
3273
3718
|
self.readCommunicationConnector(element, connector)
|
|
3274
3719
|
|
|
3720
|
+
def readEthernetCommunicationConnectorNetworkEndpointRefs(self, element: ET.Element, connector: EthernetCommunicationConnector):
|
|
3721
|
+
for ref in self.getChildElementRefTypeList(element, "NETWORK-ENDPOINT-REFS/NETWORK-ENDPOINT-REF"):
|
|
3722
|
+
connector.addNetworkEndpointRef(ref)
|
|
3723
|
+
|
|
3275
3724
|
def readEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
|
|
3276
3725
|
self.readCommunicationConnector(element, connector)
|
|
3277
3726
|
connector.setMaximumTransmissionUnit(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-TRANSMISSION-UNIT"))
|
|
3727
|
+
self.readEthernetCommunicationConnectorNetworkEndpointRefs(element, connector)
|
|
3278
3728
|
|
|
3279
3729
|
def readLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
|
|
3280
3730
|
self.readCommunicationConnector(element, connector)
|
|
@@ -3309,7 +3759,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3309
3759
|
.setComEnableMDTForCyclicTransmission(self.getChildElementOptionalBooleanValue(element, "COM-ENABLE-MDT-FOR-CYCLIC-TRANSMISSION"))
|
|
3310
3760
|
self.readEcuInstanceCommControllers(element, instance)
|
|
3311
3761
|
self.readEcuInstanceConnectors(element, instance)
|
|
3312
|
-
instance.
|
|
3762
|
+
instance.setDiagnosticAddress(self.getChildElementOptionalIntegerValue(element, "DIAGNOSTIC-ADDRESS")) \
|
|
3763
|
+
.setSleepModeSupported(self.getChildElementOptionalBooleanValue(element, "SLEEP-MODE-SUPPORTED")) \
|
|
3313
3764
|
.setWakeUpOverBusSupported(self.getChildElementOptionalBooleanValue(element, "WAKE-UP-OVER-BUS-SUPPORTED"))
|
|
3314
3765
|
|
|
3315
3766
|
'''
|
|
@@ -3492,9 +3943,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3492
3943
|
def readPhysicalDimension(self, element: ET.Element, dimension: PhysicalDimension):
|
|
3493
3944
|
self.logger.debug("Read PhysicalDimension <%s>" % dimension.getShortName())
|
|
3494
3945
|
self.readIdentifiable(element, dimension)
|
|
3495
|
-
dimension.
|
|
3496
|
-
.
|
|
3497
|
-
.
|
|
3946
|
+
dimension.setLengthExp(self.getChildElementOptionalNumericalValue(element, "LENGTH-EXP")) \
|
|
3947
|
+
.setLuminousIntensityExp(self.getChildElementOptionalNumericalValue(element, "LUMINOUS-INTENSITY-EXP")) \
|
|
3948
|
+
.setMassExp(self.getChildElementOptionalNumericalValue(element, "MASS-EXP")) \
|
|
3949
|
+
.setTemperatureExp(self.getChildElementOptionalNumericalValue(element, "TEMPERATURE-EXP")) \
|
|
3950
|
+
.setTimeExp(self.getChildElementOptionalNumericalValue(element, "TIME-EXP")) \
|
|
3951
|
+
.setCurrentExp(self.getChildElementOptionalNumericalValue(element, "CURRENT-EXP")) \
|
|
3498
3952
|
|
|
3499
3953
|
'''
|
|
3500
3954
|
def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
|
|
@@ -3543,7 +3997,10 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3543
3997
|
child_element = self.find(element, key)
|
|
3544
3998
|
if child_element is not None:
|
|
3545
3999
|
filter = DataFilter()
|
|
3546
|
-
filter.setDataFilterType(self.getChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE"))
|
|
4000
|
+
filter.setDataFilterType(self.getChildElementOptionalLiteral(child_element, "DATA-FILTER-TYPE")) \
|
|
4001
|
+
.setMask(self.getChildElementOptionalIntegerValue(child_element, "MASK")) \
|
|
4002
|
+
.setX(self.getChildElementOptionalIntegerValue(child_element, "X"))
|
|
4003
|
+
|
|
3547
4004
|
return filter
|
|
3548
4005
|
|
|
3549
4006
|
def getTransmissionModeConditions(self, element: ET.Element, key: str) -> List[TransmissionModeCondition]:
|
|
@@ -3599,7 +4056,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3599
4056
|
decl = TransmissionModeDeclaration()
|
|
3600
4057
|
for condition in self.getTransmissionModeConditions(child_element, "TRANSMISSION-MODE-CONDITIONS/TRANSMISSION-MODE-CONDITION"):
|
|
3601
4058
|
decl.addTransmissionModeCondition(condition)
|
|
3602
|
-
decl.
|
|
4059
|
+
decl.setTransmissionModeFalseTiming(self.getTransmissionModeTiming(child_element, "TRANSMISSION-MODE-FALSE-TIMING")) \
|
|
4060
|
+
.setTransmissionModeTrueTiming(self.getTransmissionModeTiming(child_element, "TRANSMISSION-MODE-TRUE-TIMING"))
|
|
3603
4061
|
return decl
|
|
3604
4062
|
|
|
3605
4063
|
def getISignalIPduIPduTimingSpecification(self, element: ET.Element) -> IPduTiming:
|
|
@@ -3611,13 +4069,13 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3611
4069
|
.setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
|
|
3612
4070
|
return timing
|
|
3613
4071
|
|
|
3614
|
-
def readISignalIPdu(self, element: ET.Element,
|
|
3615
|
-
self.logger.debug("Read ISignalIPdu <%s>" %
|
|
3616
|
-
self.readIdentifiable(element,
|
|
3617
|
-
|
|
4072
|
+
def readISignalIPdu(self, element: ET.Element, ipdu: ISignalIPdu):
|
|
4073
|
+
self.logger.debug("Read ISignalIPdu <%s>" % ipdu.getShortName())
|
|
4074
|
+
self.readIdentifiable(element, ipdu)
|
|
4075
|
+
ipdu.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
|
|
3618
4076
|
.setIPduTimingSpecification(self.getISignalIPduIPduTimingSpecification(element))
|
|
3619
|
-
self.readISignalToPduMappings(element,
|
|
3620
|
-
|
|
4077
|
+
self.readISignalToPduMappings(element, ipdu)
|
|
4078
|
+
ipdu.setUnusedBitPattern(self.getChildElementOptionalIntegerValue(element, "UNUSED-BIT-PATTERN"))
|
|
3621
4079
|
|
|
3622
4080
|
def getISignalIPduRefs(self, element: ET.Element) -> List[RefType]:
|
|
3623
4081
|
ref_types = []
|
|
@@ -3669,23 +4127,54 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3669
4127
|
for child_element in self.findall(element, "SW-MAPPINGS/*"):
|
|
3670
4128
|
tag_name = self.getTagName(child_element)
|
|
3671
4129
|
if tag_name == "SWC-TO-ECU-MAPPING":
|
|
3672
|
-
|
|
4130
|
+
swc_to_ecu_mapping = mapping.createSwcToEcuMapping(self.getShortName(child_element))
|
|
4131
|
+
self.readSwcToEcuMapping(child_element, swc_to_ecu_mapping)
|
|
3673
4132
|
else:
|
|
3674
4133
|
self.notImplemented("Unsupported Sw Mapping %s" % tag_name)
|
|
3675
4134
|
|
|
3676
|
-
def
|
|
3677
|
-
|
|
3678
|
-
self.
|
|
3679
|
-
|
|
4135
|
+
def readEcuMapping(self, element: ET.Element, mapping: ECUMapping):
|
|
4136
|
+
self.readIdentifiable(element, mapping)
|
|
4137
|
+
mapping.setEcuInstanceRef(self.getChildElementOptionalRefType(element, "ECU-INSTANCE-REF")) \
|
|
4138
|
+
.setEcuRef(self.getChildElementOptionalRefType(element, "ECU-REF"))
|
|
4139
|
+
|
|
4140
|
+
def readSystemMappingEcuResourceMappings(self, element: ET.Element, mapping: SystemMapping):
|
|
4141
|
+
for child_element in self.findall(element, "ECU-RESOURCE-MAPPINGS/*"):
|
|
4142
|
+
tag_name = self.getTagName(child_element)
|
|
4143
|
+
if tag_name == "ECU-MAPPING":
|
|
4144
|
+
ecu_mapping = mapping.createECUMapping(self.getShortName(child_element))
|
|
4145
|
+
self.readEcuMapping(child_element, ecu_mapping)
|
|
4146
|
+
else:
|
|
4147
|
+
self.notImplemented("Unsupported EcuResourceMapping <%s>" % tag_name)
|
|
4148
|
+
|
|
4149
|
+
def readSwcToImplMapping(self, element: ET.Element, mapping: SwcToImplMapping):
|
|
4150
|
+
self.readIdentifiable(element, mapping)
|
|
4151
|
+
mapping.setComponentImplementationRef(self.getChildElementOptionalRefType(element, "COMPONENT-IMPLEMENTATION-REF"))
|
|
4152
|
+
for child_element in self.findall(element, "COMPONENT-IREFS/COMPONENT-IREF"):
|
|
4153
|
+
mapping.addComponentIRef(self.getComponentInSystemInstanceRef(child_element))
|
|
4154
|
+
|
|
4155
|
+
def readSystemMappingSwImplMappings(self, element: ET.Element, mapping: SystemMapping):
|
|
4156
|
+
for child_element in self.findall(element, "SW-IMPL-MAPPINGS/*"):
|
|
4157
|
+
tag_name = self.getTagName(child_element)
|
|
4158
|
+
if tag_name == "SWC-TO-IMPL-MAPPING":
|
|
4159
|
+
sw_impl_mapping = mapping.createSwcToImplMapping(self.getShortName(child_element))
|
|
4160
|
+
self.readSwcToImplMapping(child_element, sw_impl_mapping)
|
|
4161
|
+
else:
|
|
4162
|
+
self.notImplemented("Unsupported SwImplMapping <%s>" % tag_name)
|
|
4163
|
+
|
|
4164
|
+
def readSystemMapping(self, element: ET.Element, mapping: SystemMapping):
|
|
4165
|
+
self.logger.debug("SystemMapping %s" % mapping.getShortName())
|
|
3680
4166
|
self.readIdentifiable(element, mapping)
|
|
3681
4167
|
self.readSystemMappingDataMappings(element, mapping)
|
|
4168
|
+
self.readSystemMappingEcuResourceMappings(element, mapping)
|
|
4169
|
+
self.readSystemMappingSwImplMappings(element, mapping)
|
|
3682
4170
|
self.readSystemMappingSwMappings(element, mapping)
|
|
3683
4171
|
|
|
3684
4172
|
def readSystemMappings(self, element: ET.Element, system: System):
|
|
3685
4173
|
for child_element in self.findall(element, "MAPPINGS/*"):
|
|
3686
4174
|
tag_name = self.getTagName(child_element)
|
|
3687
4175
|
if tag_name == "SYSTEM-MAPPING":
|
|
3688
|
-
self.
|
|
4176
|
+
mapping = system.createSystemMapping(self.getShortName(child_element))
|
|
4177
|
+
self.readSystemMapping(child_element, mapping)
|
|
3689
4178
|
else:
|
|
3690
4179
|
self.notImplemented("Unsupported Mapping %s" % tag_name)
|
|
3691
4180
|
|
|
@@ -3698,6 +4187,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3698
4187
|
self.readIdentifiable(child_element, prototype)
|
|
3699
4188
|
prototype.setFlatMapRef(self.getChildElementOptionalRefType(child_element, "FLAT-MAP-REF")) \
|
|
3700
4189
|
.setSoftwareCompositionTRef(self.getChildElementOptionalRefType(child_element, "SOFTWARE-COMPOSITION-TREF"))
|
|
4190
|
+
AUTOSAR.getInstance().setRootSwCompositionPrototype(prototype)
|
|
3701
4191
|
|
|
3702
4192
|
def readSystemFibexElementRefs(self, element: ET.Element, system: System):
|
|
3703
4193
|
for ref in self.getChildElementRefTypeList(element, "FIBEX-ELEMENTS/FIBEX-ELEMENT-REF-CONDITIONAL/FIBEX-ELEMENT-REF"):
|
|
@@ -3711,6 +4201,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3711
4201
|
self.readSystemMappings(element, system)
|
|
3712
4202
|
self.readRootSwCompositionPrototype(element, system)
|
|
3713
4203
|
system.setSystemVersion(self.getChildElementOptionalRevisionLabelString(element, "SYSTEM-VERSION"))
|
|
4204
|
+
AUTOSAR.getInstance().addSystem(system)
|
|
3714
4205
|
|
|
3715
4206
|
def readGenericEthernetFrame(self, element: ET.Element, frame: GenericEthernetFrame):
|
|
3716
4207
|
self.logger.debug("Read GenericEthernetFrame <%s>" % frame.getShortName())
|
|
@@ -4006,7 +4497,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
4006
4497
|
self.readReferenceBases(child_element, ar_package)
|
|
4007
4498
|
|
|
4008
4499
|
def load(self, filename, document: AUTOSAR):
|
|
4009
|
-
self.logger.info("
|
|
4500
|
+
self.logger.info("Loading %s ..." % os.path.realpath(filename))
|
|
4010
4501
|
|
|
4011
4502
|
tree = ET.parse(filename)
|
|
4012
4503
|
root = tree.getroot()
|