py-eb-model 1.1.5__py3-none-any.whl → 1.1.6__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.
@@ -0,0 +1,63 @@
1
+ import argparse
2
+ import pkg_resources
3
+ import logging
4
+ import sys
5
+ import os.path
6
+
7
+ from ..parser import NvMXdmParser
8
+ from ..models import EBModel
9
+ from ..reporter import NvMXdmXlsWriter
10
+
11
+
12
+ def main():
13
+ version = pkg_resources.require("py_eb_model")[0].version
14
+
15
+ ap = argparse.ArgumentParser()
16
+ ap.description = "Version: %s" % version
17
+ ap.add_argument("-v", "--verbose", required=False, help="Print debug information.", action="store_true")
18
+ ap.add_argument("--log", required=False, help="Specify the log file name.")
19
+ ap.add_argument("INPUT", help="The path of NvM.xdm.")
20
+ ap.add_argument("OUTPUT", help="The path of excel file.")
21
+
22
+ args = ap.parse_args()
23
+
24
+ logger = logging.getLogger()
25
+
26
+ formatter = logging.Formatter('[%(levelname)s] : %(message)s')
27
+
28
+ stdout_handler = logging.StreamHandler(sys.stderr)
29
+ stdout_handler.setFormatter(formatter)
30
+
31
+ if args.log:
32
+ if os.path.exists(args.log):
33
+ os.remove(args.log)
34
+
35
+ file_handler = logging.FileHandler(args.log)
36
+ file_handler.setFormatter(formatter)
37
+ file_handler.setLevel(logging.DEBUG)
38
+
39
+ logger.setLevel(logging.DEBUG)
40
+
41
+ if args.verbose:
42
+ stdout_handler.setLevel(logging.DEBUG)
43
+ else:
44
+ stdout_handler.setLevel(logging.INFO)
45
+
46
+ if args.log:
47
+ logger.addHandler(file_handler)
48
+ logger.addHandler(stdout_handler)
49
+
50
+ try:
51
+ doc = EBModel.getInstance()
52
+
53
+ parser = NvMXdmParser()
54
+ parser.parse_xdm(args.INPUT, doc)
55
+
56
+ options = {}
57
+
58
+ writer = NvMXdmXlsWriter()
59
+ writer.write(args.OUTPUT, doc, options)
60
+
61
+ except Exception as e:
62
+ logger.error(e)
63
+ raise e
@@ -8,7 +8,7 @@ class EcucObject(metaclass=ABCMeta):
8
8
  if type(self) is EcucObject:
9
9
  raise ValueError("Abstract EcucObject cannot be initialized.")
10
10
 
11
- self.name = name
11
+ self.name = name # type: str
12
12
  self.parent = parent # type: EcucObject
13
13
 
14
14
  if isinstance(parent, EcucParamConfContainerDef):
@@ -30,6 +30,11 @@ class EcucObject(metaclass=ABCMeta):
30
30
 
31
31
  def getFullName(self) -> str:
32
32
  return self.parent.getFullName() + "/" + self.name
33
+
34
+
35
+ class EcucEnumerationParamDef(EcucObject):
36
+ def __init__(self, parent, name):
37
+ super().__init__(parent, name)
33
38
 
34
39
 
35
40
  class EcucParamConfContainerDef(EcucObject):
eb_model/models/eb_doc.py CHANGED
@@ -1,7 +1,8 @@
1
- from .importer_xdm import SystemDescriptionImporter
2
- from .rte_xdm import Rte
3
- from .os_xdm import Os
4
- from .abstract import EcucParamConfContainerDef, EcucObject
1
+ from ..models.nvm_xdm import NvM
2
+ from ..models.importer_xdm import SystemDescriptionImporter
3
+ from ..models.rte_xdm import Rte
4
+ from ..models.os_xdm import Os
5
+ from ..models.abstract import EcucParamConfContainerDef, EcucObject
5
6
 
6
7
 
7
8
  class AbstractModel(EcucParamConfContainerDef):
@@ -44,6 +45,9 @@ class EBModel(AbstractModel):
44
45
  return self.find_object(referred_name, EBModel.getInstance())
45
46
 
46
47
  def getOs(self) -> Os:
48
+ '''
49
+ get the Os Container
50
+ '''
47
51
  container = EcucParamConfContainerDef(self, "Os")
48
52
  Os(container)
49
53
  return self.find("/Os/Os")
@@ -52,6 +56,11 @@ class EBModel(AbstractModel):
52
56
  container = EcucParamConfContainerDef(self, "Rte")
53
57
  Rte(container)
54
58
  return self.find("/Rte/Rte")
59
+
60
+ def getNvM(self) -> NvM:
61
+ container = EcucParamConfContainerDef(self, "NvM")
62
+ NvM(container)
63
+ return self.find("/NvM/NvM")
55
64
 
56
65
 
57
66
  class PreferenceModel(AbstractModel):
