py-eb-model 1.1.0__py3-none-any.whl → 1.1.2__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.
@@ -16,7 +16,7 @@ def main():
16
16
  ap.add_argument("-v", "--verbose", required= False, help = "print debug information.", action = "store_true")
17
17
  ap.add_argument("--file-list", required=False, help = "generate the file list (Default)", action = "store_true")
18
18
  ap.add_argument("--ab-project", required=False, help = "generate the AUTOSAR builder project", action = "store_true")
19
- ap.add_argument("--base-path", required=False, help="base Path for EB tresos")
19
+ ap.add_argument("--base-path", required=True, help="base Path for EB tresos")
20
20
  ap.add_argument("--env", required=False, help="specify the environment variable", nargs='+')
21
21
  ap.add_argument("--project", required=False, help="specify the project name")
22
22
  ap.add_argument("INPUTS", nargs='+', help = "The path of perf_imp_xxx.xdm.")
@@ -60,6 +60,11 @@ def main():
60
60
  try:
61
61
  doc = PreferenceModel.getInstance()
62
62
 
63
+ params = {}
64
+ params['base_path'] = args.base_path
65
+ params['wildcard'] = True
66
+ params['project'] = args.project
67
+
63
68
  parser = PerfXdmParser()
64
69
  for file in args.INPUTS:
65
70
  if args.base_path is not None:
@@ -68,10 +73,7 @@ def main():
68
73
  file_name = file
69
74
  parser.parse_preference_xdm(file_name, doc)
70
75
 
71
- params = {}
72
- params['base_path'] = args.base_path
73
- params['wildcard'] = True
74
- params['project'] = args.project
76
+ parser.add_ecu_extract(doc, params)
75
77
 
76
78
  if args.env is not None:
77
79
  for env in args.env:
@@ -80,4 +80,60 @@ class EcucRefType:
80
80
  m = re.match(r'\/[\w\/]+\/(\w+)', self.value)
81
81
  if m:
82
82
  return m.group(1)
83
- return self.value
83
+ return self.value
84
+
85
+ class Version:
86
+ def __init__(self):
87
+ self.majorVersion = None
88
+ self.minorVersion = None
89
+ self.patchVersion = None
90
+
91
+ def getMajorVersion(self):
92
+ return self.majorVersion
93
+
94
+ def setMajorVersion(self, value):
95
+ if value is not None:
96
+ self.majorVersion = value
97
+ return self
98
+
99
+ def getMinorVersion(self):
100
+ return self.minorVersion
101
+
102
+ def setMinorVersion(self, value):
103
+ if value is not None:
104
+ self.minorVersion = value
105
+ return self
106
+
107
+ def getPatchVersion(self):
108
+ return self.patchVersion
109
+
110
+ def setPatchVersion(self, value):
111
+ if value is not None:
112
+ self.patchVersion = value
113
+ return self
114
+
115
+ def getVersion(self) -> str:
116
+ return "%d.%d.%d" % (self.majorVersion, self.minorVersion, self.patchVersion)
117
+
118
+ class Module(EcucContainer):
119
+ def __init__(self, parent, name):
120
+ super().__init__(parent, name)
121
+
122
+ self.arVersion = Version()
123
+ self.swVersion = Version()
124
+
125
+ def getArVersion(self):
126
+ return self.arVersion
127
+
128
+ def setArVersion(self, value):
129
+ if value is not None:
130
+ self.arVersion = value
131
+ return self
132
+
133
+ def getSwVersion(self):
134
+ return self.swVersion
135
+
136
+ def setSwVersion(self, value):
137
+ if value is not None:
138
+ self.swVersion = value
139
+ return self
@@ -18,6 +18,7 @@ class SystemDescriptionImporter(EcucObject):
18
18
  return self.inputFiles
19
19
 
20
20
  def addInputFile(self, value: str):
21
+ self.logger.debug("Add the file <%s>" % value)
21
22
  self.inputFiles.append(value)
22
23
  return self
23
24
 
eb_model/models/os_xdm.py CHANGED
@@ -1,7 +1,6 @@
1
1
  from typing import List
2
2
 
3
- from ..models.abstract import EcucContainer, EcucObject, EcucRefType
4
-
3
+ from ..models.abstract import EcucContainer, EcucObject, EcucRefType, Module
5
4
 
6
5
  class OsAlarmAction(EcucContainer):
7
6
  def __init__(self, parent, name) -> None:
@@ -933,7 +932,7 @@ class OsScheduleTable(EcucContainer):
933
932
  return self
934
933
 
935
934
 
936
- class Os(EcucContainer):
935
+ class Os(Module):
937
936
  def __init__(self, parent) -> None:
938
937
  super().__init__(parent, "Os")
939
938
 
@@ -1,6 +1,6 @@
1
+ from abc import ABCMeta
1
2
  from typing import Dict, List
2
- from .abstract import EcucContainer, EcucRefType
3
-
3
+ from ..models.abstract import EcucContainer, EcucRefType, Module
4
4
  class RteEventToIsrMapping(EcucContainer):
