armodel 1.7.4__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 (29) hide show
  1. armodel/cli/file_list_cli.py +70 -0
  2. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/DiagnosticContribution.py +47 -0
  3. armodel/models/M2/AUTOSARTemplates/DiagnosticExtract/__init__.py +0 -0
  4. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +67 -3
  5. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +9 -0
  6. armodel/models/M2/AUTOSARTemplates/SystemTemplate/DiagnosticConnection.py +58 -0
  7. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetCommunication.py +16 -1
  8. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/EthernetTopology.py +114 -0
  9. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/NetworkEndpoint.py +104 -1
  10. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Ethernet/ServiceInstances.py +429 -7
  11. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinCommunication.py +114 -6
  12. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Lin/LinTopology.py +94 -0
  13. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +151 -6
  14. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +98 -13
  15. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +13 -1
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/NetworkManagement.py +135 -13
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/TransportProtocols.py +25 -1
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +4 -3
  19. armodel/models/M2/MSR/DataDictionary/RecordLayout.py +1 -1
  20. armodel/models/__init__.py +3 -0
  21. armodel/parser/abstract_arxml_parser.py +2 -0
  22. armodel/parser/arxml_parser.py +353 -30
  23. armodel/writer/arxml_writer.py +471 -145
  24. {armodel-1.7.4.dist-info → armodel-1.7.5.dist-info}/METADATA +31 -1
  25. {armodel-1.7.4.dist-info → armodel-1.7.5.dist-info}/RECORD +29 -24
  26. {armodel-1.7.4.dist-info → armodel-1.7.5.dist-info}/entry_points.txt +1 -0
  27. {armodel-1.7.4.dist-info → armodel-1.7.5.dist-info}/LICENSE +0 -0
  28. {armodel-1.7.4.dist-info → armodel-1.7.5.dist-info}/WHEEL +0 -0
  29. {armodel-1.7.4.dist-info → armodel-1.7.5.dist-info}/top_level.txt +0 -0
@@ -72,19 +72,21 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes im
72
72
 
73
73
  from ..models.M2.AUTOSARTemplates.SystemTemplate import SwcToEcuMapping , System, SystemMapping
74
74
  from ..models.M2.AUTOSARTemplates.SystemTemplate.DataMapping import SenderReceiverToSignalGroupMapping, SenderReceiverToSignalMapping
75
- 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
76
77
  from ..models.M2.AUTOSARTemplates.SystemTemplate.InstanceRefs import ComponentInSystemInstanceRef, VariableDataPrototypeInSystemInstanceRef
77
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering
78
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import AbstractCanCluster, CanPhysicalChannel, CommConnectorPort, CommunicationCluster, CommunicationConnector, EthernetPhysicalChannel, 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
79
81
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import Frame, FrameTriggering, IPdu, IPduTiming, ISignalIPdu, ISignalTriggering, PduTriggering
80
82
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import CyclicTiming, EventControlledTiming, TimeRangeType, TransmissionModeCondition, TransmissionModeDeclaration, TransmissionModeTiming
81
83
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.EcuInstance import EcuInstance
82
84
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrameTriggering, RxIdentifierRange
83
85
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanTopology import CanCommunicationConnector, CanCommunicationController
84
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCommunicationController
86
+ from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetTopology import EthernetCommunicationConnector, EthernetCommunicationController, InitialSdDelayConfig, RequestResponseDelay, SdClientConfig
85
87
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.EthernetCommunication import SocketConnection, SocketConnectionBundle, SocketConnectionIpduIdentifier
86
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.NetworkEndpoint import Ipv6Configuration, NetworkEndpoint
87
- from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Ethernet.ServiceInstances import SoAdConfig, SocketAddress
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
88
90
  from ..models.M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Multiplatform import ISignalMapping
89
91
 
90
92
  from .abstract_arxml_parser import AbstractARXMLParser
@@ -299,8 +301,6 @@ class ARXMLParser(AbstractARXMLParser):
299
301
  if ref_type is not None:
300
302
  entity.addManagedModeGroupRef(ref_type)
301
303
 
302
-
303
-
304
304
  def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
305
305
  event.startsOnEventRef = self.getChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF")
306
306
 
