armodel 1.5.0__py3-none-any.whl → 1.6.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 (96) hide show
  1. armodel/cli/arxml_dump_cli.py +13 -13
  2. armodel/cli/memory_section_cli.py +76 -0
  3. armodel/cli/system_signal_cli.py +74 -0
  4. armodel/data_models/sw_connector.py +3 -3
  5. armodel/lib/__init__.py +2 -1
  6. armodel/lib/system_signal.py +37 -0
  7. armodel/models/__init__.py +9 -4
  8. armodel/models/annotation.py +27 -3
  9. armodel/models/ar_object.py +18 -6
  10. armodel/models/ar_package.py +271 -127
  11. armodel/models/ar_ref.py +11 -166
  12. armodel/models/bsw_module_template.py +37 -14
  13. armodel/models/common_structure.py +91 -174
  14. armodel/models/communication.py +2 -2
  15. armodel/models/data_prototype.py +41 -6
  16. armodel/models/datatype.py +16 -74
  17. armodel/models/end_to_end_protection.py +1 -1
  18. armodel/models/fibex/can_communication.py +119 -3
  19. armodel/models/fibex/fibex_4_can/__init__.py +0 -0
  20. armodel/models/fibex/fibex_4_lin/__init__.py +0 -0
  21. armodel/models/fibex/fibex_4_multiplatform.py +81 -88
  22. armodel/models/fibex/fibex_core/__init__.py +0 -0
  23. armodel/models/fibex/fibex_core/core_communication.py +627 -0
  24. armodel/models/fibex/fibex_core/core_topology.py +180 -0
  25. armodel/models/fibex/lin_communication.py +24 -3
  26. armodel/models/general_structure.py +110 -11
  27. armodel/models/internal_behavior.py +1 -1
  28. armodel/models/m2/__init__.py +0 -0
  29. armodel/models/m2/autosar_templates/__init__.py +0 -0
  30. armodel/models/m2/autosar_templates/common_structure/__init__.py +188 -0
  31. armodel/models/m2/autosar_templates/common_structure/constants.py +0 -0
  32. armodel/models/m2/autosar_templates/common_structure/implementation.py +21 -0
  33. armodel/models/m2/autosar_templates/common_structure/implementation_data_types.py +148 -0
  34. armodel/models/m2/autosar_templates/ecuc_description_template.py +269 -0
  35. armodel/models/m2/autosar_templates/generic_structure/__init__.py +0 -0
  36. armodel/models/m2/autosar_templates/generic_structure/abstract_structure.py +69 -0
  37. armodel/models/m2/autosar_templates/sw_component_template/__init__.py +0 -0
  38. armodel/models/m2/autosar_templates/sw_component_template/communication.py +360 -0
  39. armodel/models/m2/autosar_templates/sw_component_template/components/__init__.py +246 -0
  40. armodel/models/m2/autosar_templates/sw_component_template/components/instance_refs.py +181 -0
  41. armodel/models/m2/autosar_templates/sw_component_template/composition/__init__.py +154 -0
  42. armodel/models/m2/autosar_templates/sw_component_template/composition/instance_refs.py +157 -0
  43. armodel/models/m2/autosar_templates/sw_component_template/data_type/__init__.py +0 -0
  44. armodel/models/m2/autosar_templates/sw_component_template/data_type/data_prototypes.py +104 -0
  45. armodel/models/m2/autosar_templates/sw_component_template/port_interface/__init__.py +243 -0
  46. armodel/models/m2/autosar_templates/sw_component_template/port_interface/instance_refs.py +39 -0
  47. armodel/models/m2/autosar_templates/sw_component_template/port_interface.py +236 -0
  48. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/__init__.py +203 -0
  49. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/access_count.py +13 -0
  50. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/data_elements.py +46 -0
  51. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/instance_refs_usage.py +169 -0
  52. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/mode_declaration_group.py +38 -0
  53. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/server_call.py +27 -0
  54. armodel/models/m2/autosar_templates/sw_component_template/swc_internal_behavior/trigger.py +10 -0
  55. armodel/models/m2/autosar_templates/system_template/__init__.py +321 -0
  56. armodel/models/m2/autosar_templates/system_template/data_mapping.py +88 -0
  57. armodel/models/m2/autosar_templates/system_template/instance_refs.py +48 -0
  58. armodel/models/m2/autosar_templates/system_template/network_management.py +554 -0
  59. armodel/models/m2/autosar_templates/system_template/transport_protocols.py +7 -0
  60. armodel/models/m2/msr/__init__.py +0 -0
  61. armodel/models/m2/msr/asam_hdo/__init__.py +0 -0
  62. armodel/models/m2/msr/asam_hdo/units.py +105 -0
  63. armodel/models/m2/msr/data_dictionary/__init__.py +0 -0
  64. armodel/models/m2/msr/data_dictionary/auxillary_objects.py +42 -0
  65. armodel/models/m2/msr/data_dictionary/data_def_properties.py +295 -0
  66. armodel/models/m2/msr/documentation/__init__.py +0 -0
  67. armodel/models/m2/msr/documentation/block_elements.py +18 -0
  68. armodel/models/m2_msr.py +1 -0
  69. armodel/models/multilanguage_data.py +15 -0
  70. armodel/models/per_instance_memory.py +34 -6
  71. armodel/models/port_prototype.py +2 -253
  72. armodel/models/service_needs.py +3 -1
  73. armodel/models/sw_component.py +19 -358
  74. armodel/parser/__init__.py +2 -1
  75. armodel/parser/abstract_arxml_parser.py +10 -1
  76. armodel/parser/arxml_parser.py +912 -229
  77. armodel/parser/file_parser.py +43 -0
  78. armodel/tests/test_armodel/models/test_ar_package.py +6 -3
  79. armodel/tests/test_armodel/models/test_ar_ref.py +18 -16
  80. armodel/tests/test_armodel/models/test_bsw_module_template.py +5 -5
  81. armodel/tests/test_armodel/models/test_common_structure.py +8 -7
  82. armodel/tests/test_armodel/models/test_data_dictionary.py +5 -5
  83. armodel/tests/test_armodel/models/test_data_prototype.py +2 -2
  84. armodel/tests/test_armodel/models/test_datatype.py +9 -9
  85. armodel/tests/test_armodel/models/test_port_interface.py +2 -2
  86. armodel/tests/test_armodel/parser/test_parse_bswmd.py +3 -3
  87. armodel/tests/test_armodel/parser/test_sw_components.py +3 -3
  88. armodel/writer/abstract_arxml_writer.py +5 -1
  89. armodel/writer/arxml_writer.py +870 -224
  90. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/METADATA +28 -1
  91. armodel-1.6.1.dist-info/RECORD +140 -0
  92. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/entry_points.txt +3 -1
  93. armodel-1.5.0.dist-info/RECORD +0 -91
  94. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/LICENSE +0 -0
  95. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/WHEEL +0 -0
  96. {armodel-1.5.0.dist-info → armodel-1.6.1.dist-info}/top_level.txt +0 -0
