armodel 1.0.0__py3-none-any.whl → 1.2.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.
@@ -1,5 +1,6 @@
1
1
  from ..models import AUTOSAR, ARPackage, ARObject, EcuAbstractionSwComponentType, AtomicSwComponentType, SwComponentType, CompositionSwComponentType
2
- from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent
2
+ from ..models import SwcInternalBehavior, RunnableEntity, RTEEvent, VariableAccess, ServerCallPoint, OperationInvokedEvent, DataReceivedEvent, RVariableInAtomicSwcInstanceRef
3
+ from ..models import SwcModeSwitchEvent, RModeInAtomicSwcInstanceRef
3
4
  from ..models import RefType, AutosarVariableRef, ArVariableInImplementationDataInstanceRef, POperationInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef
4
5
  from ..models import ImplementationDataType, SwDataDefProps, SwPointerTargetProps, DataTypeMappingSet, DataTypeMap, ImplementationDataTypeElement
5
6
  from ..models import DataPrototype, RPortPrototype, PPortPrototype
@@ -10,9 +11,8 @@ from ..models import AutosarDataType, ARElement
10
11
  from ..models import AssemblySwConnector, ProvidedPortPrototypeInstanceRef, RequiredPortPrototypeInstanceRef
11
12
  from ..models import CompuMethod, CompuScale, Limit, CompuScales, Compu, CompuConst, CompuConstTextContent
12
13
  from ..models import InternalBehavior, ExecutableEntity
13
- from ..models import Implementation
14
- from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent
15
-
14
+ from ..models import Implementation, Code, AutosarEngineeringObject, ResourceConsumption
15
+ from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
16
16
 
17
17
  from typing import List
18
18
  import xml.etree.ElementTree as ET
@@ -59,11 +59,17 @@ class ARXMLParser:
59
59
  return True
60
60
  return False
61
61
 
62
+ def readChildElementFloatValue(self, short_name, element, key) -> float:
63
+ value = self.readChildElement(short_name, element, key)
64
+ if (value == None):
65
+ return None
66
+ return float(value)
67
+
62
68
  def readChildElementBooleanValue(self, short_name, element, key) -> bool:
63
69
  value = self.readChildElement(short_name, element, key)
64
70
  return self._convertStringToBooleanValue(value)
65
71
 
66
- def readChildOptionElementBooleanValue(self, element, key) -> bool:
72
+ def readChildOptionalElementBooleanValue(self, element, key) -> bool:
67
73
  value = self.readChildOptionalElement(element, key)
68
74
  if (value == None):
69
75
  return None
@@ -79,7 +85,7 @@ class ARXMLParser:
79
85
  value = self.readChildElement(short_name, element, key)
80
86
  return self._convertStringToNumberValue(value)
81
87
 
82
- def readChildOptionElementNumberValue(self, element, key) -> int:
88
+ def readChildOptionalElementNumberValue(self, element, key) -> int:
83
89
  value = self.readChildOptionalElement(element, key)
84
90
  if (value == None):
85
91
  return None
@@ -100,13 +106,22 @@ class ARXMLParser:
100
106
  def readShortName(self, element) -> str:
101
107
  return self.readChildElement("", element, "SHORT-NAME")
102
108
 
103
- def readChildRefElement(self, element, key) -> RefType:
109
+ def _readChildRefElementDestAndValue(self, element) -> RefType:
110
+ ref = RefType()
111
+ ref.dest = element.attrib['DEST']
112
+ ref.value = element.text
113
+ return ref
114
+
115
+ def readChildRefElement(self, short_name, element, key) -> RefType:
104
116
  child_element = element.find("./xmlns:%s" % key, self.nsmap)
105
117
  if (child_element != None):
106
- ref = RefType()
107
- ref.dest = child_element.attrib['DEST']
108
- ref.value = child_element.text
109
- return ref
118
+ return self._readChildRefElementDestAndValue(child_element)
119
+ self._raiseError("The attribute %s of <%s> has not been defined" % (key, short_name))
120
+
121
+ def readChildOptionalRefElement(self, element, key) -> RefType:
122
+ child_element = element.find("./xmlns:%s" % key, self.nsmap)
123
+ if (child_element != None):
124
+ return self._readChildRefElementDestAndValue(child_element)
110
125
  return None