@@ -2272,7 +2272,7 @@ class ARXMLParser(AbstractARXMLParser):
2272
2272
  layout_v = SwRecordLayoutV()
2273
2273
  layout_v.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
2274
2274
  .setBaseTypeRef(self.getChildElementOptionalRefType(child_element, "BASE-TYPE-REF")) \
2275
- .setSwRecordLayoutVAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
2275
+ .setSwRecordLayoutVAxis(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
2276
2276
  .setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
2277
2277
  .setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
2278
2278
  return layout_v
@@ -2284,7 +2284,7 @@ class ARXMLParser(AbstractARXMLParser):
2284
2284
  group = SwRecordLayoutGroup()
2285
2285
  group.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
2286
2286
  .setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY")) \
2287
- .setSwRecordLayoutGroupAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
2287
+ .setSwRecordLayoutGroupAxis(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
2288
2288
  .setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
2289
2289
  .setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
2290
2290
  .setSwRecordLayoutGroupStep(self.getChildElementOptionalIntegerValue(child_element, "SW-RECORD-LAYOUT-GROUP-STEP")) \
@@ -2471,9 +2471,45 @@ class ARXMLParser(AbstractARXMLParser):
2471
2471
  self.readIdentifiable(element, channel)
2472
2472
  self.readPhysicalChannel(element, channel)
2473
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
+
2474
2509
  def readLinPhysicalChannel(self, element: ET.Element, channel: LinPhysicalChannel):
2475
2510
  self.readIdentifiable(element, channel)
2476
2511
  self.readPhysicalChannel(element, channel)
2512
+ self.readLinPhysicalChannelScheduleTables(element, channel)
2477
2513
 
2478
2514
  def getIpv6Configuration(self, element: ET.Element) -> Ipv6Configuration:
2479
2515
  configuration = None
@@ -2496,8 +2532,25 @@ class ARXMLParser(AbstractARXMLParser):
2496
2532
  else:
2497
2533
  self.notImplemented("Unsupported Network EndPoint Address <%s>" % tag_name)
2498
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
+
2499
2551
  def readNetworkEndPoint(self, element: ET.Element, end_point: NetworkEndpoint):
2500
2552
  self.readIdentifiable(element, end_point)
2553
+ end_point.setInfrastructureServices(self.getInfrastructureServices(element, "INFRASTRUCTURE-SERVICES"))
2501
2554
  self.readNetworkEndPointNetworkEndPointAddress(element, end_point)
2502
2555
  end_point.setPriority(self.getChildElementOptionalPositiveInteger(element, "PRIORITY"))
2503
2556
 
@@ -2531,11 +2584,15 @@ class ARXMLParser(AbstractARXMLParser):
2531
2584
  connection = None
2532
2585
  if element is not None:
2533
2586
  connection = SocketConnection()
2534
- connection.setClientPortRef(self.getChildElementOptionalRefType(element, "CLIENT-PORT-REF"))
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"))
2535
2590
  for pdu in self.getSocketConnectionPdus(element):
2536
2591
  connection.addPdu(pdu)
2537
2592
  connection.setPduCollectionMaxBufferSize(self.getChildElementOptionalPositiveInteger(element, "PDU-COLLECTION-MAX-BUFFER-SIZE")) \
2538
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")) \
2539
2596
  .setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
2540
2597
  return connection
2541
2598
 
@@ -2560,18 +2617,145 @@ class ARXMLParser(AbstractARXMLParser):
2560
2617
  else:
2561
2618
  self.notImplemented("Unsupported Connection Bundle <%s>" % tag_name)
2562
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
+
2563
2743
  def readSocketAddress(self, element: ET.Element, address: SocketAddress):
2564
- self.readSocketConnectionBundleConnections(element, address)
2565
- address.setConnectorRef(self.getChildElementOptionalRefType(element, "CONNECTOR-REF"))
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
+
2566
2750
 
2567
2751
  def readSoAdConfigSocketAddresses(self, element: ET.Element, config: SoAdConfig):
2568
2752
  for child_element in self.findall(element, "SOCKET-ADDRESSS/*"):
2569
2753
  tag_name = self.getTagName(child_element)
2570
2754
  if tag_name == "SOCKET-ADDRESS":
2571
- bundle = config.createSocketAddress(self.getShortName(child_element))
2572
- self.readSocketAddress(child_element, bundle)
2755
+ address = config.createSocketAddress(self.getShortName(child_element))
2756
+ self.readSocketAddress(child_element, address)
2573
2757
  else:
2574
- self.notImplemented("Unsupported Connection Bundle <%s>" % tag_name)
2758
+ self.notImplemented("Unsupported Socket Address <%s>" % tag_name)
2575
2759
 
2576
2760
  def getSoAdConfig(self, element: ET.Element, key: str) -> SoAdConfig:
2577
2761
  child_element = self.find(element, key)
@@ -2581,12 +2765,19 @@ class ARXMLParser(AbstractARXMLParser):
2581
2765
  self.readSoAdConfigConnectionBundles(child_element, config)
2582
2766
  self.readSoAdConfigSocketAddresses(child_element, config)
2583
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"))
2584
2774
 
2585
2775
  def readEthernetPhysicalChannel(self, element: ET.Element, channel: EthernetPhysicalChannel):
2586
2776
  self.readIdentifiable(element, channel)
2587
2777
  self.readPhysicalChannel(element, channel)
2588
2778
  self.readEthernetPhysicalChannelNetworkEndPoints(element, channel)
2589
2779
  channel.setSoAdConfig(self.getSoAdConfig(element, "SO-AD-CONFIG"))
2780
+ self.readEthernetPhysicalChannelVlan(element, channel)
2590
2781
 
2591
2782
  def readCommunicationClusterPhysicalChannels(self, element: ET.Element, cluster: CommunicationCluster):
2592
2783
  for child_element in self.findall(element, "PHYSICAL-CHANNELS/*"):
@@ -2609,9 +2800,20 @@ class ARXMLParser(AbstractARXMLParser):
2609
2800
  self.readCommunicationClusterPhysicalChannels(element, cluster)
2610
2801
  cluster.setProtocolName(self.getChildElementOptionalLiteral(element, "PROTOCOL-NAME")) \
2611
2802
  .setProtocolVersion(self.getChildElementOptionalLiteral(element, "PROTOCOL-VERSION"))
2612
-
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
+
2613
2814
  def readAbstractCanCluster(self, element: ET.Element, cluster: AbstractCanCluster):
2614
- 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")) \
2615
2817
  .setSpeed(self.getChildElementOptionalNumericalValue(element, "SPEED"))
2616
2818
 
2617
2819
  def readLinCluster(self, element: ET.Element, parent: ARPackage):
@@ -2642,6 +2844,71 @@ class ARXMLParser(AbstractARXMLParser):
2642
2844
  if child_element is not None:
2643
2845
  self.readCommunicationCluster(child_element, cluster)
2644
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
+
2645
2912
  def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
2646
2913
  for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
2647
2914
  short_name = self.getShortName(child_element)
@@ -2696,6 +2963,8 @@ class ARXMLParser(AbstractARXMLParser):
2696
2963
  self.readIPdu(element, pdu)
2697
2964
 
2698
2965
  def readNmNode(self, element: ET.Element, nm_node: NmNode):
2966
+ self.readIdentifiable(element, nm_node)
2967
+
2699
2968
  nm_node.setControllerRef(self.getChildElementOptionalRefType(element, "CONTROLLER-REF")) \
2700
2969
  .setNmIfEcuRef(self.getChildElementOptionalRefType(element, "NM-IF-ECU-REF")) \
2701
2970
  .setNmNodeId(self.getChildElementOptionalNumericalValue(element, "NM-NODE-ID"))
@@ -2704,23 +2973,30 @@ class ARXMLParser(AbstractARXMLParser):
2704
2973
  for ref in self.getChildElementRefTypeList(element, "TX-NM-PDU-REFS/TX-NM-PDU-REF"):
2705
2974
  nm_node.addTxNmPduRefs(ref)
2706
2975
 
2707
- def readCanNmNode(self, element: ET.Element, parent: NmCluster):
2708
- short_name = self.getShortName(element)
2709
- self.logger.debug("readCanNmNode %s" % short_name)
2710
- nm_node = parent.createCanNmNode(short_name) # type: CanNmNode
2711
- 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
+
2712
2979
  self.readNmNode(element, nm_node)
2713
2980
 
2714
2981
  nm_node.setNmMsgCycleOffset(self.getChildElementOptionalFloatValue(element, "NM-MSG-CYCLE-OFFSET")) \
2715
2982
  .setNmMsgReducedTime(self.getChildElementOptionalFloatValue(element, "NM-MSG-REDUCED-TIME")) \
2716
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)
2717
2989
 
2718
2990
  def readNmClusterNmNodes(self, element: ET.Element, parent: NmCluster):
2719
2991
  self.logger.debug("readNmConfigNmNodes %s" % parent.getShortName())
2720
2992
  for child_element in self.findall(element, "NM-NODES/*"):
2721
2993
  tag_name = self.getTagName(child_element)
2722
2994
  if tag_name == "CAN-NM-NODE":
2723
- 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)
2724
3000
  else:
2725
3001
  self._raiseError("Unsupported Nm Node <%s>" % tag_name)
2726
3002
 
@@ -2734,6 +3010,10 @@ class ARXMLParser(AbstractARXMLParser):
2734
3010
  .setNmImmediateRestartEnabled(self.getChildElementOptionalBooleanValue(element, "NM-IMMEDIATE-RESTART-ENABLED"))
2735
3011
 
2736
3012
  return coupling
3013
+
3014
+ def getUdpNmClusterCoupling(self, element: ET.Element) -> UdpNmClusterCoupling:
3015
+ coupling = UdpNmClusterCoupling()
3016
+ return coupling
2737
3017
 
2738
3018
  def readNmConfigNmClusterCouplings(self, element: ET.Element, nm_config: NmConfig):
2739
3019
  self.logger.debug("readNmClusterNmClusterCouplings %s" % nm_config.getShortName())
@@ -2741,10 +3021,13 @@ class ARXMLParser(AbstractARXMLParser):
2741
3021
  tag_name = self.getTagName(child_element)
2742
3022
  if tag_name == "CAN-NM-CLUSTER-COUPLING":
2743
3023
  nm_config.addNmClusterCouplings(self.getCanNmClusterCoupling(child_element))
3024
+ elif tag_name == "UDP-NM-CLUSTER-COUPLING":
3025
+ nm_config.addNmClusterCouplings(self.getUdpNmClusterCoupling(child_element))
2744
3026
  else:
2745
- self._raiseError("Unsupported Nm Node <%s>" % tag_name)
3027
+ self.notImplemented("Unsupported Nm Node <%s>" % tag_name)
2746
3028
 
2747
3029
  def readNmCluster(self, element: ET.Element, cluster: NmCluster):
3030
+ self.readIdentifiable(element, cluster)
2748
3031
  cluster.setCommunicationClusterRef(self.getChildElementOptionalRefType(element, "COMMUNICATION-CLUSTER-REF")) \
2749
3032
  .setNmChannelId(self.getChildElementOptionalNumericalValue(element, "NM-CHANNEL-ID")) \
2750
3033
  .setNmChannelSleepMaster(self.getChildElementOptionalBooleanValue(element, "NM-CHANNEL-SLEEP-MASTER"))
@@ -2755,7 +3038,6 @@ class ARXMLParser(AbstractARXMLParser):
2755
3038
  short_name = self.getShortName(element)
2756
3039
  self.logger.debug("readCanNmCluster %s" % short_name)
2757
3040
  cluster = parent.createCanNmCluster(short_name) # type: CanNmCluster
2758
- self.readIdentifiable(element, cluster)
2759
3041
  self.readNmCluster(element, cluster)
2760
3042
 
2761
3043
  cluster.setNmBusloadReductionActive(self.getChildElementOptionalBooleanValue(element, "NM-BUSLOAD-REDUCTION-ACTIVE")) \
@@ -2773,11 +3055,19 @@ class ARXMLParser(AbstractARXMLParser):
2773
3055
  .setNmUserDataLength(self. getChildElementOptionalNumericalValue(element, "NM-USER-DATA-LENGTH")) \
2774
3056
  .setNmWaitBusSleepTime(self.getChildElementOptionalFloatValue(element, "NM-WAIT-BUS-SLEEP-TIME"))
2775
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
+
2776
3064
  def readNmConfigNmClusters(self, element: ET.Element, parent: NmConfig):
2777
3065
  for child_element in self.findall(element, "NM-CLUSTERS/*"):