@@ -1,25 +1,33 @@
1
1
  from typing import Dict, List
2
2
 
3
- from armodel.models.fibex.can_communication import CanFrame
4
- from armodel.models.fibex.fibex_4_multiplatform import Gateway
5
-
6
- from .system_template.transport_protocols import CanTpConfig
7
- from .system_template.network_management import NmConfig
8
- from .fibex.fibex_core import DcmIPdu, ISignal, NPdu, NmPdu
3
+ from .fibex.fibex_core.core_topology import EcuInstance, CanCluster, LinCluster
4
+ from .fibex.fibex_core.core_communication import ISignalGroup, ISignalIPdu, ISignalIPduGroup, SecuredIPdu, SystemSignal, DcmIPdu, ISignal, NPdu, NmPdu, SystemSignalGroup
5
+ from .fibex.can_communication import CanFrame
6
+ from .fibex.fibex_4_multiplatform import Gateway
9
7
  from .fibex.lin_communication import LinUnconditionalFrame
10
- from .fibex.lin_topology import LinCluster
8
+
9
+ from .m2.msr.asam_hdo.units import PhysicalDimension, Unit
10
+ from .m2.msr.data_dictionary.auxillary_objects import SwAddrMethod
11
+ from .m2.autosar_templates.common_structure import ConstantSpecification
12
+ from .m2.autosar_templates.common_structure.implementation_data_types import ImplementationDataType
13
+ from .m2.autosar_templates.ecuc_description_template import EcucModuleConfigurationValues, EcucValueCollection
14
+ from .m2.autosar_templates.system_template import System
15
+ from .m2.autosar_templates.system_template.transport_protocols import CanTpConfig
16
+ from .m2.autosar_templates.system_template.network_management import NmConfig
17
+ from .m2.autosar_templates.sw_component_template.composition import CompositionSwComponentType
18
+ from .m2.autosar_templates.sw_component_template.port_interface import ClientServerInterface, ModeSwitchInterface, ParameterInterface, SenderReceiverInterface, TriggerInterface
19
+ from .m2.autosar_templates.sw_component_template.components import SwComponentType
20
+
11
21
  from .timing import SwcTiming
12
- from .data_dictionary import SwAddrMethod
13
22
  from .record_layout import SwRecordLayout
14
23
  from .end_to_end_protection import EndToEndProtectionSet
15
- from .unit import Unit
16
24
  from .general_structure import Identifiable, ARObject, Referrable, CollectableElement, SwcBswMapping
