armodel 1.3.0__py3-none-any.whl → 1.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. armodel/cli/connector2xlsx_cli.py +75 -0
  2. armodel/cli/connector_update_cli.py +70 -0
  3. armodel/cli/swc_list_cli.py +2 -2
  4. armodel/lib/__init__.py +1 -1
  5. armodel/lib/data_analyzer.py +1 -1
  6. armodel/lib/sw_component.py +34 -0
  7. armodel/models/__init__.py +6 -1
  8. armodel/models/ar_object.py +39 -0
  9. armodel/models/ar_package.py +35 -1
  10. armodel/models/ar_ref.py +12 -2
  11. armodel/models/bsw_module_template.py +3 -2
  12. armodel/models/calibration.py +16 -0
  13. armodel/models/common_structure.py +92 -0
  14. armodel/models/communication.py +8 -0
  15. armodel/models/datatype.py +23 -5
  16. armodel/models/general_structure.py +48 -3
  17. armodel/models/global_constraints.py +40 -0
  18. armodel/models/m2_msr.py +76 -2
  19. armodel/models/port_prototype.py +21 -16
  20. armodel/models/sw_component.py +47 -18
  21. armodel/models/unit.py +14 -0
  22. armodel/parser/arxml_parser.py +552 -120
  23. armodel/parser/excel_parser.py +0 -0
  24. armodel/report/__init__.py +1 -0
  25. armodel/report/connector_xls_report.py +76 -0
  26. armodel/report/excel_report.py +42 -0
  27. armodel/tests/__init__.py +0 -0
  28. armodel/tests/test_armodel/__init__.py +0 -0
  29. armodel/tests/test_armodel/models/__init__.py +0 -0
  30. armodel/tests/test_armodel/models/test_ar_package.py +294 -0
  31. armodel/tests/test_armodel/models/test_ar_ref.py +74 -0
  32. armodel/tests/test_armodel/models/test_bsw_module_template.py +46 -0
  33. armodel/tests/test_armodel/models/test_common_structure.py +73 -0
  34. armodel/tests/test_armodel/models/test_data_dictionary.py +29 -0
  35. armodel/tests/test_armodel/models/test_data_prototype.py +86 -0
  36. armodel/tests/test_armodel/models/test_datatype.py +239 -0
  37. armodel/tests/test_armodel/models/test_general_structure.py +50 -0
  38. armodel/tests/test_armodel/models/test_m2_msr.py +77 -0
  39. armodel/tests/test_armodel/models/test_port_interface.py +198 -0
  40. armodel/tests/test_armodel/models/test_port_prototype.py +14 -0
  41. armodel/tests/test_armodel/parser/__init__.py +0 -0
  42. armodel/tests/test_armodel/parser/test_parse_bswmd.py +168 -0
  43. armodel/writer/__init__.py +1 -0
  44. armodel/writer/arxml_writer.py +641 -0
  45. {armodel-1.3.0.dist-info → armodel-1.4.0.dist-info}/METADATA +38 -5
  46. armodel-1.4.0.dist-info/RECORD +60 -0
  47. {armodel-1.3.0.dist-info → armodel-1.4.0.dist-info}/WHEEL +1 -1
  48. armodel-1.4.0.dist-info/entry_points.txt +5 -0
  49. armodel-1.3.0.dist-info/RECORD +0 -31
  50. armodel-1.3.0.dist-info/entry_points.txt +0 -4
  51. {armodel-1.3.0.dist-info → armodel-1.4.0.dist-info}/LICENSE +0 -0
  52. {armodel-1.3.0.dist-info → armodel-1.4.0.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,6 @@
1
+ from ..models.unit import Unit
2
+ from ..models.global_constraints import InternalConstrs, DataConstr, DataConstrRule, PhysConstrs
3
+
1
4
  from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
2
5
  from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
3
6
  from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
@@ -7,12 +10,20 @@ from ..models import DataPrototype, RPortPrototype, PPortPrototype
7
10
  from ..models import ReceiverComSpec, ClientComSpec, NonqueuedReceiverComSpec, QueuedReceiverComSpec
8
11
  from ..models import SenderComSpec, NonqueuedSenderComSpec
9
12
  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
13
+ from ..models import AutosarDataType, ARElement, Identifiable, AdminData, Sdg, Sd, MultilanguageReferrable, Referrable, LLongName, MultilanguageLongName
14
+ from ..models import AssemblySwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
15
+ from ..models import DelegationSwConnector
16
+ from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent, CompuScaleConstantContents, CompuScaleRationalFormula, CompuRationalCoeffs, CompuNominatorDenominator
13
17
  from ..models import InternalBehavior, ExecutableEntity
14
18
  from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
19
+ from ..models import TransmissionAcknowledgementRequest
15
20
  from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
21
+ from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification, ConstantReference
22
+ from ..models import ConstantSpecification, RecordValueSpecification
23
+ from ..models import ApplicationRecordDataType
24
+ from ..models import SwValueCont, SwValues
25
+ from ..models import ARBoolean, ARLiteral
26
+ from ..models import BaseType
16
27
 
17
28
  from typing import List
18
29
  from colorama import Fore
@@ -33,7 +44,6 @@ class ARXMLParser:
33
44
  if options:
34
45
  if 'warning' in options:
35
46
  self.options['warning'] = options['warning']
36
-
37
47
 
38
48
  def _raiseError(self, error_msg):
39
49
  if (self.options['warning'] == True):
@@ -44,38 +54,63 @@ class ARXMLParser:
44
54
  def getPureTagName(self, tag):
45
55
  return re.sub(r'\{[\w:\/.]+\}(\w+)', r'\1', tag)
46
56
 
47
- def readChildElement(self, short_name: str, element, key: str) -> str:
57
+ def readChildElement(self, short_name: str, element: ET.Element, key: str) -> str:
48
58
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
49
59
  if (child_element != None):
50
60
  return child_element.text
51
61
  self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
52
62
 
53
- def readChildOptionalElement(self, element, key) -> str:
63
+ def readChildOptionalElement(self, element: ET.Element, key: str) -> str:
54
64
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
55
65
  if (child_element != None):
56
66
  return child_element.text
57
67
  return None
68
+
69
+ def readChildElementLiteral(self, short_name: str, element: ET.Element, key: str) -> ARLiteral:
70
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
71
+ if (child_element != None):
72
+ literal = ARLiteral()
73
+ self.readElementAttributes(child_element, literal)
74
+ literal.value = child_element.text
75
+ return literal
76
+ self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
77
+
78
+ def readChildOptionalElementLiteral(self, element: ET.Element, key: str) -> ARLiteral:
79
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
80
+ if (child_element != None):
81
+ self.logger.debug("readChildOptionalElementLiteral : %s" % child_element.text)
82
+ literal = ARLiteral()
83
+ self.readElementAttributes(child_element, literal)
84
+ literal.value = child_element.text
85
+ return literal
86
+ return None
58
87
 
59
- def _convertStringToBooleanValue(self, value) -> bool:
88
+ def _convertStringToBooleanValue(self, value: str) -> bool:
60
89
  if (value == "true"):
61
90
  return True
62
91
  return False
63
-
64
- def readChildElementFloatValue(self, short_name, element, key) -> float:
92
+
93
+ def readChildElementFloatValue(self, short_name: str, element: ET.Element, key: str) -> float:
65
94
  value = self.readChildElement(short_name, element, key)
66
95
  if (value == None):
67
96
  return None
68
97
  return float(value)
69
98
 
70
- def readChildElementBooleanValue(self, short_name, element, key) -> bool:
71
- value = self.readChildElement(short_name, element, key)
72
- return self._convertStringToBooleanValue(value)
99
+ def readChildElementBooleanValue(self, short_name: str, element: ET.Element, key: str) -> ARBoolean:
100
+ literal = self.readChildElementLiteral(short_name, element, key)
101
+ bool_value = ARBoolean()
102
+ bool_value.timestamp = literal.timestamp
103
+ bool_value.value = self._convertStringToBooleanValue(literal.value)
104
+ return bool_value
73
105
 
74
- def readChildOptionalElementBooleanValue(self, element, key) -> bool:
75
- value = self.readChildOptionalElement(element, key)
76
- if (value == None):
106
+ def readChildOptionalElementBooleanValue(self, element: ET.Element, key: str) -> ARBoolean:
107
+ literal = self.readChildOptionalElementLiteral(element, key)
108
+ if (literal == None):
77
109
  return None
78
- return self._convertStringToBooleanValue(value)
110
+ bool_value = ARBoolean()
111
+ bool_value.timestamp = literal.timestamp
112
+ bool_value.value = self._convertStringToBooleanValue(literal.value)
113
+ return bool_value
79
114
 
80
115
  def _convertStringToNumberValue(self, value) -> int:
81
116
  m = re.match(r"0x([0-9a-f]+)", value, re.I)
@@ -83,17 +118,17 @@ class ARXMLParser:
83
118
  return int(m.group(1), 16)
84
119
  return int(value)
85
120
 
86
- def readChildElementNumberValue(self, short_name, element, key) -> int:
121
+ def readChildElementNumberValue(self, short_name: str, element: ET.Element, key: str) -> int:
87
122
  value = self.readChildElement(short_name, element, key)
88
123
  return self._convertStringToNumberValue(value)
89
124
 
90
- def readChildOptionalElementNumberValue(self, element, key) -> int:
125
+ def readChildOptionalElementNumberValue(self, element: ET.Element, key: str) -> int:
91
126
  value = self.readChildOptionalElement(element, key)
92
127
  if (value == None):
93
128
  return None
94
129
  return self._convertStringToNumberValue(value)
95
130
 
96
- def readChildLimitElement(self, element, key) -> Limit:
131
+ def readChildLimitElement(self, element: ET.Element, key: str) -> Limit:
97
132
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
98
133
  if (child_element != None):
99
134
  limit = Limit()
@@ -104,9 +139,38 @@ class ARXMLParser:
104
139
  limit.value = child_element.text
105
140
  return limit
106
141
  return None
107
-
108
- def readShortName(self, element) -> str:
142
+
143
+ def readShortName(self, element: ET.Element) -> str:
109
144
  return self.readChildElement("", element, "SHORT-NAME")
145
+
146
+ def readSd(self, element: ET.Element, sdg: Sdg):
147
+ for child_element in element.findall("./xmlns:SD", self.nsmap):
148
+ sd = Sd()
149
+ sd.gid = child_element.attrib['GID']
150
+ sd.value = child_element.text
151
+
152
+ sdg.addSd(sd)
153
+
154
+ def readSdg(self, element: ET.Element, admin_data: AdminData):
155
+ for child_element in element.findall("./xmlns:SDGS/xmlns:SDG", self.nsmap):
156
+ sdg = Sdg()
157
+ sdg.gid = child_element.attrib["GID"]
158
+ self.readSd(child_element, sdg)
159
+ admin_data.addSdg(sdg)
160
+
161
+ def readAdminData(self, element: ET.Element, identifiable: Identifiable):
162
+ child_element = element.find("./xmlns:ADMIN-DATA", self.nsmap)
163
+ if child_element is not None:
164
+ self.logger.debug("readAdminData")
165
+ admin_data = AdminData()
166
+ self.readSdg(child_element, admin_data)
167
+ identifiable.admin_data = admin_data
168
+
169
+ def readIdentifiable(self, element: ET.Element, identifiable: Identifiable):
170
+ self.readElementAttributes(element, identifiable)
171
+ self.readMultilanguageReferrable(element, identifiable)
172
+ identifiable.category = self.readChildOptionalElement(element, "CATEGORY")
173
+ self.readAdminData(element, identifiable)
110
174
 
111
175
  def _readChildRefElementDestAndValue(self, element) -> RefType:
112
176
  ref = RefType()
@@ -114,19 +178,19 @@ class ARXMLParser:
114
178
  ref.value = element.text
115
179
  return ref
116
180
 
117
- def readChildRefElement(self, short_name, element, key) -> RefType:
181
+ def readChildRefElement(self, short_name: str, element: ET.Element, key: str) -> RefType:
118
182
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
119
183
  if (child_element != None):
120
184
  return self._readChildRefElementDestAndValue(child_element)
121
185
  self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
122
186
 
123
- def readChildOptionalRefElement(self, element, key) -> RefType:
187
+ def readChildOptionalRefElement(self, element:ET.Element, key: str) -> RefType:
124
188
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
125
189
  if (child_element != None):
126
190
  return self._readChildRefElementDestAndValue(child_element)
127
191
  return None
128
192
 
129
- def readChildRefElementList(self, element, key) -> List[RefType]:
193
+ def readChildRefElementList(self, element: ET.Element, key: str) -> List[RefType]:
130
194
  child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
131
195
  results = []
132
196
  for child_element in child_elements:
@@ -135,6 +199,36 @@ class ARXMLParser:
135
199
  ref.value = child_element.text
136
200
  results.append(ref)
137
201
  return results
202
+
203
+ def readElementOptionalAttrib(self, element: ET.Element, key: str) -> str:
204
+ if key in element.attrib:
205
+ return element.attrib[key]
206
+ return None
207
+
208
+ def readMultilanguageLongName(self, element: ET.Element, long_name: MultilanguageLongName):
209
+ for child_element in element.findall("./xmlns:L-4", self.nsmap):
210
+ l4 = LLongName()
211
+ self.readElementAttributes(child_element, l4)
212
+ l4.value = child_element.text
213
+ if 'L' in child_element.attrib:
214
+ l4.l = child_element.attrib['L']
215
+ long_name.add_l4(l4)
216
+
217
+ def readMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
218
+ child_element = element.find("./xmlns:LONG-NAME", self.nsmap)
219
+ if child_element is not None:
220
+ referrable.long_name = MultilanguageLongName()
221
+ self.readElementAttributes(child_element, referrable.long_name)
222
+ self.readMultilanguageLongName(child_element, referrable.long_name)
223
+
224
+ def readElementAttributes(self, element: ET.Element, ar_object: ARObject):
225
+ ar_object.timestamp = self.readElementOptionalAttrib(element, "T") # read the timestamp
226
+ ar_object.uuid = self.readElementOptionalAttrib(element, "UUID") # read the uuid
227
+
228
+ if ar_object.timestamp is not None:
229
+ self.logger.debug("Timestamp: %s" % ar_object.timestamp)
230
+ if ar_object.uuid is not None:
231
+ self.logger.debug("UUID: %s" % ar_object.uuid)
138
232
 
139
233
  def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
140
234
  child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
@@ -153,9 +247,10 @@ class ARXMLParser:
153
247
  if (child_element != None):
154
248
  accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
155
249
 
156
- def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
250
+ def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
157
251
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
158
252
  short_name = self.readShortName(child_element)
253
+
159
254
  self.logger.debug("readVariableAccesses %s" % short_name)
160
255
 
161
256
  if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
@@ -179,14 +274,16 @@ class ARXMLParser:
179
274
  else:
180
275
  self._raiseError("Invalid key type <%s>" % key)
181
276
 
182
- def readBswModuleDescriptionImplementedEntry(self, element, parent: BswModuleDescription):
277
+ # self.readIdentifiable(child_element, variable_access)
278
+
279
+ def readBswModuleDescriptionImplementedEntry(self, element: ET.Element, parent: BswModuleDescription):
183
280
  for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
184
281
  ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
185
282
  if (ref != None):
186
283
  parent.implemented_entry_refs.append(ref)
187
284
  self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
188
285
 
189
- def readProvidedModeGroup(self, element, parent: BswModuleDescription):
286
+ def readProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
190
287
  for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
191
288
  short_name = self.readShortName(child_element)
192
289
  self.logger.debug("readProvidedModeGroup %s" % short_name)
@@ -194,20 +291,20 @@ class ARXMLParser:
194
291
  mode_group = parent.createProvidedModeGroup(short_name)
195
292
  mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
196
293
 
197
- def readRequiredModeGroup(self, element, parent: BswModuleDescription):
294
+ def readRequiredModeGroup(self, element: ET.Element, parent: BswModuleDescription):
198
295
  for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
199
296
  short_name = self.readShortName(child_element)
200
297
  self.logger.debug("readRequiredModeGroup %s" % short_name)
201
298
  mode_group = parent.createProvidedModeGroup(short_name)
202
299
  mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
203
300
 
204
- def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
301
+ def readCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
205
302
  child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
206
303
  if child_element != None:
207
304
  for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
208
305
  entity.addCanEnterExclusiveAreaRef(ref)
209
306
 
210
- def readExecutableEntity(self, element, entity: ExecutableEntity):
307
+ def readExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
211
308
  self.readCanEnterExclusiveAreaRefs(element, entity)
212
309
 
213
310
  def readBswModuleEntity(self, element, entity: BswModuleEntity):
@@ -215,7 +312,7 @@ class ARXMLParser:
215
312
 
216
313
  entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
217
314
 
218
- def readBswCalledEntity(self, element, parent: BswInternalBehavior):
315
+ def readBswCalledEntity(self, element: ET.Element, parent: BswInternalBehavior):
219
316
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
220
317
  short_name = self.readShortName(child_element)
221
318
  self.logger.debug("readBswCalledEntity %s" % short_name)
@@ -223,7 +320,7 @@ class ARXMLParser:
223
320
 
224
321
  self.readBswModuleEntity(child_element, entity)
225
322
 
226
- def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
323
+ def readBswSchedulableEntity(self, element: ET.Element, parent: BswInternalBehavior):
227
324
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
228
325
  short_name = self.readShortName(child_element)
229
326
  self.logger.debug("readBswSchedulableEntity %s" % short_name)
@@ -231,13 +328,13 @@ class ARXMLParser:
231
328
 
232
329
  self.readBswModuleEntity(child_element, entity)
233
330
 
234
- def readBswEvent(self, element, event: BswScheduleEvent):
331
+ def readBswEvent(self, element: ET.Element, event: BswScheduleEvent):
235
332
  event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
236
333
 
237
334
  def readBswScheduleEvent(self, element, event: BswScheduleEvent):
238
335
  self.readBswEvent(element, event)
239
336
 
240
- def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
337
+ def readBswModeSwitchEvent(self, element: ET.Element, parent: BswInternalBehavior):
241
338
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
242
339
  short_name = self.readShortName(child_element)
243
340
  self.logger.debug("readBswModeSwitchEvent %s" % short_name)
@@ -245,7 +342,7 @@ class ARXMLParser:
245
342
 
246
343
  self.readBswScheduleEvent(child_element, event)
247
344
 
248
- def readBswTimingEvent(self, element, parent: BswInternalBehavior):
345
+ def readBswTimingEvent(self, element: ET.Element, parent: BswInternalBehavior):
249
346
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
250
347
  short_name = self.readShortName(child_element)
251
348
  self.logger.debug("readBswTimingEvent %s" % short_name)
@@ -254,7 +351,7 @@ class ARXMLParser:
254
351
 
255
352
  self.readBswScheduleEvent(child_element, event)
256
353
 
257
- def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
354
+ def readBswDataReceivedEvent(self, element: ET.Element, parent: BswInternalBehavior):
258
355
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
259
356
  short_name = self.readShortName(child_element)
260
357
  self.logger.debug("readBswDataReceivedEvent %s" % short_name)
@@ -263,7 +360,7 @@ class ARXMLParser:
263
360
 
264
361
  self.readBswScheduleEvent(child_element, event)
265
362
 
266
- def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
363
+ def readBswInternalTriggerOccurredEvent(self, element: ET.Element, parent: BswInternalBehavior):
267
364
  for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
268
365
  short_name = self.readShortName(child_element)
269
366
  self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
@@ -272,20 +369,20 @@ class ARXMLParser:
272
369
 
273
370
  self.readBswScheduleEvent(child_element, event)
274
371
 
275
- def readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
372
+ def readDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
276
373
  child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
277
374
  if child_element != None:
278
375
  for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
279
376
  behavior.addDataTypeMappingRef(ref)
280
377
 
281
- def readInternalBehavior(self, element, behavior: InternalBehavior):
378
+ def readInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
282
379
  for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
283
380
  short_name = self.readShortName(child_element)
284
381
  behavior.createExclusiveArea(short_name)
285
382
 
286
383
  self.readDataTypeMappingRefs(element, behavior)
287
384
 
288
- def readSwInternalBehavior(self, element, parent: AtomicSwComponentType):
385
+ def readSwInternalBehavior(self, element: ET.Element, parent: AtomicSwComponentType):
289
386
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
290
387
  short_name = self.readShortName(child_element)
291
388
  behavior = parent.createSwcInternalBehavior(short_name)
@@ -300,7 +397,7 @@ class ARXMLParser:
300
397
  self.readInternalTriggerOccurredEvent(child_element, behavior)
301
398
  self.readExplicitInterRunnableVariables(child_element, behavior)
302
399
 
303
- def readBswInternalBehavior(self, element, parent: BswModuleDescription):
400
+ def readBswInternalBehavior(self, element: ET.Element, parent: BswModuleDescription):
304
401
  for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
305
402
  short_name = self.readShortName(child_element)
306
403
  behavior = parent.createBswInternalBehavior(short_name)
@@ -316,7 +413,7 @@ class ARXMLParser:
316
413
  self.readBswDataReceivedEvent(child_element, behavior)
317
414
  self.readBswInternalTriggerOccurredEvent(child_element, behavior)
318
415
 
319
- def readBswModuleDescription(self, element, parent: ARPackage):
416
+ def readBswModuleDescription(self, element: ET.Element, parent: ARPackage):
320
417
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-DESCRIPTION", self.nsmap):
321
418
  short_name = self.readShortName(child_element)
322
419
  bsw_module_description = parent.createBswModuleDescription(short_name)
@@ -329,7 +426,7 @@ class ARXMLParser:
329
426
  self.readRequiredModeGroup(child_element, bsw_module_description)
330
427
  self.readBswInternalBehavior(child_element, bsw_module_description)
331
428
 
332
- def readBswModuleEntry(self, element, parent: ARPackage):
429
+ def readBswModuleEntry(self, element: ET.Element, parent: ARPackage):
333
430
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
334
431
  short_name = self.readShortName(child_element)
335
432
  entry = parent.createBswModuleEntry(short_name)
@@ -343,23 +440,23 @@ class ARXMLParser:
343
440
  #self.logger.debug("readBswModuleEntry \n%s" % entry)
344
441
  self.logger.debug("readBswModuleEntry %s" % entry.short_name)
345
442
 
346
- def readArtifactDescriptor(self, element, code_desc: Code):
443
+ def readArtifactDescriptor(self, element: ET.Element, code_desc: Code):
347
444
  for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
348
445
  artifact_desc = AutosarEngineeringObject()
349
446
  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")
447
+ self.readIdentifiable(child_element, artifact_desc)
351
448
  code_desc.addArtifactDescriptor(artifact_desc)
352
449
 
353
450
  self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
354
451
 
355
- def readCodeDescriptor(self, element, impl: Implementation):
452
+ def readCodeDescriptor(self, element: ET.Element, impl: Implementation):
356
453
  for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
357
454
  short_name = self.readShortName(child_element)
358
455
  self.logger.debug("readCodeDescriptor %s" % short_name)
359
456
  code_desc = impl.createCodeDescriptor(short_name)
360
457
  self.readArtifactDescriptor(child_element, code_desc)
361
458
 
362
- def readMemorySections(self, element, consumption: ResourceConsumption):
459
+ def readMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
363
460
  for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
364
461
  short_name = self.readShortName(child_element)
365
462
  memory_section = consumption.createMemorySection(short_name)
@@ -369,7 +466,7 @@ class ARXMLParser:
369
466
  memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
370
467
  self.logger.debug("readMemorySections %s" % memory_section.short_name)
371
468
 
372
- def readResourceConsumption(self, element, impl: Implementation):
469
+ def readResourceConsumption(self, element: ET.Element, impl: Implementation):
373
470
  child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
374
471
  if (child_element == None):
375
472
  self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
@@ -378,7 +475,7 @@ class ARXMLParser:
378
475
  impl.resource_consumption = ResourceConsumption(impl, short_name)
379
476
  self.readMemorySections(child_element, impl.resource_consumption)
380
477
 
381
- def readImplementation(self, element, impl: Implementation):
478
+ def readImplementation(self, element: ET.Element, impl: Implementation):
382
479
  self.readCodeDescriptor(element, impl)
383
480
  impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
384
481
  self.readResourceConsumption(element, impl)
@@ -386,7 +483,7 @@ class ARXMLParser:
386
483
  impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
387
484
  impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
388
485
 
389
- def readBswImplementation(self, element, parent: ARPackage):
486
+ def readBswImplementation(self, element: ET.Element, parent: ARPackage):
390
487
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
391
488
  short_name = self.readShortName(child_element)
392
489
  impl = parent.createBswImplementation(short_name)
@@ -397,7 +494,7 @@ class ARXMLParser:
397
494
  impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
398
495
  impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
399
496
 
400
- def readSwcImplementation(self, element, parent: ARPackage):
497
+ def readSwcImplementation(self, element: ET.Element, parent: ARPackage):
401
498
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
402
499
  short_name = self.readShortName(child_element)
403
500
  impl = parent.createSwcImplementation(short_name)
@@ -410,22 +507,22 @@ class ARXMLParser:
410
507
  def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
411
508
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
412
509
 
413
- def readDataReceivePointByValues(self, element, parent: RunnableEntity):
510
+ def readDataReceivePointByValues(self, element: ET.Element, parent: RunnableEntity):
414
511
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-VALUES")
415
512
 
416
- def readDataReadAccesses(self, element, parent: RunnableEntity):
513
+ def readDataReadAccesses(self, element: ET.Element, parent: RunnableEntity):
417
514
  self._readVariableAccesses(element, parent, "DATA-READ-ACCESSS")
418
515
 
419
- def readDataSendPoints(self, element, parent: RunnableEntity):
516
+ def readDataSendPoints(self, element: ET.Element, parent: RunnableEntity):
420
517
  self._readVariableAccesses(element, parent, "DATA-SEND-POINTS")
421
518
 
422
- def readWrittenLocalVariables(self, element, parent: RunnableEntity):
519
+ def readWrittenLocalVariables(self, element: ET.Element, parent: RunnableEntity):
423
520
  self._readVariableAccesses(element, parent, "WRITTEN-LOCAL-VARIABLES")
424
521
 
425
- def readReadLocalVariables(self, element, parent: RunnableEntity):
522
+ def readReadLocalVariables(self, element: ET.Element, parent: RunnableEntity):
426
523
  self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
427
524
 
428
- def readROperationIRef(self, element, parent: ServerCallPoint):
525
+ def readROperationIRef(self, element: ET.Element, parent: ServerCallPoint):
429
526
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
430
527
  if (child_element != None):
431
528
  operation_iref = ROperationInAtomicSwcInstanceRef()
@@ -433,7 +530,7 @@ class ARXMLParser:
433
530
  operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
434
531
  parent.operation_iref = operation_iref
435
532
 
436
- def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
533
+ def readRVariableInAtomicSwcInstanceRef(self, element: ET.Element, parent: DataReceivedEvent):
437
534
  child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
438
535
  if (child_element != None):
439
536
  data_iref = RVariableInAtomicSwcInstanceRef()
@@ -441,7 +538,7 @@ class ARXMLParser:
441
538
  data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
442
539
  parent.data_iref = data_iref
443
540
 
444
- def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
541
+ def readRModeInAtomicSwcInstanceRef(self, element: ET.Element, parent: SwcModeSwitchEvent):
445
542
  for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
446
543
  mode_iref = RModeInAtomicSwcInstanceRef()
447
544
  mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
@@ -449,27 +546,27 @@ class ARXMLParser:
449
546
  mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
450
547
  parent.addModeIRef(mode_iref)
451
548
 
452
- def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
549
+ def readSynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
453
550
  for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
454
551
  short_name = self.readShortName(child_element)
455
552
  serverCallPoint = parent.createSynchronousServerCallPoint(short_name)
456
553
  serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
457
554
  self.readROperationIRef(child_element, serverCallPoint)
458
555
 
459
- def readAsynchronousServerCallPoint(self, element, parent: RunnableEntity):
556
+ def readAsynchronousServerCallPoint(self, element: ET.Element, parent: RunnableEntity):
460
557
  for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:ASYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
461
558
  short_name = self.readShortName(child_element)
462
559
  serverCallPoint = parent.createAsynchronousServerCallPoint(short_name)
463
560
  serverCallPoint.timeout = self.readChildElement(short_name, child_element, "TIMEOUT")
464
561
  self.readROperationIRef(child_element, serverCallPoint)
465
562
 
466
- def readInternalTriggeringPoint(self, element, parent: RunnableEntity):
563
+ def readInternalTriggeringPoint(self, element: ET.Element, parent: RunnableEntity):
467
564
  for child_element in element.findall("./xmlns:INTERNAL-TRIGGERING-POINTS/xmlns:INTERNAL-TRIGGERING-POINT", self.nsmap):
468
565
  short_name = self.readShortName(child_element)
469
566
  point = parent.createInternalTriggeringPoint(short_name)
470
567
  point.sw_impl_policy = self.readChildOptionalElement(child_element, "SW-IMPL-POLICY")
471
568
 
472
- def readRunnableEntities(self, element, parent: SwcInternalBehavior):
569
+ def readRunnableEntities(self, element: ET.Element, parent: SwcInternalBehavior):
473
570
  for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
474
571
  short_name = self.readShortName(child_element)
475
572
  runnable = parent.createRunnableEntity(short_name)
@@ -488,24 +585,24 @@ class ARXMLParser:
488
585
  self.readAsynchronousServerCallPoint(child_element, runnable)
489
586
  self.readInternalTriggeringPoint(child_element, runnable)
490
587
 
491
- def readRTEEvent(self, element, event: RTEEvent):
588
+ def readRTEEvent(self, element: ET.Element, event: RTEEvent):
492
589
  event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
493
590
 
494
- def readOperationIRef(self, element, parent: OperationInvokedEvent):
591
+ def readOperationIRef(self, element: ET.Element, parent: OperationInvokedEvent):
495
592
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
496
593
  if (child_element != None):
497
594
  parent.operation_iref = POperationInAtomicSwcInstanceRef()
498
595
  parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
499
596
  parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
500
597
 
501
- def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
598
+ def readOperationInvokedEvents(self, element: ET.Element, parent: SwcInternalBehavior):
502
599
  for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
503
600
  short_name = self.readShortName(child_element)
504
601
  event = parent.createOperationInvokedEvent(short_name)
505
602
  self.readOperationIRef(child_element, event)
506
603
  self.readRTEEvent(child_element, event)
507
604
 
508
- def readExplicitInterRunnableVariables(self, element, parent: SwcInternalBehavior):
605
+ def readExplicitInterRunnableVariables(self, element: ET.Element, parent: SwcInternalBehavior):
509
606
  for child_element in element.findall("./xmlns:EXPLICIT-INTER-RUNNABLE-VARIABLES/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
510
607
  short_name = self.readShortName(child_element)
511
608
  prototype = parent.createExplicitInterRunnableVariable(short_name)
@@ -519,7 +616,7 @@ class ARXMLParser:
519
616
 
520
617
  self.readRTEEvent(child_element, event)
521
618
 
522
- def readTimingEvents(self, element, parent: SwcInternalBehavior):
619
+ def readTimingEvents(self, element: ET.Element, parent: SwcInternalBehavior):
523
620
  for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
524
621
  short_name = self.readShortName(child_element)
525
622
  event = parent.createTimingEvent(short_name)
@@ -531,7 +628,7 @@ class ARXMLParser:
531
628
  event.offset = (float)(offset)
532
629
  event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
533
630
 
534
- def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
631
+ def readDataReceivedEvent(self, element: ET.Element, parent: SwcInternalBehavior):
535
632
  for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
536
633
  short_name = self.readShortName(child_element)
537
634
  event = parent.createDataReceivedEvent(short_name)
@@ -539,7 +636,7 @@ class ARXMLParser:
539
636
  self.readRTEEvent(child_element, event)
540
637
  self.readRVariableInAtomicSwcInstanceRef(child_element, event)
541
638
 
542
- def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
639
+ def readSwcModeSwitchEvent(self, element: ET.Element, parent: SwcInternalBehavior):
543
640
  for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
544
641
  short_name = self.readShortName(child_element)
545
642
  event = parent.createSwcModeSwitchEvent(short_name)
@@ -547,7 +644,7 @@ class ARXMLParser:
547
644
  self.readRTEEvent(child_element, event)
548
645
  self.readRModeInAtomicSwcInstanceRef(child_element, event)
549
646
 
550
- def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
647
+ def readInternalTriggerOccurredEvent(self, element: ET.Element, parent: SwcInternalBehavior):
551
648
  for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
552
649
  short_name = self.readShortName(child_element)
553
650
  event = parent.createInternalTriggerOccurredEvent(short_name)
@@ -555,7 +652,7 @@ class ARXMLParser:
555
652
  self.readRTEEvent(child_element, event)
556
653
  event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
557
654
 
558
- def readSwPointerTargetProps(self, element, parent: ARElement):
655
+ def readSwPointerTargetProps(self, element: ET.Element, parent: ARElement):
559
656
  child_element = element.find(
560
657
  "./xmlns:SW-POINTER-TARGET-PROPS", self.nsmap)
561
658
 
@@ -565,7 +662,20 @@ class ARXMLParser:
565
662
  self.readSwDataDefProps(child_element, sw_pointer_target_props)
566
663
  parent.sw_pointer_target_props = sw_pointer_target_props
567
664
 
568
- def readSwDataDefProps(self, element, parent: ARElement):
665
+ def parseSwDataDefProps(self, element: ET.Element) -> SwDataDefProps:
666
+ child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
667
+
668
+ if (child_element != None):
669
+ sw_data_def_props = SwDataDefProps()
670
+ sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
671
+ sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
672
+ sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
673
+ sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
674
+ sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
675
+ self.readSwPointerTargetProps(child_element, sw_data_def_props)
676
+ return sw_data_def_props
677
+
678
+ def readSwDataDefProps(self, element: ET.Element, parent: AutosarDataType):
569
679
  child_element = element.find("./xmlns:SW-DATA-DEF-PROPS/xmlns:SW-DATA-DEF-PROPS-VARIANTS/xmlns:SW-DATA-DEF-PROPS-CONDITIONAL", self.nsmap)
570
680
 
571
681
  if (child_element != None):
@@ -578,37 +688,46 @@ class ARXMLParser:
578
688
  self.readSwPointerTargetProps(child_element, sw_data_def_props)
579
689
  parent.sw_data_def_props = sw_data_def_props
580
690
 
581
- def readApplicationPrimitiveDataTypes(self, element, parent: ARPackage):
691
+ def readApplicationPrimitiveDataTypes(self, element: ET.Element, parent: ARPackage):
582
692
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-PRIMITIVE-DATA-TYPE", self.nsmap):
583
693
  short_name = self.readShortName(child_element)
584
694
  data_type = parent.createApplicationPrimitiveDataType(short_name)
585
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
695
+ self.logger.debug("readApplicationPrimitiveDataTypes %s" % short_name)
696
+ self.readIdentifiable(child_element, data_type)
586
697
  self.readSwDataDefProps(child_element, data_type)
587
698
 
588
- def readApplicationRecordDataTypes(self, element, parent: ARPackage):
699
+ def readApplicationRecordElements(self, element: ET.Element, parent: ApplicationRecordDataType):
700
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-ELEMENT", self.nsmap):
701
+ short_name = self.readShortName(child_element)
702
+ record_element = parent.createApplicationRecordElement(short_name)
703
+ self.logger.debug("readApplicationRecordElements %s" % short_name)
704
+ self.readIdentifiable(child_element, record_element)
705
+ record_element.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
706
+
707
+ def readApplicationRecordDataTypes(self, element: ET.Element, parent: ARPackage):
589
708
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-RECORD-DATA-TYPE", self.nsmap):
590
709
  short_name = self.readShortName(child_element)
591
710
  data_type = parent.createApplicationRecordDataType(short_name)
592
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
711
+ self.logger.debug("readApplicationRecordDataTypes %s" % short_name)
712
+ self.readIdentifiable(child_element, data_type)
593
713
  self.readSwDataDefProps(child_element, data_type)
714
+ self.readApplicationRecordElements(child_element, data_type)
594
715
 
595
- # TODO: add read APPLICATION-RECORD-ELEMENT
596
-
597
- def readImplementationDataTypeElements(self, element, parent: ARElement):
716
+ def readImplementationDataTypeElements(self, element: ET.Element, parent: ARElement):
598
717
  for child_element in element.findall("./xmlns:SUB-ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE-ELEMENT", self.nsmap):
599
718
  short_name = self.readShortName(child_element)
600
719
  type_element = parent.createImplementationDataTypeElement(short_name) # type: ImplementationDataTypeElement
601
- type_element.category = self.readChildElement(short_name, child_element, "CATEGORY")
720
+ self.readIdentifiable(child_element, type_element)
602
721
  type_element.array_size = self.readChildOptionalElement(child_element, "ARRAY-SIZE")
603
722
  type_element.array_size_semantics = self.readChildOptionalElement(child_element, "ARRAY-SIZE-SEMANTICS")
604
723
  self.readImplementationDataTypeElements(child_element, type_element)
605
724
  self.readSwDataDefProps(child_element, type_element)
606
725
 
607
- def readImplementationDataTypes(self, element, parent: ARPackage):
726
+ def readImplementationDataTypes(self, element: ET.Element, parent: ARPackage):
608
727
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:IMPLEMENTATION-DATA-TYPE", self.nsmap):
609
728
  short_name = self.readShortName(child_element)
610
729
  data_type = parent.createImplementationDataType(short_name)
611
- data_type.category = self.readChildElement(short_name, child_element, "CATEGORY")
730
+ self.readIdentifiable(child_element, data_type)
612
731
  self.readImplementationDataTypeElements(child_element, data_type)
613
732
  self.readSwDataDefProps(child_element, data_type)
614
733
  if (data_type.category == ImplementationDataType.CATEGORY_ARRAY):
@@ -622,15 +741,23 @@ class ARXMLParser:
622
741
  else:
623
742
  self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
624
743
 
625
- def readSwDataTypes(self, element, parent: ARPackage):
744
+ def readBaseTypeDirectDefinition(self, element: ET.Element, parent: BaseType):
745
+ parent.base_type_definition.base_type_size = int(self.readChildOptionalElement(element, "BASE-TYPE-SIZE"))
746
+ parent.base_type_definition.base_type_encoding = self.readChildOptionalElementLiteral(element, "BASE-TYPE-ENCODING")
747
+ parent.base_type_definition.native_declaration = self.readChildOptionalElementLiteral(element, "NATIVE-DECLARATION")
748
+
749
+ def readSwBaseTypes(self, element: ET.Element, parent: ARPackage):
626
750
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
627
751
  short_name = self.readShortName(child_element)
628
752
  data_type = parent.createSwBaseType(short_name)
753
+ self.readIdentifiable(child_element, data_type)
754
+ self.readBaseTypeDirectDefinition(child_element, data_type)
629
755
 
630
- def readClientComSpec(self, element, parent: RPortPrototype):
756
+ def readClientComSpec(self, element: ET.Element, parent: RPortPrototype):
631
757
  for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
632
758
  try:
633
759
  com_spec = ClientComSpec()
760
+ self.readElementAttributes(child_element, com_spec)
634
761
  com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
635
762
  parent.addRequiredComSpec(com_spec)
636
763
  except ValueError as err:
@@ -639,13 +766,111 @@ class ARXMLParser:
639
766
  def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
640
767
  #FIXME: readchildElement
641
768
  com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
769
+ self.readSwDataDefProps(element, com_spec)
642
770
  com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
643
771
  com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
644
772
 
773
+ def readSwValues(self, element: ET.Element, key: str) -> SwValues:
774
+ child_element = element.find("./xmlns:%s" % key, self.nsmap) # type: ET.Element
775
+ if child_element is None:
776
+ return None
777
+ values = SwValues()
778
+ v_element = child_element.find("./xmlns:V", self.nsmap)
779
+ if v_element is not None:
780
+ values.v = v_element.text
781
+ self.logger.debug("readSwValues - V: %s" % values.v)
782
+ return values
783
+
784
+ def readSwValueCont(self, element: ET.Element) -> SwValueCont:
785
+ cont = None
786
+ child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
787
+ if child_element is not None:
788
+ cont = SwValueCont()
789
+ cont.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
790
+ cont.sw_values_phys = self.readSwValues(child_element, "SW-VALUES-PHYS")
791
+
792
+ self.logger.debug("readSwValueCont - Unit: %s" % cont.unit_ref.value)
793
+ return cont
794
+
795
+ def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
796
+ value_spec.short_label = self.readChildOptionalElement(element, "SHORT-LABEL")
797
+ self.readElementAttributes(element, value_spec)
798
+
799
+ self.logger.debug("readValueSpecification")
800
+
801
+ def readApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
802
+ self.readValueSpecification(element, value_spec)
803
+ value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
804
+ value_spec.sw_value_cont = self.readSwValueCont(element)
805
+
806
+ self.logger.debug("readApplicationValueSpecification Category %s" % value_spec.category)
807
+
808
+ def readTextValueSpecification(self, element: ET.Element, value_spec: TextValueSpecification):
809
+ self.readValueSpecification(element, value_spec)
810
+ value_spec.value = self.readChildOptionalElement(element, "VALUE")
811
+
812
+ self.logger.debug("readTextValueSpecification Value: %s" % value_spec.value)
813
+
814
+ def readNumericalValueSpecification(self, element: ET.Element, value_spec: NumericalValueSpecification):
815
+ self.readValueSpecification(element, value_spec)
816
+ value_spec.value = self.readChildOptionalElement(element, "VALUE")
817
+
818
+ self.logger.debug("readNumericalValueSpecification Value: %s" % value_spec.value)
819
+
820
+ def readArrayValueSpecification(self, element: ET.Element, value_spec: ArrayValueSpecification):
821
+ self.readValueSpecification(element, value_spec)
822
+
823
+ child_elements = element.findall("./xmlns:ELEMENTS/xmlns:NUMERICAL-VALUE-SPECIFICATION", self.nsmap)
824
+ for child_element in child_elements:
825
+ sub_element = NumericalValueSpecification()
826
+ self.readNumericalValueSpecification(child_element, sub_element)
827
+ value_spec.add_element(sub_element)
828
+
829
+ self.logger.debug("readArrayValueSpecification")
830
+
831
+ def readConstantReference(self, element: ET.Element, value_spec: ConstantReference):
832
+ self.readValueSpecification(element, value_spec)
833
+
834
+ value_spec.constant_ref = self.readChildOptionalRefElement(element, "CONSTANT-REF")
835
+
836
+ def readInitValue(self, element: ET.Element) -> ValueSpecification:
837
+ value_spec = None
838
+ child_element = element.find("./xmlns:INIT-VALUE", self.nsmap)
839
+ if child_element is not None:
840
+ self.logger.debug("readInitValue")
841
+ value_spec_tag = child_element.find("./xmlns:APPLICATION-VALUE-SPECIFICATION", self.nsmap)
842
+ if value_spec_tag is not None:
843
+ value_spec = ApplicationValueSpecification()
844
+ self.readApplicationValueSpecification(value_spec_tag, value_spec)
845
+ return value_spec
846
+ value_spec_tag = child_element.find("./xmlns:TEXT-VALUE-SPECIFICATION", self.nsmap)
847
+ if value_spec_tag is not None:
848
+ value_spec = TextValueSpecification()
849
+ self.readTextValueSpecification(value_spec_tag, value_spec)
850
+ return value_spec
851
+ value_spec_tag = child_element.find("./xmlns:NUMERICAL-VALUE-SPECIFICATION", self.nsmap)
852
+ if value_spec_tag is not None:
853
+ value_spec = NumericalValueSpecification()
854
+ self.readNumericalValueSpecification(value_spec_tag, value_spec)
855
+ return value_spec
856
+ value_spec_tag = child_element.find("./xmlns:ARRAY-VALUE-SPECIFICATION", self.nsmap)
857
+ if value_spec_tag is not None:
858
+ value_spec = ArrayValueSpecification()
859
+ self.readArrayValueSpecification(value_spec_tag, value_spec)
860
+ return value_spec
861
+ value_spec_tag = child_element.find("./xmlns:CONSTANT-REFERENCE", self.nsmap)
862
+ if value_spec_tag is not None:
863
+ value_spec = ConstantReference()
864
+ self.readConstantReference(value_spec_tag, value_spec)
865
+ return value_spec
866
+
867
+ return value_spec
868
+
645
869
  def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
646
870
  for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
647
-
648
871
  com_spec = NonqueuedReceiverComSpec()
872
+
873
+ self.readElementAttributes(child_element, com_spec)
649
874
  self.readReceiverComSpec(child_element, com_spec)
650
875
  try:
651
876
  # FIXME:
@@ -656,6 +881,8 @@ class ARXMLParser:
656
881
  except ValueError as err:
657
882
  self.logger.error(parent.short_name + ": " + str(err))
658
883
 
884
+ com_spec.init_value = self.readInitValue(child_element)
885
+
659
886
  parent.addRequiredComSpec(com_spec)
660
887
 
661
888
  def readRPortPrototype(self, element, parent: AtomicSwComponentType):
@@ -664,21 +891,38 @@ class ARXMLParser:
664
891
  self.logger.debug("readRPortPrototype %s" % short_name)
665
892
 
666
893
  prototype = parent.createRPortPrototype(short_name)
894
+ self.readElementAttributes(child_element, prototype)
667
895
  prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
668
896
 
669
897
  self.readClientComSpec(child_element, prototype)
670
898
  self.readNonqueuedReceiverComSpec(child_element, prototype)
671
899
 
900
+ def readTransmissionAcknowledgementRequest(self, element: ET.Element) -> TransmissionAcknowledgementRequest:
901
+ child_element = element.find("./xmlns:TRANSMISSION-ACKNOWLEDGE", self.nsmap)
902
+ if (child_element != None):
903
+ acknowledge = TransmissionAcknowledgementRequest()
904
+ self.readElementAttributes(child_element, acknowledge)
905
+ acknowledge.timeout = self.readChildElementFloatValue ("", child_element, "TIMEOUT")
906
+ return acknowledge
907
+ return None
908
+
672
909
  def readSenderComSpec(self, element, com_spec: SenderComSpec):
673
910
  # FIXME:
911
+ self.readElementAttributes(element, com_spec)
674
912
  com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
913
+ com_spec.network_representation = self.parseSwDataDefProps(element)
914
+ self.logger.debug("network_representation %s" % com_spec.network_representation)
675
915
  com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
916
+ com_spec.transmission_acknowledge = self.readTransmissionAcknowledgementRequest(element)
676
917
  com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
677
918
 
678
919
  def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
679
920
  for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
680
921
  com_spec = NonqueuedSenderComSpec()
681
922
  self.readSenderComSpec(child_element, com_spec)
923
+
924
+ com_spec.init_value = self.readInitValue(child_element)
925
+
682
926
  parent.addProvidedComSpec(com_spec)
683
927
 
684
928
  def readPPortPrototype(self, element, parent: AtomicSwComponentType):
@@ -687,6 +931,7 @@ class ARXMLParser:
687
931
  self.logger.debug("readPPortPrototype %s" % short_name)
688
932
 
689
933
  prototype = parent.createPPortPrototype(short_name)
934
+ self.readElementAttributes(child_element, prototype)
690
935
  prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
691
936
  self.readNonqueuedSenderComSpec(child_element, prototype)
692
937
 
@@ -729,20 +974,40 @@ class ARXMLParser:
729
974
  sw_component = parent.createServiceSwComponentType(short_name)
730
975
  self.readAtomicSwComponentType(child_element, sw_component)
731
976
 
977
+ def readPPortInCompositionInstanceRef(self, element, p_port_in_composition_instance_ref: PPortInCompositionInstanceRef):
978
+ p_port_in_composition_instance_ref.context_component_ref = self.readChildOptionalRefElement(element, "CONTEXT-COMPONENT-REF")
979
+ p_port_in_composition_instance_ref.target_p_port_ref = self.readChildOptionalRefElement(element, "TARGET-P-PORT-REF")
980
+
981
+ self.logger.debug("PPortInCompositionInstanceRef")
982
+ self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
983
+ % (p_port_in_composition_instance_ref.context_component_ref.dest, p_port_in_composition_instance_ref.context_component_ref.value))
984
+ self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
985
+ % (p_port_in_composition_instance_ref.target_p_port_ref.dest, p_port_in_composition_instance_ref.target_p_port_ref.value))
986
+
987
+ def readRPortInCompositionInstanceRef(self, element, r_port_in_composition_instance_ref: RPortInCompositionInstanceRef):
988
+ r_port_in_composition_instance_ref.context_component_ref = self.readChildOptionalRefElement(element, "CONTEXT-COMPONENT-REF")
989
+ r_port_in_composition_instance_ref.target_r_port_ref = self.readChildOptionalRefElement(element, "TARGET-R-PORT-REF")
990
+
991
+ self.logger.debug("RPortInCompositionInstanceRef")
992
+ self.logger.debug(" CONTEXT-COMPONENT-REF DEST: %s, %s"
993
+ % (r_port_in_composition_instance_ref.context_component_ref.dest, r_port_in_composition_instance_ref.context_component_ref.value))
994
+ self.logger.debug(" TARGET-P-PORT-REF DEST: %s, %s"
995
+ % (r_port_in_composition_instance_ref.target_r_port_ref.dest, r_port_in_composition_instance_ref.target_r_port_ref.value))
996
+
732
997
  def readAssemblySwConnectorProviderIRef(self, element, parent: AssemblySwConnector):
