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.
Files changed (43) hide show
  1. armodel/cli/file_list_cli.py +70 -0
  2. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +2 -1
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +1 -1
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/ServiceNeeds.py +6 -7
  5. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/DiagnosticContribution.py +47 -0
  6. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/__init__.py +0 -0
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +73 -3
  8. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +37 -1
  9. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +17 -1
  10. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +31 -0
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +4 -3
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/InstanceRefsUsage.py +17 -32
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +4 -0
  14. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ServiceMapping.py +7 -1
  15. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +47 -15
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DiagnosticConnection.py +58 -0
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetCommunication.py +244 -0
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +281 -0
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/NetworkEndpoint.py +328 -0
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +522 -11
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinCommunication.py +114 -6
  22. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +94 -0
  23. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +151 -6
  24. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +140 -12
  25. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +31 -6
  26. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +7 -12
  27. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +135 -13
  28. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +25 -1
  29. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +4 -3
  30. armodel/models/M2/MSR/AsamHdo/BaseTypes.py +0 -1
  31. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +1 -1
  32. armodel/models/__init__.py +6 -0
  33. armodel/parser/abstract_arxml_parser.py +2 -0
  34. armodel/parser/arxml_parser.py +561 -62
  35. armodel/tests/test_armodel/models/test_ar_ref.py +2 -2
  36. armodel/writer/abstract_arxml_writer.py +1 -3
  37. armodel/writer/arxml_writer.py +702 -223
  38. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/METADATA +47 -2
  39. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/RECORD +43 -34
  40. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/entry_points.txt +1 -0
  41. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/LICENSE +0 -0
  42. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/WHEEL +0 -0
  43. {armodel-1.7.3.dist-info → armodel-1.7.5.dist-info}/top_level.txt +0 -0
@@ -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, AutosarVariableRef, VariableInAtomicSWCTypeInstanceRef
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.NetworkManagement import CanNmCluster, CanNmClusterCoupling, CanNmNode, NmCluster, NmConfig, NmNode
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.FibexCore.CoreTopology import AbstractCanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, FramePort, IPduPort, ISignalPort, LinPhysicalChannel, PhysicalChannel
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 getAutosarVariableInImplDatatype(self, element: ET.Element) -> AutosarVariableRef:
209
- child_element = self.find(element, "ACCESSED-VARIABLE")
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, "ACCESSED-VARIABLE")
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.getAutosarVariableInImplDatatype(child_element))
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.getAutosarVariableInImplDatatype(child_element))
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.getAutosarVariableInImplDatatype(child_element))
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.getAutosarVariableInImplDatatype(child_element))
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.getAutosarVariableInImplDatatype(child_element))
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("read DiagnosticEventNeeds %s" % short_name)
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("read DiagnosticValueNeeds %s" % short_name)
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
- for data_type_set in self.getIncludedDataTypeSets(child_element):
559
- behavior.addIncludedDataTypeSet(data_type_set)
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
- accessed_parameter = None
830
+ parameter = None
805
831
  child_element = self.find(element, key)
806
832
  if child_element is not None:
807
- accessed_parameter = AutosarParameterRef()
808
- accessed_parameter.local_parameter_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF")
809
- return accessed_parameter
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.accessed_parameter = self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER")
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.baseTypeSize = self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")
1360
- definition.baseTypeEncoding = self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")
1361
- definition.memAlignment = self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")
1362
- definition.nativeDeclaration = self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION")
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.baseTypeDefinition)
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.modeGroupRef = self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")
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.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
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.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
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.setCanFdBaudrate(self.getChildElementOptionalNumericalValue(element, "CAN-FD-BAUDRATE")) \
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, parent: NmCluster):
2554
- short_name = self.getShortName(element)
2555
- self.logger.debug("readCanNmNode %s" % short_name)
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.readCanNmNode(child_element, parent)
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._raiseError("Unsupported Nm Node <%s>" % tag_name)
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("read CanCommunicationController %s" % controller.getShortName())
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 Controller <%s>" % tag_name)
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
- #timing.getCyclicTiming(child_element, "")
3006
- timing.setEventControlledTiming(self.getEventControlledTiming(child_element, "EVENT-CONTROLLED-TIMING"))
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.setTransmissionModeDeclaration(self.getTransmissionModeDeclaration(child_element, "TRANSMISSION-MODE-DECLARATION"))
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