17
- from .port_interface import ModeSwitchInterface, SenderReceiverInterface, ClientServerInterface, TriggerInterface
18
- from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType
19
- from .sw_component import ServiceSwComponentType, CompositionSwComponentType, SensorActuatorSwComponentType, ComplexDeviceDriverSwComponentType
20
- from .datatype import ApplicationArrayDataType, ImplementationDataType, ApplicationDataType, DataTypeMappingSet, DataTypeMap, SwBaseType, ApplicationPrimitiveDataType, ApplicationRecordDataType
25
+
26
+ from .sw_component import EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType
27
+ from .sw_component import ServiceSwComponentType, SensorActuatorSwComponentType, ComplexDeviceDriverSwComponentType
28
+ from .datatype import ApplicationArrayDataType, ApplicationDataType, DataTypeMappingSet, DataTypeMap, SwBaseType, ApplicationPrimitiveDataType, ApplicationRecordDataType
21
29
  from .m2_msr import CompuMethod
22
- from .common_structure import ConstantSpecification, ModeDeclarationGroup
30
+ from .common_structure import ModeDeclarationGroup
23
31
  from .implementation import BswImplementation, SwcImplementation, Implementation
24
32
  from .bsw_module_template import BswModuleDescription, BswModuleEntry
25
33
  from .global_constraints import DataConstr
@@ -51,246 +59,324 @@ class ARPackage(Identifiable, CollectableElement):
51
59
  if (short_name in self._ar_packages):
52
60
  return self._ar_packages[short_name]
53
61
  return CollectableElement.getElement(self, short_name)
54
-
62
+
55
63
  def createEcuAbstractionSwComponentType(self, short_name: str) -> EcuAbstractionSwComponentType:
56
64
  if (short_name not in self.elements):
57
65
  sw_component = EcuAbstractionSwComponentType(self, short_name)
58
- self.elements[short_name] = sw_component
59
- return self.elements[short_name]
66
+ self.addElement(sw_component)
67
+ return self.getElement(short_name)
60
68
 
61
69
  def createApplicationSwComponentType(self, short_name: str) -> ApplicationSwComponentType:
62
70
  if short_name not in self.elements:
63
71
  sw_component = ApplicationSwComponentType(self, short_name)
64
- self.elements[short_name] = sw_component
65
- return self.elements[short_name]
72
+ self.addElement(sw_component)
73
+ return self.getElement(short_name)
66
74
 
67
75
  def createComplexDeviceDriverSwComponentType(self, short_name: str) -> ComplexDeviceDriverSwComponentType:
68
76
  if short_name not in self.elements:
69
77
  sw_component = ComplexDeviceDriverSwComponentType(self, short_name)
70
- self.elements[short_name] = sw_component
71
- return self.elements[short_name]
78
+ self.addElement(sw_component)
79
+ return self.getElement(short_name)
72
80
 
73
81
  def createServiceSwComponentType(self, short_name: str) -> ServiceSwComponentType:
74
82
  if (short_name not in self.elements):
75
83
  sw_component = ServiceSwComponentType(self, short_name)
76
- self.elements[short_name] = sw_component
77
- return self.elements[short_name]
84
+ self.addElement(sw_component)
85
+ return self.getElement(short_name)
78
86
 
79
87
  def createSensorActuatorSwComponentType(self, short_name: str) -> SensorActuatorSwComponentType:
80
88
  if (short_name not in self.elements):
81
89
  sw_component = SensorActuatorSwComponentType(self, short_name)
82
- self.elements[short_name] = sw_component
83
- return self.elements[short_name]
90
+ self.addElement(sw_component)
91
+ return self.getElement(short_name)
84
92
 
85
93
  def createCompositionSwComponentType(self, short_name: str) -> CompositionSwComponentType:
86
94
  if (short_name not in self.elements):
87
95
  sw_component = CompositionSwComponentType(self, short_name)
88
- self.elements[short_name] = sw_component
89
- return self.elements[short_name]
96
+ self.addElement(sw_component)
97
+ return self.getElement(short_name)
90
98
 
91
99
  def createSenderReceiverInterface(self, short_name: str) -> SenderReceiverInterface:
92
100
  if (short_name not in self.elements):
93
101
  sr_interface = SenderReceiverInterface(self, short_name)
94
- self.elements[short_name] = sr_interface
95
- return self.elements[short_name]
102
+ self.addElement(sr_interface)
103
+ return self.getElement(short_name)
104
+
105
+ def createParameterInterface(self, short_name: str) -> ParameterInterface:
106
+ if (short_name not in self.elements):
107
+ sr_interface = ParameterInterface(self, short_name)
108
+ self.addElement(sr_interface)
109
+ return self.getElement(short_name)
96
110
 
97
111
  def createClientServerInterface(self, short_name: str) -> ClientServerInterface:
98
112
  if (short_name not in self.elements):
99
- sr_interface = ClientServerInterface(self, short_name)
100
- self.elements[short_name] = sr_interface
101
- return self.elements[short_name]
113
+ cs_interface = ClientServerInterface(self, short_name)
114
+ self.addElement(cs_interface)
115
+ return self.getElement(short_name)
102
116
 
103
117
  def createApplicationPrimitiveDataType(self, short_name: str) -> ApplicationPrimitiveDataType:
104
118
  if (short_name not in self.elements):
105
119
  data_type = ApplicationPrimitiveDataType(self, short_name)
