armodel 1.8.2__py3-none-any.whl → 1.8.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. armodel/cli/format_xml_cli.py +62 -0
  2. armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +17 -15
  3. armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +1 -1
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/__init__.py +44 -28
  5. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +5 -5
  6. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +13 -1
  7. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +247 -45
  8. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +9 -6
  9. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +7 -5
  10. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +3 -3
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/Trigger.py +43 -2
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +40 -43
  13. armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +13 -12
  14. armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +40 -9
  15. armodel/parser/abstract_arxml_parser.py +4 -0
  16. armodel/parser/arxml_parser.py +88 -56
  17. armodel/tests/test_armodel/models/test_common_structure.py +2 -2
  18. armodel/tests/test_armodel/parser/test_arxml_parser.py +38 -0
  19. armodel/tests/test_armodel/parser/test_implementation_data_type.py +247 -0
  20. armodel/tests/test_armodel/parser/test_rte_event.py +142 -0
  21. armodel/tests/test_armodel/parser/test_runnable_entity.py +135 -0
  22. armodel/writer/abstract_arxml_writer.py +2 -0
  23. armodel/writer/arxml_writer.py +89 -25
  24. {armodel-1.8.2.dist-info → armodel-1.8.3.dist-info}/METADATA +11 -1
  25. {armodel-1.8.2.dist-info → armodel-1.8.3.dist-info}/RECORD +29 -25
  26. {armodel-1.8.2.dist-info → armodel-1.8.3.dist-info}/entry_points.txt +1 -0
  27. {armodel-1.8.2.dist-info → armodel-1.8.3.dist-info}/LICENSE +0 -0
  28. {armodel-1.8.2.dist-info → armodel-1.8.3.dist-info}/WHEEL +0 -0
  29. {armodel-1.8.2.dist-info → armodel-1.8.3.dist-info}/top_level.txt +0 -0
@@ -7,6 +7,7 @@ from .....M2.AUTOSARTemplates.SWComponentTemplate.Datatype.DataPrototypes import
7
7
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.IncludedDataTypes import IncludedDataTypeSet
8
8
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PerInstanceMemory import PerInstanceMemory
9
9
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent
10
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataSendCompletedEvent
10
11
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent
11
12
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent
12
13
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import SwcModeSwitchEvent, TimingEvent
@@ -16,7 +17,7 @@ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.DataElemen
16
17
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ServerCall import ServerCallPoint
17
18
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import IncludedModeDeclarationGroupSet, ModeAccessPoint
18
19
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import ModeSwitchPoint
19
- from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.Trigger import InternalTriggeringPoint
20
+ from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.Trigger import ExternalTriggeringPoint, InternalTriggeringPoint
20
21
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
21
22
  from .....M2.AUTOSARTemplates.CommonStructure.InternalBehavior import ExecutableEntity
22
23
 
@@ -72,44 +73,32 @@ class RunnableEntity(ExecutableEntity):
72
73
  def __init__(self, parent: ARObject, short_name: str):
73
74
  super().__init__(parent, short_name)
74
75
 
75
- # type: List[RunnableEntityArgument]
76
- self.arguments = []
77
- # type: List[AsynchronousServerCallResultPoint]
78
- self.asynchronousServerCallResultPoints = []
79
- self.canBeInvokedConcurrently = None # type: ARBoolean
80
- # type: Dict[str, VariableAccess]
81
- self.dataReadAccesses = {}
82
- # type: Dict[str, VariableAccess]
83
- self.dataReceivePointByArguments = {}
84
- # type: Dict[str, VariableAccess]
85
- self.dataReceivePointByValues = {}
86
- # type: Dict[str, VariableAccess]
87
- self.dataSendPoints = {}
88
- # type: Dict[str, VariableAccess]
89
- self.dataWriteAccesses = {}
90
- # type: Dict[str, ExternalTriggeringPoint]
91
- self.externalTriggeringPoints = {}
92
- # type: Dict[str, InternalTriggeringPoint]
93
- self.internalTriggeringPoints = {}
94
- self.modeAccessPoints = [] # type: List[ModeAccessPoint]
95
- self.modeSwitchPoints = [] # type: List[ModeSwitchPoint]
96
- # type: Dict[str, ParameterAccess]
97
- self.parameterAccesses = {}
98
- # type: Dict[str, VariableAccess]
99
- self.readLocalVariables = {}
100
- # type: Dict[str, ServerCallPoint]
101
- self.serverCallPoints = {}
102
- self.symbol = None # type: ARLiteral
76
+ self.arguments: List[RunnableEntityArgument] = []
77
+ self.asynchronousServerCallResultPoints: List[AsynchronousServerCallResultPoint] = []
78
+ self.canBeInvokedConcurrently: ARBoolean = None
79
+ self.dataReadAccesses: List[VariableAccess] = []
80
+ self.dataReceivePointByArguments: List[VariableAccess] = []
81
+ self.dataReceivePointByValues: List[VariableAccess] = []
82
+ self.dataSendPoints: List[VariableAccess] = []
83
+ self.dataWriteAccesses: List[VariableAccess] = []
84
+ self.externalTriggeringPoints: List[ExternalTriggeringPoint] = []
85
+ self.internalTriggeringPoints: List[InternalTriggeringPoint] = []
86
+ self.modeAccessPoints: List[ModeAccessPoint] = []
87
+ self.modeSwitchPoints: List[ModeSwitchPoint] = []
88
+ self.parameterAccesses: List[ParameterAccess] = []
89
+ self.readLocalVariables: List[VariableAccess] = []
90
+ self.serverCallPoints: List[ServerCallPoint] = []
91
+ self.symbol: ARLiteral = None
103
92
  # type: Dict[str, WaitPoint]