@@ -0,0 +1,347 @@
1
+ from typing import List
2
+ from ..models.abstract import EcucParamConfContainerDef, Module, EcucRefType
3
+
4
+
5
+ class NvM(Module):
6
+ def __init__(self, parent):
7
+ super().__init__(parent, "NvM")
8
+
9
+ self.NvMBlockDescriptors = [] # type: List[NvMBlockDescriptor]
10
+
11
+ def getNvMBlockDescriptorList(self):
12
+ return self.NvMBlockDescriptors
13
+
14
+ def addNvMBlockDescriptor(self, value):
15
+ if value is not None:
16
+ self.NvMBlockDescriptors.append(value)
17
+ return self
18
+
19
+
20
+ class NvMBlockDescriptor(EcucParamConfContainerDef):
21
+ def __init__(self, parent, name):
22
+ super().__init__(parent, name)
23
+
24
+ self.nvMBlockCrcType = None # type: str # optional
25
+ self.nvMBlockHeaderInclude = None # type: int # optional
26
+ self.nvMBlockJobPriority = None # type: str # required
27
+ self.nvMBlockManagementType = None # type: str # required
28
+ self.nvMBlockUseAutoValidation = None # required
29
+ self.nvMBlockUseCompression = None # required
30
+ self.nvMBlockUseCrc = None # required
31
+ self.nvMBlockUseCRCCompMechanism = None # required
32
+ self.NvMBlockUsePort = None # required
33
+ self.nvMBlockUseSetRamBlockStatus = None # required
34
+ self.nvMBlockUseSyncMechanism = None # required
35
+ self.nvMBlockWriteProt = None # required
36
+ self.nvMBswMBlockStatusInformation = None # required
37
+ self.nvMCalcRamBlockCrc = None # optional
38
+ self.nvMMaxNumOfReadRetries = None # required
39
+ self.nvMMaxNumOfWriteRetries = None # required
40
+ self.nvMNvBlockBaseNumber = None # required
41
+ self.nvMNvBlockLength = None # type: int # required
42
+ self.nvMNvBlockNum = None # type: int # required
43
+ self.nvMNvramBlockIdentifier = None # required
44
+ self.nvMNvramDeviceId = None # required
45
+ self.nvMRamBlockDataAddress = None # optional
46
+ self.nvMReadRamBlockFromNvCallback = None # optional
47
+ self.nvMResistantToChangedSw = None # required
48
+ self.nvMRomBlockDataAddress = None # optional
49
+ self.nvMRomBlockNum = None # required
50
+ self.nvMSelectBlockForFirstInitAll = None # optional
51
+ self.nvMSelectBlockForReadAll = None # required
52
+ self.nvMSelectBlockForWriteAll = None # required
53
+ self.nvMStaticBlockIDCheck = None # required
54
+ self.nvMWriteBlockOnce = None # required
55
+ self.nvMWriteRamBlockToNvCallback = None # optional
56
+ self.nvMWriteVerification = None # required
57
+ self.nvMWriteVerificationDataSize = None # required
58
+ self.nvMBlockCipheringRef = None # optional
59
+ self.nvMBlockEcucPartitionRef = None # type: EcucRefType # required
60
+
61
+ def getNvMBlockCrcType(self):
62
+ return self.nvMBlockCrcType
63
+
64
+ def setNvMBlockCrcType(self, value):
65
+ if value is not None:
66
+ self.nvMBlockCrcType = value
67
+ return self
68
+
69
+ def getNvMBlockHeaderInclude(self):
70
+ return self.nvMBlockHeaderInclude
71
+
72
+ def setNvMBlockHeaderInclude(self, value):
73
+ if value is not None:
74
+ self.nvMBlockHeaderInclude = value
75
+ return self
76
+
77
+ def getNvMBlockJobPriority(self):
78
+ return self.nvMBlockJobPriority
79
+
80
+ def setNvMBlockJobPriority(self, value):
81
+ if value is not None:
82
+ self.nvMBlockJobPriority = value
83
+ return self
84
+
85
+ def getNvMBlockManagementType(self):
86
+ return self.nvMBlockManagementType
87
+
88
+ def setNvMBlockManagementType(self, value):
89
+ if value is not None:
90
+ self.nvMBlockManagementType = value
91
+ return self
92
+
93
+ def getNvMBlockUseAutoValidation(self):
94
+ return self.nvMBlockUseAutoValidation
95
+
96
+ def setNvMBlockUseAutoValidation(self, value):
97
+ if value is not None:
98
+ self.nvMBlockUseAutoValidation = value
99
+ return self
100
+
101
+ def getNvMBlockUseCompression(self):
102
+ return self.nvMBlockUseCompression
103
+
104
+ def setNvMBlockUseCompression(self, value):
105
+ if value is not None:
106
+ self.nvMBlockUseCompression = value
107
+ return self
108
+
109
+ def getNvMBlockUseCrc(self):
110
+ return self.nvMBlockUseCrc
111
+
112
+ def setNvMBlockUseCrc(self, value):
113
+ if value is not None:
114
+ self.nvMBlockUseCrc = value
115
+ return self
116
+
117
+ def getNvMBlockUseCRCCompMechanism(self):
118
+ return self.nvMBlockUseCRCCompMechanism
119
+
120
+ def setNvMBlockUseCRCCompMechanism(self, value):
121
+ if value is not None:
122
+ self.nvMBlockUseCRCCompMechanism = value
123
+ return self
124
+
125
+ def getNvMBlockUsePort(self):
126
+ return self.NvMBlockUsePort
127
+
128
+ def setNvMBlockUsePort(self, value):
129
+ if value is not None:
130
+ self.NvMBlockUsePort = value
131
+ return self
132
+
133
+ def getNvMBlockUseSetRamBlockStatus(self):
134
+ return self.nvMBlockUseSetRamBlockStatus
135
+
136
+ def setNvMBlockUseSetRamBlockStatus(self, value):
137
+ if value is not None:
138
+ self.nvMBlockUseSetRamBlockStatus = value
139
+ return self
140
+
141
+ def getNvMBlockUseSyncMechanism(self):
142
+ return self.nvMBlockUseSyncMechanism
143
+
144
+ def setNvMBlockUseSyncMechanism(self, value):
145
+ if value is not None:
146
+ self.nvMBlockUseSyncMechanism = value
147
+ return self
148
+
149
+ def getNvMBlockWriteProt(self):
150
+ return self.nvMBlockWriteProt
151
+
152
+ def setNvMBlockWriteProt(self, value):
153
+ if value is not None:
154
+ self.nvMBlockWriteProt = value
155
+ return self
156
+
157
+ def getNvMBswMBlockStatusInformation(self):
158
+ return self.nvMBswMBlockStatusInformation
159
+
160
+ def setNvMBswMBlockStatusInformation(self, value):
161
+ if value is not None:
162
+ self.nvMBswMBlockStatusInformation = value
163
+ return self
164
+
165
+ def getNvMCalcRamBlockCrc(self):
166
+ return self.nvMCalcRamBlockCrc
167
+
168
+ def setNvMCalcRamBlockCrc(self, value):
169
+ if value is not None:
170
+ self.nvMCalcRamBlockCrc = value
171
+ return self
172
+
173
+ def getNvMMaxNumOfReadRetries(self):
174
+ return self.nvMMaxNumOfReadRetries
175
+
176
+ def setNvMMaxNumOfReadRetries(self, value):
177
+ if value is not None:
178
+ self.nvMMaxNumOfReadRetries = value
179
+ return self
180
+
181
+ def getNvMMaxNumOfWriteRetries(self):
182
+ return self.nvMMaxNumOfWriteRetries
183
+
184
+ def setNvMMaxNumOfWriteRetries(self, value):
185
+ if value is not None:
186
+ self.nvMMaxNumOfWriteRetries = value
187
+ return self
188
+
189
+ def getNvMNvBlockBaseNumber(self):
190
+ return self.nvMNvBlockBaseNumber
191
+
192
+ def setNvMNvBlockBaseNumber(self, value):
193
+ if value is not None:
194
+ self.nvMNvBlockBaseNumber = value
195
+ return self
196
+
197
+ def getNvMNvBlockLength(self):
198
+ return self.nvMNvBlockLength
199
+
200
+ def setNvMNvBlockLength(self, value):
201
+ if value is not None:
202
+ self.nvMNvBlockLength = value
203
+ return self
204
+
205
+ def getNvMNvBlockNum(self):
206
+ return self.nvMNvBlockNum
207
+
208
+ def setNvMNvBlockNum(self, value):
209
+ if value is not None:
210
+ self.nvMNvBlockNum = value
211
+ return self
212
+
213
+ def getNvMNvramBlockIdentifier(self):
214
+ return self.nvMNvramBlockIdentifier
215
+
216
+ def setNvMNvramBlockIdentifier(self, value):
217
+ if value is not None:
218
+ self.nvMNvramBlockIdentifier = value
219
+ return self
220
+
221
+ def getNvMNvramDeviceId(self):
222
+ return self.nvMNvramDeviceId
223
+
224
+ def setNvMNvramDeviceId(self, value):
225
+ if value is not None:
226
+ self.nvMNvramDeviceId = value
227
+ return self
228
+
229
+ def getNvMRamBlockDataAddress(self):
230
+ return self.nvMRamBlockDataAddress
231
+
232
+ def setNvMRamBlockDataAddress(self, value):
233
+ if value is not None:
234
+ self.nvMRamBlockDataAddress = value
235
+ return self
236
+
237
+ def getNvMReadRamBlockFromNvCallback(self):
238
+ return self.nvMReadRamBlockFromNvCallback
239
+
240
+ def setNvMReadRamBlockFromNvCallback(self, value):
241
+ if value is not None:
242
+ self.nvMReadRamBlockFromNvCallback = value
243
+ return self
244
+
245
+ def getNvMResistantToChangedSw(self):
246
+ return self.nvMResistantToChangedSw
247
+
248
+ def setNvMResistantToChangedSw(self, value):
249
+ if value is not None:
250
+ self.nvMResistantToChangedSw = value
251
+ return self
252
+
253
+ def getNvMRomBlockDataAddress(self):
254
+ return self.nvMRomBlockDataAddress
255
+
256
+ def setNvMRomBlockDataAddress(self, value):
257
+ if value is not None:
258
+ self.nvMRomBlockDataAddress = value
259
+ return self
260
+
261
+ def getNvMRomBlockNum(self):
262
+ return self.nvMRomBlockNum
263
+
264
+ def setNvMRomBlockNum(self, value):
265
+ if value is not None:
266
+ self.nvMRomBlockNum = value
267
+ return self
268
+
269
+ def getNvMSelectBlockForFirstInitAll(self):
270
+ return self.nvMSelectBlockForFirstInitAll
271
+
272
+ def setNvMSelectBlockForFirstInitAll(self, value):
273
+ if value is not None:
274
+ self.nvMSelectBlockForFirstInitAll = value
275
+ return self
276
+
277
+ def getNvMSelectBlockForReadAll(self):
278
+ return self.nvMSelectBlockForReadAll
279
+
280
+ def setNvMSelectBlockForReadAll(self, value):
281
+ if value is not None:
282
+ self.nvMSelectBlockForReadAll = value
283
+ return self
284
+
285
+ def getNvMSelectBlockForWriteAll(self):
286
+ return self.nvMSelectBlockForWriteAll
287
+
288
+ def setNvMSelectBlockForWriteAll(self, value):
289
+ if value is not None:
290
+ self.nvMSelectBlockForWriteAll = value
291
+ return self
292
+
293
+ def getNvMStaticBlockIDCheck(self):
294
+ return self.nvMStaticBlockIDCheck
295
+
296
+ def setNvMStaticBlockIDCheck(self, value):
297
+ if value is not None:
298
+ self.nvMStaticBlockIDCheck = value
299
+ return self
300
+
301
+ def getNvMWriteBlockOnce(self):
302
+ return self.nvMWriteBlockOnce
303
+
304
+ def setNvMWriteBlockOnce(self, value):
305
+ if value is not None:
306
+ self.nvMWriteBlockOnce = value
307
+ return self
308
+
309
+ def getNvMWriteRamBlockToNvCallback(self):
310
+ return self.nvMWriteRamBlockToNvCallback
311
+
312
+ def setNvMWriteRamBlockToNvCallback(self, value):
313
+ if value is not None:
314
+ self.nvMWriteRamBlockToNvCallback = value
315
+ return self
316
+
317
+ def getNvMWriteVerification(self):
318
+ return self.nvMWriteVerification
319
+
320
+ def setNvMWriteVerification(self, value):
321
+ if value is not None:
322
+ self.nvMWriteVerification = value
323
+ return self
324
+
325
+ def getNvMWriteVerificationDataSize(self):
326
+ return self.nvMWriteVerificationDataSize
327
+
328
+ def setNvMWriteVerificationDataSize(self, value):
329
+ if value is not None:
330
+ self.nvMWriteVerificationDataSize = value
331
+ return self
332
+
333
+ def getNvMBlockCipheringRef(self):
334
+ return self.nvMBlockCipheringRef
335
+
336
+ def setNvMBlockCipheringRef(self, value):
337
+ if value is not None:
338
+ self.nvMBlockCipheringRef = value
339
+ return self
340
+
341
+ def getNvMBlockEcucPartitionRef(self) -> EcucRefType:
342
+ return self.nvMBlockEcucPartitionRef
343
+
344
+ def setNvMBlockEcucPartitionRef(self, value: EcucRefType):
345
+ if value is not None:
346
+ self.nvMBlockEcucPartitionRef = value
347
+ return self
eb_model/models/os_xdm.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from typing import Dict, List # noqa F401
2
2
  import logging