106
- self.elements[short_name] = data_type
107
- return self.elements[short_name]
120
+ self.addElement(data_type)
121
+ return self.getElement(short_name)
108
122
 
109
123
  def createApplicationRecordDataType(self, short_name: str) -> ApplicationPrimitiveDataType:
110
124
  if (short_name not in self.elements):
111
125
  data_type = ApplicationRecordDataType(self, short_name)
112
- self.elements[short_name] = data_type
113
- return self.elements[short_name]
126
+ self.addElement(data_type)
127
+ return self.getElement(short_name)
114
128
 
115
129
  def createImplementationDataType(self, short_name: str) -> ImplementationDataType:
116
130
  if (short_name not in self.elements):
117
131
  data_type = ImplementationDataType(self, short_name)
118
- self.elements[short_name] = data_type
119
- return self.elements[short_name]
132
+ self.addElement(data_type)
133
+ return self.getElement(short_name)
120
134
 
121
135
  def createSwBaseType(self, short_name: str) -> SwBaseType:
122
136
  if (short_name not in self.elements):
123
137
  base_type = SwBaseType(self, short_name)
124
- self.elements[short_name] = base_type
125
- return self.elements[short_name]
138
+ self.addElement(base_type)
139
+ return self.getElement(short_name)
126
140
 
127
141
  def createDataTypeMappingSet(self, short_name: str) -> DataTypeMappingSet:
128
142
  if (short_name not in self.elements):
129
143
  mapping_set = DataTypeMappingSet(self, short_name)
130
- self.elements[short_name] = mapping_set
131
- return self.elements[short_name]
144
+ self.addElement(mapping_set)
145
+ return self.getElement(short_name)
132
146
 
133
147
  def createCompuMethod(self, short_name: str) -> CompuMethod:
134
148
  if (short_name not in self.elements):
135
149
  compu_method = CompuMethod(self, short_name)
136
- self.elements[short_name] = compu_method
137
- return self.elements[short_name]
150
+ self.addElement(compu_method)
151
+ return self.getElement(short_name)
138
152
 
139
153
  def createBswModuleDescription(self, short_name: str) -> BswModuleDescription:
140
154
  if (short_name not in self.elements):
141
- bsw_module_description = BswModuleDescription(self, short_name)
142
- self.elements[short_name] = bsw_module_description
143
- return self.elements[short_name]
155
+ desc = BswModuleDescription(self, short_name)
156
+ self.addElement(desc)
157
+ return self.getElement(short_name)
144
158
 
145
159
  def createBswModuleEntry(self, short_name: str) -> BswModuleEntry:
146
160
  if (short_name not in self.elements):
147
161
  entry = BswModuleEntry(self, short_name)
148
- self.elements[short_name] = entry
149
- return self.elements[short_name]
162
+ self.addElement(entry)
163
+ return self.getElement(short_name)
150
164
 
151
165
  def createBswImplementation(self, short_name: str) -> BswImplementation:
152
166
  if (short_name not in self.elements):
153
- sw_component = BswImplementation(self, short_name)
154
- self.elements[short_name] = sw_component
155
- return self.elements[short_name]
167
+ impl = BswImplementation(self, short_name)
168
+ self.addElement(impl)
169
+ return self.getElement(short_name)
156
170
 
157
171
  def createSwcImplementation(self, short_name: str) -> SwcImplementation:
158
172
  if (short_name not in self.elements):
159
- sw_component = SwcImplementation(self, short_name)
160
- self.elements[short_name] = sw_component
161
- return self.elements[short_name]
173
+ impl = SwcImplementation(self, short_name)
174
+ self.addElement(impl)
175
+ return self.getElement(short_name)
162
176
 
163
177
  def createSwcBswMapping(self, short_name: str) -> SwcBswMapping:
164
178
  if (short_name not in self.elements):
165
179
  mapping = SwcBswMapping(self, short_name)
166
- self.elements[short_name] = mapping
167
- return self.elements[short_name]
180
+ self.addElement(mapping)
181
+ return self.getElement(short_name)
168
182
 
169
183
  def createConstantSpecification(self, short_name: str) -> ConstantSpecification:
170
184
  if (short_name not in self.elements):
171
185
  spec = ConstantSpecification(self, short_name)
172
- self.elements[short_name] = spec
173
- return self.elements[short_name]
186
+ self.addElement(spec)
187
+ return self.getElement(short_name)
174
188
 
175
189
  def createDataConstr(self, short_name: str) -> DataConstr:
176
190
  if (short_name not in self.elements):
177
191
  constr = DataConstr(self, short_name)
178
- self.elements[short_name] = constr
179
- return self.elements[short_name]
192
+ self.addElement(constr)
193
+ return self.getElement(short_name)
180
194
 
181
195
  def createUnit(self, short_name: str) -> Unit:
182
196
  if (short_name not in self.elements):
183
197
  unit = Unit(self, short_name)
184
- self.elements[short_name] = unit
185
- return self.elements[short_name]
198
+ self.addElement(unit)
199
+ return self.getElement(short_name)
186
200
 