5
5
  def __init__(self, parent, name) -> None:
6
6
  super().__init__(parent, name)
@@ -11,8 +11,11 @@ class RteEventToIsrMapping(EcucContainer):
11
11
  self.RteRipsFillRoutineRef = None
12
12
  self.RteRipsFlushRoutineRef = None
13
13
 
14
- class AbstractEventToTaskMapping(EcucContainer):
14
+ class AbstractEventToTaskMapping(EcucContainer, metaclass = ABCMeta):
15
15
  def __init__(self, parent, name) -> None:
16
+ if type(self) == AbstractEventToTaskMapping:
17
+ raise ValueError("RteEventToTaskMapping is an abstract class.")
18
+
16
19
  super().__init__(parent, name)
17
20
 
18
21
  self.rtePositionInTask = None
@@ -24,8 +27,11 @@ class AbstractEventToTaskMapping(EcucContainer):
24
27
  self.rtePositionInTask = value
25
28
  return self
26
29
 
27
- class RteEventToTaskMapping(AbstractEventToTaskMapping):
30
+ class RteEventToTaskMapping(AbstractEventToTaskMapping, metaclass = ABCMeta):
28
31
  def __init__(self, parent, name) -> None:
32
+ if type(self) == RteEventToTaskMapping:
33
+ raise ValueError("RteEventToTaskMapping is an abstract class.")
34
+
29
35
  super().__init__(parent, name)
30
36
 
31
37
  self.rteActivationOffset = None
@@ -35,7 +41,7 @@ class RteEventToTaskMapping(AbstractEventToTaskMapping):
35
41
  self.rteServerNumberOfRequestProcessing = None
36
42
  self.rteServerQueueLength = None
37
43
  self.rteEventPredecessorSyncPointRef = None
38
- self.rteEventRef = None
44
+
39
45
  self.rteEventSuccessorSyncPointRef = None
40
46
  self.rteMappedToTaskRef = None
41
47
  self.rtePeriod = None
@@ -100,13 +106,6 @@ class RteEventToTaskMapping(AbstractEventToTaskMapping):
100
106
  self.rteEventPredecessorSyncPointRef = value
101
107
  return self
102
108
 
103
- def getRteEventRef(self) -> EcucRefType:
104
- return self.rteEventRef
105
-
106
- def setRteEventRef(self, value: EcucRefType):
107
- self.rteEventRef = value
108
- return self
109
-
110
109
  def getRteEventSuccessorSyncPointRef(self):
111
110
  return self.rteEventSuccessorSyncPointRef
112
111
 
@@ -182,7 +181,43 @@ class RteEventToTaskMapping(AbstractEventToTaskMapping):
182
181
 
183
182
  def setRteVirtuallyMappedToTaskRef(self, value):
184
183
  self.rteVirtuallyMappedToTaskRef = value
185
- return self
184
+ return self
185
+
186
+ # abstract method
187
+ def getRteEventRef(self) -> EcucRefType:
188
+ pass
189
+
190
+ class RteEventToTaskMappingV3(RteEventToTaskMapping):
191
+ def __init__(self, parent, name):
192
+ super().__init__(parent, name)
193
+
194
+ self.rteEventRef = None
195
+
196
+ def getRteEventRef(self) -> EcucRefType:
197
+ return self.rteEventRef
198
+
199
+ def setRteEventRef(self, value: EcucRefType):
200
+ self.rteEventRef = value
201
+ return self
202
+
203
+ class RteEventToTaskMappingV4(RteEventToTaskMapping):
204
+ def __init__(self, parent, name):
205
+ super().__init__(parent, name)
206
+
207
+ self.rteEventRefs = []
208
+
209
+ def getRteEventRefs(self):
210
+ return self.rteEventRefs
211
+
212
+ def addRteEventRef(self, value):
213
+ if value is not None:
214
+ self.rteEventRefs.append(value)
215
+ return self
216
+
217
+ def getRteEventRef(self):
218
+ if len(self.rteEventRefs) != 1:
219
+ raise ValueError("Unsupported RteEventRef of RteEventToTaskMapping <%s> " % self.name)
220
+ return self.rteEventRefs[0]
186
221
 
187
222
  class RteBswEventToTaskMapping(AbstractEventToTaskMapping):
188
223
  def __init__(self, parent, name) -> None:
@@ -196,7 +231,7 @@ class RteBswEventToTaskMapping(AbstractEventToTaskMapping):
196
231
  self.rteBswServerQueueLength = None
197
232
  self.rteOsSchedulePoint = None
198
233
  self.rteBswEventPredecessorSyncPointRef = None
199
- self.rteBswEventRef = None
234
+
200
235
  self.rteBswMappedToTaskRef = None
201
236
  self.rteBswUsedOsAlarmRef = None
202
237
  self.rteBswUsedOsEventRef = None
@@ -263,13 +298,6 @@ class RteBswEventToTaskMapping(AbstractEventToTaskMapping):
263
298
  self.rteBswEventPredecessorSyncPointRef = value