3
- from ..models.abstract import EcucParamConfContainerDef, EcucObject, EcucRefType, Module
3
+ from ..models.abstract import EcucEnumerationParamDef, EcucParamConfContainerDef, EcucObject, EcucRefType, Module
4
4
 
5
5
 
6
6
  class OsAlarmAction(EcucParamConfContainerDef):
@@ -483,10 +483,38 @@ class OsCounter(EcucParamConfContainerDef):
483
483
 
484
484
 
485
485
  class OsResource(EcucParamConfContainerDef):
486
- def __init__(self) -> None:
487
- pass
486
+ def __init__(self, parent, name):
487
+ super().__init__(parent, name)
488
+
489
+ self.osResourceProperty = None # type: EcucEnumerationParamDef
490
+ self.osResourceAccessingApplicationRefs = [] # type: List[EcucRefType]
491
+ self.osResourceLinkedResourceRefs = [] # type: List[EcucRefType]
492
+
493
+ def getOsResourceProperty(self):
494
+ return self.osResourceProperty
495
+
496
+ def setOsResourceProperty(self, value):
497
+ if value is not None:
498
+ self.osResourceProperty = value
499
+ return self
500
+
501
+ def getOsResourceAccessingApplicationRefs(self):
502
+ return self.osResourceAccessingApplicationRefs
503
+
504
+ def addOsResourceAccessingApplicationRefs(self, value):
505
+ if value is not None:
506
+ self.osResourceAccessingApplicationRefs.append(value)
507
+ return self
508
+
509
+ def getOsResourceLinkedResourceRefs(self):
510
+ return self.osResourceLinkedResourceRefs
488
511
 
