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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. armodel/__init__.py +2 -1
  2. armodel/cli/arxml_dump_cli.py +9 -7
  3. armodel/cli/arxml_format_cli.py +72 -0
  4. armodel/cli/connector_update_cli.py +11 -4
  5. armodel/data_models/__init__.py +0 -0
  6. armodel/data_models/sw_connector.py +22 -0
  7. armodel/lib/data_analyzer.py +1 -1
  8. armodel/models/__init__.py +3 -2
  9. armodel/models/annotation.py +20 -0
  10. armodel/models/ar_object.py +163 -18
  11. armodel/models/ar_package.py +228 -24
  12. armodel/models/ar_ref.py +85 -6
  13. armodel/models/bsw_module_template.py +113 -27
  14. armodel/models/calibration.py +107 -4
  15. armodel/models/common_structure.py +142 -52
  16. armodel/models/communication.py +10 -1
  17. armodel/models/data_def_properties.py +16 -0
  18. armodel/models/data_dictionary.py +46 -9
  19. armodel/models/data_prototype.py +24 -5
  20. armodel/models/datatype.py +69 -20
  21. armodel/models/end_to_end_protection.py +67 -0
  22. armodel/models/fibex/__init__.py +0 -0
  23. armodel/models/fibex/can_communication.py +6 -0
  24. armodel/models/fibex/fibex_4_multiplatform.py +145 -0
  25. armodel/models/fibex/fibex_core.py +341 -0
  26. armodel/models/fibex/lin_communication.py +17 -0
  27. armodel/models/fibex/lin_topology.py +7 -0
  28. armodel/models/general_structure.py +44 -18
  29. armodel/models/global_constraints.py +4 -4
  30. armodel/models/implementation.py +79 -32
  31. armodel/models/internal_behavior.py +63 -0
  32. armodel/models/m2_msr.py +6 -4
  33. armodel/models/mode_declaration.py +8 -0
  34. armodel/models/multilanguage_data.py +42 -0
  35. armodel/models/per_instance_memory.py +14 -0
  36. armodel/models/port_interface.py +27 -4
  37. armodel/models/port_prototype.py +57 -19
  38. armodel/models/record_layout.py +118 -0
  39. armodel/models/rpt_scenario.py +20 -0
  40. armodel/models/service_mapping.py +11 -0
  41. armodel/models/service_needs.py +48 -0
  42. armodel/models/sw_component.py +293 -45
  43. armodel/models/system_template/__init__.py +0 -0
  44. armodel/models/system_template/network_management.py +7 -0
  45. armodel/models/system_template/transport_protocols.py +7 -0
  46. armodel/models/timing.py +91 -0
  47. armodel/parser/abstract_arxml_parser.py +248 -0
  48. armodel/parser/arxml_parser.py +1571 -844
  49. armodel/parser/connector_xlsx_parser.py +190 -0
  50. armodel/parser/excel_parser.py +18 -0
  51. armodel/tests/test_armodel/models/test_ar_object.py +152 -0
  52. armodel/tests/test_armodel/models/test_ar_package.py +1 -1
  53. armodel/tests/test_armodel/models/test_common_structure.py +2 -2
  54. armodel/tests/test_armodel/models/test_data_dictionary.py +7 -7
  55. armodel/tests/test_armodel/models/test_data_prototype.py +3 -3
  56. armodel/tests/test_armodel/models/test_datatype.py +11 -11
  57. armodel/tests/test_armodel/models/test_general_structure.py +1 -1
  58. armodel/tests/test_armodel/models/test_implementation.py +26 -0
  59. armodel/tests/test_armodel/models/test_m2_msr.py +4 -4
  60. armodel/tests/test_armodel/models/test_port_interface.py +5 -5
  61. armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
  62. armodel/tests/test_armodel/parser/test_parse_bswmd.py +74 -42
  63. armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
  64. armodel/writer/abstract_arxml_writer.py +123 -0
  65. armodel/writer/arxml_writer.py +1701 -358
  66. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/METADATA +114 -3
  67. armodel-1.5.0.dist-info/RECORD +91 -0
  68. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/WHEEL +1 -1
  69. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/entry_points.txt +2 -0
  70. armodel-1.4.0.dist-info/RECORD +0 -60
  71. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/LICENSE +0 -0
  72. {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,16 @@
1
+ from typing import List
2
+ from .ar_object import ARFloat, ARLiteral, ARObject
3
+
4
+
5
+ class ValueList(ARObject):
6
+ def __init__(self):
7
+ super().__init__()
8
+
9
+ self.v = None # type: ARFloat
10
+ self._vf = [] # type: List[ARLiteral]
11
+
12
+ def addVf(self, vf: ARLiteral):
13
+ self._vf.append(vf)
14
+
15
+ def getVfs(self) -> List[ARLiteral]:
16
+ return sorted(self._vf)
@@ -1,17 +1,44 @@
1
- from .general_structure import ARObject
1
+ from typing import List
2
+
3
+ from .ar_object import ARFloat, ARLiteral
4
+ from .calibration import SwCalprmAxisSet
5
+ from .annotation import Annotation
6
+ from .general_structure import ARObject, Identifiable
2
7
  from .ar_ref import RefType
3
8
 
9
+
10
+
11
+ class SwDataDefPropsConditional(ARObject):
12
+ def __init__(self):
13
+ super().__init__()
14
+
4
15
  class SwDataDefProps(ARObject):
5
16
  def __init__(self):
6
17
  super().__init__()
7
18
 
8
- self.base_type_ref = None # type: RefType
9
- self.compu_method_ref = None # type: RefType
10
- self.data_constr_ref = None # type: RefType
11
- self.implementation_data_type_ref = None # type: RefType
12
- self.sw_impl_policy = ""
13
- self.sw_calibration_access = ""
14
- self.sw_pointer_target_props = None # type: SwPointerTargetProps
19
+ self._annotations = [] # type: List[Annotation]
20
+ self.baseTypeRef = None # type: RefType
21
+ self.compuMethodRef = None # type: RefType
22
+ self.dataConstrRef = None # type: RefType
23
+ self.implementationDataTypeRef = None # type: RefType
24
+ self.swImplPolicy = None # type: str
25
+ self.swCalibrationAccess = None # type: str
26
+ self.swCalprmAxisSet = None # type: SwCalprmAxisSet
27
+ self.sw_pointer_target_props = None # type: SwPointerTargetProps
28
+ self.swRecordLayoutRef = None # type: RefType
29
+ self.valueAxisDataTypeRef = None # type: RefType
30
+ self.unitRef = None # type: RefType
31
+ self.conditional = SwDataDefPropsConditional() # type: SwDataDefPropsConditional
32
+
33
+ def addAnnotation(self, annotation: Annotation):
34
+ self._annotations.append(annotation)
35
+
36
+ def getAnnotations(self) -> List[Annotation]:
37
+ return self._annotations
38
+
39
+ def setUnitRef(self, ref: RefType):
40
+ self.unitRef = ref
41
+ return self
15
42
 
16
43
  class SwPointerTargetProps(ARObject):
17
44
  def __init__(self):
@@ -19,4 +46,14 @@ class SwPointerTargetProps(ARObject):
19
46
 
20
47
  self.function_pointer_signature = None # type: RefType
21
48
  self.sw_data_def_props = None # type: SwDataDefProps
22
- self.target_category = ""
49
+ self.target_category = None
50
+
51
+ class SwAddrMethod(Identifiable):
52
+ def __init__(self, parent: ARObject, short_name: str):
53
+ super().__init__(parent, short_name)
54
+
55
+ self.memoryAllocationKeywordPolicy = None # type: MemoryAllocationKeywordPolicyType
56
+ self.option = [] # type: str
57
+ self.sectionInitializationPolicy = None # type: SectionInitializationPolicyType
58
+ self.sectionType = None # type: MemorySectionType
59
+
@@ -1,7 +1,10 @@
1
1
  from abc import ABCMeta
2
- from .general_structure import AtpFeature, Identifiable, ARObject
3
- from .data_dictionary import SwDataDefProps
2
+
3
+ from .ar_object import ARNumerical
4
4
  from .ar_ref import RefType
5
+ from .data_dictionary import SwDataDefProps
6
+ from .common_structure import ValueSpecification
7
+ from .general_structure import AtpFeature, ARObject
5
8
 
6
9
  class AtpPrototype(AtpFeature, metaclass = ABCMeta):
7
10
  def __init__(self, parent:ARObject, short_name: str):
@@ -25,25 +28,41 @@ class AutosarDataPrototype(DataPrototype, metaclass = ABCMeta):
25
28
  raise NotImplementedError("AutosarDataPrototype is an abstract class.")
26
29
 
27
30
  super().__init__(parent, short_name)
28
- self.type_tref = RefType()
31
+
32
+ self.type_tref = None
29
33
 
30
34
  class VariableDataPrototype(AutosarDataPrototype):
31
35
  def __init__(self, parent:ARObject, short_name: str):
32
36
  super().__init__(parent, short_name)
33
37
 
38
+ self.init_value = None # type: ValueSpecification
39
+
34
40
  class ApplicationCompositeElementDataPrototype(DataPrototype, metaclass = ABCMeta):
35
41
  def __init__(self, parent:ARObject, short_name: str):
36
42
  if type(self) == ApplicationCompositeElementDataPrototype:
37
43
  raise NotImplementedError("ApplicationCompositeElementDataPrototype is an abstract class.")
38
44
 
39
45
  super().__init__(parent, short_name)
40
- self.type_tref = RefType()
46
+
47
+ self.typeTRef = None # type: RefType
41
48
 
42
49
  class ApplicationArrayElement(ApplicationCompositeElementDataPrototype):
43
50
  def __init__(self, parent:ARObject, short_name: str):
44
51
  super().__init__(parent, short_name)
45
52
 
53
+ self.arraySizeHandling = None # type: str
54
+ self.arraySizeSemantics = None # type: str
55
+ self.indexDataTypeRef = None # type: RefType
56
+ self.maxNumberOfElements = None # type: ARNumerical
57
+
46
58
  class ApplicationRecordElement(ApplicationCompositeElementDataPrototype):
47
59
  def __init__(self, parent:ARObject, short_name: str):
48
60
  super().__init__(parent, short_name)
49
- self.is_optional = None
61
+
62
+ self.isOptional = None
63
+
64
+ class ParameterDataPrototype(AutosarDataPrototype):
65
+ def __init__(self, parent: ARObject, short_name: str):
66
+ super().__init__(parent, short_name)
67
+
68
+ self.init_value = None # type: ValueSpecification
@@ -1,12 +1,13 @@
1
1
  from abc import ABCMeta
2
2
  from typing import List
3
3
 
4
+ from .ar_object import ARLiteral, ARNumerical
5
+ from .ar_ref import RefType
4
6
  from .ar_package import Referrable
5
- from .general_structure import ARElement, ARObject
6
- from .data_prototype import ApplicationRecordElement
7
+ from .general_structure import ARElement, ARObject, Identifiable
8
+ from .data_prototype import ApplicationCompositeElementDataPrototype, ApplicationRecordElement
7
9
  from .data_dictionary import SwDataDefProps
8
- from .common_structure import ImplementationDataTypeElement
9
-
10
+ from .common_structure import ImplementationDataTypeElement, ModeRequestTypeMap
10
11
 
11
12
  class ImplementationProps(Referrable, metaclass=ABCMeta):
12
13
  def __init__(self, parent: ARObject, short_name: str):
@@ -29,9 +30,9 @@ class BaseTypeDirectDefinition(BaseTypeDefinition):
29
30
  super().__init__()
30
31
 
31
32
  self.base_type_encoding = None
32
- self.base_type_size = None # type: int
33
- self.byte_order = None # type: str
34
- self.mem_alignment = None
33
+ self.base_type_size = None # type: ARNumerical
34
+ self.byteOrder = None # type: str
35
+ self.mem_alignment = None # type: ARNumerical
35
36
  self.native_declaration = None
36
37
 
37
38
  class BaseType(ARElement, metaclass=ABCMeta):
@@ -41,7 +42,7 @@ class BaseType(ARElement, metaclass=ABCMeta):
41
42
 
42
43
  super().__init__(parent, short_name)
43
44
 
44
- self.base_type_definition = BaseTypeDirectDefinition()
45
+ self.baseTypeDefinition = BaseTypeDirectDefinition()
45
46
 
46
47
  class SwBaseType(BaseType):
47
48
  def __init__(self, parent: ARObject, short_name: str):
@@ -84,15 +85,45 @@ class ApplicationCompositeDataType(ApplicationDataType, metaclass=ABCMeta):
84
85
 
85
86
  super().__init__(parent, short_name)
86
87
 
88
+ class ApplicationArrayElement(ApplicationCompositeElementDataPrototype):
89
+ def __init__(self, parent: ARObject, short_name: str):
90
+ super().__init__(parent, short_name)
91
+
92
+ self.arraySizeHandling = None # type: str
93
+ self.arraySizeSemantics = None # type: str
94
+ self.indexDataTypeRef = None # type: RefType
95
+ self.maxNumberOfElements = None # type: ARNumerical
96
+
97
+ def setArraySizeHandling(self, handling: str):
98
+ self.arraySizeHandling = handling
99
+ return self
100
+
101
+ def setArraySizeSemantics(self, semantics: str):
102
+ self.arraySizeSemantics = semantics
103
+ return self
104
+
105
+ def setIndexDataTypeRef(self, ref: RefType):
106
+ self.indexDataTypeRef = ref
107
+ return self
108
+
109
+ def setMaxNumberOfElements(self, number: ARNumerical):
110
+ self.maxNumberOfElements = number
111
+ return self
87
112
 
88
113
  class ApplicationArrayDataType(ApplicationCompositeDataType):
89
114
  def __init__(self, parent: ARObject, short_name: str):
90
115
  super().__init__(parent, short_name)
91
116
 
92
- self.dynamic_array_size_profile = ""
93
- self.element = None
94
-
117
+ self.dynamic_array_size_profile = None # type: ARLiteral
118
+ self.element = None # type: ApplicationArrayElement
95
119
 
120
+ def createApplicationArrayElement(self, short_name: str) -> ApplicationArrayElement:
121
+ if (short_name not in self.elements):
122
+ array_element = ApplicationArrayElement(self, short_name)
123
+ self.elements[short_name] = array_element
124
+ self.element = self.elements[short_name]
125
+ return self.elements[short_name]
126
+
96
127
  class ApplicationRecordDataType(ApplicationCompositeDataType):
97
128
  def __init__(self, parent: ARObject, short_name: str):
98
129
  super().__init__(parent, short_name)
@@ -126,9 +157,10 @@ class ImplementationDataType(AbstractImplementationDataType):
126
157
 
127
158
  def __init__(self, parent: ARObject, short_name: str):
128
159
  super().__init__(parent, short_name)
129
- self.sub_elements = [] # List(str)
130
- self.symbol_props = None # SymbolProps
131
- self.type_emitter = None
160
+
161
+ self.sub_elements = [] # type: List[str]
162
+ self.symbol_props = None # type: ARLiteral
163
+ self._type_emitter = None # type: ARLiteral
132
164
 
133
165
  self._array_type = None # ImplementationDataType
134
166
 
@@ -152,21 +184,38 @@ class ImplementationDataType(AbstractImplementationDataType):
152
184
 
153
185
  def setArrayElementType(self, type: str):
154
186
  self._array_type = type
187
+ return self
188
+
189
+ def setTypeEmitter(self, emitter: str):
190
+ self._type_emitter = emitter
191
+ return self
192
+
193
+ def getTypeEmitter(self) -> str:
194
+ return self._type_emitter
155
195
 
156
196
 
157
197
  class DataTypeMap(ARObject):
158
198
  def __init__(self):
159
- self.application_data_type_ref = None # type: RefType
160
- self.implementation_data_type_ref = None # type: RefType
161
-
199
+ self.application_data_type_ref = None # type: RefType
200
+ self.implementation_data_type_ref = None # type: RefType
162
201
 
163
202
  class DataTypeMappingSet(ARElement):
164
203
  def __init__(self, parent: ARObject, short_name: str):
165
204
  super().__init__(parent, short_name)
166
- self.data_type_maps = [] # type: List[DataTypeMap]
205
+
206
+ self._dataTypeMaps = [] # type: List[DataTypeMap]
207
+ self._modeRequestTypeMaps = [] # type: List[ModeRequestTypeMap]
167
208
 
168
209
  def addDataTypeMap(self, type_map: DataTypeMap):
169
- self.data_type_maps.append(type_map)
210
+ self._dataTypeMaps.append(type_map)
170
211
 
171
212
  def getDataTypeMaps(self) -> List[DataTypeMap]:
172
- return self.data_type_maps
213
+ return self._dataTypeMaps
214
+
215
+ def addModeRequestTypeMap(self, map: ModeRequestTypeMap):
216
+ self._modeRequestTypeMaps.append(map)
217
+
218
+ def getModeRequestTypeMaps(self) -> List[ModeRequestTypeMap]:
219
+ return self._modeRequestTypeMaps
220
+
221
+
@@ -0,0 +1,67 @@
1
+ from typing import List
2
+
3
+ from .ar_ref import VariableDataPrototypeInSystemInstanceRef
4
+ from .ar_object import ARNumerical, ARObject
5
+ from .general_structure import Identifiable
6
+
7
+
8
+ class EndToEndDescription(ARObject):
9
+ def __init__(self):
10
+ super().__init__()
11
+
12
+ self.category = None # type: str
13
+ self.counterOffset = None # type: int
14
+ self.crcOffset = None # type: int
15
+ self.dataIds = [] # type: List[ARNumerical]
16
+ self.dataIdMode = None # type: int
17
+ self.dataIdNibbleOffset = None # type: int
18
+ self.dataLength = None # type: int
19
+ self.maxDeltaCounterInit = None # type: int
20
+ self.maxNoNewOrRepeatedData = None # type: int
21
+ self.syncCounterInit = None # type: int
22
+
23
+ def addDataId(self, id: ARNumerical):
24
+ self.dataIds.append(id)
25
+
26
+ def getDataIds(self) -> List[ARNumerical]:
27
+ return sorted(self.dataIds, key = lambda a: a)
28
+
29
+ class EndToEndProtectionVariablePrototype(ARObject):
30
+ def __init__(self):
31
+ super().__init__()
32
+
33
+ self._receiverIRefs = [] # type: List[VariableDataPrototypeInSystemInstanceRef]
34
+ self.senderIRef = None # type: VariableDataPrototypeInSystemInstanceRef
35
+ self.shortLabel = None # type: str
36
+
37
+ def addReceiverIref(self, iref: VariableDataPrototypeInSystemInstanceRef):
38
+ self._receiverIRefs.append(iref)
39
+
40
+ def getReceiverIrefs(self) -> List[VariableDataPrototypeInSystemInstanceRef]:
41
+ return self._receiverIRefs
42
+
43
+ class EndToEndProtection(Identifiable):
44
+ def __init__(self, parent: ARObject, short_name: str):
45
+ super().__init__(parent, short_name)
46
+
47
+ self.endToEndProfile = None # type: EndToEndDescription
48
+ self.endToEndProtectionVariablePrototype = [] # type: List[EndToEndProtectionVariablePrototype]
49
+
50
+ def addEndToEndProtectionVariablePrototype(self, prototype: EndToEndProtectionVariablePrototype):
51
+ self.endToEndProtectionVariablePrototype.append(prototype)
52
+
53
+ def getEndToEndProtectionVariablePrototypes(self) -> List[EndToEndProtectionVariablePrototype]:
54
+ return self.endToEndProtectionVariablePrototype
55
+
56
+ class EndToEndProtectionSet(Identifiable):
57
+ def __init__(self, parent: ARObject, short_name: str):
58
+ super().__init__(parent, short_name)
59
+
60
+ def createEndToEndProtection(self, short_name: str) -> EndToEndProtection:
61
+ if (short_name not in self.elements):
62
+ protection = EndToEndProtection(self, short_name)
63
+ self.elements[short_name] = protection
64
+ return self.elements[short_name]
65
+
66
+ def getEndToEndProtections(self) -> List[EndToEndProtection]:
67
+ return sorted(filter(lambda c: isinstance(c, EndToEndProtection), self.elements.values()), key= lambda e: e.short_name)
File without changes
@@ -0,0 +1,6 @@
1
+ from ..ar_object import ARObject
2
+ from .fibex_core import Frame
3
+
4
+ class CanFrame(Frame):
5
+ def __init__(self, parent: ARObject, short_name: str):
6
+ super().__init__(parent, short_name)
@@ -0,0 +1,145 @@
1
+ from typing import List
2
+
3
+ from ..ar_ref import RefType
4
+ from ..ar_object import ARObject, ARPositiveInteger
5
+ from .fibex_core import FibexElement
6
+
7
+ class FrameMapping(ARObject):
8
+ def __init__(self):
9
+ super().__init__()
10
+
11
+ self._introduction = None # type: DocumentationBlock
12
+ self._source_frame_ref = None # type: RefType
13
+ self._target_frame_ref = None # type: RefType
14
+
15
+ @property
16
+ def introduction(self):
17
+ return self._introduction
18
+
19
+ @introduction.setter
20
+ def introduction(self, value):
21
+ self._introduction = value
22
+
23
+ @property
24
+ def sourceFrameRef(self):
25
+ return self._source_frame_ref
26
+
27
+ @sourceFrameRef.setter
28
+ def sourceFrameRef(self, value):
29
+ self._source_frame_ref = value
30
+
31
+ @property
32
+ def targetFrameRef(self):
33
+ return self._target_frame_ref
34
+
35
+ @targetFrameRef.setter
36
+ def targetFrameRef(self, value):
37
+ self._target_frame_ref = value
38
+
39
+ class ISignalMapping(ARObject):
40
+ def __init__(self):
41
+ super().__init__()
42
+
43
+ self._introduction = None # type: DocumentationBlock
44
+ self._source_signal_ref = None # type: RefType
45
+ self._target_signal_ref = None # type: RefType
46
+
47
+ @property
48
+ def introduction(self):
49
+ return self._introduction
50
+
51
+ @introduction.setter
52
+ def introduction(self, value):
53
+ self._introduction = value
54
+
55
+ @property
56
+ def sourceSignalRef(self):
57
+ return self._source_signal_ref
58
+
59
+ @sourceSignalRef.setter
60
+ def sourceSignalRef(self, value):
61
+ self._source_signal_ref = value
62
+
63
+ @property
64
+ def targetSignalRef(self):
65
+ return self._target_signal_ref
66
+
67
+ @targetSignalRef.setter
68
+ def targetSignalRef(self, value):
69
+ self._target_signal_ref = value
70
+
71
+ class IPduMapping(ARObject):
72
+ def __init__(self):
73
+ super().__init__()
74
+
75
+ self._introduction = None # type: DocumentationBlock
76
+ self._pdur_tp_chunk_size = None # type: ARPositiveInteger
77
+ self._source_ipdu_ref = None # type: RefType
78
+ self._target_ipdu_ref = None # type: RefType
79
+
80
+ @property
81
+ def introduction(self):
82
+ return self._introduction
83
+
84
+ @introduction.setter
85
+ def introduction(self, value):
86
+ self._introduction = value
87
+
88
+ @property
89
+ def pdurTpChunkSize(self):
90
+ return self._pdur_tp_chunk_size
91
+
92
+ @pdurTpChunkSize.setter
93
+ def pdurTpChunkSize(self, value):
94
+ self._pdur_tp_chunk_size = value
95
+
96
+ @property
97
+ def sourceIPduRef(self):
98
+ return self._source_ipdu_ref
99
+
100
+ @sourceIPduRef.setter
101
+ def sourceIPduRef(self, value):
102
+ self._source_ipdu_ref = value
103
+
104
+ @property
105
+ def targetIPduRef(self):
106
+ return self._target_ipdu_ref
107
+
108
+ @targetIPduRef.setter
109
+ def targetIPduRef(self, value):
110
+ self._target_ipdu_ref = value
111
+
112
+ class Gateway(FibexElement):
113
+ def __init__(self, parent: ARObject, short_name: str):
114
+ super().__init__(parent, short_name)
115
+
116
+ self._ecu_ref = None # type: RefType
117
+ self._frame_mappings = [] # type: List[FrameMapping]
118
+ self._i_pdu_mappings = [] # type: List[IPduMapping]
119
+ self._signal_mappings = [] # type: List[ISignalMapping]
120
+
121
+ @property
122
+ def ecuRef(self) -> RefType:
123
+ return self._ecu_ref
124
+
125
+ @ecuRef.setter
126
+ def ecuRef(self, value: RefType):
127
+ self._ecu_ref = value
128
+
129
+ def getFrameMappings(self) -> List[FrameMapping]:
130
+ return self._frame_mappings
131
+
132
+ def addFrameMapping(self, mapping: FrameMapping):
133
+ self._frame_mappings.append(mapping)
134
+
135
+ def getIPduMappings(self) -> List[FrameMapping]:
136
+ return self._i_pdu_mappings
137
+
138
+ def addIPduMappings(self, mapping: FrameMapping):
139
+ self._i_pdu_mappings.append(mapping)
140
+
141
+ def getSignalMappings(self) -> List[FrameMapping]:
142
+ return self._signal_mappings
143
+
144
+ def addSignalMapping(self, mapping: FrameMapping):
145
+ self._signal_mappings.append(mapping)