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.
Files changed (75) hide show
  1. armodel/__init__.py +2 -1
  2. armodel/cli/arxml_dump_cli.py +8 -6
  3. armodel/cli/arxml_format_cli.py +72 -0
  4. armodel/cli/connector2xlsx_cli.py +75 -0
  5. armodel/cli/connector_update_cli.py +77 -0
  6. armodel/cli/swc_list_cli.py +2 -2
  7. armodel/data_models/__init__.py +0 -0
  8. armodel/data_models/sw_connector.py +22 -0
  9. armodel/lib/__init__.py +1 -1
  10. armodel/lib/sw_component.py +34 -0
  11. armodel/models/__init__.py +8 -2
  12. armodel/models/annotation.py +20 -0
  13. armodel/models/ar_object.py +184 -0
  14. armodel/models/ar_package.py +144 -14
  15. armodel/models/ar_ref.py +74 -8
  16. armodel/models/bsw_module_template.py +97 -25
  17. armodel/models/calibration.py +119 -0
  18. armodel/models/common_structure.py +203 -36
  19. armodel/models/communication.py +17 -0
  20. armodel/models/data_def_properties.py +16 -0
  21. armodel/models/data_dictionary.py +46 -9
  22. armodel/models/data_prototype.py +24 -5
  23. armodel/models/datatype.py +86 -19
  24. armodel/models/end_to_end_protection.py +67 -0
  25. armodel/models/general_structure.py +72 -17
  26. armodel/models/global_constraints.py +40 -0
  27. armodel/models/implementation.py +80 -32
  28. armodel/models/m2_msr.py +82 -6
  29. armodel/models/multilanguage_data.py +42 -0
  30. armodel/models/per_instance_memory.py +14 -0
  31. armodel/models/port_interface.py +27 -4
  32. armodel/models/port_prototype.py +48 -23
  33. armodel/models/record_layout.py +118 -0
  34. armodel/models/service_mapping.py +11 -0
  35. armodel/models/service_needs.py +48 -0
  36. armodel/models/sw_component.py +257 -43
  37. armodel/models/unit.py +14 -0
  38. armodel/parser/abstract_arxml_parser.py +248 -0
  39. armodel/parser/arxml_parser.py +1550 -648
  40. armodel/parser/connector_xlsx_parser.py +190 -0
  41. armodel/parser/excel_parser.py +18 -0
  42. armodel/report/__init__.py +1 -0
  43. armodel/report/connector_xls_report.py +76 -0
  44. armodel/report/excel_report.py +42 -0
  45. armodel/tests/__init__.py +0 -0
  46. armodel/tests/test_armodel/__init__.py +0 -0
  47. armodel/tests/test_armodel/models/__init__.py +0 -0
  48. armodel/tests/test_armodel/models/test_ar_object.py +152 -0
  49. armodel/tests/test_armodel/models/test_ar_package.py +294 -0
  50. armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
  51. armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
  52. armodel/tests/test_armodel/models/test_common_structure.py +73 -0
  53. armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
  54. armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
  55. armodel/tests/test_armodel/models/test_datatype.py +239 -0
  56. armodel/tests/test_armodel/models/test_general_structure.py +50 -0
  57. armodel/tests/test_armodel/models/test_implementation.py +26 -0
  58. armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
  59. armodel/tests/test_armodel/models/test_port_interface.py +198 -0
  60. armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
  61. armodel/tests/test_armodel/parser/__init__.py +0 -0
  62. armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
  63. armodel/tests/test_armodel/parser/test_parse_bswmd.py +192 -0
  64. armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
  65. armodel/writer/__init__.py +1 -0
  66. armodel/writer/abstract_arxml_writer.py +123 -0
  67. armodel/writer/arxml_writer.py +1755 -0
  68. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/METADATA +124 -4
  69. armodel-1.4.3.dist-info/RECORD +78 -0
  70. armodel-1.4.3.dist-info/entry_points.txt +7 -0
  71. armodel-1.3.0.dist-info/RECORD +0 -31
  72. armodel-1.3.0.dist-info/entry_points.txt +0 -4
  73. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/LICENSE +0 -0
  74. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/WHEEL +0 -0
  75. {armodel-1.3.0.dist-info → armodel-1.4.3.dist-info}/top_level.txt +0 -0
