armodel 1.4.3__py3-none-any.whl → 1.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- armodel/cli/arxml_dump_cli.py +1 -1
- armodel/models/ar_package.py +131 -23
- armodel/models/ar_ref.py +28 -5
- armodel/models/bsw_module_template.py +29 -14
- armodel/models/common_structure.py +38 -23
- armodel/models/fibex/__init__.py +0 -0
- armodel/models/fibex/can_communication.py +6 -0
- armodel/models/fibex/fibex_4_multiplatform.py +145 -0
- armodel/models/fibex/fibex_core.py +341 -0
- armodel/models/fibex/lin_communication.py +17 -0
- armodel/models/fibex/lin_topology.py +7 -0
- armodel/models/general_structure.py +19 -3
- armodel/models/implementation.py +4 -5
- armodel/models/internal_behavior.py +63 -0
- armodel/models/mode_declaration.py +8 -0
- armodel/models/port_prototype.py +20 -2
- armodel/models/rpt_scenario.py +20 -0
- armodel/models/sw_component.py +99 -36
- armodel/models/system_template/__init__.py +0 -0
- armodel/models/system_template/network_management.py +7 -0
- armodel/models/system_template/transport_protocols.py +7 -0
- armodel/models/timing.py +91 -0
- armodel/parser/abstract_arxml_parser.py +1 -1
- armodel/parser/arxml_parser.py +329 -72
- armodel/tests/test_armodel/models/test_data_prototype.py +1 -1
- armodel/tests/test_armodel/models/test_datatype.py +7 -7
- armodel/tests/test_armodel/models/test_port_interface.py +5 -5
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +13 -5
- armodel/tests/test_armodel/parser/test_sw_components.py +4 -4
- armodel/writer/arxml_writer.py +250 -21
- {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/METADATA +25 -1
- {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/RECORD +36 -23
- {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/LICENSE +0 -0
- {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/WHEEL +0 -0
- {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/entry_points.txt +0 -0
- {armodel-1.4.3.dist-info → armodel-1.5.0.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
from typing import List
|
|
1
2
|
import xml.etree.ElementTree as ET
|
|
2
3
|
|
|
3
|
-
from armodel.models.
|
|
4
|
-
|
|
5
|
-
from .abstract_arxml_parser import AbstractARXMLParser
|
|
4
|
+
from armodel.models.fibex.fibex_4_multiplatform import FrameMapping, IPduMapping, ISignalMapping
|
|
6
5
|
|
|
6
|
+
from ..models.fibex.fibex_core import Frame
|
|
7
|
+
from ..models.internal_behavior import IncludedDataTypeSet
|
|
8
|
+
from ..models.timing import ExecutionOrderConstraint, TimingExtension
|
|
9
|
+
from ..models.bsw_module_template import BswModeSenderPolicy
|
|
7
10
|
from ..models.port_interface import ModeSwitchInterface, PortInterface
|
|
8
|
-
from ..models.common_structure import MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
|
|
11
|
+
from ..models.common_structure import IncludedModeDeclarationGroupSet, MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
|
|
9
12
|
from ..models.implementation import BswImplementation, EngineeringObject
|
|
10
13
|
from ..models.general_structure import MultilanguageReferrable
|
|
11
14
|
from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
|
|
@@ -19,10 +22,10 @@ from ..models.service_mapping import RoleBasedPortAssignment
|
|
|
19
22
|
from ..models.ar_package import AUTOSAR, ARPackage
|
|
20
23
|
from ..models.ar_object import ARLiteral
|
|
21
24
|
from ..models.service_needs import RoleBasedDataAssignment
|
|
22
|
-
from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
|
|
23
|
-
from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
|
|
24
|
-
from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype
|
|
25
|
-
from ..models.port_prototype import QueuedReceiverComSpec
|
|
25
|
+
from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, InnerPortGroupInCompositionInstanceRef, RModeGroupInAtomicSWCInstanceRef, VariableDataPrototypeInSystemInstanceRef, VariableInAtomicSWCTypeInstanceRef, AutosarParameterRef
|
|
26
|
+
from ..models.sw_component import AtomicSwComponentType, CompositionSwComponentType, ModeAccessPoint, PortAPIOption, PortDefinedArgumentValue, PortGroup, ServiceDependency, SwComponentType, SwcServiceDependency
|
|
27
|
+
from ..models.data_prototype import ApplicationCompositeElementDataPrototype, AutosarDataPrototype, DataPrototype, ParameterDataPrototype
|
|
28
|
+
from ..models.port_prototype import ModeSwitchReceiverComSpec, QueuedReceiverComSpec
|
|
26
29
|
from ..models.annotation import Annotation, GeneralAnnotation
|
|
27
30
|
from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
|
|
28
31
|
|
|
@@ -47,6 +50,8 @@ from ..models import RecordValueSpecification
|
|
|
47
50
|
from ..models import ApplicationRecordDataType
|
|
48
51
|
from ..models import SwValueCont, SwValues
|
|
49
52
|
|
|
53
|
+
from .abstract_arxml_parser import AbstractARXMLParser
|
|
54
|
+
|
|
50
55
|
class ARXMLParser(AbstractARXMLParser):
|
|
51
56
|
def __init__(self, options=None) -> None:
|
|
52
57
|
super().__init__(options)
|
|
@@ -58,27 +63,33 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
58
63
|
return child_element.text
|
|
59
64
|
|
|
60
65
|
def readSd(self, element: ET.Element, sdg: Sdg):
|
|
61
|
-
for child_element in
|
|
66
|
+
for child_element in self.findall(element, "./SD"):
|
|
62
67
|
sd = Sd()
|
|
63
|
-
|
|
68
|
+
if 'GID' in child_element.attrib:
|
|
69
|
+
sd.gid = child_element.attrib['GID']
|
|
64
70
|
sd.value = child_element.text
|
|
65
|
-
|
|
66
71
|
sdg.addSd(sd)
|
|
72
|
+
|
|
73
|
+
def getSdg(self, element: ET.Element) -> Sdg:
|
|
74
|
+
sdg = Sdg()
|
|
75
|
+
if 'GID' in element.attrib:
|
|
76
|
+
sdg.gid = element.attrib["GID"]
|
|
77
|
+
self.readSd(element, sdg)
|
|
78
|
+
child_element = self.find(element, "./SDG")
|
|
79
|
+
if child_element is not None:
|
|
80
|
+
sdg.sdg_contents_type = self.getSdg(child_element)
|
|
81
|
+
return sdg
|
|
67
82
|
|
|
68
|
-
def
|
|
69
|
-
for child_element in
|
|
70
|
-
|
|
71
|
-
if 'GID' in child_element.attrib:
|
|
72
|
-
sdg.gid = child_element.attrib["GID"]
|
|
73
|
-
self.readSd(child_element, sdg)
|
|
74
|
-
admin_data.addSdg(sdg)
|
|
83
|
+
def readSdgs(self, element: ET.Element, admin_data: AdminData):
|
|
84
|
+
for child_element in self.findall(element, "./SDGS/SDG"):
|
|
85
|
+
admin_data.addSdg(self.getSdg(child_element))
|
|
75
86
|
|
|
76
87
|
def readAdminData(self, element: ET.Element, identifiable: Identifiable):
|
|
77
|
-
child_element =
|
|
88
|
+
child_element = self.find(element, "./ADMIN-DATA")
|
|
78
89
|
if child_element is not None:
|
|
79
90
|
self.logger.debug("readAdminData")
|
|
80
91
|
admin_data = AdminData()
|
|
81
|
-
self.
|
|
92
|
+
self.readSdgs(child_element, admin_data)
|
|
82
93
|
identifiable.admin_data = admin_data
|
|
83
94
|
|
|
84
95
|
def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
@@ -92,7 +103,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
92
103
|
self.readAdminData(element, identifiable)
|
|
93
104
|
|
|
94
105
|
def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
|
|
95
|
-
for child_element in
|
|
106
|
+
for child_element in self.findall(element, "./L-4"):
|
|
96
107
|
l4 = LLongName()
|
|
97
108
|
self.readElementAttributes(child_element, l4)
|
|
98
109
|
l4.value = child_element.text
|
|
@@ -102,7 +113,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
102
113
|
|
|
103
114
|
def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
|
|
104
115
|
long_name = None
|
|
105
|
-
child_element =
|
|
116
|
+
child_element = self.find(element, "./%s" % key)
|
|
106
117
|
if child_element is not None:
|
|
107
118
|
long_name = MultilanguageLongName()
|
|
108
119
|
self.readElementAttributes(child_element, long_name)
|
|
@@ -110,7 +121,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
110
121
|
return long_name
|
|
111
122
|
|
|
112
123
|
def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
|
|
113
|
-
for child_element in
|
|
124
|
+
for child_element in self.findall(element, "./L-2"):
|
|
114
125
|
l2 = LOverviewParagraph()
|
|
115
126
|
self.readElementAttributes(child_element, l2)
|
|
116
127
|
l2.value = child_element.text
|
|
@@ -131,6 +142,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
131
142
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
132
143
|
if (child_element is not None):
|
|
133
144
|
autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
|
|
145
|
+
self.readElementAttributes(child_element, autosar_variable_iref)
|
|
134
146
|
autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
|
|
135
147
|
if autosar_variable_iref.port_prototype_ref is None:
|
|
136
148
|
self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
@@ -205,7 +217,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
205
217
|
def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
|
|
206
218
|
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
207
219
|
if child_element is not None:
|
|
208
|
-
for ref in self.getChildElementRefTypeList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
220
|
+
for ref in self.getChildElementRefTypeList(child_element, "./CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
209
221
|
entity.addCanEnterExclusiveAreaRef(ref)
|
|
210
222
|
|
|
211
223
|
def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
@@ -298,11 +310,18 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
298
310
|
def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
|
|
299
311
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
300
312
|
if child_element is not None:
|
|
301
|
-
for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
313
|
+
for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
|
|
302
314
|
behavior.addDataTypeMappingRef(ref)
|
|
303
315
|
|
|
316
|
+
def readInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
|
|
317
|
+
for child_element in element.findall("./xmlns:CONSTANT-MEMORYS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
|
|
318
|
+
short_name = self.getShortName(child_element)
|
|
319
|
+
prototype = behavior.createConstantMemory(short_name)
|
|
320
|
+
self.readParameterDataPrototype(child_element, prototype)
|
|
321
|
+
|
|
304
322
|
def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
|
|
305
|
-
self.readIdentifiable(element,
|
|
323
|
+
self.readIdentifiable(element, behavior)
|
|
324
|
+
self.readInternalBehaviorConstantMemories(element, behavior)
|
|
306
325
|
for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
|
|
307
326
|
short_name = self.getShortName(child_element)
|
|
308
327
|
behavior.createExclusiveArea(short_name)
|
|
@@ -382,8 +401,18 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
382
401
|
else:
|
|
383
402
|
self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
|
|
384
403
|
|
|
404
|
+
def getIncludedDataTypeSets(self, element: ET.Element) -> List[IncludedDataTypeSet]:
|
|
405
|
+
include_data_type_sets = []
|
|
406
|
+
for child_element in self.findall(element, "./INCLUDED-DATA-TYPE-SETS/INCLUDED-DATA-TYPE-SET"):
|
|
407
|
+
include_data_type_set = IncludedDataTypeSet()
|
|
408
|
+
self.readElementAttributes(child_element, include_data_type_set)
|
|
409
|
+
for ref_type in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-REFS/DATA-TYPE-REF"):
|
|
410
|
+
include_data_type_set.addDataTypeRef(ref_type)
|
|
411
|
+
include_data_type_sets.append(include_data_type_set)
|
|
412
|
+
return include_data_type_sets
|
|
413
|
+
|
|
385
414
|
def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
386
|
-
for child_element in
|
|
415
|
+
for child_element in self.findall(element, "./INTERNAL-BEHAVIORS/SWC-INTERNAL-BEHAVIOR"):
|
|
387
416
|
short_name = self.getShortName(child_element)
|
|
388
417
|
behavior = parent.createSwcInternalBehavior(short_name)
|
|
389
418
|
self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
|
|
@@ -396,12 +425,23 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
396
425
|
self.readSwcInternalBehaviorEvents(child_element, behavior)
|
|
397
426
|
self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
|
|
398
427
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
428
|
+
for data_type_set in self.getIncludedDataTypeSets(child_element):
|
|
429
|
+
behavior.addIncludedDataTypeSet(data_type_set)
|
|
399
430
|
behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
|
|
400
431
|
self.readPerInstanceMemories(child_element, behavior)
|
|
401
|
-
self.
|
|
432
|
+
self.readPerInstanceParameters(child_element, behavior)
|
|
402
433
|
self.readPortAPIOptions(child_element, behavior)
|
|
403
434
|
behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
|
|
404
435
|
|
|
436
|
+
def getIncludedModeDeclarationGroupSets(self, element: ET.Element) -> List[IncludedModeDeclarationGroupSet]:
|
|
437
|
+
group_sets = []
|
|
438
|
+
for child_element in self.findall(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS/INCLUDED-MODE-DECLARATION-GROUP-SET"):
|
|
439
|
+
group_set = IncludedModeDeclarationGroupSet()
|
|
440
|
+
for ref_type in self.getChildElementRefTypeList(child_element, "./MODE-DECLARATION-GROUP-REFS/MODE-DECLARATION-GROUP-REF"):
|
|
441
|
+
group_set.addModeDeclarationGroupRef(ref_type)
|
|
442
|
+
group_sets.append(group_set)
|
|
443
|
+
return group_sets
|
|
444
|
+
|
|
405
445
|
def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
|
|
406
446
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
|
|
407
447
|
short_name = self.getShortName(child_element)
|
|
@@ -417,6 +457,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
417
457
|
self.readBswDataReceivedEvent(child_element, behavior)
|
|
418
458
|
self.readBswInternalTriggerOccurredEvent(child_element, behavior)
|
|
419
459
|
self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
|
|
460
|
+
for group_set in self.getIncludedModeDeclarationGroupSets(child_element):
|
|
461
|
+
behavior.addIncludedModeDeclarationGroupSet(group_set)
|
|
420
462
|
|
|
421
463
|
def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
|
|
422
464
|
short_name = self.getShortName(element)
|
|
@@ -510,7 +552,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
510
552
|
def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
|
|
511
553
|
child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
|
|
512
554
|
if child_element is not None:
|
|
513
|
-
for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
|
|
555
|
+
for ref in self.getChildElementRefTypeList(child_element, "./VENDOR-SPECIFIC-MODULE-DEF-REF"):
|
|
514
556
|
parent.addVendorSpecificModuleDefRef(ref)
|
|
515
557
|
|
|
516
558
|
def readBswImplementation(self, element: ET.Element, parent: ARPackage):
|
|
@@ -574,7 +616,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
574
616
|
parent.operation_iref = operation_iref
|
|
575
617
|
|
|
576
618
|
def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
|
|
577
|
-
child_element =
|
|
619
|
+
child_element = self.find(element, "DATA-IREF")
|
|
578
620
|
if (child_element is not None):
|
|
579
621
|
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
580
622
|
data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
|
|
@@ -615,21 +657,45 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
615
657
|
else:
|
|
616
658
|
self._raiseError("Unsupported server call point type <%s>" % tag_name)
|
|
617
659
|
|
|
618
|
-
def
|
|
619
|
-
for child_element in
|
|
660
|
+
def readInternalTriggeringPoints(self, element: ET.Element, parent: RunnableEntity):
|
|
661
|
+
for child_element in self.findall(element, "INTERNAL-TRIGGERING-POINTS/INTERNAL-TRIGGERING-POINT"):
|
|
620
662
|
short_name = self.getShortName(child_element)
|
|
621
663
|
point = parent.createInternalTriggeringPoint(short_name)
|
|
622
664
|
point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
|
|
623
665
|
|
|
666
|
+
def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
|
|
667
|
+
iref = RModeInAtomicSwcInstanceRef()
|
|
668
|
+
iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
|
|
669
|
+
iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
|
|
670
|
+
iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
671
|
+
iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
|
|
672
|
+
return iref
|
|
673
|
+
|
|
674
|
+
def getRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element) -> RModeGroupInAtomicSWCInstanceRef:
|
|
675
|
+
child_element = self.find(element, "MODE-GROUP-IREF/R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
|
|
676
|
+
iref = None
|
|
677
|
+
if child_element is not None:
|
|
678
|
+
iref = RModeGroupInAtomicSWCInstanceRef()
|
|
679
|
+
iref.contextRPort = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
|
|
680
|
+
iref.targetModeGroup = self.getChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF")
|
|
681
|
+
return iref
|
|
682
|
+
|
|
683
|
+
def readModeAccessPoints(self, element: ET.Element, parent: RunnableEntity):
|
|
684
|
+
for child_element in self.findall(element, "MODE-ACCESS-POINTS/MODE-ACCESS-POINT"):
|
|
685
|
+
point = ModeAccessPoint()
|
|
686
|
+
point.modeGroupIRef = self.getRModeGroupInAtomicSWCInstanceRef(child_element)
|
|
687
|
+
parent.addModeAccessPoint(point)
|
|
688
|
+
|
|
624
689
|
def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
625
|
-
for child_element in
|
|
690
|
+
for child_element in self.findall(element, "RUNNABLES/RUNNABLE-ENTITY"):
|
|
626
691
|
short_name = self.getShortName(child_element)
|
|
627
692
|
entity = parent.createRunnableEntity(short_name)
|
|
628
693
|
self.logger.debug("readRunnableEntities %s" % short_name)
|
|
629
694
|
|
|
630
695
|
self.readExecutableEntity(child_element, entity)
|
|
631
|
-
entity.
|
|
696
|
+
entity.canBeInvokedConcurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
632
697
|
entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
698
|
+
entity.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDR-METHOD-REF")
|
|
633
699
|
|
|
634
700
|
self.readDataReceivePointByArguments(child_element, entity)
|
|
635
701
|
self.readDataReceivePointByValues(child_element, entity)
|
|
@@ -640,7 +706,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
640
706
|
self.readWrittenLocalVariables(child_element, entity)
|
|
641
707
|
self.readReadLocalVariables(child_element, entity)
|
|
642
708
|
self.readInternalBehaviorServerCallPoint(child_element, entity)
|
|
643
|
-
self.
|
|
709
|
+
self.readInternalTriggeringPoints(child_element, entity)
|
|
710
|
+
self.readModeAccessPoints(child_element, entity)
|
|
644
711
|
|
|
645
712
|
def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
|
|
646
713
|
iref = RModeInAtomicSwcInstanceRef()
|
|
@@ -691,16 +758,16 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
691
758
|
def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
|
|
692
759
|
prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
693
760
|
|
|
694
|
-
def readParameterDataPrototype(self, element: ET.Element,
|
|
695
|
-
short_name = self.getShortName(element)
|
|
696
|
-
prototype = behavior.createParameterDataPrototype(short_name)
|
|
761
|
+
def readParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
|
|
697
762
|
self.readIdentifiable(element, prototype)
|
|
698
763
|
self.readAutosarDataPrototype(element, prototype)
|
|
699
764
|
prototype.init_value = self.getInitValue(element)
|
|
700
765
|
|
|
701
|
-
def
|
|
766
|
+
def readPerInstanceParameters(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
702
767
|
for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
|
|
703
|
-
self.
|
|
768
|
+
short_name = self.getShortName(child_element)
|
|
769
|
+
prototype = behavior.createPerInstanceParameter(short_name)
|
|
770
|
+
self.readParameterDataPrototype(child_element, prototype)
|
|
704
771
|
|
|
705
772
|
def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
|
|
706
773
|
argument_value = PortDefinedArgumentValue()
|
|
@@ -720,12 +787,6 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
720
787
|
option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
|
|
721
788
|
behavior.addPortAPIOption(option)
|
|
722
789
|
|
|
723
|
-
def readInitEvents(self, element, parent: SwcInternalBehavior):
|
|
724
|
-
for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
|
|
725
|
-
short_name = self.getShortName(child_element)
|
|
726
|
-
event = parent.createInitEvent(short_name)
|
|
727
|
-
self.readRTEEvent(child_element, event)
|
|
728
|
-
|
|
729
790
|
def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
730
791
|
short_name = self.getShortName(element)
|
|
731
792
|
event = parent.createTimingEvent(short_name)
|
|
@@ -752,6 +813,11 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
752
813
|
self.readRTEEvent(element, event)
|
|
753
814
|
event.event_source_ref = self.getChildElementRefType(parent.short_name, element, "EVENT-SOURCE-REF")
|
|
754
815
|
|
|
816
|
+
def readInitEvent(self, element, parent: SwcInternalBehavior):
|
|
817
|
+
short_name = self.getShortName(element)
|
|
818
|
+
event = parent.createInitEvent(short_name)
|
|
819
|
+
self.readRTEEvent(element, event)
|
|
820
|
+
|
|
755
821
|
def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
756
822
|
for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
|
|
757
823
|
tag_name = self.getTagName(child_element.tag)
|
|
@@ -765,6 +831,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
765
831
|
self.readDataReceivedEvent(child_element, parent)
|
|
766
832
|
elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
|
|
767
833
|
self.readInternalTriggerOccurredEvent(child_element, parent)
|
|
834
|
+
elif tag_name == "INIT-EVENT":
|
|
835
|
+
self.readInitEvent(child_element, parent)
|
|
768
836
|
else:
|
|
769
837
|
self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
|
|
770
838
|
|
|
@@ -986,7 +1054,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
986
1054
|
def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
|
|
987
1055
|
com_spec = ClientComSpec()
|
|
988
1056
|
self.readElementAttributes(element, com_spec)
|
|
989
|
-
com_spec.
|
|
1057
|
+
com_spec.operationRef = self.getChildElementOptionalRefType(element, "OPERATION-REF")
|
|
990
1058
|
return com_spec
|
|
991
1059
|
|
|
992
1060
|
def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
|
|
@@ -995,6 +1063,12 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
995
1063
|
self.readReceiverComSpec(element, com_spec)
|
|
996
1064
|
com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
|
|
997
1065
|
return com_spec
|
|
1066
|
+
|
|
1067
|
+
def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
|
|
1068
|
+
com_spec = ModeSwitchReceiverComSpec()
|
|
1069
|
+
self.readElementAttributes(element, com_spec)
|
|
1070
|
+
com_spec.modeGroupRef = self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")
|
|
1071
|
+
return com_spec
|
|
998
1072
|
|
|
999
1073
|
def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
|
|
1000
1074
|
com_spec = NonqueuedReceiverComSpec()
|
|
@@ -1016,18 +1090,29 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1016
1090
|
parent.addRequiredComSpec(self.getClientComSpec(child_element))
|
|
1017
1091
|
elif tag_name == "QUEUED-RECEIVER-COM-SPEC":
|
|
1018
1092
|
parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
|
|
1093
|
+
elif tag_name == "MODE-SWITCH-RECEIVER-COM-SPEC":
|
|
1094
|
+
parent.addRequiredComSpec(self.getModeSwitchReceiverComSpec(child_element))
|
|
1019
1095
|
else:
|
|
1020
1096
|
self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
1021
1097
|
|
|
1022
1098
|
def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1099
|
+
short_name = self.getShortName(element)
|
|
1100
|
+
self.logger.debug("readRPortPrototype %s" % short_name)
|
|
1101
|
+
prototype = parent.createRPortPrototype(short_name)
|
|
1102
|
+
self.readIdentifiable(element, prototype)
|
|
1103
|
+
prototype.required_interface_tref = self.getChildElementOptionalRefType(element, "REQUIRED-INTERFACE-TREF")
|
|
1104
|
+
|
|
1105
|
+
self.readRequiredComSpec(element, prototype)
|
|
1029
1106
|
|
|
1030
|
-
|
|
1107
|
+
def readAtomicSwComponentTypePorts(self, element: ET.Element, sw_component: AtomicSwComponentType):
|
|
1108
|
+
for child_element in element.findall("./xmlns:PORTS/*", self.nsmap):
|
|
1109
|
+
tag_name = self.getTagName(child_element)
|
|
1110
|
+
if tag_name == "P-PORT-PROTOTYPE":
|
|
1111
|
+
self.readPPortPrototype(child_element, sw_component)
|
|
1112
|
+
elif tag_name == "R-PORT-PROTOTYPE":
|
|
1113
|
+
self.readRPortPrototype(child_element, sw_component)
|
|
1114
|
+
else:
|
|
1115
|
+
self._raiseError("Unsupported Port Prototype <%s>" % tag_name)
|
|
1031
1116
|
|
|
1032
1117
|
def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
|
|
1033
1118
|
child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
|
|
@@ -1069,17 +1154,16 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1069
1154
|
elif tag_name == "SERVER-COM-SPEC":
|
|
1070
1155
|
parent.addProvidedComSpec(self.getServerComSpec(child_element))
|
|
1071
1156
|
else:
|
|
1072
|
-
|
|
1157
|
+
self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
1073
1158
|
|
|
1074
1159
|
def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
prototype.provided_interface_tref = self.getChildElementOptionalRefType(child_element, "PROVIDED-INTERFACE-TREF")
|
|
1160
|
+
short_name = self.getShortName(element)
|
|
1161
|
+
self.logger.debug("readPPortPrototype %s" % short_name)
|
|
1162
|
+
prototype = parent.createPPortPrototype(short_name)
|
|
1163
|
+
self.readIdentifiable(element, prototype)
|
|
1164
|
+
prototype.provided_interface_tref = self.getChildElementOptionalRefType(element, "PROVIDED-INTERFACE-TREF")
|
|
1081
1165
|
|
|
1082
|
-
|
|
1166
|
+
self.readProvidedComSpec(element, prototype)
|
|
1083
1167
|
|
|
1084
1168
|
def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
|
|
1085
1169
|
for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
|
|
@@ -1110,8 +1194,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1110
1194
|
|
|
1111
1195
|
def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
|
|
1112
1196
|
self.readIdentifiable(element, parent)
|
|
1113
|
-
self.
|
|
1114
|
-
self.readPPortPrototype(element, parent)
|
|
1197
|
+
self.readAtomicSwComponentTypePorts(element, parent)
|
|
1115
1198
|
self.readSwComponentTypePortGroups(element, parent)
|
|
1116
1199
|
|
|
1117
1200
|
def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
|
|
@@ -1239,7 +1322,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1239
1322
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
1240
1323
|
self.logger.debug("readDataTypeMappingSet")
|
|
1241
1324
|
if child_element is not None:
|
|
1242
|
-
for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
1325
|
+
for ref in self.getChildElementRefTypeList(child_element, "./DATA-TYPE-MAPPING-REF"):
|
|
1243
1326
|
parent.addDataTypeMapping(ref)
|
|
1244
1327
|
|
|
1245
1328
|
def readCompositionSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
@@ -1269,6 +1352,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1269
1352
|
def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
1270
1353
|
for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
|
|
1271
1354
|
map = ModeRequestTypeMap()
|
|
1355
|
+
self.readElementAttributes(child_element, map)
|
|
1272
1356
|
map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
1273
1357
|
map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
|
|
1274
1358
|
parent.addModeRequestTypeMap(map)
|
|
@@ -1300,6 +1384,8 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1300
1384
|
for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
|
|
1301
1385
|
short_name = self.getShortName(child_element)
|
|
1302
1386
|
prototype = ArgumentDataPrototype(property, short_name)
|
|
1387
|
+
self.readIdentifiable(child_element, prototype)
|
|
1388
|
+
prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
1303
1389
|
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
1304
1390
|
prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
|
|
1305
1391
|
parent.addArgumentDataPrototype(prototype)
|
|
@@ -1307,13 +1393,14 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1307
1393
|
def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
|
|
1308
1394
|
child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
|
|
1309
1395
|
if child_element is not None:
|
|
1310
|
-
for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
|
|
1396
|
+
for ref in self.getChildElementRefTypeList(child_element, "./POSSIBLE-ERROR-REF"):
|
|
1311
1397
|
parent.addPossibleErrorRef(ref)
|
|
1312
1398
|
|
|
1313
1399
|
def readOperations(self, element: ET.Element, parent: ClientServerInterface):
|
|
1314
1400
|
for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
|
|
1315
1401
|
short_name = self.getShortName(child_element)
|
|
1316
1402
|
operation = parent.createOperation(short_name)
|
|
1403
|
+
self.readIdentifiable(child_element, operation)
|
|
1317
1404
|
self.readArgumentDataPrototypes(child_element, operation)
|
|
1318
1405
|
self.readPossibleErrorRefs(child_element, operation)
|
|
1319
1406
|
|
|
@@ -1330,6 +1417,7 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1330
1417
|
def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
|
|
1331
1418
|
short_name = self.getShortName(element)
|
|
1332
1419
|
cs_interface = parent.createClientServerInterface(short_name)
|
|
1420
|
+
self.readIdentifiable(element, cs_interface)
|
|
1333
1421
|
self.readPortInterface(element, cs_interface)
|
|
1334
1422
|
self.readOperations(element, cs_interface)
|
|
1335
1423
|
self.readPossibleErrors(element, cs_interface)
|
|
@@ -1550,10 +1638,10 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1550
1638
|
|
|
1551
1639
|
def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
|
|
1552
1640
|
iref = VariableDataPrototypeInSystemInstanceRef()
|
|
1553
|
-
iref.
|
|
1554
|
-
iref.
|
|
1555
|
-
iref.
|
|
1556
|
-
iref.
|
|
1641
|
+
iref.context_component_refs = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1642
|
+
iref.context_composition_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
|
|
1643
|
+
iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
|
|
1644
|
+
iref.target_data_prototype_ref = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
|
|
1557
1645
|
return iref
|
|
1558
1646
|
|
|
1559
1647
|
def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
|
|
@@ -1709,6 +1797,158 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1709
1797
|
self.readPortInterface(element, mode_interface)
|
|
1710
1798
|
self.readModeSwitchInterfaceModeGroup(element, mode_interface)
|
|
1711
1799
|
|
|
1800
|
+
def readEOCExecutableEntityRef(self, element: ET.Element, constraint: ExecutionOrderConstraint):
|
|
1801
|
+
short_name = self.getShortName(element)
|
|
1802
|
+
self.logger.debug("readEocExecutableEntityRef %s" % short_name)
|
|
1803
|
+
entity_ref = constraint.createEOCExecutableEntityRef(short_name)
|
|
1804
|
+
self.readIdentifiable(element, entity_ref)
|
|
1805
|
+
for ref in self.getChildElementRefTypeList(element, "SUCCESSOR-REFS/SUCCESSOR-REF"):
|
|
1806
|
+
entity_ref.addSuccessorRef(ref)
|
|
1807
|
+
|
|
1808
|
+
def readExecutionOrderConstraintOrderedElement(self, element: ET.Element, constrain: ExecutionOrderConstraint):
|
|
1809
|
+
for child_element in self.findall(element, "ORDERED-ELEMENTS/*"):
|
|
1810
|
+
tag_name = self.getTagName(child_element)
|
|
1811
|
+
if tag_name == "EOC-EXECUTABLE-ENTITY-REF":
|
|
1812
|
+
self.readEOCExecutableEntityRef(child_element, constrain)
|
|
1813
|
+
else:
|
|
1814
|
+
self._raiseError("Unsupported order element <%s>." % tag_name)
|
|
1815
|
+
|
|
1816
|
+
def readExecutionOrderConstraint(self, element: ET.Element, extension: TimingExtension):
|
|
1817
|
+
short_name = self.getShortName(element)
|
|
1818
|
+
self.logger.debug("readExecutionOrderConstraint %s" % short_name)
|
|
1819
|
+
constraint = extension.createExecutionOrderConstraint(short_name)
|
|
1820
|
+
self.readIdentifiable(element, constraint)
|
|
1821
|
+
self.readExecutionOrderConstraintOrderedElement(element, constraint)
|
|
1822
|
+
|
|
1823
|
+
def readTimingExtension(self, element: ET.Element, extension: TimingExtension):
|
|
1824
|
+
for child_element in self.findall(element, "TIMING-REQUIREMENTS/*"):
|
|
1825
|
+
tag_name = self.getTagName(child_element)
|
|
1826
|
+
if tag_name == "EXECUTION-ORDER-CONSTRAINT":
|
|
1827
|
+
self.readExecutionOrderConstraint(child_element, extension)
|
|
1828
|
+
else:
|
|
1829
|
+
self._raiseError("Unsupported timing requirement <%s>" % tag_name)
|
|
1830
|
+
|
|
1831
|
+
def readSwcTiming(self, element: ET.Element, parent: ARPackage):
|
|
1832
|
+
short_name = self.getShortName(element)
|
|
1833
|
+
self.logger.debug("readSwcTiming %s" % short_name)
|
|
1834
|
+
timing = parent.createSwcTiming(short_name)
|
|
1835
|
+
self.readIdentifiable(element, timing)
|
|
1836
|
+
self.readTimingExtension(element, timing)
|
|
1837
|
+
|
|
1838
|
+
def readLinCluster(self, element: ET.Element, parent: ARPackage):
|
|
1839
|
+
short_name = self.getShortName(element)
|
|
1840
|
+
self.logger.debug("readLinCluster %s" % short_name)
|
|
1841
|
+
cluster = parent.createLinCluster(short_name)
|
|
1842
|
+
self.readIdentifiable(element, cluster)
|
|
1843
|
+
|
|
1844
|
+
def readPduToFrameMappings(self, element: ET.Element, parent: Frame):
|
|
1845
|
+
for child_element in self.findall(element, "PDU-TO-FRAME-MAPPINGS/PDU-TO-FRAME-MAPPING"):
|
|
1846
|
+
short_name = self.getShortName(child_element)
|
|
1847
|
+
self.logger.debug("readPduToFrameMapping %s" % short_name)
|
|
1848
|
+
mapping = parent.createPduToFrameMapping(short_name)
|
|
1849
|
+
self.readIdentifiable(child_element, mapping)
|
|
1850
|
+
mapping.packingByteOrder = self.getChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER")
|
|
1851
|
+
mapping.pduRef = self.getChildElementOptionalRefType(child_element, "PDU-REF")
|
|
1852
|
+
mapping.startPosition = self.getChildElementOptionalNumericalValue(child_element, "START-POSITION")
|
|
1853
|
+
|
|
1854
|
+
def readFrame(self, element: ET.Element, frame: Frame):
|
|
1855
|
+
self.readIdentifiable(element, frame)
|
|
1856
|
+
frame.frameLength = self.getChildElementOptionalNumericalValue(element, "FRAME-LENGTH")
|
|
1857
|
+
self.readPduToFrameMappings(element, frame)
|
|
1858
|
+
|
|
1859
|
+
def readLinUnconditionalFrame(self, element: ET.Element, parent: ARPackage):
|
|
1860
|
+
short_name = self.getShortName(element)
|
|
1861
|
+
self.logger.debug("LinUnconditionalFrame %s" % short_name)
|
|
1862
|
+
frame = parent.createLinUnconditionalFrame(short_name)
|
|
1863
|
+
self.readFrame(element, frame)
|
|
1864
|
+
|
|
1865
|
+
def readNmPdu(self, element: ET.Element, parent: ARPackage):
|
|
1866
|
+
short_name = self.getShortName(element)
|
|
1867
|
+
self.logger.debug("readNmPdu %s" % short_name)
|
|
1868
|
+
pdu = parent.createNmPdu(short_name)
|
|
1869
|
+
self.readIdentifiable(element, pdu)
|
|
1870
|
+
|
|
1871
|
+
def readNPdu(self, element: ET.Element, parent: ARPackage):
|
|
1872
|
+
short_name = self.getShortName(element)
|
|
1873
|
+
self.logger.debug("readNPdu %s" % short_name)
|
|
1874
|
+
pdu = parent.createNPdu(short_name)
|
|
1875
|
+
self.readIdentifiable(element, pdu)
|
|
1876
|
+
|
|
1877
|
+
def readDcmIPdu(self, element: ET.Element, parent: ARPackage):
|
|
1878
|
+
short_name = self.getShortName(element)
|
|
1879
|
+
self.logger.debug("readDcmIPdu %s" % short_name)
|
|
1880
|
+
pdu = parent.createDcmIPdu(short_name)
|
|
1881
|
+
self.readIdentifiable(element, pdu)
|
|
1882
|
+
|
|
1883
|
+
def readNmConfig(self, element: ET.Element, parent: ARPackage):
|
|
1884
|
+
short_name = self.getShortName(element)
|
|
1885
|
+
self.logger.debug("NmConfig %s" % short_name)
|
|
1886
|
+
pdu = parent.createNmConfig(short_name)
|
|
1887
|
+
self.readIdentifiable(element, pdu)
|
|
1888
|
+
|
|
1889
|
+
def readCanTpConfig(self, element: ET.Element, parent: ARPackage):
|
|
1890
|
+
short_name = self.getShortName(element)
|
|
1891
|
+
self.logger.debug("CanTpConfig %s" % short_name)
|
|
1892
|
+
pdu = parent.createCanTpConfig(short_name)
|
|
1893
|
+
self.readIdentifiable(element, pdu)
|
|
1894
|
+
|
|
1895
|
+
def readCanFrame(self, element: ET.Element, parent: ARPackage):
|
|
1896
|
+
short_name = self.getShortName(element)
|
|
1897
|
+
self.logger.debug("CanFrame %s" % short_name)
|
|
1898
|
+
frame = parent.createCanFrame(short_name)
|
|
1899
|
+
self.readFrame(element, frame)
|
|
1900
|
+
|
|
1901
|
+
'''
|
|
1902
|
+
def getFrameMappings(self, element: ET.Element) -> List[FrameMapping]:
|
|
1903
|
+
mappings = []
|
|
1904
|
+
for child_element in self.findall(element, 'FRAME-MAPPINGS/'):
|
|
1905
|
+
mapping = FrameMapping()
|
|
1906
|
+
mapping.sourceFrameRef = self.getChildElementOptionalRefType(child_element, "SOURCE-FRAME-REF")
|
|
1907
|
+
mapping.targetFrameRef = self.getChildElementOptionalRefType(child_element, "TARGET-FRAME-REF")
|
|
1908
|
+
mappings.append(mapping)
|
|
1909
|
+
return mappings
|
|
1910
|
+
'''
|
|
1911
|
+
|
|
1912
|
+
def getISignalMappings(self, element: ET.Element) -> List[ISignalMapping]:
|
|
1913
|
+
mappings = []
|
|
1914
|
+
for child_element in self.findall(element, "SIGNAL-MAPPINGS/I-SIGNAL-MAPPING"):
|
|
1915
|
+
mapping = ISignalMapping()
|
|
1916
|
+
mapping.sourceSignalRef = self.getChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF")
|
|
1917
|
+
mapping.targetSignalRef = self.getChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF")
|
|
1918
|
+
mappings.append(mapping)
|
|
1919
|
+
return mappings
|
|
1920
|
+
|
|
1921
|
+
'''
|
|
1922
|
+
def getIPduMappings(self, element: ET.Element) -> List[IPduMapping]:
|
|
1923
|
+
mappings = []
|
|
1924
|
+
for child_element in self.findall(element, tag_name):
|
|
1925
|
+
mapping = IPduMapping()
|
|
1926
|
+
mapping.sourceIPduRef = self.getChildElementOptionalRefType(child_element, "SOURCE-IPDU-REF")
|
|
1927
|
+
mapping.targetIPduRef = self.getChildElementOptionalRefType(child_element, "TARGET-IPDU-REF")
|
|
1928
|
+
mappings.append(mapping)
|
|
1929
|
+
return mappings
|
|
1930
|
+
'''
|
|
1931
|
+
|
|
1932
|
+
def readGateway(self, element: ET.Element, parent: ARPackage):
|
|
1933
|
+
short_name = self.getShortName(element)
|
|
1934
|
+
self.logger.debug("Gateway %s" % short_name)
|
|
1935
|
+
gateway = parent.createGateway(short_name)
|
|
1936
|
+
self.readIdentifiable(element, gateway)
|
|
1937
|
+
gateway.ecuRef = self.getChildElementOptionalRefType(element, "ECU-REF")
|
|
1938
|
+
for mapping in self.getISignalMappings(element):
|
|
1939
|
+
gateway.addSignalMapping(mapping)
|
|
1940
|
+
|
|
1941
|
+
def readISignal(self, element: ET.Element, parent: ARPackage):
|
|
1942
|
+
short_name = self.getShortName(element)
|
|
1943
|
+
self.logger.debug("ISignal %s" % short_name)
|
|
1944
|
+
signal = parent.createISignal(short_name)
|
|
1945
|
+
self.readIdentifiable(element, signal)
|
|
1946
|
+
signal.dataTypePolicy = self.getChildElementOptionalLiteral(element, "DATA-TYPE-POLICY")
|
|
1947
|
+
signal.initValue = self.getInitValue(element)
|
|
1948
|
+
signal.length = self.getChildElementOptionalNumericalValue(element, "LENGTH")
|
|
1949
|
+
signal.networkRepresentationProps = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION-PROPS")
|
|
1950
|
+
signal.systemSignalRef = self.getChildElementOptionalRefType(element, "SYSTEM-SIGNAL-REF")
|
|
1951
|
+
|
|
1712
1952
|
def readARPackageElements(self, element: ET.Element, parent: ARPackage):
|
|
1713
1953
|
for child_element in self.findall(element, "./ELEMENTS/*"):
|
|
1714
1954
|
tag_name = self.getTagName(child_element.tag)
|
|
@@ -1770,19 +2010,36 @@ class ARXMLParser(AbstractARXMLParser):
|
|
|
1770
2010
|
self.readModeDeclarationGroup(child_element, parent)
|
|
1771
2011
|
elif tag_name == "MODE-SWITCH-INTERFACE":
|
|
1772
2012
|
self.readModeSwitchInterface(child_element, parent)
|
|
2013
|
+
elif tag_name == "SWC-TIMING":
|
|
2014
|
+
self.readSwcTiming(child_element, parent)
|
|
2015
|
+
elif tag_name == "LIN-CLUSTER":
|
|
2016
|
+
self.readLinCluster(child_element, parent)
|
|
2017
|
+
elif tag_name == "LIN-UNCONDITIONAL-FRAME":
|
|
2018
|
+
self.readLinUnconditionalFrame(child_element, parent)
|
|
2019
|
+
elif tag_name == "NM-PDU":
|
|
2020
|
+
self.readNmPdu(child_element, parent)
|
|
2021
|
+
elif tag_name == "N-PDU":
|
|
2022
|
+
self.readNPdu(child_element, parent)
|
|
2023
|
+
elif tag_name == "DCM-I-PDU":
|
|
2024
|
+
self.readDcmIPdu(child_element, parent)
|
|
2025
|
+
elif tag_name == "NM-CONFIG":
|
|
2026
|
+
self.readNmConfig(child_element, parent)
|
|
2027
|
+
elif tag_name == "CAN-TP-CONFIG":
|
|
2028
|
+
self.readCanTpConfig(child_element, parent)
|
|
1773
2029
|
elif tag_name == "SYSTEM":
|
|
1774
2030
|
pass
|
|
1775
2031
|
elif tag_name == "ECU-INSTANCE":
|
|
1776
2032
|
pass
|
|
1777
2033
|
elif tag_name == "GATEWAY":
|
|
1778
|
-
|
|
2034
|
+
self.readGateway(child_element, parent)
|
|
1779
2035
|
elif tag_name == "I-SIGNAL-I-PDU-GROUP":
|
|
1780
2036
|
pass
|
|
1781
2037
|
elif tag_name == "CAN-CLUSTER":
|
|
1782
2038
|
pass
|
|
1783
2039
|
elif tag_name == "CAN-FRAME":
|
|
1784
|
-
|
|
2040
|
+
self.readCanFrame(child_element, parent)
|
|
1785
2041
|
elif tag_name == "I-SIGNAL":
|
|
2042
|
+
self.readISignal(child_element, parent)
|
|
1786
2043
|
pass
|
|
1787
2044
|
elif tag_name == "I-SIGNAL-GROUP":
|
|
1788
2045
|
pass
|