111
126
 
112
127
  def readChildRefElementList(self, element, key) -> List[RefType]:
@@ -119,20 +134,18 @@ class ARXMLParser:
119
134
  results.append(ref)
120
135
  return results
121
136
 
122
-
123
-
124
137
  def readAutosarVariableInImplDatatype(self, element, accessed_variable_ref: AutosarVariableRef):
125
138
  child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
126
139
  if (child_element != None):
127
140
  autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
128
- autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildRefElement(child_element, "PORT-PROTOTYPE-REF")
129
- autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
141
+ autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
142
+ autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildRefElement("", child_element, "TARGET-DATA-PROTOTYPE-REF")
130
143
  accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
131
144
 
132
145
  def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
133
146
  child_element = element.find("./xmlns:ACCESSED-VARIABLE", self.nsmap)
134
147
  if (child_element != None):
135
- accessed_variable_ref.local_variable_ref = self.readChildRefElement(child_element, "LOCAL-VARIABLE-REF")
148
+ accessed_variable_ref.local_variable_ref = self.readChildOptionalRefElement(child_element, "LOCAL-VARIABLE-REF")
136
149
 
137
150
  def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
138
151
  for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
@@ -160,8 +173,9 @@ class ARXMLParser:
160
173
 
161
174
  def readBswModuleDescriptionImplementedEntry(self, element, parent: BswModuleDescription):
162
175
  for child_element in element.findall("./xmlns:PROVIDED-ENTRYS/xmlns:BSW-MODULE-ENTRY-REF-CONDITIONAL", self.nsmap):
163
- ref = self.readChildRefElement(child_element, "BSW-MODULE-ENTRY-REF")
164
- parent.implemented_entry_refs.append(ref)
176
+ ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
177
+ if (ref != None):
178
+ parent.implemented_entry_refs.append(ref)
165
179
  logging.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
166
180
 
167
181
  def readProvidedModeGroup(self, element, parent: BswModuleDescription):
@@ -170,14 +184,14 @@ class ARXMLParser:
170
184
  logging.debug("readProvidedModeGroup %s" % short_name)
171
185
 
172
186
  mode_group = parent.createProvidedModeGroup(short_name)
173
- mode_group.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
187
+ mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
174
188
 
175
189
  def readRequiredModeGroup(self, element, parent: BswModuleDescription):
176
190
  for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
177
191
  short_name = self.readShortName(child_element)
178
192
  logging.debug("readRequiredModeGroup %s" % short_name)
179
193
  mode_group = parent.createProvidedModeGroup(short_name)
180
- mode_group.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
194
+ mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
181
195
 
182
196
  def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
183
197
  child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
@@ -191,7 +205,7 @@ class ARXMLParser:
191
205
  def readBswModuleEntity(self, element, entity: BswModuleEntity):
192
206
  self.readExecutableEntity(element, entity)
193
207
 
194
- entity.implemented_entry_ref = self.readChildRefElement(element, "IMPLEMENTED-ENTRY-REF")
208
+ entity.implemented_entry_ref = self.readChildRefElement(entity.short_name, element, "IMPLEMENTED-ENTRY-REF")
195
209
 
196
210
  def readBswCalledEntity(self, element, parent: BswInternalBehavior):
197
211
  for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
@@ -210,7 +224,7 @@ class ARXMLParser:
210
224
  self.readBswModuleEntity(child_element, entity)
211
225
 
212
226
  def readBswEvent(self, element, event: BswScheduleEvent):
213
- event.starts_on_event_ref = self.readChildRefElement(element, "STARTS-ON-EVENT-REF")
227
+ event.starts_on_event_ref = self.readChildRefElement(event.short_name, element, "STARTS-ON-EVENT-REF")
214
228
 
215
229
  def readBswScheduleEvent(self, element, event: BswScheduleEvent):
216
230
  self.readBswEvent(element, event)
@@ -228,7 +242,7 @@ class ARXMLParser:
228
242
  short_name = self.readShortName(child_element)
229
243
  logging.debug("readBswTimingEvent %s" % short_name)
230
244
  event = parent.createBswTimingEvent(short_name)
231
- event.period = float(self.readChildElement(short_name, child_element, "PERIOD"))
245
+ event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
232
246
 
233
247
  self.readBswScheduleEvent(child_element, event)