733
998
  child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
734
999
  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
1000
+ provide_iref = PPortInCompositionInstanceRef()
1001
+ self.readElementAttributes(child_element, provide_iref)
1002
+ self.readPPortInCompositionInstanceRef(child_element, provide_iref)
1003
+ parent.provider_iref = provide_iref
739
1004
 
740
1005
  def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
741
1006
  child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
742
1007
  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")
1008
+ requester_iref = RPortInCompositionInstanceRef()
1009
+ self.readElementAttributes(child_element, requester_iref)
1010
+ self.readRPortInCompositionInstanceRef(child_element, requester_iref)
746
1011
  parent.requester_iref = requester_iref
747
1012
 
748
1013
  def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
@@ -751,28 +1016,75 @@ class ARXMLParser:
751
1016
  self.logger.debug("readAssemblySwConnectors %s" % short_name)
752
1017
 
753
1018
  connector = parent.createAssemblySwConnector(short_name)
1019
+ self.readElementAttributes(child_element, connector)
754
1020
  self.readAssemblySwConnectorProviderIRef(child_element, connector)
755
1021
  self.readAssemblySwConnectorRequesterIRef(child_element, connector)
756
1022
 
757
- def readSwComponentPrototypes(self, element, parent: CompositionSwComponentType):
1023
+ def readDelegationSwConnectorInnerPortIRef(self, element, parent: DelegationSwConnector):
1024
+ inner_port_iref_element = element.find("./xmlns:INNER-PORT-IREF", self.nsmap)
1025
+ if (inner_port_iref_element != None):
1026
+ child_element = inner_port_iref_element.find("./xmlns:R-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1027
+ if (child_element != None):
1028
+ r_port_in_composition_instance_ref = RPortInCompositionInstanceRef()
1029
+ self.readRPortInCompositionInstanceRef(child_element, r_port_in_composition_instance_ref)
1030
+ parent.inner_port_iref = r_port_in_composition_instance_ref
1031
+ return
1032
+
1033
+ child_element = inner_port_iref_element.find("./xmlns:P-PORT-IN-COMPOSITION-INSTANCE-REF", self.nsmap)
1034
+ if (child_element != None):
1035
+ p_port_in_composition_instance_ref = PPortInCompositionInstanceRef()
1036
+ self.readPPortInCompositionInstanceRef(child_element, p_port_in_composition_instance_ref)
1037
+ parent.inner_port_iref = p_port_in_composition_instance_ref
1038
+ return
1039
+
1040
+ self._raiseError("Unsupported child element of INNER-PORT-IREF")
1041
+
1042
+ def readDelegationSwConnectors(self, element, parent: CompositionSwComponentType):
1043
+ for child_element in element.findall("./xmlns:CONNECTORS/xmlns:DELEGATION-SW-CONNECTOR", self.nsmap):
1044
+ short_name = self.readShortName(child_element)
1045
+ self.logger.debug("readDelegationSwConnectors %s" % short_name)
1046
+
1047
+ connector = parent.createDelegationSwConnector(short_name)
1048
+ self.readElementAttributes(child_element, connector)
1049
+ self.readDelegationSwConnectorInnerPortIRef(child_element, connector)
1050
+
1051
+ if connector.inner_port_iref == None and connector.outer_port_iref == None:
1052
+ self._raiseError("Invalid PortPrototype of DELEGATION-SW-CONNECTOR")
1053
+
1054
+ connector.outer_port_ref = self.readChildOptionalRefElement(child_element, "OUTER-PORT-REF")
1055
+ self.logger.debug("OUTER-PORT-REF DEST: %s, %s"
1056
+ % (connector.outer_port_ref.dest, connector.outer_port_ref.value))
1057
+
1058
+ def readSwComponentPrototypes(self, element: ET.Element, parent: CompositionSwComponentType):
758
1059
  for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
759
1060
  short_name = self.readShortName(child_element)
760
1061
  self.logger.debug("readSwComponentPrototypes %s" % short_name)
761
1062
 
762
1063
  prototype = parent.createSwComponentPrototype(short_name)
1064
+ self.readElementAttributes(child_element, prototype)
763
1065
  prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
764
1066
 
765
- def readCompositionSwComponentTypes(self, element, parent: ARPackage):
1067
+ def readDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
1068
+ child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
1069
+ self.logger.debug("readDataTypeMappingSet")
1070
+ if child_element != None:
1071
+ for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
1072
+ parent.addDataTypeMapping(ref)
1073
+
1074
+ def readCompositionSwComponentTypes(self, element: ET.Element, parent: ARPackage):
766
1075
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
767
1076
  short_name = self.readShortName(child_element)
768
1077
  self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
769
1078
 
770
1079
  sw_component = parent.createCompositionSwComponentType(short_name)
1080
+ self.readIdentifiable(child_element, sw_component)
771
1081
  self.readSwComponentType(child_element, sw_component)
772
1082
  self.readSwComponentPrototypes(child_element, sw_component)
773
1083
  self.readAssemblySwConnectors(child_element, sw_component)
1084
+ self.readDelegationSwConnectors(child_element, sw_component)
1085
+ self.readDataTypeMappingSet(child_element, sw_component)
774
1086
 
775
- def readDataTypeMap(self, element, parent: DataTypeMappingSet):
1087
+ def readDataTypeMap(self, element: ET.Element, parent: DataTypeMappingSet):
776
1088
  for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
777
1089
  data_type_map = DataTypeMap()
778
1090
  data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
@@ -781,13 +1093,13 @@ class ARXMLParser:
781
1093
  # add the data type map to global namespace
782
1094
  AUTOSAR.getInstance().addDataTypeMap(data_type_map)
783
1095
 
784
- def readDataTypeMappingSets(self, element, parent: ARPackage):
1096
+ def readDataTypeMappingSets(self, element: ET.Element, parent: ARPackage):
785
1097
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-TYPE-MAPPING-SET", self.nsmap):
786
1098
  short_name = self.readShortName(child_element)
787
1099
  mapping_set = parent.createDataTypeMappingSet(short_name)
788
1100
  self.readDataTypeMap(child_element, mapping_set)
789
1101
 
790
- def readVariableDataPrototype(self, element, parent: SenderReceiverInterface):
1102
+ def readVariableDataPrototype(self, element: ET.Element, parent: SenderReceiverInterface):
791
1103
  for child_element in element.findall("./xmlns:DATA-ELEMENTS/xmlns:VARIABLE-DATA-PROTOTYPE", self.nsmap):
792
1104
  short_name = self.readShortName(child_element)
793
1105
  prototype = parent.createDataElement(short_name)
@@ -800,7 +1112,7 @@ class ARXMLParser:
800
1112
  sr_interface = parent.createSenderReceiverInterface(short_name)
801
1113
  self.readVariableDataPrototype(child_element, sr_interface)
802
1114
 
803
- def readArgumentDataPrototypes(self, element, parent: ClientServerOperation):
1115
+ def readArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
804
1116
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
805
1117
  short_name = self.readShortName(child_element)
806
1118
  prototype = ArgumentDataPrototype(property, short_name)
@@ -808,26 +1120,26 @@ class ARXMLParser:
808
1120
  prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
809
1121
  parent.addArgumentDataPrototype(prototype)
810
1122
 
811
- def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
1123
+ def readPossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
812
1124
  child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
813
1125
  if child_element != None:
814
1126
  for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
815
1127
  parent.addPossibleErrorRef(ref)
816
1128
 
817
- def readOperations(self, element, parent: ClientServerInterface):
1129
+ def readOperations(self, element: ET.Element, parent: ClientServerInterface):
818
1130
  for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
819
1131
  short_name = self.readShortName(child_element)
820
1132
  operation = parent.createOperation(short_name)
821
1133
  self.readArgumentDataPrototypes(child_element, operation)
822
1134
  self.readPossibleErrorRefs(child_element, operation)
823
1135
 
824
- def readPossibleErrors(self, element, parent: ClientServerInterface):
1136
+ def readPossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
825
1137
  for child_element in element.findall("./xmlns:POSSIBLE-ERRORS/xmlns:APPLICATION-ERROR", self.nsmap):
826
1138
  short_name = self.readShortName(child_element)
827
1139
  error = parent.createApplicationError(short_name)
828
1140
  error.error_code = self.readChildElementNumberValue(short_name, child_element, "ERROR-CODE")
829
1141
 
830
- def readClientServerInterfaces(self, element, parent: ARPackage):
1142
+ def readClientServerInterfaces(self, element: ET.Element, parent: ARPackage):
831
1143
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CLIENT-SERVER-INTERFACE", self.nsmap):
832
1144
  short_name = self.readShortName(child_element)
833
1145
  cs_interface = parent.createClientServerInterface(short_name)
@@ -835,57 +1147,176 @@ class ARXMLParser:
835
1147
  self.readOperations(child_element, cs_interface)
836
1148
  self.readPossibleErrors(child_element, cs_interface)
837
1149
 
838
- def readCompuConstTextContent(self, element, parent: CompuConstTextContent):
1150
+ def readCompuConst(self, element: ET.Element, parent: CompuScale):
839
1151
  child_element = element.find("./xmlns:COMPU-CONST/xmlns:VT", self.nsmap)
840
- if (child_element != None):
841
- parent.vt = child_element.text
842
-
843
- def readCompuScales(self, element, parent: CompuScales):
1152
+ if (child_element is not None):
1153
+ self.logger.debug("readCompuConst VT: %s" % child_element.text)
1154
+ contents = CompuScaleConstantContents()
1155
+ contents.compu_const = CompuConst()
1156
+ contents.compu_const.compu_const_content_type = CompuConstTextContent()
1157
+ contents.compu_const.compu_const_content_type.vt = child_element.text
1158
+ parent.compu_scale_contents = contents
1159
+
1160
+ def readCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
1161
+ for child_element in element.findall("./xmlns:%s/xmlns:V" % key, self.nsmap):
1162
+ self.logger.debug("readCompuNominatorDenominator - %s: %s" % (key, child_element.text))
1163
+ parent.add_v(child_element.text)
1164
+
1165
+ def readCompuRationCoeffs(self, element: ET.Element, parent: CompuScale):
1166
+ child_element = element.find("./xmlns:COMPU-RATIONAL-COEFFS", self.nsmap)
1167
+ if (child_element is not None):
1168
+ self.logger.debug("readCompuRationCoeffs")
1169
+ contents = CompuScaleRationalFormula()
1170
+ contents.compu_rational_coeffs = CompuRationalCoeffs()
1171
+ contents.compu_rational_coeffs.compu_denominator = CompuNominatorDenominator()
1172
+ contents.compu_rational_coeffs.compu_numerator = CompuNominatorDenominator()
1173
+ self.readCompuNominatorDenominator(child_element, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
1174
+ self.readCompuNominatorDenominator(child_element, "COMPU-NUMERATOR", contents.compu_rational_coeffs.compu_numerator)
1175
+ parent.compu_scale_contents = contents
1176
+
1177
+ def readCompuScaleContents(self, element: ET.Element, parent: CompuScale):
1178
+ self.readCompuConst(element, parent)
1179
+ self.readCompuRationCoeffs(element, parent)
1180
+
1181
+ def readCompuScales(self, element: ET.Element, parent: CompuScales):
844
1182
  for child_element in element.findall('./xmlns:COMPU-SCALES/xmlns:COMPU-SCALE', self.nsmap):
845
1183
  compu_scale = CompuScale()
846
1184
  compu_scale.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
847
1185
  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)
1186
+ self.readCompuScaleContents(child_element, compu_scale)
850
1187
  parent.addCompuScale(compu_scale)
851
1188
 
852
- def readCompuInternalToPhys(self, element, parent: CompuMethod):
1189
+ def readCompuInternalToPhys(self, element: ET.Element, parent: CompuMethod):
853
1190
  child_element = element.find("./xmlns:COMPU-INTERNAL-TO-PHYS", self.nsmap)
854
1191
  if (child_element != None):
855
1192
  parent.compu_internal_to_phys = Compu()
1193
+ self.readElementAttributes(child_element, parent.compu_internal_to_phys)
856
1194
  parent.compu_internal_to_phys.compu_content = CompuScales()
857
1195
  self.readCompuScales(child_element, parent.compu_internal_to_phys.compu_content)
858
1196
 
859
- def readCompuMethods(self, element, parent: ARPackage):
1197
+ def readCompuMethods(self, element: ET.Element, parent: ARPackage):
860
1198
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
861
1199
  short_name = self.readShortName(child_element)
1200
+ self.logger.debug("readCompuMethods %s" % short_name)
862
1201
  compu_method = parent.createCompuMethod(short_name)
863
- compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
1202
+ self.readIdentifiable(child_element, compu_method)
1203
+ compu_method.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
864
1204
  self.readCompuInternalToPhys(child_element, compu_method)
865
1205
 
866
- def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
1206
+ def readSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
867
1207
  for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
868
1208
  mapping = SwcBswRunnableMapping()
869
1209
  mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
870
1210
  mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
871
1211
  parent.addRunnableMapping(mapping)
872
1212
 
873
- def readSwcBswMappings(self, element, parent: ARPackage):
1213
+ def readSwcBswMappings(self, element: ET.Element, parent: ARPackage):
874
1214
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
875
1215
  short_name = self.readShortName(child_element)
1216
+ self.logger.debug("readSwcBswMappings %s" % short_name)
876
1217
  swc_bsw_mapping = parent.createSwcBswMapping(short_name)
877
-
878
1218
  swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
879
1219
  self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
880
1220
  swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
881
1221
 
882
- def readARPackages(self, element, parent):
1222
+ def readValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
1223
+ value_spec.short_label = self.readChildOptionalElement(element, "SHORT-LABEL")
1224
+
1225
+ def readSwValueCont(self, element: ET.Element, spec: ApplicationValueSpecification):
1226
+ child_element = element.find("./xmlns:SW-VALUE-CONT", self.nsmap)
1227
+ if child_element is not None:
1228
+ sw_value_cont = SwValueCont()
1229
+ sw_value_cont.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
1230
+ sw_value_cont.sw_values_phys = self.readSwValues(child_element, "SW-VALUES-PHYS")
1231
+ spec.sw_value_cont = sw_value_cont
1232
+
1233
+ def readApplicationValueSpecification(self, element: ET.Element) -> ApplicationValueSpecification:
1234
+ value_spec = ApplicationValueSpecification()
1235
+ self.readValueSpecification(element, value_spec)
1236
+ value_spec.category = self.readChildOptionalElement(element, "CATEGORY")
1237
+ self.readSwValueCont(element, value_spec)
1238
+ return value_spec
1239
+
1240
+ def readRecordValueSpecificationFields(self, element: ET.Element, spec: RecordValueSpecification):
1241
+ for child_element in element.findall("./xmlns:FIELDS/*", self.nsmap):
1242
+ if child_element.tag == "{http://autosar.org/schema/r4.0}APPLICATION-VALUE-SPECIFICATION":
1243
+ value_spec = self.readApplicationValueSpecification(child_element)
1244
+ elif child_element.tag == "{http://autosar.org/schema/r4.0}RECORD-VALUE-SPECIFICATION":
1245
+ value_spec = self.readRecordValueSpecification(child_element)
1246
+ else:
1247
+ raise NotImplementedError("Unsupported VALUE-SPEC %s" % child_element.tag)
1248
+ spec.add_field(value_spec)
1249
+
1250
+ def readRecordValueSpecification(self, element: ET.Element) -> RecordValueSpecification:
1251
+ value_spec = RecordValueSpecification()
1252
+ self.readValueSpecification(element, value_spec)
1253
+ self.readRecordValueSpecificationFields(element, value_spec)
1254
+ return value_spec
1255
+
1256
+ def readConstantSpecification(self, element: ET.Element, parent: ARPackage):
1257
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:CONSTANT-SPECIFICATION", self.nsmap):
1258
+ short_name = self.readShortName(child_element)
1259
+ self.logger.debug("readConstantSpecification %s" % short_name)
1260
+ spec = parent.createConstantSpecification(short_name)
1261
+ self.readIdentifiable(child_element, spec)
1262
+ for value_spec_tag in child_element.findall("./xmlns:VALUE-SPEC/*", self.nsmap):
1263
+ if value_spec_tag.tag == "{http://autosar.org/schema/r4.0}APPLICATION-VALUE-SPECIFICATION":
1264
+ spec.value_spec = self.readApplicationValueSpecification(value_spec_tag)
1265
+ elif value_spec_tag.tag == "{http://autosar.org/schema/r4.0}RECORD-VALUE-SPECIFICATION":
1266
+ spec.value_spec = self.readRecordValueSpecification(value_spec_tag)
1267
+ else:
1268
+ raise NotImplementedError("Unsupported VALUE-SPEC %s" % value_spec_tag.tag)
1269
+
1270
+ def readInternalConstrs(self, element: ET.Element, parent: DataConstrRule):
1271
+ child_element = element.find("./xmlns:INTERNAL-CONSTRS", self.nsmap)
1272
+ if child_element is not None:
1273
+ constrs = InternalConstrs()
1274
+ constrs.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
1275
+ constrs.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
1276
+ parent.internal_constrs = constrs
1277
+
1278
+ def readPhysConstrs(self, element: ET.Element, parent: DataConstrRule):
1279
+ child_element = element.find("./xmlns:PHYS-CONSTRS", self.nsmap)
1280
+ if child_element is not None:
1281
+ constrs = PhysConstrs()
1282
+ constrs.lower_limit = self.readChildLimitElement(child_element, "LOWER-LIMIT")
1283
+ constrs.upper_limit = self.readChildLimitElement(child_element, "UPPER-LIMIT")
1284
+ constrs.unit_ref = self.readChildOptionalRefElement(child_element, "UNIT-REF")
1285
+ parent.phys_constrs = constrs
1286
+
1287
+ def readDataConstrRule(self, element: ET.Element, parent: DataConstr):
1288
+ for child_element in element.findall("./xmlns:DATA-CONSTR-RULES/xmlns:DATA-CONSTR-RULE", self.nsmap):
1289
+ self.logger.debug("readDataConstrRule")
1290
+ rule = DataConstrRule()
1291
+ self.readInternalConstrs(child_element, rule)
1292
+ self.readPhysConstrs(child_element, rule)
1293
+ parent.addDataConstrRule(rule)
1294
+
1295
+ def readDataConstr(self, element: ET.Element, parent: ARPackage):
1296
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:DATA-CONSTR", self.nsmap):
1297
+ short_name = self.readShortName(child_element)
1298
+ self.logger.debug("readDataConstr %s" % short_name)
1299
+ constr = parent.createDataConstr(short_name)
1300
+ self.readIdentifiable(child_element, constr)
1301
+ self.readDataConstrRule(child_element, constr)
1302
+
1303
+ def readUnit(self, element: ET.Element, parent: ARPackage):
1304
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:UNIT", self.nsmap):
1305
+ short_name = self.readShortName(child_element)
1306
+ self.logger.debug("readUnit %s" % short_name)
1307
+ unit = parent.createUnit(short_name)
1308
+ self.readIdentifiable(child_element, unit)
1309
+ unit.display_name = self.readChildOptionalElementLiteral(child_element, "DISPLAY-NAME")
1310
+
1311
+ def readARPackages(self, element: ET.Element, parent: ARPackage):
883
1312
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
884
1313
  short_name = self.readShortName(child_element)
885
1314
  ar_package = parent.createARPackage(short_name)
886
1315
 
887
1316
  self.logger.debug("readARPackages %s" % ar_package.full_name)
888
1317
 
1318
+ self.readElementAttributes(child_element, ar_package)
1319
+
889
1320
  self.readSenderReceiverInterfaces(child_element, ar_package)
890
1321
  self.readClientServerInterfaces(child_element, ar_package)
891
1322
  self.readDataTypeMappingSets(child_element, ar_package)
@@ -893,7 +1324,7 @@ class ARXMLParser:
893
1324
  self.readApplicationPrimitiveDataTypes(child_element, ar_package)
894
1325
  self.readApplicationRecordDataTypes(child_element, ar_package)
895
1326
  self.readImplementationDataTypes(child_element, ar_package)
896
- self.readSwDataTypes(child_element, ar_package)
1327
+ self.readSwBaseTypes(child_element, ar_package)
897
1328
  self.readCompuMethods(child_element, ar_package)
898
1329
  self.readEcuAbstractionSwComponents(child_element, ar_package)
899
1330
  self.readApplicationSwComponentTypes(child_element, ar_package)
@@ -906,6 +1337,9 @@ class ARXMLParser:
906
1337
  self.readSwcBswMappings(child_element, ar_package)
907
1338
  self.readBswImplementation(child_element, ar_package)
908
1339
  self.readSwcImplementation(child_element, ar_package)
1340
+ self.readConstantSpecification(child_element, ar_package)
1341
+ self.readDataConstr(child_element, ar_package)
1342
+ self.readUnit(child_element, ar_package)
909
1343
 
910
1344
  def load(self, filename, document: AUTOSAR):
911
1345
  self.logger.info("Load %s ..." % filename)
@@ -915,6 +1349,4 @@ class ARXMLParser:
915
1349
  if (self.getPureTagName(root.tag) != "AUTOSAR"):
916
1350
  self._raiseError("Invalid ARXML file <%s>" % filename)
917
1351
 
918
-
919
-
920
1352
  self.readARPackages(root, document)