187
201
  def createEndToEndProtectionSet(self, short_name: str) -> EndToEndProtectionSet:
188
202
  if (short_name not in self.elements):
189
- spec = EndToEndProtectionSet(self, short_name)
190
- self.elements[short_name] = spec
191
- return self.elements[short_name]
203
+ e2d_set = EndToEndProtectionSet(self, short_name)
204
+ self.addElement(e2d_set)
205
+ return self.getElement(short_name)
192
206
 
193
207
  def createApplicationArrayDataType(self, short_name: str) -> ApplicationArrayDataType:
194
208
  if (short_name not in self.elements):
195
209
  data_type = ApplicationArrayDataType(self, short_name)
196
- self.elements[short_name] = data_type
197
- return self.elements[short_name]
210
+ self.addElement(data_type)
211
+ return self.getElement(short_name)
198
212
 
199
213
  def createSwRecordLayout(self, short_name: str) -> SwRecordLayout:
200
214
  if (short_name not in self.elements):
201
215
  layout = SwRecordLayout(self, short_name)
202
- self.elements[short_name] = layout
203
- return self.elements[short_name]
216
+ self.addElement(layout)
217
+ return self.getElement(short_name)
204
218
 
205
219
  def createSwAddrMethod(self, short_name: str) -> SwAddrMethod:
206
220
  if (short_name not in self.elements):
207
221
  method = SwAddrMethod(self, short_name)
208
- self.elements[short_name] = method
209
- return self.elements[short_name]
222
+ self.addElement(method)
223
+ return self.getElement(short_name)
210
224
 
211
225
  def createTriggerInterface(self, short_name: str) -> TriggerInterface:
212
226
  if (short_name not in self.elements):
213
227
  trigger_interface = TriggerInterface(self, short_name)
214
- self.elements[short_name] = trigger_interface
215
- return self.elements[short_name]
228
+ self.addElement(trigger_interface)
229
+ return trigger_interface
216
230
 
217
231
  def createModeDeclarationGroup(self, short_name: str) -> ModeDeclarationGroup:
218
232
  if (short_name not in self.elements):
219
233
  group = ModeDeclarationGroup(self, short_name)
220
- self.elements[short_name] = group
221
- return self.elements[short_name]
234
+ self.addElement(group)
235
+ return self.getElement(short_name)
222
236
 
223
237
  def createModeSwitchInterface(self, short_name: str) -> ModeSwitchInterface:
224
238
  if (short_name not in self.elements):
225
239
  switch_interface = ModeSwitchInterface(self, short_name)
226
- self.elements[short_name] = switch_interface
227
- return self.elements[short_name]
240
+ self.addElement(switch_interface)
241
+ return self.getElement(short_name)
228
242
 
229
243
  def createSwcTiming(self, short_name: str) -> SwcTiming:
230
244
  if (short_name not in self.elements):
231
245
  timing = SwcTiming(self, short_name)
232
- self.elements[short_name] = timing
233
- return self.elements[short_name]
246
+ self.addElement(timing)
247
+ return self.getElement(short_name)
234
248
 
235
249
  def createLinCluster(self, short_name: str) -> LinCluster:
236
250
  if (short_name not in self.elements):
237
251
  cluster = LinCluster(self, short_name)
238
- self.elements[short_name] = cluster
239
- return self.elements[short_name]
252
+ self.addElement(cluster)
253
+ return self.getElement(short_name)
254
+
255
+ def createCanCluster(self, short_name: str) -> CanCluster:
256
+ if (short_name not in self.elements):
257
+ cluster = CanCluster(self, short_name)
258
+ self.addElement(cluster)
259
+ return self.getElement(short_name)
240
260
 
241
261
  def createLinUnconditionalFrame(self, short_name: str) -> LinUnconditionalFrame:
242
262
  if (short_name not in self.elements):
243
263
  frame = LinUnconditionalFrame(self, short_name)
244
- self.elements[short_name] = frame
245
- return self.elements[short_name]
264
+ self.addElement(frame)
265
+ return self.getElement(short_name)
246
266
 
247
267
  def createNmPdu(self, short_name: str) -> NmPdu:
248
268
  if (short_name not in self.elements):
249
- pdu = NmPdu(self, short_name)
250
- self.elements[short_name] = pdu
251
- return self.elements[short_name]
269
+ element = NmPdu(self, short_name)
270
+ self.addElement(element)
271
+ return self.getElement(short_name)
252
272
 
253
273
  def createNPdu(self, short_name: str) -> NPdu:
254
274
  if (short_name not in self.elements):
255
- pdu = NPdu(self, short_name)
256
- self.elements[short_name] = pdu
257
- return self.elements[short_name]
275
+ element = NPdu(self, short_name)
276
+ self.addElement(element)
277
+ return self.getElement(short_name)
258
278
 
259
279
  def createDcmIPdu(self, short_name: str) -> DcmIPdu:
260
280
  if (short_name not in self.elements):