512
+ def setOsResourceLinkedResourceRefs(self, value):
513
+ if value is not None:
514
+ self.osResourceLinkedResourceRefs = value
515
+ return self
489
516
 
517
+
490
518
  class OsIsrResourceLock(EcucParamConfContainerDef):
491
519
  def __init__(self) -> None:
492
520
  self.osIsrResourceLockBudget = None
@@ -944,6 +972,7 @@ class Os(Module):
944
972
  self.osScheduleTables = [] # type: List[OsScheduleTable]
945
973
  self.osCounters = [] # type: List[OsCounter]
946
974
  self.osApplications = [] # type: List[OsApplication]
975
+ self.osResources = [] # type: List[OsResource]
947
976
 
948
977
  # extended attributes to speed up performance
949
978
  self.osIsrToOsAppMappings = {} # type: Dict[str, OsApplication]
@@ -992,22 +1021,30 @@ class Os(Module):
992
1021
  return self
993
1022
 
994
1023
  def getOsApplicationList(self) -> List[OsApplication]:
995
- return list(sorted(filter(lambda a: isinstance(a, OsApplication), self.elements.values()), key=lambda o: o.name))
1024
+ return list(sorted(filter(lambda a: isinstance(a, OsApplication), self.elements.values()), key=lambda o: o.getName()))
996
1025
 
997
1026
  def addOsApplication(self, value: OsApplication):
998
1027
  self.addElement(value)
999
1028
  self.osApplications.append(value)
1000
1029
 
1001
1030
  for isr_ref in value.getOsAppIsrRefs():
1002
- self.logger.debug("Create OsISR <%s> -> OsApp <%s> Mapping." % (isr_ref.getShortName(), value.getName))
1031
+ self.logger.debug("Create OsISR <%s> -> OsApp <%s> Mapping." % (isr_ref.getShortName(), value.getName()))
1003
1032
  self.osIsrToOsAppMappings[isr_ref.getShortName()] = value
1004
1033
 
1005
1034
  for task_ref in value.getOsAppTaskRefs():
1006
- self.logger.debug("Create OsTask <%s> -> OsApp <%s> Mapping." % (task_ref.getShortName(), value.getName))
1035
+ self.logger.debug("Create OsTask <%s> -> OsApp <%s> Mapping." % (task_ref.getShortName(), value.getName()))
1007
1036
  self.osTaskToOsAppMappings[task_ref.getShortName()] = value
1008
1037
 
1009
1038
  return self
1010
1039
 
1040
+ def getOsResourceList(self) -> List[OsResource]:
1041
+ return list(sorted(filter(lambda a: isinstance(a, OsResource), self.elements.values()), key=lambda o: o.getName()))
1042
+
1043
+ def addOsResource(self, os_task: OsResource):
1044
+ self.addElement(os_task)
1045
+ self.osResources.append(os_task)
1046
+ return self
1047
+
1011
1048
  def getOsIsrOsApplication(self, isr_name: str) -> OsApplication:
1012
1049
  if isr_name in self.osIsrToOsAppMappings:
1013
1050
  return self.osIsrToOsAppMappings[isr_name]
@@ -1,4 +1,5 @@
1
1
  from .os_xdm_parser import OsXdmParser
2
2
  from .rte_xdm_parser import RteXdmParser
3
+ from .nvm_xdm_parser import NvMXdmParser
3
4
  from .eb_parser import AbstractEbModelParser