@@ -1,161 +1,153 @@
1
- from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
2
- from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
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 RefType, AutosarVariableRef, ArVariableInImplementationDataInstanceRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
31
+ from ..models import AutosarVariableRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
5
32
  from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
6
- from ..models import DataPrototype, RPortPrototype, PPortPrototype
7
- from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec, QueuedReceiverComSpec
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 AutosarDataType, ARElement
11
- from ..models import AssemblySwConnector, ProvidedPortPrototypeInstanceRef, RequiredPortPrototypeInstanceRef
12
- from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent
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 BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
16
-
17
- from typing import List
18
- from colorama import Fore
19
- import xml.etree.ElementTree as ET
20
- import re
21
- import logging
22
-
23
- class ARXMLParser:
24
- def __init__(self, options = None):
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
- self._processOptions(options=options)
31
-
32
- def _processOptions(self, options):
33
- if options:
34
- if 'warning' in options:
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 readChildLimitElement(self, element, key) -> Limit:
97
- child_element = element.find("./xmlns:%s" % key, self.nsmap)
98
- if (child_element != None):
99
- limit = Limit()
100
- if ('INTERVAL-TYPE' in child_element.attrib):
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
- def readShortName(self, element) -> str:
109
- return self.readChildElement("", element, "SHORT-NAME")
110
-
111
- def _readChildRefElementDestAndValue(self, element) -> RefType:
112
- ref = RefType()
113
- ref.dest = element.attrib['DEST']
114
- ref.value = element.text
115
- return ref
116
-
117
- def readChildRefElement(self, short_name, element, key) -> RefType:
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 (child_element != None):
120
- return self._readChildRefElementDestAndValue(child_element)
121
- self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
122
-
123
- def readChildOptionalRefElement(self, element, key) -> RefType:
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 (child_element != None):
126
- return self._readChildRefElementDestAndValue(child_element)
127
- return None
128
-
129
- def readChildRefElementList(self, element, key) -> List[RefType]:
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 != None):
142
- autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
143
- autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
144
- if autosar_variable_in_impl_datatype.port_prototype_ref is None:
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
- autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildOptionalRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
147
- if autosar_variable_in_impl_datatype.target_data_prototype_ref is None:
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.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
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 != None):
154
- accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
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.readShortName(child_element)
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
- def readBswModuleDescriptionImplementedEntry(self, element, parent: BswModuleDescription):
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.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
185
- if (ref != None):
186
- parent.implemented_entry_refs.append(ref)
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 readProvidedModeGroup(self, element, parent: BswModuleDescription):
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.readShortName(child_element)
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
- mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
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.readShortName(child_element)
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.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
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 != None:
207
- for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
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
- entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
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.readShortName(child_element)
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.readShortName(child_element)
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.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
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.readShortName(child_element)
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.readShortName(child_element)
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.readChildElementFloatValue(short_name, child_element, "PERIOD")
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.readShortName(child_element)
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.readChildRefElement(parent.short_name, child_element, "DATA-REF")
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 element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
268
- short_name = self.readShortName(child_element)
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.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
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 readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
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 != None:
278
- for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
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.readShortName(child_element)
307
+ short_name = self.getShortName(child_element)
284
308
  behavior.createExclusiveArea(short_name)
285
-
286
309
  self.readDataTypeMappingRefs(element, behavior)
287
310
 
288
- def readSwInternalBehavior(self, element, parent: AtomicSwComponentType):
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.readShortName(child_element)
387
+ short_name = self.getShortName(child_element)
291
388
  behavior = parent.createSwcInternalBehavior(short_name)