234
248
 
@@ -237,7 +251,7 @@ class ARXMLParser:
237
251
  short_name = self.readShortName(child_element)
238
252
  logging.debug("readBswDataReceivedEvent %s" % short_name)
239
253
  event = parent.createBswDataReceivedEvent(short_name)
240
- event.data_ref = self.readChildRefElement(child_element, "DATA-REF")
254
+ event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
241
255
 
242
256
  self.readBswScheduleEvent(child_element, event)
243
257
 
@@ -246,7 +260,7 @@ class ARXMLParser:
246
260
  short_name = self.readShortName(child_element)
247
261
  logging.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
248
262
  event = parent.createBswInternalTriggerOccurredEvent(short_name)
249
- event.event_source_ref = self.readChildRefElement(child_element, "EVENT-SOURCE-REF")
263
+ event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
250
264
 
251
265
  self.readBswScheduleEvent(child_element, event)
252
266
 
@@ -311,26 +325,79 @@ class ARXMLParser:
311
325
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-MODULE-ENTRY", self.nsmap):
312
326
  short_name = self.readShortName(child_element)
313
327
  entry = parent.createBswModuleEntry(short_name)
314
- entry.is_reentrant = self.readChildOptionElementBooleanValue(child_element, "IS-REENTRANT")
315
- entry.is_synchronous = self.readChildOptionElementBooleanValue(child_element, "IS-SYNCHRONOUS")
316
- entry.service_id = self.readChildOptionElementNumberValue(child_element, "SERVICE-ID")
328
+ entry.is_reentrant = self.readChildOptionalElementBooleanValue(child_element, "IS-REENTRANT")
329
+ entry.is_synchronous = self.readChildOptionalElementBooleanValue(child_element, "IS-SYNCHRONOUS")
330
+ entry.service_id = self.readChildOptionalElementNumberValue(child_element, "SERVICE-ID")
317
331
  entry.call_type = self.readChildOptionalElement(child_element, "CALL-TYPE")
318
332
  entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
319
333
  entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
320
334
 
321
- logging.debug("readBswModuleEntry \n%s" % entry)
335
+ #logging.debug("readBswModuleEntry \n%s" % entry)
336
+ logging.debug("readBswModuleEntry %s" % entry.short_name)
322
337
 
323
- def readImplementation(self, element, implementation: Implementation):
324
- pass
338
+ def readArtifactDescriptor(self, element, code_desc: Code):
339
+ for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
340
+ artifact_desc = AutosarEngineeringObject()
341
+ artifact_desc.short_label = self.readChildElement(code_desc.short_name, child_element, "SHORT-LABEL")
342
+ artifact_desc.category = self.readChildElement(code_desc.short_name, child_element, "CATEGORY")
343
+ code_desc.addArtifactDescriptor(artifact_desc)
344
+
345
+ logging.debug("readArtifactDescriptor %s", artifact_desc.short_label)
346
+
347
+ def readCodeDescriptor(self, element, impl: Implementation):
348
+ for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
349
+ short_name = self.readShortName(child_element)
350
+ logging.debug("readCodeDescriptor %s" % short_name)
351
+ code_desc = impl.createCodeDescriptor(short_name)
352
+ self.readArtifactDescriptor(child_element, code_desc)
353
+
354
+ def readMemorySections(self, element, consumption: ResourceConsumption):
355
+ for child_element in element.findall("./xmlns:MEMORY-SECTIONS/xmlns:MEMORY-SECTION", self.nsmap):
356
+ short_name = self.readShortName(child_element)
357
+ memory_section = consumption.createMemorySection(short_name)
358
+ alignment = self.readChildOptionalElement(child_element, "ALIGNMENT")
359
+ if (alignment != None):
360
+ memory_section.alignment = alignment
361
+ memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
362
+ logging.debug("readMemorySections %s" % memory_section.short_name)
363
+
364
+ def readResourceConsumption(self, element, impl: Implementation):
365
+ child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
366
+ if (child_element == None):
367
+ self._raiseError("Invalid ResourceConsumption of Implementation <%s>" % impl.short_name)
368
+ return
369
+ short_name = self.readShortName(child_element)
370
+ impl.resource_consumption = ResourceConsumption(impl, short_name)
371
+ self.readMemorySections(child_element, impl.resource_consumption)
372
+
373
+ def readImplementation(self, element, impl: Implementation):
374
+ self.readCodeDescriptor(element, impl)
375
+ impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
376
+ self.readResourceConsumption(element, impl)
377
+ impl.sw_version = self.readChildOptionalElement(element, "SW-VERSION")
378
+ impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
379
+ impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
325
380
 