261
- pdu = DcmIPdu(self, short_name)
262
- self.elements[short_name] = pdu
263
- return self.elements[short_name]
281
+ element = DcmIPdu(self, short_name)
282
+ self.addElement(element)
283
+ return self.getElement(short_name)
284
+
285
+ def createSecuredIPdu(self, short_name: str) -> SecuredIPdu:
286
+ if (short_name not in self.elements):
287
+ element = SecuredIPdu(self, short_name)
288
+ self.addElement(element)
289
+ return self.getElement(short_name)
264
290
 
265
291
  def createNmConfig(self, short_name: str) -> NmConfig:
266
292
  if (short_name not in self.elements):
267
- config = NmConfig(self, short_name)
268
- self.elements[short_name] = config
269
- return self.elements[short_name]
293
+ element = NmConfig(self, short_name)
294
+ self.addElement(element)
295
+ return self.getElement(short_name)
270
296
 
271
297
  def createCanTpConfig(self, short_name: str) -> CanTpConfig:
272
298
  if (short_name not in self.elements):
273
- config = CanTpConfig(self, short_name)
274
- self.elements[short_name] = config
275
- return self.elements[short_name]
299
+ element = CanTpConfig(self, short_name)
300
+ self.addElement(element)
301
+ return self.getElement(short_name)
276
302
 
277
303
  def createCanFrame(self, short_name: str) -> CanFrame:
278
304
  if (short_name not in self.elements):
279
- frame = CanFrame(self, short_name)
280
- self.elements[short_name] = frame
281
- return self.elements[short_name]
305
+ element = CanFrame(self, short_name)
306
+ self.addElement(element)
307
+ return self.getElement(short_name)
308
+
309
+ def createEcuInstance(self, short_name: str) -> EcuInstance:
310
+ if (short_name not in self.elements):
311
+ element = EcuInstance(self, short_name)
312
+ self.addElement(element)
313
+ return self.getElement(short_name)
282
314
 
283
315
  def createGateway(self, short_name: str) -> Gateway:
284
316
  if (short_name not in self.elements):
285
- gateway = Gateway(self, short_name)
286
- self.elements[short_name] = gateway
287
- return self.elements[short_name]
317
+ element = Gateway(self, short_name)
318
+ self.addElement(element)
319
+ return self.getElement(short_name)
288
320
 
289
321
  def createISignal(self, short_name: str) -> ISignal:
290
322
  if (short_name not in self.elements):
291
- signal = ISignal(self, short_name)
292
- self.elements[short_name] = signal
293
- return self.elements[short_name]
323
+ element = ISignal(self, short_name)
324
+ self.addElement(element)
325
+ return self.getElement(short_name)
326
+
327
+ def createSystemSignal(self, short_name: str) -> SystemSignal:
328
+ if (short_name not in self.elements):
329
+ element = SystemSignal(self, short_name)
330
+ self.addElement(element)
331
+ return self.getElement(short_name)
332
+
333
+ def createSystemSignalGroup(self, short_name: str) -> SystemSignalGroup:
334
+ if (short_name not in self.elements):
335
+ element = SystemSignalGroup(self, short_name)
336
+ self.addElement(element)
337
+ return self.getElement(short_name)
338
+
339
+ def createISignalIPdu(self, short_name: str) -> ISignalIPdu:
340
+ if (short_name not in self.elements):
341
+ element = ISignalIPdu(self, short_name)
342
+ self.addElement(element)
343
+ return self.getElement(short_name)
344
+
345
+ def createEcucValueCollection(self, short_name: str) -> EcucValueCollection:
346
+ if (short_name not in self.elements):
347
+ element = EcucValueCollection(self, short_name)
348
+ self.addElement(element)
349
+ return self.getElement(short_name)
350
+
351
+ def createEcucModuleConfigurationValues(self, short_name: str) -> EcucModuleConfigurationValues:
352
+ if (short_name not in self.elements):
353
+ element = EcucModuleConfigurationValues(self, short_name)
354
+ self.addElement(element)
355
+ return self.getElement(short_name)
356
+
357
+ def createPhysicalDimension(self, short_name: str) -> PhysicalDimension:
358
+ if (short_name not in self.elements):
359
+ element = PhysicalDimension(self, short_name)
360
+ self.addElement(element)
361
+ return self.getElement(short_name)
362
+
363
+ def createISignalGroup(self, short_name: str) -> ISignalGroup:
364
+ if (short_name not in self.elements):
365
+ element = ISignalGroup(self, short_name)
366
+ self.addElement(element)
367
+ return self.getElement(short_name)
368
+
369
+ def createISignalIPduGroup(self, short_name: str) -> ISignalIPduGroup:
370
+ if (short_name not in self.elements):
371
+ element = ISignalIPduGroup(self, short_name)
372
+ self.addElement(element)
373
+ return self.getElement(short_name)
374
+
375
+ def createSystem(self, short_name: str) -> System:
376
+ if (short_name not in self.elements):
377
+ element = System(self, short_name)
378
+ self.addElement(element)
379
+ return self.getElement(short_name)
294
380
 