292
- self.logger.debug("readSwInternalBehavior %s" % behavior.full_name)
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
- self.readRunnableEntities(child_element, behavior)
298
- self.readOperationInvokedEvents(child_element, behavior)
299
- self.readTimingEvents(child_element, behavior)
300
- self.readInternalTriggerOccurredEvent(child_element, behavior)
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.readShortName(child_element)
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
- def readBswModuleDescription(self, element, parent: ARPackage):
320
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-DESCRIPTION", self.nsmap):
321
- short_name = self.readShortName(child_element)
322
- bsw_module_description = parent.createBswModuleDescription(short_name)
323
- bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
324
-
325
- self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
326
-
327
- self.readBswModuleDescriptionImplementedEntry(child_element, bsw_module_description)
328
- self.readProvidedModeGroup(child_element, bsw_module_description)
329
- self.readRequiredModeGroup(child_element, bsw_module_description)
330
- self.readBswInternalBehavior(child_element, bsw_module_description)
331
-
332
- def readBswModuleEntry(self, element, parent: ARPackage):
333
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
334
- short_name = self.readShortName(child_element)
335
- entry = parent.createBswModuleEntry(short_name)
336
- entry.is_reentrant = self.readChildOptionalElementBooleanValue(child_element, "IS-REENTRANT")
337
- entry.is_synchronous = self.readChildOptionalElementBooleanValue(child_element, "IS-SYNCHRONOUS")
338
- entry.service_id = self.readChildOptionalElementNumberValue(child_element, "SERVICE-ID")
339
- entry.call_type = self.readChildOptionalElement(child_element, "CALL-TYPE")
340
- entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
341
- entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
342
-
343
- #self.logger.debug("readBswModuleEntry \n%s" % entry)
344
- self.logger.debug("readBswModuleEntry %s" % entry.short_name)
345
-
346
- def readArtifactDescriptor(self, element, code_desc: Code):
347
- for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
348
- artifact_desc = AutosarEngineeringObject()
349
- artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
350
- artifact_desc.category = self.readChildElement(code_desc.short_name, child_element, "CATEGORY")
351
- code_desc.addArtifactDescriptor(artifact_desc)
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
- self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
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.readShortName(child_element)
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 readMemorySections(self, element, consumption: ResourceConsumption):
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.readShortName(child_element)
481
+ short_name = self.getShortName(child_element)
365
482
  memory_section = consumption.createMemorySection(short_name)
366
- alignment = self.readChildOptionalElement(child_element, "ALIGNMENT")
367
- if (alignment != None):
368
- memory_section.alignment = alignment
369
- memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
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 == None):
375
- self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
376
- return
377
- short_name = self.readShortName(child_element)
378
- impl.resource_consumption = ResourceConsumption(impl, short_name)
379
- self.readMemorySections(child_element, impl.resource_consumption)
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.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
503
+ impl.programming_language = self.getChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE")
384
504
  self.readResourceConsumption(element, impl)
385
- impl.sw_version = self.readChildOptionalElement(element, "SW-VERSION")
386
- impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
387
- impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
388
-
389
- def readBswImplementation(self, element, parent: ARPackage):
390
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
391
- short_name = self.readShortName(child_element)
392
- impl = parent.createBswImplementation(short_name)
393
- self.logger.debug("readBswImplementation %s" % impl.short_name)
394
-
395
- self.readImplementation(child_element, impl)
396
-
397
- impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
398
- impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
399
-
400
- def readSwcImplementation(self, element, parent: ARPackage):
401
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
402
- short_name = self.readShortName(child_element)
403
- impl = parent.createSwcImplementation(short_name)
404
- self.logger.debug("readSwcImplementation %s" % impl.short_name)
405
-
406
- self.readImplementation(child_element, impl)
407
-
408
- impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
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 readDataSendPoints(self, element, parent: RunnableEntity):
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 readWrittenLocalVariables(self, element, parent: RunnableEntity):
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:OPERATION-IREF", self.nsmap)
430
- if (child_element != None):
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.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
433
- operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
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-IRE", self.nsmap)
438
- if (child_element != None):
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.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
441
- data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
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.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
448
- mode_iref.context_mode_declaration_group_prototype = self.readChildRefElement("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
449
- mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
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
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
454
- short_name = self.readShortName(child_element)
455
- serverCallPoint = parent.createSynchronousServerCallPoint(short_name)
456
- serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
457
- self.readROperationIRef(child_element, serverCallPoint)
458
-
459
- def readAsynchronousServerCallPoint(self, element, parent: RunnableEntity):
460
- for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:ASYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
461
- short_name = self.readShortName(child_element)
462
- serverCallPoint = parent.createAsynchronousServerCallPoint(short_name)
463
- serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
464
- self.readROperationIRef(child_element, serverCallPoint)
465
-
466
- def readInternalTriggeringPoint(self, element, parent: RunnableEntity):
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.readShortName(child_element)
620
+ short_name = self.getShortName(child_element)
469
621
  point = parent.createInternalTriggeringPoint(short_name)
470
- point.sw_impl_policy = self.readChildOptionalElement(child_element, "SW-IMPL-POLICY")
622
+ point.sw_impl_policy = self.getChildElementOptionalLiteral(child_element, "SW-IMPL-POLICY")
471
623
 
472
- def readRunnableEntities(self, element, parent: SwcInternalBehavior):
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.readShortName(child_element)
475
- runnable = parent.createRunnableEntity(short_name)
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.readDataReceivePointByArguments(child_element, runnable)
482
- self.readDataReceivePointByValues(child_element, runnable)
483
- self.readDataReadAccesses(child_element, runnable)
484
- self.readDataSendPoints(child_element, runnable)
485
- self.readWrittenLocalVariables(child_element, runnable)
486
- self.readReadLocalVariables(child_element, runnable)
487
- self.readSynchronousServerCallPoint(child_element, runnable)
488
- self.readAsynchronousServerCallPoint(child_element, runnable)
489
- self.readInternalTriggeringPoint(child_element, runnable)
490
-
491
- def readRTEEvent(self, element, event: RTEEvent):
492
- event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
493
-
494
- def readOperationIRef(self, element, parent: OperationInvokedEvent):
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 != None):
662
+ if (child_element is not None):
497
663
  parent.operation_iref = POperationInAtomicSwcInstanceRef()
