py-eb-model 1.1.6__py3-none-any.whl → 1.1.8__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 (30) hide show
  1. eb_model/cli/pref_system_importer_cli.py +22 -13
  2. eb_model/cli/rte_xdm_2_xls_cli.py +28 -27
  3. eb_model/models/abstract.py +20 -8
  4. eb_model/models/importer_xdm.py +3 -1
  5. eb_model/models/nvm_xdm.py +321 -12
  6. eb_model/models/os_xdm.py +320 -55
  7. eb_model/models/rte_xdm.py +16 -11
  8. eb_model/parser/eb_parser.py +28 -20
  9. eb_model/parser/nvm_xdm_parser.py +89 -12
  10. eb_model/parser/os_xdm_parser.py +56 -12
  11. eb_model/parser/rte_xdm_parser.py +11 -11
  12. eb_model/reporter/excel_reporter/abstract.py +20 -6
  13. eb_model/reporter/excel_reporter/nvm_xdm.py +97 -7
  14. eb_model/reporter/excel_reporter/os_xdm.py +104 -20
  15. eb_model/reporter/excel_reporter/rte_xdm.py +15 -4
  16. eb_model/tests/models/test_abstract.py +201 -0
  17. eb_model/tests/models/test_eb_doc.py +66 -0
  18. eb_model/tests/models/test_eclipse_project.py +21 -0
  19. eb_model/tests/models/test_importer_xdm.py +45 -40
  20. eb_model/tests/parser/__init__.py +0 -0
  21. eb_model/tests/parser/test_nvm_xdm_parser.py +259 -0
  22. eb_model/tests/parser/test_os_xdm_parser.py +396 -0
  23. eb_model/writer/text_writer.py +4 -2
  24. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/METADATA +12 -1
  25. py_eb_model-1.1.8.dist-info/RECORD +48 -0
  26. py_eb_model-1.1.6.dist-info/RECORD +0 -42
  27. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/LICENSE +0 -0
  28. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/WHEEL +0 -0
  29. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/entry_points.txt +0 -0
  30. {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/top_level.txt +0 -0
@@ -8,14 +8,15 @@ from typing import List
8
8
  from ..models.eb_doc import EBModel, PreferenceModel
9
9
  from ..models.abstract import EcucRefType, Module
10
10
 
11
- class AbstractEbModelParser(metaclass = ABCMeta):
11
+
12
+ class AbstractEbModelParser(metaclass=ABCMeta):
12
13
 
13
14
  def __init__(self) -> None:
14
15
  self.nsmap = {}
15
16
 
16
17
  self.logger = logging.getLogger()
17
18
 
18
- if type(self) == "AbstractEBModelParser":
19
+ if type(self) is AbstractEbModelParser:
19
20
  raise ValueError("Abstract EBModelParser cannot be initialized.")
20
21
 
21
22
  def validate_root(self, element: ET.Element):
@@ -39,7 +40,6 @@ class AbstractEbModelParser(metaclass = ABCMeta):
39
40
  '''
40
41
  Internal function and please call _read_ref_value instead of it
41
42
  '''
42
- #match = re.match(r'ASPath.*\/(.*)', value)
43
43
  match = re.match(r'ASPath:(.*)', value)
44
44
  if (match):
45
45
  return match.group(1)
@@ -60,18 +60,20 @@ class AbstractEbModelParser(metaclass = ABCMeta):
60
60
 
61
61
  def read_value(self, parent: ET.Element, name: str) -> str:
62
62
  tag = parent.find(".//d:var[@name='%s']" % name, self.nsmap)
63
- if tag == None:
63
+ if tag is None:
64
64
  raise KeyError("XPath d:var[@name='%s'] is invalid" % name)
65
65
  return self._convert_value(tag)
66
66
 
67
- def read_optional_value(self, parent: ET.Element, name: str, default_value = None) -> str:
67
+ def read_optional_value(self, parent: ET.Element, name: str, default_value=None) -> str:
68
68
  tag = parent.find(".//d:var[@name='%s']" % name, self.nsmap)
69
69
  if tag is None:
70
70
  return default_value
71
- if ('value' not in tag.attrib):
71
+ if 'value' not in tag.attrib:
72
72
  return default_value
73
73
  enable = self.read_attrib(tag, 'ENABLE')
74
- if (enable == 'false'):
74
+ if enable is None:
75
+ return default_value
76
+ if enable.upper() == "FALSE":
75
77
  return default_value
76
78
  return self._convert_value(tag)
77
79
 
@@ -85,7 +87,7 @@ class AbstractEbModelParser(metaclass = ABCMeta):
85
87
  def read_ref_value(self, parent: ET.Element, name: str) -> EcucRefType:
86
88
  tag = parent.find(".//d:ref[@name='%s']" % name, self.nsmap)
87
89
  if tag is None:
88
- raise KeyError("XPath d:ref[@name='%s'] is invalid" % name)
90
+ raise KeyError("XPath d:ref[@name='%s'] is invalid" % name)
89
91
  if 'value' in tag.attrib:
90
92
  return EcucRefType(self.read_ref_raw_value(tag.attrib['value']))
91
93
  return None
@@ -93,8 +95,11 @@ class AbstractEbModelParser(metaclass = ABCMeta):
93
95
  def read_optional_ref_value(self, parent: ET.Element, name: str) -> EcucRefType:
94
96
  tag = parent.find(".//d:ref[@name='%s']" % name, self.nsmap)
95
97
  enable = self.read_attrib(tag, 'ENABLE')
96
- if (enable == 'false'):
98
+ if enable is None:
99
+ return None
100
+ if enable.upper() == "FALSE":
97
101
  return None
102
+
98
103
  return EcucRefType(self.read_ref_raw_value(tag.attrib['value']))
99
104
 
100
105
  def read_ref_value_list(self, parent: ET.Element, name: str) -> List[EcucRefType]:
@@ -102,7 +107,7 @@ class AbstractEbModelParser(metaclass = ABCMeta):
102
107
  for tag in parent.findall(".//d:lst[@name='%s']/d:ref" % name, self.nsmap):
103
108
  ref_value_list.append(EcucRefType(self.read_ref_raw_value(tag.attrib['value'])))
104
109
  return ref_value_list
105
-
110
+
106
111
  def find_ctr_tag_list(self, parent: ET.Element, name: str) -> List[ET.Element]:
107
112
  return parent.findall(".//d:lst[@name='%s']/d:ctr" % name, self.nsmap)
108
113
 
@@ -111,26 +116,26 @@ class AbstractEbModelParser(metaclass = ABCMeta):
111
116
 
112
117
  def find_ctr_tag(self, parent: ET.Element, name: str) -> ET.Element:
113
118
  '''
114
- Read the child ctr tag.
119
+ Read the child ctr tag.
115
120
  '''
116
121
  tag = parent.find(".//d:ctr[@name='%s']" % name, self.nsmap)
117
122
  if tag is None:
118
123
  return None
119
124
  enable = self.read_attrib(tag, 'ENABLE')
120
- # ctr has the value if
125
+ # ctr has the value if
121
126
  # 1. enable attribute do not exist
122
127
  # 2. enable attribute is not false
123
- if enable is not None and enable == "false":
128
+ if enable is not None and enable.upper() == "FALSE":
124
129
  return None
125
130
  return tag
126
131
 
127
- def create_ctr_tag(self, name: str, type: str)-> ET.Element:
132
+ def create_ctr_tag(self, name: str, type: str) -> ET.Element:
128
133
  ctr_tag = ET.Element("d:ctr")
129
134
  ctr_tag.attrib['name'] = name
130
135
  ctr_tag.attrib['type'] = type
131
136
  return ctr_tag
132
137
 
133
- def create_ref_tag(self, name:str, type: str, value = "")-> ET.Element:
138
+ def create_ref_tag(self, name: str, type: str, value: str = "") -> ET.Element:
134
139
  ref_tag = ET.Element("d:ref")
135
140
  ref_tag.attrib['name'] = name
136
141
  ref_tag.attrib['type'] = type
@@ -138,20 +143,20 @@ class AbstractEbModelParser(metaclass = ABCMeta):
138
143
  ref_tag.attrib['value'] = "ASPath:%s" % value
139
144
  return ref_tag
140
145
 
141
- def create_choice_tag(self, name:str, type:str, value: str)-> ET.Element:
146
+ def create_choice_tag(self, name: str, type: str, value: str) -> ET.Element:
142
147
  choice_tag = ET.Element("d:chc")
143
148
  choice_tag.attrib['name'] = name
144
149
  choice_tag.attrib['type'] = type
145
150
  choice_tag.attrib['value'] = value
146
151
  return choice_tag
147
152
 
148
- def create_attrib_tag(self, name:str, value: str) -> ET.Element:
153
+ def create_attrib_tag(self, name: str, value: str) -> ET.Element:
149
154
  attrib_tag = ET.Element("a:a")
150
155
  attrib_tag.attrib['name'] = name
151
156
  attrib_tag.attrib['value'] = value
152
157
  return attrib_tag
153
158
 
154
- def create_ref_lst_tag(self, name:str, type:str = "", ref_list: List[str] = []) -> ET.Element:
159
+ def create_ref_lst_tag(self, name: str, type: str = "", ref_list: List[str] = []) -> ET.Element:
155
160
  lst_tag = ET.Element("d:lst")
156
161
  lst_tag.attrib['name'] = name
157
162
  for ref in ref_list:
@@ -169,7 +174,7 @@ class AbstractEbModelParser(metaclass = ABCMeta):
169
174
  return parent.find(".//d:lst[@name='%s']" % name, self.nsmap)
170
175
 
171
176
  def read_attrib(self, parent: ET.Element, name: str) -> str:
172
- attrib_tag = parent.find(".//a:a[@name='%s']" % name, self.nsmap)
177
+ attrib_tag = parent.find("a:a[@name='%s']" % name, self.nsmap)
173
178
  if attrib_tag is None:
174
179
  return None
175
180
  return attrib_tag.attrib['value']
@@ -177,6 +182,9 @@ class AbstractEbModelParser(metaclass = ABCMeta):
177
182
  def read_namespaces(self, xdm: str):
178
183
  self.nsmap = dict([node for _, node in ET.iterparse(xdm, events=['start-ns'])])
179
184
 
185
+ # def set_namespace(self, key: str, value: str):
186
+ # self.nsmap[key] = value
187
+
180
188
  def parse(self, element: ET.Element, doc: EBModel):
181
189
  pass
182
190
 
@@ -199,4 +207,4 @@ class AbstractEbModelParser(metaclass = ABCMeta):
199
207
 
200
208
  def parse_preference_xdm(self, filename: str, doc: EBModel):
201
209
  root_tag = self.load_xdm(filename)
202
- self.parse_preference(root_tag, doc)
210
+ self.parse_preference(root_tag, doc)
@@ -1,6 +1,6 @@
1
1
  import xml.etree.ElementTree as ET
2
2
 
3
- from ..models.nvm_xdm import NvM, NvMBlockDescriptor
3
+ from ..models.nvm_xdm import NvM, NvMBlockDescriptor, NvMCommon, NvMEaRef, NvMFeeRef, NvMInitBlockCallback, NvMSingleBlockCallback
4
4
  from ..models.eb_doc import EBModel
5
5
  from ..parser.eb_parser import AbstractEbModelParser
6
6
 
@@ -23,22 +23,99 @@ class NvMXdmParser(AbstractEbModelParser):
23
23
 
24
24
  self.nvm = nvm
25
25
 
26
+ self.read_nvm_common(element, nvm)
26
27
  self.read_nvm_block_descriptors(element, nvm)
27
28
 
29
+ def read_nvm_common(self, element: ET.Element, nvm: NvM):
30
+ ctr_tag = self.find_ctr_tag(element, "NvMCommon")
31
+ if ctr_tag is not None:
32
+ nvm_common = NvMCommon(nvm, "NvMCommon")
33
+ nvm_common.setNvMApiConfigClass(self.read_value(ctr_tag, "NvMApiConfigClass"))
34
+ nvm_common.setNvMBswMMultiBlockJobStatusInformation(self.read_value(ctr_tag, "NvMBswMMultiBlockJobStatusInformation"))
35
+ nvm_common.setNvMCompiledConfigId(self.read_value(ctr_tag, "NvMCompiledConfigId"))
36
+ nvm_common.setNvMCrcNumOfBytes(self.read_value(ctr_tag, "NvMCrcNumOfBytes"))
37
+ nvm_common.setNvMCsmRetryCounter(self.read_optional_value(ctr_tag, "NvMCsmRetryCounter"))
38
+ nvm_common.setNvMDatasetSelectionBits(self.read_value(ctr_tag, "NvMDatasetSelectionBits"))
39
+ nvm_common.setNvMDevErrorDetect(self.read_value(ctr_tag, "NvMDevErrorDetect"))
40
+ nvm_common.setNvMDynamicConfiguration(self.read_value(ctr_tag, "NvMDynamicConfiguration"))
41
+ nvm_common.setNvMJobPrioritization(self.read_value(ctr_tag, "NvMJobPrioritization"))
42
+ nvm_common.setNvMMainFunctionPeriod(self.read_value(ctr_tag, "NvMMainFunctionPeriod"))
43
+ nvm_common.setNvMMultiBlockCallback(self.read_optional_value(ctr_tag, "NvMMultiBlockCallback"))
44
+ nvm_common.setNvMPollingMode(self.read_value(ctr_tag, "NvMPollingMode"))
45
+ nvm_common.setNvMRepeatMirrorOperations(self.read_value(ctr_tag, "NvMRepeatMirrorOperations"))
46
+ nvm_common.setNvMSetRamBlockStatusApi(self.read_value(ctr_tag, "NvMSetRamBlockStatusApi"))
47
+ nvm_common.setNvMSizeImmediateJobQueue(self.read_optional_value(ctr_tag, "NvMSizeImmediateJobQueue"))
48
+ nvm_common.setNvMSizeStandardJobQueue(self.read_value(ctr_tag, "NvMSizeStandardJobQueue"))
49
+ nvm_common.setNvMVersionInfoApi(self.read_value(ctr_tag, "NvMVersionInfoApi"))
50
+ nvm_common.setNvMBufferAlignmentValue(self.read_value(ctr_tag, "NvMBufferAlignmentValue"))
51
+ for ref in self.read_ref_value_list(ctr_tag, "NvMEcucPartitionRef"):
52
+ nvm_common.addNvMEcucPartitionRef(ref)
53
+ nvm_common.setNvMMasterEcucPartitionRef(self.read_ref_value(ctr_tag, "NvMMasterEcucPartitionRef"))
54
+
55
+ nvm.setNvMCommon(nvm_common)
56
+
57
+ def read_nvm_init_block_callback(self, element: ET.Element, nvm_block: NvMBlockDescriptor):
58
+ ctr_tag = self.find_ctr_tag(element, "NvMInitBlockCallback")
59
+ if ctr_tag is not None:
60
+ init_block_callback = NvMInitBlockCallback(nvm_block, "NvMInitBlockCallback")
61
+ init_block_callback.setNvMInitBlockCallbackFnc(self.read_value(ctr_tag, "NvMInitBlockCallbackFnc"))
62
+ nvm_block.setNvMInitBlockCallback(init_block_callback)
63
+
64
+ def read_nvm_single_block_callback(self, element: ET.Element, nvm_block: NvMBlockDescriptor):
65
+ ctr_tag = self.find_ctr_tag(element, "NvMSingleBlockCallback")
66
+ if ctr_tag is not None:
67
+ single_block_callback = NvMSingleBlockCallback(nvm_block, "NvMSingleBlockCallback")
68
+ single_block_callback.setNvMSingleBlockCallbackFnc(self.read_value(ctr_tag, "NvMSingleBlockCallbackFnc"))
69
+ nvm_block.setNvMSingleBlockCallback(single_block_callback)
70
+
71
+ def read_nvm_block_target_block_reference(self, element: ET.Element, nvm_block: NvMBlockDescriptor):
72
+ block_ref = self.read_choice_value(element, "NvMTargetBlockReference")
73
+ if block_ref == "NvMEaRef":
74
+ ctr_tag = self.find_ctr_tag(element, "NvMEaRef")
75
+ if ctr_tag is not None:
76
+ ref = NvMEaRef(nvm_block, block_ref)
77
+ ref.setNvMNameOfEaBlock(self.read_ref_value(element, "NvMNameOfEaBlock"))
78
+ nvm_block.setNvMTargetBlockReference(ref)
79
+ elif block_ref == "NvMFeeRef":
80
+ ctr_tag = self.find_ctr_tag(element, "NvMFeeRef")
81
+ if ctr_tag is not None:
82
+ ref = NvMFeeRef(nvm_block, block_ref)
83
+ ref.setNvMNameOfFeeBlock(self.read_ref_value(element, "NvMNameOfFeeBlock"))
84
+ nvm_block.setNvMTargetBlockReference(ref)
85
+ else:
86
+ raise ValueError("Invalid block reference type <%s>" % block_ref)
87
+
28
88
  def read_nvm_block_descriptors(self, element: ET.Element, nvm: NvM):
29
89
  for ctr_tag in self.find_ctr_tag_list(element, "NvMBlockDescriptor"):
30
90
  nvm_block = NvMBlockDescriptor(nvm, ctr_tag.attrib["name"])
31
- nvm_block.setNvMBlockCrcType(self.read_optional_value(ctr_tag, "NvMBlockCrcType")) \
32
- .setNvMBlockEcucPartitionRef(self.read_ref_value(ctr_tag, "NvMBlockEcucPartitionRef")) \
33
- .setNvMNvramBlockIdentifier(self.read_value(ctr_tag, "NvMNvramBlockIdentifier")) \
34
- .setNvMRamBlockDataAddress(self.read_optional_value(ctr_tag, "NvMRamBlockDataAddress")) \
35
- .setNvMRomBlockDataAddress(self.read_optional_value(ctr_tag, "NvMRomBlockDataAddress")) \
36
- .setNvMRomBlockNum(self.read_value(ctr_tag, "NvMRomBlockNum")) \
37
- .setNvMBlockManagementType(self.read_value(ctr_tag, "NvMBlockManagementType")) \
38
- .setNvMNvBlockLength(self.read_value(ctr_tag, "NvMNvBlockLength")) \
39
- .setNvMNvBlockNum(self.read_value(ctr_tag, "NvMNvBlockNum")) \
40
- .setNvMSelectBlockForReadAll(self.read_value(ctr_tag, "NvMSelectBlockForReadAll")) \
41
- .setNvMSelectBlockForWriteAll(self.read_value(ctr_tag, "NvMSelectBlockForWriteAll"))
91
+ nvm_block.setNvMBlockCrcType(self.read_optional_value(ctr_tag, "NvMBlockCrcType"))
92
+ nvm_block.setNvMBlockEcucPartitionRef(self.read_ref_value(ctr_tag, "NvMBlockEcucPartitionRef"))
93
+ nvm_block.setNvMNvramBlockIdentifier(self.read_value(ctr_tag, "NvMNvramBlockIdentifier"))
94
+ nvm_block.setNvMRamBlockDataAddress(self.read_optional_value(ctr_tag, "NvMRamBlockDataAddress"))
95
+ nvm_block.setNvMRomBlockDataAddress(self.read_optional_value(ctr_tag, "NvMRomBlockDataAddress"))
96
+ nvm_block.setNvMBlockJobPriority(self.read_value(ctr_tag, "NvMBlockJobPriority"))
97
+ nvm_block.setNvMResistantToChangedSw(self.read_value(ctr_tag, "NvMResistantToChangedSw"))
98
+ nvm_block.setNvMBlockCrcType(self.read_value(ctr_tag, "NvMBlockCrcType"))
99
+ nvm_block.setNvMBlockUseCrc(self.read_value(ctr_tag, "NvMBlockUseCrc"))
100
+ nvm_block.setNvMRomBlockNum(self.read_value(ctr_tag, "NvMRomBlockNum"))
101
+ nvm_block.setNvMBlockManagementType(self.read_value(ctr_tag, "NvMBlockManagementType"))
102
+ nvm_block.setNvMNvBlockLength(self.read_value(ctr_tag, "NvMNvBlockLength"))
103
+ nvm_block.setNvMNvBlockNum(self.read_value(ctr_tag, "NvMNvBlockNum"))
104
+ nvm_block.setNvMSelectBlockForReadAll(self.read_value(ctr_tag, "NvMSelectBlockForReadAll"))
105
+ nvm_block.setNvMSelectBlockForWriteAll(self.read_value(ctr_tag, "NvMSelectBlockForWriteAll"))
106
+
107
+ nvm_block.setNvMProvideRteJobFinishedPort(self.read_value(ctr_tag, "NvMProvideRteJobFinishedPort"))
108
+ nvm_block.setNvMProvideRteServicePort(self.read_value(ctr_tag, "NvMProvideRteServicePort"))
109
+
110
+ nvm_block.setNvMReadRamBlockFromNvCallback(self.read_optional_value(ctr_tag, "NvMReadRamBlockFromNvCallback"))
111
+ nvm_block.setNvMWriteRamBlockToNvCallback(self.read_optional_value(ctr_tag, "NvMWriteRamBlockToNvCallback"))
112
+ nvm_block.setNvMBlockUseSyncMechanism(self.read_value(ctr_tag, "NvMBlockUseSyncMechanism"))
113
+
114
+ self.read_nvm_init_block_callback(ctr_tag, nvm_block)
115
+ self.read_nvm_single_block_callback(ctr_tag, nvm_block)
116
+
117
+ nvm_block.setNvMNvBlockBaseNumber(self.read_value(ctr_tag, "NvMNvBlockBaseNumber"))
118
+ self.read_nvm_block_target_block_reference(ctr_tag, nvm_block)
42
119
 
43
120
  nvm.addNvMBlockDescriptor(nvm_block)
44
121
 
@@ -3,7 +3,7 @@ from ..models.eb_doc import EBModel
3
3
  from ..models.os_xdm import Os, OsAlarm, OsAlarmActivateTask, OsAlarmCallback, OsAlarmIncrementCounter, OsAlarmSetEvent, OsCounter, OsResource
4
4
  from ..models.os_xdm import OsScheduleTable
5
5
  from ..models.os_xdm import OsTask, OsIsr, OsApplication, OsScheduleTableEventSetting, OsScheduleTableExpiryPoint, OsScheduleTableTaskActivation
6
- from ..models.os_xdm import OsScheduleTblAdjustableExpPoint, OsTaskAutostart
6
+ from ..models.os_xdm import OsScheduleTblAdjustableExpPoint, OsTaskAutostart, OsMicrokernel, MkMemoryProtection, MkMemoryRegion
7
7
  from ..parser.eb_parser import AbstractEbModelParser
8
8
 
9
9
 
@@ -32,6 +32,7 @@ class OsXdmParser(AbstractEbModelParser):
32
32
  self.read_os_counters(element, os)
33
33
  self.read_os_applications(element, os)
34
34
  self.read_os_resources(element, os)
35
+ self.read_os_microkernel(element, os)
35
36
 
36
37
  def read_os_task_autostart(self, element: ET.Element, os_task: OsTask):
37
38
  ctr_tag = self.find_ctr_tag(element, "OsTaskAutostart")
@@ -44,11 +45,11 @@ class OsXdmParser(AbstractEbModelParser):
44
45
  def read_os_tasks(self, element: ET.Element, os: Os):
45
46
  for ctr_tag in self.find_ctr_tag_list(element, "OsTask"):
46
47
  os_task = OsTask(os, ctr_tag.attrib["name"])
47
- os_task.setOsTaskPriority(int(self.read_value(ctr_tag, "OsTaskPriority"))) \
48
- .setOsTaskActivation(self.read_value(ctr_tag, "OsTaskActivation")) \
49
- .setOsTaskSchedule(self.read_value(ctr_tag, "OsTaskSchedule")) \
50
- .setOsTaskType(self.read_optional_value(ctr_tag, "OsTaskType")) \
51
- .setOsStacksize(int(self.read_optional_value(ctr_tag, "OsStacksize", 0)))
48
+ os_task.setOsTaskPriority(int(self.read_value(ctr_tag, "OsTaskPriority")))
49
+ os_task.setOsTaskActivation(self.read_value(ctr_tag, "OsTaskActivation"))
50
+ os_task.setOsTaskSchedule(self.read_value(ctr_tag, "OsTaskSchedule"))
51
+ os_task.setOsTaskType(self.read_optional_value(ctr_tag, "OsTaskType"))
52
+ os_task.setOsStacksize(int(self.read_value(ctr_tag, "OsStacksize")))
52
53
 
53
54
  for resource_ref in self.read_ref_value_list(ctr_tag, "OsTaskResourceRef"):
54
55
  os_task.addOsTaskResourceRef(resource_ref)
@@ -61,16 +62,26 @@ class OsXdmParser(AbstractEbModelParser):
61
62
  def read_os_isrs(self, element: ET.Element, os: Os):
62
63
  for ctr_tag in self.find_ctr_tag_list(element, "OsIsr"):
63
64
  os_isr = OsIsr(os, ctr_tag.attrib["name"])
64
- os_isr.setOsIsrCategory(self.read_value(ctr_tag, "OsIsrCategory")) \
65
- .setOsIsrPeriod(self.read_optional_value(ctr_tag, "OsIsrPeriod", 0.0)) \
66
- .setOsStacksize(int(self.read_value(ctr_tag, "OsStacksize"))) \
67
- .setOsIsrPriority(self.read_optional_value(ctr_tag, "OsIsrPriority"))
65
+ os_isr.setOsIsrCategory(self.read_value(ctr_tag, "OsIsrCategory"))
66
+ os_isr.setOsIsrPeriod(self.read_optional_value(ctr_tag, "OsIsrPeriod", 0.0))
67
+ os_isr.setOsStacksize(int(self.read_value(ctr_tag, "OsStacksize")))
68
+ os_isr.setOsIsrPriority(self.read_optional_value(ctr_tag, "OsIsrPriority"))
68
69
 
69
- # patch for the infineon Aurix
70
+ # Infineon Aurix Tricore
70
71
  os_isr.setOsIsrPriority(self.read_optional_value(ctr_tag, "OsTricoreIrqLevel"))
71
- # patch for the ARM
72
+ os_isr.setOsIsrVector(self.read_optional_value(ctr_tag, "OsTricoreVector"))
73
+ os_isr.setOsTricoreIrqLevel(self.read_optional_value(ctr_tag, "OsTricoreIrqLevel"))
74
+ os_isr.setOsTricoreVector(self.read_optional_value(ctr_tag, "OsTricoreVector"))
75
+
76
+ # ARM Core
72
77
  os_isr.setOsIsrPriority(self.read_optional_value(ctr_tag, "OsARMIrqLevel"))
73
78
  os_isr.setOsIsrVector(self.read_optional_value(ctr_tag, "OsARMVector"))
79
+ os_isr.setOsARMIrqLevel(self.read_optional_value(ctr_tag, "OsARMIrqLevel"))
80
+ os_isr.setOsARMVector(self.read_optional_value(ctr_tag, "OsARMVector"))
81
+
82
+ # EB Safety OS
83
+ for ref in self.read_ref_value_list(ctr_tag, "OsIsrMkMemoryRegionRef"):
84
+ os_isr.addOsIsrMkMemoryRegionRef(ref)
74
85
 
75
86
  self.logger.debug("Read OsIsr <%s>" % os_isr.getName())
76
87
  os.addOsIsr(os_isr)
@@ -190,9 +201,42 @@ class OsXdmParser(AbstractEbModelParser):
190
201
  def read_os_resources(self, element: ET.Element, os: Os):
191
202
  for ctr_tag in self.find_ctr_tag_list(element, "OsResource"):
192
203
  os_res = OsResource(os, ctr_tag.attrib["name"])
204
+ os_res.setImporterInfo(self.read_attrib(ctr_tag, "IMPORTER_INFO"))
193
205
  os_res.setOsResourceProperty(self.read_value(ctr_tag, "OsResourceProperty"))
194
206
 
195
207
  for ref in self.read_ref_value_list(ctr_tag, "OsResourceAccessingApplication"):
196
208
  os_res.addOsResourceAccessingApplicationRefs(ref)
197
209
 
198
210
  os.addOsResource(os_res)
211
+
212
+ def read_mk_memory_regions(self, element: ET.Element, protection: MkMemoryProtection):
213
+ for ctr_tag in self.find_ctr_tag_list(element, "MkMemoryRegion"):
214
+ # self.logger.info("Read MkMemoryRegion %s" % ctr_tag.attrib["name"])
215
+ region = MkMemoryRegion(protection, ctr_tag.attrib["name"])
216
+ region.setMkMemoryRegionFlags(self.read_value(ctr_tag, "MkMemoryRegionFlags"))
217
+ region.setMkMemoryRegionInitialize(self.read_value(ctr_tag, "MkMemoryRegionInitialize"))
218
+ region.setMkMemoryRegionGlobal(self.read_value(ctr_tag, "MkMemoryRegionGlobal"))
219
+ region.setMkMemoryRegionInitThreadAccess(self.read_value(ctr_tag, "MkMemoryRegionInitThreadAccess"))
220
+ region.setMkMemoryRegionIdleThreadAccess(self.read_value(ctr_tag, "MkMemoryRegionIdleThreadAccess"))
221
+ region.setMkMemoryRegionOsThreadAccess(self.read_value(ctr_tag, "MkMemoryRegionOsThreadAccess"))
222
+ region.setMkMemoryRegionErrorHookAccess(self.read_value(ctr_tag, "MkMemoryRegionErrorHookAccess"))
223
+ region.setMkMemoryRegionProtHookAccess(self.read_value(ctr_tag, "MkMemoryRegionProtHookAccess"))
224
+ region.setMkMemoryRegionShutdownHookAccess(self.read_value(ctr_tag, "MkMemoryRegionShutdownHookAccess"))
225
+ region.setMkMemoryRegionShutdownAccess(self.read_value(ctr_tag, "MkMemoryRegionShutdownAccess"))
226
+ region.setMkMemoryRegionInitializePerCore(self.read_value(ctr_tag, "MkMemoryRegionInitializePerCore"))
227
+ protection.addMkMemoryRegion(region)
228
+
229
+ def read_mk_memory_protection(self, element: ET.Element, kernel: OsMicrokernel):
230
+ ctr_tag = self.find_ctr_tag(element, "MkMemoryProtection")
231
+ if ctr_tag is not None:
232
+ # self.logger.info("Read MkMemoryProtection")
233
+ protection = MkMemoryProtection(kernel, ctr_tag.attrib["name"])
234
+ self.read_mk_memory_regions(ctr_tag, protection)
235
+ kernel.setMkMemoryProtection(protection)
236
+
237
+ def read_os_microkernel(self, element: ET.Element, os: Os):
238
+ ctr_tag = self.find_ctr_tag(element, "OsMicrokernel")
239
+ if ctr_tag is not None:
240
+ kernel = OsMicrokernel(os, ctr_tag.attrib["name"])
241
+ self.read_mk_memory_protection(ctr_tag, kernel)
242
+ os.setOsMicrokernel(kernel)
@@ -1,9 +1,11 @@
1
1
  import xml.etree.ElementTree as ET
2
2
 
3
- from ..models.rte_xdm import Rte, RteBswEventToTaskMapping, RteBswEventToTaskMappingV3, RteBswEventToTaskMappingV4, RteBswModuleInstance, RteEventToTaskMapping, RteEventToTaskMappingV3, RteEventToTaskMappingV4, RteSwComponentInstance
3
+ from ..models.rte_xdm import Rte, RteBswEventToTaskMapping, RteBswEventToTaskMappingV3, RteBswEventToTaskMappingV4, RteBswModuleInstance
4
+ from ..models.rte_xdm import RteEventToTaskMapping, RteEventToTaskMappingV3, RteEventToTaskMappingV4, RteSwComponentInstance
4
5
  from ..models.eb_doc import EBModel
5
6
  from ..parser.eb_parser import AbstractEbModelParser
6
7
 
8
+
7
9
  class RteXdmParser(AbstractEbModelParser):
8
10
  def __init__(self, ) -> None:
9
11
  super().__init__()
@@ -16,16 +18,12 @@ class RteXdmParser(AbstractEbModelParser):
16
18
  rte = doc.getRte()
17
19
  self.read_version(element, rte)
18
20
 
19
- self.logger.info("Parse Rte ARVersion:<%s> SwVersion:<%s>" %
20
- (rte.getArVersion().getVersion(), rte.getSwVersion().getVersion()))
21
-
21
+ self.logger.info("Parse Rte ARVersion:<%s> SwVersion:<%s>" % (rte.getArVersion().getVersion(), rte.getSwVersion().getVersion()))
22
22
  self.rte = rte
23
23
 
24
24
  self.read_rte_bsw_module_instances(element, rte)
25
25
  self.read_rte_sw_component_instances(element, rte)
26
26
 
27
-
28
-
29
27
  def read_rte_bsw_module_instance_event_to_task_mappings(self, element: ET.Element, instance: RteBswModuleInstance):
30
28
  for ctr_tag in self.find_ctr_tag_list(element, "RteBswEventToTaskMapping"):
31
29
  self.logger.debug("Read RteBswEventToTaskMapping <%s>" % ctr_tag.attrib['name'])
@@ -38,7 +36,7 @@ class RteXdmParser(AbstractEbModelParser):
38
36
  mapping.setRteBswActivationOffset(self.read_optional_value(ctr_tag, "RteBswActivationOffset")) \
39
37
  .setRteBswEventPeriod(self.read_optional_value(ctr_tag, "RteBswPeriod")) \
40
38
  .setRteBswPositionInTask(self.read_optional_value(ctr_tag, "RteBswPositionInTask")) \
41
- .setRteBswServerQueueLength(self.read_optional_value(ctr_tag, "RteBswServerQueueLength"))
39
+ .setRteBswServerQueueLength(self.read_optional_value(ctr_tag, "RteBswServerQueueLength"))
42
40
 
43
41
  if isinstance(mapping, RteBswEventToTaskMappingV4):
44
42
  for resource_ref in self.read_ref_value_list(ctr_tag, "RteBswEventRef"):
@@ -56,7 +54,7 @@ class RteXdmParser(AbstractEbModelParser):
56
54
  instance = RteBswModuleInstance(rte, ctr_tag.attrib['name'])
57
55
  instance.setRteBswImplementationRef(self.read_ref_value(ctr_tag, "RteBswImplementationRef")) \
58
56
  .setRteMappedToOsApplicationRef(self.read_optional_ref_value(ctr_tag, "RteMappedToOsApplicationRef"))
59
-
57
+
60
58
  self.read_rte_bsw_module_instance_event_to_task_mappings(ctr_tag, instance)
61
59
  rte.addRteBswModuleInstance(instance)
62
60
 
@@ -71,7 +69,7 @@ class RteXdmParser(AbstractEbModelParser):
71
69
  mapping.setRteActivationOffset(self.read_optional_value(ctr_tag, "RteActivationOffset")) \
72
70
  .setRtePeriod(self.read_optional_value(ctr_tag, "RtePeriod")) \
73
71
  .setRtePositionInTask(self.read_optional_value(ctr_tag, "RtePositionInTask")) \
74
- .setRteServerQueueLength(self.read_optional_value(ctr_tag, "RteServerQueueLength"))
72
+ .setRteServerQueueLength(self.read_optional_value(ctr_tag, "RteServerQueueLength"))
75
73
 
76
74
  if isinstance(mapping, RteEventToTaskMappingV4):
77
75
  for resource_ref in self.read_ref_value_list(ctr_tag, "RteEventRef"):
@@ -80,6 +78,8 @@ class RteXdmParser(AbstractEbModelParser):
80
78
  mapping.setRteEventRef(self.read_ref_value(ctr_tag, "RteEventRef"))
81
79
 
82
80
  mapping.setRteMappedToTaskRef(self.read_optional_ref_value(ctr_tag, "RteMappedToTaskRef"))
81
+
82
+ self.logger.debug("Rte Event %s" % mapping.getRteEventRef().getShortName())
83
83
 
84
84
  instance.addRteEventToTaskMapping(mapping)
85
85
 
@@ -89,7 +89,7 @@ class RteXdmParser(AbstractEbModelParser):
89
89
 
90
90
  instance = RteSwComponentInstance(rte, ctr_tag.attrib['name'])
91
91
  instance.setMappedToOsApplicationRef(self.read_optional_ref_value(ctr_tag, "MappedToOsApplicationRef")) \
92
- .setRteSoftwareComponentInstanceRef(self.read_optional_ref_value(ctr_tag, "RteSoftwareComponentInstanceRef"))
92
+ .setRteSoftwareComponentInstanceRef(self.read_optional_ref_value(ctr_tag, "RteSoftwareComponentInstanceRef"))
93
93
 
94
94
  self.read_rte_sw_component_instance_event_to_task_mappings(ctr_tag, instance)
95
- rte.addRteSwComponentInstance(instance)
95
+ rte.addRteSwComponentInstance(instance)
@@ -10,24 +10,26 @@ class ExcelReporter:
10
10
  self.wb = Workbook()
11
11
  self.logger = logging.getLogger()
12
12
 
13
- def auto_width(self, worksheet: Worksheet):
13
+ def auto_width(self, worksheet, customized={}):
14
14
  dims = {}
15
15
  for row in worksheet.rows:
16
16
  for cell in row:
17
17
  if cell.value:
18
- alignment = cell.alignment # type: Alignment
19
- if (alignment.wrapText is True):
20
- continue
21
18
  dims[cell.column_letter] = max((dims.get(cell.column_letter, 0), len(str(cell.value))))
22
19
 
23
20
  for col, value in dims.items():
24
- # worksheet.column_dimensions[col].width = (value + 2) + 2
25
- worksheet.column_dimensions[col].width = (value + 2)
21
+ self.logger.debug("Sheet:%s , column: %s, width: %d" % (str(worksheet), col, value))
22
+ if col in customized:
23
+ if customized[col] != 0:
24
+ worksheet.column_dimensions[col].width = customized[col]
25
+ else:
26
+ worksheet.column_dimensions[col].width = value + 4
26
27
 
27
28
  def write_title_row(self, sheet: Worksheet, title_row):
28
29
  for idx in range(0, len(title_row)):
29
30
  cell = sheet.cell(row=1, column=idx + 1)
30
31
  cell.value = title_row[idx]
32
+ cell.alignment = Alignment(horizontal="center")
31
33
 
32
34
  def write_cell(self, sheet: Worksheet, row: int, column: int, value, format=None) -> Cell:
33
35
  cell = sheet.cell(row=row, column=column) # type: Cell
@@ -38,6 +40,18 @@ class ExcelReporter:
38
40
  if ('number_format' in format):
39
41
  cell.number_format = format['number_format']
40
42
  return cell
43
+
44
+ def write_cell_center(self, sheet: Worksheet, row: int, column: int, value) -> Cell:
45
+ self.write_cell(sheet, row, column, value, format={"alignment": Alignment(horizontal="center")})
46
+
47
+ def write_bool_cell(self, sheet: Worksheet, row: int, column: int, value) -> Cell:
48
+ self.write_cell_center(sheet, row, column, self.format_boolean(value))
49
+
50
+ def format_boolean(self, value: bool) -> str:
51
+ if value is True:
52
+ return "Y"
53
+ else:
54
+ return ""
41
55
 
42
56
  def save(self, name: str):
43
57
  self.wb.save(name)