295
381
  def getApplicationPrimitiveDataTypes(self) -> List[ApplicationPrimitiveDataType]:
296
382
  return list(sorted(filter(lambda a: isinstance(a, ApplicationPrimitiveDataType), self.elements.values()), key= lambda o:o.short_name))
@@ -320,13 +406,16 @@ class ARPackage(Identifiable, CollectableElement):
320
406
  return list(sorted(filter(lambda a : isinstance(a, ComplexDeviceDriverSwComponentType), self.elements.values()), key = lambda a: a.short_name))
321
407
 
322
408
  def getSenderReceiverInterfaces(self) -> List[SenderReceiverInterface]:
323
- return list(filter(lambda a : isinstance(a, SenderReceiverInterface), self.elements.values()))
409
+ return list(sorted(filter(lambda a : isinstance(a, SenderReceiverInterface), self.elements.values()), key = lambda a: a.short_name))
410
+
411
+ def getParameterInterfaces(self) -> List[ParameterInterface]:
412
+ return list(sorted(filter(lambda a : isinstance(a, ParameterInterface), self.elements.values()), key = lambda a: a.short_name))
324
413
 
325
414
  def getClientServerInterfaces(self) -> List[ClientServerInterface]:
326
- return list(filter(lambda a : isinstance(a, ClientServerInterface), self.elements.values()))
415
+ return list(sorted(filter(lambda a : isinstance(a, ClientServerInterface), self.elements.values()), key = lambda a: a.short_name))
327
416
 
328
417
  def getDataTypeMappingSets(self) -> List[DataTypeMappingSet]:
329
- return list(filter(lambda a: isinstance(a, DataTypeMappingSet), self.elements.values()))
418
+ return list(sorted(filter(lambda a : isinstance(a, DataTypeMappingSet), self.elements.values()), key = lambda a: a.short_name))
330
419
 
331
420
  def getCompuMethods(self) -> List[CompuMethod]:
332
421
  return list(filter(lambda a: isinstance(a, CompuMethod), self.elements.values()))
@@ -382,6 +471,9 @@ class ARPackage(Identifiable, CollectableElement):
382
471
  def getLinClusters(self) -> List[LinCluster]:
383
472
  return list(sorted(filter(lambda a : isinstance(a, LinCluster), self.elements.values()), key = lambda a: a.short_name))
384
473
 
474
+ def getCanClusters(self) -> List[CanCluster]:
475
+ return list(sorted(filter(lambda a : isinstance(a, CanCluster), self.elements.values()), key = lambda a: a.short_name))
476
+
385
477
  def getLinUnconditionalFrames(self) -> List[LinUnconditionalFrame]:
386
478
  return list(sorted(filter(lambda a : isinstance(a, LinUnconditionalFrame), self.elements.values()), key = lambda a: a.short_name))
387
479
 
@@ -394,6 +486,9 @@ class ARPackage(Identifiable, CollectableElement):
394
486
  def getDcmIPdus(self) -> List[DcmIPdu]:
395
487
  return list(sorted(filter(lambda a : isinstance(a, DcmIPdu), self.elements.values()), key = lambda a: a.short_name))
396
488
 
489
+ def getSecuredIPdus(self) -> List[SecuredIPdu]:
490
+ return list(sorted(filter(lambda a : isinstance(a, SecuredIPdu), self.elements.values()), key = lambda a: a.short_name))
491
+
397
492
  def getNmConfigs(self) -> List[NmConfig]:
398
493
  return list(sorted(filter(lambda a : isinstance(a, NmConfig), self.elements.values()), key = lambda a: a.short_name))
399
494
 
@@ -403,32 +498,55 @@ class ARPackage(Identifiable, CollectableElement):
403
498
  def getCanFrames(self) -> List[CanFrame]:
404
499
  return list(sorted(filter(lambda a : isinstance(a, CanFrame), self.elements.values()), key = lambda a: a.short_name))
405
500
 
501
+ def getEcuInstances(self) -> List[EcuInstance]:
502
+ return list(sorted(filter(lambda a : isinstance(a, EcuInstance), self.elements.values()), key = lambda a: a.short_name))
503
+
406
504
  def getGateways(self) -> List[Gateway]:
407
505
  return list(sorted(filter(lambda a : isinstance(a, Gateway), self.elements.values()), key = lambda a: a.short_name))
408
506
 
409
507
  def getISignals(self) -> List[ISignal]:
410
508
  return list(sorted(filter(lambda a : isinstance(a, ISignal), self.elements.values()), key = lambda a: a.short_name))
411
509
 