498
- parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
499
- parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
500
-
501
- def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
502
- for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
503
- short_name = self.readShortName(child_element)
504
- event = parent.createOperationInvokedEvent(short_name)
505
- self.readOperationIRef(child_element, event)
506
- self.readRTEEvent(child_element, event)
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.readShortName(child_element)
675
+ short_name = self.getShortName(child_element)
511
676
  prototype = parent.createExplicitInterRunnableVariable(short_name)
512
- self.readSwDataDefProps(child_element, prototype)
513
- prototype.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
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.readShortName(child_element)
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 readSwPointerTargetProps(self, element, parent: ARElement):
559
- child_element = element.find(
560
- "./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
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
- if (child_element != None):
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.readChildElement("", child_element, "TARGET-CATEGORY")
565
- self.readSwDataDefProps(child_element, sw_pointer_target_props)
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 readSwDataDefProps(self, element, parent: ARElement):
569
- child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
570
-
571
- if (child_element != None):
572
- sw_data_def_props = SwDataDefProps()
573
- sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
574
- sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
575
- sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
576
- sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
577
- sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
578
- self.readSwPointerTargetProps(child_element, sw_data_def_props)
579
- parent.sw_data_def_props = sw_data_def_props
580
-
581
- def readApplicationPrimitiveDataTypes(self, element, parent: ARPackage):
582
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-PRIMITIVE-DATA-TYPE", self.nsmap):
583
- short_name = self.readShortName(child_element)
584
- data_type = parent.createApplicationPrimitiveDataType(short_name)
585
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
586
- self.readSwDataDefProps(child_element, data_type)
587
-
588
- def readApplicationRecordDataTypes(self, element, parent: ARPackage):
589
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-DATA-TYPE", self.nsmap):
590
- short_name = self.readShortName(child_element)
591
- data_type = parent.createApplicationRecordDataType(short_name)
592
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
593
- self.readSwDataDefProps(child_element, data_type)
594
-
595
- # TODO: add read APPLICATION-RECORD-ELEMENT
596
-
597
- def readImplementationDataTypeElements(self, element, parent: ARElement):
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.readShortName(child_element)
876
+ short_name = self.getShortName(child_element)
600
877
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
601
- type_element.category = self.readChildElement(short_name, child_element, "CATEGORY")
602
- type_element.array_size = self.readChildOptionalElement(child_element, "ARRAY-SIZE")
603
- type_element.array_size_semantics = self.readChildOptionalElement(child_element, "ARRAY-SIZE-SEMANTICS")
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.readSwDataDefProps(child_element, type_element)
606
-
607
- def readImplementationDataTypes(self, element, parent: ARPackage):
608
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE", self.nsmap):
609
- short_name = self.readShortName(child_element)
610
- data_type = parent.createImplementationDataType(short_name)
611
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
612
- self.readImplementationDataTypeElements(child_element, data_type)
613
- self.readSwDataDefProps(child_element, data_type)
614
- if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
615
- if (len(data_type.getImplementationDataTypeElements()) < 1):
616
- self._raiseError("Array Sub-Element of <%s> do not defined." % data_type.short_name)
617
- array_sub_element = data_type.getImplementationDataTypeElements()[0]
618
- if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
619
- data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementation_data_type_ref.value)
620
- elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
621
- continue
622
- else:
623
- self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
624
-
625
- def readSwDataTypes(self, element, parent: ARPackage):
626
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
627
- short_name = self.readShortName(child_element)
628
- data_type = parent.createSwBaseType(short_name)
629
-
630
- def readClientComSpec(self, element, parent: RPortPrototype):
631
- for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
632
- try:
633
- com_spec = ClientComSpec()
634
- com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
635
- parent.addRequiredComSpec(com_spec)
636
- except ValueError as err:
637
- self.logger.error(parent.short_name + ": " + str(err))
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
- #FIXME: readchildElement
641
- com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
642
- com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
643
- com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
644
-
645
- def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
646
- for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
647
-
648
- com_spec = NonqueuedReceiverComSpec()
649
- self.readReceiverComSpec(child_element, com_spec)
650
- try:
651
- # FIXME:
652
- com_spec.alive_timeout = self.readChildElementFloatValue("", child_element, "ALIVE-TIMEOUT")
653
- com_spec.enable_updated = self.readChildElementBooleanValue("", child_element, "ENABLE-UPDATE")
654
- com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
655
- com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
656
- except ValueError as err:
657
- self.logger.error(parent.short_name + ": " + str(err))
658
-
659
- parent.addRequiredComSpec(com_spec)
660
-
661
- def readRPortPrototype(self, element, parent: AtomicSwComponentType):
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.readShortName(child_element)
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
- prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
668
-
669
- self.readClientComSpec(child_element, prototype)
670
- self.readNonqueuedReceiverComSpec(child_element, prototype)
671
-
672
- def readSenderComSpec(self, element, com_spec: SenderComSpec):
673
- # FIXME:
674
- com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
675
- com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
676
- com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
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 readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
679
- for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
680
- com_spec = NonqueuedSenderComSpec()
681
- self.readSenderComSpec(child_element, com_spec)
682
- parent.addProvidedComSpec(com_spec)
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.readShortName(child_element)
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
- prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
691
- self.readNonqueuedSenderComSpec(child_element, prototype)
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.readSwInternalBehavior(element, parent)
700
-
701
- def readEcuAbstractionSwComponents(self, element, parent: ARPackage):
702
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:ECU-ABSTRACTION-SW-COMPONENT-TYPE", self.nsmap):
703
- short_name = self.readShortName(child_element)
704
- sw_component = parent.createEcuAbstractionSwComponentType(
705
- short_name)
706
- self.readAtomicSwComponentType(child_element, sw_component)
707
-
708
- def readApplicationSwComponentTypes(self, element, parent: ARPackage):
709
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-SW-COMPONENT-TYPE", self.nsmap):
710
- short_name = self.readShortName(child_element)
711
- sw_component = parent.createApplicationSwComponentType(short_name)
712
- self.readAtomicSwComponentType(child_element, sw_component)
713
-
714
- def readComplexDeviceDriverSwComponentTypes(self, element, parent: ARPackage):
715
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPLEX-DEVICE-DRIVER-SW-COMPONENT-TYPE", self.nsmap):
716
- short_name = self.readShortName(child_element)
717
- sw_component = parent.createApplicationSwComponentType(short_name)
718
- self.readAtomicSwComponentType(child_element, sw_component)
719
-
720
- def readSensorActuatorSwComponentType(self, element, parent: ARPackage):
721
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENSOR-ACTUATOR-SW-COMPONENT-TYPE", self.nsmap):
722
- short_name = self.readShortName(child_element)
723
- sw_component = parent.createSensorActuatorSwComponentType(short_name)
724
- self.readAtomicSwComponentType(child_element, sw_component)
725
-
726
- def readServiceSwComponentTypes(self, element, parent: ARPackage):
727
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SERVICE-SW-COMPONENT-TYPE", self.nsmap):
728
- short_name = self.readShortName(child_element)
729
- sw_component = parent.createServiceSwComponentType(short_name)
730
- self.readAtomicSwComponentType(child_element, sw_component)
731
-
732
- def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
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 != None):
735
- provider_iref = ProvidedPortPrototypeInstanceRef()
736
- provider_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
737
- provider_iref.target_p_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-P-PORT-REF")
738
- parent.provider_iref = 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 != None):
743
- requester_iref = RequiredPortPrototypeInstanceRef()
744
- requester_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
745
- requester_iref.target_r_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-R-PORT-REF")
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.readShortName(child_element)
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 readSwComponentPrototypes(self, element, parent: CompositionSwComponentType):
758
- for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
759
- short_name = self.readShortName(child_element)
760
- self.logger.debug("readSwComponentPrototypes %s" % short_name)
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
- prototype = parent.createSwComponentPrototype(short_name)
763
- prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
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
- def readCompositionSwComponentTypes(self, element, parent: ARPackage):
766
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
767
- short_name = self.readShortName(child_element)
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
- sw_component = parent.createCompositionSwComponentType(short_name)
771
- self.readSwComponentType(child_element, sw_component)
772
- self.readSwComponentPrototypes(child_element, sw_component)
773
- self.readAssemblySwConnectors(child_element, sw_component)
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 readDataTypeMap(self, element, parent: DataTypeMappingSet):
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
- data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
779
- data_type_map.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
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 readDataTypeMappingSets(self, element, parent: ARPackage):
785
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-TYPE-MAPPING-SET", self.nsmap):
786
- short_name = self.readShortName(child_element)
787
- mapping_set = parent.createDataTypeMappingSet(short_name)
788
- self.readDataTypeMap(child_element, mapping_set)
789
-
790
- def readVariableDataPrototype(self, element, parent: SenderReceiverInterface):
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.readShortName(child_element)
1285
+ short_name = self.getShortName(child_element)
793
1286
  prototype = parent.createDataElement(short_name)