104
93
  self.waitPoints = {}
105
- # type: Dict[str, VariableAccess]
106
- self.writtenLocalVariables = {}
94
+ self.writtenLocalVariables: List[VariableAccess] = []
107
95
 
108
- def _createVariableAccess(self, short_name, variable_accesses: Dict[str, VariableAccess]):
96
+ def _createVariableAccess(self, short_name, variable_accesses: List[VariableAccess]):
109
97
  if not self.IsElementExists(short_name):
110
98
  variable_access = VariableAccess(self, short_name)
111
- variable_accesses[short_name] = variable_access
112
- return variable_accesses[short_name]
99
+ self.addElement(variable_access)
100
+ variable_accesses.append(variable_access)
101
+ return self.getElement(short_name, VariableAccess)
113
102
 
114
103
  def getArguments(self):
115
104
  return self.arguments
@@ -129,46 +118,45 @@ class RunnableEntity(ExecutableEntity):
129
118
  return self._createVariableAccess(short_name, self.dataReadAccesses)
130
119
 
131
120
  def getDataReadAccesses(self) -> List[VariableAccess]:
132
- return sorted(self.dataReadAccesses.values(), key=lambda v: v.short_name)
121
+ return sorted(self.dataReadAccesses, key=lambda v: v.short_name)
133
122
 
134
123
  def createDataWriteAccess(self, short_name: str) -> VariableAccess:
135
124
  return self._createVariableAccess(short_name, self.dataWriteAccesses)
136
125
 
137
126
  def getDataWriteAccesses(self) -> List[VariableAccess]:
138
- return sorted(self.dataWriteAccesses.values(), key=lambda v: v.short_name)
127
+ return sorted(self.dataWriteAccesses, key=lambda v: v.short_name)
139
128
 
140
129
  def createDataReceivePointByArgument(self, short_name: str) -> VariableAccess:
141
130
  return self._createVariableAccess(short_name, self.dataReceivePointByArguments)
142
131
 
143
132
  def getDataReceivePointByArguments(self) -> List[VariableAccess]:
144
- return sorted(self.dataReceivePointByArguments.values(), key=lambda v: v.short_name)
133
+ return sorted(self.dataReceivePointByArguments, key=lambda v: v.short_name)
145
134
 
146
135
  def createDataReceivePointByValue(self, short_name: str) -> VariableAccess:
147
136
  return self._createVariableAccess(short_name, self.dataReceivePointByValues)
148
137
 
149
138
  def getDataReceivePointByValues(self) -> List[VariableAccess]:
150
- return sorted(self.dataReceivePointByValues.values(), key=lambda v: v.short_name)
139
+ return sorted(self.dataReceivePointByValues, key=lambda v: v.short_name)
151
140
 
152
141
  def createDataSendPoint(self, short_name: str) -> VariableAccess:
153
142
  return self._createVariableAccess(short_name, self.dataSendPoints)
154
143
 
155
144
  def getDataSendPoints(self) -> List[VariableAccess]:
156
145
  # return sorted(self.dataSendPoints.values(), key=lambda v: v.short_name)
157
- return self.dataSendPoints.values()
146
+ return self.dataSendPoints
158
147
 
159
148
  def createReadLocalVariable(self, short_name: str) -> VariableAccess:
160
149
  return self._createVariableAccess(short_name, self.readLocalVariables)
161
150
 
162
151
  def getReadLocalVariables(self) -> List[VariableAccess]:
163
152
  # return sorted(self.readLocalVariables.values(), key=lambda v: v.short_name)
164
- return self.readLocalVariables.values()
153
+ return self.readLocalVariables
165
154
 
166
155
  def createWrittenLocalVariable(self, short_name: str) -> VariableAccess:
167
156
  return self._createVariableAccess(short_name, self.writtenLocalVariables)
168
157
 
169
158
  def getWrittenLocalVariables(self) -> List[VariableAccess]:
170
- # return sorted(self.writtenLocalVariables.values(), key=lambda v: v.short_name)
171
- return self.writtenLocalVariables.values()
159
+ return self.writtenLocalVariables
172
160
 
173
161
  def getParameterAccesses(self) -> List[ParameterAccess]:
174
162
  return list(sorted(filter(lambda a: isinstance(a, ParameterAccess), self.elements), key=lambda o: o.short_name))