4
- from .pref_xdm_parser import PerfXdmParser
5
+ from .pref_xdm_parser import PerfXdmParser
@@ -86,7 +86,9 @@ class AbstractEbModelParser(metaclass = ABCMeta):
86
86
  tag = parent.find(".//d:ref[@name='%s']" % name, self.nsmap)
87
87
  if tag is None:
88
88
  raise KeyError("XPath d:ref[@name='%s'] is invalid" % name)
89
- return EcucRefType(self.read_ref_raw_value(tag.attrib['value']))
89
+ if 'value' in tag.attrib:
90
+ return EcucRefType(self.read_ref_raw_value(tag.attrib['value']))
91
+ return None
90
92
 
91
93
  def read_optional_ref_value(self, parent: ET.Element, name: str) -> EcucRefType:
92
94
  tag = parent.find(".//d:ref[@name='%s']" % name, self.nsmap)
@@ -0,0 +1,44 @@
1
+ import xml.etree.ElementTree as ET
2
+
3
+ from ..models.nvm_xdm import NvM, NvMBlockDescriptor
4
+ from ..models.eb_doc import EBModel
5
+ from ..parser.eb_parser import AbstractEbModelParser
6
+
7
+
8
+ class NvMXdmParser(AbstractEbModelParser):
9
+ def __init__(self, ) -> None:
10
+ super().__init__()
11
+
12
+ self.nvm = None
13
+
14
+ def parse(self, element: ET.Element, doc: EBModel):
15
+ if self.get_component_name(element) != "NvM":
16
+ raise ValueError("Invalid <%s> xdm file" % "NvM")
17
+
18
+ nvm = doc.getNvM()
19
+
20
+ self.read_version(element, nvm)
21
+
22
+ self.logger.info("Parse NvM ARVersion:<%s> SwVersion:<%s>" % (nvm.getArVersion().getVersion(), nvm.getSwVersion().getVersion()))
23
+
24
+ self.nvm = nvm
25
+
26
+ self.read_nvm_block_descriptors(element, nvm)
27
+
28
+ def read_nvm_block_descriptors(self, element: ET.Element, nvm: NvM):
29
+ for ctr_tag in self.find_ctr_tag_list(element, "NvMBlockDescriptor"):
30
+ 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"))
42
+
43
+ nvm.addNvMBlockDescriptor(nvm_block)
44
+
@@ -1,6 +1,7 @@
1
1
  import xml.etree.ElementTree as ET
2
2
  from ..models.eb_doc import EBModel
3
- from ..models.os_xdm import Os, OsAlarm, OsAlarmActivateTask, OsAlarmCallback, OsAlarmIncrementCounter, OsAlarmSetEvent, OsCounter, OsScheduleTable
3
+ from ..models.os_xdm import Os, OsAlarm, OsAlarmActivateTask, OsAlarmCallback, OsAlarmIncrementCounter, OsAlarmSetEvent, OsCounter, OsResource
4
+ from ..models.os_xdm import OsScheduleTable
4
5
  from ..models.os_xdm import OsTask, OsIsr, OsApplication, OsScheduleTableEventSetting, OsScheduleTableExpiryPoint, OsScheduleTableTaskActivation
5
6
  from ..models.os_xdm import OsScheduleTblAdjustableExpPoint, OsTaskAutostart
6
7
  from ..parser.eb_parser import AbstractEbModelParser
@@ -20,7 +21,7 @@ class OsXdmParser(AbstractEbModelParser):
20
21
 
21
22
  self.read_version(element, os)
22
23
 
23
- self.logger.info("Parse Rte ARVersion:<%s> SwVersion:<%s>" % (os.getArVersion().getVersion(), os.getSwVersion().getVersion()))
24
+ self.logger.info("Parse Os ARVersion:<%s> SwVersion:<%s>" % (os.getArVersion().getVersion(), os.getSwVersion().getVersion()))
24
25
 
25
26
  self.os = os
26
27
 
@@ -30,6 +31,7 @@ class OsXdmParser(AbstractEbModelParser):
30
31
  self.read_os_schedule_tables(element, os)
31
32
  self.read_os_counters(element, os)
32
33
  self.read_os_applications(element, os)
34
+ self.read_os_resources(element, os)
33
35
 
34
36
  def read_os_task_autostart(self, element: ET.Element, os_task: OsTask):
35
37
  ctr_tag = self.find_ctr_tag(element, "OsTaskAutostart")
@@ -184,3 +186,13 @@ class OsXdmParser(AbstractEbModelParser):
184
186
 
185
187
  self.logger.debug("Read OsApplication <%s>" % os_app.getName())
186
188
  os.addOsApplication(os_app)
189
+
190
+ def read_os_resources(self, element: ET.Element, os: Os):
191
+ for ctr_tag in self.find_ctr_tag_list(element, "OsResource"):
192
+ os_res = OsResource(os, ctr_tag.attrib["name"])
193
+ os_res.setOsResourceProperty(self.read_value(ctr_tag, "OsResourceProperty"))
194
+
195
+ for ref in self.read_ref_value_list(ctr_tag, "OsResourceAccessingApplication"):
196
+ os_res.addOsResourceAccessingApplicationRefs(ref)
197
+
198
+ os.addOsResource(os_res)
@@ -1 +1,2 @@
1
- from .excel_reporter.os_xdm import *
1
+ from .excel_reporter.os_xdm import *
2
+ from .excel_reporter.nvm_xdm import *
@@ -1,8 +1,9 @@
1
1
  import logging
2
2
  from openpyxl import Workbook
3
3
  from openpyxl.cell import Cell
4
- from openpyxl.styles import Alignment
5
4
  from openpyxl.worksheet.worksheet import Worksheet
5
+ from openpyxl.styles import Alignment
6
+
6
7
 
7
8
  class ExcelReporter:
8
9
  def __init__(self) -> None:
@@ -15,12 +16,12 @@ class ExcelReporter:
15
16
  for cell in row:
16
17
  if cell.value:
17
18
  alignment = cell.alignment # type: Alignment