2778
3066
  tag_name = self.getTagName(child_element)
2779
3067
  if tag_name == "CAN-NM-CLUSTER":
2780
3068
  self.readCanNmCluster(child_element, parent)
3069
+ elif tag_name == "UDP-NM-CLUSTER":
3070
+ self.readUdpNmCluster(child_element, parent)
2781
3071
  else:
2782
3072
  self._raiseError("Unsupported Nm Cluster <%s>" % tag_name)
2783
3073
 
@@ -2806,7 +3096,11 @@ class ARXMLParser(AbstractARXMLParser):
2806
3096
  self.readIdentifiable(element, controller)
2807
3097
 
2808
3098
  def readEthernetCommunicationController(self, element: ET.Element, controller: EthernetCommunicationController):
2809
- self.logger.debug("Read CanCommunicationController %s" % controller.getShortName())
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())
2810
3104
  self.readIdentifiable(element, controller)
2811
3105
 
2812
3106
  def readEcuInstanceCommControllers(self, element: ET.Element, instance: EcuInstance):
@@ -2819,6 +3113,9 @@ class ARXMLParser(AbstractARXMLParser):
2819
3113
  elif tag_name == "ETHERNET-COMMUNICATION-CONTROLLER":
2820
3114
  controller = instance.createEthernetCommunicationController(self.getShortName(child_element))
2821
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)
2822
3119
  else:
2823
3120
  self._raiseError("Unsupported Communication Controller <%s>" % tag_name)
2824
3121
 
@@ -2859,7 +3156,10 @@ class ARXMLParser(AbstractARXMLParser):
2859
3156
  def readCanCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
2860
3157
  self.readCommunicationConnector(element, connector)
2861
3158
 
2862
- def readEthernetCommunicationConnector(self, element: ET.Element, connector: CanCommunicationConnector):
3159
+ def readEthernetCommunicationConnector(self, element: ET.Element, connector: EthernetCommunicationConnector):
3160
+ self.readCommunicationConnector(element, connector)
3161
+
3162
+ def readLinCommunicationConnector(self, element: ET.Element, connector: LinCommunicationConnector):
2863
3163
  self.readCommunicationConnector(element, connector)
2864
3164
 
2865
3165
  def readEcuInstanceConnectors(self, element: ET.Element, instance: EcuInstance):
@@ -2872,6 +3172,9 @@ class ARXMLParser(AbstractARXMLParser):
2872
3172
  elif tag_name == "ETHERNET-COMMUNICATION-CONNECTOR":
2873
3173
  connector = instance.createEthernetCommunicationConnector(self.getShortName(child_element))
2874
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)
2875
3178
  else:
2876
3179
  self._raiseError("Unsupported Communication Connector <%s>" % tag_name)
2877
3180
 
@@ -3367,8 +3670,6 @@ class ARXMLParser(AbstractARXMLParser):
3367
3670
  self.readIdentifiable(element, mapping_set)
3368
3671
  self.readPortInterfaceMappings(element, mapping_set)
3369
3672
 
3370
-
3371
-
3372
3673
  def readARPackageElements(self, element: ET.Element, parent: ARPackage):
3373
3674
  for child_element in self.findall(element, "ELEMENTS/*"):
3374
3675
  tag_name = self.getTagName(child_element.tag)
@@ -3415,6 +3716,7 @@ class ARXMLParser(AbstractARXMLParser):
3415
3716
  elif tag_name == "APPLICATION-ARRAY-DATA-TYPE":
3416
3717
  self.readApplicationArrayDataType(child_element, parent)
3417
3718
  elif tag_name == "SW-RECORD-LAYOUT":
3719
+
3418
3720
  self.readSwRecordLayout(child_element, parent)
3419
3721
  elif tag_name == "SW-ADDR-METHOD":
3420
3722
  self.readSwAddrMethod(child_element, parent)
@@ -3490,6 +3792,27 @@ class ARXMLParser(AbstractARXMLParser):
3490
3792
  self.readPortInterfaceMappingSet(child_element, parent)
3491
3793
  elif tag_name == "ETHERNET-CLUSTER":
3492
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)
3493
3816
  else:
3494
3817
  self.notImplemented("Unsupported element type of ARPackage <%s>" % tag_name)
3495
3818