326
381
  def readBswImplementation(self, element, parent: ARPackage):
327
- for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
382
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
328
383
  short_name = self.readShortName(child_element)
329
- logging.debug("readImplementation %s" % short_name)
384
+ impl = parent.createBswImplementation(short_name)
385
+ logging.debug("readBswImplementation %s" % impl.short_name)
330
386
 
331
- implementation = parent.createBswImplementation(short_name)
332
-
333
- self.readImplementation(element, parent)
387
+ self.readImplementation(child_element, impl)
388
+
389
+ impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
390
+ impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
391
+
392
+ def readSwcImplementation(self, element, parent: ARPackage):
393
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
394
+ short_name = self.readShortName(child_element)
395
+ impl = parent.createSwcImplementation(short_name)
396
+ logging.debug("readSwcImplementation %s" % impl.short_name)
397
+
398
+ self.readImplementation(child_element, impl)
399
+
400
+ impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
334
401
 
335
402
  def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
336
403
  self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
@@ -350,13 +417,29 @@ class ARXMLParser:
350
417
  def readReadLocalVariables(self, element, parent: RunnableEntity):
351
418
  self._readVariableAccesses(element, parent, "READ-LOCAL-VARIABLES")
352
419
 
353
- def readROperationIRef(self, element, serverCallPoint: ServerCallPoint):
420
+ def readROperationIRef(self, element, parent: ServerCallPoint):
354
421
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
355
422
  if (child_element != None):
356
423
  operation_iref = ROperationInAtomicSwcInstanceRef()