794
- self.readSwDataDefProps(child_element, prototype)
795
- prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
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
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENDER-RECEIVER-INTERFACE", self.nsmap):
799
- short_name = self.readShortName(child_element)
800
- sr_interface = parent.createSenderReceiverInterface(short_name)
801
- self.readVariableDataPrototype(child_element, sr_interface)
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.readShortName(child_element)
1301
+ short_name = self.getShortName(child_element)
806
1302
  prototype = ArgumentDataPrototype(property, short_name)
807
- prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
808
- prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
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 != None:
814
- for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
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.readShortName(child_element)
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.readShortName(child_element)
1322
+ short_name = self.getShortName(child_element)
827
1323
  error = parent.createApplicationError(short_name)
828
- error.error_code = self.readChildElementNumberValue(short_name, child_element, "ERROR-CODE")
1324
+ error.error_code = self.getChildElementOptionalNumericalValue(child_element, "ERROR-CODE")
829
1325
 
830
- def readClientServerInterfaces(self, element, parent: ARPackage):
831
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CLIENT-SERVER-INTERFACE", self.nsmap):
832
- short_name = self.readShortName(child_element)
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 readCompuConstTextContent(self, element, parent: CompuConstTextContent):
839
- child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
840
- if (child_element != None):
841
- parent.vt = child_element.text
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 readCompuScales(self, element, parent: CompuScales):
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
- compu_scale.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
847
- compu_scale.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
848
- compu_scale.compu_inverse_value = CompuConstTextContent()
849
- self.readCompuConstTextContent(child_element, compu_scale.compu_inverse_value)
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 != None):
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 readCompuMethods(self, element, parent: ARPackage):
860
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
861
- short_name = self.readShortName(child_element)
862
- compu_method = parent.createCompuMethod(short_name)
863
- compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
864
- self.readCompuInternalToPhys(child_element, compu_method)
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.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
870
- mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
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
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
875
- short_name = self.readShortName(child_element)
876
- swc_bsw_mapping = parent.createSwcBswMapping(short_name)
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
- swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
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.readShortName(child_element)
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.readSenderReceiverInterfaces(child_element, ar_package)
890
- self.readClientServerInterfaces(child_element, ar_package)
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
- self.readApplicationPrimitiveDataTypes(child_element, ar_package)
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)