armodel 1.6.4__py3-none-any.whl → 1.7.1__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 (43) hide show
  1. armodel/cli/arxml_format_cli.py +14 -11
  2. armodel/models/M2/AUTOSARTemplates/AutosarTopLevelStructure.py +50 -13
  3. armodel/models/M2/AUTOSARTemplates/BswModuleTemplate/BswBehavior.py +1 -1
  4. armodel/models/M2/AUTOSARTemplates/CommonStructure/Filter.py +86 -0
  5. armodel/models/M2/AUTOSARTemplates/CommonStructure/InternalBehavior.py +3 -4
  6. armodel/models/M2/AUTOSARTemplates/ECUCDescriptionTemplate.py +1 -1
  7. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/ARPackage.py +95 -13
  8. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/Identifiable.py +14 -4
  9. armodel/models/M2/AUTOSARTemplates/GenericStructure/GeneralTemplateClasses/PrimitiveTypes.py +103 -10
  10. armodel/models/M2/AUTOSARTemplates/GenericStructure/LifeCycles.py +5 -0
  11. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/Communication.py +21 -8
  12. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/ModeDeclarationGroup.py +24 -0
  13. armodel/models/M2/AUTOSARTemplates/SWComponentTemplate/SwcInternalBehavior/__init__.py +1 -1
  14. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Can/CanTopology.py +173 -0
  15. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/Fibex4Multiplatform.py +1 -1
  16. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreCommunication.py +6 -6
  17. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/CoreTopology.py +237 -28
  18. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/EcuInstance.py +223 -0
  19. armodel/models/M2/AUTOSARTemplates/SystemTemplate/Fibex/FibexCore/Timing.py +177 -0
  20. armodel/models/M2/AUTOSARTemplates/SystemTemplate/InstanceRefs.py +37 -0
  21. armodel/models/M2/AUTOSARTemplates/SystemTemplate/__init__.py +88 -16
  22. armodel/models/M2/MSR/AsamHdo/AdminData.py +34 -8
  23. armodel/models/M2/MSR/Documentation/Annotation.py +1 -1
  24. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/ListElements.py +54 -0
  25. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/PaginationAndView.py +9 -0
  26. armodel/models/M2/MSR/Documentation/TextModel/BlockElements/__init__.py +25 -0
  27. armodel/models/M2/MSR/Documentation/TextModel/LanguageDataModel.py +33 -5
  28. armodel/models/M2/MSR/Documentation/TextModel/MultilanguageData.py +15 -2
  29. armodel/models/M2/MSR/Documentation/__init__.py +1 -1
  30. armodel/models/__init__.py +15 -2
  31. armodel/parser/abstract_arxml_parser.py +55 -18
  32. armodel/parser/arxml_parser.py +344 -101
  33. armodel/tests/test_armodel/models/test_ar_ref.py +7 -4
  34. armodel/tests/test_armodel/parser/test_sw_components.py +6 -19
  35. armodel/tests/test_armodel/parser/test_system.py +2 -2
  36. armodel/writer/abstract_arxml_writer.py +17 -8
  37. armodel/writer/arxml_writer.py +291 -78
  38. {armodel-1.6.4.dist-info → armodel-1.7.1.dist-info}/METADATA +23 -1
  39. {armodel-1.6.4.dist-info → armodel-1.7.1.dist-info}/RECORD +43 -35
  40. {armodel-1.6.4.dist-info → armodel-1.7.1.dist-info}/LICENSE +0 -0
  41. {armodel-1.6.4.dist-info → armodel-1.7.1.dist-info}/WHEEL +0 -0
  42. {armodel-1.6.4.dist-info → armodel-1.7.1.dist-info}/entry_points.txt +0 -0
  43. {armodel-1.6.4.dist-info → armodel-1.7.1.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,27 @@
1
1
  from abc import ABCMeta
2
2
  from typing import List
3
+ from ....M2.MSR.DataDictionary.DataDefProperties import SwDataDefProps
4
+ from ....M2.AUTOSARTemplates.CommonStructure import ValueSpecification
5
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import AREnum, ARLiteral, ARNumerical, ARPositiveInteger
7
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
8
+ from ....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
9
+ from ....M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
10
+
11
+ class HandleInvalidEnum(AREnum):
12
+ DONT_INVALIDATE = "dontInvalidate"
13
+ EXTERNAL_REPLACEMENT = "externalReplacement"
14
+ KEEP = "keep"
15
+ REPLACE = "replace"
3
16
 
4
- from armodel.models.M2.AUTOSARTemplates.SWComponentTemplate.PortInterface.InstanceRefs import ApplicationCompositeElementInPortInterfaceInstanceRef
5
-
6
- from ..GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, ARPositiveInteger
8
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARBoolean
9
- from ..GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
10
- from ...MSR.DataDictionary.DataDefProperties import SwDataDefProps
11
- from ..CommonStructure import ValueSpecification
17
+ def __init__(self):
18
+ super().__init__((
19
+ HandleInvalidEnum.DONT_INVALIDATE,
20
+ HandleInvalidEnum.EXTERNAL_REPLACEMENT,
21
+ HandleInvalidEnum.KEEP,
22
+ HandleInvalidEnum.REPLACE
23
+ ))
24
+
12
25
 
13
26
  class PPortComSpec(ARObject, metaclass = ABCMeta):
14
27
  """
@@ -1,3 +1,5 @@
1
+ from armodel.models.M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, RefType
2
+ from typing import List
1
3
  from .....M2.AUTOSARTemplates.SWComponentTemplate.RPTScenario import ModeAccessPointIdent
2
4
  from .....M2.AUTOSARTemplates.SWComponentTemplate.Components.InstanceRefs import PModeGroupInAtomicSwcInstanceRef, RModeGroupInAtomicSWCInstanceRef
3
5
  from .....M2.AUTOSARTemplates.SWComponentTemplate.SwcInternalBehavior.AccessCount import AbstractAccessPoint
@@ -36,3 +38,25 @@ class ModeSwitchPoint(AbstractAccessPoint):
36
38
  def setModeGroupIRef(self, value):
37
39
  self.modeGroupIRef = value
38
40
  return self
41
+
42
+
43
+ class IncludedModeDeclarationGroupSet(ARObject):
44
+ def __init__(self):
45
+ super().__init__()
46
+
47
+ self.mode_declaration_group_refs = [] # type: List[RefType]
48
+ self.prefix = None # type: ARLiteral
49
+
50
+ def addModeDeclarationGroupRef(self, ref: RefType):
51
+ self.mode_declaration_group_refs.append(ref)
52
+ return self
53
+
54
+ def getModeDeclarationGroupRefs(self) -> List[RefType]:
55
+ return self.mode_declaration_group_refs
56
+
57
+ def setPrefix(self, prefix: str):
58
+ self.prefix = prefix
59
+ return self
60
+
61
+ def getPrefix(self) -> ARLiteral:
62
+ return self.prefix
@@ -176,7 +176,7 @@ class RunnableEntity(ExecutableEntity):
176
176
  if (short_name not in self.elements):
177
177
  point = InternalTriggeringPoint(self, short_name)
178
178
  self.elements[point.short_name] = point
179
- return self.elements[point.short_name]
179
+ return self.elements[short_name]
180
180
 
181
181
  def getInternalTriggeringPoints(self) -> List[InternalTriggeringPoint]:
182
182
  return filter(lambda o: isinstance(o, InternalTriggeringPoint), self.elements)
@@ -0,0 +1,173 @@
1
+ from abc import ABCMeta
2
+
3
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import Boolean, Float, Integer, PositiveInteger, PositiveUnlimitedInteger
4
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
+ from ......M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreTopology import CommunicationConnector, CommunicationController
6
+
7
+ class AbstractCanCommunicationControllerAttributes(ARObject, metaclass = ABCMeta):
8
+ def __init__(self):
9
+ super().__init__()
10
+
11
+ self.canControllerFdAttributes = None # type: CanControllerFdConfiguration
12
+ self.canControllerFdRequirements = None # type: CanControllerFdConfigurationRequirements
13
+ self.canControllerXlAttributes = None # type: CanControllerXlConfiguration
14
+ self.canControllerXlRequirements = None # type: CanControllerXlConfigurationRequirements
15
+
16
+ def getCanControllerFdAttributes(self):
17
+ return self.canControllerFdAttributes
18
+
19
+ def setCanControllerFdAttributes(self, value):
20
+ self.canControllerFdAttributes = value
21
+ return self
22
+
23
+ def getCanControllerFdRequirements(self):
24
+ return self.canControllerFdRequirements
25
+
26
+ def setCanControllerFdRequirements(self, value):
27
+ self.canControllerFdRequirements = value
28
+ return self
29
+
30
+ def getCanControllerXlAttributes(self):
31
+ return self.canControllerXlAttributes
32
+
33
+ def setCanControllerXlAttributes(self, value):
34
+ self.canControllerXlAttributes = value
35
+ return self
36
+
37
+ def getCanControllerXlRequirements(self):
38
+ return self.canControllerXlRequirements
39
+
40
+ def setCanControllerXlRequirements(self, value):
41
+ self.canControllerXlRequirements = value
42
+ return self
43
+
44
+ class CanControllerConfigurationRequirements(AbstractCanCommunicationControllerAttributes):
45
+ def __init__(self):
46
+ super().__init__()
47
+
48
+ self.maxNumberOfTimeQuantaPerBit = None # type: Integer
49
+ self.maxSamplePoint = None # type: Float
50
+ self.maxSyncJumpWidth = None # type: Float
51
+ self.minNumberOfTimeQuantaPerBit = None # type: Integer
52
+ self.minSamplePoint = None # type: Float
53
+ self.minSyncJumpWidth = None # type: Float
54
+
55
+ def getMaxNumberOfTimeQuantaPerBit(self):
56
+ return self.maxNumberOfTimeQuantaPerBit
57
+
58
+ def setMaxNumberOfTimeQuantaPerBit(self, value):
59
+ self.maxNumberOfTimeQuantaPerBit = value
60
+ return self
61
+
62
+ def getMaxSamplePoint(self):
63
+ return self.maxSamplePoint
64
+
65
+ def setMaxSamplePoint(self, value):
66
+ self.maxSamplePoint = value
67
+ return self
68
+
69
+ def getMaxSyncJumpWidth(self):
70
+ return self.maxSyncJumpWidth
71
+
72
+ def setMaxSyncJumpWidth(self, value):
73
+ self.maxSyncJumpWidth = value
74
+ return self
75
+
76
+ def getMinNumberOfTimeQuantaPerBit(self):
77
+ return self.minNumberOfTimeQuantaPerBit
78
+
79
+ def setMinNumberOfTimeQuantaPerBit(self, value):
80
+ self.minNumberOfTimeQuantaPerBit = value
81
+ return self
82
+
83
+ def getMinSamplePoint(self):
84
+ return self.minSamplePoint
85
+
86
+ def setMinSamplePoint(self, value):
87
+ self.minSamplePoint = value
88
+ return self
89
+
90
+ def getMinSyncJumpWidth(self):
91
+ return self.minSyncJumpWidth
92
+
93
+ def setMinSyncJumpWidth(self, value):
94
+ self.minSyncJumpWidth = value
95
+ return self
96
+
97
+
98
+
99
+ class AbstractCanCommunicationController(CommunicationController, metaclass = ABCMeta):
100
+ def __init__(self, parent: ARObject, short_name: str):
101
+ if type(self) == AbstractCanCommunicationController:
102
+ raise NotImplementedError("AbstractCanCommunicationController is an abstract class.")
103
+
104
+ super().__init__(parent, short_name)
105
+
106
+ self.canControllerAttributes = None # type: AbstractCanCommunicationControllerAttributes
107
+
108
+ def getCanControllerAttributes(self):
109
+ return self.canControllerAttributes
110
+
111
+ def setCanControllerAttributes(self, value):
112
+ self.canControllerAttributes = value
113
+ return self
114
+
115
+ class CanCommunicationController(AbstractCanCommunicationController):
116
+ def __init__(self, parent: ARObject, short_name: str):
117
+ super().__init__(parent, short_name)
118
+
119
+ class AbstractCanCommunicationConnector(CommunicationConnector, metaclass = ABCMeta):
120
+ def __init__(self, parent: ARObject, short_name: str):
121
+ if type(self) == AbstractCanCommunicationConnector:
122
+ raise NotImplementedError("AbstractCanCommunicationConnector is an abstract class.")
123
+
124
+ super().__init__(parent, short_name)
125
+
126
+ class CanCommunicationConnector(AbstractCanCommunicationConnector):
127
+ def __init__(self, parent: ARObject, short_name: str):
128
+ super().__init__(parent, short_name)
129
+
130
+ # type: PositiveInteger
131
+ self.pncWakeupCanId = None
132
+ self.pncWakeupCanIdExtended = None # type: Boolean
133
+ # type: PositiveInteger
134
+ self.pncWakeupCanIdMask = None
135
+ # type: PositiveUnlimitedInteger
136
+ self.pncWakeupDataMask = None
137
+ # type: PositiveInteger
138
+ self.pncWakeupDlc = None
139
+
140
+ def getPncWakeupCanId(self):
141
+ return self.pncWakeupCanId
142
+
143
+ def setPncWakeupCanId(self, value):
144
+ self.pncWakeupCanId = value
145
+ return self
146
+
147
+ def getPncWakeupCanIdExtended(self):
148
+ return self.pncWakeupCanIdExtended
149
+
150
+ def setPncWakeupCanIdExtended(self, value):
151
+ self.pncWakeupCanIdExtended = value
152
+ return self
153
+
154
+ def getPncWakeupCanIdMask(self):
155
+ return self.pncWakeupCanIdMask
156
+
157
+ def setPncWakeupCanIdMask(self, value):
158
+ self.pncWakeupCanIdMask = value
159
+ return self
160
+
161
+ def getPncWakeupDataMask(self):
162
+ return self.pncWakeupDataMask
163
+
164
+ def setPncWakeupDataMask(self, value):
165
+ self.pncWakeupDataMask = value
166
+ return self
167
+
168
+ def getPncWakeupDlc(self):
169
+ return self.pncWakeupDlc
170
+
171
+ def setPncWakeupDlc(self, value):
172
+ self.pncWakeupDlc = value
173
+ return self
@@ -1,6 +1,6 @@
1
1
  from typing import List
2
2
 
3
- from .....M2.MSR.Documentation.BlockElements import DocumentationBlock
3
+ from ....MSR.Documentation.TextModel.BlockElements import DocumentationBlock
4
4
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
5
5
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import RefType
6
6
  from .....M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARPositiveInteger
@@ -1,9 +1,11 @@
1
1
  from abc import ABCMeta
2
2
  from typing import List
3
3
 
4
- from ....GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable, Describable
5
- from ....GenericStructure.GeneralTemplateClasses.ArObject import ARObject
6
- from ....GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, ARPositiveInteger, RefType, ARBoolean
4
+ from armodel.models.M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.Timing import TransmissionModeDeclaration
5
+
6
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import ARElement, Identifiable, Describable
7
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
8
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARLiteral, ARNumerical, ARPositiveInteger, RefType, ARBoolean, TimeValue
7
9
 
8
10
  class FibexElement(Identifiable, metaclass = ABCMeta):
9
11
  def __init__(self, parent: ARObject, short_name: str):
@@ -279,14 +281,12 @@ class DcmIPdu(IPdu):
279
281
  self.diagPduType = value
280
282
  return self
281
283
 
282
-
283
284
  class IPduTiming(Describable):
284
285
  def __init__(self):
285
286
  super().__init__()
286
287
 
287
288
  self.minimumDelay = None # type: TimeValue
288
- # type: TransmissionModeDeclaration
289
- self.transmissionModeDeclaration = None
289
+ self.transmissionModeDeclaration = None # type: TransmissionModeDeclaration
290
290
 
291
291
  def getMinimumDelay(self):
292
292
  return self.minimumDelay
@@ -1,10 +1,13 @@
1
1
  from abc import ABCMeta
2
+ from enum import Enum
2
3
  from typing import List
4
+
5
+ from ......M2.AUTOSARTemplates.SWComponentTemplate.Communication import HandleInvalidEnum
3
6
  from ......M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Can.CanCommunication import CanFrameTriggering
4
7
  from ......M2.AUTOSARTemplates.SystemTemplate.Fibex.Fibex4Lin.LinCommunication import LinFrameTriggering
5
8
  from ......M2.AUTOSARTemplates.SystemTemplate.Fibex.FibexCore.CoreCommunication import FibexElement, FrameTriggering, ISignalTriggering, PduTriggering
6
9
  from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.ArObject import ARObject
7
- from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, RefType, ARLiteral
10
+ from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.PrimitiveTypes import ARFloat, Boolean, PositiveInteger, RefType, ARLiteral, TimeValue
8
11
  from ......M2.AUTOSARTemplates.GenericStructure.GeneralTemplateClasses.Identifiable import Identifiable
9
12
 
10
13
  class PhysicalChannel (Identifiable, metaclass = ABCMeta):
@@ -25,29 +28,28 @@ class PhysicalChannel (Identifiable, metaclass = ABCMeta):
25
28
  return self
26
29
 
27
30
  def getFrameTriggerings(self) -> List[FrameTriggering]:
28
- return list(sorted(filter(lambda a: isinstance(a, FrameTriggering), self.elements.values()), key= lambda o:o.short_name))
31
+ return list(sorted(filter(lambda a: isinstance(a, FrameTriggering), self.elements.values()), key= lambda o:o.getShortName()))
29
32
 
30
33
  def createCanFrameTriggering(self, short_name: str):
31
34
  if (short_name not in self.elements):
32
- channel = CanFrameTriggering(self, short_name)
33
- self.elements[short_name] = channel
34
- return self.elements[short_name]
35
+ triggering = CanFrameTriggering(self, short_name)
36
+ self.addElement(triggering)
37
+ return self.getElement(short_name)
35
38
 
36
39
  def createLinFrameTriggering(self, short_name: str):
37
40
  if (short_name not in self.elements):
38
- channel = LinFrameTriggering(self, short_name)
39
- self.elements[short_name] = channel
40
- return self.elements[short_name]
41
+ triggering = LinFrameTriggering(self, short_name)
42
+ self.addElement(triggering)
43
+ return self.getElement(short_name)
41
44
 
42
45
  def getISignalTriggerings(self) -> List[ISignalTriggering]:
43
- return list(sorted(filter(lambda a: isinstance(a, ISignalTriggering), self.elements.values()), key= lambda o:o.short_name))
46
+ return list(sorted(filter(lambda a: isinstance(a, ISignalTriggering), self.elements.values()), key= lambda o:o.getShortName()))
44
47
 
45
48
  def createISignalTriggering(self, short_name: str):
46
49
  if (short_name not in self.elements):
47
- channel = ISignalTriggering(self, short_name)
48
- self.elements[short_name] = channel
49
- return self.elements[short_name]
50
-
50
+ triggering = ISignalTriggering(self, short_name)
51
+ self.addElement(triggering)
52
+ return self.getElement(short_name)
51
53
 
52
54
  def getManagedPhysicalChannelRefs(self):
53
55
  return self.managedPhysicalChannelRefs
@@ -57,13 +59,13 @@ class PhysicalChannel (Identifiable, metaclass = ABCMeta):
57
59
  return self
58
60
 
59
61
  def getPduTriggerings(self) -> List[PduTriggering]:
60
- return list(sorted(filter(lambda a: isinstance(a, PduTriggering), self.elements.values()), key= lambda o:o.short_name))
62
+ return list(sorted(filter(lambda a: isinstance(a, PduTriggering), self.elements.values()), key= lambda o:o.getShortName()))
61
63
 
62
64
  def createPduTriggering(self, short_name: str):
63
65
  if (short_name not in self.elements):
64
- channel = PduTriggering(self, short_name)
65
- self.elements[short_name] = channel
66
- return self.elements[short_name]
66
+ triggering = PduTriggering(self, short_name)
67
+ self.addElement(triggering)
68
+ return self.getElement(short_name)
67
69
 
68
70
  class AbstractCanPhysicalChannel(PhysicalChannel, metaclass = ABCMeta):
69
71
  def __init__(self, parent, short_name):
@@ -99,25 +101,25 @@ class CommunicationCluster(FibexElement, metaclass = ABCMeta):
99
101
  return self
100
102
 
101
103
  def getPhysicalChannels(self) -> List[PhysicalChannel]:
102
- return list(sorted(filter(lambda a: isinstance(a, PhysicalChannel), self.elements.values()), key= lambda o:o.short_name))
104
+ return list(sorted(filter(lambda a: isinstance(a, PhysicalChannel), self.elements.values()), key= lambda o:o.getShortName()))
103
105
 
104
106
  def getCanPhysicalChannels(self) -> List[CanPhysicalChannel]:
105
- return list(sorted(filter(lambda a: isinstance(a, CanPhysicalChannel), self.elements.values()), key= lambda o:o.short_name))
107
+ return list(sorted(filter(lambda a: isinstance(a, CanPhysicalChannel), self.elements.values()), key= lambda o:o.getShortName()))
106
108
 
107
109
  def getLinPhysicalChannels(self) -> List[LinPhysicalChannel]:
108
- return list(sorted(filter(lambda a: isinstance(a, LinPhysicalChannel), self.elements.values()), key= lambda o:o.short_name))
110
+ return list(sorted(filter(lambda a: isinstance(a, LinPhysicalChannel), self.elements.values()), key= lambda o:o.getShortName()))
109
111
 
110
112
  def createCanPhysicalChannel(self, short_name: str):
111
113
  if (short_name not in self.elements):
112
114
  channel = CanPhysicalChannel(self, short_name)
113
- self.elements[short_name] = channel
114
- return self.elements[short_name]
115
+ self.addElement(channel)
116
+ return self.getElement(short_name)
115
117
 
116
118
  def createLinPhysicalChannel(self, short_name: str):
117
119
  if (short_name not in self.elements):
118
120
  channel = LinPhysicalChannel(self, short_name)
119
- self.elements[short_name] = channel
120
- return self.elements[short_name]
121
+ self.addElement(channel)
122
+ return self.getElement(short_name)
121
123
 
122
124
  def getProtocolName(self):
123
125
  return self.protocolName
@@ -143,6 +145,7 @@ class AbstractCanCluster(CommunicationCluster, metaclass = ABCMeta):
143
145
  self.busOffRecovery = None
144
146
  self.canFdBaudrate = None
145
147
  self.canXlBaudrate = None
148
+ self.speed = None
146
149
 
147
150
  def getBusOffRecovery(self):
148
151
  return self.busOffRecovery
@@ -165,6 +168,12 @@ class AbstractCanCluster(CommunicationCluster, metaclass = ABCMeta):
165
168
  self.canXlBaudrate = value
166
169
  return self
167
170
 
171
+ def getSpeed(self):
172
+ return self.speed
173
+
174
+ def setSpeed(self, value):
175
+ self.speed = value
176
+ return self
168
177
 
169
178
  class CanCluster(AbstractCanCluster):
170
179
  def __init__(self, parent: ARObject, short_name: str):
@@ -172,8 +181,208 @@ class CanCluster(AbstractCanCluster):
172
181
 
173
182
  class LinCluster(CommunicationCluster):
174
183
  def __init__(self, parent: ARObject, short_name: str):
175
- super().__init__(parent, short_name)
184
+ super().__init__(parent, short_name)
185
+
186
+ class CommunicationController(Identifiable, metaclass = ABCMeta):
187
+ def __init__(self, parent: ARObject, short_name: str):
188
+ if type(self) == CommunicationController:
189
+ raise NotImplementedError("CommunicationController is an abstract class.")
190
+
191
+ super().__init__(parent, short_name)
176
192
 
177
- class EcuInstance(FibexElement):
178
- def __init__(self, parent, short_name):
179
- super().__init__(parent, short_name)
193
+ self.wakeUpByControllerSupported = None # type: Boolean
194
+
195
+ def getWakeUpByControllerSupported(self):
196
+ return self.wakeUpByControllerSupported
197
+
198
+ def setWakeUpByControllerSupported(self, value):
199
+ self.wakeUpByControllerSupported = value
200
+ return self
201
+
202
+ class PncGatewayTypeEnum(Enum):
203
+ ENUM_ACTIVE = "active"
204
+ ENUM_NONE = "none"
205
+ ENUM_PASSIVE = "passive"
206
+
207
+ class CommunicationDirectionType(Enum):
208
+ ENUM_IN = "in"
209
+ ENUM_OUT = "out"
210
+
211
+ class CommConnectorPort(Identifiable, metaclass = ABCMeta):
212
+ def __init__(self, parent: ARObject, short_name: str):
213
+ if type(self) == CommConnectorPort:
214
+ raise NotImplementedError("CommConnectorPort is an abstract class.")
215
+
216
+ super().__init__(parent, short_name)
217
+
218
+ # type: CommunicationDirectionType
219
+ self.communicationDirection = None
220
+
221
+ def getCommunicationDirection(self) -> CommunicationDirectionType:
222
+ return self.communicationDirection
223
+
224
+ def setCommunicationDirection(self, value: CommunicationDirectionType):
225
+ self.communicationDirection = value
226
+ return self
227
+
228
+
229
+ class FramePort(CommConnectorPort):
230
+ def __init__(self, parent: ARObject, short_name: str):
231
+ super().__init__(parent, short_name)
232
+
233
+ class IPduSignalProcessingEnum(Enum):
234
+ ENUM_DEFERRED = "deferred"
235
+ ENUM_IMMEDIATE = "immediate"
236
+
237
+ class IPduPort(CommConnectorPort):
238
+ def __init__(self, parent: ARObject, short_name: str):
239
+ super().__init__(parent, short_name)
240
+
241
+ # type: IPduSignalProcessingEnum
242
+ self.iPduSignalProcessing = None
243
+ self.rxSecurityVerification = None # type: Boolean
244
+ self.timestampRxAcceptanceWindow = None # type: TimeValue
245
+ self.useAuthDataFreshness = None # type: Boolean
246
+
247
+ def getIPduSignalProcessing(self):
248
+ return self.iPduSignalProcessing
249
+
250
+ def setIPduSignalProcessing(self, value):
251
+ self.iPduSignalProcessing = value
252
+ return self
253
+
254
+ def getRxSecurityVerification(self):
255
+ return self.rxSecurityVerification
256
+
257
+ def setRxSecurityVerification(self, value):
258
+ self.rxSecurityVerification = value
259
+ return self
260
+
261
+ def getTimestampRxAcceptanceWindow(self):
262
+ return self.timestampRxAcceptanceWindow
263
+
264
+ def setTimestampRxAcceptanceWindow(self, value):
265
+ self.timestampRxAcceptanceWindow = value
266
+ return self
267
+
268
+ def getUseAuthDataFreshness(self):
269
+ return self.useAuthDataFreshness
270
+
271
+ def setUseAuthDataFreshness(self, value):
272
+ self.useAuthDataFreshness = value
273
+ return self
274
+
275
+ class ISignalPort(CommConnectorPort):
276
+ def __init__(self, parent: ARObject, short_name: str):
277
+ super().__init__(parent, short_name)
278
+
279
+ # type: DataFilter
280
+ self.dataFilter = None
281
+ self.ddsQosProfileRef = None # type: RefType
282
+ # type: TimeValue
283
+ self.firstTimeout = None
284
+ # type: HandleInvalidEnum
285
+ self.handleInvalid = None
286
+
287
+ def getDataFilter(self):
288
+ return self.dataFilter
289
+
290
+ def setDataFilter(self, value):
291
+ self.dataFilter = value
292
+ return self
293
+
294
+ def getDdsQosProfileRef(self):
295
+ return self.ddsQosProfileRef
296
+
297
+ def setDdsQosProfileRef(self, value):
298
+ self.ddsQosProfileRef = value
299
+ return self
300
+
301
+ def getFirstTimeout(self):
302
+ return self.firstTimeout
303
+
304
+ def setFirstTimeout(self, value):
305
+ self.firstTimeout = value
306
+ return self
307
+
308
+ def getHandleInvalid(self):
309
+ return self.handleInvalid
310
+
311
+ def setHandleInvalid(self, value):
312
+ self.handleInvalid = value
313
+ return self
314
+
315
+ class CommunicationConnector(Identifiable, metaclass = ABCMeta):
316
+ def __init__(self, parent: ARObject, short_name: str):
317
+ if type(self) == CommunicationConnector:
318
+ raise NotImplementedError("CommunicationConnector is an abstract class.")
319
+
320
+ super().__init__(parent, short_name)
321
+
322
+ self.commControllerRef = None # type: RefType
323
+ self.createEcuWakeupSource = None # type: Boolean
324
+ self.dynamicPncToChannelMappingEnabled = None # type: Boolean
325
+ self.ecuCommPortInstances = [] # type: List[CommConnectorPort]
326
+ self.pncFilterArrayMasks = [] # type: List[PositiveInteger]
327
+ self.pncGatewayType = None # type: PncGatewayTypeEnum
328
+
329
+ def getCommControllerRef(self):
330
+ return self.commControllerRef
331
+
332
+ def setCommControllerRef(self, value):
333
+ self.commControllerRef = value
334
+ return self
335
+
336
+ def getCreateEcuWakeupSource(self):
337
+ return self.createEcuWakeupSource
338
+
339
+ def setCreateEcuWakeupSource(self, value):
340
+ self.createEcuWakeupSource = value
341
+ return self
342
+
343
+ def getDynamicPncToChannelMappingEnabled(self):
344
+ return self.dynamicPncToChannelMappingEnabled
345
+
346
+ def setDynamicPncToChannelMappingEnabled(self, value):
347
+ self.dynamicPncToChannelMappingEnabled = value
348
+ return self
349
+
350
+ def getEcuCommPortInstances(self):
351
+ return list(sorted(filter(lambda a: isinstance(a, CommConnectorPort), self.elements.values()), key= lambda o:o.getShortName()))
352
+
353
+ def createFramePort(self, short_name) -> FramePort:
354
+ if short_name not in self.elements:
355
+ port = FramePort(self, short_name)
356
+ self.addElement(port)
357
+ self.ecuCommPortInstances.append(port)
358
+ return self.getElement(short_name)
359
+
360
+ def createIPduPort(self, short_name) -> IPduPort:
361
+ if short_name not in self.elements:
362
+ port = IPduPort(self, short_name)
363
+ self.addElement(port)
364
+ self.ecuCommPortInstances.append(port)
365
+ return self.getElement(short_name)
366
+
367
+ def createISignalPort(self, short_name) -> ISignalPort:
368
+ if short_name not in self.elements:
369
+ port = ISignalPort(self, short_name)
370
+ self.addElement(port)
371
+ self.ecuCommPortInstances.append(port)
372
+ return self.getElement(short_name)
373
+
374
+ def getPncFilterArrayMasks(self):
375
+ return self.pncFilterArrayMasks
376
+
377
+ def addPncFilterArrayMask(self, value):
378
+ self.pncFilterArrayMasks.append(value)
379
+ return self
380
+
381
+ def getPncGatewayType(self):
382
+ return self.pncGatewayType
383
+
384
+ def setPncGatewayType(self, value):
385
+ self.pncGatewayType = value
386
+ return self
387
+
388
+