18
- if (alignment.wrapText == True):
19
+ if (alignment.wrapText is True):
19
20
  continue
20
21
  dims[cell.column_letter] = max((dims.get(cell.column_letter, 0), len(str(cell.value))))
21
22
 
22
23
  for col, value in dims.items():
23
- #worksheet.column_dimensions[col].width = (value + 2) + 2
24
+ # worksheet.column_dimensions[col].width = (value + 2) + 2
24
25
  worksheet.column_dimensions[col].width = (value + 2)
25
26
 
26
27
  def write_title_row(self, sheet: Worksheet, title_row):
@@ -28,10 +29,10 @@ class ExcelReporter:
28
29
  cell = sheet.cell(row=1, column=idx + 1)
29
30
  cell.value = title_row[idx]
30
31
 
31
- def write_cell(self, sheet, row, column, value, format = None) -> Cell:
32
- cell = sheet.cell(row = row, column=column) # type: Cell
32
+ def write_cell(self, sheet: Worksheet, row: int, column: int, value, format=None) -> Cell:
33
+ cell = sheet.cell(row=row, column=column) # type: Cell
33
34
  cell.value = value
34
- if (format != None):
35
+ if (format is not None):
35
36
  if ('alignment' in format):
36
37
  cell.alignment = format['alignment']
37
38
  if ('number_format' in format):
@@ -40,4 +41,3 @@ class ExcelReporter:
40
41
 
41
42
  def save(self, name: str):
42
43
  self.wb.save(name)
43
-
@@ -0,0 +1,40 @@
1
+ from ...models.eb_doc import EBModel
2
+ from ...reporter.excel_reporter.abstract import ExcelReporter
3
+
4
+
5
+ class NvMXdmXlsWriter(ExcelReporter):
6
+ def __init__(self) -> None:
7
+ super().__init__()
8
+
9
+ def write_nvm_block_descriptors(self, doc: EBModel):
10
+ sheet = self.wb.create_sheet("NvMBlock", 0)
11
+
12
+ title_row = [
13
+ "BlockId", "Name", "NvMBlockEcucPartitionRef", "NvMRamBlockDataAddress", "NvMRomBlockDataAddress",
14
+ "NvMBlockManagementType", "NvMNvBlockLength", "NvMNvBlockNum", "NvMSelectBlockForReadAll", "NvMSelectBlockForWriteAll"]
15
+ self.write_title_row(sheet, title_row)
16
+
17
+ row = 2
18
+ for nvm_block in doc.getNvM().getNvMBlockDescriptorList():
19
+ self.write_cell(sheet, row, 1, nvm_block.getNvMNvramBlockIdentifier())
20
+ self.write_cell(sheet, row, 2, nvm_block.getName())
21
+ self.write_cell(sheet, row, 3, nvm_block.getNvMBlockEcucPartitionRef())
22
+ self.write_cell(sheet, row, 4, nvm_block.getNvMRamBlockDataAddress())
23
+ self.write_cell(sheet, row, 5, nvm_block.getNvMRomBlockDataAddress())
24
+ self.write_cell(sheet, row, 6, nvm_block.getNvMBlockManagementType())
25
+ self.write_cell(sheet, row, 7, nvm_block.getNvMNvBlockLength())
26
+ self.write_cell(sheet, row, 8, nvm_block.getNvMNvBlockNum())
27
+
28
+
29
+ row += 1
30
+
31
+ self.logger.debug("Write NvM Block <%s>" % nvm_block.getName())
32
+
33
+ self.auto_width(sheet)
34
+
35
+ def write(self, filename, doc: EBModel, options):
36
+ self.logger.info("Writing <%s>" % filename)
37
+
38
+ self.write_nvm_block_descriptors(doc)
39
+
40
+ self.save(filename)
@@ -2,6 +2,7 @@ from ...models.rte_xdm import RteBswEventToTaskMapping, RteBswModuleInstance, Rt
2
2
  from ...models.eb_doc import EBModel
3
3
  from .abstract import ExcelReporter
4
4
 
5
+
5
6
  class RteXdmXlsWriter(ExcelReporter):
6
7
  def __init__(self) -> None:
7
8
  super().__init__()
@@ -45,6 +46,7 @@ class RteXdmXlsWriter(ExcelReporter):
45
46
 
46
47
  self.save(filename)
47
48
 
49
+
48
50
  class RteRunnableEntityXlsWriter(ExcelReporter):
49
51
  def __init__(self) -> None:
50
52
  super().__init__()
@@ -57,7 +59,7 @@ class RteRunnableEntityXlsWriter(ExcelReporter):
57
59
 
58
60
  row = 2
59
61
  for os_task, mappings in doc.getRte().getMappedEvents().items():
60
- for mapping in sorted(mappings, key = lambda a:a.getRtePositionInTask()):
62
+ for mapping in sorted(mappings, key=lambda a: a.getRtePositionInTask()):
61
63
  self.write_cell(sheet, row, 1, os_task)
62
64
  if isinstance(mapping, RteBswEventToTaskMapping):
63
65
  self.logger.debug("Write Mapping %s" % mapping.getName())
@@ -68,7 +70,7 @@ class RteRunnableEntityXlsWriter(ExcelReporter):
68
70
  self.write_cell(sheet, row, 7, mapping.getRteBswActivationOffset())
69
71
  elif isinstance(mapping, RteEventToTaskMapping):
70
72
  self.logger.debug("Write Mapping %s" % mapping.getName())
71
- instance = mapping.getRteSwComponentInstance()
73
+ instance = mapping.getRteSwComponentInstance()
72
74
  self.write_cell(sheet, row, 2, mapping.getRteEventRef().getShortName())
73
75
  self.write_cell(sheet, row, 5, instance.getRteSoftwareComponentInstanceRef().getValue())
74
76
  self.write_cell(sheet, row, 6, mapping.getRtePositionInTask())
@@ -84,4 +86,4 @@ class RteRunnableEntityXlsWriter(ExcelReporter):
84
86
  self.logger.info("Writing <%s>" % filename)