412
- class AUTOSAR (CollectableElement):
413
- __instance = None
414
-
415
- @staticmethod
416
- def getInstance():
417
- if (AUTOSAR.__instance == None):
418
- AUTOSAR()
419
- return AUTOSAR.__instance
420
-
510
+ def getEcucValueCollections(self) -> List[EcucValueCollection]:
511
+ return list(sorted(filter(lambda a : isinstance(a, EcucValueCollection), self.elements.values()), key = lambda a: a.short_name))
512
+
513
+ def getEcucModuleConfigurationValues(self) -> List[EcucModuleConfigurationValues]:
514
+ return list(sorted(filter(lambda a : isinstance(a, EcucModuleConfigurationValues), self.elements.values()), key = lambda a: a.short_name))
515
+
516
+ def getEcucModuleConfigurationValues(self) -> List[PhysicalDimension]:
517
+ return list(sorted(filter(lambda a : isinstance(a, PhysicalDimension), self.elements.values()), key = lambda a: a.short_name))
518
+
519
+ def getISignalGroups(self) -> List[ISignalGroup]:
520
+ return list(sorted(filter(lambda a : isinstance(a, ISignalGroup), self.elements.values()), key = lambda a: a.short_name))
521
+
522
+ def getSystemSignals(self) -> List[SystemSignal]:
523
+ return list(sorted(filter(lambda a : isinstance(a, SystemSignal), self.elements.values()), key = lambda a: a.short_name))
524
+
525
+ def getSystemSignalGroups(self) -> List[SystemSignalGroup]:
526
+ return list(sorted(filter(lambda a : isinstance(a, SystemSignalGroup), self.elements.values()), key = lambda a: a.short_name))
527
+
528
+ def getISignalIPdus(self) -> List[ISignalIPdu]:
529
+ return list(sorted(filter(lambda a : isinstance(a, ISignalIPdu), self.elements.values()), key = lambda a: a.short_name))
530
+
531
+ def getSystems(self) -> List[System]:
532
+ return list(sorted(filter(lambda a : isinstance(a, System), self.elements.values()), key = lambda a: a.short_name))
533
+
534
+ class AbstractAUTOSAR(CollectableElement):
421
535
  def __init__(self):
422
- if (AUTOSAR.__instance != None):
423
- raise Exception("The AUTOSAR is singleton!")
536
+ super().__init__()
537
+
424
538
  CollectableElement.__init__(self)
425
539
 
426
540
  self.schema_location = ""
427
541
  self._appl_impl_type_maps = {}
428
542
  self._impl_appl_type_maps = {}
429
- AUTOSAR.__instance = self
543
+
430
544
 
431
- self._ar_packages = {} # type: Dict[str, ARPackage]
545
+ self._ar_packages = {} # type: Dict[str, ARPackage]
546
+ self.short_name_mappings = {} # type: Dict[str, str]
547
+
548
+ def reload(self):
549
+ pass
432
550
 
433
551
  @property
434
552
  def full_name(self):
@@ -464,15 +582,18 @@ class AUTOSAR (CollectableElement):
464
582
  return element
465
583
  # raise ValueError("The %s of reference <%s> does not exist." % (short_name, referred_name))
466
584
  return element
585
+
586
+ def findByShortName(self, short_name: str) -> Referrable:
587
+ pass
467
588
 
468
589
  def getDataType(self, data_type: ImplementationDataType) -> ImplementationDataType:
469
590
  if (isinstance(data_type, ImplementationDataType) or isinstance(data_type, SwBaseType)):
470
591
  if (data_type.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
471
- referred_type = self.find(data_type.sw_data_def_props.implementationDataTypeRef.value)
592
+ referred_type = self.find(data_type.swDataDefProps.implementationDataTypeRef.value)
472
593
  return self.getDataType(referred_type)
473
594
  if (data_type.category == ImplementationDataType.CATEGORY_DATA_REFERENCE):
474
- if (data_type.sw_data_def_props.sw_pointer_target_props.target_category == "VALUE"):
475
- referred_type = self.find(data_type.sw_data_def_props.sw_pointer_target_props.sw_data_def_props.baseTypeRef.value)
595
+ if (data_type.swDataDefProps.swPointerTargetProps.target_category == "VALUE"):
596
+ referred_type = self.find(data_type.swDataDefProps.swPointerTargetProps.sw_data_def_props.baseTypeRef.value)
476
597
  return self.getDataType(referred_type)
477
598
  return data_type
478
599
  else:
@@ -495,3 +616,26 @@ class AUTOSAR (CollectableElement):
495
616
  raise IndexError("Invalid Implementation data type <%s>" % impl_data_type)
496
617
 
497
618
  return self.find(self._impl_appl_type_maps[impl_data_type])
619
+
620
+
621
+ class AUTOSAR (AbstractAUTOSAR):
622
+ __instance = None
623
+
624
+ @staticmethod
625
+ def getInstance():
626
+ if (AUTOSAR.__instance == None):
627
+ AUTOSAR()
628
+ return AUTOSAR.__instance
629
+
630
+ def __init__(self):
631
+ if (AUTOSAR.__instance != None):
632
+ raise Exception("The AUTOSAR is singleton!")
633
+
634
+ AUTOSAR.__instance = self
635
+
636
+ super().__init__()
637
+
638
+ class AUTOSARDoc(AbstractAUTOSAR):
639
+ def __init__(self):
640
+ super().__init__()
641
+