264
299
  return self
265
300
 
266
- def getRteBswEventRef(self) -> EcucRefType:
267
- return self.rteBswEventRef
268
-
269
- def setRteBswEventRef(self, value: EcucRefType):
270
- self.rteBswEventRef = value
271
- return self
272
-
273
301
  def getRteBswMappedToTaskRef(self) -> EcucRefType:
274
302
  return self.rteBswMappedToTaskRef
275
303
 
@@ -312,6 +340,37 @@ class RteBswEventToTaskMapping(AbstractEventToTaskMapping):
312
340
  self.rteRipsFlushRoutineRef = value
313
341
  return self
314
342
 
343
+ class RteBswEventToTaskMappingV3(RteBswEventToTaskMapping):
344
+ def __init__(self, parent, name):
345
+ super().__init__(parent, name)
346
+
347
+ self.rteBswEventRef = None # type: EcucRefType
348
+
349
+ def getRteBswEventRef(self):
350
+ return self.rteBswEventRef
351
+
352
+ def setRteBswEventRef(self, value):
353
+ if value is not None:
354
+ self.rteBswEventRef = value
355
+ return self
356
+
357
+ class RteBswEventToTaskMappingV4(RteBswEventToTaskMapping):
358
+ def __init__(self, parent, name):
359
+ super().__init__(parent, name)
360
+
361
+ self.rteBswEventRefs = [] # type: List[EcucRefType]
362
+
363
+ def getRteBswEventRefs(self) -> EcucRefType:
364
+ return self.rteBswEventRefs
365
+
366
+ def addRteBswEventRef(self, value: EcucRefType):
367
+ self.rteBswEventRefs.append(value)
368
+ return self
369
+
370
+ def getRteBswEventRef(self):
371
+ if len(self.rteBswEventRefs) != 1:
372
+ raise ValueError("Unsupported RteEventRef of RteEventToTaskMapping <%s> " % self.name)
373
+ return self.rteBswEventRefs[0]
315
374
 
316
375
  class AbstractRteInstance(EcucContainer):
317
376
  def __init__(self, parent, name) -> None:
@@ -503,8 +562,8 @@ class RteBswModuleInstance(AbstractRteInstance):
503
562
  def setRteMappedToOsApplicationRef(self, value):
504
563
  self.rteMappedToOsApplicationRef = value
505
564
  return self
506
-
507
- class Rte(EcucContainer):
565
+
566
+ class Rte(Module):
508
567
  def __init__(self, parent) -> None:
509
568
  super().__init__(parent, "Rte")
510
569
 
@@ -6,7 +6,7 @@ from abc import ABCMeta
6
6
  from typing import List
7
7
 
8
8
  from ..models.eb_doc import EBModel, PreferenceModel
9
- from ..models.abstract import EcucRefType
9
+ from ..models.abstract import EcucRefType, Module
10
10
 
11
11
  class AbstractEbModelParser(metaclass = ABCMeta):
12
12
 
@@ -17,10 +17,23 @@ class AbstractEbModelParser(metaclass = ABCMeta):
17
17
 
18
18
  if type(self) == "AbstractEBModelParser":
19
19
  raise ValueError("Abstract EBModelParser cannot be initialized.")
20
-
20
+
21
21
  def validate_root(self, element: ET.Element):
22
22
  if (element.tag != "{%s}%s" % (self.nsmap[''], "datamodel")):
23
23
  raise ValueError("This document <%s> is not EB xdm format" % element.tag)
24
+
25
+ def read_version(self, parent: ET.Element, module: Module):
26
+ ctr_tag = self.find_ctr_tag(parent, "CommonPublishedInformation")
27
+ if ctr_tag is not None:
28
+ ar_version = module.getArVersion()
29
+ ar_version.setMajorVersion(self.read_value(ctr_tag, "ArMajorVersion"))
30
+ ar_version.setMinorVersion(self.read_value(ctr_tag, "ArMinorVersion"))
31
+ ar_version.setPatchVersion(self.read_value(ctr_tag, "ArPatchVersion"))
32
+
33
+ sw_version = module.getSwVersion()
34
+ sw_version.setMajorVersion(self.read_value(ctr_tag, "SwMajorVersion"))
35
+ sw_version.setMinorVersion(self.read_value(ctr_tag, "SwMinorVersion"))
36
+ sw_version.setPatchVersion(self.read_value(ctr_tag, "SwPatchVersion"))
24
37
 
25
38
  def read_ref_raw_value(self, value):