85
87
  self.write_mapped_events(doc)
86
88
 
87
- self.save(filename)
89
+ self.save(filename)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py-eb-model
3
- Version: 1.1.5
3
+ Version: 1.1.6
4
4
  Summary: The parser for EB XDM file
5
5
  Home-page: UNKNOWN
6
6
  Author: melodypapa
@@ -34,7 +34,7 @@ And more details can be found at https://packaging.python.org/
34
34
 
35
35
  # 3. CLI
36
36
 
37
- ## 3.1. os-task-xlsx
37
+ ## 3.1. os-xdm-xlsx
38
38
 
39
39
  Extract the Os Task information from os.xdm and then report all to Excel file.
40
40
 
@@ -60,7 +60,7 @@ os-xdm-xlsx data/Os.xdm data/Os.xlsx
60
60
 
61
61
  ![](doc/os-xdm-xlsx/os_counter_in_excel.png)
62
62
 
63
- ## 3.2. rte-task-xls
63
+ ## 3.2. rte-xdm-xlsx
64
64
 
65
65
  Extract the Rte Configuration information from rte.xdm and then report all to Excel file.
66
66
 
@@ -76,6 +76,16 @@ rte-xdm-xlsx data/Rte.xdm data/Rte.xlsx
76
76
  rte-xdm-xlsx -r data/Rte.xdm data/Os.xdm data/Runnable.xlsx
