armodel 1.7.3__py3-none-any.whl → 1.7.5__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/cli/file_list_cli.py +70 -0
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +2 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +1 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +6 -7
- armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/DiagnosticContribution.py +47 -0
- armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/__init__.py +0 -0
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +73 -3
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +37 -1
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +17 -1
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +31 -0
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +4 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/InstanceRefsUsage.py +17 -32
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +4 -0
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +7 -1
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +47 -15
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/DiagnosticConnection.py +58 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetCommunication.py +244 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +281 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/NetworkEndpoint.py +328 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +522 -11
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinCommunication.py +114 -6
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +94 -0
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +151 -6
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +140 -12
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +31 -6
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +7 -12
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +135 -13
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +25 -1
- armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +4 -3
- armodel/models/M2/MSR/AsamHdo/BaseTypes.py +0 -1
- armodel/models/M2/MSR/DataDictionary/RecordLayout.py +1 -1
- armodel/models/__init__.py +6 -0
- armodel/parser/abstract_arxml_parser.py +2 -0
- armodel/parser/arxml_parser.py +561 -62
- armodel/tests/test_armodel/models/test_ar_ref.py +2 -2
- armodel/writer/abstract_arxml_writer.py +1 -3
- armodel/writer/arxml_writer.py +702 -223
- {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/METADATA +47 -2
- {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/RECORD +43 -34
- {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/entry_points.txt +1 -0
- {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/LICENSE +0 -0
- {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/WHEEL +0 -0
- {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -2,10 +2,6 @@ from typing import List
|
|
|
2
2
|
import xml.etree.ElementTree as ET
|
|
3
3
|
import os
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
5
|
from ..models.M2.MSR.AsamHdo.AdminData import AdminData
|
|
10
6
|
from ..models.M2.MSR.AsamHdo.BaseTypes import BaseTypeDirectDefinition
|
|
11
7
|
from ..models.M2.MSR.AsamHdo.Constraints.GlobalConstraints import DataConstrRule, InternalConstrs, PhysConstrs, DataConstr
|
|
@@ -51,20 +47,21 @@ from ..models.M2.AUTOSARTemplates.GenericStructure.AbstractStructure import AnyI
|
|
|
51
47
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable, MultilanguageReferrable
|
|
52
48
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.EngineeringObject import AutosarEngineeringObject, EngineeringObject
|
|
53
49
|
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ARPackage import ARPackage, ReferenceBase
|
|
54
|
-
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType, ARLiteral
|
|
50
|
+
from ..models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Ip6AddressString, RefType, ARLiteral
|
|
55
51
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
|
|
56
52
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, OperationInvokedEvent, RTEEvent, SwcModeSwitchEvent
|
|
57
53
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.Datatypes import ApplicationRecordDataType, ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, DataTypeMap, DataTypeMappingSet
|
|
58
54
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.EndToEndProtection import EndToEndProtectionSet, EndToEndDescription, EndToEndProtection, EndToEndProtectionVariablePrototype
|
|
59
55
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
|
|
60
56
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
|
|
61
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef,
|
|
57
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.InstanceRefsUsage import AutosarParameterRef, VariableInAtomicSWCTypeInstanceRef
|
|
62
58
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
|
|
63
59
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
|
|
60
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
|
|
64
61
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import InnerPortGroupInCompositionInstanceRef, PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, RVariableInAtomicSwcInstanceRef
|
|
65
62
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior import RunnableEntity, RunnableEntityArgument, SwcInternalBehavior
|
|
63
|
+
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AutosarVariableRef import AutosarVariableRef
|
|
66
64
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServiceMapping import RoleBasedPortAssignment, SwcServiceDependency
|
|
67
|
-
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Components import AbstractProvidedPortPrototype, AbstractRequiredPortPrototype, CompositionSwComponentType, PortGroup, SwComponentType, SymbolProps, PPortPrototype, RPortPrototype
|
|
68
65
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition import AssemblySwConnector, DelegationSwConnector
|
|
69
66
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
|
|
70
67
|
from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
|
|
@@ -75,15 +72,21 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes im
|
|
|
75
72
|
|
|
76
73
|
from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping , System, SystemMapping
|
|
77
74
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
|
|
78
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.
|
|
75
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.DiagnosticConnection import DiagnosticConnection
|
|
76
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode, UdpNmCluster, UdpNmClusterCoupling, UdpNmNode
|
|
79
77
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
|
|
80
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering
|
|
81
|
-
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.
|
|
78
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import ApplicationEntry, LinFrameTriggering, LinScheduleTable, ScheduleTableEntry
|
|
79
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinTopology import LinCommunicationConnector, LinMaster
|
|
80
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanClusterBusOffRecovery, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, EthernetPhysicalChannel, FramePort, IPduPort, ISignalPort, LinPhysicalChannel, PhysicalChannel
|
|
82
81
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import Frame, FrameTriggering, IPdu, IPduTiming, ISignalIPdu, ISignalTriggering, PduTriggering
|
|
83
82
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
|
|
84
83
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
|
|
85
84
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrameTriggering, RxIdentifierRange
|
|
86
85
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
|
|
86
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCommunicationConnector, EthernetCommunicationController, InitialSdDelayConfig, RequestResponseDelay, SdClientConfig
|
|
87
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
|
|
88
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import DoIpEntity, InfrastructureServices, Ipv6Configuration, NetworkEndpoint
|
|
89
|
+
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import ApplicationEndpoint, ConsumedEventGroup, ConsumedServiceInstance, GenericTp, SoAdConfig, SocketAddress, TcpTp, TpPort, TransportProtocolConfiguration, UdpTp
|
|
87
90
|
from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import ISignalMapping
|
|
88
91
|
|
|
89
92
|
from .abstract_arxml_parser import AbstractARXMLParser
|
|
@@ -205,17 +208,18 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
205
208
|
iref.setTargetComponentRef(self.getChildElementOptionalRefType(element, "TARGET-COMPONENT-REF"))
|
|
206
209
|
return iref
|
|
207
210
|
|
|
208
|
-
def
|
|
209
|
-
child_element = self.find(element,
|
|
211
|
+
def getAutosarVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
|
|
212
|
+
child_element = self.find(element, key)
|
|
210
213
|
ref = None
|
|
211
214
|
if (child_element is not None):
|
|
212
215
|
ref = AutosarVariableRef()
|
|
213
216
|
#self.readARObjectAttributes(child_element, ref)
|
|
214
|
-
ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
|
|
217
|
+
ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF"))) \
|
|
218
|
+
.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
|
|
215
219
|
return ref
|
|
216
220
|
|
|
217
|
-
def getLocalVariableRef(self, element: ET.Element) -> AutosarVariableRef:
|
|
218
|
-
child_element = self.find(element,
|
|
221
|
+
def getLocalVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
|
|
222
|
+
child_element = self.find(element, key)
|
|
219
223
|
ref = None
|
|
220
224
|
if (child_element is not None):
|
|
221
225
|
ref = AutosarVariableRef()
|
|
@@ -230,25 +234,25 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
230
234
|
|
|
231
235
|
if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
|
|
232
236
|
variable_access = parent.createDataReceivePointByArgument(short_name)
|
|
233
|
-
variable_access.setAccessedVariableRef(self.
|
|
237
|
+
variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
234
238
|
elif (key == "DATA-RECEIVE-POINT-BY-VALUES"):
|
|
235
239
|
variable_access = parent.createDataReceivePointByValue(short_name)
|
|
236
|
-
variable_access.setAccessedVariableRef(self.
|
|
240
|
+
variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
237
241
|
elif (key == "DATA-READ-ACCESSS"):
|
|
238
242
|
variable_access = parent.createDataReadAccess(short_name)
|
|
239
|
-
variable_access.setAccessedVariableRef(self.
|
|
243
|
+
variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
240
244
|
elif (key == "DATA-WRITE-ACCESSS"):
|
|
241
245
|
variable_access = parent.createDataWriteAccess(short_name)
|
|
242
|
-
variable_access.setAccessedVariableRef(self.
|
|
246
|
+
variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
243
247
|
elif (key == "DATA-SEND-POINTS"):
|
|
244
248
|
variable_access = parent.createDataSendPoint(short_name)
|
|
245
|
-
variable_access.setAccessedVariableRef(self.
|
|
249
|
+
variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
246
250
|
elif (key == "WRITTEN-LOCAL-VARIABLES"):
|
|
247
251
|
variable_access = parent.createWrittenLocalVariable(short_name)
|
|
248
|
-
variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
|
|
252
|
+
variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
249
253
|
elif (key == "READ-LOCAL-VARIABLES"):
|
|
250
254
|
variable_access = parent.createReadLocalVariable(short_name)
|
|
251
|
-
variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element))
|
|
255
|
+
variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
|
|
252
256
|
else:
|
|
253
257
|
self.notImplemented("Unsupported Variable Accesss <%s>" % key)
|
|
254
258
|
|
|
@@ -297,8 +301,6 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
297
301
|
if ref_type is not None:
|
|
298
302
|
entity.addManagedModeGroupRef(ref_type)
|
|
299
303
|
|
|
300
|
-
|
|
301
|
-
|
|
302
304
|
def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
303
305
|
event.startsOnEventRef = self.getChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF")
|
|
304
306
|
|
|
@@ -369,6 +371,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
369
371
|
def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
|
|
370
372
|
assignment = RoleBasedDataAssignment()
|
|
371
373
|
assignment.setRole(self.getChildElementOptionalLiteral(element, "ROLE")) \
|
|
374
|
+
.setUsedDataElement(self.getAutosarVariableRef(element, "USED-DATA-ELEMENT")) \
|
|
372
375
|
.setUsedParameterElement(self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")) \
|
|
373
376
|
.setUsedPimRef(self.getChildElementOptionalRefType(element, "USED-PIM-REF"))
|
|
374
377
|
return assignment
|
|
@@ -432,6 +435,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
432
435
|
.setUseCRCCompMechanism(self.getChildElementOptionalBooleanValue(element, "USE-CRC-COMP-MECHANISM")) \
|
|
433
436
|
.setWriteOnlyOnce(self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")) \
|
|
434
437
|
.setWriteVerification(self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")) \
|
|
438
|
+
.setWritingFrequency(self.getChildElementOptionalPositiveInteger(element, "WRITING-FREQUENCY")) \
|
|
435
439
|
.setWritingPriority(self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY"))
|
|
436
440
|
|
|
437
441
|
def reaDiagnosticCommunicationManagerNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
@@ -475,16 +479,23 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
475
479
|
def readDiagnosticEventNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
476
480
|
short_name = self.getShortName(element)
|
|
477
481
|
needs = parent.createDiagnosticEventNeeds(short_name)
|
|
478
|
-
self.logger.debug("
|
|
482
|
+
self.logger.debug("Read DiagnosticEventNeeds %s" % short_name)
|
|
479
483
|
self.readIdentifiable(element, needs)
|
|
480
484
|
self.readDiagEventDebounceAlgorithm(element, needs)
|
|
481
485
|
needs.setDtcKind(self.getChildElementOptionalLiteral(element, "DTC-KIND")) \
|
|
482
|
-
.setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
|
|
486
|
+
.setUdsDtcNumber(self.getChildElementOptionalIntegerValue(element, "UDS-DTC-NUMBER"))
|
|
487
|
+
|
|
488
|
+
def readDiagnosticEventInfoNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
489
|
+
short_name = self.getShortName(element)
|
|
490
|
+
needs = parent.createDiagnosticEventInfoNeeds(short_name)
|
|
491
|
+
self.logger.debug("Read DiagnosticEventInfoNeeds %s" % short_name)
|
|
492
|
+
self.readIdentifiable(element, needs)
|
|
493
|
+
needs.setUdsDtcNumber(self.getChildElementOptionalPositiveInteger(element, "UDS-DTC-NUMBER"))
|
|
483
494
|
|
|
484
495
|
def readCryptoServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
485
496
|
short_name = self.getShortName(element)
|
|
486
497
|
needs = parent.createCryptoServiceNeeds(short_name)
|
|
487
|
-
self.logger.debug("
|
|
498
|
+
self.logger.debug("Read DiagnosticValueNeeds %s" % short_name)
|
|
488
499
|
self.readIdentifiable(element, needs)
|
|
489
500
|
needs.setMaximumKeyLength(self.getChildElementOptionalPositiveInteger(element, "MAXIMUM-KEY-LENGTH"))
|
|
490
501
|
|
|
@@ -507,6 +518,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
507
518
|
self.readDiagnosticValueNeeds(child_element, parent)
|
|
508
519
|
elif tag_name == "DIAGNOSTIC-EVENT-NEEDS":
|
|
509
520
|
self.readDiagnosticEventNeeds(child_element, parent)
|
|
521
|
+
elif tag_name == "DIAGNOSTIC-EVENT-INFO-NEEDS":
|
|
522
|
+
self.readDiagnosticEventInfoNeeds(child_element, parent)
|
|
510
523
|
elif tag_name == "CRYPTO-SERVICE-NEEDS":
|
|
511
524
|
self.readCryptoServiceNeeds(child_element, parent)
|
|
512
525
|
elif tag_name == "ECU-STATE-MGR-USER-NEEDS":
|
|
@@ -540,6 +553,18 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
540
553
|
include_data_type_set.addDataTypeRef(ref_type)
|
|
541
554
|
include_data_type_sets.append(include_data_type_set)
|
|
542
555
|
return include_data_type_sets
|
|
556
|
+
|
|
557
|
+
def readSwcInternalBehaviorArTypedPerInstanceMemories(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
558
|
+
for child_element in self.findall(element, "AR-TYPED-PER-INSTANCE-MEMORYS/VARIABLE-DATA-PROTOTYPE"):
|
|
559
|
+
short_name = self.getShortName(child_element)
|
|
560
|
+
prototype = parent.createArTypedPerInstanceMemory(short_name)
|
|
561
|
+
self.readVariableDataPrototype(child_element, prototype)
|
|
562
|
+
|
|
563
|
+
def readSwcInternalBehaviorSharedParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
564
|
+
for child_element in self.findall(element, "SHARED-PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
|
|
565
|
+
short_name = self.getShortName(child_element)
|
|
566
|
+
prototype = behavior.createSharedParameter(short_name)
|
|
567
|
+
self.readParameterDataPrototype(child_element, prototype)
|
|
543
568
|
|
|
544
569
|
def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
545
570
|
for child_element in self.findall(element, "INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
|
|
@@ -551,16 +576,17 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
551
576
|
self.readInternalBehavior(child_element, behavior)
|
|
552
577
|
|
|
553
578
|
# read the extra SwcInternalBehavior
|
|
579
|
+
self.readSwcInternalBehaviorArTypedPerInstanceMemories(child_element, behavior)
|
|
554
580
|
self.readSwcInternalBehaviorRunnables(child_element, behavior)
|
|
555
581
|
self.readSwcInternalBehaviorEvents(child_element, behavior)
|
|
556
582
|
self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
|
|
557
583
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
behavior.handleTerminationAndRestart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
|
|
584
|
+
|
|
585
|
+
behavior.setHandleTerminationAndRestart(self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART"))
|
|
561
586
|
self.readPerInstanceMemories(child_element, behavior)
|
|
562
587
|
self.readPerInstanceParameters(child_element, behavior)
|
|
563
588
|
self.readPortAPIOptions(child_element, behavior)
|
|
589
|
+
self.readSwcInternalBehaviorSharedParameters(child_element, behavior)
|
|
564
590
|
behavior.setSupportsMultipleInstantiation(self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION"))
|
|
565
591
|
|
|
566
592
|
def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
|
|
@@ -799,21 +825,21 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
799
825
|
argument = RunnableEntityArgument()
|
|
800
826
|
argument.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
|
|
801
827
|
return argument
|
|
802
|
-
|
|
828
|
+
|
|
803
829
|
def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
|
|
804
|
-
|
|
830
|
+
parameter = None
|
|
805
831
|
child_element = self.find(element, key)
|
|
806
832
|
if child_element is not None:
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
return
|
|
833
|
+
parameter = AutosarParameterRef()
|
|
834
|
+
parameter.setLocalParameterRef(self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF"))
|
|
835
|
+
return parameter
|
|
810
836
|
|
|
811
837
|
def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
812
838
|
for child_element in self.findall(element, "PARAMETER-ACCESSS/PARAMETER-ACCESS"):
|
|
813
839
|
short_name = self.getShortName(child_element)
|
|
814
840
|
self.logger.debug("readParameterAccesses %s" % short_name)
|
|
815
841
|
parameter_access = parent.createParameterAccess(short_name)
|
|
816
|
-
parameter_access.
|
|
842
|
+
parameter_access.setAccessedParameter(self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER"))
|
|
817
843
|
|
|
818
844
|
def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
819
845
|
self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
|
|
@@ -991,7 +1017,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
991
1017
|
def readVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
|
|
992
1018
|
self.readAutosarDataPrototype(element, prototype)
|
|
993
1019
|
prototype.setInitValue(self.getInitValue(element))
|
|
994
|
-
|
|
1020
|
+
|
|
995
1021
|
def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
996
1022
|
for child_element in self.findall(element, "EXPLICIT-INTER-RUNNABLE-VARIABLES/VARIABLE-DATA-PROTOTYPE"):
|
|
997
1023
|
short_name = self.getShortName(child_element)
|
|
@@ -1016,7 +1042,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1016
1042
|
self.readIdentifiable(element, prototype)
|
|
1017
1043
|
self.readAutosarDataPrototype(element, prototype)
|
|
1018
1044
|
prototype.setInitValue(self.getInitValue(element))
|
|
1019
|
-
|
|
1045
|
+
|
|
1020
1046
|
def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
1021
1047
|
for child_element in self.findall(element, "PER-INSTANCE-PARAMETERS/PARAMETER-DATA-PROTOTYPE"):
|
|
1022
1048
|
short_name = self.getShortName(child_element)
|
|
@@ -1356,16 +1382,17 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1356
1382
|
'''
|
|
1357
1383
|
|
|
1358
1384
|
def readBaseTypeDirectDefinition(self, element: ET.Element, definition: BaseTypeDirectDefinition):
|
|
1359
|
-
definition.
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1385
|
+
definition.setBaseTypeSize(self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")) \
|
|
1386
|
+
.setBaseTypeEncoding(self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")) \
|
|
1387
|
+
.setByteOrder(self.getChildElementOptionalLiteral(element, "BYTE-ORDER")) \
|
|
1388
|
+
.setMemAlignment(self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")) \
|
|
1389
|
+
.setNativeDeclaration(self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION"))
|
|
1363
1390
|
|
|
1364
1391
|
def readSwBaseType(self, element: ET.Element, parent: ARPackage):
|
|
1365
1392
|
short_name = self.getShortName(element)
|
|
1366
1393
|
data_type = parent.createSwBaseType(short_name)
|
|
1367
1394
|
self.readIdentifiable(element, data_type)
|
|
1368
|
-
self.readBaseTypeDirectDefinition(element, data_type.
|
|
1395
|
+
self.readBaseTypeDirectDefinition(element, data_type.getBaseTypeDefinition())
|
|
1369
1396
|
|
|
1370
1397
|
def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
|
|
1371
1398
|
child_element = self.find(element, key)
|
|
@@ -1464,7 +1491,9 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1464
1491
|
def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
|
|
1465
1492
|
com_spec = ModeSwitchReceiverComSpec()
|
|
1466
1493
|
self.readARObjectAttributes(element, com_spec)
|
|
1467
|
-
com_spec.
|
|
1494
|
+
com_spec.setEnhancedModeApi(self.getChildElementOptionalBooleanValue(element, "ENHANCED-MODE-API")) \
|
|
1495
|
+
.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
|
|
1496
|
+
.setSupportsAsynchronousModeSwitch(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH"))
|
|
1468
1497
|
return com_spec
|
|
1469
1498
|
|
|
1470
1499
|
def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
|
|
@@ -2243,7 +2272,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2243
2272
|
layout_v = SwRecordLayoutV()
|
|
2244
2273
|
layout_v.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
2245
2274
|
.setBaseTypeRef(self.getChildElementOptionalRefType(child_element, "BASE-TYPE-REF")) \
|
|
2246
|
-
.setSwRecordLayoutVAxis(self.
|
|
2275
|
+
.setSwRecordLayoutVAxis(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
|
|
2247
2276
|
.setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
|
|
2248
2277
|
.setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
|
|
2249
2278
|
return layout_v
|
|
@@ -2255,7 +2284,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2255
2284
|
group = SwRecordLayoutGroup()
|
|
2256
2285
|
group.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
2257
2286
|
.setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY")) \
|
|
2258
|
-
.setSwRecordLayoutGroupAxis(self.
|
|
2287
|
+
.setSwRecordLayoutGroupAxis(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
|
|
2259
2288
|
.setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
|
|
2260
2289
|
.setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
|
|
2261
2290
|
.setSwRecordLayoutGroupStep(self.getChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP")) \
|
|
@@ -2442,9 +2471,313 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2442
2471
|
self.readIdentifiable(element, channel)
|
|
2443
2472
|
self.readPhysicalChannel(element, channel)
|
|
2444
2473
|
|
|
2474
|
+
def readScheduleTableEntry(self, element: ET.Element, entry: ScheduleTableEntry):
|
|
2475
|
+
entry.setDelay(self.getChildElementOptionalTimeValue(element, "DELAY")) \
|
|
2476
|
+
.setPositionInTable(self.getChildElementOptionalIntegerValue(element, "POSITION-IN-TABLE"))
|
|
2477
|
+
|
|
2478
|
+
def getApplicationEntry(self, element: ET.Element, key: str) -> ApplicationEntry:
|
|
2479
|
+
entry = None
|
|
2480
|
+
if element is not None:
|
|
2481
|
+
entry = ApplicationEntry()
|
|
2482
|
+
self.readScheduleTableEntry(element, entry)
|
|
2483
|
+
entry.setFrameTriggeringRef(self.getChildElementOptionalRefType(element, "FRAME-TRIGGERING-REF"))
|
|
2484
|
+
return entry
|
|
2485
|
+
|
|
2486
|
+
def readLinScheduleTableTableEntries(self, element: ET.Element, table: LinScheduleTable):
|
|
2487
|
+
for child_element in self.findall(element, "TABLE-ENTRYS/*"):
|
|
2488
|
+
tag_name = self.getTagName(child_element)
|
|
2489
|
+
if tag_name == "APPLICATION-ENTRY":
|
|
2490
|
+
table = table.addTableEntry(self.getApplicationEntry(child_element, "APPLICATION-ENTRY"))
|
|
2491
|
+
else:
|
|
2492
|
+
self.notImplemented("Unsupported Schedule Table <%s>" % tag_name)
|
|
2493
|
+
|
|
2494
|
+
def readLinScheduleTable(self, element: ET.Element, table: LinScheduleTable):
|
|
2495
|
+
self.readIdentifiable(element, table)
|
|
2496
|
+
table.setResumePosition(self.getChildElementOptionalLiteral(element, "RESUME-POSITION")) \
|
|
2497
|
+
.setRunMode(self.getChildElementOptionalLiteral(element, "RUN-MODE"))
|
|
2498
|
+
self.readLinScheduleTableTableEntries(element, table)
|
|
2499
|
+
|
|
2500
|
+
def readLinPhysicalChannelScheduleTables(self, element: ET.Element, channel: LinPhysicalChannel):
|
|
2501
|
+
for child_element in self.findall(element, "SCHEDULE-TABLES/*"):
|
|
2502
|
+
tag_name = self.getTagName(child_element)
|
|
2503
|
+
if tag_name == "LIN-SCHEDULE-TABLE":
|
|
2504
|
+
table = channel.createLinScheduleTable(self.getShortName(child_element))
|
|
2505
|
+
self.readLinScheduleTable(child_element, table)
|
|
2506
|
+
else:
|
|
2507
|
+
self.notImplemented("Unsupported Schedule Table <%s>" % tag_name)
|
|
2508
|
+
|
|
2445
2509
|
def readLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
|
|
2446
2510
|
self.readIdentifiable(element, channel)
|
|
2447
2511
|
self.readPhysicalChannel(element, channel)
|
|
2512
|
+
self.readLinPhysicalChannelScheduleTables(element, channel)
|
|
2513
|
+
|
|
2514
|
+
def getIpv6Configuration(self, element: ET.Element) -> Ipv6Configuration:
|
|
2515
|
+
configuration = None
|
|
2516
|
+
if element is not None:
|
|
2517
|
+
configuration = Ipv6Configuration()
|
|
2518
|
+
configuration.setAssignmentPriority(self.getChildElementOptionalPositiveInteger(element, "ASSIGNMENT-PRIORITY")) \
|
|
2519
|
+
.setDefaultRouter(self.getChildElementOptionalLiteral(element, "DEFAULT-ROUTER")) \
|
|
2520
|
+
.setEnableAnycast(self.getChildElementOptionalBooleanValue(element, "ENABLE-ANYCAST")) \
|
|
2521
|
+
.setHopCount(self.getChildElementOptionalPositiveInteger(element, "HOP-COUNT")) \
|
|
2522
|
+
.setIpAddressPrefixLength(self.getChildElementOptionalPositiveInteger(element, "IP-ADDRESS-PREFIX-LENGTH")) \
|
|
2523
|
+
.setIpv6Address(self.getChildElementOptionalLiteral(element, "IPV-6-ADDRESS")) \
|
|
2524
|
+
.setIpv6AddressSource(self.getChildElementOptionalLiteral(element, "IPV-6-ADDRESS-SOURCE"))
|
|
2525
|
+
return configuration
|
|
2526
|
+
|
|
2527
|
+
def readNetworkEndPointNetworkEndPointAddress(self, element: ET.Element, end_point: NetworkEndpoint):
|
|
2528
|
+
for child_element in self.findall(element, "NETWORK-ENDPOINT-ADDRESSES/*"):
|
|
2529
|
+
tag_name = self.getTagName(child_element)
|
|
2530
|
+
if tag_name == "IPV-6-CONFIGURATION":
|
|
2531
|
+
end_point.addNetworkEndpointAddress(self.getIpv6Configuration(child_element))
|
|
2532
|
+
else:
|
|
2533
|
+
self.notImplemented("Unsupported Network EndPoint Address <%s>" % tag_name)
|
|
2534
|
+
|
|
2535
|
+
def getDoIpEntity(self, element: ET.Element, key:str) -> DoIpEntity:
|
|
2536
|
+
entity = None
|
|
2537
|
+
child_element = self.find(element, key)
|
|
2538
|
+
if child_element is not None:
|
|
2539
|
+
entity = DoIpEntity()
|
|
2540
|
+
entity.setDoIpEntityRole(self.getChildElementOptionalLiteral(child_element, "DO-IP-ENTITY-ROLE"))
|
|
2541
|
+
return entity
|
|
2542
|
+
|
|
2543
|
+
def getInfrastructureServices(self, element: ET.Element, key:str) -> InfrastructureServices:
|
|
2544
|
+
services = None
|
|
2545
|
+
child_element = self.find(element, key)
|
|
2546
|
+
if child_element is not None:
|
|
2547
|
+
services = InfrastructureServices()
|
|
2548
|
+
services.setDoIpEntity(self.getDoIpEntity(child_element, "DO-IP-ENTITY"))
|
|
2549
|
+
return services
|
|
2550
|
+
|
|
2551
|
+
def readNetworkEndPoint(self, element: ET.Element, end_point: NetworkEndpoint):
|
|
2552
|
+
self.readIdentifiable(element, end_point)
|
|
2553
|
+
end_point.setInfrastructureServices(self.getInfrastructureServices(element, "INFRASTRUCTURE-SERVICES"))
|
|
2554
|
+
self.readNetworkEndPointNetworkEndPointAddress(element, end_point)
|
|
2555
|
+
end_point.setPriority(self.getChildElementOptionalPositiveInteger(element, "PRIORITY"))
|
|
2556
|
+
|
|
2557
|
+
def readEthernetPhysicalChannelNetworkEndPoints(self, element: ET.Element, channel: EthernetPhysicalChannel):
|
|
2558
|
+
for child_element in self.findall(element, "NETWORK-ENDPOINTS/NETWORK-ENDPOINT"):
|
|
2559
|
+
end_point = channel.createNetworkEndPoint(self.getShortName(child_element))
|
|
2560
|
+
self.readNetworkEndPoint(child_element, end_point)
|
|
2561
|
+
|
|
2562
|
+
def getSocketConnectionIpduIdentifier(self, element: ET.Element) -> SocketConnectionIpduIdentifier:
|
|
2563
|
+
identifier = None
|
|
2564
|
+
if element is not None:
|
|
2565
|
+
identifier = SocketConnectionIpduIdentifier()
|
|
2566
|
+
identifier.setHeaderId(self.getChildElementOptionalPositiveInteger(element, "HEADER-ID")) \
|
|
2567
|
+
.setPduCollectionSemantics(self.getChildElementOptionalLiteral(element, "PDU-COLLECTION-SEMANTICS")) \
|
|
2568
|
+
.setPduCollectionTrigger(self.getChildElementOptionalLiteral(element, "PDU-COLLECTION-TRIGGER")) \
|
|
2569
|
+
.setPduRef(self.getChildElementOptionalRefType(element, "PDU-REF")) \
|
|
2570
|
+
.setPduTriggeringRef(self.getChildElementOptionalRefType(element, "PDU-TRIGGERING-REF"))
|
|
2571
|
+
return identifier
|
|
2572
|
+
|
|
2573
|
+
def getSocketConnectionPdus(self, element: ET.Element) -> List[SocketConnectionIpduIdentifier]:
|
|
2574
|
+
pdus = []
|
|
2575
|
+
for child_element in self.findall(element, "PDUS/*"):
|
|
2576
|
+
tag_name = self.getTagName(child_element)
|
|
2577
|
+
if tag_name == "SOCKET-CONNECTION-IPDU-IDENTIFIER":
|
|
2578
|
+
pdus.append(self.getSocketConnectionIpduIdentifier(child_element))
|
|
2579
|
+
else:
|
|
2580
|
+
self.notImplemented("Unsupported Pdu <%s>" % tag_name)
|
|
2581
|
+
return pdus
|
|
2582
|
+
|
|
2583
|
+
def getSocketConnection(self, element: ET.Element) -> SocketConnection:
|
|
2584
|
+
connection = None
|
|
2585
|
+
if element is not None:
|
|
2586
|
+
connection = SocketConnection()
|
|
2587
|
+
connection.setClientIpAddrFromConnectionRequest(self.getChildElementOptionalBooleanValue(element, "CLIENT-IP-ADDR-FROM-CONNECTION-REQUEST")) \
|
|
2588
|
+
.setClientPortFromConnectionRequest(self.getChildElementOptionalBooleanValue(element, "CLIENT-PORT-FROM-CONNECTION-REQUEST")) \
|
|
2589
|
+
.setClientPortRef(self.getChildElementOptionalRefType(element, "CLIENT-PORT-REF"))
|
|
2590
|
+
for pdu in self.getSocketConnectionPdus(element):
|
|
2591
|
+
connection.addPdu(pdu)
|
|
2592
|
+
connection.setPduCollectionMaxBufferSize(self.getChildElementOptionalPositiveInteger(element, "PDU-COLLECTION-MAX-BUFFER-SIZE")) \
|
|
2593
|
+
.setPduCollectionTimeout(self.getChildElementOptionalTimeValue(element, "PDU-COLLECTION-TIMEOUT")) \
|
|
2594
|
+
.setRuntimeIpAddressConfiguration(self.getChildElementOptionalLiteral(element, "RUNTIME-IP-ADDRESS-CONFIGURATION")) \
|
|
2595
|
+
.setRuntimePortConfiguration(self.getChildElementOptionalLiteral(element, "RUNTIME-PORT-CONFIGURATION")) \
|
|
2596
|
+
.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
|
|
2597
|
+
return connection
|
|
2598
|
+
|
|
2599
|
+
def readSocketConnectionBundleConnections(self, element: ET.Element, bundle: SocketConnectionBundle):
|
|
2600
|
+
for child_element in self.findall(element, "BUNDLED-CONNECTIONS/*"):
|
|
2601
|
+
tag_name = self.getTagName(child_element)
|
|
2602
|
+
if tag_name == "SOCKET-CONNECTION":
|
|
2603
|
+
bundle.addBundledConnection(self.getSocketConnection(child_element))
|
|
2604
|
+
else:
|
|
2605
|
+
self.notImplemented("Unsupported Bundled Connection <%s>" % tag_name)
|
|
2606
|
+
|
|
2607
|
+
def readSocketConnectionBundle(self, element: ET.Element, bundle: SocketConnectionBundle):
|
|
2608
|
+
self.readSocketConnectionBundleConnections(element, bundle)
|
|
2609
|
+
bundle.setServerPortRef(self.getChildElementOptionalRefType(element, "SERVER-PORT-REF"))
|
|
2610
|
+
|
|
2611
|
+
def readSoAdConfigConnectionBundles(self, element: ET.Element, config: SoAdConfig):
|
|
2612
|
+
for child_element in self.findall(element, "CONNECTION-BUNDLES/*"):
|
|
2613
|
+
tag_name = self.getTagName(child_element)
|
|
2614
|
+
if tag_name == "SOCKET-CONNECTION-BUNDLE":
|
|
2615
|
+
bundle = config.createSocketConnectionBundle(self.getShortName(child_element))
|
|
2616
|
+
self.readSocketConnectionBundle(child_element, bundle)
|
|
2617
|
+
else:
|
|
2618
|
+
self.notImplemented("Unsupported Connection Bundle <%s>" % tag_name)
|
|
2619
|
+
|
|
2620
|
+
def getTpPort(self, element: ET.SubElement, key: str) -> TpPort:
|
|
2621
|
+
port = None
|
|
2622
|
+
child_element = self.find(element, key)
|
|
2623
|
+
if child_element is not None:
|
|
2624
|
+
port = TpPort()
|
|
2625
|
+
port.setDynamicallyAssigned(self.getChildElementOptionalBooleanValue(child_element, "DYNAMICALLY-ASSIGNED")) \
|
|
2626
|
+
.setPortNumber(self.getChildElementOptionalPositiveInteger(child_element, "PORT-NUMBER"))
|
|
2627
|
+
return port
|
|
2628
|
+
|
|
2629
|
+
def readUdpTp(self, element: ET.Element, tp: UdpTp):
|
|
2630
|
+
tp.setUdpTpPort(self.getTpPort(element, "UDP-TP-PORT"))
|
|
2631
|
+
|
|
2632
|
+
def readTcpTp(self, element: ET.Element, tp: TcpTp):
|
|
2633
|
+
tp.setKeepAliveInterval(self.getChildElementOptionalTimeValue(element, "KEEP-ALIVE-INTERVAL")) \
|
|
2634
|
+
.setKeepAliveProbesMax(self.getChildElementOptionalPositiveInteger(element, "KEEP-ALIVE-PROBES-MAX")) \
|
|
2635
|
+
.setKeepAliveTime(self.getChildElementOptionalTimeValue(element, "KEEP-ALIVE-TIME")) \
|
|
2636
|
+
.setKeepAlives(self.getChildElementOptionalBooleanValue(element, "KEEP-ALIVES")) \
|
|
2637
|
+
.setNaglesAlgorithm(self.getChildElementOptionalLiteral(element, "NAGLES-ALGORITHM")) \
|
|
2638
|
+
.setTcpTpPort(self.getTpPort(element, "TCP-TP-PORT"))
|
|
2639
|
+
|
|
2640
|
+
|
|
2641
|
+
def readGenericTp(self, element: ET.Element, tp: GenericTp):
|
|
2642
|
+
tp.setTpAddress(self.getChildElementOptionalLiteral(element, "TP-ADDRESS")) \
|
|
2643
|
+
.setTpTechnology(self.getChildElementOptionalLiteral(element, "TP-TECHNOLOGY"))
|
|
2644
|
+
|
|
2645
|
+
def getTransportProtocolConfiguration(self, element: ET.Element, key: str) -> TransportProtocolConfiguration:
|
|
2646
|
+
configuration = None
|
|
2647
|
+
child_element = self.find(element, "%s/*" % key)
|
|
2648
|
+
if child_element is not None:
|
|
2649
|
+
tag_name = self.getTagName(child_element)
|
|
2650
|
+
if tag_name == "UDP-TP":
|
|
2651
|
+
configuration = UdpTp()
|
|
2652
|
+
self.readUdpTp(child_element, configuration)
|
|
2653
|
+
elif tag_name == "TCP-TP":
|
|
2654
|
+
configuration = TcpTp()
|
|
2655
|
+
self.readTcpTp(child_element, configuration)
|
|
2656
|
+
elif tag_name == "GENERIC-TP":
|
|
2657
|
+
configuration = GenericTp()
|
|
2658
|
+
self.readGenericTp(child_element, configuration)
|
|
2659
|
+
else:
|
|
2660
|
+
self.notImplemented("Unsupported TransportProtocolConfiguration <%s>" % tag_name)
|
|
2661
|
+
return configuration
|
|
2662
|
+
|
|
2663
|
+
def readConsumedEventGroupRoutingGroupRefs(self, element: ET.Element, group: ConsumedEventGroup):
|
|
2664
|
+
for ref in self.getChildElementRefTypeList(element, "ROUTING-GROUP-REFS/ROUTING-GROUP-REF"):
|
|
2665
|
+
group.addRoutingGroupRef(ref)
|
|
2666
|
+
|
|
2667
|
+
def getRequestResponseDelay(self, element: ET.Element, key: str) -> RequestResponseDelay:
|
|
2668
|
+
delay = None
|
|
2669
|
+
child_element = self.find(element, key)
|
|
2670
|
+
if child_element is not None:
|
|
2671
|
+
delay = RequestResponseDelay()
|
|
2672
|
+
delay.setMaxValue(self.getChildElementOptionalTimeValue(child_element, "MAX-VALUE")) \
|
|
2673
|
+
.setMinValue(self.getChildElementOptionalTimeValue(child_element, "MIN-VALUE"))
|
|
2674
|
+
return delay
|
|
2675
|
+
|
|
2676
|
+
def getInitialSdDelayConfig(self, element: ET.Element, key: str) -> InitialSdDelayConfig:
|
|
2677
|
+
config = None
|
|
2678
|
+
child_element = self.find(element, key)
|
|
2679
|
+
if child_element is not None:
|
|
2680
|
+
config = InitialSdDelayConfig()
|
|
2681
|
+
config.setInitialDelayMaxValue(self.getChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MAX-VALUE")) \
|
|
2682
|
+
.setInitialDelayMinValue(self.getChildElementOptionalTimeValue(child_element, "INITIAL-DELAY-MIN-VALUE")) \
|
|
2683
|
+
.setInitialRepetitionsBaseDelay(self.getChildElementOptionalTimeValue(child_element, "INITIAL-REPETITIONS-BASE-DELAY")) \
|
|
2684
|
+
.setInitialRepetitionsMax(self.getChildElementOptionalPositiveInteger(child_element, "INITIAL-REPETITIONS-MAX"))
|
|
2685
|
+
return config
|
|
2686
|
+
|
|
2687
|
+
def getSdClientConfig(self, element: ET.Element, key: str) -> SdClientConfig:
|
|
2688
|
+
config = None
|
|
2689
|
+
child_element = self.find(element, key)
|
|
2690
|
+
if child_element is not None:
|
|
2691
|
+
config = SdClientConfig()
|
|
2692
|
+
config.setClientServiceMajorVersion(self.getChildElementOptionalPositiveInteger(child_element, "CLIENT-SERVICE-MAJOR-VERSION")) \
|
|
2693
|
+
.setClientServiceMinorVersion(self.getChildElementOptionalPositiveInteger(child_element, "CLIENT-SERVICE-MINOR-VERSION")) \
|
|
2694
|
+
.setInitialFindBehavior(self.getInitialSdDelayConfig(child_element, "INITIAL-FIND-BEHAVIOR")) \
|
|
2695
|
+
.setRequestResponseDelay(self.getRequestResponseDelay(child_element, "REQUEST-RESPONSE-DELAY")) \
|
|
2696
|
+
.setTtl(self.getChildElementOptionalPositiveInteger(child_element, "TTL"))
|
|
2697
|
+
return config
|
|
2698
|
+
|
|
2699
|
+
def readConsumedEventGroup(self, element: ET.Element, group: ConsumedEventGroup):
|
|
2700
|
+
self.readIdentifiable(element, group)
|
|
2701
|
+
group.setApplicationEndpointRef(self.getChildElementOptionalRefType(element, "APPLICATION-ENDPOINT-REF")) \
|
|
2702
|
+
.setEventGroupIdentifier(self.getChildElementOptionalPositiveInteger(element, "EVENT-GROUP-IDENTIFIER"))
|
|
2703
|
+
self.readConsumedEventGroupRoutingGroupRefs(element, group)
|
|
2704
|
+
group.setSdClientConfig(self.getSdClientConfig(element, "SD-CLIENT-CONFIG"))
|
|
2705
|
+
|
|
2706
|
+
def readConsumedServiceInstanceConsumedEventGroups(self, element: ET.Element, instance: ConsumedServiceInstance):
|
|
2707
|
+
for child_element in self.findall(element, "CONSUMED-EVENT-GROUPS/*"):
|
|
2708
|
+
tag_name = self.getTagName(child_element)
|
|
2709
|
+
if tag_name == "CONSUMED-EVENT-GROUP":
|
|
2710
|
+
group = instance.createConsumedEventGroup(self.getShortName(child_element))
|
|
2711
|
+
self.readConsumedEventGroup(child_element, group)
|
|
2712
|
+
else:
|
|
2713
|
+
self.notImplemented("Unsupported ConsumedEventGroups <%s>" % tag_name)
|
|
2714
|
+
|
|
2715
|
+
def readConsumedServiceInstance(self, element: ET.Element, instance: ConsumedServiceInstance):
|
|
2716
|
+
self.readIdentifiable(element, instance)
|
|
2717
|
+
self.readConsumedServiceInstanceConsumedEventGroups(element, instance)
|
|
2718
|
+
instance.setProvidedServiceInstanceRef(self.getChildElementOptionalRefType(element, "PROVIDED-SERVICE-INSTANCE-REF"))
|
|
2719
|
+
instance.setSdClientConfig(self.getSdClientConfig(element, "SD-CLIENT-CONFIG"))
|
|
2720
|
+
|
|
2721
|
+
def readSocketAddressApplicationEndpointConsumedServiceInstances(self, element: ET.Element, end_point: ApplicationEndpoint):
|
|
2722
|
+
for child_element in self.findall(element, "CONSUMED-SERVICE-INSTANCES/*"):
|
|
2723
|
+
tag_name = self.getTagName(child_element)
|
|
2724
|
+
if tag_name == "CONSUMED-SERVICE-INSTANCE":
|
|
2725
|
+
instance = end_point.createConsumedServiceInstance(self.getShortName(child_element))
|
|
2726
|
+
self.readConsumedServiceInstance(child_element, instance)
|
|
2727
|
+
else:
|
|
2728
|
+
self.notImplemented("Unsupported ConsumedServiceInstances <%s>" % tag_name)
|
|
2729
|
+
|
|
2730
|
+
def readSocketAddressApplicationEndpoint(self, element: ET.Element, address: SocketAddress):
|
|
2731
|
+
child_element = self.find(element, "APPLICATION-ENDPOINT")
|
|
2732
|
+
if child_element is not None:
|
|
2733
|
+
end_point = address.createApplicationEndpoint(self.getShortName(child_element))
|
|
2734
|
+
self.readSocketAddressApplicationEndpointConsumedServiceInstances(child_element, end_point)
|
|
2735
|
+
end_point.setNetworkEndpointRef(self.getChildElementOptionalRefType(child_element, "NETWORK-ENDPOINT-REF")) \
|
|
2736
|
+
.setPriority(self.getChildElementOptionalPositiveInteger(child_element, "PRIORITY")) \
|
|
2737
|
+
.setTpConfiguration(self.getTransportProtocolConfiguration(child_element, "TP-CONFIGURATION"))
|
|
2738
|
+
|
|
2739
|
+
def readSocketAddressMulticastConnectorRefs(self, element: ET.Element, address: SocketAddress):
|
|
2740
|
+
for ref in self.getChildElementRefTypeList(element, "MULTICAST-CONNECTOR-REFS/MULTICAST-CONNECTOR-REF"):
|
|
2741
|
+
address.addMulticastConnectorRef(ref)
|
|
2742
|
+
|
|
2743
|
+
def readSocketAddress(self, element: ET.Element, address: SocketAddress):
|
|
2744
|
+
self.readIdentifiable(element, address)
|
|
2745
|
+
self.readSocketAddressApplicationEndpoint(element, address)
|
|
2746
|
+
self.readSocketAddressMulticastConnectorRefs(element, address)
|
|
2747
|
+
address.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF")) \
|
|
2748
|
+
.setPortAddress(self.getChildElementOptionalPositiveInteger(element, "PORT-ADDRESS"))
|
|
2749
|
+
|
|
2750
|
+
|
|
2751
|
+
def readSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
|
|
2752
|
+
for child_element in self.findall(element, "SOCKET-ADDRESSS/*"):
|
|
2753
|
+
tag_name = self.getTagName(child_element)
|
|
2754
|
+
if tag_name == "SOCKET-ADDRESS":
|
|
2755
|
+
address = config.createSocketAddress(self.getShortName(child_element))
|
|
2756
|
+
self.readSocketAddress(child_element, address)
|
|
2757
|
+
else:
|
|
2758
|
+
self.notImplemented("Unsupported Socket Address <%s>" % tag_name)
|
|
2759
|
+
|
|
2760
|
+
def getSoAdConfig(self, element: ET.Element, key: str) -> SoAdConfig:
|
|
2761
|
+
child_element = self.find(element, key)
|
|
2762
|
+
config = None
|
|
2763
|
+
if child_element is not None:
|
|
2764
|
+
config = SoAdConfig()
|
|
2765
|
+
self.readSoAdConfigConnectionBundles(child_element, config)
|
|
2766
|
+
self.readSoAdConfigSocketAddresses(child_element, config)
|
|
2767
|
+
return config
|
|
2768
|
+
|
|
2769
|
+
def readEthernetPhysicalChannelVlan(self, element: ET.Element, channel: EthernetPhysicalChannel):
|
|
2770
|
+
child_element = self.find(element, "VLAN")
|
|
2771
|
+
if child_element is not None:
|
|
2772
|
+
vlan = channel.createVlanConfig(self.getShortName(child_element))
|
|
2773
|
+
vlan.setVlanIdentifier(self.getChildElementOptionalPositiveInteger(child_element, "VLAN-IDENTIFIER"))
|
|
2774
|
+
|
|
2775
|
+
def readEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
|
|
2776
|
+
self.readIdentifiable(element, channel)
|
|
2777
|
+
self.readPhysicalChannel(element, channel)
|
|
2778
|
+
self.readEthernetPhysicalChannelNetworkEndPoints(element, channel)
|
|
2779
|
+
channel.setSoAdConfig(self.getSoAdConfig(element, "SO-AD-CONFIG"))
|
|
2780
|
+
self.readEthernetPhysicalChannelVlan(element, channel)
|
|
2448
2781
|
|
|
2449
2782
|
def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
|
|
2450
2783
|
for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
|
|
@@ -2455,6 +2788,9 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2455
2788
|
elif tag_name == "LIN-PHYSICAL-CHANNEL":
|
|
2456
2789
|
channel = cluster.createLinPhysicalChannel(self.getShortName(child_element))
|
|
2457
2790
|
self.readLinPhysicalChannel(child_element, channel)
|
|
2791
|
+
elif tag_name == "ETHERNET-PHYSICAL-CHANNEL":
|
|
2792
|
+
channel = cluster.createEthernetPhysicalChannel(self.getShortName(child_element))
|
|
2793
|
+
self.readEthernetPhysicalChannel(child_element, channel)
|
|
2458
2794
|
else:
|
|
2459
2795
|
self.notImplemented("Unsupported Physical Channel <%s>" % tag_name)
|
|
2460
2796
|
|
|
@@ -2464,9 +2800,20 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2464
2800
|
self.readCommunicationClusterPhysicalChannels(element, cluster)
|
|
2465
2801
|
cluster.setProtocolName(self.getChildElementOptionalLiteral(element, "PROTOCOL-NAME")) \
|
|
2466
2802
|
.setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
|
|
2467
|
-
|
|
2803
|
+
|
|
2804
|
+
def getCanClusterBusOffRecovery(self, element: ET.Element, key: str) -> CanClusterBusOffRecovery:
|
|
2805
|
+
recovery = None
|
|
2806
|
+
child_element = self.find(element, key)
|
|
2807
|
+
if child_element is not None:
|
|
2808
|
+
recovery = CanClusterBusOffRecovery()
|
|
2809
|
+
recovery.setBorCounterL1ToL2(self.getChildElementOptionalPositiveInteger(child_element, "BOR-COUNTER-L-1-TO-L-2")) \
|
|
2810
|
+
.setBorTimeL1(self.getChildElementOptionalTimeValue(child_element, "BOR-TIME-L-1")) \
|
|
2811
|
+
.setBorTimeL2(self.getChildElementOptionalTimeValue(child_element, "BOR-TIME-L-2"))
|
|
2812
|
+
return recovery
|
|
2813
|
+
|
|
2468
2814
|
def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
|
|
2469
|
-
cluster.
|
|
2815
|
+
cluster.setBusOffRecovery(self.getCanClusterBusOffRecovery(element, "BUS-OFF-RECOVERY")) \
|
|
2816
|
+
.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE")) \
|
|
2470
2817
|
.setSpeed(self.getChildElementOptionalNumericalValue(element, "SPEED"))
|
|
2471
2818
|
|
|
2472
2819
|
def readLinCluster(self, element: ET.Element, parent: ARPackage):
|
|
@@ -2488,6 +2835,80 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2488
2835
|
self.readCommunicationCluster(child_element, cluster)
|
|
2489
2836
|
self.readAbstractCanCluster(child_element, cluster)
|
|
2490
2837
|
|
|
2838
|
+
def readEthernetCluster(self, element: ET.Element, parent: ARPackage):
|
|
2839
|
+
short_name = self.getShortName(element)
|
|
2840
|
+
self.logger.debug("Read EthernetCluster %s" % short_name)
|
|
2841
|
+
cluster = parent.createEthernetCluster(short_name)
|
|
2842
|
+
self.readIdentifiable(element, cluster)
|
|
2843
|
+
child_element = self.find(element, "ETHERNET-CLUSTER-VARIANTS/ETHERNET-CLUSTER-CONDITIONAL")
|
|
2844
|
+
if child_element is not None:
|
|
2845
|
+
self.readCommunicationCluster(child_element, cluster)
|
|
2846
|
+
|
|
2847
|
+
def readDiagnosticConnectionFunctionalRequestRefs(self, element: ET.Element, connection: DiagnosticConnection):
|
|
2848
|
+
for ref in self.getChildElementRefTypeList(element, "FUNCTIONAL-REQUEST-REFS/FUNCTIONAL-REQUEST-REF"):
|
|
2849
|
+
connection.addFunctionalRequestRef(ref)
|
|
2850
|
+
|
|
2851
|
+
def readDiagnosticConnection(self, element: ET.Element, connection: DiagnosticConnection):
|
|
2852
|
+
self.logger.debug("Read DiagnosticConnection %s" % connection.getShortName())
|
|
2853
|
+
self.readIdentifiable(element, connection)
|
|
2854
|
+
self.readDiagnosticConnectionFunctionalRequestRefs(element, connection)
|
|
2855
|
+
connection.setPhysicalRequestRef(self.getChildElementOptionalRefType(element, "PHYSICAL-REQUEST-REF")) \
|
|
2856
|
+
.setResponseOnEventRef(self.getChildElementOptionalRefType(element, "RESPONSE-REF"))
|
|
2857
|
+
|
|
2858
|
+
def readDiagnosticServiceTable(self, element: ET.Element, parent: ARPackage):
|
|
2859
|
+
short_name = self.getShortName(element)
|
|
2860
|
+
self.logger.debug("Read DiagnosticServiceTable %s" % short_name)
|
|
2861
|
+
table = parent.createDiagnosticServiceTable(short_name)
|
|
2862
|
+
self.readIdentifiable(element, table)
|
|
2863
|
+
|
|
2864
|
+
def readMultiplexedIPdu(self, element: ET.Element, parent: ARPackage):
|
|
2865
|
+
short_name = self.getShortName(element)
|
|
2866
|
+
self.logger.debug("Read MultiplexedIPdu %s" % short_name)
|
|
2867
|
+
i_pdu = parent.createMultiplexedIPdu(short_name)
|
|
2868
|
+
self.readIdentifiable(element, i_pdu)
|
|
2869
|
+
|
|
2870
|
+
def readUserDefinedIPdu(self, element: ET.Element, parent: ARPackage):
|
|
2871
|
+
short_name = self.getShortName(element)
|
|
2872
|
+
self.logger.debug("Read UserDefinedIPdu %s" % short_name)
|
|
2873
|
+
i_pdu = parent.createUserDefinedIPdu(short_name)
|
|
2874
|
+
self.readIdentifiable(element, i_pdu)
|
|
2875
|
+
|
|
2876
|
+
def readUserDefinedPdu(self, element: ET.Element, parent: ARPackage):
|
|
2877
|
+
short_name = self.getShortName(element)
|
|
2878
|
+
self.logger.debug("Read UserDefinedPdu %s" % short_name)
|
|
2879
|
+
pdu = parent.createUserDefinedPdu(short_name)
|
|
2880
|
+
self.readIdentifiable(element, pdu)
|
|
2881
|
+
|
|
2882
|
+
def readGeneralPurposePdu(self, element: ET.Element, parent: ARPackage):
|
|
2883
|
+
short_name = self.getShortName(element)
|
|
2884
|
+
self.logger.debug("Read GeneralPurposePdu %s" % short_name)
|
|
2885
|
+
pdu = parent.createGeneralPurposePdu(short_name)
|
|
2886
|
+
self.readIdentifiable(element, pdu)
|
|
2887
|
+
|
|
2888
|
+
def readGeneralPurposeIPdu(self, element: ET.Element, parent: ARPackage):
|
|
2889
|
+
short_name = self.getShortName(element)
|
|
2890
|
+
self.logger.debug("Read GeneralPurposeIPdu %s" % short_name)
|
|
2891
|
+
i_pdu = parent.createGeneralPurposeIPdu(short_name)
|
|
2892
|
+
self.readIdentifiable(element, i_pdu)
|
|
2893
|
+
|
|
2894
|
+
def readSecureCommunicationPropsSet(self, element: ET.Element, parent: ARPackage):
|
|
2895
|
+
short_name = self.getShortName(element)
|
|
2896
|
+
self.logger.debug("Read SecureCommunicationPropsSet %s" % short_name)
|
|
2897
|
+
prop_set = parent.createSecureCommunicationPropsSet(short_name)
|
|
2898
|
+
self.readIdentifiable(element, prop_set)
|
|
2899
|
+
|
|
2900
|
+
def readSoAdRoutingGroup(self, element: ET.Element, parent: ARPackage):
|
|
2901
|
+
short_name = self.getShortName(element)
|
|
2902
|
+
self.logger.debug("Read SoAdRoutingGroup %s" % short_name)
|
|
2903
|
+
group = parent.createSoAdRoutingGroup(short_name)
|
|
2904
|
+
self.readIdentifiable(element, group)
|
|
2905
|
+
|
|
2906
|
+
def readDoIpTpConfig(self, element: ET.Element, parent: ARPackage):
|
|
2907
|
+
short_name = self.getShortName(element)
|
|
2908
|
+
self.logger.debug("Read DoIpTpConfig %s" % short_name)
|
|
2909
|
+
group = parent.createDoIpTpConfig(short_name)
|
|
2910
|
+
self.readIdentifiable(element, group)
|
|
2911
|
+
|
|
2491
2912
|
def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
|
|
2492
2913
|
for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
|
|
2493
2914
|
short_name = self.getShortName(child_element)
|
|
@@ -2542,6 +2963,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2542
2963
|
self.readIPdu(element, pdu)
|
|
2543
2964
|
|
|
2544
2965
|
def readNmNode(self, element: ET.Element, nm_node: NmNode):
|
|
2966
|
+
self.readIdentifiable(element, nm_node)
|
|
2967
|
+
|
|
2545
2968
|
nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
|
|
2546
2969
|
.setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
|
|
2547
2970
|
.setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
|
|
@@ -2550,23 +2973,30 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2550
2973
|
for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
|
|
2551
2974
|
nm_node.addTxNmPduRefs(ref)
|
|
2552
2975
|
|
|
2553
|
-
def readCanNmNode(self, element: ET.Element,
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
nm_node = parent.createCanNmNode(short_name) # type: CanNmNode
|
|
2557
|
-
self.readIdentifiable(element, nm_node)
|
|
2976
|
+
def readCanNmNode(self, element: ET.Element, nm_node: CanNmNode):
|
|
2977
|
+
self.logger.debug("Read CanNmNode %s" % nm_node.getShortName())
|
|
2978
|
+
|
|
2558
2979
|
self.readNmNode(element, nm_node)
|
|
2559
2980
|
|
|
2560
2981
|
nm_node.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
|
|
2561
2982
|
.setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
|
|
2562
2983
|
.setNmRangeConfig(self.getChildElementRxIdentifierRange(element, "NM-RANGE-CONFIG"))
|
|
2984
|
+
|
|
2985
|
+
def readUdpNmNode(self, element: ET.Element, nm_node: UdpNmNode):
|
|
2986
|
+
self.logger.debug("Read UdpNmNode %s" % nm_node.getShortName())
|
|
2987
|
+
|
|
2988
|
+
self.readNmNode(element, nm_node)
|
|
2563
2989
|
|
|
2564
2990
|
def readNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
|
|
2565
2991
|
self.logger.debug("readNmConfigNmNodes %s" % parent.getShortName())
|
|
2566
2992
|
for child_element in self.findall(element, "NM-NODES/*"):
|
|
2567
2993
|
tag_name = self.getTagName(child_element)
|
|
2568
2994
|
if tag_name == "CAN-NM-NODE":
|
|
2569
|
-
self.
|
|
2995
|
+
nm_node = parent.createCanNmNode(self.getShortName(child_element))
|
|
2996
|
+
self.readCanNmNode(child_element, nm_node)
|
|
2997
|
+
elif tag_name == "UDP-NM-NODE":
|
|
2998
|
+
nm_node = parent.readUdpNmNode(self.getShortName(child_element))
|
|
2999
|
+
self.readUdpNmNode(child_element, nm_node)
|
|
2570
3000
|
else:
|
|
2571
3001
|
self._raiseError("Unsupported Nm Node <%s>" % tag_name)
|
|
2572
3002
|
|
|
@@ -2580,6 +3010,10 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2580
3010
|
.setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
|
|
2581
3011
|
|
|
2582
3012
|
return coupling
|
|
3013
|
+
|
|
3014
|
+
def getUdpNmClusterCoupling(self, element: ET.Element) -> UdpNmClusterCoupling:
|
|
3015
|
+
coupling = UdpNmClusterCoupling()
|
|
3016
|
+
return coupling
|
|
2583
3017
|
|
|
2584
3018
|
def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
|
|
2585
3019
|
self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
|
|
@@ -2587,10 +3021,13 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2587
3021
|
tag_name = self.getTagName(child_element)
|
|
2588
3022
|
if tag_name == "CAN-NM-CLUSTER-COUPLING":
|
|
2589
3023
|
nm_config.addNmClusterCouplings(self.getCanNmClusterCoupling(child_element))
|
|
3024
|
+
elif tag_name == "UDP-NM-CLUSTER-COUPLING":
|
|
3025
|
+
nm_config.addNmClusterCouplings(self.getUdpNmClusterCoupling(child_element))
|
|
2590
3026
|
else:
|
|
2591
|
-
self.
|
|
3027
|
+
self.notImplemented("Unsupported Nm Node <%s>" % tag_name)
|
|
2592
3028
|
|
|
2593
3029
|
def readNmCluster(self, element: ET.Element, cluster: NmCluster):
|
|
3030
|
+
self.readIdentifiable(element, cluster)
|
|
2594
3031
|
cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
|
|
2595
3032
|
.setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
|
|
2596
3033
|
.setNmChannelSleepMaster(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER"))
|
|
@@ -2601,7 +3038,6 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2601
3038
|
short_name = self.getShortName(element)
|
|
2602
3039
|
self.logger.debug("readCanNmCluster %s" % short_name)
|
|
2603
3040
|
cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
|
|
2604
|
-
self.readIdentifiable(element, cluster)
|
|
2605
3041
|
self.readNmCluster(element, cluster)
|
|
2606
3042
|
|
|
2607
3043
|
cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
|
|
@@ -2619,11 +3055,19 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2619
3055
|
.setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
|
|
2620
3056
|
.setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
|
|
2621
3057
|
|
|
3058
|
+
def readUdpNmCluster(self, element: ET.Element, parent: NmConfig):
|
|
3059
|
+
short_name = self.getShortName(element)
|
|
3060
|
+
self.logger.debug("readCanNmCluster %s" % short_name)
|
|
3061
|
+
cluster = parent.createUdpNmCluster(short_name) # type: CanNmCluster
|
|
3062
|
+
self.readNmCluster(element, cluster)
|
|
3063
|
+
|
|
2622
3064
|
def readNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
|
|
2623
3065
|
for child_element in self.findall(element, "NM-CLUSTERS/*"):
|
|
2624
3066
|
tag_name = self.getTagName(child_element)
|
|
2625
3067
|
if tag_name == "CAN-NM-CLUSTER":
|
|
2626
3068
|
self.readCanNmCluster(child_element, parent)
|
|
3069
|
+
elif tag_name == "UDP-NM-CLUSTER":
|
|
3070
|
+
self.readUdpNmCluster(child_element, parent)
|
|
2627
3071
|
else:
|
|
2628
3072
|
self._raiseError("Unsupported Nm Cluster <%s>" % tag_name)
|
|
2629
3073
|
|
|
@@ -2648,7 +3092,15 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2648
3092
|
self.readFrame(element, frame)
|
|
2649
3093
|
|
|
2650
3094
|
def readCanCommunicationController(self, element: ET.Element, controller: CanCommunicationController):
|
|
2651
|
-
self.logger.debug("
|
|
3095
|
+
self.logger.debug("Read CanCommunicationController %s" % controller.getShortName())
|
|
3096
|
+
self.readIdentifiable(element, controller)
|
|
3097
|
+
|
|
3098
|
+
def readEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
|
|
3099
|
+
self.logger.debug("Read EthernetCommunicationController %s" % controller.getShortName())
|
|
3100
|
+
self.readIdentifiable(element, controller)
|
|
3101
|
+
|
|
3102
|
+
def readLinMaster(self, element: ET.Element, controller: LinMaster):
|
|
3103
|
+
self.logger.debug("Read LinMaster %s" % controller.getShortName())
|
|
2652
3104
|
self.readIdentifiable(element, controller)
|
|
2653
3105
|
|
|
2654
3106
|
def readEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
|
|
@@ -2658,6 +3110,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2658
3110
|
if tag_name == "CAN-COMMUNICATION-CONTROLLER":
|
|
2659
3111
|
controller = instance.createCanCommunicationController(self.getShortName(child_element))
|
|
2660
3112
|
self.readCanCommunicationController(child_element, controller)
|
|
3113
|
+
elif tag_name == "ETHERNET-COMMUNICATION-CONTROLLER":
|
|
3114
|
+
controller = instance.createEthernetCommunicationController(self.getShortName(child_element))
|
|
3115
|
+
self.readEthernetCommunicationController(child_element, controller)
|
|
3116
|
+
elif tag_name == "LIN-MASTER":
|
|
3117
|
+
controller = instance.createLinMaster(self.getShortName(child_element))
|
|
3118
|
+
self.readLinMaster(child_element, controller)
|
|
2661
3119
|
else:
|
|
2662
3120
|
self._raiseError("Unsupported Communication Controller <%s>" % tag_name)
|
|
2663
3121
|
|
|
@@ -2698,6 +3156,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2698
3156
|
def readCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
|
|
2699
3157
|
self.readCommunicationConnector(element, connector)
|
|
2700
3158
|
|
|
3159
|
+
def readEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
|
|
3160
|
+
self.readCommunicationConnector(element, connector)
|
|
3161
|
+
|
|
3162
|
+
def readLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
|
|
3163
|
+
self.readCommunicationConnector(element, connector)
|
|
3164
|
+
|
|
2701
3165
|
def readEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
|
|
2702
3166
|
self.logger.debug("readEcuInstanceCommControllers %s" % instance.getShortName())
|
|
2703
3167
|
for child_element in self.findall(element, "CONNECTORS/*"):
|
|
@@ -2705,8 +3169,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2705
3169
|
if tag_name == "CAN-COMMUNICATION-CONNECTOR":
|
|
2706
3170
|
connector = instance.createCanCommunicationConnector(self.getShortName(child_element))
|
|
2707
3171
|
self.readCanCommunicationConnector(child_element, connector)
|
|
3172
|
+
elif tag_name == "ETHERNET-COMMUNICATION-CONNECTOR":
|
|
3173
|
+
connector = instance.createEthernetCommunicationConnector(self.getShortName(child_element))
|
|
3174
|
+
self.readEthernetCommunicationConnector(child_element, connector)
|
|
3175
|
+
elif tag_name == "LIN-COMMUNICATION-CONNECTOR":
|
|
3176
|
+
connector = instance.createLinCommunicationConnector(self.getShortName(child_element))
|
|
3177
|
+
self.readLinCommunicationConnector(child_element, connector)
|
|
2708
3178
|
else:
|
|
2709
|
-
self._raiseError("Unsupported Communication
|
|
3179
|
+
self._raiseError("Unsupported Communication Connector <%s>" % tag_name)
|
|
2710
3180
|
|
|
2711
3181
|
def readEcuInstance(self, element: ET.Element, parent: ARPackage):
|
|
2712
3182
|
short_name = self.getShortName(element)
|
|
@@ -2768,6 +3238,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2768
3238
|
signal = parent.createISignal(short_name)
|
|
2769
3239
|
self.readIdentifiable(element, signal)
|
|
2770
3240
|
signal.setDataTypePolicy(self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")) \
|
|
3241
|
+
.setISignalType(self.getChildElementOptionalLiteral(element, "I-SIGNAL-TYPE")) \
|
|
2771
3242
|
.setInitValue(self.getInitValue(element)) \
|
|
2772
3243
|
.setLength(self.getChildElementOptionalNumericalValue(element, "LENGTH")) \
|
|
2773
3244
|
.setNetworkRepresentationProps(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")) \
|
|
@@ -2932,7 +3403,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2932
3403
|
self.logger.debug("SystemSignal %s" % short_name)
|
|
2933
3404
|
signal = parent.createSystemSignal(short_name)
|
|
2934
3405
|
self.readIdentifiable(element, signal)
|
|
2935
|
-
signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH"))
|
|
3406
|
+
signal.setDynamicLength(self.getChildElementOptionalBooleanValue(element, "DYNAMIC-LENGTH")) \
|
|
3407
|
+
.setPhysicalProps(self.getSwDataDefProps(element, "PHYSICAL-PROPS"))
|
|
2936
3408
|
|
|
2937
3409
|
def readSystemSignalGroup(self, element: ET.Element, parent: ARPackage):
|
|
2938
3410
|
short_name = self.getShortName(element)
|
|
@@ -2985,6 +3457,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
2985
3457
|
child_element = self.find(element, key)
|
|
2986
3458
|
if child_element is not None:
|
|
2987
3459
|
timing = CyclicTiming()
|
|
3460
|
+
timing.setTimeOffset(self.getTimeRangeType(child_element, "TIME-OFFSET")) \
|
|
3461
|
+
.setTimePeriod(self.getTimeRangeType(child_element, "TIME-PERIOD"))
|
|
2988
3462
|
return timing
|
|
2989
3463
|
|
|
2990
3464
|
def getEventControlledTiming(self, element: ET.Element, key: str) -> EventControlledTiming:
|
|
@@ -3002,8 +3476,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3002
3476
|
if child_element is not None:
|
|
3003
3477
|
self.logger.debug("Get TransmissionModeTiming of <%s>" % key)
|
|
3004
3478
|
timing = TransmissionModeTiming()
|
|
3005
|
-
|
|
3006
|
-
|
|
3479
|
+
timing.setCyclicTiming(self.getCyclicTiming(child_element, "CYCLIC-TIMING")) \
|
|
3480
|
+
.setEventControlledTiming(self.getEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING"))
|
|
3007
3481
|
return timing
|
|
3008
3482
|
|
|
3009
3483
|
def getTransmissionModeDeclaration(self, element: ET.Element, key: str) -> TransmissionModeDeclaration:
|
|
@@ -3021,7 +3495,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3021
3495
|
child_element = self.find(element, "I-PDU-TIMING-SPECIFICATIONS/I-PDU-TIMING")
|
|
3022
3496
|
if child_element is not None:
|
|
3023
3497
|
timing = IPduTiming()
|
|
3024
|
-
timing.
|
|
3498
|
+
timing.setMinimumDelay(self.getChildElementOptionalTimeValue(child_element, "MINIMUM-DELAY")) \
|
|
3499
|
+
.setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
|
|
3025
3500
|
return timing
|
|
3026
3501
|
|
|
3027
3502
|
def readISignalIPdu(self, element: ET.Element, parent: ARPackage):
|
|
@@ -3241,6 +3716,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3241
3716
|
elif tag_name == "APPLICATION-ARRAY-DATA-TYPE":
|
|
3242
3717
|
self.readApplicationArrayDataType(child_element, parent)
|
|
3243
3718
|
elif tag_name == "SW-RECORD-LAYOUT":
|
|
3719
|
+
|
|
3244
3720
|
self.readSwRecordLayout(child_element, parent)
|
|
3245
3721
|
elif tag_name == "SW-ADDR-METHOD":
|
|
3246
3722
|
self.readSwAddrMethod(child_element, parent)
|
|
@@ -3314,6 +3790,29 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
3314
3790
|
self.readFlatMap(child_element, parent)
|
|
3315
3791
|
elif tag_name == "PORT-INTERFACE-MAPPING-SET":
|
|
3316
3792
|
self.readPortInterfaceMappingSet(child_element, parent)
|
|
3793
|
+
elif tag_name == "ETHERNET-CLUSTER":
|
|
3794
|
+
self.readEthernetCluster(child_element, parent)
|
|
3795
|
+
elif tag_name == "DIAGNOSTIC-CONNECTION":
|
|
3796
|
+
connection = parent.createDiagnosticConnection(self.getShortName(child_element))
|
|
3797
|
+
self.readDiagnosticConnection(child_element, connection)
|
|
3798
|
+
elif tag_name == "DIAGNOSTIC-SERVICE-TABLE":
|
|
3799
|
+
self.readDiagnosticServiceTable(child_element, parent)
|
|
3800
|
+
elif tag_name == "MULTIPLEXED-I-PDU":
|
|
3801
|
+
self.readMultiplexedIPdu(child_element, parent)
|
|
3802
|
+
elif tag_name == "USER-DEFINED-I-PDU":
|
|
3803
|
+
self.readUserDefinedIPdu(child_element, parent)
|
|
3804
|
+
elif tag_name == "USER-DEFINED-PDU":
|
|
3805
|
+
self.readUserDefinedPdu(child_element, parent)
|
|
3806
|
+
elif tag_name == "GENERAL-PURPOSE-PDU":
|
|
3807
|
+
self.readGeneralPurposePdu(child_element, parent)
|
|
3808
|
+
elif tag_name == "GENERAL-PURPOSE-I-PDU":
|
|
3809
|
+
self.readGeneralPurposeIPdu(child_element, parent)
|
|
3810
|
+
elif tag_name == "SECURE-COMMUNICATION-PROPS-SET":
|
|
3811
|
+
self.readSecureCommunicationPropsSet(child_element, parent)
|
|
3812
|
+
elif tag_name == "SO-AD-ROUTING-GROUP":
|
|
3813
|
+
self.readSoAdRoutingGroup(child_element, parent)
|
|
3814
|
+
elif tag_name == "DO-IP-TP-CONFIG":
|
|
3815
|
+
self.readDoIpTpConfig(child_element, parent)
|
|
3317
3816
|
else:
|
|
3318
3817
|
self.notImplemented("Unsupported element type of ARPackage <%s>" % tag_name)
|
|
3319
3818
|
|