26
39
  '''
@@ -32,7 +45,7 @@ class AbstractEbModelParser(metaclass = ABCMeta):
32
45
  return match.group(1)
33
46
  return value
34
47
 
35
- def _convert_value(self, tag):
48
+ def _convert_value(self, tag: ET.Element):
36
49
  if 'type' in tag.attrib:
37
50
  if (tag.attrib['type'] == 'INTEGER'):
38
51
  return int(tag.attrib['value'])
@@ -8,12 +8,21 @@ class OsXdmParser(AbstractEbModelParser):
8
8
  def __init__(self, ) -> None:
9
9
  super().__init__()
10
10
 
11
+ self.os = None
12
+
11
13
  def parse(self, element: ET.Element, doc: EBModel):
12
14
  if self.get_component_name(element) != "Os":
13
15
  raise ValueError("Invalid <%s> xdm file" % "Os")
14
16
 
15
17
  os = doc.getOs()
16
18
 
19
+ self.read_version(element, os)
20
+
21
+ self.logger.info("Parse Rte ARVersion:<%s> SwVersion:<%s>" %
22
+ (os.getArVersion().getVersion(), os.getSwVersion().getVersion()))
23
+
24
+ self.os = os
25
+
17
26
  self.read_os_tasks(element, os)
18
27
  self.read_os_isrs(element, os)
19
28
  self.read_os_alarms(element, os)
@@ -35,7 +44,7 @@ class OsXdmParser(AbstractEbModelParser):
35
44
  os_task.setOsTaskPriority(int(self.read_value(ctr_tag, "OsTaskPriority"))) \
36
45
  .setOsTaskActivation(self.read_value(ctr_tag, "OsTaskActivation")) \
37
46
  .setOsTaskSchedule(self.read_value(ctr_tag, "OsTaskSchedule")) \
38
- .setOsTaskType(self.read_value(ctr_tag, "OsTaskType")) \
47
+ .setOsTaskType(self.read_optional_value(ctr_tag, "OsTaskType")) \
39
48
  .setOsStacksize(int(self.read_optional_value(ctr_tag, "OsStacksize", 0)))
40
49
 
41
50
  for resource_ref in self.read_ref_value_list(ctr_tag, "OsTaskResourceRef"):
@@ -157,8 +166,24 @@ class OsXdmParser(AbstractEbModelParser):
157
166
  os_app = OsApplication(os, ctr_tag.attrib["name"]) \
158
167
  .setOsTrusted(self.read_value(ctr_tag, "OsTrusted"))
159
168
 
169
+ for ref in self.read_ref_value_list(ctr_tag, "OsAppAlarmRef"):
170
+ os_app.addOsAppAlarmRef(ref)
171
+
172
+ for ref in self.read_ref_value_list(ctr_tag, "OsAppCounterRef"):
173
+ os_app.addOsAppCounterRefs(ref)
174
+
175
+ for ref in self.read_ref_value_list(ctr_tag, "OsAppScheduleTableRef"):
176
+ os_app.addOsAppScheduleTableRef(ref)
177
+
160
178
  for ref in self.read_ref_value_list(ctr_tag, "OsAppResourceRef"):
161
179
  os_app.addOsAppResourceRef(ref)
162
180
 
181
+ for ref in self.read_ref_value_list(ctr_tag, "OsAppTaskRef"):
182
+ os_app.addOsAppTaskRefs(ref)
183
+
184
+ for ref in self.read_ref_value_list(ctr_tag, "OsAppIsrRef"):
185
+ os_app.addOsAppIsrRefs(ref)
186
+
187
+
163
188
  self.logger.debug("Read OsApplication <%s>" % os_app.getName())
164
189
  os.addOsApplication(os_app)
@@ -1,5 +1,6 @@
1
1
  import xml.etree.ElementTree as ET
2
2
  import logging
3
+ import os
3
4
  from ..models.eb_doc import PreferenceModel
4
5
  from ..models.importer_xdm import SystemDescriptionImporter
5
6
  from . import AbstractEbModelParser
@@ -22,4 +23,14 @@ class PerfXdmParser(AbstractEbModelParser):
22
23
  for ctr_tag in self.find_ctr_tag_list(element, "SystemDescriptionImporters"):
23
24
  self.logger.info("Parse SystemDescriptionImporters: <%s>" % ctr_tag.attrib["name"])
24
25
  self.parse_input_files(ctr_tag, importer)
25
- #importer.addInputFile()
26
+ #importer.addInputFile()
27
+
28
+ def add_ecu_extract(self, doc: PreferenceModel, params = {'base_path': None, 'wildcard': None, "project": None}):
29
+ importer = doc.getSystemDescriptionImporter()
30
+
31
+ #if params['base_path'] is None:
32
+ # raise ValueError("Please specify the base path")
33
+
34
+ #ecu_extract_path = os.path.join(params['base_path'], '')
35
+
36
+ importer.addInputFile('systemmod/EcuExtract.arxml')
@@ -1,63 +1,93 @@
1
1
  import xml.etree.ElementTree as ET
2
2
 
3
- from ..models.rte_xdm import Rte, RteBswEventToTaskMapping, RteBswModuleInstance, RteEventToTaskMapping, RteSwComponentInstance
3
+ from ..models.rte_xdm import Rte, RteBswEventToTaskMapping, RteBswEventToTaskMappingV3, RteBswEventToTaskMappingV4, RteBswModuleInstance, RteEventToTaskMapping, RteEventToTaskMappingV3, RteEventToTaskMappingV4, RteSwComponentInstance
4
4
  from ..models.eb_doc import EBModel
5
- from .eb_parser import AbstractEbModelParser
5
+ from ..parser.eb_parser import AbstractEbModelParser
6
6
 
7
7
  class RteXdmParser(AbstractEbModelParser):
8
8
  def __init__(self, ) -> None:
9
9
  super().__init__()
10
+ self.rte = None
10
11
 
11
12
  def parse(self, element: ET.Element, doc: EBModel):
12
13
  if self.get_component_name(element) != "Rte":
13
14
  raise ValueError("Invalid <%s> xdm file" % "Rte")
14
15
 
15
- self.read_rte_bsw_module_instances(element, doc.getRte())
16
- self.read_rte_sw_component_instances(element, doc.getRte())
16
+ rte = doc.getRte()
17
+ self.read_version(element, rte)
18
+
19
+ self.logger.info("Parse Rte ARVersion:<%s> SwVersion:<%s>" %
20
+ (rte.getArVersion().getVersion(), rte.getSwVersion().getVersion()))
21
+
22
+ self.rte = rte
23
+
24
+ self.read_rte_bsw_module_instances(element, rte)
25
+ self.read_rte_sw_component_instances(element, rte)
17
26
 
18
27
  def read_rte_bsw_module_instance_event_to_task_mappings(self, element: ET.Element, instance: RteBswModuleInstance):
19
28
  for ctr_tag in self.find_ctr_tag_list(element, "RteBswEventToTaskMapping"):
20
- mapping = RteBswEventToTaskMapping(instance, ctr_tag.attrib['name'])
29
+ self.logger.debug("Read RteBswEventToTaskMapping <%s>" % ctr_tag.attrib['name'])
30
+
31
+ if self.rte.getArVersion().getMajorVersion() >= 4:
32
+ mapping = RteBswEventToTaskMappingV4(instance, ctr_tag.attrib['name'])
33
+ else:
34
+ mapping = RteBswEventToTaskMappingV3(instance, ctr_tag.attrib['name'])
35
+
21
36
  mapping.setRteBswActivationOffset(self.read_optional_value(ctr_tag, "RteBswActivationOffset")) \
22
37
  .setRteBswEventPeriod(self.read_optional_value(ctr_tag, "RteBswPeriod")) \
23
38
  .setRteBswPositionInTask(self.read_optional_value(ctr_tag, "RteBswPositionInTask")) \
24
- .setRteBswServerQueueLength(self.read_optional_value(ctr_tag, "RteBswServerQueueLength")) \
25
- .setRteBswEventRef(self.read_ref_value(ctr_tag, "RteBswEventRef")) \
26
- .setRteBswMappedToTaskRef(self.read_optional_ref_value(ctr_tag, "RteBswMappedToTaskRef"))
39
+ .setRteBswServerQueueLength(self.read_optional_value(ctr_tag, "RteBswServerQueueLength"))
40
+
41
+ if isinstance(mapping, RteBswEventToTaskMappingV4):
42
+ for resource_ref in self.read_ref_value_list(ctr_tag, "RteBswEventRef"):
43
+ mapping.addRteBswEventRef(resource_ref)
44
+ elif isinstance(mapping, RteBswEventToTaskMappingV3):
45
+ mapping.setRteBswEventRef(self.read_ref_value(ctr_tag, "RteBswEventRef"))
46
+
47
+ mapping.setRteBswMappedToTaskRef(self.read_optional_ref_value(ctr_tag, "RteBswMappedToTaskRef"))
27
48
  instance.addRteBswEventToTaskMapping(mapping)
28
49
 
29
50
  def read_rte_bsw_module_instances(self, element: ET.Element, rte: Rte):
30
51
  for ctr_tag in self.find_ctr_tag_list(element, 'RteBswModuleInstance'):
52
+ self.logger.debug("Read RteBswModuleInstance <%s>" % ctr_tag.attrib['name'])
53
+
31
54
  instance = RteBswModuleInstance(rte, ctr_tag.attrib['name'])
32
55
  instance.setRteBswImplementationRef(self.read_ref_value(ctr_tag, "RteBswImplementationRef")) \
33
56
  .setRteMappedToOsApplicationRef(self.read_optional_ref_value(ctr_tag, "RteMappedToOsApplicationRef"))
34
57
 
35
58
  self.read_rte_bsw_module_instance_event_to_task_mappings(ctr_tag, instance)
36
-
37
- self.logger.debug("Add the RteBswModuleInstance <%s>" % instance.getName())
38
-
39
59
  rte.addRteBswModuleInstance(instance)
40
60
 
41
61
  def read_rte_sw_component_instance_event_to_task_mappings(self, element: ET.Element, instance: RteSwComponentInstance):
42
62
  for ctr_tag in self.find_ctr_tag_list(element, "RteEventToTaskMapping"):
43
- mapping = RteEventToTaskMapping(instance, ctr_tag.attrib['name'])
63
+
64
+ if self.rte.getArVersion().getMajorVersion() >= 4:
65
+ mapping = RteEventToTaskMappingV4(instance, ctr_tag.attrib['name'])
66
+ else:
67
+ mapping = RteEventToTaskMappingV3(instance, ctr_tag.attrib['name'])
68
+
44
69
  mapping.setRteActivationOffset(self.read_optional_value(ctr_tag, "RteActivationOffset")) \
45
70
  .setRtePeriod(self.read_optional_value(ctr_tag, "RtePeriod")) \
46
71
  .setRtePositionInTask(self.read_optional_value(ctr_tag, "RtePositionInTask")) \
47
- .setRteServerQueueLength(self.read_optional_value(ctr_tag, "RteServerQueueLength")) \
48
- .setRteEventRef(self.read_ref_value(ctr_tag, "RteEventRef")) \
49
- .setRteMappedToTaskRef(self.read_optional_ref_value(ctr_tag, "RteMappedToTaskRef"))
72
+ .setRteServerQueueLength(self.read_optional_value(ctr_tag, "RteServerQueueLength"))
73
+
74
+ if isinstance(mapping, RteEventToTaskMappingV4):
75
+ for resource_ref in self.read_ref_value_list(ctr_tag, "RteEventRef"):
76
+ mapping.addRteEventRef(resource_ref)
77
+ elif isinstance(mapping, RteEventToTaskMappingV3):
78
+ mapping.setRteEventRef(self.read_ref_value(ctr_tag, "RteEventRef"))
79
+
80
+ mapping.setRteMappedToTaskRef(self.read_optional_ref_value(ctr_tag, "RteMappedToTaskRef"))
50
81
 
51
82
  instance.addRteEventToTaskMapping(mapping)
52
83
 
53
84
  def read_rte_sw_component_instances(self, element: ET.Element, rte: Rte):
54
85
  for ctr_tag in self.find_ctr_tag_list(element, 'RteSwComponentInstance'):
86
+ self.logger.debug("Read RteSwComponentInstance <%s>" % ctr_tag.attrib['name'])
87
+
55
88
  instance = RteSwComponentInstance(rte, ctr_tag.attrib['name'])
56
89
  instance.setMappedToOsApplicationRef(self.read_optional_ref_value(ctr_tag, "MappedToOsApplicationRef")) \
57
90
  .setRteSoftwareComponentInstanceRef(self.read_optional_ref_value(ctr_tag, "RteSoftwareComponentInstanceRef"))
58
91
 
59
92
  self.read_rte_sw_component_instance_event_to_task_mappings(ctr_tag, instance)
60
-
61
- self.logger.debug("Add the RteSwComponentInstance <%s>" % instance.getName())
62
-
63
93
  rte.addRteSwComponentInstance(instance)
@@ -62,7 +62,7 @@ class RteRunnableEntityXlsWriter(ExcelReporter):
62
62
  if isinstance(mapping, RteBswEventToTaskMapping):
63
63
  self.logger.debug("Write Mapping %s" % mapping.getName())
64
64
  instance = mapping.getRteBswModuleInstance()
65
- self.write_cell(sheet, row, 2, mapping.getRteBswEventRef().getShortName())
65
+ self.write_cell(sheet, row, 2, mapping.getRteBswEventRefs().getShortName())
66
66
  self.write_cell(sheet, row, 5, instance.getRteBswImplementationRef().getValue())
67
67
  self.write_cell(sheet, row, 6, mapping.getRteBswPositionInTask())
68
68
  self.write_cell(sheet, row, 7, mapping.getRteBswActivationOffset())
@@ -2,6 +2,7 @@ from typing import List
2
2
  from xml.dom import minidom
3
3
  import xml.etree.ElementTree as ET
4
4
  import logging
5
+ import os
5
6
 
6
7
  from ..models.eclipse_project import Link
7
8
  from ..models.importer_xdm import SystemDescriptionImporter
@@ -62,7 +63,6 @@ class ABProjectWriter(EclipseProjectWriter):
62
63
 
63
64
  with open(filename, "w", encoding="utf-8") as f_out:
64
65
  f_out.write(xml.decode())
65
-
66
66
 
67
67
  def writer_import_files(self, filename: str, importer: SystemDescriptionImporter, params = {'base_path': None, 'wildcard': None, "project": None}):
68
68
  self.logger.info("Generate AB project <%s>" % filename)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py-eb-model
3
- Version: 1.1.0
3
+ Version: 1.1.2
4
4
  Summary: The parser for EB XDM file
5
5
  Home-page: UNKNOWN
6
6
  Author: melodypapa
@@ -178,7 +178,14 @@ PrefSystemImporter --base-path c:/EB/ACG-8_8_8_WIN32X86/workspace/simple_demo_rt
178
178
  2. Add the support to read OsTaskAutostart element.
179
179
  3. Add the support to read OsTaskType element.
180
180
 
181
- **Version 1.1.0**
181
+ **Version 1.1.1**
182
+
183
+ 1. Add the support to append SystemMod/EcuExtract.arxml into list automatically for PrefSystemImporter.
184
+
185
+ **Version 1.1.2**
186
+
187
+ 1. Read the OsAppTaskRef from OsApplication.
188
+
182
189
 
183
190
 
184
191
 
@@ -1,34 +1,34 @@
1
1
  eb_model/__init__.py,sha256=oMw5xoAS-lHLxufQSlBIXhGZZMcPmwGFA3PYpTwaQTU,92
2
2
  eb_model/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  eb_model/cli/os_xdm_2_xls_cli.py,sha256=lTIYNVDDMIKu6sosjV8I3pLQxD-I11cKjUDXTyKDrLE,1643
4
- eb_model/cli/pref_system_importer_cli.py,sha256=M46tHz97GTTud0dCtOhFVZ04B3yzThBmix7OSg00K_c,3315
4
+ eb_model/cli/pref_system_importer_cli.py,sha256=Cra-rVpgxruLLyWHRdYAgbwfcHVPV2L8Jk6ck0v4lJU,3361
5
5
  eb_model/cli/rte_xdm_2_xls_cli.py,sha256=83uzE2Vk0h267gWxF9mnWN3Bh69RJpYyKULFXpxTByY,2127
6
6
  eb_model/models/__init__.py,sha256=7_WxCwRdVavLbPzepHWNar3O-rOxhLwmVYWd2pqm2kI,124
7
- eb_model/models/abstract.py,sha256=9Bvz75pwvSv1Txt68t-01zErY78aWrlis390Mzmfvvw,2394
7
+ eb_model/models/abstract.py,sha256=uavSXSfKeM2JvOLmpBh43WlYLQ5fCk_F99tf9YVHDkU,3833
8
8
  eb_model/models/eb_doc.py,sha256=hPsGdNHlm3vl-ys3B3NGrlJRrWAWPhRvFJrN3fLQTW8,2569
9
9
  eb_model/models/eclipse_project.py,sha256=W6ovTd3SMnlmWm_efVBZqTUGQebF0hJocsTqMlQ7_XQ,169
10
- eb_model/models/importer_xdm.py,sha256=tnd-9Smcd_vLs5t9wb7ob-i-nykUF7xUesf4zxmB4wA,4193
11
- eb_model/models/os_xdm.py,sha256=HrAhFiPkbkE_YBihG2S5lQTTU9IQla7O15E8guKLDXg,32439
12
- eb_model/models/rte_xdm.py,sha256=73hBsQ7pUePA9ewFI2d50iImI_FA-jzFQFlnp0K6WTs,19407
10
+ eb_model/models/importer_xdm.py,sha256=B2Vqw5nkmzFgaGSpZlmTVFWZ88rTMqD8Iryytg4kUnk,4249
11
+ eb_model/models/os_xdm.py,sha256=2Y6PJ_IMrXjC6oSK_k3vtZpH8P31GlJhfNv18zbPFQg,32438
12
+ eb_model/models/rte_xdm.py,sha256=kCn5WTrBY3nwMCYYaaWuoO6jWy37BmzNycTnVXnMDvQ,21482
13
13
  eb_model/parser/__init__.py,sha256=7VOmPr4dng_TrOyDZFu2_s3r0BJZQGiOUxALMY8EnqI,170
14
- eb_model/parser/eb_parser.py,sha256=XAJZ_agd54C5R4UAAlHfwaVWYFQRSXuTjM_ijcpVU4E,7375
14
+ eb_model/parser/eb_parser.py,sha256=_5sUl2pMt1SchHvrLOhU2axqa3FmKTWElSB79taz0O4,8188
15
15
  eb_model/parser/eb_parser_factory.py,sha256=zqsqq52uImU4-WcS5dvHfhM95hiEPAGRtNzVik8i8wc,971
16
- eb_model/parser/os_xdm_parser.py,sha256=xnA1C91Jpd2MGFvdV4Xu03vZLh6IgsUCarEVRmh8_mQ,9635
17
- eb_model/parser/pref_xdm_parser.py,sha256=khzgD_igMauH7H3OXdFmFc-HspLq8U51wC6CAs6jJHc,1097
18
- eb_model/parser/rte_xdm_parser.py,sha256=ywAJiBTgI2WifB-rSdoh6PWvRZ4hSSdy4hmdilSTfU0,4027
16
+ eb_model/parser/os_xdm_parser.py,sha256=ZBS36hcnMufCsiypnx-wmWmHYuECOqRWGOjOHbqXjBc,10560
17
+ eb_model/parser/pref_xdm_parser.py,sha256=EjfR4vrnjRVLw_7wyPmMYlBj6lPXZbBZMEdWlYPj3uI,1539
18
+ eb_model/parser/rte_xdm_parser.py,sha256=nUqlVMBJVxMGb3yENFBm1RB9jWQ7azhMKhGkfLfz4K0,5459
19
19
  eb_model/reporter/__init__.py,sha256=H8D_23UwJi1Ph6yjBfZhxWVbu9ci5_O4471gqXGiZCM,36
20
20
  eb_model/reporter/markdown.py,sha256=NhcJOFQ_BVbkgGe66uAT7KUPIchWU4kfVMtMLQtbK-w,1647
21
21
  eb_model/reporter/excel_reporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  eb_model/reporter/excel_reporter/abstract.py,sha256=PfIoiKNKy1eRJBABln7rADkSdwWzS03Vs03jBYM-_5Y,1622
23
23
  eb_model/reporter/excel_reporter/os_xdm.py,sha256=n1e-tU04s0oh3v31OUKgkIju6BUAtCwb7iGtp2j4Hsc,5578
24
- eb_model/reporter/excel_reporter/rte_xdm.py,sha256=JweusBQJSg1_jaFbQV3sJnVMALMj3VuEkVf15Pw-Ir4,3936
24
+ eb_model/reporter/excel_reporter/rte_xdm.py,sha256=OHuVPUV7xCdDzxELyXi766YJ6GejTHrzPrlAUBqexIw,3937
25
25
  eb_model/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  eb_model/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  eb_model/tests/models/test_eb_model.py,sha256=3fpIHhzQlf9KZjm4fZxcSTT4Zio6YhTrcn9UBvlhOfo,1632
28
28
  eb_model/tests/models/test_ecuc_container.py,sha256=lZmtXwPMz9T52WFduTgFy16fO2agjSW-Rl2cVypM86s,722
29
29
  eb_model/tests/models/test_importer_xdm.py,sha256=F80kO77jeyfCkLPRgRLjEj3UPcrACimR5LhBhFgX_m4,3372
30
30
  eb_model/writer/__init__.py,sha256=CXvQAsNV1OvYClkHdKCG7Q300OVBzcl2TmoD68MyQOs,95
31
- eb_model/writer/project_writer.py,sha256=umFx3M-VccqzKRAfGzrbYJwo_n0eCvjpZUbQOfbg0QE,2799
31
+ eb_model/writer/project_writer.py,sha256=9BQU1CJAktVxFvQk89Pj4IbizTJXnlQidt4eX_CIFXU,2800
32
32
  eb_model/writer/text_writer.py,sha256=7d4_PUTJk5Y6S_EQflAH3ACDnUw9VwJzP90GFDh0n0I,991
33
33
  py_eb_model/__init__.py,sha256=u3VUin2V_1eExLd9NIpw_LGHIAwaG2vEoyhssZurrvM,69
34
34
  py_eb_model/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -45,9 +45,9 @@ py_eb_model/reporter/markdown.py,sha256=NhcJOFQ_BVbkgGe66uAT7KUPIchWU4kfVMtMLQtb
45
45
  py_eb_model/reporter/excel_reporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  py_eb_model/reporter/excel_reporter/abstract.py,sha256=BOuLhWwwTwqBzErtmwPrelB1iByMfZP9haFmg9ayFQw,1488
47
47
  py_eb_model/reporter/excel_reporter/os_xdm.py,sha256=WGMxK0PYxi9J5fUZ-EeiiM8NBpIg2WyxRsrN-gK37YE,1589
48
- py_eb_model-1.1.0.dist-info/LICENSE,sha256=I52rGS7W1IwAmYCUfqTpDaSHoFAdt7grcNiBhk-Z3eI,1088
49
- py_eb_model-1.1.0.dist-info/METADATA,sha256=3eIiugWxfU5Qlgi0vCYMR9UACd5NZcR85o_vU3JIwsA,5759
50
- py_eb_model-1.1.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
51
- py_eb_model-1.1.0.dist-info/entry_points.txt,sha256=yDLH9wnJ5Fp7ImgyFRSnr3mU6nvaenuKZnbe2rgs8Mk,183
52
- py_eb_model-1.1.0.dist-info/top_level.txt,sha256=DGBNh6YW_x4RF_UoLKW3cKqb2SLnmfuEIZlkTewR66A,9
53
- py_eb_model-1.1.0.dist-info/RECORD,,
48
+ py_eb_model-1.1.2.dist-info/LICENSE,sha256=I52rGS7W1IwAmYCUfqTpDaSHoFAdt7grcNiBhk-Z3eI,1088
49
+ py_eb_model-1.1.2.dist-info/METADATA,sha256=3LOAFETww4ZvsasY7bi0uG8-Pehw6bYpn9KHTLslkVI,5937
50
+ py_eb_model-1.1.2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
51
+ py_eb_model-1.1.2.dist-info/entry_points.txt,sha256=yDLH9wnJ5Fp7ImgyFRSnr3mU6nvaenuKZnbe2rgs8Mk,183
52
+ py_eb_model-1.1.2.dist-info/top_level.txt,sha256=DGBNh6YW_x4RF_UoLKW3cKqb2SLnmfuEIZlkTewR66A,9
53
+ py_eb_model-1.1.2.dist-info/RECORD,,