@@ -191,7 +179,7 @@ class RunnableEntity(ExecutableEntity):
191
179
  if (short_name not in self.serverCallPoints):
192
180
  point = AsynchronousServerCallPoint(self, short_name)
193
181
  self.addElement(point)
194
- return self.getElement(short_name)
182
+ return self.getElement(short_name, AsynchronousServerCallPoint)
195
183
  # self.serverCallPoints[short_name] = server_call_point
196
184
  # return self.serverCallPoints[short_name]
197
185
 
@@ -398,6 +386,12 @@ class SwcInternalBehavior(InternalBehavior):
398
386
  event = BackgroundEvent(self, short_name)
399
387
  self.addElement(event)
400
388
  return self.getElement(short_name, BackgroundEvent)
389
+
390
+ def createDataSendCompletedEvent(self, short_name: str) -> DataSendCompletedEvent:
391
+ if not self.IsElementExists(short_name):
392
+ event = DataSendCompletedEvent(self, short_name)
393
+ self.addElement(event)
394
+ return self.getElement(short_name, DataSendCompletedEvent)
401
395
 
402
396
  def getRteEvents(self) -> List[RTEEvent]:
403
397
  return sorted(filter(lambda c: isinstance(c, RTEEvent), self.elements), key=lambda e: e.short_name)
@@ -425,6 +419,9 @@ class SwcInternalBehavior(InternalBehavior):
425
419
 
426
420
  def getBackgroundEvents(self) -> List[BackgroundEvent]:
427
421
  return sorted(filter(lambda c: isinstance(c, BackgroundEvent), self.elements), key=lambda e: e.short_name)
422
+
423
+ def getDataSendCompletedEvents(self) -> List[DataSendCompletedEvent]:
424
+ return sorted(filter(lambda c: isinstance(c, DataSendCompletedEvent), self.elements), key=lambda e: e.short_name)
428
425
 
429
426
  def getSwcServiceDependencies(self) -> List[SwcServiceDependency]:
430
427
  return sorted(filter(lambda c: isinstance(c, SwcServiceDependency), self.elements), key=lambda e: e.short_name)
@@ -202,15 +202,15 @@ class CompuScale(Compu):
202
202
  def __init__(self):
203
203
  super().__init__()
204
204
 
205
- self.a2lDisplayText = None # type: String
206
- self.compuInverseValue = None # type: CompuConst
207
- self.compuScaleContents = None # type: CompuScaleContents
208
- self.desc = None # type: MultiLanguageOverviewParagraph
209
- self.lowerLimit = None # type: Limit
210
- self.mask = None # type: PositiveUnlimitedInteger
211
- self.shortLabel = None # type: Identifier
212
- self.symbol = None # type: CIdentifier
213
- self.upperLimit = None # type: Limit
205
+ self.a2lDisplayText: String = None
206
+ self.compuInverseValue: CompuConst = None
207
+ self.compuScaleContents: CompuScaleContents = None
208
+ self.desc: MultiLanguageOverviewParagraph = None
209
+ self.lowerLimit: Limit = None
210
+ self.mask: PositiveUnlimitedInteger = None
211
+ self.shortLabel: Identifier = None
212
+ self.symbol: CIdentifier = None
213
+ self.upperLimit: Limit = None
214
214
 
215
215
  def getA2lDisplayText(self):
216
216
  return self.a2lDisplayText
@@ -247,11 +247,12 @@ class CompuScale(Compu):
247
247
  self.lowerLimit = value
248
248
  return self
249
249
 
250
- def getMask(self):
250
+ def getMask(self) -> PositiveUnlimitedInteger:
251
251
  return self.mask
252
252
 
253
- def setMask(self, value):
254
- self.mask = value
253
+ def setMask(self, value: PositiveUnlimitedInteger):
254
+ if value is not None:
255
+ self.mask = value
255
256
  return self
256
257
 
257
258
  def getShortLabel(self):
@@ -6,6 +6,44 @@ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTy
6
6
  from ....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
7
7
 
8
8
 
9
+ class SwImplPolicyEnum(AREnum):
10
+ """
11
+ Enumeration for software implementation policy.
12
+ * const
13
+ forced implementation such that the running software within the ECU shall not modify it. For example
14
+ implemented with the "const" modifier in C. This can be applied for parameters (not for those in
15
+ NVRAM) as well as argument data prototypes.
16
+ * fixed
17
+ This data element is fixed. In particular this indicates, that it might also be implemented e.g. as in
18
+ place data, (#DEFINE).
19
+ * measurementPoint
20
+ The data element is created for measurement purposes only. The data element is never read directly
21
+ within the ECU software. In contrast to a "standard" data element in an unconnected provide port is,
22
+ this unconnection is guaranteed for measurementPoint data elements.
23
+ * queued
24
+ The content of the data element is queued and the data element has 'event' semantics, i.e. data
25
+ elements are stored in a queue and all data elements are processed in 'first in first out' order. The
26
+ queuing is intended to be implemented by RTE Generator. This value is not applicable for parameters.
27
+ * standard
28
+ This is applicable for all kinds of data elements. For variable data prototypes the 'last is best'
29
+ semantics applies. For parameter there is no specific implementation directive.
30
+ """
31
+ CONST = "const"
32
+ FIXED = "fixed"
33
+ MEASUREMENT_POINT = "measurementPoint"
34
+ QUEUED = "queued"
35
+ STANDARD = "standard"
36
+
37
+ def __init__(self):
38
+ super().__init__([
39
+ SwImplPolicyEnum.CONST,
40
+ SwImplPolicyEnum.FIXED,
41
+ SwImplPolicyEnum.MEASUREMENT_POINT,
42
+ SwImplPolicyEnum.QUEUED,
43
+ SwImplPolicyEnum.STANDARD
44
+ ])
45
+
46
+
9
47
  class SwDataDefPropsConditional(ARObject):