357
- operation_iref.context_r_port_ref = self.readChildRefElement(child_element, "CONTEXT-R-PORT-REF")
358
- operation_iref.target_required_operation_ref = self.readChildRefElement(child_element, "TARGET-REQUIRED-OPERATION-REF")
359
- serverCallPoint.operation_iref = operation_iref
424
+ operation_iref.context_r_port_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
425
+ operation_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-REQUIRED-OPERATION-REF")
426
+ parent.operation_iref = operation_iref
427
+
428
+ def readRVariableInAtomicSwcInstanceRef(self, element, parent: DataReceivedEvent):
429
+ child_element = element.find("./xmlns:DATA-IRE", self.nsmap)
430
+ if (child_element != None):
431
+ data_iref = RVariableInAtomicSwcInstanceRef()
432
+ data_iref.context_r_port_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-R-PORT-REF")
433
+ data_iref.target_required_operation_ref = self.readChildRefElement("", child_element, "TARGET-DATA-ELEMENT-REF")
434
+ parent.data_iref = data_iref
435
+
436
+ def readRModeInAtomicSwcInstanceRef(self, element, parent: SwcModeSwitchEvent):
437
+ for child_element in element.findall("./xmlns:MODE-IREFS/xmlns:MODE-IREF", self.nsmap):
438
+ mode_iref = RModeInAtomicSwcInstanceRef()
439
+ mode_iref.context_port = self.readChildOptionalRefElement(child_element, "CONTEXT-PORT-REF")
440
+ mode_iref.context_mode_declaration_group_prototype = self.readChildRefElement("", child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF")
441
+ mode_iref.target_mode_declaration = self.readChildRefElement("", child_element, "TARGET-MODE-DECLARATION-REF")
442
+ parent.addModeIRef(mode_iref)
360
443
 
361
444
  def readSynchronousServerCallPoint(self, element, parent: RunnableEntity):
362
445
  for child_element in element.findall("./xmlns:SERVER-CALL-POINTS/xmlns:SYNCHRONOUS-SERVER-CALL-POINT", self.nsmap):
@@ -382,7 +465,7 @@ class ARXMLParser:
382
465
  for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
383
466
  short_name = self.readShortName(child_element)
384
467
  runnable = parent.createRunnableEntity(short_name)
385
- runnable.can_be_invoked_concurrently = self.readChildElement(short_name, child_element, "CAN-BE-INVOKED-CONCURRENTLY")
468
+ runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
386
469
  runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
387
470
 
388
471
  self.readDataReceivePointByArguments(child_element, runnable)
@@ -396,14 +479,14 @@ class ARXMLParser:
396
479
  self.readInternalTriggeringPoint(child_element, runnable)
397
480
 
398
481
  def readRTEEvent(self, element, event: RTEEvent):
399
- event.start_on_event_ref = self.readChildRefElement(element, "START-ON-EVENT-REF")
482
+ event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
400
483
 
401
484
  def readOperationIRef(self, element, parent: OperationInvokedEvent):
402
485
  child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
403
486
  if (child_element != None):
404
487
  parent.operation_iref = POperationInAtomicSwcInstanceRef()
405
- parent.operation_iref.context_p_port_ref = self.readChildRefElement(child_element, "CONTEXT-P-PORT-REF")
406
- parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(child_element, "TARGET-PROVIDED-OPERATION-REF")
488
+ parent.operation_iref.context_p_port_ref = self.readChildRefElement(parent.short_name, child_element, "CONTEXT-P-PORT-REF")
489
+ parent.operation_iref.target_provided_operation_ref = self.readChildRefElement(parent.short_name, child_element, "TARGET-PROVIDED-OPERATION-REF")
407
490
 
408
491
  def readOperationInvokedEvents(self, element, parent: SwcInternalBehavior):
409
492
  for child_element in element.findall("./xmlns:EVENTS/xmlns:OPERATION-INVOKED-EVENT", self.nsmap):
@@ -417,7 +500,14 @@ class ARXMLParser:
417
500
  short_name = self.readShortName(child_element)
418
501
  prototype = parent.createExplicitInterRunnableVariable(short_name)
419
502
  self.readSwDataDefProps(child_element, prototype)
420
- prototype.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
503
+ prototype.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
504
+
505
+ def readInitEvents(self, element, parent: SwcInternalBehavior):
506
+ for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
507
+ short_name = self.readShortName(child_element)
508
+ event = parent.createInitEvent(short_name)
509
+
510
+ self.readRTEEvent(child_element, event)
421
511
 
422
512
  def readTimingEvents(self, element, parent: SwcInternalBehavior):
423
513
  for child_element in element.findall("./xmlns:EVENTS/xmlns:TIMING-EVENT", self.nsmap):
@@ -431,13 +521,29 @@ class ARXMLParser:
431
521
  event.offset = (float)(offset)
432
522
  event.period = (float)(self.readChildElement(short_name, child_element, "PERIOD"))
433
523
 
524
+ def readDataReceivedEvent(self, element, parent: SwcInternalBehavior):
525
+ for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
526
+ short_name = self.readShortName(child_element)
527
+ event = parent.createDataReceivedEvent(short_name)
528
+
529
+ self.readRTEEvent(child_element, event)
530
+ self.readRVariableInAtomicSwcInstanceRef(child_element, event)
531
+
532
+ def readSwcModeSwitchEvent(self, element, parent: SwcInternalBehavior):
533
+ for child_element in element.findall("./xmlns:EVENTS/xmlns:SWC-MODE-SWITCH-EVENT", self.nsmap):
534
+ short_name = self.readShortName(child_element)
535
+ event = parent.createSwcModeSwitchEvent(short_name)
536
+
537
+ self.readRTEEvent(child_element, event)
538
+ self.readRModeInAtomicSwcInstanceRef(child_element, event)
539
+
434
540
  def readInternalTriggerOccurredEvent(self, element, parent: SwcInternalBehavior):
435
541
  for child_element in element.findall("./xmlns:EVENTS/xmlns:INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
436
542
  short_name = self.readShortName(child_element)
437
543
  event = parent.createInternalTriggerOccurredEvent(short_name)
438
544
 
439
545
  self.readRTEEvent(child_element, event)
440
- event.event_source_ref = self.readChildRefElement(child_element, "EVENT-SOURCE-REF")
546
+ event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
441
547
 
442
548
  def readSwPointerTargetProps(self, element, parent: ARElement):
443
549
  child_element = element.find(
@@ -454,10 +560,10 @@ class ARXMLParser:
454
560
 
455
561
  if (child_element != None):
456
562
  sw_data_def_props = SwDataDefProps()
457
- sw_data_def_props.base_type_ref = self.readChildRefElement(child_element, "BASE-TYPE-REF")
458
- sw_data_def_props.data_constr_ref = self.readChildRefElement(child_element, "DATA-CONSTR-REF")
459
- sw_data_def_props.compu_method_ref = self.readChildRefElement(child_element, "COMPU-METHOD-REF")
460
- sw_data_def_props.implementation_data_type_ref = self.readChildRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
563
+ sw_data_def_props.base_type_ref = self.readChildOptionalRefElement(child_element, "BASE-TYPE-REF")
564
+ sw_data_def_props.data_constr_ref = self.readChildOptionalRefElement(child_element, "DATA-CONSTR-REF")
565
+ sw_data_def_props.compu_method_ref = self.readChildOptionalRefElement(child_element, "COMPU-METHOD-REF")
566
+ sw_data_def_props.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
461
567
  sw_data_def_props.sw_calibration_access = self.readChildOptionalElement(child_element, "SW-CALIBRATION-ACCESS")
462
568
  self.readSwPointerTargetProps(child_element, sw_data_def_props)
463
569
  parent.sw_data_def_props = sw_data_def_props
@@ -501,8 +607,10 @@ class ARXMLParser:
501
607
  array_sub_element = data_type.getImplementationDataTypeElements()[0]
502
608
  if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
503
609
  data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementation_data_type_ref.value)
610
+ elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
611
+ continue
504
612
  else:
505
- self._raiseError("The catetory <%s> of array sub-element does not support." % array_sub_element.category)
613
+ self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
506
614
 
507
615
  def readSwDataTypes(self, element, parent: ARPackage):
508
616
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
@@ -513,16 +621,16 @@ class ARXMLParser:
513
621
  for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:CLIENT-COM-SPEC", self.nsmap):
514
622
  try:
515
623
  com_spec = ClientComSpec()
516
- com_spec.operation_ref = self.readChildRefElement(child_element, "OPERATION-REF")
624
+ com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
517
625
  parent.addRequiredComSpec(com_spec)
518
626
  except ValueError as err:
519
627
  print(parent.short_name + ": " + str(err))
520
628
 
521
629
  def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
522
630
  #FIXME: readchildElement
523
- com_spec.data_element_ref = self.readChildRefElement(element, "DATA-ELEMENT-REF")
524
- com_spec.handle_out_of_range = self.readChildElement("", element, "HANDLE-OUT-OF-RANGE")
525
- com_spec.uses_end_to_end_protection = self.readChildOptionElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
631
+ com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
632
+ com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
633
+ com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
526
634
 
527
635
  def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
528
636
  for child_element in element.findall("./xmlns:REQUIRED-COM-SPECS/xmlns:NONQUEUED-RECEIVER-COM-SPEC", self.nsmap):
@@ -531,7 +639,7 @@ class ARXMLParser:
531
639
  self.readReceiverComSpec(child_element, com_spec)
532
640
  try:
533
641
  # FIXME:
534
- com_spec.alive_timeout = float(self.readChildElement("", child_element, "ALIVE-TIMEOUT"))
642
+ com_spec.alive_timeout = self.readChildElementFloatValue("", child_element, "ALIVE-TIMEOUT")
535
643
  com_spec.enable_updated = self.readChildElementBooleanValue("", child_element, "ENABLE-UPDATE")
536
644
  com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
537
645
  com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
@@ -546,16 +654,16 @@ class ARXMLParser:
546
654
  logging.debug("readRPortPrototype %s" % short_name)
547
655
 
548
656
  prototype = parent.createRPortPrototype(short_name)
549
- prototype.required_interface_tref = self.readChildRefElement(child_element, "REQUIRED-INTERFACE-TREF")
657
+ prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
550
658
 
551
659
  self.readClientComSpec(child_element, prototype)
552
660
  self.readNonqueuedReceiverComSpec(child_element, prototype)
553
661
 
554
662
  def readSenderComSpec(self, element, com_spec: SenderComSpec):
555
663
  # FIXME:
556
- com_spec.data_element_ref = self.readChildRefElement(element, "DATA-ELEMENT-REF")
557
- com_spec.handle_out_of_range = self.readChildElement("", element, "HANDLE-OUT-OF-RANGE")
558
- com_spec.uses_end_to_end_protection = self.readChildOptionElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
664
+ com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
665
+ com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
666
+ com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
559
667
 
560
668
  def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
561
669
  for child_element in element.findall("./xmlns:PROVIDED-COM-SPECS/xmlns:NONQUEUED-SENDER-COM-SPEC", self.nsmap):
@@ -569,7 +677,7 @@ class ARXMLParser:
569
677
  logging.debug("readPPortPrototype %s" % short_name)
570
678
 
571
679
  prototype = parent.createPPortPrototype(short_name)
572
- prototype.provided_interface_tref = self.readChildRefElement(child_element, "PROVIDED-INTERFACE-TREF")
680
+ prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
573
681
  self.readNonqueuedSenderComSpec(child_element, prototype)
574
682
 
575
683
  def readSwComponentType(self, element, parent: SwComponentType):
@@ -599,6 +707,12 @@ class ARXMLParser:
599
707
  sw_component = parent.createApplicationSwComponentType(short_name)
600
708
  self.readAtomicSwComponentType(child_element, sw_component)
601
709
 
710
+ def readSensorActuatorSwComponentType(self, element, parent: ARPackage):
711
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENSOR-ACTUATOR-SW-COMPONENT-TYPE", self.nsmap):
712
+ short_name = self.readShortName(child_element)
713
+ sw_component = parent.createSensorActuatorSwComponentType(short_name)
714
+ self.readAtomicSwComponentType(child_element, sw_component)
715
+
602
716
  def readServiceSwComponentTypes(self, element, parent: ARPackage):
603
717
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SERVICE-SW-COMPONENT-TYPE", self.nsmap):
604
718
  short_name = self.readShortName(child_element)
@@ -609,16 +723,16 @@ class ARXMLParser:
609
723
  child_element = element.find("./xmlns:PROVIDER-IREF", self.nsmap)
610
724
  if (child_element != None):
611
725
  provider_iref = ProvidedPortPrototypeInstanceRef()
612
- provider_iref.context_component_ref = self.readChildRefElement(child_element, "CONTEXT-COMPONENT-REF")
613
- provider_iref.target_p_port_ref = self.readChildRefElement(child_element, "TARGET-P-PORT-REF")
726
+ provider_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
727
+ provider_iref.target_p_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-P-PORT-REF")
614
728
  parent.provider_iref = provider_iref
615
729
 
616
730
  def readAssemblySwConnectorRequesterIRef(self, element, parent: AssemblySwConnector):
617
731
  child_element = element.find("./xmlns:REQUESTER-IREF", self.nsmap)
618
732
  if (child_element != None):
619
733
  requester_iref = RequiredPortPrototypeInstanceRef()
620
- requester_iref.context_component_ref = self.readChildRefElement(child_element, "CONTEXT-COMPONENT-REF")
621
- requester_iref.target_r_port_ref = self.readChildRefElement(child_element, "TARGET-R-PORT-REF")
734
+ requester_iref.context_component_ref = self.readChildOptionalRefElement(child_element, "CONTEXT-COMPONENT-REF")
735
+ requester_iref.target_r_port_ref = self.readChildOptionalRefElement(child_element, "TARGET-R-PORT-REF")
622
736
  parent.requester_iref = requester_iref
623
737
 
624
738
  def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
@@ -636,7 +750,7 @@ class ARXMLParser:
636
750
  logging.debug("readSwComponentPrototypes %s" % short_name)
637
751
 
638
752
  prototype = parent.createSwComponentPrototype(short_name)
639
- prototype.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
753
+ prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
640
754
 
641
755
  def readCompositionSwComponentTypes(self, element, parent: ARPackage):
642
756
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
@@ -651,8 +765,8 @@ class ARXMLParser:
651
765
  def readDataTypeMap(self, element, parent: DataTypeMappingSet):
652
766
  for child_element in element.findall("./xmlns:DATA-TYPE-MAPS/xmlns:DATA-TYPE-MAP", self.nsmap):
653
767
  data_type_map = DataTypeMap()
654
- data_type_map.application_data_type_ref = self.readChildRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
655
- data_type_map.implementation_data_type_ref = self.readChildRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
768
+ data_type_map.application_data_type_ref = self.readChildOptionalRefElement(child_element, "APPLICATION-DATA-TYPE-REF")
769
+ data_type_map.implementation_data_type_ref = self.readChildOptionalRefElement(child_element, "IMPLEMENTATION-DATA-TYPE-REF")
656
770
  parent.addDataTypeMap(data_type_map)
657
771
  # add the data type map to global namespace
658
772
  AUTOSAR.getInstance().addDataTypeMap(data_type_map)
@@ -668,7 +782,7 @@ class ARXMLParser:
668
782
  short_name = self.readShortName(child_element)
669
783
  prototype = parent.createDataElement(short_name)
670
784
  self.readSwDataDefProps(child_element, prototype)
671
- prototype.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
785
+ prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
672
786
 
673
787
  def readSenderReceiverInterfaces(self, element, parent: ARPackage):
674
788
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENDER-RECEIVER-INTERFACE", self.nsmap):
@@ -680,7 +794,7 @@ class ARXMLParser:
680
794
  for child_element in element.findall("./xmlns:ARGUMENTS/xmlns:ARGUMENT-DATA-PROTOTYPE", self.nsmap):
681
795
  short_name = self.readShortName(child_element)
682
796
  prototype = ArgumentDataPrototype(property, short_name)
683
- prototype.type_tref = self.readChildRefElement(child_element, "TYPE-TREF")
797
+ prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
684
798
  prototype.direction = self.readChildElement(short_name, child_element, "DIRECTION")
685
799
  parent.addArgumentDataPrototype(prototype)
686
800
 
@@ -736,9 +850,25 @@ class ARXMLParser:
736
850
  for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
737
851
  short_name = self.readShortName(child_element)
738
852
  compu_method = parent.createCompuMethod(short_name)
739
- compu_method.category = self.readChildElement(short_name, child_element, "CATEGORY")
853
+ compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
740
854
  self.readCompuInternalToPhys(child_element, compu_method)
741
855
 
856
+ def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
857
+ for child_element in element.findall("./xmlns:RUNNABLE-MAPPINGS/xmlns:SWC-BSW-RUNNABLE-MAPPING", self.nsmap):
858
+ mapping = SwcBswRunnableMapping()
859
+ mapping.bsw_entity_ref = self.readChildOptionalRefElement(child_element, "BSW-ENTITY-REF")
860
+ mapping.swc_runnable_ref = self.readChildOptionalRefElement(child_element, "SWC-RUNNABLE-REF")
861
+ parent.addRunnableMapping(mapping)
862
+
863
+ def readSwcBswMappings(self, element, parent: ARPackage):
864
+ for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-BSW-MAPPING", self.nsmap):
865
+ short_name = self.readShortName(child_element)
866
+ swc_bsw_mapping = parent.createSwcBswMapping(short_name)
867
+
868
+ swc_bsw_mapping.bsw_behavior_ref = self.readChildOptionalRefElement(child_element, "BSW-BEHAVIOR-REF")
869
+ self.readSwcBswRunnableMappings(child_element, swc_bsw_mapping)
870
+ swc_bsw_mapping.swc_behavior_ref = self.readChildOptionalRefElement(child_element, "SWC-BEHAVIOR-REF")
871
+
742
872
  def readARPackages(self, element, parent):
743
873
  for child_element in element.findall("./xmlns:AR-PACKAGES/xmlns:AR-PACKAGE", self.nsmap):
744
874
  short_name = self.readShortName(child_element)
@@ -758,12 +888,14 @@ class ARXMLParser:
758
888
  self.readEcuAbstractionSwComponents(child_element, ar_package)
759
889
  self.readApplicationSwComponentTypes(child_element, ar_package)
760
890
  self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
891
+ self.readSensorActuatorSwComponentType(child_element, ar_package)
761
892
  self.readServiceSwComponentTypes(child_element, ar_package)
762
893
  self.readCompositionSwComponentTypes(child_element, ar_package)
763
894
  self.readBswModuleDescription(child_element, ar_package)
764
895
  self.readBswModuleEntry(child_element, ar_package)
896
+ self.readSwcBswMappings(child_element, ar_package)
765
897
  self.readBswImplementation(child_element, ar_package)
766
-
898
+ self.readSwcImplementation(child_element, ar_package)
767
899
 
768
900
  def load(self, filename, document: AUTOSAR):
769
901
  tree = ET.parse(filename)