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.
- eb_model/cli/pref_system_importer_cli.py +22 -13
- eb_model/cli/rte_xdm_2_xls_cli.py +28 -27
- eb_model/models/abstract.py +20 -8
- eb_model/models/importer_xdm.py +3 -1
- eb_model/models/nvm_xdm.py +321 -12
- eb_model/models/os_xdm.py +320 -55
- eb_model/models/rte_xdm.py +16 -11
- eb_model/parser/eb_parser.py +28 -20
- eb_model/parser/nvm_xdm_parser.py +89 -12
- eb_model/parser/os_xdm_parser.py +56 -12
- eb_model/parser/rte_xdm_parser.py +11 -11
- eb_model/reporter/excel_reporter/abstract.py +20 -6
- eb_model/reporter/excel_reporter/nvm_xdm.py +97 -7
- eb_model/reporter/excel_reporter/os_xdm.py +104 -20
- eb_model/reporter/excel_reporter/rte_xdm.py +15 -4
- eb_model/tests/models/test_abstract.py +201 -0
- eb_model/tests/models/test_eb_doc.py +66 -0
- eb_model/tests/models/test_eclipse_project.py +21 -0
- eb_model/tests/models/test_importer_xdm.py +45 -40
- eb_model/tests/parser/__init__.py +0 -0
- eb_model/tests/parser/test_nvm_xdm_parser.py +259 -0
- eb_model/tests/parser/test_os_xdm_parser.py +396 -0
- eb_model/writer/text_writer.py +4 -2
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/METADATA +12 -1
- py_eb_model-1.1.8.dist-info/RECORD +48 -0
- py_eb_model-1.1.6.dist-info/RECORD +0 -42
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/LICENSE +0 -0
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/WHEEL +0 -0
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/entry_points.txt +0 -0
- {py_eb_model-1.1.6.dist-info → py_eb_model-1.1.8.dist-info}/top_level.txt +0 -0
eb_model/parser/eb_parser.py
CHANGED
@@ -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
|
-
|
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)
|
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
|
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
|
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
|
71
|
+
if 'value' not in tag.attrib:
|
72
72
|
return default_value
|
73
73
|
enable = self.read_attrib(tag, 'ENABLE')
|
74
|
-
if
|
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
|
-
|
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
|
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 == "
|
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("
|
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
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
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
|
|
eb_model/parser/os_xdm_parser.py
CHANGED
@@ -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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
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
|
-
#
|
70
|
+
# Infineon Aurix Tricore
|
70
71
|
os_isr.setOsIsrPriority(self.read_optional_value(ctr_tag, "OsTricoreIrqLevel"))
|
71
|
-
|
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
|
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
|
-
|
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
|
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
|
-
|
25
|
-
|
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)
|