10
48
  '''
11
49
  Patch for the time-stamp
@@ -14,18 +52,11 @@ class SwDataDefPropsConditional(ARObject):
14
52
  super().__init__()
15
53
 
16
54
 
17
- class SwImplPolicyEnum(AREnum):
18
- def __init__(self, enum_values):
19
- super().__init__([
20
-
21
- ])
22
-
23
-
24
55
  class SwDataDefProps(ARObject):
25
56
  def __init__(self):
26
57
  super().__init__()
27
58
 
28
- self.additionalNativeTypeQualifier = None
59
+ self.additionalNativeTypeQualifier = None
29
60
  self.annotations = [] # type: List[Annotation]
30
61
  self.baseTypeRef = None # type: RefType
31
62
  self.compuMethodRef = None # type: RefType
@@ -268,6 +299,7 @@ class SwDataDefProps(ARObject):
268
299
  self.valueAxisDataTypeRef = value
269
300
  return self
270
301
 
302
+
271
303
  class SwPointerTargetProps(ARObject):
272
304
  def __init__(self):
273
305
  super().__init__()
@@ -317,4 +349,3 @@ class ValueList(ARObject):
317
349
 
318
350
  def getVfs(self) -> List[ARLiteral]:
319
351
  return sorted(self._vf)
320
-
@@ -190,6 +190,8 @@ class AbstractARXMLParser:
190
190
  return None
191
191
  numerical = ARNumerical()
192
192
  self.readARObjectAttributes(child_element, numerical)
193
+ if "SHORT-LABEL" in child_element.attrib:
194
+ numerical.setShortLabel(child_element.attrib["SHORT-LABEL"])
193
195
  numerical.setValue(child_element.text)
194
196
  return numerical
195
197
 
@@ -206,6 +208,8 @@ class AbstractARXMLParser:
206
208
  child_element = self.find(element, key)
207
209
  if child_element is None:
208
210
  return None
211
+ if child_element.text is None:
212
+ return None
209
213
  numerical = PositiveInteger()
210
214
  self.readARObjectAttributes(child_element, numerical)
211
215
  numerical.setValue(child_element.text)
@@ -62,7 +62,7 @@ from ..models.M2.AUTOSARTemplates.CommonStructure.ServiceNeeds import RoleBasedD
62
62
  from ..models.M2.AUTOSARTemplates.CommonStructure.StandardizationTemplate.BlueprintDedicated.PortPrototypeBlueprint import PortPrototypeBlueprint
63
63
  from ..models.M2.AUTOSARTemplates.CommonStructure.StandardizationTemplate.Keyword import Keyword, KeywordSet
64
64
  from ..models.M2.AUTOSARTemplates.CommonStructure.Implementation import Implementation
65
- from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType
65
+ from ..models.M2.AUTOSARTemplates.CommonStructure.ImplementationDataTypes import ImplementationDataType, ImplementationDataTypeElement
66
66
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.ExecutionOrderConstraint import ExecutionOrderConstraint
67
67
  from ..models.M2.AUTOSARTemplates.CommonStructure.Timing.TimingConstraint.TimingExtensions import SwcTiming, TimingExtension
68
68
  from ..models.M2.AUTOSARTemplates.CommonStructure.TriggerDeclaration import Trigger
@@ -101,6 +101,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs i
101
101
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Composition.InstanceRefs import ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef
102
102
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
103
103
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import CompositeNetworkRepresentation, ModeSwitchedAckRequest
104
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import TransformationComSpecProps, UserDefinedTransformationComSpecProps
104
105
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import TransmissionAcknowledgementRequest
105
106
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import ClientComSpec, ModeSwitchReceiverComSpec, ModeSwitchSenderComSpec
106
107
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.Communication import NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ParameterRequireComSpec
@@ -140,6 +141,7 @@ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDe
140
141
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.ModeDeclarationGroup import ModeAccessPoint, ModeSwitchPoint
141
142
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.PortAPIOptions import PortAPIOption, PortDefinedArgumentValue
142
143
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import AsynchronousServerCallReturnsEvent, BackgroundEvent
144
+ from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataSendCompletedEvent
143
145
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import DataReceivedEvent, InitEvent, InternalTriggerOccurredEvent
144
146
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import ModeSwitchedAckEvent, OperationInvokedEvent, RTEEvent
145
147
  from ..models.M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.RTEEvents import SwcModeSwitchEvent, TimingEvent
@@ -236,6 +238,7 @@ class ARXMLParser(AbstractARXMLParser):
236
238
  def readSd(self, element: ET.Element, sdg: Sdg):
237
239
  for child_element in self.findall(element, "./SD"):
238
240
  sd = Sd()
241
+ self.readARObjectAttributes(child_element, sd)
239
242
  if 'GID' in child_element.attrib:
240
243
  sd.setGID(child_element.attrib['GID'])
241
244
  sd.setValue(child_element.text)
@@ -252,6 +255,7 @@ class ARXMLParser(AbstractARXMLParser):
252
255
 
253
256
  def getSdg(self, element: ET.Element) -> Sdg:
254
257
  sdg = Sdg()
258
+ self.readARObjectAttributes(element, sdg)
255
259
  if 'GID' in element.attrib:
256
260
  sdg.setGID(element.attrib["GID"])
257
261
  self.readSdgCaption(element, sdg)
@@ -307,8 +311,9 @@ class ARXMLParser(AbstractARXMLParser):
307
311
  if child_element is not None:
308
312
  # self.logger.debug("Read AdminData")
309
313
  admin_data = AdminData()
310
- admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE")) \
311
- .setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
314
+ self.readARObjectAttributes(child_element, admin_data)
315
+ admin_data.setLanguage(self.getChildElementOptionalLiteral(child_element, "LANGUAGE"))
316
+ admin_data.setUsedLanguages(self.getMultiLanguagePlainText(child_element, "USED-LANGUAGES"))
312
317
 
313
318
  self.readAdminDataSdgs(child_element, admin_data)
314
319
  self.readAdminDataDocRevisions(child_element, admin_data)
@@ -396,19 +401,11 @@ class ARXMLParser(AbstractARXMLParser):
396
401
  instance_ref = None
397
402
  if (child_element is not None):
398
403
  instance_ref = AutosarVariableRef()
399
- # self.readARObjectAttributes(child_element, ref)
400
- instance_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF"))) \
401
- .setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
404
+ self.readARObjectAttributes(child_element, instance_ref)
405
+ instance_ref.setAutosarVariableIRef(self.getVariableInAtomicSWCTypeInstanceRef(self.find(child_element, "AUTOSAR-VARIABLE-IREF")))
406
+ instance_ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
402
407
  return instance_ref
403
408
 
404
- def getLocalVariableRef(self, element: ET.Element, key: str) -> AutosarVariableRef:
405
- child_element = self.find(element, key)
406
- ref = None
407
- if (child_element is not None):
408
- ref = AutosarVariableRef()
409
- ref.setLocalVariableRef(self.getChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF"))
410
- return ref
411
-
412
409
  def _readVariableAccesses(self, element: ET.Element, parent: RunnableEntity, key: str):
413
410
  for child_element in self.findall(element, "%s/VARIABLE-ACCESS" % key):
414
411
  short_name = self.getShortName(child_element)
@@ -432,10 +429,10 @@ class ARXMLParser(AbstractARXMLParser):
432
429
  variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
433
430
  elif (key == "WRITTEN-LOCAL-VARIABLES"):
434
431
  variable_access = parent.createWrittenLocalVariable(short_name)
435
- variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
432
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
436
433
  elif (key == "READ-LOCAL-VARIABLES"):
437
434
  variable_access = parent.createReadLocalVariable(short_name)
438
- variable_access.setAccessedVariableRef(self.getLocalVariableRef(child_element, "ACCESSED-VARIABLE"))
435
+ variable_access.setAccessedVariableRef(self.getAutosarVariableRef(child_element, "ACCESSED-VARIABLE"))
439
436
  else:
440
437
  self.notImplemented("Unsupported Variable Accesss <%s>" % key)
441
438
 
@@ -577,6 +574,7 @@ class ARXMLParser(AbstractARXMLParser):
577
574
 
578
575
  def getRoleBasedPortAssignment(self, element: ET.Element) -> RoleBasedPortAssignment:
579
576
  assignment = RoleBasedPortAssignment()
577
+ self.readARObjectAttributes(element, assignment)
580
578
  assignment.portPrototypeRef = self.getChildElementOptionalRefType(element, "PORT-PROTOTYPE-REF")
581
579
  assignment.role = self.getChildElementOptionalLiteral(element, "ROLE")
582
580
  return assignment
@@ -1539,6 +1537,11 @@ class ARXMLParser(AbstractARXMLParser):
1539
1537
  # self.logger.debug("Read BackgroundEvent <%s>" % event.getShortName())
1540
1538
  self.readRTEEvent(element, event)
1541
1539
 
1540
+ def readDataSendCompletedEvent(self, element, event: DataSendCompletedEvent):
1541
+ # self.logger.debug("Read DataSendCompletedEvent <%s>" % event.getShortName())
1542
+ self.readRTEEvent(element, event)
1543
+ event.setEventSourceRef(self.getChildElementOptionalRefType(element, "EVENT-SOURCE-REF"))
1544
+
1542
1545
  def readSwcInternalBehaviorEvents(self, element: ET.Element, parent: SwcInternalBehavior):
1543
1546
  for child_element in self.findall(element, "EVENTS/*"):
1544
1547
  tag_name = self.getTagName(child_element)
@@ -1569,6 +1572,9 @@ class ARXMLParser(AbstractARXMLParser):
1569
1572
  elif tag_name == "BACKGROUND-EVENT":
1570
1573
  event = parent.createBackgroundEvent(self.getShortName(child_element))
1571
1574
  self.readBackgroundEvent(child_element, event)
1575
+ elif tag_name == "DATA-SEND-COMPLETED-EVENT":
1576
+ event = parent.createDataSendCompletedEvent(self.getShortName(child_element))
1577
+ self.readDataSendCompletedEvent(child_element, event)
1572
1578
  else:
1573
1579
  self.notImplemented("Unsupported SwcInternalBehavior Event <%s>" % tag_name)
1574
1580
 
@@ -1821,21 +1827,27 @@ class ARXMLParser(AbstractARXMLParser):
1821
1827
  data_type.setSwDataDefProps(self.getSwDataDefProps(element, "SW-DATA-DEF-PROPS"))
1822
1828
  self.readApplicationRecordDataTypeElements(element, data_type)
1823
1829
 
1824
- def readImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
1825
- for child_element in self.findall(element, "SUB-ELEMENTS/IMPLEMENTATION-DATA-TYPE-ELEMENT"):
1826
- type_element = parent.createImplementationDataTypeElement(self.getShortName(child_element))
1827
- self.readIdentifiable(child_element, type_element)
1828
- type_element.setArraySize(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE")) \
1829
- .setArraySizeHandling(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-HANDLING")) \
1830
- .setArraySizeSemantics(self.getChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS"))
1831
- self.readImplementationDataTypeElements(child_element, type_element)
1832
- type_element.setSwDataDefProps(self.getSwDataDefProps(child_element, "SW-DATA-DEF-PROPS"))
1830
+ def readImplementationDataTypeElement(self, element: ET.Element, impl_data_type_element: ImplementationDataTypeElement):
1831
+ self.readAutosarDataType(element, impl_data_type_element)
1832
+ impl_data_type_element.setArraySize(self.getChildElementOptionalPositiveInteger(element, "ARRAY-SIZE"))
1833
+ impl_data_type_element.setArraySizeHandling(self.getChildElementOptionalLiteral(element, "ARRAY-SIZE-HANDLING"))
1834
+ impl_data_type_element.setArraySizeSemantics(self.getChildElementOptionalLiteral(element, "ARRAY-SIZE-SEMANTICS"))
1835
+ self.readImplementationDataTypeSubElements(element, impl_data_type_element)
1836
+
1837
+ def readImplementationDataTypeSubElements(self, element: ET.Element, parent: ImplementationDataType):
1838
+ for child_element in self.findall(element, "SUB-ELEMENTS/*"):
1839
+ tag_name = self.getTagName(child_element)
1840
+ if tag_name == "IMPLEMENTATION-DATA-TYPE-ELEMENT":
1841
+ impl_data_type_element = parent.createImplementationDataTypeElement(self.getShortName(child_element))
1842
+ self.readImplementationDataTypeElement(child_element, impl_data_type_element)
1843
+ else:
1844
+ self.notImplemented("Unsupported ImplementationDataType SubElement <%s>" % tag_name)
1833
1845
 
1834
1846
  def readImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
1835
1847
  self.logger.debug("Read ImplementationDataType <%s>" % data_type.getShortName())
1836
1848
  self.readAutosarDataType(element, data_type)
1837
1849
  data_type.setDynamicArraySizeProfile(self.getChildElementOptionalLiteral(element, "DYNAMIC-ARRAY-SIZE-PROFILE"))
1838
- self.readImplementationDataTypeElements(element, data_type)
1850
+ self.readImplementationDataTypeSubElements(element, data_type)
1839
1851
  self.readImplementationDataTypeSymbolProps(element, data_type)
1840
1852
  data_type.setTypeEmitter(self.getChildElementOptionalLiteral(element, "TYPE-EMITTER"))
1841
1853
 
@@ -1872,11 +1884,13 @@ class ARXMLParser(AbstractARXMLParser):
1872
1884
  self.readARObjectAttributes(element, com_spec)
1873
1885
  for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
1874
1886
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
1875
- com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
1876
- .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
1877
- .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
1878
- .setHandleOutOfRangeStatus(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE-STATUS")) \
1879
- .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1887
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF"))
1888
+ com_spec.setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION"))
1889
+ com_spec.setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE"))
1890
+ com_spec.setHandleOutOfRangeStatus(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE-STATUS"))
1891
+ com_spec.setMaxDeltaCounterInit(self.getChildElementOptionalPositiveInteger(element, "MAX-DELTA-COUNTER-INIT"))
1892
+ com_spec.setMaxNoNewOrRepeatedData(self.getChildElementOptionalPositiveInteger(element, "MAX-NO-NEW-OR-REPEATED-DATA"))
1893
+ com_spec.setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
1880
1894
 
1881
1895
  def getSwValues(self, element: ET.Element, key: str) -> SwValues:
1882
1896
  child_element = self.find(element, key)
@@ -1948,21 +1962,21 @@ class ARXMLParser(AbstractARXMLParser):
1948
1962
  def getModeSwitchReceiverComSpec(self, element: ET.Element) -> ModeSwitchReceiverComSpec:
1949
1963
  com_spec = ModeSwitchReceiverComSpec()
1950
1964
  self.readARObjectAttributes(element, com_spec)
1951
- com_spec.setEnhancedModeApi(self.getChildElementOptionalBooleanValue(element, "ENHANCED-MODE-API")) \
1952
- .setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
1953
- .setSupportsAsynchronousModeSwitch(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH"))
1965
+ com_spec.setEnhancedModeApi(self.getChildElementOptionalBooleanValue(element, "ENHANCED-MODE-API"))
1966
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF"))
1967
+ com_spec.setSupportsAsynchronousModeSwitch(self.getChildElementOptionalBooleanValue(element, "SUPPORTS-ASYNCHRONOUS-MODE-SWITCH"))
1954
1968
  return com_spec
1955
1969
 
1956
1970
  def getNonqueuedReceiverComSpec(self, element: ET.Element) -> NonqueuedReceiverComSpec:
1957
1971
  com_spec = NonqueuedReceiverComSpec()
1958
1972
  self.readARObjectAttributes(element, com_spec)
1959
1973
  self.readReceiverComSpec(element, com_spec)
1960
- com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT")) \
1961
- .setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE")) \
1962
- .setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED")) \
1963
- .setFilter(self.getDataFilter(element, "FILTER")) \
1964
- .setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE")) \
1965
- .setInitValue(self.getInitValue(element))
1974
+ com_spec.setAliveTimeout(self.getChildElementOptionalFloatValue(element, "ALIVE-TIMEOUT"))
1975
+ com_spec.setEnableUpdated(self.getChildElementOptionalBooleanValue(element, "ENABLE-UPDATE"))
1976
+ com_spec.setHandleNeverReceived(self.getChildElementOptionalBooleanValue(element, "HANDLE-NEVER-RECEIVED"))
1977
+ com_spec.setFilter(self.getDataFilter(element, "FILTER"))
1978
+ com_spec.setHandleTimeoutType(self.getChildElementOptionalLiteral(element, "HANDLE-TIMEOUT-TYPE"))
1979
+ com_spec.setInitValue(self.getInitValue(element))
1966
1980
  return com_spec
1967
1981
 
1968
1982
  def readRequiredComSpec(self, element: ET.Element, parent: RPortPrototype):
@@ -2034,23 +2048,40 @@ class ARXMLParser(AbstractARXMLParser):
2034
2048
  self.readARObjectAttributes(element, com_spec)
2035
2049
  for child_element in self.findall(element, "COMPOSITE-NETWORK-REPRESENTATIONS/COMPOSITE-NETWORK-REPRESENTATION"):
2036
2050
  com_spec.addCompositeNetworkRepresentation(self.getCompositeNetworkRepresentation(child_element))
2037
- com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF")) \
2038
- .setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION")) \
2039
- .setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE")) \
2040
- .setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element)) \
2041
- .setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
2051
+ com_spec.setDataElementRef(self.getChildElementOptionalRefType(element, "DATA-ELEMENT-REF"))
2052
+ com_spec.setNetworkRepresentation(self.getSwDataDefProps(element, "NETWORK-REPRESENTATION"))
2053
+ com_spec.setHandleOutOfRange(self.getChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE"))
2054
+ com_spec.setTransmissionAcknowledge(self.readTransmissionAcknowledgementRequest(element))
2055
+ com_spec.setUsesEndToEndProtection(self.getChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION"))
2042
2056
 
2043
2057
  def getNonqueuedSenderComSpec(self, element: ET.Element) -> NonqueuedSenderComSpec:
2044
2058
  com_spec = NonqueuedSenderComSpec()
2045
2059
  self.readSenderComSpec(element, com_spec)
2046
2060
  com_spec.setInitValue(self.getInitValue(element))
2047
2061
  return com_spec
2062
+
2063
+ def readTransformationComSpecProps(self, element: ET.Element, props: TransformationComSpecProps):
2064
+ self.readARObjectAttributes(element, props)
2065
+
2066
+ def readUserDefinedTransformationComSpecProps(self, element: ET.Element, props: UserDefinedTransformationComSpecProps):
2067
+ self.readTransformationComSpecProps(element, props)
2068
+
2069
+ def readServerComSpecTransformationComSpecProps(self, element: ET.Element, com_spec: ServerComSpec):
2070
+ for child_element in self.findall(element, "TRANSFORMATION-COM-SPEC-PROPSS/*"):
2071
+ tag_name = self.getTagName(child_element)
2072
+ if tag_name == "USER-DEFINED-TRANSFORMATION-COM-SPEC-PROPS":
2073
+ props = UserDefinedTransformationComSpecProps()
2074
+ self.readUserDefinedTransformationComSpecProps(child_element, props)
2075
+ com_spec.addTransformationComSpecProps(props)
2076
+ else:
2077
+ self.notImplemented("Unsupported TransformationComSpecProps <%s>" % tag_name)
2048
2078
 
2049
2079
  def getServerComSpec(self, element: ET.Element) -> ServerComSpec:
2050
2080
  com_spec = ServerComSpec()
2051
2081
  self.readARObjectAttributes(element, com_spec)
2052
- com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF")) \
2053
- .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2082
+ com_spec.setOperationRef(self.getChildElementOptionalRefType(element, "OPERATION-REF"))
2083
+ com_spec.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2084
+ self.readServerComSpecTransformationComSpecProps(element, com_spec)
2054
2085
  return com_spec
2055
2086
 
2056
2087
  def getQueuedSenderComSpec(self, element: ET.Element) -> QueuedSenderComSpec:
@@ -2068,9 +2099,9 @@ class ARXMLParser(AbstractARXMLParser):
2068
2099
 
2069
2100
  def getModeSwitchSenderComSpec(self, element) -> ModeSwitchSenderComSpec:
2070
2101
  com_spec = ModeSwitchSenderComSpec()
2071
- com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF")) \
2072
- .setModeSwitchedAck(self.getModeSwitchedAckRequest(element, "MODE-SWITCHED-ACK")) \
2073
- .setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2102
+ com_spec.setModeGroupRef(self.getChildElementOptionalRefType(element, "MODE-GROUP-REF"))
2103
+ com_spec.setModeSwitchedAck(self.getModeSwitchedAckRequest(element, "MODE-SWITCHED-ACK"))
2104
+ com_spec.setQueueLength(self.getChildElementOptionalNumericalValue(element, "QUEUE-LENGTH"))
2074
2105
  return com_spec
2075
2106
 
2076
2107
  def readProvidedComSpec(self, element: ET.Element, parent: PPortPrototype):
@@ -2454,11 +2485,12 @@ class ARXMLParser(AbstractARXMLParser):
2454
2485
 
2455
2486
  def readCompuScale(self, element: ET.Element, compu_scale: CompuScale):
2456
2487
  self.readARObjectAttributes(element, compu_scale)
2457
- compu_scale.setLowerLimit(self.getChildLimitElement(element, "LOWER-LIMIT")) \
2458
- .setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
2459
- .setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC")) \
2460
- .setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL")) \
2461
- .setUpperLimit(self.getChildLimitElement(element, "UPPER-LIMIT"))
2488
+ compu_scale.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL"))
2489
+ compu_scale.setSymbol(self.getChildElementOptionalLiteral(element, "SYMBOL"))
2490
+ compu_scale.setDesc(self.getMultiLanguageOverviewParagraph(element, "DESC"))
2491
+ compu_scale.setMask(self.getChildElementOptionalPositiveInteger(element, "MASK"))
2492
+ compu_scale.setLowerLimit(self.getChildLimitElement(element, "LOWER-LIMIT"))
2493
+ compu_scale.setUpperLimit(self.getChildLimitElement(element, "UPPER-LIMIT"))
2462
2494
  self.readCompuScaleContents(element, compu_scale)
2463
2495
 
2464
2496
  def getCompuScales(self, element: ET.Element) -> CompuScales:
@@ -2520,7 +2552,7 @@ class ARXMLParser(AbstractARXMLParser):
2520
2552
  value_spec = NumericalValueSpecification()
2521
2553
  self.readValueSpecification(element, value_spec)
2522
2554
  value_spec.setShortLabel(self.getChildElementOptionalLiteral(element, "SHORT-LABEL")) \
2523
- .setValue(self.getChildElementOptionalFloatValue(element, "VALUE"))
2555
+ .setValue(self.getChildElementOptionalNumericalValue(element, "VALUE"))
2524
2556
  return value_spec
2525
2557
 
2526
2558
  def getTextValueSpecification(self, element: ET.Element) -> TextValueSpecification:
@@ -77,6 +77,6 @@ class Test_M2_AUTOSARTemplates_CommonStructure_ImplementationDataTypes:
77
77
  assert (sub_type.getShortName() == "sub_type")
78
78
  assert (isinstance(sub_type, ImplementationDataTypeElement))
79
79
 
80
- assert (len(data_type.getImplementationDataTypeElements()) == 1)
81
- sub_type2 = data_type.getImplementationDataTypeElements()[0]
80
+ assert (len(data_type.getSubElements()) == 1)
81
+ sub_type2 = data_type.getSubElements()[0]
82
82
  assert (sub_type == sub_type2)