armodel 1.3.0__py3-none-any.whl → 1.4.3__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/__init__.py +2 -1
- armodel/cli/arxml_dump_cli.py +8 -6
- armodel/cli/arxml_format_cli.py +72 -0
- armodel/cli/connector2xlsx_cli.py +75 -0
- armodel/cli/connector_update_cli.py +77 -0
- armodel/cli/swc_list_cli.py +2 -2
- armodel/data_models/__init__.py +0 -0
- armodel/data_models/sw_connector.py +22 -0
- armodel/lib/__init__.py +1 -1
- armodel/lib/sw_component.py +34 -0
- armodel/models/__init__.py +8 -2
- armodel/models/annotation.py +20 -0
- armodel/models/ar_object.py +184 -0
- armodel/models/ar_package.py +144 -14
- armodel/models/ar_ref.py +74 -8
- armodel/models/bsw_module_template.py +97 -25
- armodel/models/calibration.py +119 -0
- armodel/models/common_structure.py +203 -36
- armodel/models/communication.py +17 -0
- armodel/models/data_def_properties.py +16 -0
- armodel/models/data_dictionary.py +46 -9
- armodel/models/data_prototype.py +24 -5
- armodel/models/datatype.py +86 -19
- armodel/models/end_to_end_protection.py +67 -0
- armodel/models/general_structure.py +72 -17
- armodel/models/global_constraints.py +40 -0
- armodel/models/implementation.py +80 -32
- armodel/models/m2_msr.py +82 -6
- armodel/models/multilanguage_data.py +42 -0
- armodel/models/per_instance_memory.py +14 -0
- armodel/models/port_interface.py +27 -4
- armodel/models/port_prototype.py +48 -23
- armodel/models/record_layout.py +118 -0
- armodel/models/service_mapping.py +11 -0
- armodel/models/service_needs.py +48 -0
- armodel/models/sw_component.py +257 -43
- armodel/models/unit.py +14 -0
- armodel/parser/abstract_arxml_parser.py +248 -0
- armodel/parser/arxml_parser.py +1550 -648
- armodel/parser/connector_xlsx_parser.py +190 -0
- armodel/parser/excel_parser.py +18 -0
- armodel/report/__init__.py +1 -0
- armodel/report/connector_xls_report.py +76 -0
- armodel/report/excel_report.py +42 -0
- armodel/tests/__init__.py +0 -0
- armodel/tests/test_armodel/__init__.py +0 -0
- armodel/tests/test_armodel/models/__init__.py +0 -0
- armodel/tests/test_armodel/models/test_ar_object.py +152 -0
- armodel/tests/test_armodel/models/test_ar_package.py +294 -0
- armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
- armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
- armodel/tests/test_armodel/models/test_common_structure.py +73 -0
- armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
- armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
- armodel/tests/test_armodel/models/test_datatype.py +239 -0
- armodel/tests/test_armodel/models/test_general_structure.py +50 -0
- armodel/tests/test_armodel/models/test_implementation.py +26 -0
- armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
- armodel/tests/test_armodel/models/test_port_interface.py +198 -0
- armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
- armodel/tests/test_armodel/parser/__init__.py +0 -0
- armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +192 -0
- armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
- armodel/writer/__init__.py +1 -0
- armodel/writer/abstract_arxml_writer.py +123 -0
- armodel/writer/arxml_writer.py +1755 -0
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/METADATA +124 -4
- armodel-1.4.3.dist-info/RECORD +78 -0
- armodel-1.4.3.dist-info/entry_points.txt +7 -0
- armodel-1.3.0.dist-info/RECORD +0 -31
- armodel-1.3.0.dist-info/entry_points.txt +0 -4
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/LICENSE +0 -0
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/WHEEL +0 -0
- {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/top_level.txt +0 -0
armodel/parser/arxml_parser.py
CHANGED
|
@@ -1,161 +1,153 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import xml.etree.ElementTree as ET
|
|
2
|
+
|
|
3
|
+
from armodel.models.bsw_module_template import BswModeSenderPolicy
|
|
4
|
+
|
|
5
|
+
from .abstract_arxml_parser import AbstractARXMLParser
|
|
6
|
+
|
|
7
|
+
from ..models.port_interface import ModeSwitchInterface, PortInterface
|
|
8
|
+
from ..models.common_structure import MemorySection, ModeDeclarationGroup, ModeDeclarationGroupPrototype, ModeRequestTypeMap
|
|
9
|
+
from ..models.implementation import BswImplementation, EngineeringObject
|
|
10
|
+
from ..models.general_structure import MultilanguageReferrable
|
|
11
|
+
from ..models.multilanguage_data import LOverviewParagraph, MultiLanguageOverviewParagraph, LLongName, MultilanguageLongName
|
|
12
|
+
from ..models.data_def_properties import ValueList
|
|
13
|
+
from ..models.record_layout import SwRecordLayoutGroup, SwRecordLayoutGroupContent, SwRecordLayoutV
|
|
14
|
+
from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, AutosarDataType, BaseTypeDirectDefinition
|
|
15
|
+
from ..models.calibration import SwAxisGrouped, SwAxisIndividual, SwCalprmAxis, SwCalprmAxisSet
|
|
16
|
+
from ..models.communication import CompositeNetworkRepresentation
|
|
17
|
+
from ..models.end_to_end_protection import EndToEndDescription, EndToEndProtection, EndToEndProtectionSet, EndToEndProtectionVariablePrototype
|
|
18
|
+
from ..models.service_mapping import RoleBasedPortAssignment
|
|
19
|
+
from ..models.ar_package import AUTOSAR, ARPackage
|
|
20
|
+
from ..models.ar_object import ARLiteral
|
|
21
|
+
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
|
|
26
|
+
from ..models.annotation import Annotation, GeneralAnnotation
|
|
27
|
+
from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
|
|
28
|
+
|
|
29
|
+
from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
|
|
3
30
|
from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
|
|
4
|
-
from ..models import
|
|
31
|
+
from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
|
|
5
32
|
from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
|
|
6
|
-
from ..models import
|
|
7
|
-
from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
|
|
8
|
-
from ..models import SenderComSpec, NonqueuedSenderComSpec
|
|
33
|
+
from ..models import RPortPrototype, PPortPrototype
|
|
34
|
+
from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec
|
|
35
|
+
from ..models import SenderComSpec, NonqueuedSenderComSpec, ServerComSpec
|
|
9
36
|
from ..models import SenderReceiverInterface, ClientServerInterface, ClientServerOperation, ArgumentDataPrototype
|
|
10
|
-
from ..models import
|
|
11
|
-
from ..models import AssemblySwConnector,
|
|
12
|
-
from ..models import
|
|
37
|
+
from ..models import Identifiable, AdminData, Sdg, Sd
|
|
38
|
+
from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
|
|
39
|
+
from ..models import DelegationSwConnector
|
|
40
|
+
from ..models import CompuMethod, CompuScale, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
|
|
13
41
|
from ..models import InternalBehavior, ExecutableEntity
|
|
14
42
|
from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
|
|
15
|
-
from ..models import
|
|
16
|
-
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
|
|
20
|
-
import
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
|
|
26
|
-
self.options = {}
|
|
27
|
-
self.options['warning'] = False
|
|
28
|
-
self.logger = logging.getLogger()
|
|
43
|
+
from ..models import TransmissionAcknowledgementRequest
|
|
44
|
+
from ..models import BswModuleDescription, BswInternalBehavior, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
|
|
45
|
+
from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
|
|
46
|
+
from ..models import RecordValueSpecification
|
|
47
|
+
from ..models import ApplicationRecordDataType
|
|
48
|
+
from ..models import SwValueCont, SwValues
|
|
49
|
+
|
|
50
|
+
class ARXMLParser(AbstractARXMLParser):
|
|
51
|
+
def __init__(self, options=None) -> None:
|
|
52
|
+
super().__init__(options)
|
|
29
53
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
self.options['warning'] = options['warning']
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def _raiseError(self, error_msg):
|
|
39
|
-
if (self.options['warning'] == True):
|
|
40
|
-
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
41
|
-
else:
|
|
42
|
-
raise ValueError(error_msg)
|
|
43
|
-
|
|
44
|
-
def getPureTagName(self, tag):
|
|
45
|
-
return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
|
|
46
|
-
|
|
47
|
-
def readChildElement(self, short_name: str, element, key: str) -> str:
|
|
48
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
49
|
-
if (child_element != None):
|
|
50
|
-
return child_element.text
|
|
51
|
-
self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
|
|
52
|
-
|
|
53
|
-
def readChildOptionalElement(self, element, key) -> str:
|
|
54
|
-
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
55
|
-
if (child_element != None):
|
|
56
|
-
return child_element.text
|
|
57
|
-
return None
|
|
58
|
-
|
|
59
|
-
def _convertStringToBooleanValue(self, value) -> bool:
|
|
60
|
-
if (value == "true"):
|
|
61
|
-
return True
|
|
62
|
-
return False
|
|
63
|
-
|
|
64
|
-
def readChildElementFloatValue(self, short_name, element, key) -> float:
|
|
65
|
-
value = self.readChildElement(short_name, element, key)
|
|
66
|
-
if (value == None):
|
|
67
|
-
return None
|
|
68
|
-
return float(value)
|
|
69
|
-
|
|
70
|
-
def readChildElementBooleanValue(self, short_name, element, key) -> bool:
|
|
71
|
-
value = self.readChildElement(short_name, element, key)
|
|
72
|
-
return self._convertStringToBooleanValue(value)
|
|
73
|
-
|
|
74
|
-
def readChildOptionalElementBooleanValue(self, element, key) -> bool:
|
|
75
|
-
value = self.readChildOptionalElement(element, key)
|
|
76
|
-
if (value == None):
|
|
77
|
-
return None
|
|
78
|
-
return self._convertStringToBooleanValue(value)
|
|
79
|
-
|
|
80
|
-
def _convertStringToNumberValue(self, value) -> int:
|
|
81
|
-
m = re.match(r"0x([0-9a-f]+)", value, re.I)
|
|
82
|
-
if (m):
|
|
83
|
-
return int(m.group(1), 16)
|
|
84
|
-
return int(value)
|
|
85
|
-
|
|
86
|
-
def readChildElementNumberValue(self, short_name, element, key) -> int:
|
|
87
|
-
value = self.readChildElement(short_name, element, key)
|
|
88
|
-
return self._convertStringToNumberValue(value)
|
|
89
|
-
|
|
90
|
-
def readChildOptionalElementNumberValue(self, element, key) -> int:
|
|
91
|
-
value = self.readChildOptionalElement(element, key)
|
|
92
|
-
if (value == None):
|
|
93
|
-
return None
|
|
94
|
-
return self._convertStringToNumberValue(value)
|
|
54
|
+
def getShortName(self, element: ET.Element) -> str:
|
|
55
|
+
child_element = self.find(element, "SHORT-NAME")
|
|
56
|
+
if child_element is None:
|
|
57
|
+
raise ValueError("Short Name is required")
|
|
58
|
+
return child_element.text
|
|
95
59
|
|
|
96
|
-
def
|
|
97
|
-
child_element
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
limit.interval_type = child_element.attrib['INTERVAL-TYPE']
|
|
102
|
-
else:
|
|
103
|
-
limit.interval_type = "CLOSED"
|
|
104
|
-
limit.value = child_element.text
|
|
105
|
-
return limit
|
|
106
|
-
return None
|
|
60
|
+
def readSd(self, element: ET.Element, sdg: Sdg):
|
|
61
|
+
for child_element in element.findall("./xmlns:SD", self.nsmap):
|
|
62
|
+
sd = Sd()
|
|
63
|
+
sd.gid = child_element.attrib['GID']
|
|
64
|
+
sd.value = child_element.text
|
|
107
65
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
66
|
+
sdg.addSd(sd)
|
|
67
|
+
|
|
68
|
+
def readSdg(self, element: ET.Element, admin_data: AdminData):
|
|
69
|
+
for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
|
|
70
|
+
sdg = Sdg()
|
|
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)
|
|
75
|
+
|
|
76
|
+
def readAdminData(self, element: ET.Element, identifiable: Identifiable):
|
|
77
|
+
child_element = element.find("./xmlns:ADMIN-DATA", self.nsmap)
|
|
78
|
+
if child_element is not None:
|
|
79
|
+
self.logger.debug("readAdminData")
|
|
80
|
+
admin_data = AdminData()
|
|
81
|
+
self.readSdg(child_element, admin_data)
|
|
82
|
+
identifiable.admin_data = admin_data
|
|
83
|
+
|
|
84
|
+
def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
85
|
+
self.readElementAttributes(element, referrable)
|
|
86
|
+
referrable.long_name = self.getMultilanguageLongName(element, "LONG-NAME")
|
|
87
|
+
|
|
88
|
+
def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
|
|
89
|
+
self.readMultilanguageReferrable(element, identifiable)
|
|
90
|
+
identifiable.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
91
|
+
identifiable.desc = self.getMultiLanguageOverviewParagraph(element, "DESC")
|
|
92
|
+
self.readAdminData(element, identifiable)
|
|
93
|
+
|
|
94
|
+
def readLLongName(self, element: ET.Element, long_name: MultilanguageLongName):
|
|
95
|
+
for child_element in element.findall("./xmlns:L-4", self.nsmap):
|
|
96
|
+
l4 = LLongName()
|
|
97
|
+
self.readElementAttributes(child_element, l4)
|
|
98
|
+
l4.value = child_element.text
|
|
99
|
+
if 'L' in child_element.attrib:
|
|
100
|
+
l4.l = child_element.attrib['L']
|
|
101
|
+
long_name.addL4(l4)
|
|
102
|
+
|
|
103
|
+
def getMultilanguageLongName(self, element: ET.Element, key: str) -> MultilanguageLongName:
|
|
104
|
+
long_name = None
|
|
118
105
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
119
|
-
if
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
106
|
+
if child_element is not None:
|
|
107
|
+
long_name = MultilanguageLongName()
|
|
108
|
+
self.readElementAttributes(child_element, long_name)
|
|
109
|
+
self.readLLongName(child_element, long_name)
|
|
110
|
+
return long_name
|
|
111
|
+
|
|
112
|
+
def readLOverviewParagraph(self, element: ET.Element, paragraph: MultiLanguageOverviewParagraph):
|
|
113
|
+
for child_element in element.findall("./xmlns:L-2", self.nsmap):
|
|
114
|
+
l2 = LOverviewParagraph()
|
|
115
|
+
self.readElementAttributes(child_element, l2)
|
|
116
|
+
l2.value = child_element.text
|
|
117
|
+
if 'L' in child_element.attrib:
|
|
118
|
+
l2.l = child_element.attrib['L']
|
|
119
|
+
paragraph.addL2(l2)
|
|
120
|
+
|
|
121
|
+
def getMultiLanguageOverviewParagraph(self, element: ET.Element, key: str) -> MultiLanguageOverviewParagraph:
|
|
122
|
+
paragraph = None
|
|
124
123
|
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
125
|
-
if
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
|
|
131
|
-
results = []
|
|
132
|
-
for child_element in child_elements:
|
|
133
|
-
ref = RefType()
|
|
134
|
-
ref.dest = child_element.attrib['DEST']
|
|
135
|
-
ref.value = child_element.text
|
|
136
|
-
results.append(ref)
|
|
137
|
-
return results
|
|
124
|
+
if child_element is not None:
|
|
125
|
+
paragraph = MultiLanguageOverviewParagraph()
|
|
126
|
+
self.readElementAttributes(child_element, paragraph)
|
|
127
|
+
self.readLOverviewParagraph(child_element, paragraph)
|
|
128
|
+
return paragraph
|
|
138
129
|
|
|
139
130
|
def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
|
|
140
131
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
141
|
-
if (child_element
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
if
|
|
132
|
+
if (child_element is not None):
|
|
133
|
+
autosar_variable_iref = VariableInAtomicSWCTypeInstanceRef()
|
|
134
|
+
autosar_variable_iref.port_prototype_ref = self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF")
|
|
135
|
+
if autosar_variable_iref.port_prototype_ref is None:
|
|
145
136
|
self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
146
|
-
|
|
147
|
-
if
|
|
137
|
+
autosar_variable_iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
138
|
+
if autosar_variable_iref.target_data_prototype_ref is None:
|
|
148
139
|
self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
149
|
-
accessed_variable_ref.
|
|
140
|
+
accessed_variable_ref.autosar_variable_iref = autosar_variable_iref
|
|
150
141
|
|
|
151
142
|
def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
152
143
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
|
|
153
|
-
if (child_element
|
|
154
|
-
accessed_variable_ref.local_variable_ref = self.
|
|
144
|
+
if (child_element is not None):
|
|
145
|
+
accessed_variable_ref.local_variable_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF")
|
|
155
146
|
|
|
156
|
-
def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
|
|
147
|
+
def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
|
|
157
148
|
for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
|
|
158
|
-
short_name = self.
|
|
149
|
+
short_name = self.getShortName(child_element)
|
|
150
|
+
|
|
159
151
|
self.logger.debug("readVariableAccesses %s" % short_name)
|
|
160
152
|
|
|
161
153
|
if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
|
|
@@ -167,6 +159,9 @@ class ARXMLParser:
|
|
|
167
159
|
elif (key == "DATA-READ-ACCESSS"):
|
|
168
160
|
variable_access = parent.createDataReadAccess(short_name)
|
|
169
161
|
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
162
|
+
elif (key == "DATA-WRITE-ACCESSS"):
|
|
163
|
+
variable_access = parent.createDataWriteAccess(short_name)
|
|
164
|
+
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
170
165
|
elif (key == "DATA-SEND-POINTS"):
|
|
171
166
|
variable_access = parent.createDataSendPoint(short_name)
|
|
172
167
|
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
@@ -179,733 +174,1641 @@ class ARXMLParser:
|
|
|
179
174
|
else:
|
|
180
175
|
self._raiseError("Invalid key type <%s>" % key)
|
|
181
176
|
|
|
182
|
-
|
|
177
|
+
self.readIdentifiable(child_element, variable_access)
|
|
178
|
+
|
|
179
|
+
def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
|
|
183
180
|
for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
|
|
184
|
-
ref = self.
|
|
185
|
-
if (ref
|
|
186
|
-
parent.
|
|
181
|
+
ref = self.getChildElementOptionalRefType(child_element, "BSW-MODULE-ENTRY-REF")
|
|
182
|
+
if (ref is not None):
|
|
183
|
+
parent.addImplementedEntry(ref)
|
|
187
184
|
self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
|
|
188
185
|
|
|
189
|
-
def
|
|
186
|
+
def readModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
|
|
187
|
+
self.readIdentifiable(element, prototype)
|
|
188
|
+
prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
189
|
+
|
|
190
|
+
def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
190
191
|
for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
191
|
-
short_name = self.
|
|
192
|
+
short_name = self.getShortName(child_element)
|
|
192
193
|
self.logger.debug("readProvidedModeGroup %s" % short_name)
|
|
193
194
|
|
|
194
195
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
195
|
-
|
|
196
|
+
self.readModeDeclarationGroupPrototype(child_element, mode_group)
|
|
196
197
|
|
|
197
|
-
def readRequiredModeGroup(self, element, parent: BswModuleDescription):
|
|
198
|
+
def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
198
199
|
for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
199
|
-
short_name = self.
|
|
200
|
+
short_name = self.getShortName(child_element)
|
|
200
201
|
self.logger.debug("readRequiredModeGroup %s" % short_name)
|
|
201
202
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
202
|
-
mode_group.type_tref = self.
|
|
203
|
+
mode_group.type_tref = self.getChildElementRefType(parent.short_name, child_element, "TYPE-TREF")
|
|
203
204
|
|
|
204
|
-
def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
|
|
205
|
+
def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
|
|
205
206
|
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
206
|
-
if child_element
|
|
207
|
-
for ref in self.
|
|
207
|
+
if child_element is not None:
|
|
208
|
+
for ref in self.getChildElementRefTypeList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
208
209
|
entity.addCanEnterExclusiveAreaRef(ref)
|
|
209
210
|
|
|
210
|
-
def readExecutableEntity(self, element, entity: ExecutableEntity):
|
|
211
|
+
def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
212
|
+
self.logger.debug("readExecutableEntity %s" % entity.short_name)
|
|
213
|
+
self.readIdentifiable(element, entity)
|
|
211
214
|
self.readCanEnterExclusiveAreaRefs(element, entity)
|
|
215
|
+
entity.minimum_start_interval = self.getChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL")
|
|
216
|
+
|
|
217
|
+
def readBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
|
|
218
|
+
for child_element in self.findall(element, "./MANAGED-MODE-GROUPS/MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL"):
|
|
219
|
+
ref_type = self.getChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
220
|
+
if ref_type is not None:
|
|
221
|
+
entity.addManagedModeGroupRef(ref_type)
|
|
212
222
|
|
|
213
|
-
def readBswModuleEntity(self, element, entity: BswModuleEntity):
|
|
223
|
+
def readBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
|
|
214
224
|
self.readExecutableEntity(element, entity)
|
|
215
|
-
|
|
216
|
-
|
|
225
|
+
entity.implemented_entry_ref = self.getChildElementRefType(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
|
|
226
|
+
self.readBswModuleEntityManagedModeGroup(element, entity)
|
|
217
227
|
|
|
218
|
-
def readBswCalledEntity(self, element, parent: BswInternalBehavior):
|
|
228
|
+
def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
219
229
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
|
|
220
|
-
short_name = self.
|
|
230
|
+
short_name = self.getShortName(child_element)
|
|
221
231
|
self.logger.debug("readBswCalledEntity %s" % short_name)
|
|
222
232
|
entity = parent.createBswCalledEntity(short_name)
|
|
223
233
|
|
|
224
234
|
self.readBswModuleEntity(child_element, entity)
|
|
225
235
|
|
|
226
|
-
def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
|
|
236
|
+
def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
|
|
227
237
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
|
|
228
|
-
short_name = self.
|
|
238
|
+
short_name = self.getShortName(child_element)
|
|
229
239
|
self.logger.debug("readBswSchedulableEntity %s" % short_name)
|
|
230
240
|
entity = parent.createBswSchedulableEntity(short_name)
|
|
231
|
-
|
|
232
241
|
self.readBswModuleEntity(child_element, entity)
|
|
233
242
|
|
|
234
|
-
def readBswEvent(self, element, event: BswScheduleEvent):
|
|
235
|
-
event.
|
|
243
|
+
def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
244
|
+
event.startsOnEventRef = self.getChildElementRefType(event.short_name, element, "STARTS-ON-EVENT-REF")
|
|
236
245
|
|
|
237
246
|
def readBswScheduleEvent(self, element, event: BswScheduleEvent):
|
|
238
247
|
self.readBswEvent(element, event)
|
|
239
248
|
|
|
240
|
-
def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
|
|
249
|
+
def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
241
250
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
|
|
242
|
-
short_name = self.
|
|
251
|
+
short_name = self.getShortName(child_element)
|
|
243
252
|
self.logger.debug("readBswModeSwitchEvent %s" % short_name)
|
|
244
253
|
event = parent.createBswModeSwitchEvent(short_name)
|
|
245
|
-
|
|
254
|
+
# Read the Inherit BswScheduleEvent
|
|
246
255
|
self.readBswScheduleEvent(child_element, event)
|
|
247
256
|
|
|
248
|
-
def readBswTimingEvent(self, element, parent: BswInternalBehavior):
|
|
257
|
+
def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
249
258
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
|
|
250
|
-
short_name = self.
|
|
259
|
+
short_name = self.getShortName(child_element)
|
|
251
260
|
self.logger.debug("readBswTimingEvent %s" % short_name)
|
|
252
261
|
event = parent.createBswTimingEvent(short_name)
|
|
253
|
-
event.period = self.
|
|
254
|
-
|
|
262
|
+
event.period = self.getChildElementOptionalFloatValue(child_element, "PERIOD")
|
|
263
|
+
# Read the Inherit BswScheduleEvent
|
|
255
264
|
self.readBswScheduleEvent(child_element, event)
|
|
256
265
|
|
|
257
|
-
def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
|
|
266
|
+
def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
258
267
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
|
|
259
|
-
short_name = self.
|
|
268
|
+
short_name = self.getShortName(child_element)
|
|
260
269
|
self.logger.debug("readBswDataReceivedEvent %s" % short_name)
|
|
261
270
|
event = parent.createBswDataReceivedEvent(short_name)
|
|
262
|
-
event.data_ref = self.
|
|
263
|
-
|
|
271
|
+
event.data_ref = self.getChildElementRefType(parent.short_name, child_element, "DATA-REF")
|
|
272
|
+
# Read the Inherit BswScheduleEvent
|
|
264
273
|
self.readBswScheduleEvent(child_element, event)
|
|
265
274
|
|
|
266
|
-
def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
|
|
267
|
-
for child_element in
|
|
268
|
-
short_name = self.
|
|
275
|
+
def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
|
|
276
|
+
for child_element in self.findall(element, "./EVENTS/BSW-INTERNAL-TRIGGER-OCCURRED-EVENT"):
|
|
277
|
+
short_name = self.getShortName(child_element)
|
|
269
278
|
self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
|
|
270
279
|
event = parent.createBswInternalTriggerOccurredEvent(short_name)
|
|
271
|
-
event.event_source_ref = self.
|
|
272
|
-
|
|
280
|
+
event.event_source_ref = self.getChildElementRefType(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
281
|
+
# Read the Inherit BswScheduleEvent
|
|
273
282
|
self.readBswScheduleEvent(child_element, event)
|
|
274
283
|
|
|
275
|
-
def
|
|
284
|
+
def getBswModeSenderPolicy(self, element: ET.Element) -> BswModeSenderPolicy:
|
|
285
|
+
policy = BswModeSenderPolicy()
|
|
286
|
+
policy.setProvidedModeGroupRef(self.getChildElementOptionalRefType(element, "PROVIDED-MODE-GROUP-REF"))
|
|
287
|
+
policy.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
|
|
288
|
+
return policy
|
|
289
|
+
|
|
290
|
+
def readBswInternalBehaviorModeSenderPolicy(self, element: ET.Element, parent: BswInternalBehavior):
|
|
291
|
+
for child_element in self.findall(element, "./MODE-SENDER-POLICYS/*"):
|
|
292
|
+
tag_name = self.getTagName(child_element)
|
|
293
|
+
if tag_name == "BSW-MODE-SENDER-POLICY":
|
|
294
|
+
parent.addModeSenderPolicy(self.getBswModeSenderPolicy(child_element))
|
|
295
|
+
else:
|
|
296
|
+
self._raiseError("Unsupported ModeSenderPolicy type <%s>." % tag_name)
|
|
297
|
+
|
|
298
|
+
def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
|
|
276
299
|
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
277
|
-
if child_element
|
|
278
|
-
for ref in self.
|
|
300
|
+
if child_element is not None:
|
|
301
|
+
for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
279
302
|
behavior.addDataTypeMappingRef(ref)
|
|
280
303
|
|
|
281
|
-
def readInternalBehavior(self, element, behavior: InternalBehavior):
|
|
304
|
+
def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
|
|
305
|
+
self.readIdentifiable(element, behavior)
|
|
282
306
|
for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
|
|
283
|
-
short_name = self.
|
|
307
|
+
short_name = self.getShortName(child_element)
|
|
284
308
|
behavior.createExclusiveArea(short_name)
|
|
285
|
-
|
|
286
309
|
self.readDataTypeMappingRefs(element, behavior)
|
|
287
310
|
|
|
288
|
-
def
|
|
311
|
+
def getRoleBasedDataAssignment(self, element: ET.Element) -> RoleBasedDataAssignment:
|
|
312
|
+
assignment = RoleBasedDataAssignment()
|
|
313
|
+
assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
|
|
314
|
+
assignment.used_parameter_element = self.getAutosarParameterRef(element, "USED-PARAMETER-ELEMENT")
|
|
315
|
+
assignment.used_pim_ref = self.getChildElementOptionalRefType(element, "USED-PIM-REF")
|
|
316
|
+
return assignment
|
|
317
|
+
|
|
318
|
+
def getRoleBasedPortAssignment(self, element: ET.Element) -> RoleBasedPortAssignment:
|
|
319
|
+
assignment = RoleBasedPortAssignment()
|
|
320
|
+
assignment.port_prototype_ref = self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF")
|
|
321
|
+
assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
|
|
322
|
+
return assignment
|
|
323
|
+
|
|
324
|
+
def readServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
|
|
325
|
+
self.readIdentifiable(element, dependency)
|
|
326
|
+
|
|
327
|
+
def readSwcServiceDependencyAssignedData(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
328
|
+
for child_element in element.findall("./xmlns:ASSIGNED-DATAS/*", self.nsmap):
|
|
329
|
+
tag_name = self.getTagName(child_element.tag)
|
|
330
|
+
if (tag_name == "ROLE-BASED-DATA-ASSIGNMENT"):
|
|
331
|
+
dependency.AddAssignedData(self.getRoleBasedDataAssignment(child_element))
|
|
332
|
+
else:
|
|
333
|
+
self._raiseError("Unsupported assigned data <%s>" % tag_name)
|
|
334
|
+
|
|
335
|
+
def readSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
336
|
+
for child_element in element.findall("./xmlns:ASSIGNED-PORTS/*", self.nsmap):
|
|
337
|
+
tag_name = self.getTagName(child_element.tag)
|
|
338
|
+
if (tag_name == "ROLE-BASED-PORT-ASSIGNMENT"):
|
|
339
|
+
dependency.AddAssignedPort(self.getRoleBasedPortAssignment(child_element))
|
|
340
|
+
else:
|
|
341
|
+
self._raiseError("Unsupported assigned ports <%s>" % tag_name)
|
|
342
|
+
|
|
343
|
+
def readNvBlockNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
344
|
+
short_name = self.getShortName(element)
|
|
345
|
+
needs = parent.createNvBlockNeeds(short_name)
|
|
346
|
+
self.logger.debug("readNvBlockNeeds %s" % short_name)
|
|
347
|
+
needs.calc_ram_block_crc = self.getChildElementOptionalBooleanValue(element, "CALC-RAM-BLOCK-CRC")
|
|
348
|
+
needs.check_static_block_id = self.getChildElementOptionalBooleanValue(element, "CHECK-STATIC-BLOCK-ID")
|
|
349
|
+
needs.n_data_sets = self.getChildElementOptionalNumericalValue(element, "N-DATA-SETS")
|
|
350
|
+
needs.n_rom_blocks = self.getChildElementOptionalNumericalValue(element, "N-ROM-BLOCKS")
|
|
351
|
+
needs.readonly = self.getChildElementOptionalBooleanValue(element, "READONLY")
|
|
352
|
+
needs.reliability = self.getChildElementOptionalLiteral(element, "RELIABILITY")
|
|
353
|
+
needs.resistant_to_changed_sw = self.getChildElementOptionalBooleanValue(element, "RESISTANT-TO-CHANGED-SW")
|
|
354
|
+
needs.restore_at_start = self.getChildElementOptionalBooleanValue(element, "RESTORE-AT-START")
|
|
355
|
+
needs.store_at_shutdown = self.getChildElementOptionalBooleanValue(element, "STORE-AT-SHUTDOWN")
|
|
356
|
+
needs.write_only_once = self.getChildElementOptionalBooleanValue(element, "WRITE-ONLY-ONCE")
|
|
357
|
+
needs.write_verification = self.getChildElementOptionalBooleanValue(element, "WRITE-VERIFICATION")
|
|
358
|
+
needs.writing_priority = self.getChildElementOptionalLiteral(element, "WRITING-PRIORITY")
|
|
359
|
+
|
|
360
|
+
def readSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
361
|
+
for child_element in element.findall("./xmlns:SERVICE-NEEDS/*", self.nsmap):
|
|
362
|
+
tag_name = self.getTagName(child_element.tag)
|
|
363
|
+
if tag_name == "NV-BLOCK-NEEDS":
|
|
364
|
+
self.readNvBlockNeeds(child_element, parent)
|
|
365
|
+
else:
|
|
366
|
+
self._raiseError("Unsupported service needs <%s>" % tag_name)
|
|
367
|
+
|
|
368
|
+
def readSwcServiceDependency(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
369
|
+
short_name = self.getShortName(element)
|
|
370
|
+
dependency = parent.createSwcServiceDependency(short_name)
|
|
371
|
+
self.logger.debug("readSwcServiceDependency %s" % short_name)
|
|
372
|
+
self.readServiceDependency(element, dependency)
|
|
373
|
+
self.readSwcServiceDependencyAssignedData(element, dependency)
|
|
374
|
+
self.readSwcServiceDependencyAssignedPorts(element, dependency)
|
|
375
|
+
self.readSwcServiceDependencyServiceNeeds(element, dependency)
|
|
376
|
+
|
|
377
|
+
def readSwcInternalBehaviorServiceDependencies(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
378
|
+
for child_element in element.findall("./xmlns:SERVICE-DEPENDENCYS/*", self.nsmap):
|
|
379
|
+
tag_name = self.getTagName(child_element.tag)
|
|
380
|
+
if (tag_name == "SWC-SERVICE-DEPENDENCY"):
|
|
381
|
+
self.readSwcServiceDependency(child_element, parent)
|
|
382
|
+
else:
|
|
383
|
+
self._raiseError("Unsupported Service Dependencies <%s>" % tag_name)
|
|
384
|
+
|
|
385
|
+
def readSwcInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
289
386
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
|
|
290
|
-
short_name = self.
|
|
387
|
+
short_name = self.getShortName(child_element)
|
|
291
388
|
behavior = parent.createSwcInternalBehavior(short_name)
|
|
292
|
-
self.logger.debug("
|
|
389
|
+
self.logger.debug("readSwcInternalBehavior %s" % behavior.full_name)
|
|
293
390
|
|
|
294
391
|
# read the internal behavior
|
|
295
392
|
self.readInternalBehavior(child_element, behavior)
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
self.
|
|
299
|
-
self.
|
|
300
|
-
self.
|
|
393
|
+
|
|
394
|
+
# read the extra SwcInternalBehavior
|
|
395
|
+
self.readSwcInternalBehaviorRunnables(child_element, behavior)
|
|
396
|
+
self.readSwcInternalBehaviorEvents(child_element, behavior)
|
|
397
|
+
self.readSwcInternalBehaviorServiceDependencies(child_element, behavior)
|
|
301
398
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
399
|
+
behavior.handle_termination_and_restart = self.getChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART")
|
|
400
|
+
self.readPerInstanceMemories(child_element, behavior)
|
|
401
|
+
self.readPerInstanceParameter(child_element, behavior)
|
|
402
|
+
self.readPortAPIOptions(child_element, behavior)
|
|
403
|
+
behavior.supports_multiple_instantiation = self.getChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION")
|
|
302
404
|
|
|
303
|
-
def readBswInternalBehavior(self, element, parent: BswModuleDescription):
|
|
405
|
+
def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
|
|
304
406
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
|
|
305
|
-
short_name = self.
|
|
407
|
+
short_name = self.getShortName(child_element)
|
|
306
408
|
behavior = parent.createBswInternalBehavior(short_name)
|
|
307
409
|
self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
|
|
308
410
|
|
|
309
411
|
# read the internal behavior
|
|
310
412
|
self.readInternalBehavior(child_element, behavior)
|
|
311
|
-
|
|
312
413
|
self.readBswCalledEntity(child_element, behavior)
|
|
313
414
|
self.readBswSchedulableEntity(child_element, behavior)
|
|
314
415
|
self.readBswModeSwitchEvent(child_element, behavior)
|
|
315
416
|
self.readBswTimingEvent(child_element, behavior)
|
|
316
417
|
self.readBswDataReceivedEvent(child_element, behavior)
|
|
317
418
|
self.readBswInternalTriggerOccurredEvent(child_element, behavior)
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
def readBswModuleEntry(self, element, parent: ARPackage):
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
419
|
+
self.readBswInternalBehaviorModeSenderPolicy(child_element, behavior)
|
|
420
|
+
|
|
421
|
+
def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
|
|
422
|
+
short_name = self.getShortName(element)
|
|
423
|
+
bsw_module_description = parent.createBswModuleDescription(short_name)
|
|
424
|
+
bsw_module_description.module_id = self.getChildElementOptionalNumericalValue(element, "MODULE-ID")
|
|
425
|
+
|
|
426
|
+
self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
|
|
427
|
+
|
|
428
|
+
self.readBswModuleDescriptionImplementedEntry(element, bsw_module_description)
|
|
429
|
+
self.readProvidedModeGroup(element, bsw_module_description)
|
|
430
|
+
self.readRequiredModeGroup(element, bsw_module_description)
|
|
431
|
+
self.readBswInternalBehavior(element, bsw_module_description)
|
|
432
|
+
|
|
433
|
+
def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
|
|
434
|
+
short_name = self.getShortName(element)
|
|
435
|
+
entry = parent.createBswModuleEntry(short_name)
|
|
436
|
+
entry.is_reentrant = self.getChildElementOptionalBooleanValue(element, "IS-REENTRANT")
|
|
437
|
+
entry.is_synchronous = self.getChildElementOptionalBooleanValue(element, "IS-SYNCHRONOUS")
|
|
438
|
+
entry.service_id = self.getChildElementOptionalNumericalValue(element, "SERVICE-ID")
|
|
439
|
+
entry.call_type = self.getChildElementOptionalLiteral(element, "CALL-TYPE")
|
|
440
|
+
entry.execution_context = self.getChildElementOptionalLiteral(element, "EXECUTION-CONTEXT")
|
|
441
|
+
entry.sw_service_impl_policy = self.getChildElementOptionalLiteral(element, "SW-SERVICE-IMPL-POLICY")
|
|
442
|
+
|
|
443
|
+
#self.logger.debug("readBswModuleEntry \n%s" % entry)
|
|
444
|
+
self.logger.debug("readBswModuleEntry %s" % entry.short_name)
|
|
445
|
+
|
|
446
|
+
def readEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
|
|
447
|
+
self.readElementAttributes(element, engineering_obj)
|
|
448
|
+
engineering_obj.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
|
|
449
|
+
.setCategory(self.getChildElementOptionalLiteral(element, "CATEGORY"))
|
|
450
|
+
|
|
451
|
+
def getAutosarEngineeringObject(self, element: ET.Element) -> AutosarEngineeringObject:
|
|
452
|
+
obj = AutosarEngineeringObject()
|
|
453
|
+
self.readEngineeringObject(element, obj)
|
|
454
|
+
self.logger.debug("getAutosarEngineeringObject %s", obj.short_label)
|
|
455
|
+
return obj
|
|
456
|
+
|
|
457
|
+
def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
|
|
458
|
+
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/*", self.nsmap):
|
|
459
|
+
tag_name = self.getTagName(child_element.tag)
|
|
460
|
+
if tag_name == "AUTOSAR-ENGINEERING-OBJECT":
|
|
461
|
+
code_desc.addArtifactDescriptor(self.getAutosarEngineeringObject(child_element))
|
|
462
|
+
else:
|
|
463
|
+
self._raiseError("Unsupported Artifact Descriptor <%s>" % tag_name)
|
|
352
464
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
def readCodeDescriptor(self, element, impl: Implementation):
|
|
465
|
+
def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
|
|
356
466
|
for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
|
|
357
|
-
short_name = self.
|
|
467
|
+
short_name = self.getShortName(child_element)
|
|
358
468
|
self.logger.debug("readCodeDescriptor %s" % short_name)
|
|
359
469
|
code_desc = impl.createCodeDescriptor(short_name)
|
|
470
|
+
self.readIdentifiable(child_element, code_desc)
|
|
360
471
|
self.readArtifactDescriptor(child_element, code_desc)
|
|
361
472
|
|
|
362
|
-
def
|
|
473
|
+
def readMemorySectionOptions(self, element: ET.Element, section: MemorySection):
|
|
474
|
+
child_element = element.find("./xmlns:OPTIONS", self.nsmap)
|
|
475
|
+
if child_element is not None:
|
|
476
|
+
for value in self.getChildElementLiteralValueList(child_element, "OPTION"):
|
|
477
|
+
section.addOption(value)
|
|
478
|
+
|
|
479
|
+
def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
|
|
363
480
|
for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
|
|
364
|
-
short_name = self.
|
|
481
|
+
short_name = self.getShortName(child_element)
|
|
365
482
|
memory_section = consumption.createMemorySection(short_name)
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
memory_section.
|
|
483
|
+
self.readIdentifiable(child_element, memory_section)
|
|
484
|
+
memory_section.alignment = self.getChildElementOptionalLiteral(child_element, "ALIGNMENT")
|
|
485
|
+
self.readMemorySectionOptions(child_element, memory_section)
|
|
486
|
+
memory_section.size = self.getChildElementOptionalNumericalValue(child_element, "SIZE")
|
|
487
|
+
memory_section.swAddrMethodRef = self.getChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF")
|
|
488
|
+
memory_section.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
370
489
|
self.logger.debug("readMemorySections %s" % memory_section.short_name)
|
|
371
490
|
|
|
372
|
-
def readResourceConsumption(self, element, impl: Implementation):
|
|
491
|
+
def readResourceConsumption(self, element: ET.Element, impl: Implementation):
|
|
373
492
|
child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
|
|
374
|
-
if (child_element
|
|
375
|
-
self.
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
def readImplementation(self, element, impl: Implementation):
|
|
493
|
+
if (child_element is not None):
|
|
494
|
+
short_name = self.getShortName(child_element)
|
|
495
|
+
consumption = ResourceConsumption(impl, short_name)
|
|
496
|
+
self.readIdentifiable(child_element, consumption)
|
|
497
|
+
self.readMemorySections(child_element, consumption)
|
|
498
|
+
impl.setResourceConsumption(consumption)
|
|
499
|
+
|
|
500
|
+
def readImplementation(self, element: ET.Element, impl: Implementation):
|
|
501
|
+
self.readIdentifiable(element, impl)
|
|
382
502
|
self.readCodeDescriptor(element, impl)
|
|
383
|
-
impl.programming_language = self.
|
|
503
|
+
impl.programming_language = self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE")
|
|
384
504
|
self.readResourceConsumption(element, impl)
|
|
385
|
-
impl.sw_version = self.
|
|
386
|
-
impl.swc_bsw_mapping_ref = self.
|
|
387
|
-
impl.
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
self.
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
505
|
+
impl.sw_version = self.getChildElementOptionalLiteral(element, "SW-VERSION")
|
|
506
|
+
impl.swc_bsw_mapping_ref = self.getChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF")
|
|
507
|
+
impl.used_code_generator = self.getChildElementOptionalLiteral(element, "USED-CODE-GENERATOR")
|
|
508
|
+
impl.vendor_id = self.getChildElementOptionalNumericalValue(element, "VENDOR-ID")
|
|
509
|
+
|
|
510
|
+
def readBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
|
|
511
|
+
child_element = element.find("./xmlns:VENDOR-SPECIFIC-MODULE-DEF-REFS", self.nsmap)
|
|
512
|
+
if child_element is not None:
|
|
513
|
+
for ref in self.getChildElementRefTypeList(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
|
|
514
|
+
parent.addVendorSpecificModuleDefRef(ref)
|
|
515
|
+
|
|
516
|
+
def readBswImplementation(self, element: ET.Element, parent: ARPackage):
|
|
517
|
+
short_name = self.getShortName(element)
|
|
518
|
+
impl = parent.createBswImplementation(short_name)
|
|
519
|
+
self.logger.debug("readBswImplementation %s" % impl.short_name)
|
|
520
|
+
self.readImplementation(element, impl)
|
|
521
|
+
impl.ar_release_version = self.getChildElementOptionalLiteral(element, "AR-RELEASE-VERSION")
|
|
522
|
+
impl.behavior_ref = self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")
|
|
523
|
+
self.readBswImplementationVendorSpecificModuleDefRefs(element, impl)
|
|
524
|
+
|
|
525
|
+
def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
|
|
526
|
+
short_name = self.getShortName(element)
|
|
527
|
+
impl = parent.createSwcImplementation(short_name)
|
|
528
|
+
self.logger.debug("readSwcImplementation %s" % impl.short_name)
|
|
529
|
+
self.readImplementation(element, impl)
|
|
530
|
+
impl.behavior_ref = self.getChildElementOptionalRefType(element, "BEHAVIOR-REF")
|
|
409
531
|
|
|
410
532
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
411
533
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
412
534
|
|
|
413
|
-
def readDataReceivePointByValues(self, element, parent: RunnableEntity):
|
|
535
|
+
def readDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
|
|
414
536
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-VALUES")
|
|
415
537
|
|
|
416
|
-
def readDataReadAccesses(self, element, parent: RunnableEntity):
|
|
538
|
+
def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
417
539
|
self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
|
|
418
540
|
|
|
419
|
-
def
|
|
541
|
+
def readDataWriteAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
542
|
+
self._readVariableAccesses(element, parent, "DATA-WRITE-ACCESSS")
|
|
543
|
+
|
|
544
|
+
def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
|
|
420
545
|
self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
|
|
421
546
|
|
|
422
|
-
def
|
|
547
|
+
def getAutosarParameterRef(self, element: ET.Element, key: str) -> AutosarParameterRef:
|
|
548
|
+
accessed_parameter = None
|
|
549
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
550
|
+
if child_element is not None:
|
|
551
|
+
accessed_parameter = AutosarParameterRef()
|
|
552
|
+
accessed_parameter.local_parameter_ref = self.getChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF")
|
|
553
|
+
return accessed_parameter
|
|
554
|
+
|
|
555
|
+
def readParameterAccesses(self, element: ET.Element, parent: RunnableEntity):
|
|
556
|
+
for child_element in element.findall("./xmlns:PARAMETER-ACCESSS/xmlns:PARAMETER-ACCESS", self.nsmap):
|
|
557
|
+
short_name = self.getShortName(child_element)
|
|
558
|
+
self.logger.debug("readParameterAccesses %s" % short_name)
|
|
559
|
+
parameter_access = parent.createParameterAccess(short_name)
|
|
560
|
+
parameter_access.accessed_parameter = self.getAutosarParameterRef(child_element, "ACCESSED-PARAMETER")
|
|
561
|
+
|
|
562
|
+
def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
423
563
|
self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
|
|
424
564
|
|
|
425
|
-
def readReadLocalVariables(self, element, parent: RunnableEntity):
|
|
565
|
+
def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
|
|
426
566
|
self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
|
|
427
567
|
|
|
428
|
-
def readROperationIRef(self, element, parent: ServerCallPoint):
|
|
429
|
-
child_element = element.find("./xmlns
|
|
430
|
-
if (child_element
|
|
568
|
+
def readROperationIRef(self, element: ET.Element, key: str, parent: ServerCallPoint):
|
|
569
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
570
|
+
if (child_element is not None):
|
|
431
571
|
operation_iref = ROperationInAtomicSwcInstanceRef()
|
|
432
|
-
operation_iref.context_r_port_ref = self.
|
|
433
|
-
operation_iref.target_required_operation_ref = self.
|
|
572
|
+
operation_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
|
|
573
|
+
operation_iref.target_required_operation_ref = self.getChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF")
|
|
434
574
|
parent.operation_iref = operation_iref
|
|
435
575
|
|
|
436
|
-
def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
|
|
437
|
-
child_element = element.find("./xmlns:DATA-
|
|
438
|
-
if (child_element
|
|
576
|
+
def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
|
|
577
|
+
child_element = element.find("./xmlns:DATA-IREF", self.nsmap)
|
|
578
|
+
if (child_element is not None):
|
|
439
579
|
data_iref = RVariableInAtomicSwcInstanceRef()
|
|
440
|
-
data_iref.context_r_port_ref = self.
|
|
441
|
-
data_iref.
|
|
580
|
+
data_iref.context_r_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF")
|
|
581
|
+
data_iref.target_data_element_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF")
|
|
442
582
|
parent.data_iref = data_iref
|
|
443
583
|
|
|
444
|
-
def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
|
|
584
|
+
def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
|
|
445
585
|
for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
|
|
446
586
|
mode_iref = RModeInAtomicSwcInstanceRef()
|
|
447
|
-
mode_iref.
|
|
448
|
-
mode_iref.
|
|
449
|
-
mode_iref.
|
|
587
|
+
mode_iref.context_port_ref = self.getChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF")
|
|
588
|
+
mode_iref.context_mode_declaration_group_prototype_ref = self.getChildElementRefType("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
589
|
+
mode_iref.target_mode_declaration_ref = self.getChildElementRefType("", child_element, "TARGET-MODE-DECLARATION-REF")
|
|
450
590
|
parent.addModeIRef(mode_iref)
|
|
451
591
|
|
|
452
|
-
def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
592
|
+
def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
593
|
+
short_name = self.getShortName(element)
|
|
594
|
+
self.logger.debug("readSynchronousServerCallPoint %s" % short_name)
|
|
595
|
+
server_call_point = parent.createSynchronousServerCallPoint(short_name)
|
|
596
|
+
self.readIdentifiable(element, server_call_point)
|
|
597
|
+
server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
|
|
598
|
+
self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
|
|
599
|
+
|
|
600
|
+
def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
601
|
+
short_name = self.getShortName(element)
|
|
602
|
+
self.logger.debug("readAsynchronousServerCallPoint %s" % short_name)
|
|
603
|
+
server_call_point = parent.createAsynchronousServerCallPoint(short_name)
|
|
604
|
+
self.readIdentifiable(element, server_call_point)
|
|
605
|
+
server_call_point.timeout = self.getChildElementOptionalFloatValue(element, "TIMEOUT")
|
|
606
|
+
self.readROperationIRef(element, "OPERATION-IREF", server_call_point)
|
|
607
|
+
|
|
608
|
+
def readInternalBehaviorServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
609
|
+
for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/*", self.nsmap):
|
|
610
|
+
tag_name = self.getTagName(child_element.tag)
|
|
611
|
+
if tag_name == "SYNCHRONOUS-SERVER-CALL-POINT":
|
|
612
|
+
self.readSynchronousServerCallPoint(child_element, parent)
|
|
613
|
+
elif tag_name == "ASYNCHRONOUS-SERVER-CALL-POINT":
|
|
614
|
+
self.readAsynchronousServerCallPoint(child_element, parent)
|
|
615
|
+
else:
|
|
616
|
+
self._raiseError("Unsupported server call point type <%s>" % tag_name)
|
|
617
|
+
|
|
618
|
+
def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
|
|
467
619
|
for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
|
|
468
|
-
short_name = self.
|
|
620
|
+
short_name = self.getShortName(child_element)
|
|
469
621
|
point = parent.createInternalTriggeringPoint(short_name)
|
|
470
|
-
point.sw_impl_policy = self.
|
|
622
|
+
point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
|
|
471
623
|
|
|
472
|
-
def
|
|
624
|
+
def readSwcInternalBehaviorRunnables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
473
625
|
for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
|
|
474
|
-
short_name = self.
|
|
475
|
-
|
|
476
|
-
runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
477
|
-
runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
|
|
478
|
-
|
|
626
|
+
short_name = self.getShortName(child_element)
|
|
627
|
+
entity = parent.createRunnableEntity(short_name)
|
|
479
628
|
self.logger.debug("readRunnableEntities %s" % short_name)
|
|
480
|
-
|
|
481
|
-
self.
|
|
482
|
-
self.
|
|
483
|
-
self.
|
|
484
|
-
|
|
485
|
-
self.
|
|
486
|
-
self.
|
|
487
|
-
self.
|
|
488
|
-
self.
|
|
489
|
-
self.
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
629
|
+
|
|
630
|
+
self.readExecutableEntity(child_element, entity)
|
|
631
|
+
entity.can_be_invoked_concurrently = self.getChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
632
|
+
entity.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
633
|
+
|
|
634
|
+
self.readDataReceivePointByArguments(child_element, entity)
|
|
635
|
+
self.readDataReceivePointByValues(child_element, entity)
|
|
636
|
+
self.readDataReadAccesses(child_element, entity)
|
|
637
|
+
self.readDataWriteAccesses(child_element, entity)
|
|
638
|
+
self.readDataSendPoints(child_element, entity)
|
|
639
|
+
self.readParameterAccesses(child_element, entity)
|
|
640
|
+
self.readWrittenLocalVariables(child_element, entity)
|
|
641
|
+
self.readReadLocalVariables(child_element, entity)
|
|
642
|
+
self.readInternalBehaviorServerCallPoint(child_element, entity)
|
|
643
|
+
self.readInternalTriggeringPoint(child_element, entity)
|
|
644
|
+
|
|
645
|
+
def getRModeInAtomicSwcInstanceRef(self, element: ET.Element) -> RModeInAtomicSwcInstanceRef:
|
|
646
|
+
iref = RModeInAtomicSwcInstanceRef()
|
|
647
|
+
iref.base_ref = self.getChildElementOptionalRefType(element, "BASE")
|
|
648
|
+
iref.context_port_ref = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
|
|
649
|
+
iref.context_mode_declaration_group_prototype_ref = self.getChildElementOptionalRefType(element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
|
|
650
|
+
iref.target_mode_declaration_ref = self.getChildElementOptionalRefType(element, "TARGET-MODE-DECLARATION-REF")
|
|
651
|
+
return iref
|
|
652
|
+
|
|
653
|
+
def readRTEEvent(self, element: ET.Element, event: RTEEvent):
|
|
654
|
+
self.readIdentifiable(element, event)
|
|
655
|
+
event.start_on_event_ref = self.getChildElementOptionalRefType(element, "START-ON-EVENT-REF")
|
|
656
|
+
for child_element in element.findall("./xmlns:DISABLED-MODE-IREFS/xmlns:DISABLED-MODE-IREF", self.nsmap):
|
|
657
|
+
iref = self.getRModeInAtomicSwcInstanceRef(child_element)
|
|
658
|
+
event.addDisabledModeIRef(iref)
|
|
659
|
+
|
|
660
|
+
def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
|
|
495
661
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
496
|
-
if (child_element
|
|
662
|
+
if (child_element is not None):
|
|
497
663
|
parent.operation_iref = POperationInAtomicSwcInstanceRef()
|
|
498
|
-
parent.operation_iref.context_p_port_ref = self.
|
|
499
|
-
parent.operation_iref.target_provided_operation_ref = self.
|
|
500
|
-
|
|
501
|
-
def
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
def readExplicitInterRunnableVariables(self, element, parent: SwcInternalBehavior):
|
|
664
|
+
parent.operation_iref.context_p_port_ref = self.getChildElementRefType(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
|
|
665
|
+
parent.operation_iref.target_provided_operation_ref = self.getChildElementRefType(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
|
|
666
|
+
|
|
667
|
+
def readOperationInvokedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
668
|
+
short_name = self.getShortName(element)
|
|
669
|
+
event = parent.createOperationInvokedEvent(short_name)
|
|
670
|
+
self.readOperationIRef(element, event)
|
|
671
|
+
self.readRTEEvent(element, event)
|
|
672
|
+
|
|
673
|
+
def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
509
674
|
for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
510
|
-
short_name = self.
|
|
675
|
+
short_name = self.getShortName(child_element)
|
|
511
676
|
prototype = parent.createExplicitInterRunnableVariable(short_name)
|
|
512
|
-
self.
|
|
513
|
-
prototype.type_tref = self.
|
|
514
|
-
|
|
677
|
+
prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
678
|
+
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
679
|
+
prototype.init_value = self.getInitValue(child_element)
|
|
680
|
+
|
|
681
|
+
def readPerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
682
|
+
for child_element in element.findall("./xmlns:PER-INSTANCE-MEMORYS/xmlns:PER-INSTANCE-MEMORY", self.nsmap):
|
|
683
|
+
short_name = self.getShortName(child_element)
|
|
684
|
+
memory = behavior.createPerInstanceMemory(short_name)
|
|
685
|
+
self.readIdentifiable(child_element, memory)
|
|
686
|
+
memory.init_value = self.getChildElementOptionalLiteral(child_element, "INIT-VALUE")
|
|
687
|
+
memory.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
688
|
+
memory.type = self.getChildElementOptionalLiteral(child_element, "TYPE")
|
|
689
|
+
memory.type_definition = self.getChildElementOptionalLiteral(child_element, "TYPE-DEFINITION")
|
|
690
|
+
|
|
691
|
+
def readAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
|
|
692
|
+
prototype.type_tref = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
693
|
+
|
|
694
|
+
def readParameterDataPrototype(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
695
|
+
short_name = self.getShortName(element)
|
|
696
|
+
prototype = behavior.createParameterDataPrototype(short_name)
|
|
697
|
+
self.readIdentifiable(element, prototype)
|
|
698
|
+
self.readAutosarDataPrototype(element, prototype)
|
|
699
|
+
prototype.init_value = self.getInitValue(element)
|
|
700
|
+
|
|
701
|
+
def readPerInstanceParameter(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
702
|
+
for child_element in element.findall("./xmlns:PER-INSTANCE-PARAMETERS/xmlns:PARAMETER-DATA-PROTOTYPE", self.nsmap):
|
|
703
|
+
self.readParameterDataPrototype(child_element, behavior)
|
|
704
|
+
|
|
705
|
+
def readPortDefinedArgumentValue(self, element: ET.Element) -> PortDefinedArgumentValue:
|
|
706
|
+
argument_value = PortDefinedArgumentValue()
|
|
707
|
+
child_element = element.find("./xmlns:VALUE/*", self.nsmap)
|
|
708
|
+
if child_element is not None:
|
|
709
|
+
argument_value.value = self.getValueSpecification(child_element)
|
|
710
|
+
argument_value.value_type = self.getChildElementOptionalRefType(element, "VALUE-TYPE-TREF")
|
|
711
|
+
return argument_value
|
|
712
|
+
|
|
713
|
+
def readPortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
714
|
+
for child_element in element.findall("./xmlns:PORT-API-OPTIONS/xmlns:PORT-API-OPTION", self.nsmap):
|
|
715
|
+
option = PortAPIOption()
|
|
716
|
+
option.enable_take_address = self.getChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS")
|
|
717
|
+
option.indirect_api = self.getChildElementOptionalBooleanValue(child_element, "INDIRECT-API")
|
|
718
|
+
option.port_ref = self.getChildElementOptionalRefType(child_element, "PORT-REF")
|
|
719
|
+
for argument_value_tag in child_element.findall("./xmlns:PORT-ARG-VALUES/xmlns:PORT-DEFINED-ARGUMENT-VALUE", self.nsmap):
|
|
720
|
+
option.addPortArgValue(self.readPortDefinedArgumentValue(argument_value_tag))
|
|
721
|
+
behavior.addPortAPIOption(option)
|
|
722
|
+
|
|
515
723
|
def readInitEvents(self, element, parent: SwcInternalBehavior):
|
|
516
724
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
|
|
517
|
-
short_name = self.
|
|
725
|
+
short_name = self.getShortName(child_element)
|
|
518
726
|
event = parent.createInitEvent(short_name)
|
|
519
|
-
|
|
520
|
-
self.readRTEEvent(child_element, event)
|
|
521
|
-
|
|
522
|
-
def readTimingEvents(self, element, parent: SwcInternalBehavior):
|
|
523
|
-
for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
|
|
524
|
-
short_name = self.readShortName(child_element)
|
|
525
|
-
event = parent.createTimingEvent(short_name)
|
|
526
|
-
|
|
527
|
-
self.readRTEEvent(child_element, event)
|
|
528
|
-
|
|
529
|
-
offset = self.readChildOptionalElement(child_element, "OFFSET")
|
|
530
|
-
if (offset != None):
|
|
531
|
-
event.offset = (float)(offset)
|
|
532
|
-
event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
|
|
533
|
-
|
|
534
|
-
def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
|
|
535
|
-
for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
|
|
536
|
-
short_name = self.readShortName(child_element)
|
|
537
|
-
event = parent.createDataReceivedEvent(short_name)
|
|
538
|
-
|
|
539
|
-
self.readRTEEvent(child_element, event)
|
|
540
|
-
self.readRVariableInAtomicSwcInstanceRef(child_element, event)
|
|
541
|
-
|
|
542
|
-
def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
|
|
543
|
-
for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
|
|
544
|
-
short_name = self.readShortName(child_element)
|
|
545
|
-
event = parent.createSwcModeSwitchEvent(short_name)
|
|
546
|
-
|
|
547
|
-
self.readRTEEvent(child_element, event)
|
|
548
|
-
self.readRModeInAtomicSwcInstanceRef(child_element, event)
|
|
549
|
-
|
|
550
|
-
def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
|
|
551
|
-
for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
552
|
-
short_name = self.readShortName(child_element)
|
|
553
|
-
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
554
|
-
|
|
555
727
|
self.readRTEEvent(child_element, event)
|
|
556
|
-
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
557
728
|
|
|
558
|
-
def
|
|
559
|
-
|
|
560
|
-
|
|
729
|
+
def readTimingEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
730
|
+
short_name = self.getShortName(element)
|
|
731
|
+
event = parent.createTimingEvent(short_name)
|
|
732
|
+
self.readRTEEvent(element, event)
|
|
733
|
+
event.offset = self.getChildElementOptionalFloatValue(element, "OFFSET")
|
|
734
|
+
event.period = self.getChildElementOptionalFloatValue(element, "PERIOD")
|
|
735
|
+
|
|
736
|
+
def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
737
|
+
short_name = self.getShortName(element)
|
|
738
|
+
event = parent.createDataReceivedEvent(short_name)
|
|
739
|
+
self.readRTEEvent(element, event)
|
|
740
|
+
self.readRVariableInAtomicSwcInstanceRef(element, event)
|
|
741
|
+
|
|
742
|
+
def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
743
|
+
short_name = self.getShortName(element)
|
|
744
|
+
event = parent.createSwcModeSwitchEvent(short_name)
|
|
745
|
+
self.readRTEEvent(element, event)
|
|
746
|
+
event.activation = self.getChildElementOptionalLiteral(element, "ACTIVATION")
|
|
747
|
+
self.readRModeInAtomicSwcInstanceRef(element, event)
|
|
748
|
+
|
|
749
|
+
def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
750
|
+
short_name = self.getShortName(element)
|
|
751
|
+
event = parent.createInternalTriggerOccurredEvent(short_name)
|
|
752
|
+
self.readRTEEvent(element, event)
|
|
753
|
+
event.event_source_ref = self.getChildElementRefType(parent.short_name, element, "EVENT-SOURCE-REF")
|
|
754
|
+
|
|
755
|
+
def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
756
|
+
for child_element in element.findall("./xmlns:EVENTS/*", self.nsmap):
|
|
757
|
+
tag_name = self.getTagName(child_element.tag)
|
|
758
|
+
if tag_name == "TIMING-EVENT":
|
|
759
|
+
self.readTimingEvent(child_element, parent)
|
|
760
|
+
elif tag_name == "SWC-MODE-SWITCH-EVENT":
|
|
761
|
+
self.readSwcModeSwitchEvent(child_element, parent)
|
|
762
|
+
elif tag_name == "OPERATION-INVOKED-EVENT":
|
|
763
|
+
self.readOperationInvokedEvent(child_element, parent)
|
|
764
|
+
elif tag_name == "DATA-RECEIVED-EVENT":
|
|
765
|
+
self.readDataReceivedEvent(child_element, parent)
|
|
766
|
+
elif tag_name == "INTERNAL-TRIGGER-OCCURRED-EVENT":
|
|
767
|
+
self.readInternalTriggerOccurredEvent(child_element, parent)
|
|
768
|
+
else:
|
|
769
|
+
self._raiseError("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
|
|
561
770
|
|
|
562
|
-
|
|
771
|
+
def readSwPointerTargetProps(self, element: ET.Element, parent: SwDataDefProps):
|
|
772
|
+
child_element = element.find("./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
|
|
773
|
+
if (child_element is not None):
|
|
563
774
|
sw_pointer_target_props = SwPointerTargetProps()
|
|
564
|
-
sw_pointer_target_props.target_category = self.
|
|
565
|
-
self.
|
|
775
|
+
sw_pointer_target_props.target_category = self.getChildElementOptionalLiteral(child_element, "TARGET-CATEGORY")
|
|
776
|
+
sw_pointer_target_props.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
566
777
|
parent.sw_pointer_target_props = sw_pointer_target_props
|
|
567
778
|
|
|
568
|
-
def
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
779
|
+
def readGeneralAnnotation(self, element: ET.Element, annotation: GeneralAnnotation):
|
|
780
|
+
annotation.label = self.getMultilanguageLongName(element, "LABEL")
|
|
781
|
+
|
|
782
|
+
def readAnnotations(self, element: ET.Element, props: SwDataDefProps) :
|
|
783
|
+
for child_element in element.findall("./xmlns:ANNOTATIONS/xmlns:ANNOTATION", self.nsmap):
|
|
784
|
+
annotation = Annotation()
|
|
785
|
+
self.readGeneralAnnotation(child_element, annotation)
|
|
786
|
+
props.addAnnotation(annotation)
|
|
787
|
+
|
|
788
|
+
def getSwAxisIndividual(self, element: ET.Element) -> SwAxisIndividual:
|
|
789
|
+
props = SwAxisIndividual()
|
|
790
|
+
self.readElementAttributes(element, props)
|
|
791
|
+
props.setInputVariableTypeRef(self.getChildElementOptionalRefType(element, "INPUT-VARIABLE-TYPE-REF")) \
|
|
792
|
+
.setCompuMethodRef(self.getChildElementOptionalRefType(element, "COMPU-METHOD-REF")) \
|
|
793
|
+
.setSwMaxAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MAX-AXIS-POINTS")) \
|
|
794
|
+
.setSwMinAxisPoints(self.getChildElementOptionalNumericalValue(element, "SW-MIN-AXIS-POINTS")) \
|
|
795
|
+
.setDataConstrRef(self.getChildElementOptionalRefType(element, "DATA-CONSTR-REF"))
|
|
796
|
+
return props
|
|
797
|
+
|
|
798
|
+
def getSwAxisGrouped(self, element: ET.Element) -> SwAxisGrouped:
|
|
799
|
+
props = SwAxisGrouped()
|
|
800
|
+
props.setSharedAxisTypeRef(self.getChildElementOptionalRefType(element, "SHARED-AXIS-TYPE-REF"))
|
|
801
|
+
return props
|
|
802
|
+
|
|
803
|
+
def getSwCalprmAxis(self, element: ET.Element) -> SwCalprmAxis:
|
|
804
|
+
axis = SwCalprmAxis()
|
|
805
|
+
axis.sw_axis_index = self.getChildElementOptionalNumericalValue(element, "SW-AXIS-INDEX")
|
|
806
|
+
axis.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
807
|
+
child_element = element.find("./xmlns:SW-AXIS-INDIVIDUAL", self.nsmap)
|
|
808
|
+
if child_element is not None:
|
|
809
|
+
axis.sw_calprm_axis_type_props = self.getSwAxisIndividual(child_element)
|
|
810
|
+
child_element = element.find("./xmlns:SW-AXIS-GROUPED", self.nsmap)
|
|
811
|
+
if child_element is not None:
|
|
812
|
+
axis.sw_calprm_axis_type_props = self.getSwAxisGrouped(child_element)
|
|
813
|
+
|
|
814
|
+
return axis
|
|
815
|
+
|
|
816
|
+
def getSwCalprmAxisSet(self, element: ET.Element, key: str) -> SwCalprmAxisSet:
|
|
817
|
+
set = SwCalprmAxisSet()
|
|
818
|
+
for child_element in element.findall("./xmlns:%s/*" % key, self.nsmap):
|
|
819
|
+
tag_name = self.getTagName(child_element.tag)
|
|
820
|
+
if tag_name == "SW-CALPRM-AXIS":
|
|
821
|
+
set.addSwCalprmAxis(self.getSwCalprmAxis(child_element))
|
|
822
|
+
return set
|
|
823
|
+
|
|
824
|
+
def getSwDataDefProps(self, element: ET.Element, key: str) -> SwDataDefProps:
|
|
825
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
826
|
+
sw_data_def_props = None
|
|
827
|
+
if child_element is not None:
|
|
828
|
+
conditional_tag = child_element.find("./xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
|
|
829
|
+
if conditional_tag is not None:
|
|
830
|
+
sw_data_def_props = SwDataDefProps()
|
|
831
|
+
self.readElementAttributes(child_element, sw_data_def_props)
|
|
832
|
+
|
|
833
|
+
self.readAnnotations(conditional_tag, sw_data_def_props)
|
|
834
|
+
sw_data_def_props.baseTypeRef = self.getChildElementOptionalRefType(conditional_tag, "BASE-TYPE-REF")
|
|
835
|
+
sw_data_def_props.dataConstrRef = self.getChildElementOptionalRefType(conditional_tag, "DATA-CONSTR-REF")
|
|
836
|
+
sw_data_def_props.compuMethodRef = self.getChildElementOptionalRefType(conditional_tag, "COMPU-METHOD-REF")
|
|
837
|
+
sw_data_def_props.swImplPolicy = self.getChildElementOptionalLiteral(conditional_tag, "SW-IMPL-POLICY")
|
|
838
|
+
sw_data_def_props.implementationDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
839
|
+
sw_data_def_props.swCalibrationAccess = self.getChildElementOptionalLiteral(conditional_tag, "SW-CALIBRATION-ACCESS")
|
|
840
|
+
sw_data_def_props.swCalprmAxisSet = self.getSwCalprmAxisSet(conditional_tag, "SW-CALPRM-AXIS-SET")
|
|
841
|
+
sw_data_def_props.swRecordLayoutRef = self.getChildElementOptionalRefType(conditional_tag, "SW-RECORD-LAYOUT-REF")
|
|
842
|
+
sw_data_def_props.valueAxisDataTypeRef = self.getChildElementOptionalRefType(conditional_tag, "VALUE-AXIS-DATA-TYPE-REF")
|
|
843
|
+
sw_data_def_props.setUnitRef(self.getChildElementOptionalRefType(conditional_tag, "UNIT-REF"))
|
|
844
|
+
self.readSwPointerTargetProps(conditional_tag, sw_data_def_props)
|
|
845
|
+
self.readElementAttributes(conditional_tag, sw_data_def_props.conditional)
|
|
846
|
+
return sw_data_def_props
|
|
847
|
+
|
|
848
|
+
def readApplicationPrimitiveDataType(self, element: ET.Element, parent: ARPackage):
|
|
849
|
+
short_name = self.getShortName(element)
|
|
850
|
+
data_type = parent.createApplicationPrimitiveDataType(short_name)
|
|
851
|
+
self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
|
|
852
|
+
self.readIdentifiable(element, data_type)
|
|
853
|
+
data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
|
|
854
|
+
|
|
855
|
+
def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
|
|
856
|
+
prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
857
|
+
|
|
858
|
+
def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
|
|
859
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
|
|
860
|
+
short_name = self.getShortName(child_element)
|
|
861
|
+
record_element = parent.createApplicationRecordElement(short_name)
|
|
862
|
+
self.logger.debug("readApplicationRecordElements %s" % short_name)
|
|
863
|
+
self.readIdentifiable(child_element, record_element)
|
|
864
|
+
self.readApplicationCompositeElementDataPrototype(child_element, record_element)
|
|
865
|
+
|
|
866
|
+
def readApplicationRecordDataTypes(self, element: ET.Element, parent: ARPackage):
|
|
867
|
+
short_name = self.getShortName(element)
|
|
868
|
+
data_type = parent.createApplicationRecordDataType(short_name)
|
|
869
|
+
self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
|
|
870
|
+
self.readIdentifiable(element, data_type)
|
|
871
|
+
data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
|
|
872
|
+
self.readApplicationRecordElements(element, data_type)
|
|
873
|
+
|
|
874
|
+
def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
|
|
598
875
|
for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
|
|
599
|
-
short_name = self.
|
|
876
|
+
short_name = self.getShortName(child_element)
|
|
600
877
|
type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
|
|
601
|
-
|
|
602
|
-
type_element.
|
|
603
|
-
type_element.array_size_semantics = self.
|
|
878
|
+
self.readIdentifiable(child_element, type_element)
|
|
879
|
+
type_element.arraySize = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")
|
|
880
|
+
type_element.array_size_semantics = self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS")
|
|
604
881
|
self.readImplementationDataTypeElements(child_element, type_element)
|
|
605
|
-
self.
|
|
606
|
-
|
|
607
|
-
def
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
if (data_type.
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
def
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
882
|
+
type_element.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
883
|
+
|
|
884
|
+
def readImplementationDataType(self, element: ET.Element, parent: ARPackage):
|
|
885
|
+
short_name = self.getShortName(element)
|
|
886
|
+
data_type = parent.createImplementationDataType(short_name)
|
|
887
|
+
self.readAutosarDataType(element, data_type)
|
|
888
|
+
self.readImplementationDataTypeElements(element, data_type)
|
|
889
|
+
data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
|
|
890
|
+
if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
|
|
891
|
+
if (len(data_type.getImplementationDataTypeElements()) < 1):
|
|
892
|
+
self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
|
|
893
|
+
array_sub_element = data_type.getImplementationDataTypeElements()[0]
|
|
894
|
+
if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
|
|
895
|
+
data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementationDataTypeRef.value)
|
|
896
|
+
elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
|
|
897
|
+
return
|
|
898
|
+
else:
|
|
899
|
+
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
900
|
+
|
|
901
|
+
def readBaseTypeDirectDefinition(self, element: ET.Element, definition: BaseTypeDirectDefinition):
|
|
902
|
+
definition.base_type_size = self.getChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE")
|
|
903
|
+
definition.base_type_encoding = self.getChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING")
|
|
904
|
+
definition.mem_alignment = self.getChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT")
|
|
905
|
+
definition.native_declaration = self.getChildElementOptionalLiteral(element, "NATIVE-DECLARATION")
|
|
906
|
+
|
|
907
|
+
def readSwBaseType(self, element: ET.Element, parent: ARPackage):
|
|
908
|
+
short_name = self.getShortName(element)
|
|
909
|
+
data_type = parent.createSwBaseType(short_name)
|
|
910
|
+
self.readIdentifiable(element, data_type)
|
|
911
|
+
self.readBaseTypeDirectDefinition(element, data_type.baseTypeDefinition)
|
|
912
|
+
|
|
913
|
+
def getApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str) -> ApplicationCompositeElementInPortInterfaceInstanceRef:
|
|
914
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
915
|
+
iref = None
|
|
916
|
+
if child_element is not None:
|
|
917
|
+
iref = ApplicationCompositeElementInPortInterfaceInstanceRef()
|
|
918
|
+
iref.root_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF")
|
|
919
|
+
iref.target_data_prototype_ref = self.getChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
920
|
+
return iref
|
|
921
|
+
|
|
922
|
+
def getCompositeNetworkRepresentation(self, element: ET.Element) -> CompositeNetworkRepresentation:
|
|
923
|
+
self.logger.debug("getCompositeNetworkRepresentation")
|
|
924
|
+
representation = CompositeNetworkRepresentation()
|
|
925
|
+
representation.leaf_element_iref = self.getApplicationCompositeElementInPortInterfaceInstanceRef(element, "LEAF-ELEMENT-IREF")
|
|
926
|
+
representation.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
|
|
927
|
+
return representation
|
|
638
928
|
|
|
639
929
|
def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
com_spec.
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
930
|
+
self.readElementAttributes(element, com_spec)
|
|
931
|
+
for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
|
|
932
|
+
com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
|
|
933
|
+
com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
|
|
934
|
+
com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
|
|
935
|
+
com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
|
|
936
|
+
com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
937
|
+
|
|
938
|
+
def getSwValues(self, element: ET.Element, key: str) -> SwValues:
|
|
939
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
|
|
940
|
+
if child_element is None:
|
|
941
|
+
return None
|
|
942
|
+
sw_values = SwValues()
|
|
943
|
+
self.readElementAttributes(child_element, sw_values)
|
|
944
|
+
for v in self.getChildElementFloatValueList(child_element, "V"):
|
|
945
|
+
sw_values.addV(v)
|
|
946
|
+
sw_values.vt = self.getChildElementOptionalLiteral(child_element, "VT")
|
|
947
|
+
return sw_values
|
|
948
|
+
|
|
949
|
+
def getValueList(self, element: ET.Element, key: str) -> ValueList:
|
|
950
|
+
value_list = None
|
|
951
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
|
|
952
|
+
if child_element is not None:
|
|
953
|
+
self.logger.debug("getValueList %s" % key)
|
|
954
|
+
value_list = ValueList()
|
|
955
|
+
self.readElementAttributes(child_element, value_list)
|
|
956
|
+
value_list.v = self.getChildElementOptionalFloatValue(child_element, "V")
|
|
957
|
+
return value_list
|
|
958
|
+
|
|
959
|
+
def getSwValueCont(self, element: ET.Element) -> SwValueCont:
|
|
960
|
+
cont = None
|
|
961
|
+
child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
|
|
962
|
+
if child_element is not None:
|
|
963
|
+
self.logger.debug("getSwValueCont")
|
|
964
|
+
cont = SwValueCont()
|
|
965
|
+
self.readElementAttributes(child_element, cont)
|
|
966
|
+
cont.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
|
|
967
|
+
cont.sw_arraysize = self.getValueList(child_element, "SW-ARRAYSIZE")
|
|
968
|
+
cont.sw_values_phys = self.getSwValues(child_element, "SW-VALUES-PHYS")
|
|
969
|
+
return cont
|
|
970
|
+
|
|
971
|
+
def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
|
|
972
|
+
self.readValueSpecification(element, value_spec)
|
|
973
|
+
value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
974
|
+
value_spec.sw_value_cont = self.getSwValueCont(element)
|
|
975
|
+
|
|
976
|
+
self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
|
|
977
|
+
|
|
978
|
+
def getInitValue(self, element: ET.Element) -> ValueSpecification:
|
|
979
|
+
value_spec = None
|
|
980
|
+
child_element = element.find("./xmlns:INIT-VALUE/*", self.nsmap)
|
|
981
|
+
if child_element is not None:
|
|
982
|
+
self.logger.debug("getInitValue")
|
|
983
|
+
value_spec = self.getValueSpecification(child_element)
|
|
984
|
+
return value_spec
|
|
985
|
+
|
|
986
|
+
def getClientComSpec(self, element: ET.Element) -> ClientComSpec:
|
|
987
|
+
com_spec = ClientComSpec()
|
|
988
|
+
self.readElementAttributes(element, com_spec)
|
|
989
|
+
com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
|
|
990
|
+
return com_spec
|
|
991
|
+
|
|
992
|
+
def getQueuedReceiverComSpec(self, element: ET.Element) -> QueuedReceiverComSpec:
|
|
993
|
+
com_spec = QueuedReceiverComSpec()
|
|
994
|
+
self.readElementAttributes(element, com_spec)
|
|
995
|
+
self.readReceiverComSpec(element, com_spec)
|
|
996
|
+
com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
|
|
997
|
+
return com_spec
|
|
998
|
+
|
|
999
|
+
def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
|
|
1000
|
+
com_spec = NonqueuedReceiverComSpec()
|
|
1001
|
+
self.readElementAttributes(element, com_spec)
|
|
1002
|
+
self.readReceiverComSpec(element, com_spec)
|
|
1003
|
+
com_spec.alive_timeout = self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")
|
|
1004
|
+
com_spec.enable_updated = self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")
|
|
1005
|
+
com_spec.handle_never_received = self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")
|
|
1006
|
+
com_spec.handel_timeout_type = self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")
|
|
1007
|
+
com_spec.init_value = self.getInitValue(element)
|
|
1008
|
+
return com_spec
|
|
1009
|
+
|
|
1010
|
+
def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
|
|
1011
|
+
for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/*", self.nsmap):
|
|
1012
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1013
|
+
if tag_name == "NONQUEUED-RECEIVER-COM-SPEC":
|
|
1014
|
+
parent.addRequiredComSpec(self.getNonqueuedReceiverComSpec(child_element))
|
|
1015
|
+
elif tag_name == "CLIENT-COM-SPEC":
|
|
1016
|
+
parent.addRequiredComSpec(self.getClientComSpec(child_element))
|
|
1017
|
+
elif tag_name == "QUEUED-RECEIVER-COM-SPEC":
|
|
1018
|
+
parent.addRequiredComSpec(self.getQueuedReceiverComSpec(child_element))
|
|
1019
|
+
else:
|
|
1020
|
+
self._raiseError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
1021
|
+
|
|
1022
|
+
def readRPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
662
1023
|
for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
|
|
663
|
-
short_name = self.
|
|
1024
|
+
short_name = self.getShortName(child_element)
|
|
664
1025
|
self.logger.debug("readRPortPrototype %s" % short_name)
|
|
665
|
-
|
|
666
1026
|
prototype = parent.createRPortPrototype(short_name)
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
self.
|
|
671
|
-
|
|
672
|
-
def
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
1027
|
+
self.readIdentifiable(child_element, prototype)
|
|
1028
|
+
prototype.required_interface_tref = self.getChildElementOptionalRefType(child_element, "REQUIRED-INTERFACE-TREF")
|
|
1029
|
+
|
|
1030
|
+
self.readRequiredComSpec(child_element, prototype)
|
|
1031
|
+
|
|
1032
|
+
def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
|
|
1033
|
+
child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
|
|
1034
|
+
if (child_element is not None):
|
|
1035
|
+
acknowledge = TransmissionAcknowledgementRequest()
|
|
1036
|
+
self.readElementAttributes(child_element, acknowledge)
|
|
1037
|
+
acknowledge.timeout = self.getChildElementOptionalFloatValue(child_element, "TIMEOUT")
|
|
1038
|
+
return acknowledge
|
|
1039
|
+
return None
|
|
677
1040
|
|
|
678
|
-
def
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
self.
|
|
682
|
-
|
|
1041
|
+
def readSenderComSpec(self, element:ET.Element, com_spec: SenderComSpec):
|
|
1042
|
+
self.readElementAttributes(element, com_spec)
|
|
1043
|
+
for child_element in element.findall("./xmlns:COMPOSITE-NETWORK-REPRESENTATIONS/xmlns:COMPOSITE-NETWORK-REPRESENTATION", self.nsmap):
|
|
1044
|
+
com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
|
|
1045
|
+
com_spec.data_element_ref = self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")
|
|
1046
|
+
com_spec.network_representation = self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")
|
|
1047
|
+
com_spec.handle_out_of_range = self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")
|
|
1048
|
+
com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
|
|
1049
|
+
com_spec.uses_end_to_end_protection = self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
1050
|
+
|
|
1051
|
+
def getNonqueuedSenderComSpec(self, element) -> NonqueuedSenderComSpec:
|
|
1052
|
+
com_spec = NonqueuedSenderComSpec()
|
|
1053
|
+
self.readSenderComSpec(element, com_spec)
|
|
1054
|
+
com_spec.init_value = self.getInitValue(element)
|
|
1055
|
+
return com_spec
|
|
1056
|
+
|
|
1057
|
+
def getServerComSpec(self, element) -> ServerComSpec:
|
|
1058
|
+
com_spec = ServerComSpec()
|
|
1059
|
+
self.readSenderComSpec(element, com_spec)
|
|
1060
|
+
com_spec.operation_ref = self.getChildElementOptionalRefType(element, "OPERATION-REF")
|
|
1061
|
+
com_spec.queue_length = self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH")
|
|
1062
|
+
return com_spec
|
|
1063
|
+
|
|
1064
|
+
def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
|
|
1065
|
+
for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/*", self.nsmap):
|
|
1066
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1067
|
+
if tag_name == "NONQUEUED-SENDER-COM-SPEC":
|
|
1068
|
+
parent.addProvidedComSpec(self.getNonqueuedSenderComSpec(child_element))
|
|
1069
|
+
elif tag_name == "SERVER-COM-SPEC":
|
|
1070
|
+
parent.addProvidedComSpec(self.getServerComSpec(child_element))
|
|
1071
|
+
else:
|
|
1072
|
+
raise NotImplementedError("Unsupported RequiredComSpec <%s>" % tag_name)
|
|
683
1073
|
|
|
684
|
-
def readPPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
1074
|
+
def readPPortPrototype(self, element: ET.Element, parent: AtomicSwComponentType):
|
|
685
1075
|
for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
|
|
686
|
-
short_name = self.
|
|
1076
|
+
short_name = self.getShortName(child_element)
|
|
687
1077
|
self.logger.debug("readPPortPrototype %s" % short_name)
|
|
688
|
-
|
|
689
1078
|
prototype = parent.createPPortPrototype(short_name)
|
|
690
|
-
|
|
691
|
-
self.
|
|
1079
|
+
self.readIdentifiable(child_element, prototype)
|
|
1080
|
+
prototype.provided_interface_tref = self.getChildElementOptionalRefType(child_element, "PROVIDED-INTERFACE-TREF")
|
|
1081
|
+
|
|
1082
|
+
self.readProvidedComSpec(child_element, prototype)
|
|
1083
|
+
|
|
1084
|
+
def readPortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
|
|
1085
|
+
for child_element in element.findall("./xmlns:INNER-GROUP-IREFS/xmlns:INNER-GROUP-IREF", self.nsmap):
|
|
1086
|
+
inner_group_iref = InnerPortGroupInCompositionInstanceRef()
|
|
1087
|
+
inner_group_iref.contextRef = self.getChildElementOptionalRefType(child_element, "CONTEXT-REF")
|
|
1088
|
+
inner_group_iref.targetRef = self.getChildElementOptionalRefType(child_element, "TARGET-REF")
|
|
1089
|
+
parent.addInnerGroupIRef(inner_group_iref)
|
|
1090
|
+
|
|
1091
|
+
def readPortGroupOuterPortRefs(self, element: ET.Element, parent: PortGroup):
|
|
1092
|
+
for child_element in element.findall("./xmlns:OUTER-PORTS/xmlns:PORT-PROTOTYPE-REF-CONDITIONAL", self.nsmap):
|
|
1093
|
+
parent.addOuterPortRef(self.getChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF"))
|
|
1094
|
+
|
|
1095
|
+
def readPortGroup(self, element: ET.Element, parent: SwComponentType):
|
|
1096
|
+
short_name = self.getShortName(element)
|
|
1097
|
+
self.logger.debug("readPortGroup %s" % short_name)
|
|
1098
|
+
port_group = parent.createPortGroup(short_name)
|
|
1099
|
+
self.readIdentifiable(element, port_group)
|
|
1100
|
+
self.readPortGroupInnerGroupIRefs(element, port_group)
|
|
1101
|
+
self.readPortGroupOuterPortRefs(element, port_group)
|
|
1102
|
+
|
|
1103
|
+
def readSwComponentTypePortGroups(self, element: ET.Element, parent: SwComponentType):
|
|
1104
|
+
for child_element in element.findall("./xmlns:PORT-GROUPS/*", self.nsmap):
|
|
1105
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1106
|
+
if tag_name == "PORT-GROUP":
|
|
1107
|
+
self.readPortGroup(child_element, parent)
|
|
1108
|
+
else:
|
|
1109
|
+
self._raiseError("Unsupported Port Group type: %s" % tag_name)
|
|
692
1110
|
|
|
693
|
-
def readSwComponentType(self, element, parent: SwComponentType):
|
|
1111
|
+
def readSwComponentType(self, element: ET.Element, parent: SwComponentType):
|
|
1112
|
+
self.readIdentifiable(element, parent)
|
|
694
1113
|
self.readRPortPrototype(element, parent)
|
|
695
1114
|
self.readPPortPrototype(element, parent)
|
|
1115
|
+
self.readSwComponentTypePortGroups(element, parent)
|
|
696
1116
|
|
|
697
1117
|
def readAtomicSwComponentType(self, element, parent: AtomicSwComponentType):
|
|
698
1118
|
self.readSwComponentType(element, parent)
|
|
699
|
-
self.
|
|
700
|
-
|
|
701
|
-
def
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
1119
|
+
self.readSwcInternalBehavior(element, parent)
|
|
1120
|
+
|
|
1121
|
+
def readEcuAbstractionSwComponent(self, element, parent: ARPackage):
|
|
1122
|
+
short_name = self.getShortName(element)
|
|
1123
|
+
sw_component = parent.createEcuAbstractionSwComponentType(short_name)
|
|
1124
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1125
|
+
|
|
1126
|
+
def readApplicationSwComponentTypes(self, element: ET.Element, parent: ARPackage):
|
|
1127
|
+
short_name = self.getShortName(element)
|
|
1128
|
+
sw_component = parent.createApplicationSwComponentType(short_name)
|
|
1129
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1130
|
+
|
|
1131
|
+
def readComplexDeviceDriverSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1132
|
+
short_name = self.getShortName(element)
|
|
1133
|
+
sw_component = parent.createComplexDeviceDriverSwComponentType(short_name)
|
|
1134
|
+
self.logger.debug("readComplexDeviceDriverSwComponentType <%s>" % short_name)
|
|
1135
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1136
|
+
|
|
1137
|
+
def readSensorActuatorSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1138
|
+
short_name = self.getShortName(element)
|
|
1139
|
+
sw_component = parent.createSensorActuatorSwComponentType(short_name)
|
|
1140
|
+
self.logger.debug("readSensorActuatorSwComponentType <%s>" % short_name)
|
|
1141
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1142
|
+
|
|
1143
|
+
def readServiceSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1144
|
+
short_name = self.getShortName(element)
|
|
1145
|
+
sw_component = parent.createServiceSwComponentType(short_name)
|
|
1146
|
+
self.logger.debug("readServiceSwComponentType <%s>" % short_name)
|
|
1147
|
+
self.readAtomicSwComponentType(element, sw_component)
|
|
1148
|
+
|
|
1149
|
+
def readPPortInCompositionInstanceRef(self, element: ET.Element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
|
|
1150
|
+
p_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1151
|
+
p_port_in_composition_instance_ref.target_p_port_ref = self.getChildElementOptionalRefType(element, "TARGET-P-PORT-REF")
|
|
1152
|
+
|
|
1153
|
+
self.logger.debug("PPortInCompositionInstanceRef")
|
|
1154
|
+
self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
|
|
1155
|
+
% (p_port_in_composition_instance_ref.context_component_ref.dest, p_port_in_composition_instance_ref.context_component_ref.value))
|
|
1156
|
+
self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
|
|
1157
|
+
% (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
|
|
1158
|
+
|
|
1159
|
+
def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
|
|
1160
|
+
r_port_in_composition_instance_ref.context_component_ref = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1161
|
+
r_port_in_composition_instance_ref.target_r_port_ref = self.getChildElementOptionalRefType(element, "TARGET-R-PORT-REF")
|
|
1162
|
+
|
|
1163
|
+
self.logger.debug("RPortInCompositionInstanceRef")
|
|
1164
|
+
self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
|
|
1165
|
+
% (r_port_in_composition_instance_ref.context_component_ref.dest, r_port_in_composition_instance_ref.context_component_ref.value))
|
|
1166
|
+
self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
|
|
1167
|
+
% (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
|
|
1168
|
+
|
|
1169
|
+
def readAssemblySwConnectorProviderIRef(self, element: ET.Element, parent: AssemblySwConnector):
|
|
733
1170
|
child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
|
|
734
|
-
if (child_element
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
parent.provider_iref =
|
|
1171
|
+
if (child_element is not None):
|
|
1172
|
+
provide_iref = PPortInCompositionInstanceRef()
|
|
1173
|
+
self.readElementAttributes(child_element, provide_iref)
|
|
1174
|
+
self.readPPortInCompositionInstanceRef(child_element, provide_iref)
|
|
1175
|
+
parent.provider_iref = provide_iref
|
|
739
1176
|
|
|
740
|
-
def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
|
|
1177
|
+
def readAssemblySwConnectorRequesterIRef(self, element: ET.Element, parent: AssemblySwConnector):
|
|
741
1178
|
child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
|
|
742
|
-
if (child_element
|
|
743
|
-
requester_iref =
|
|
744
|
-
|
|
745
|
-
|
|
1179
|
+
if (child_element is not None):
|
|
1180
|
+
requester_iref = RPortInCompositionInstanceRef()
|
|
1181
|
+
self.readElementAttributes(child_element, requester_iref)
|
|
1182
|
+
self.readRPortInCompositionInstanceRef(child_element, requester_iref)
|
|
746
1183
|
parent.requester_iref = requester_iref
|
|
747
1184
|
|
|
748
|
-
def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
|
|
1185
|
+
def readAssemblySwConnectors(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
749
1186
|
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
|
|
750
|
-
short_name = self.
|
|
1187
|
+
short_name = self.getShortName(child_element)
|
|
751
1188
|
self.logger.debug("readAssemblySwConnectors %s" % short_name)
|
|
752
1189
|
|
|
753
1190
|
connector = parent.createAssemblySwConnector(short_name)
|
|
1191
|
+
self.readIdentifiable(child_element, connector)
|
|
754
1192
|
self.readAssemblySwConnectorProviderIRef(child_element, connector)
|
|
755
1193
|
self.readAssemblySwConnectorRequesterIRef(child_element, connector)
|
|
756
1194
|
|
|
757
|
-
def
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
1195
|
+
def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
|
|
1196
|
+
inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
|
|
1197
|
+
if (inner_port_iref_element is not None):
|
|
1198
|
+
child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
|
|
1199
|
+
if (child_element is not None):
|
|
1200
|
+
r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
|
|
1201
|
+
self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
|
|
1202
|
+
parent.inner_port_iref = r_port_in_composition_instance_ref
|
|
1203
|
+
return
|
|
1204
|
+
|
|
1205
|
+
child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
|
|
1206
|
+
if (child_element is not None):
|
|
1207
|
+
p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
|
|
1208
|
+
self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
|
|
1209
|
+
parent.inner_port_iref = p_port_in_composition_instance_ref
|
|
1210
|
+
return
|
|
1211
|
+
|
|
1212
|
+
self._raiseError("Unsupported child element of INNER-PORT-IREF")
|
|
761
1213
|
|
|
762
|
-
|
|
763
|
-
|
|
1214
|
+
def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
|
|
1215
|
+
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
|
|
1216
|
+
short_name = self.getShortName(child_element)
|
|
1217
|
+
self.logger.debug("readDelegationSwConnectors %s" % short_name)
|
|
1218
|
+
|
|
1219
|
+
connector = parent.createDelegationSwConnector(short_name)
|
|
1220
|
+
self.readIdentifiable(child_element, connector)
|
|
1221
|
+
self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
|
|
1222
|
+
|
|
1223
|
+
if connector.inner_port_iref == None and connector.outer_port_iref == None:
|
|
1224
|
+
self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
|
|
764
1225
|
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
|
|
1226
|
+
connector.outer_port_ref = self.getChildElementOptionalRefType(child_element, "OUTER-PORT-REF")
|
|
1227
|
+
self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
|
|
1228
|
+
% (connector.outer_port_ref.dest, connector.outer_port_ref.value))
|
|
769
1229
|
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
self.
|
|
773
|
-
self.
|
|
1230
|
+
def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
1231
|
+
for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
|
|
1232
|
+
short_name = self.getShortName(child_element)
|
|
1233
|
+
self.logger.debug("readSwComponentPrototypes %s" % short_name)
|
|
1234
|
+
prototype = parent.createSwComponentPrototype(short_name)
|
|
1235
|
+
self.readIdentifiable(child_element, prototype)
|
|
1236
|
+
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
774
1237
|
|
|
775
|
-
def
|
|
1238
|
+
def readCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
1239
|
+
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
1240
|
+
self.logger.debug("readDataTypeMappingSet")
|
|
1241
|
+
if child_element is not None:
|
|
1242
|
+
for ref in self.getChildElementRefTypeList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
1243
|
+
parent.addDataTypeMapping(ref)
|
|
1244
|
+
|
|
1245
|
+
def readCompositionSwComponentType(self, element: ET.Element, parent: ARPackage):
|
|
1246
|
+
short_name = self.getShortName(element)
|
|
1247
|
+
self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
|
|
1248
|
+
|
|
1249
|
+
sw_component = parent.createCompositionSwComponentType(short_name)
|
|
1250
|
+
self.readIdentifiable(element, sw_component)
|
|
1251
|
+
self.readSwComponentType(element, sw_component)
|
|
1252
|
+
self.readSwComponentPrototypes(element, sw_component)
|
|
1253
|
+
self.readAssemblySwConnectors(element, sw_component)
|
|
1254
|
+
self.readDelegationSwConnectors(element, sw_component)
|
|
1255
|
+
self.readCompositionSwComponentTypeDataTypeMappingSet(element, sw_component)
|
|
1256
|
+
|
|
1257
|
+
self.logger.debug("ReadCompositionSwComponentTypes: <%s> (Done)" % short_name)
|
|
1258
|
+
|
|
1259
|
+
def readDataTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
776
1260
|
for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
|
|
777
1261
|
data_type_map = DataTypeMap()
|
|
778
|
-
|
|
779
|
-
data_type_map.
|
|
1262
|
+
self.readElementAttributes(child_element, data_type_map)
|
|
1263
|
+
data_type_map.application_data_type_ref = self.getChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF")
|
|
1264
|
+
data_type_map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
780
1265
|
parent.addDataTypeMap(data_type_map)
|
|
781
1266
|
# add the data type map to global namespace
|
|
782
1267
|
AUTOSAR.getInstance().addDataTypeMap(data_type_map)
|
|
783
1268
|
|
|
784
|
-
def
|
|
785
|
-
for child_element in element.findall("./xmlns:
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
self.
|
|
789
|
-
|
|
790
|
-
|
|
1269
|
+
def readModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
1270
|
+
for child_element in element.findall("./xmlns:MODE-REQUEST-TYPE-MAPS/xmlns:MODE-REQUEST-TYPE-MAP", self.nsmap):
|
|
1271
|
+
map = ModeRequestTypeMap()
|
|
1272
|
+
map.implementation_data_type_ref = self.getChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
|
|
1273
|
+
map.mode_group_ref = self.getChildElementOptionalRefType(child_element, "MODE-GROUP-REF")
|
|
1274
|
+
parent.addModeRequestTypeMap(map)
|
|
1275
|
+
|
|
1276
|
+
def readDataTypeMappingSet(self, element: ET.Element, parent: ARPackage):
|
|
1277
|
+
short_name = self.getShortName(element)
|
|
1278
|
+
mapping_set = parent.createDataTypeMappingSet(short_name)
|
|
1279
|
+
self.readIdentifiable(element, mapping_set)
|
|
1280
|
+
self.readDataTypeMaps(element, mapping_set)
|
|
1281
|
+
self.readModeRequestTypeMaps(element, mapping_set)
|
|
1282
|
+
|
|
1283
|
+
def readDataElements(self, element: ET.Element, parent: SenderReceiverInterface):
|
|
791
1284
|
for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
|
|
792
|
-
short_name = self.
|
|
1285
|
+
short_name = self.getShortName(child_element)
|
|
793
1286
|
prototype = parent.createDataElement(short_name)
|
|
794
|
-
self.
|
|
795
|
-
prototype.
|
|
1287
|
+
self.readIdentifiable(child_element, prototype)
|
|
1288
|
+
prototype.sw_data_def_props = self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS")
|
|
1289
|
+
self.readAutosarDataPrototype(child_element, prototype)
|
|
1290
|
+
prototype.init_value = self.getInitValue(child_element)
|
|
796
1291
|
|
|
797
1292
|
def readSenderReceiverInterfaces(self, element, parent: ARPackage):
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
1293
|
+
short_name = self.getShortName(element)
|
|
1294
|
+
sr_interface = parent.createSenderReceiverInterface(short_name)
|
|
1295
|
+
self.readIdentifiable(element, sr_interface)
|
|
1296
|
+
sr_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
|
|
1297
|
+
self.readDataElements(element, sr_interface)
|
|
802
1298
|
|
|
803
|
-
def readArgumentDataPrototypes(self, element, parent: ClientServerOperation):
|
|
1299
|
+
def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
|
|
804
1300
|
for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
|
|
805
|
-
short_name = self.
|
|
1301
|
+
short_name = self.getShortName(child_element)
|
|
806
1302
|
prototype = ArgumentDataPrototype(property, short_name)
|
|
807
|
-
prototype.type_tref = self.
|
|
808
|
-
prototype.direction = self.
|
|
1303
|
+
prototype.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
1304
|
+
prototype.direction = self.getChildElementOptionalLiteral(child_element, "DIRECTION")
|
|
809
1305
|
parent.addArgumentDataPrototype(prototype)
|
|
810
1306
|
|
|
811
|
-
def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
|
|
1307
|
+
def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
|
|
812
1308
|
child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
|
|
813
|
-
if child_element
|
|
814
|
-
for ref in self.
|
|
1309
|
+
if child_element is not None:
|
|
1310
|
+
for ref in self.getChildElementRefTypeList(child_element, "POSSIBLE-ERROR-REF"):
|
|
815
1311
|
parent.addPossibleErrorRef(ref)
|
|
816
1312
|
|
|
817
|
-
def readOperations(self, element, parent: ClientServerInterface):
|
|
1313
|
+
def readOperations(self, element: ET.Element, parent: ClientServerInterface):
|
|
818
1314
|
for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
|
|
819
|
-
short_name = self.
|
|
1315
|
+
short_name = self.getShortName(child_element)
|
|
820
1316
|
operation = parent.createOperation(short_name)
|
|
821
1317
|
self.readArgumentDataPrototypes(child_element, operation)
|
|
822
1318
|
self.readPossibleErrorRefs(child_element, operation)
|
|
823
1319
|
|
|
824
|
-
def readPossibleErrors(self, element, parent: ClientServerInterface):
|
|
1320
|
+
def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
|
|
825
1321
|
for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
|
|
826
|
-
short_name = self.
|
|
1322
|
+
short_name = self.getShortName(child_element)
|
|
827
1323
|
error = parent.createApplicationError(short_name)
|
|
828
|
-
error.error_code = self.
|
|
1324
|
+
error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
|
|
829
1325
|
|
|
830
|
-
def
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
cs_interface = parent.createClientServerInterface(short_name)
|
|
834
|
-
cs_interface.is_service = self.readChildElement(short_name, child_element, "IS-SERVICE")
|
|
835
|
-
self.readOperations(child_element, cs_interface)
|
|
836
|
-
self.readPossibleErrors(child_element, cs_interface)
|
|
1326
|
+
def readPortInterface(self, element: ET.Element, port_interface: PortInterface):
|
|
1327
|
+
port_interface.is_service = self.getChildElementOptionalBooleanValue(element, "IS-SERVICE")
|
|
1328
|
+
port_interface.serviceKind = self.getChildElementOptionalLiteral(element, "SERVICE-KIND")
|
|
837
1329
|
|
|
838
|
-
def
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
1330
|
+
def readClientServerInterface(self, element: ET.Element, parent: ARPackage):
|
|
1331
|
+
short_name = self.getShortName(element)
|
|
1332
|
+
cs_interface = parent.createClientServerInterface(short_name)
|
|
1333
|
+
self.readPortInterface(element, cs_interface)
|
|
1334
|
+
self.readOperations(element, cs_interface)
|
|
1335
|
+
self.readPossibleErrors(element, cs_interface)
|
|
842
1336
|
|
|
843
|
-
def
|
|
1337
|
+
def readCompuConst(self, element: ET.Element, parent: CompuScale):
|
|
1338
|
+
child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
|
|
1339
|
+
if (child_element is not None):
|
|
1340
|
+
self.logger.debug("readCompuConst VT: %s" % child_element.text)
|
|
1341
|
+
contents = CompuScaleConstantContents()
|
|
1342
|
+
contents.compu_const = CompuConst()
|
|
1343
|
+
contents.compu_const.compu_const_content_type = CompuConstTextContent()
|
|
1344
|
+
contents.compu_const.compu_const_content_type.vt = ARLiteral()
|
|
1345
|
+
contents.compu_const.compu_const_content_type.vt.setValue(child_element.text)
|
|
1346
|
+
parent.compuScaleContents = contents
|
|
1347
|
+
|
|
1348
|
+
def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
|
|
1349
|
+
for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
|
|
1350
|
+
self.logger.debug("readCompuNominatorDenominator - %s: %s" % (key, child_element.text))
|
|
1351
|
+
parent.add_v(child_element.text)
|
|
1352
|
+
|
|
1353
|
+
def readCompuRationCoeffs(self, element: ET.Element, parent: CompuScale):
|
|
1354
|
+
child_element = element.find("./xmlns:COMPU-RATIONAL-COEFFS", self.nsmap)
|
|
1355
|
+
if (child_element is not None):
|
|
1356
|
+
self.logger.debug("readCompuRationCoeffs")
|
|
1357
|
+
contents = CompuScaleRationalFormula()
|
|
1358
|
+
contents.compu_rational_coeffs = CompuRationalCoeffs()
|
|
1359
|
+
contents.compu_rational_coeffs.compu_denominator = CompuNominatorDenominator()
|
|
1360
|
+
contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
|
|
1361
|
+
self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
|
|
1362
|
+
self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
|
|
1363
|
+
parent.compuScaleContents = contents
|
|
1364
|
+
|
|
1365
|
+
def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
|
|
1366
|
+
self.readCompuConst(element, parent)
|
|
1367
|
+
self.readCompuRationCoeffs(element, parent)
|
|
1368
|
+
|
|
1369
|
+
def readCompuScales(self, element: ET.Element, parent: CompuScales):
|
|
844
1370
|
for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
|
|
845
1371
|
compu_scale = CompuScale()
|
|
846
|
-
|
|
847
|
-
compu_scale.
|
|
848
|
-
compu_scale.
|
|
849
|
-
self.
|
|
1372
|
+
self.readElementAttributes(child_element, compu_scale)
|
|
1373
|
+
compu_scale.symbol = self.getChildElementOptionalLiteral(child_element, "SYMBOL")
|
|
1374
|
+
compu_scale.lowerLimit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1375
|
+
compu_scale.upperLimit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1376
|
+
self.readCompuScaleContents(child_element, compu_scale)
|
|
850
1377
|
parent.addCompuScale(compu_scale)
|
|
851
1378
|
|
|
852
|
-
def readCompuInternalToPhys(self, element, parent: CompuMethod):
|
|
1379
|
+
def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
|
|
853
1380
|
child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
|
|
854
|
-
if (child_element
|
|
1381
|
+
if (child_element is not None):
|
|
855
1382
|
parent.compu_internal_to_phys = Compu()
|
|
1383
|
+
self.readElementAttributes(child_element, parent.compu_internal_to_phys)
|
|
856
1384
|
parent.compu_internal_to_phys.compu_content = CompuScales()
|
|
857
1385
|
self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
|
|
858
1386
|
|
|
859
|
-
def
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
1387
|
+
def readCompuMethod(self, element: ET.Element, parent: ARPackage):
|
|
1388
|
+
short_name = self.getShortName(element)
|
|
1389
|
+
self.logger.debug("readCompuMethods %s" % short_name)
|
|
1390
|
+
compu_method = parent.createCompuMethod(short_name)
|
|
1391
|
+
self.readIdentifiable(element, compu_method)
|
|
1392
|
+
compu_method.unit_ref = self.getChildElementOptionalRefType(element, "UNIT-REF")
|
|
1393
|
+
self.readCompuInternalToPhys(element, compu_method)
|
|
865
1394
|
|
|
866
|
-
def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
|
|
1395
|
+
def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
|
|
867
1396
|
for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
|
|
868
1397
|
mapping = SwcBswRunnableMapping()
|
|
869
|
-
mapping.
|
|
870
|
-
mapping.
|
|
1398
|
+
mapping.bswEntityRef = self.getChildElementOptionalRefType(child_element, "BSW-ENTITY-REF")
|
|
1399
|
+
mapping.swcRunnableRef = self.getChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF")
|
|
871
1400
|
parent.addRunnableMapping(mapping)
|
|
872
1401
|
|
|
873
|
-
def readSwcBswMappings(self, element, parent: ARPackage):
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
1402
|
+
def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
|
|
1403
|
+
short_name = self.getShortName(element)
|
|
1404
|
+
self.logger.debug("readSwcBswMappings %s" % short_name)
|
|
1405
|
+
swc_bsw_mapping = parent.createSwcBswMapping(short_name)
|
|
1406
|
+
swc_bsw_mapping.bswBehaviorRef = self.getChildElementOptionalRefType(element, "BSW-BEHAVIOR-REF")
|
|
1407
|
+
self.readSwcBswRunnableMappings(element, swc_bsw_mapping)
|
|
1408
|
+
swc_bsw_mapping.swcBehaviorRef = self.getChildElementOptionalRefType(element, "SWC-BEHAVIOR-REF")
|
|
1409
|
+
|
|
1410
|
+
def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
|
|
1411
|
+
self.readElementAttributes(element, value_spec)
|
|
1412
|
+
value_spec.short_label = self.getChildElementOptionalLiteral(element, "SHORT-LABEL")
|
|
1413
|
+
self.logger.debug("readValueSpecification")
|
|
1414
|
+
|
|
1415
|
+
def getApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
|
|
1416
|
+
self.logger.debug("getApplicationValueSpecification")
|
|
1417
|
+
value_spec = ApplicationValueSpecification()
|
|
1418
|
+
self.readValueSpecification(element, value_spec)
|
|
1419
|
+
value_spec.category = self.getChildElementOptionalLiteral(element, "CATEGORY")
|
|
1420
|
+
value_spec.sw_value_cont = self.getSwValueCont(element)
|
|
1421
|
+
return value_spec
|
|
1422
|
+
|
|
1423
|
+
def getNumericalValueSpecification(self, element: ET.Element) -> NumericalValueSpecification:
|
|
1424
|
+
self.logger.debug("getNumericalValueSpecification")
|
|
1425
|
+
value_spec = NumericalValueSpecification()
|
|
1426
|
+
self.readValueSpecification(element, value_spec)
|
|
1427
|
+
value_spec.value = self.getChildElementOptionalFloatValue(element, "VALUE")
|
|
1428
|
+
return value_spec
|
|
1429
|
+
|
|
1430
|
+
def getTextValueSpecification(self, element: ET.Element) -> TextValueSpecification:
|
|
1431
|
+
self.logger.debug("getTextValueSpecification")
|
|
1432
|
+
value_spec = TextValueSpecification()
|
|
1433
|
+
self.readValueSpecification(element, value_spec)
|
|
1434
|
+
value_spec.value = self.getChildElementOptionalLiteral(element, "VALUE")
|
|
1435
|
+
return value_spec
|
|
1436
|
+
|
|
1437
|
+
def getArrayValueSpecification(self, element: ET.Element) -> ArrayValueSpecification:
|
|
1438
|
+
self.logger.debug("getArrayValueSpecification")
|
|
1439
|
+
value_spec = ArrayValueSpecification()
|
|
1440
|
+
self.readValueSpecification(element, value_spec)
|
|
1441
|
+
child_elements = element.findall("./xmlns:ELEMENTS/*", self.nsmap)
|
|
1442
|
+
for child_element in child_elements:
|
|
1443
|
+
value_spec.add_element(self.getValueSpecification(child_element))
|
|
1444
|
+
return value_spec
|
|
1445
|
+
|
|
1446
|
+
def getConstantReference(self, element: ET.Element) -> ConstantReference:
|
|
1447
|
+
self.logger.debug("getConstantReference")
|
|
1448
|
+
value_spec = ConstantReference()
|
|
1449
|
+
self.readValueSpecification(element, value_spec)
|
|
1450
|
+
value_spec.constant_ref = self.getChildElementOptionalRefType(element, "CONSTANT-REF")
|
|
1451
|
+
return value_spec
|
|
1452
|
+
|
|
1453
|
+
def getValueSpecification(self, element: ET.Element) -> ValueSpecification:
|
|
1454
|
+
tag_name = self.getTagName(element.tag)
|
|
1455
|
+
if tag_name == "APPLICATION-VALUE-SPECIFICATION":
|
|
1456
|
+
value_spec = self.getApplicationValueSpecification(element)
|
|
1457
|
+
elif tag_name == "RECORD-VALUE-SPECIFICATION":
|
|
1458
|
+
value_spec = self.getRecordValueSpecification(element)
|
|
1459
|
+
elif tag_name == "NUMERICAL-VALUE-SPECIFICATION":
|
|
1460
|
+
value_spec = self.getNumericalValueSpecification(element)
|
|
1461
|
+
elif tag_name == "ARRAY-VALUE-SPECIFICATION":
|
|
1462
|
+
value_spec = self.getArrayValueSpecification(element)
|
|
1463
|
+
elif tag_name == "TEXT-VALUE-SPECIFICATION":
|
|
1464
|
+
value_spec = self.getTextValueSpecification(element)
|
|
1465
|
+
elif tag_name == "CONSTANT-REFERENCE":
|
|
1466
|
+
value_spec = self.getConstantReference(element)
|
|
1467
|
+
else:
|
|
1468
|
+
raise NotImplementedError("Unsupported RecordValueSpecificationField %s" % tag_name)
|
|
1469
|
+
return value_spec
|
|
1470
|
+
|
|
1471
|
+
def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
|
|
1472
|
+
for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
|
|
1473
|
+
spec.add_field(self.getValueSpecification(child_element))
|
|
1474
|
+
|
|
1475
|
+
def getRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
|
|
1476
|
+
value_spec = RecordValueSpecification()
|
|
1477
|
+
self.readValueSpecification(element, value_spec)
|
|
1478
|
+
self.readRecordValueSpecificationFields(element, value_spec)
|
|
1479
|
+
return value_spec
|
|
1480
|
+
|
|
1481
|
+
def readConstantSpecification(self, element: ET.Element, parent: ARPackage):
|
|
1482
|
+
short_name = self.getShortName(element)
|
|
1483
|
+
self.logger.debug("readConstantSpecification %s" % short_name)
|
|
1484
|
+
spec = parent.createConstantSpecification(short_name)
|
|
1485
|
+
self.readIdentifiable(element, spec)
|
|
1486
|
+
for value_spec_tag in element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
|
|
1487
|
+
spec.value_spec = self.getValueSpecification(value_spec_tag)
|
|
1488
|
+
|
|
1489
|
+
def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
|
|
1490
|
+
child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
|
|
1491
|
+
if child_element is not None:
|
|
1492
|
+
constrs = InternalConstrs()
|
|
1493
|
+
self.readElementAttributes(child_element, constrs)
|
|
1494
|
+
constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1495
|
+
constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1496
|
+
parent.internalConstrs = constrs
|
|
1497
|
+
|
|
1498
|
+
def readPhysConstrs(self, element: ET.Element, parent: DataConstrRule):
|
|
1499
|
+
child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
|
|
1500
|
+
if child_element is not None:
|
|
1501
|
+
constrs = PhysConstrs()
|
|
1502
|
+
self.readElementAttributes(child_element, constrs)
|
|
1503
|
+
constrs.lower_limit = self.getChildLimitElement(child_element, "LOWER-LIMIT")
|
|
1504
|
+
constrs.upper_limit = self.getChildLimitElement(child_element, "UPPER-LIMIT")
|
|
1505
|
+
constrs.unit_ref = self.getChildElementOptionalRefType(child_element, "UNIT-REF")
|
|
1506
|
+
parent.physConstrs = constrs
|
|
1507
|
+
|
|
1508
|
+
def readDataConstrRule(self, element: ET.Element, parent: DataConstr):
|
|
1509
|
+
for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
|
|
1510
|
+
self.logger.debug("readDataConstrRule")
|
|
1511
|
+
rule = DataConstrRule()
|
|
1512
|
+
self.readElementAttributes(child_element, rule)
|
|
1513
|
+
rule.constrLevel = self.getChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL")
|
|
1514
|
+
self.readInternalConstrs(child_element, rule)
|
|
1515
|
+
self.readPhysConstrs(child_element, rule)
|
|
1516
|
+
parent.addDataConstrRule(rule)
|
|
1517
|
+
|
|
1518
|
+
def readDataConstr(self, element: ET.Element, parent: ARPackage):
|
|
1519
|
+
short_name = self.getShortName(element)
|
|
1520
|
+
self.logger.debug("readDataConstr %s" % short_name)
|
|
1521
|
+
constr = parent.createDataConstr(short_name)
|
|
1522
|
+
self.readIdentifiable(element, constr)
|
|
1523
|
+
self.readDataConstrRule(element, constr)
|
|
1524
|
+
|
|
1525
|
+
def readUnit(self, element: ET.Element, parent: ARPackage):
|
|
1526
|
+
short_name = self.getShortName(element)
|
|
1527
|
+
self.logger.debug("readUnit %s" % short_name)
|
|
1528
|
+
unit = parent.createUnit(short_name)
|
|
1529
|
+
self.readIdentifiable(element, unit)
|
|
1530
|
+
unit.display_name = self.getChildElementOptionalLiteral(element, "DISPLAY-NAME")
|
|
1531
|
+
|
|
1532
|
+
def readEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
|
|
1533
|
+
child_element = element.find("./xmlns:DATA-IDS", self.nsmap)
|
|
1534
|
+
if child_element is not None:
|
|
1535
|
+
for value in self.getChildElementNumericalValueList(child_element, "DATA-ID"):
|
|
1536
|
+
parent.addDataId(value)
|
|
1537
|
+
|
|
1538
|
+
def getEndToEndDescription(self, element: ET.Element, key: str) -> EndToEndDescription:
|
|
1539
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
1540
|
+
desc = None
|
|
1541
|
+
if (child_element is not None):
|
|
1542
|
+
desc = EndToEndDescription()
|
|
1543
|
+
desc.category = self.getChildElementOptionalLiteral(child_element, "CATEGORY")
|
|
1544
|
+
self.readEndToEndDescriptionDataId(child_element, desc)
|
|
1545
|
+
desc.dataIdMode = self.getChildElementOptionalNumericalValue(child_element, "DATA-ID-MODE")
|
|
1546
|
+
desc.maxDeltaCounterInit = self.getChildElementOptionalNumericalValue(child_element, "MAX-DELTA-COUNTER-INIT")
|
|
1547
|
+
desc.crcOffset = self.getChildElementOptionalNumericalValue(child_element, "CRC-OFFSET")
|
|
1548
|
+
desc.counterOffset = self.getChildElementOptionalNumericalValue(child_element, "COUNTER-OFFSET")
|
|
1549
|
+
return desc
|
|
1550
|
+
|
|
1551
|
+
def getVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element) -> VariableDataPrototypeInSystemInstanceRef:
|
|
1552
|
+
iref = VariableDataPrototypeInSystemInstanceRef()
|
|
1553
|
+
iref.contextComponentRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPONENT-REF")
|
|
1554
|
+
iref.contextCompositionRef = self.getChildElementOptionalRefType(element, "CONTEXT-COMPOSITION-REF")
|
|
1555
|
+
iref.contextPortRef = self.getChildElementOptionalRefType(element, "CONTEXT-PORT-REF")
|
|
1556
|
+
iref.targetDataPrototypeRef = self.getChildElementOptionalRefType(element, "TARGET-DATA-PROTOTYPE-REF")
|
|
1557
|
+
return iref
|
|
1558
|
+
|
|
1559
|
+
def getEndToEndProtectionVariablePrototype(self, element: ET.Element) -> EndToEndProtectionVariablePrototype:
|
|
1560
|
+
prototype = EndToEndProtectionVariablePrototype()
|
|
1561
|
+
for child_element in element.findall("./xmlns:RECEIVER-IREFS/xmlns:RECEIVER-IREF", self.nsmap):
|
|
1562
|
+
prototype.addReceiverIref(self.getVariableDataPrototypeInSystemInstanceRef(child_element))
|
|
1563
|
+
child_element = element.find("./xmlns:SENDER-IREF", self.nsmap)
|
|
1564
|
+
if child_element is not None:
|
|
1565
|
+
prototype.senderIRef = self.getVariableDataPrototypeInSystemInstanceRef(child_element)
|
|
1566
|
+
return prototype
|
|
1567
|
+
|
|
1568
|
+
def readEndToEndProtectionVariablePrototypes(self, element: ET.Element, parent: EndToEndProtection):
|
|
1569
|
+
for child_element in element.findall("./xmlns:END-TO-END-PROTECTION-VARIABLE-PROTOTYPES/*", self.nsmap):
|
|
1570
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1571
|
+
if tag_name == "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE":
|
|
1572
|
+
parent.addEndToEndProtectionVariablePrototype(self.getEndToEndProtectionVariablePrototype(child_element))
|
|
1573
|
+
else:
|
|
1574
|
+
self._raiseError("Unsupported End To End Protection Variable Prototype <%s>" % tag_name)
|
|
1575
|
+
|
|
1576
|
+
def readEndToEndProtection(self, element: ET.Element, parent: EndToEndProtectionSet):
|
|
1577
|
+
short_name = self.getShortName(element)
|
|
1578
|
+
self.logger.debug("readEndToEndProtection %s" % short_name)
|
|
1579
|
+
protection = parent.createEndToEndProtection(short_name)
|
|
1580
|
+
self.readIdentifiable(element, protection)
|
|
1581
|
+
protection.endToEndProfile = self.getEndToEndDescription(element, "END-TO-END-PROFILE")
|
|
1582
|
+
self.readEndToEndProtectionVariablePrototypes(element, protection)
|
|
1583
|
+
|
|
1584
|
+
def readEndToEndProtections(self, element: ET.Element, parent: EndToEndProtectionSet):
|
|
1585
|
+
for child_element in element.findall("./xmlns:END-TO-END-PROTECTIONS/*", self.nsmap):
|
|
1586
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1587
|
+
if tag_name == "END-TO-END-PROTECTION":
|
|
1588
|
+
self.readEndToEndProtection(child_element, parent)
|
|
1589
|
+
|
|
1590
|
+
def readEndToEndProtectionSet(self, element: ET.Element, parent: ARPackage):
|
|
1591
|
+
short_name = self.getShortName(element)
|
|
1592
|
+
self.logger.debug("readEndToEndProtectionSet %s" % short_name)
|
|
1593
|
+
protection_set = parent.createEndToEndProtectionSet(short_name)
|
|
1594
|
+
self.readEndToEndProtections(element, protection_set)
|
|
1595
|
+
|
|
1596
|
+
def readAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
|
|
1597
|
+
self.readIdentifiable(element, data_type)
|
|
1598
|
+
data_type.sw_data_def_props = self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS")
|
|
1599
|
+
|
|
1600
|
+
def readApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
|
|
1601
|
+
self.readAutosarDataType(element, data_type)
|
|
1602
|
+
|
|
1603
|
+
def readApplicationCompositeDataType(self, element: ET.Element, data_type: ApplicationCompositeDataType):
|
|
1604
|
+
self.readApplicationDataType(element, data_type)
|
|
1605
|
+
|
|
1606
|
+
def readDataPrototype(self, element: ET.Element, prototype: DataPrototype):
|
|
1607
|
+
self.readIdentifiable(element, prototype)
|
|
1608
|
+
|
|
1609
|
+
def readApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
|
|
1610
|
+
self.readDataPrototype(element, prototype)
|
|
1611
|
+
prototype.typeTRef = self.getChildElementOptionalRefType(element, "TYPE-TREF")
|
|
1612
|
+
|
|
1613
|
+
def readApplicationArrayElement(self, element: ET.Element, parent: ApplicationArrayDataType):
|
|
1614
|
+
child_element = element.find("./xmlns:ELEMENT", self.nsmap)
|
|
1615
|
+
if child_element is not None:
|
|
1616
|
+
short_name = self.getShortName(child_element)
|
|
1617
|
+
self.logger.debug("readApplicationArrayElement %s" % short_name)
|
|
1618
|
+
array_element = parent.createApplicationArrayElement(short_name)
|
|
1619
|
+
self.readApplicationCompositeElementDataPrototype(child_element, array_element)
|
|
1620
|
+
array_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
|
|
1621
|
+
array_element.setMaxNumberOfElements(self.getChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS"))
|
|
1622
|
+
|
|
1623
|
+
def readApplicationArrayDataType(self, element: ET.Element, parent: ARPackage):
|
|
1624
|
+
short_name = self.getShortName(element)
|
|
1625
|
+
self.logger.debug("readApplicationArrayDataType %s" % short_name)
|
|
1626
|
+
data_type = parent.createApplicationArrayDataType(short_name)
|
|
1627
|
+
self.readApplicationCompositeDataType(element, data_type)
|
|
1628
|
+
self.readApplicationArrayElement(element, data_type)
|
|
1629
|
+
|
|
1630
|
+
def getSwRecordLayoutV(self, element: ET.Element, key: str) -> SwRecordLayoutV:
|
|
1631
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
1632
|
+
layout_v = None
|
|
1633
|
+
if child_element is not None:
|
|
1634
|
+
layout_v = SwRecordLayoutV()
|
|
1635
|
+
layout_v.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
1636
|
+
.setBaseTypeRef(self.getChildElementOptionalRefType(child_element, "BASE-TYPE-REF")) \
|
|
1637
|
+
.setSwRecordLayoutVAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS")) \
|
|
1638
|
+
.setSwRecordLayoutVProp(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP")) \
|
|
1639
|
+
.setSwRecordLayoutVIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX"))
|
|
1640
|
+
return layout_v
|
|
1641
|
+
|
|
1642
|
+
def getSwRecordLayoutGroup(self, element: ET.Element, key: str) -> SwRecordLayoutGroup:
|
|
1643
|
+
child_element = element.find("./xmlns:%s" % key, self.nsmap)
|
|
1644
|
+
group = None
|
|
1645
|
+
if child_element is not None:
|
|
1646
|
+
group = SwRecordLayoutGroup()
|
|
1647
|
+
group.setShortLabel(self.getChildElementOptionalLiteral(child_element, "SHORT-LABEL")) \
|
|
1648
|
+
.setCategory(self.getChildElementOptionalLiteral(child_element, "CATEGORY")) \
|
|
1649
|
+
.setSwRecordLayoutGroupAxis(self.getChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS")) \
|
|
1650
|
+
.setSwRecordLayoutGroupIndex(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX")) \
|
|
1651
|
+
.setSwRecordLayoutGroupFrom(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM")) \
|
|
1652
|
+
.setSwRecordLayoutGroupTo(self.getChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO")) \
|
|
1653
|
+
|
|
1654
|
+
group_content = SwRecordLayoutGroupContent()
|
|
1655
|
+
group_content.swRecordLayoutGroup = self.getSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP")
|
|
1656
|
+
group_content.swRecordLayoutV = self.getSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V")
|
|
1657
|
+
|
|
1658
|
+
if group_content.swRecordLayoutGroup is not None:
|
|
1659
|
+
group.setSwRecordLayoutGroupContentType(group_content)
|
|
1660
|
+
elif group_content.swRecordLayoutV is not None:
|
|
1661
|
+
group.setSwRecordLayoutGroupContentType(group_content)
|
|
1662
|
+
|
|
1663
|
+
return group
|
|
1664
|
+
|
|
1665
|
+
def readSwRecordLayout(self, element: ET.Element, parent: ARPackage):
|
|
1666
|
+
short_name = self.getShortName(element)
|
|
1667
|
+
self.logger.debug("readSwRecordLayout %s" % short_name)
|
|
1668
|
+
layout = parent.createSwRecordLayout(short_name)
|
|
1669
|
+
self.readIdentifiable(element, layout)
|
|
1670
|
+
layout.setSwRecordLayoutGroup(self.getSwRecordLayoutGroup(element, "SW-RECORD-LAYOUT-GROUP"))
|
|
1671
|
+
|
|
1672
|
+
def readSwAddrMethod(self, element: ET.Element, parent: ARPackage):
|
|
1673
|
+
short_name = self.getShortName(element)
|
|
1674
|
+
self.logger.debug("readSwAddrMethod %s" % short_name)
|
|
1675
|
+
layout = parent.createSwAddrMethod(short_name)
|
|
1676
|
+
|
|
1677
|
+
def readTriggerInterface(self, element: ET.Element, parent: ARPackage):
|
|
1678
|
+
short_name = self.getShortName(element)
|
|
1679
|
+
self.logger.debug("readTriggerInterface %s" % short_name)
|
|
1680
|
+
trigger_if = parent.createTriggerInterface(short_name)
|
|
1681
|
+
|
|
1682
|
+
def readModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
|
|
1683
|
+
for child_element in element.findall("./xmlns:MODE-DECLARATIONS/xmlns:MODE-DECLARATION", self.nsmap):
|
|
1684
|
+
short_name = self.getShortName(child_element)
|
|
1685
|
+
declaration = parent.createModeDeclaration(short_name)
|
|
1686
|
+
declaration.setValue(self.getChildElementOptionalNumericalValue(child_element, "VALUE"))
|
|
1687
|
+
|
|
1688
|
+
def readModeDeclarationGroup(self, element: ET.Element, parent: ARPackage):
|
|
1689
|
+
short_name = self.getShortName(element)
|
|
1690
|
+
self.logger.debug("readModeDeclarationGroup %s" % short_name)
|
|
1691
|
+
group = parent.createModeDeclarationGroup(short_name)
|
|
1692
|
+
self.readIdentifiable(element, group)
|
|
1693
|
+
self.readModeDeclarationGroupModeDeclaration(element, group)
|
|
1694
|
+
group.setInitialModeRef(self.getChildElementOptionalRefType(element, "INITIAL-MODE-REF"))
|
|
1695
|
+
group.setOnTransitionValue(self.getChildElementOptionalNumericalValue(element, "ON-TRANSITION-VALUE"))
|
|
1696
|
+
|
|
1697
|
+
def readModeSwitchInterfaceModeGroup(self, element: ET.Element, parent: ModeSwitchInterface):
|
|
1698
|
+
child_element = self.find(element, "MODE-GROUP")
|
|
1699
|
+
if child_element is not None:
|
|
1700
|
+
short_name = self.getShortName(child_element)
|
|
1701
|
+
mode_group = parent.createModeGroup(short_name)
|
|
1702
|
+
self.readIdentifiable(child_element, mode_group)
|
|
1703
|
+
mode_group.type_tref = self.getChildElementOptionalRefType(child_element, "TYPE-TREF")
|
|
1704
|
+
|
|
1705
|
+
def readModeSwitchInterface(self, element: ET.Element, parent: ARPackage):
|
|
1706
|
+
short_name = self.getShortName(element)
|
|
1707
|
+
self.logger.debug("readModeSwitchInterface %s" % short_name)
|
|
1708
|
+
mode_interface = parent.createModeSwitchInterface(short_name)
|
|
1709
|
+
self.readPortInterface(element, mode_interface)
|
|
1710
|
+
self.readModeSwitchInterfaceModeGroup(element, mode_interface)
|
|
1711
|
+
|
|
1712
|
+
def readARPackageElements(self, element: ET.Element, parent: ARPackage):
|
|
1713
|
+
for child_element in self.findall(element, "./ELEMENTS/*"):
|
|
1714
|
+
tag_name = self.getTagName(child_element.tag)
|
|
1715
|
+
if tag_name == "COMPOSITION-SW-COMPONENT-TYPE":
|
|
1716
|
+
self.readCompositionSwComponentType(child_element, parent)
|
|
1717
|
+
elif tag_name == "COMPLEX-DEVICE-DRIVER-SW-COMPONENT-TYPE":
|
|
1718
|
+
self.readComplexDeviceDriverSwComponentType(child_element, parent)
|
|
1719
|
+
elif tag_name == "SWC-IMPLEMENTATION":
|
|
1720
|
+
self.readSwcImplementation(child_element, parent)
|
|
1721
|
+
elif tag_name == "APPLICATION-PRIMITIVE-DATA-TYPE":
|
|
1722
|
+
self.readApplicationPrimitiveDataType(child_element, parent)
|
|
1723
|
+
elif tag_name == "APPLICATION-RECORD-DATA-TYPE":
|
|
1724
|
+
self.readApplicationRecordDataTypes(child_element, parent)
|
|
1725
|
+
elif tag_name == "SW-BASE-TYPE":
|
|
1726
|
+
self.readSwBaseType(child_element, parent)
|
|
1727
|
+
elif tag_name == "COMPU-METHOD":
|
|
1728
|
+
self.readCompuMethod(child_element, parent)
|
|
1729
|
+
elif tag_name == "CONSTANT-SPECIFICATION":
|
|
1730
|
+
self.readConstantSpecification(child_element, parent)
|
|
1731
|
+
elif tag_name == "DATA-CONSTR":
|
|
1732
|
+
self.readDataConstr(child_element, parent)
|
|
1733
|
+
elif tag_name == "END-TO-END-PROTECTION-SET":
|
|
1734
|
+
self.readEndToEndProtectionSet(child_element, parent)
|
|
1735
|
+
elif tag_name == "SENDER-RECEIVER-INTERFACE":
|
|
1736
|
+
self.readSenderReceiverInterfaces(child_element, parent)
|
|
1737
|
+
elif tag_name == "UNIT":
|
|
1738
|
+
self.readUnit(child_element, parent)
|
|
1739
|
+
elif tag_name == "BSW-MODULE-DESCRIPTION":
|
|
1740
|
+
self.readBswModuleDescription(child_element, parent)
|
|
1741
|
+
elif tag_name == "BSW-MODULE-ENTRY":
|
|
1742
|
+
self.readBswModuleEntry(child_element, parent)
|
|
1743
|
+
elif tag_name == "SWC-BSW-MAPPING":
|
|
1744
|
+
self.readSwcBswMappings(child_element, parent)
|
|
1745
|
+
elif tag_name == "BSW-IMPLEMENTATION":
|
|
1746
|
+
self.readBswImplementation(child_element, parent)
|
|
1747
|
+
elif tag_name == "IMPLEMENTATION-DATA-TYPE":
|
|
1748
|
+
self.readImplementationDataType(child_element, parent)
|
|
1749
|
+
elif tag_name == "CLIENT-SERVER-INTERFACE":
|
|
1750
|
+
self.readClientServerInterface(child_element, parent)
|
|
1751
|
+
elif tag_name == "APPLICATION-SW-COMPONENT-TYPE":
|
|
1752
|
+
self.readApplicationSwComponentTypes(child_element, parent)
|
|
1753
|
+
elif tag_name == "ECU-ABSTRACTION-SW-COMPONENT-TYPE":
|
|
1754
|
+
self.readEcuAbstractionSwComponent(child_element, parent)
|
|
1755
|
+
elif tag_name == "APPLICATION-ARRAY-DATA-TYPE":
|
|
1756
|
+
self.readApplicationArrayDataType(child_element, parent)
|
|
1757
|
+
elif tag_name == "SW-RECORD-LAYOUT":
|
|
1758
|
+
self.readSwRecordLayout(child_element, parent)
|
|
1759
|
+
elif tag_name == "SW-ADDR-METHOD":
|
|
1760
|
+
self.readSwAddrMethod(child_element, parent)
|
|
1761
|
+
elif tag_name == "TRIGGER-INTERFACE":
|
|
1762
|
+
self.readTriggerInterface(child_element, parent)
|
|
1763
|
+
elif tag_name == "SERVICE-SW-COMPONENT-TYPE":
|
|
1764
|
+
self.readServiceSwComponentType(child_element, parent)
|
|
1765
|
+
elif tag_name == "SENSOR-ACTUATOR-SW-COMPONENT-TYPE":
|
|
1766
|
+
self.readSensorActuatorSwComponentType(child_element, parent)
|
|
1767
|
+
elif tag_name == "DATA-TYPE-MAPPING-SET":
|
|
1768
|
+
self.readDataTypeMappingSet(child_element, parent)
|
|
1769
|
+
elif tag_name == "MODE-DECLARATION-GROUP":
|
|
1770
|
+
self.readModeDeclarationGroup(child_element, parent)
|
|
1771
|
+
elif tag_name == "MODE-SWITCH-INTERFACE":
|
|
1772
|
+
self.readModeSwitchInterface(child_element, parent)
|
|
1773
|
+
elif tag_name == "SYSTEM":
|
|
1774
|
+
pass
|
|
1775
|
+
elif tag_name == "ECU-INSTANCE":
|
|
1776
|
+
pass
|
|
1777
|
+
elif tag_name == "GATEWAY":
|
|
1778
|
+
pass
|
|
1779
|
+
elif tag_name == "I-SIGNAL-I-PDU-GROUP":
|
|
1780
|
+
pass
|
|
1781
|
+
elif tag_name == "CAN-CLUSTER":
|
|
1782
|
+
pass
|
|
1783
|
+
elif tag_name == "CAN-FRAME":
|
|
1784
|
+
pass
|
|
1785
|
+
elif tag_name == "I-SIGNAL":
|
|
1786
|
+
pass
|
|
1787
|
+
elif tag_name == "I-SIGNAL-GROUP":
|
|
1788
|
+
pass
|
|
1789
|
+
elif tag_name == "I-SIGNAL-I-PDU":
|
|
1790
|
+
pass
|
|
1791
|
+
elif tag_name == "SYSTEM-SIGNAL":
|
|
1792
|
+
pass
|
|
1793
|
+
elif tag_name == "SYSTEM-SIGNAL-GROUP":
|
|
1794
|
+
pass
|
|
1795
|
+
else:
|
|
1796
|
+
self._raiseError("Unsupported element type of ARPackage <%s>" % tag_name)
|
|
1797
|
+
#pass
|
|
877
1798
|
|
|
878
|
-
|
|
879
|
-
self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
|
|
880
|
-
swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
|
|
1799
|
+
|
|
881
1800
|
|
|
882
|
-
def readARPackages(self, element, parent):
|
|
1801
|
+
def readARPackages(self, element: ET.Element, parent: ARPackage):
|
|
883
1802
|
for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
|
|
884
|
-
short_name = self.
|
|
1803
|
+
short_name = self.getShortName(child_element)
|
|
885
1804
|
ar_package = parent.createARPackage(short_name)
|
|
886
1805
|
|
|
887
1806
|
self.logger.debug("readARPackages %s" % ar_package.full_name)
|
|
888
1807
|
|
|
889
|
-
self.
|
|
890
|
-
self.
|
|
891
|
-
self.readDataTypeMappingSets(child_element, ar_package)
|
|
1808
|
+
self.readIdentifiable(child_element, ar_package)
|
|
1809
|
+
self.readARPackageElements(child_element, ar_package)
|
|
892
1810
|
self.readARPackages(child_element, ar_package)
|
|
893
|
-
|
|
894
|
-
self.readApplicationRecordDataTypes(child_element, ar_package)
|
|
895
|
-
self.readImplementationDataTypes(child_element, ar_package)
|
|
896
|
-
self.readSwDataTypes(child_element, ar_package)
|
|
897
|
-
self.readCompuMethods(child_element, ar_package)
|
|
898
|
-
self.readEcuAbstractionSwComponents(child_element, ar_package)
|
|
899
|
-
self.readApplicationSwComponentTypes(child_element, ar_package)
|
|
900
|
-
self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
|
|
901
|
-
self.readSensorActuatorSwComponentType(child_element, ar_package)
|
|
902
|
-
self.readServiceSwComponentTypes(child_element, ar_package)
|
|
903
|
-
self.readCompositionSwComponentTypes(child_element, ar_package)
|
|
904
|
-
self.readBswModuleDescription(child_element, ar_package)
|
|
905
|
-
self.readBswModuleEntry(child_element, ar_package)
|
|
906
|
-
self.readSwcBswMappings(child_element, ar_package)
|
|
907
|
-
self.readBswImplementation(child_element, ar_package)
|
|
908
|
-
self.readSwcImplementation(child_element, ar_package)
|
|
1811
|
+
|
|
909
1812
|
|
|
910
1813
|
def load(self, filename, document: AUTOSAR):
|
|
911
1814
|
self.logger.info("Load %s ..." % filename)
|
|
@@ -915,6 +1818,5 @@ class ARXMLParser:
|
|
|
915
1818
|
if (self.getPureTagName(root.tag) != "AUTOSAR"):
|
|
916
1819
|
self._raiseError("Invalid ARXML file <%s>" % filename)
|
|
917
1820
|
|
|
918
|
-
|
|
919
|
-
|
|
1821
|
+
self.getAUTOSARInfo(root, document)
|
|
920
1822
|
self.readARPackages(root, document)
|