77
77
  ```
78
78
 
79
+ # nvm-xdm-xlsx
80
+
81
+ Extract the NvM Configuration information from nvm.xdm and then report all to Excel file.
82
+
83
+ 1. Export the Nvm Configuration information to excel file
84
+
85
+ ```bash
86
+ nvm-xdm-xlsx data/NvM.xdm data/NvM.xlsx
87
+ ```
88
+
79
89
  ## 3.3. PrefSystemImporter
80
90
 
81
91
  Read the EB preference XDM and generate the ARXML file list into text file or create the AUTOSAR builder project file.
@@ -205,3 +215,10 @@ PrefSystemImporter --base-path c:/EB/ACG-8_8_8_WIN32X86/workspace/simple_demo_rt
205
215
  * Rte::getRteBswModuleInstance
206
216
 
207
217
 
218
+ **Version 1.1.6**
219
+
220
+ 1. Add the OsResource support in Os Module:
221
+ * Os::getOsResourceList
222
+ * Os::addOsResource
223
+ 2. Read the NvMBlockDescriptor List
224
+
@@ -1,27 +1,31 @@
1
1
  eb_model/__init__.py,sha256=oMw5xoAS-lHLxufQSlBIXhGZZMcPmwGFA3PYpTwaQTU,92
2
2
  eb_model/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ eb_model/cli/nvm_xdm_2_xls_cli.py,sha256=9OxWkT7OdL2DZbG8N_2sE3y8T0GWyzpwYKWnpTm8lag,1742
3
4
  eb_model/cli/os_xdm_2_xls_cli.py,sha256=zUnxJ4uHWRSjMmpSK5hXRAzVt-_YGEyiMXrexnJSk6g,1970
4
5
  eb_model/cli/pref_system_importer_cli.py,sha256=Cra-rVpgxruLLyWHRdYAgbwfcHVPV2L8Jk6ck0v4lJU,3361
5
6
  eb_model/cli/rte_xdm_2_xls_cli.py,sha256=83uzE2Vk0h267gWxF9mnWN3Bh69RJpYyKULFXpxTByY,2127
6
7
  eb_model/models/__init__.py,sha256=Jn4oOg6CxbAvULNaVt0obDLGPZC2sLzeo6rQt4eTDQ0,245
7
- eb_model/models/abstract.py,sha256=rYy45TV8HzcG1dQWbXD0yalWpkxubUzjAvwOugAwtbE,3884
8
- eb_model/models/eb_doc.py,sha256=Kx0eExrQCmkWdPC0OnzVcZAOeXtRcwNM6AFMANntgAQ,2671
8
+ eb_model/models/abstract.py,sha256=MSG0RYrrVbQtyWDqG1hlfpQa8nlvGdPsnLsBgU2NcxQ,4046
9
+ eb_model/models/eb_doc.py,sha256=d_vNhWda7ZwpmLPiCmlq316G-C2hvWz5bJBss9P2y_A,2955
9
10
  eb_model/models/eclipse_project.py,sha256=I1y4UUPJQqy8Bh77sJkufzcH9wXMN1Wk82er-m1Sxhc,155
10
11
  eb_model/models/importer_xdm.py,sha256=wUdwZQ-uq75EkhU4nzrYeNR5UphaTJ41MjywOPcCHsE,4246
11
- eb_model/models/os_xdm.py,sha256=Kj5DuBP3-RJUdEf3d5Q1iKhpqCF_lnM-evougloAsZo,33983
12
+ eb_model/models/nvm_xdm.py,sha256=cFeAblxdSNlGP7yN2cPLMmvvJVMNB0LuYmuM_eRQOyQ,11956
13
+ eb_model/models/os_xdm.py,sha256=0iQrMshsbibxaTYwhHpbQFP5Xz3VoxV5eWSyd19GGNY,35557
12
14
  eb_model/models/rte_xdm.py,sha256=dEsGhpnaG-VG5QfEPv6hxQdopzwMkHHz8kDHj_7MuYM,21851
13
- eb_model/parser/__init__.py,sha256=7VOmPr4dng_TrOyDZFu2_s3r0BJZQGiOUxALMY8EnqI,170
14
- eb_model/parser/eb_parser.py,sha256=_5sUl2pMt1SchHvrLOhU2axqa3FmKTWElSB79taz0O4,8188
15
+ eb_model/parser/__init__.py,sha256=K_sp7EVjS2KoWUCdX_0h2jIY8Gxhwqs6AtRP1Pgj1TU,214
16
+ eb_model/parser/eb_parser.py,sha256=6zYPYku30JfnLOV75k-MrfLc75sCkKdMwc11runqIbk,8248
15
17
  eb_model/parser/eb_parser_factory.py,sha256=zqsqq52uImU4-WcS5dvHfhM95hiEPAGRtNzVik8i8wc,971
16
- eb_model/parser/os_xdm_parser.py,sha256=folWFp-4HdxIBmEzrBW4LA3ZQRAYygI30sZbks6rOnQ,10510
18
+ eb_model/parser/nvm_xdm_parser.py,sha256=UME7IRySnnkKvwHY1jehdraEatWTAxWWykxntWqadUk,2216
19
+ eb_model/parser/os_xdm_parser.py,sha256=M_77-Gxhe101WXo-97CSTNEa-oJmWjDKYeweuL7Niy0,11083
17
20
  eb_model/parser/pref_xdm_parser.py,sha256=EjfR4vrnjRVLw_7wyPmMYlBj6lPXZbBZMEdWlYPj3uI,1539
18
21
  eb_model/parser/rte_xdm_parser.py,sha256=plUue0c4ejreE9w71_mT0JNzGSClf30cXhfC2NalrII,5471
19
- eb_model/reporter/__init__.py,sha256=H8D_23UwJi1Ph6yjBfZhxWVbu9ci5_O4471gqXGiZCM,36
22
+ eb_model/reporter/__init__.py,sha256=p-sMv7gJkxe3u8la09SZJjiWPgGGjZSaX0WoBD-hn-0,77
20
23
  eb_model/reporter/markdown.py,sha256=NhcJOFQ_BVbkgGe66uAT7KUPIchWU4kfVMtMLQtbK-w,1647
21
24
  eb_model/reporter/excel_reporter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- eb_model/reporter/excel_reporter/abstract.py,sha256=PfIoiKNKy1eRJBABln7rADkSdwWzS03Vs03jBYM-_5Y,1622
25
+ eb_model/reporter/excel_reporter/abstract.py,sha256=x_jW38GfyMGyHXsYQWRUUyRc6r6ywMo3zYoH_v79jto,1644
26
+ eb_model/reporter/excel_reporter/nvm_xdm.py,sha256=OM_hKXcuFQyZUnia0kuZ03OSSrOMW0i2vIpUa5LTdEc,1698
23
27
  eb_model/reporter/excel_reporter/os_xdm.py,sha256=MG6-6qi7Dh1XXv4CR2I-iQpOvypso0dlfXt_ZQ3lO7I,6406
24
- eb_model/reporter/excel_reporter/rte_xdm.py,sha256=OHuVPUV7xCdDzxELyXi766YJ6GejTHrzPrlAUBqexIw,3937
28
+ eb_model/reporter/excel_reporter/rte_xdm.py,sha256=IeBAeVJYSSle6sR0K4FiPgQToTziHKjXxr68Er7bXyg,3941
25
29
  eb_model/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
30
  eb_model/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
31
  eb_model/tests/models/test_eb_model.py,sha256=3fpIHhzQlf9KZjm4fZxcSTT4Zio6YhTrcn9UBvlhOfo,1632
@@ -30,9 +34,9 @@ eb_model/tests/models/test_importer_xdm.py,sha256=F80kO77jeyfCkLPRgRLjEj3UPcrACi
30
34
  eb_model/writer/__init__.py,sha256=CXvQAsNV1OvYClkHdKCG7Q300OVBzcl2TmoD68MyQOs,95
31
35
  eb_model/writer/project_writer.py,sha256=9BQU1CJAktVxFvQk89Pj4IbizTJXnlQidt4eX_CIFXU,2800
32
36
  eb_model/writer/text_writer.py,sha256=7d4_PUTJk5Y6S_EQflAH3ACDnUw9VwJzP90GFDh0n0I,991
33
- py_eb_model-1.1.5.dist-info/LICENSE,sha256=I52rGS7W1IwAmYCUfqTpDaSHoFAdt7grcNiBhk-Z3eI,1088
34
- py_eb_model-1.1.5.dist-info/METADATA,sha256=ZT0KjMQ8x1ezJYgwhkrupkz4lcb0-hKKVw4WWxTyKcI,6476
35
- py_eb_model-1.1.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
36
- py_eb_model-1.1.5.dist-info/entry_points.txt,sha256=yDLH9wnJ5Fp7ImgyFRSnr3mU6nvaenuKZnbe2rgs8Mk,183
37
- py_eb_model-1.1.5.dist-info/top_level.txt,sha256=DGBNh6YW_x4RF_UoLKW3cKqb2SLnmfuEIZlkTewR66A,9
38
- py_eb_model-1.1.5.dist-info/RECORD,,
37
+ py_eb_model-1.1.6.dist-info/LICENSE,sha256=I52rGS7W1IwAmYCUfqTpDaSHoFAdt7grcNiBhk-Z3eI,1088
38
+ py_eb_model-1.1.6.dist-info/METADATA,sha256=t0LEDXkC1J778lrXQjCP0jA1UOgdqsReB4lY_AEDXAU,6861
39
+ py_eb_model-1.1.6.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
40
+ py_eb_model-1.1.6.dist-info/entry_points.txt,sha256=N7cHTMb7nGQXu2X5JvJo3JJQdRE11vRMlLyx27uarHg,234
41
+ py_eb_model-1.1.6.dist-info/top_level.txt,sha256=DGBNh6YW_x4RF_UoLKW3cKqb2SLnmfuEIZlkTewR66A,9
42
+ py_eb_model-1.1.6.dist-info/RECORD,,
@@ -1,5 +1,6 @@
1
1
  [console_scripts]
2
2
  PrefSystemImporter = eb_model.cli.pref_system_importer_cli:main
3
+ nvm-xdm-xlsx = eb_model.cli.nvm_xdm_2_xls_cli:main
3
4
  os-xdm-xlsx = eb_model.cli.os_xdm_2_xls_cli:main
4
5
  rte-xdm-xlsx = eb_model.cli.rte_xdm_2_xls_cli:main
5
6