py-eb-model 1.1.6__py3-none-any.whl → 1.1.7__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.
@@ -21,6 +21,11 @@ class AbstractEventToTaskMapping(EcucParamConfContainerDef):
21
21
 
22
22
  def getRtePositionInTask(self):
23
23
  return self.rtePositionInTask
24
+
25
+ def getRtePositionInTaskNumber(self) -> int:
26
+ if self.rtePositionInTask is None:
27
+ return 0
28
+ return self.rtePositionInTask
24
29
 
25
30
  def setRtePositionInTask(self, value):
26
31
  self.rtePositionInTask = value
@@ -185,7 +190,7 @@ class RteEventToTaskMappingV3(RteEventToTaskMapping):
185
190
  def __init__(self, parent, name):
186
191
  super().__init__(parent, name)
187
192
 
188
- self.rteEventRef = None
193
+ self.rteEventRef: EcucParamConfContainerDef = None
189
194
 
190
195
  def getRteEventRef(self) -> EcucRefType:
191
196
  return self.rteEventRef
@@ -199,17 +204,17 @@ class RteEventToTaskMappingV4(RteEventToTaskMapping):
199
204
  def __init__(self, parent, name):
200
205
  super().__init__(parent, name)
201
206
 
202
- self.rteEventRefs = []
207
+ self.rteEventRefs: List[EcucRefType] = []
203
208
 
204
- def getRteEventRefs(self):
209
+ def getRteEventRefs(self) -> List[EcucRefType]:
205
210
  return self.rteEventRefs
206
211
 
207
- def addRteEventRef(self, value):
212
+ def addRteEventRef(self, value: EcucRefType):
208
213
  if value is not None:
209
214
  self.rteEventRefs.append(value)
210
215
  return self
211
216
 
212
- def getRteEventRef(self):
217
+ def getRteEventRef(self) -> EcucRefType:
213
218
  if len(self.rteEventRefs) != 1:
214
219
  raise ValueError("Unsupported RteEventRef of RteEventToTaskMapping <%s> " % self.name)
215
220
  return self.rteEventRefs[0]
@@ -341,12 +346,12 @@ class RteBswEventToTaskMappingV3(RteBswEventToTaskMapping):
341
346
  def __init__(self, parent, name):
342
347
  super().__init__(parent, name)
343
348
 
344
- self.rteBswEventRef = None # type: EcucRefType
349
+ self.rteBswEventRef: EcucRefType = None
345
350
 
346
- def getRteBswEventRef(self):
351
+ def getRteBswEventRef(self) -> EcucRefType:
347
352
  return self.rteBswEventRef
348
353
 
349
- def setRteBswEventRef(self, value):
354
+ def setRteBswEventRef(self, value: EcucRefType):
350
355
  if value is not None:
351
356
  self.rteBswEventRef = value
352
357
  return self
@@ -356,16 +361,16 @@ class RteBswEventToTaskMappingV4(RteBswEventToTaskMapping):
356
361
  def __init__(self, parent, name):
357
362
  super().__init__(parent, name)
358
363
 
359
- self.rteBswEventRefs = [] # type: List[EcucRefType]
364
+ self.rteBswEventRefs: List[EcucRefType] = []
360
365
 
361
- def getRteBswEventRefs(self) -> EcucRefType:
366
+ def getRteBswEventRefs(self) -> List[EcucRefType]:
362
367
  return self.rteBswEventRefs
363
368
 
364
369
  def addRteBswEventRef(self, value: EcucRefType):
365
370
  self.rteBswEventRefs.append(value)
366
371
  return self
367
372
 
368
- def getRteBswEventRef(self):
373
+ def getRteBswEventRef(self) -> EcucRefType:
369
374
  if len(self.rteBswEventRefs) != 1:
370
375
  raise ValueError("Unsupported RteEventRef of RteEventToTaskMapping <%s> " % self.name)
371
376
  return self.rteBswEventRefs[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)
@@ -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")
@@ -66,11 +67,21 @@ class OsXdmParser(AbstractEbModelParser):
66
67
  .setOsStacksize(int(self.read_value(ctr_tag, "OsStacksize"))) \
67
68
  .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,12 @@ class ExcelReporter:
38
40
  if ('number_format' in format):
39
41
  cell.number_format = format['number_format']
40
42
  return cell
43
+
44
+ def format_boolean(self, value: bool) -> str:
45
+ if value is True:
46
+ return "Y"
47
+ else:
48
+ return "N"
41
49
 
42
50
  def save(self, name: str):
43
51
  self.wb.save(name)
@@ -49,24 +49,37 @@ class OsXdmXlsWriter(ExcelReporter):
49
49
  def write_os_isrs(self, doc: EBModel):
50
50
  sheet = self.wb.create_sheet("OsIsr", 1)
51
51
 
52
- title_row = ["Name", "OsApplication", "OsIsrCategory", "OsStacksize", "OsIsrPriority", "OsIsrVector"]
52
+ title_row = [
53
+ "Name", "OsApplication", "OsIsrCategory", "OsStacksize", "OsIsrPriority",
54
+ "OsIsrVector", "MkMemoryRegion"]
53
55
  self.write_title_row(sheet, title_row)
54
56
 
55
57
  row = 2
56
58
  for os_isr in doc.getOs().getOsIsrList():
57
- self.write_cell(sheet, row, 1, os_isr.getName())
59
+ self.write_cell(sheet, row, 1, os_isr.getName(), {'alignment': Alignment(vertical="top")})
58
60
  os_app = doc.getOs().getOsIsrOsApplication(os_isr.getName())
59
61
  if os_app is not None:
60
- self.write_cell(sheet, row, 2, os_app.getName())
61
- self.write_cell(sheet, row, 3, os_isr.getOsIsrCategory())
62
- self.write_cell(sheet, row, 4, os_isr.getOsStacksize())
63
- self.write_cell(sheet, row, 5, os_isr.getOsIsrPriority())
64
- self.write_cell(sheet, row, 6, os_isr.getOsIsrVector())
62
+ self.write_cell(sheet, row, 2, os_app.getName(),
63
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
64
+ self.write_cell(sheet, row, 3, os_isr.getOsIsrCategory(),
65
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
66
+ self.write_cell(sheet, row, 4, os_isr.getOsStacksize(),
67
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
68
+ self.write_cell(sheet, row, 5, os_isr.getOsIsrPriority(),
69
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
70
+ self.write_cell(sheet, row, 6, os_isr.getOsIsrVector(),
71
+ format={'alignment': Alignment(horizontal="center", vertical="top")})
72
+ if len(os_isr.getOsIsrMkMemoryRegionRefs()) > 1:
73
+ self.write_cell(sheet, row, 7, "\n".join(map(lambda a: a.getShortName(), os_isr.getOsIsrMkMemoryRegionRefs())),
74
+ {'alignment': Alignment(wrapText=True, vertical="top")})
75
+ else:
76
+ self.write_cell(sheet, row, 7, "\n".join(map(lambda a: a.getShortName(), os_isr.getOsIsrMkMemoryRegionRefs())),
77
+ {'alignment': Alignment(vertical="top")})
65
78
  row += 1
66
79
 
67
80
  self.logger.debug("Write OsIsr <%s>" % os_isr.getName())
68
81
 
69
- self.auto_width(sheet)
82
+ self.auto_width(sheet, {"G": 25})
70
83
 
71
84
  def write_os_schedule_tables(self, doc: EBModel):
72
85
  sheet = self.wb.create_sheet("OsScheduleTable", 2)
@@ -77,9 +90,12 @@ class OsXdmXlsWriter(ExcelReporter):
77
90
  row = 2
78
91
  for os_schedule_table in doc.getOs().getOsScheduleTableList():
79
92
  self.write_cell(sheet, row, 1, os_schedule_table.getName())
80
- self.write_cell(sheet, row, 2, os_schedule_table.getOsScheduleTableDuration())
81
- self.write_cell(sheet, row, 3, os_schedule_table.getOsScheduleTableRepeating())
82
- self.write_cell(sheet, row, 4, os_schedule_table.getOsScheduleTableCounterRef().getShortName())
93
+ self.write_cell(sheet, row, 2, os_schedule_table.getOsScheduleTableDuration(),
94
+ format={'alignment': Alignment(horizontal="center")})
95
+ self.write_cell(sheet, row, 3, os_schedule_table.getOsScheduleTableRepeating(),
96
+ format={'alignment': Alignment(horizontal="center")})
97
+ self.write_cell(sheet, row, 4, os_schedule_table.getOsScheduleTableCounterRef().getShortName(),
98
+ format={'alignment': Alignment(horizontal="center")})
83
99
  row += 1
84
100
 
85
101
  self.logger.debug("Write OsScheduleTable <%s>" % os_schedule_table.getName())
@@ -95,11 +111,16 @@ class OsXdmXlsWriter(ExcelReporter):
95
111
  row = 2
96
112
  for os_counter in doc.getOs().getOsCounterList():
97
113
  self.write_cell(sheet, row, 1, os_counter.getName())
98
- self.write_cell(sheet, row, 2, os_counter.getOsCounterMaxAllowedValue())
99
- self.write_cell(sheet, row, 3, os_counter.getOsCounterMinCycle())
100
- self.write_cell(sheet, row, 4, os_counter.getOsCounterTicksPerBase())
101
- self.write_cell(sheet, row, 5, os_counter.getOsCounterType())
102
- self.write_cell(sheet, row, 6, os_counter.getOsSecondsPerTick())
114
+ self.write_cell(sheet, row, 2, os_counter.getOsCounterMaxAllowedValue(),
115
+ format={'alignment': Alignment(horizontal="center")})
116
+ self.write_cell(sheet, row, 3, os_counter.getOsCounterMinCycle(),
117
+ format={'alignment': Alignment(horizontal="center")})
118
+ self.write_cell(sheet, row, 4, os_counter.getOsCounterTicksPerBase(),
119
+ format={'alignment': Alignment(horizontal="center")})
120
+ self.write_cell(sheet, row, 5, os_counter.getOsCounterType(),
121
+ format={'alignment': Alignment(horizontal="center")})
122
+ self.write_cell(sheet, row, 6, os_counter.getOsSecondsPerTick(),
123
+ format={'alignment': Alignment(horizontal="center")})
103
124
  row += 1
104
125
 
105
126
  self.logger.debug("Write OsScheduleTable <%s>" % os_counter.getName())
@@ -109,7 +130,7 @@ class OsXdmXlsWriter(ExcelReporter):
109
130
  def write_expiry_points(self, doc: EBModel):
110
131
  sheet = self.wb.create_sheet("OsScheduleTableExpiryPoint", 4)
111
132
 
112
- title_row = ["ExpiryPoint", "OsScheduleTable", "OsCounter" "Offset (ms)", "Task"]
133
+ title_row = ["ExpiryPoint", "OsScheduleTable", "OsCounter", "Offset (ms)", "Task"]
113
134
  self.write_title_row(sheet, title_row)
114
135
 
115
136
  row = 2
@@ -119,15 +140,77 @@ class OsXdmXlsWriter(ExcelReporter):
119
140
  for expiry_point in expiry_point_list:
120
141
  self.write_cell(sheet, row, 1, expiry_point.getName())
121
142
  self.write_cell(sheet, row, 2, table.getName())
122
- self.write_cell(sheet, row, 3, table.getOsScheduleTableCounterRef().getShortName())
123
- self.write_cell(sheet, row, 4, expiry_point.getOsScheduleTblExpPointOffset())
124
- self.write_cell(sheet, row, 5, len(expiry_point.getOsScheduleTableTaskActivationList()))
143
+ self.write_cell(sheet, row, 3, table.getOsScheduleTableCounterRef().getShortName(),
144
+ format={'alignment': Alignment(horizontal="center")})
145
+ self.write_cell(sheet, row, 4, expiry_point.getOsScheduleTblExpPointOffset(),
146
+ format={'alignment': Alignment(horizontal="center")})
147
+ self.write_cell(sheet, row, 5, len(expiry_point.getOsScheduleTableTaskActivationList()),
148
+ format={'alignment': Alignment(horizontal="center")})
125
149
  row += 1
126
150
 
127
151
  self.logger.debug("Write OsScheduleTable <%s>" % table.getName())
128
152
 
129
153
  self.auto_width(sheet)
130
154
 
155
+ def mk_memory_region_exists(self, doc: EBModel) -> bool:
156
+ mk = doc.getOs().getOsMicrokernel()
157
+ if mk is None:
158
+ return False
159
+
160
+ protection = mk.getMkMemoryProtection()
161
+ if protection is None:
162
+ return False
163
+
164
+ if len(protection.getMkMemoryRegionList()) <= 0:
165
+ return False
166
+
167
+ return True
168
+
169
+ def write_mk_memory_regions(self, doc: EBModel):
170
+ if self.mk_memory_region_exists(doc) is True:
171
+ sheet = self.wb.create_sheet("MkMemoryRegion", 5)
172
+
173
+ title_row = [
174
+ "Name", "Flags", "Initialize", "Global", "InitThread",
175
+ "IdleThread", "OsThread", "ErrorHook", "ProtHook", "ShutdownHook",
176
+ "Shutdown", "Kernel", "InitializePerCore"
177
+ ]
178
+ self.write_title_row(sheet, title_row)
179
+
180
+ row = 2
181
+ for region in doc.getOs().getOsMicrokernel().getMkMemoryProtection().getMkMemoryRegionList():
182
+ self.write_cell(sheet, row, 1, region.getName())
183
+ self.write_cell(sheet, row, 2, region.getMkMemoryRegionFlags(),
184
+ format={'alignment': Alignment(horizontal="center")})
185
+ self.write_cell(sheet, row, 3, self.format_boolean(region.getMkMemoryRegionInitialize()),
186
+ format={'alignment': Alignment(horizontal="center")})
187
+ self.write_cell(sheet, row, 4, self.format_boolean(region.getMkMemoryRegionGlobal()),
188
+ format={'alignment': Alignment(horizontal="center")})
189
+ self.write_cell(sheet, row, 5, self.format_boolean(region.getMkMemoryRegionInitThreadAccess()),
190
+ format={'alignment': Alignment(horizontal="center")})
191
+ self.write_cell(sheet, row, 6, self.format_boolean(region.getMkMemoryRegionIdleThreadAccess()),
192
+ format={'alignment': Alignment(horizontal="center")})
193
+ self.write_cell(sheet, row, 7, self.format_boolean(region.getMkMemoryRegionOsThreadAccess()),
194
+ format={'alignment': Alignment(horizontal="center")})
195
+ self.write_cell(sheet, row, 8, self.format_boolean(region.getMkMemoryRegionErrorHookAccess()),
196
+ format={'alignment': Alignment(horizontal="center")})
197
+ self.write_cell(sheet, row, 9, self.format_boolean(region.getMkMemoryRegionProtHookAccess()),
198
+ format={'alignment': Alignment(horizontal="center")})
199
+ self.write_cell(sheet, row, 10, self.format_boolean(region.getMkMemoryRegionShutdownHookAccess()),
200
+ format={'alignment': Alignment(horizontal="center")})
201
+ self.write_cell(sheet, row, 11, self.format_boolean(region.getMkMemoryRegionShutdownAccess()),
202
+ format={'alignment': Alignment(horizontal="center")})
203
+ self.write_cell(sheet, row, 12, self.format_boolean(region.getMkMemoryRegionKernelAccess()),
204
+ format={'alignment': Alignment(horizontal="center")})
205
+ self.write_cell(sheet, row, 13, self.format_boolean(region.getMkMemoryRegionInitializePerCore()),
206
+ format={'alignment': Alignment(horizontal="center")})
207
+
208
+ row += 1
209
+
210
+ self.logger.debug("Write MkMemoryRegion <%s>" % region.getName())
211
+
212
+ self.auto_width(sheet, {"B": 15})
213
+
131
214
  def write(self, filename, doc: EBModel, options={"skip_os_task": False}):
132
215
  self.logger.info("Writing <%s>" % filename)
133
216
 
@@ -137,5 +220,6 @@ class OsXdmXlsWriter(ExcelReporter):
137
220
  self.write_os_schedule_tables(doc)
138
221
  self.write_os_counters(doc)
139
222
  self.write_expiry_points(doc)
223
+ self.write_mk_memory_regions(doc)
140
224
 
141
225
  self.save(filename)