armodel 1.8.2__py3-none-any.whl → 1.8.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- armodel/cli/format_xml_cli.py +62 -0
- armodel/cli/uuid_checker_cli.py +94 -0
- armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +4 -1
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +7 -0
- armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswInterfaces.py +7 -4
- armodel/models/M2/AUTOSARTemplates/CommonStructure/ImplementationDataTypes.py +17 -15
- armodel/models/M2/AUTOSARTemplates/CommonStructure/TriggerDeclaration.py +1 -1
- armodel/models/M2/AUTOSARTemplates/CommonStructure/__init__.py +44 -28
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +5 -5
- armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +15 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +247 -45
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/AutosarVariableRef.py +9 -6
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/DataElements.py +7 -5
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/RTEEvents.py +3 -3
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/Trigger.py +43 -2
- armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +40 -43
- armodel/models/M2/MSR/AsamHdo/ComputationMethod.py +13 -12
- armodel/models/M2/MSR/DataDictionary/DataDefProperties.py +40 -9
- armodel/models/utils/uuid_mgr.py +6 -0
- armodel/parser/abstract_arxml_parser.py +5 -1
- armodel/parser/arxml_parser.py +111 -62
- armodel/tests/test_armodel/models/test_common_structure.py +2 -2
- armodel/tests/test_armodel/parser/test_arxml_parser.py +38 -0
- armodel/tests/test_armodel/parser/test_implementation_data_type.py +247 -0
- armodel/tests/test_armodel/parser/test_rte_event.py +142 -0
- armodel/tests/test_armodel/parser/test_runnable_entity.py +135 -0
- armodel/writer/abstract_arxml_writer.py +2 -0
- armodel/writer/arxml_writer.py +106 -28
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/METADATA +19 -1
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/RECORD +34 -29
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/entry_points.txt +2 -0
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/LICENSE +0 -0
- {armodel-1.8.2.dist-info → armodel-1.8.4.dist-info}/WHEEL +0 -0
- {armodel-1.8.2.dist-info → armodel-1.8.4.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
|
-
|
|
76
|
-
self.
|
|
77
|
-
|
|
78
|
-
self.
|
|
79
|
-
self.
|
|
80
|
-
|
|
81
|
-
self.
|
|
82
|
-
|
|
83
|
-
self.
|
|
84
|
-
|
|
85
|
-
self.
|
|
86
|
-
|
|
87
|
-
self.
|
|
88
|
-
|
|
89
|
-
self.
|
|
90
|
-
|
|
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
|
-
|
|
106
|
-
self.writtenLocalVariables = {}
|
|
94
|
+
self.writtenLocalVariables: List[VariableAccess] = []
|
|
107
95
|
|
|
108
|
-
def _createVariableAccess(self, short_name, variable_accesses:
|
|
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
|
-
|
|
112
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
206
|
-
self.compuInverseValue = None
|
|
207
|
-
self.compuScaleContents = None
|
|
208
|
-
self.desc = None
|
|
209
|
-
self.lowerLimit = None
|
|
210
|
-
self.mask = None
|
|
211
|
-
self.shortLabel = None
|
|
212
|
-
self.symbol = None
|
|
213
|
-
self.upperLimit = None
|
|
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
|
-
|
|
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
|
-
|
armodel/models/utils/uuid_mgr.py
CHANGED
|
@@ -175,7 +175,7 @@ class AbstractARXMLParser:
|
|
|
175
175
|
return None
|
|
176
176
|
bool_value = Boolean()
|
|
177
177
|
bool_value.timestamp = literal.timestamp
|
|
178
|
-
bool_value.setValue(literal.
|
|
178
|
+
bool_value.setValue(literal.getText())
|
|
179
179
|
return bool_value
|
|
180
180
|
|
|
181
181
|
def _convertStringToNumberValue(self, value) -> int:
|
|
@@ -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)
|