py-eb-model 1.1.4__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.
- eb_model/cli/nvm_xdm_2_xls_cli.py +63 -0
- eb_model/models/__init__.py +5 -5
- eb_model/models/abstract.py +16 -6
- eb_model/models/eb_doc.py +20 -11
- eb_model/models/eclipse_project.py +0 -3
- eb_model/models/importer_xdm.py +7 -8
- eb_model/models/nvm_xdm.py +347 -0
- eb_model/models/os_xdm.py +61 -24
- eb_model/models/rte_xdm.py +41 -11
- eb_model/parser/__init__.py +2 -1
- eb_model/parser/eb_parser.py +3 -1
- eb_model/parser/nvm_xdm_parser.py +44 -0
- eb_model/parser/os_xdm_parser.py +14 -2
- eb_model/reporter/__init__.py +2 -1
- eb_model/reporter/excel_reporter/abstract.py +7 -7
- eb_model/reporter/excel_reporter/nvm_xdm.py +40 -0
- eb_model/reporter/excel_reporter/rte_xdm.py +5 -3
- eb_model/tests/models/test_ecuc_container.py +3 -3
- {py_eb_model-1.1.4.dist-info → py_eb_model-1.1.6.dist-info}/METADATA +27 -3
- py_eb_model-1.1.6.dist-info/RECORD +42 -0
- {py_eb_model-1.1.4.dist-info → py_eb_model-1.1.6.dist-info}/entry_points.txt +1 -0
- py_eb_model-1.1.4.dist-info/RECORD +0 -38
- {py_eb_model-1.1.4.dist-info → py_eb_model-1.1.6.dist-info}/LICENSE +0 -0
- {py_eb_model-1.1.4.dist-info → py_eb_model-1.1.6.dist-info}/WHEEL +0 -0
- {py_eb_model-1.1.4.dist-info → py_eb_model-1.1.6.dist-info}/top_level.txt +0 -0
eb_model/models/os_xdm.py
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
from typing import Dict, List # noqa F401
|
2
2
|
import logging
|
3
|
-
from ..models.abstract import
|
3
|
+
from ..models.abstract import EcucEnumerationParamDef, EcucParamConfContainerDef, EcucObject, EcucRefType, Module
|
4
4
|
|
5
5
|
|
6
|
-
class OsAlarmAction(
|
6
|
+
class OsAlarmAction(EcucParamConfContainerDef):
|
7
7
|
def __init__(self, parent, name) -> None:
|
8
8
|
super().__init__(parent, name)
|
9
9
|
|
10
10
|
|
11
|
-
class OsAlarmAutostart(
|
11
|
+
class OsAlarmAutostart(EcucParamConfContainerDef):
|
12
12
|
def __init__(self, parent, name) -> None:
|
13
13
|
super().__init__(parent, name)
|
14
14
|
|
@@ -110,7 +110,7 @@ class OsAlarmSetEvent(OsAlarmAction):
|
|
110
110
|
return self
|
111
111
|
|
112
112
|
|
113
|
-
class OsAlarm(
|
113
|
+
class OsAlarm(EcucParamConfContainerDef):
|
114
114
|
def __init__(self, parent, name) -> None:
|
115
115
|
super().__init__(parent, name)
|
116
116
|
|
@@ -160,7 +160,7 @@ class OsAlarm(EcucContainer):
|
|
160
160
|
return "\n".join(result)
|
161
161
|
|
162
162
|
|
163
|
-
class OsApplicationHooks(
|
163
|
+
class OsApplicationHooks(EcucParamConfContainerDef):
|
164
164
|
def __init__(self, parent, name):
|
165
165
|
super().__init__(parent, name)
|
166
166
|
|
@@ -198,7 +198,7 @@ class OsApplicationHooks(EcucContainer):
|
|
198
198
|
return self
|
199
199
|
|
200
200
|
|
201
|
-
class OsApplicationTrustedFunction(
|
201
|
+
class OsApplicationTrustedFunction(EcucParamConfContainerDef):
|
202
202
|
def __init__(self, parent, name):
|
203
203
|
super().__init__(parent, name)
|
204
204
|
|
@@ -220,12 +220,12 @@ class OsApplicationTrustedFunction(EcucContainer):
|
|
220
220
|
return self
|
221
221
|
|
222
222
|
|
223
|
-
class OsAppMode(
|
223
|
+
class OsAppMode(EcucParamConfContainerDef):
|
224
224
|
def __init__(self, parent, name):
|
225
225
|
super().__init__(parent, name)
|
226
226
|
|
227
227
|
|
228
|
-
class OsApplication(
|
228
|
+
class OsApplication(EcucParamConfContainerDef):
|
229
229
|
def __init__(self, parent, name) -> None:
|
230
230
|
super().__init__(parent, name)
|
231
231
|
|
@@ -344,7 +344,7 @@ class OsApplication(EcucContainer):
|
|
344
344
|
return self
|
345
345
|
|
346
346
|
|
347
|
-
class OsDriver(
|
347
|
+
class OsDriver(EcucParamConfContainerDef):
|
348
348
|
def __init__(self, parent, name) -> None:
|
349
349
|
super().__init__(parent, name)
|
350
350
|
|
@@ -364,7 +364,7 @@ class OsDriver(EcucContainer):
|
|
364
364
|
return self
|
365
365
|
|
366
366
|
|
367
|
-
class OsTimeConstant(
|
367
|
+
class OsTimeConstant(EcucParamConfContainerDef):
|
368
368
|
def __init__(self, parent, name) -> None:
|
369
369
|
super().__init__(parent, name)
|
370
370
|
|
@@ -384,7 +384,7 @@ class OsTimeConstant(EcucContainer):
|
|
384
384
|
return self
|
385
385
|
|
386
386
|
|
387
|
-
class OsCounter(
|
387
|
+
class OsCounter(EcucParamConfContainerDef):
|
388
388
|
|
389
389
|
OS_COUNTER_TYPE_HARDWARE = "HARDWARE"
|
390
390
|
OS_COUNTER_TYPE_SOFTWARE = "SOFTWARE"
|
@@ -482,12 +482,40 @@ class OsCounter(EcucContainer):
|
|
482
482
|
return self
|
483
483
|
|
484
484
|
|
485
|
-
class OsResource(
|
486
|
-
def __init__(self
|
487
|
-
|
485
|
+
class OsResource(EcucParamConfContainerDef):
|
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
|
|
490
|
-
|
517
|
+
|
518
|
+
class OsIsrResourceLock(EcucParamConfContainerDef):
|
491
519
|
def __init__(self) -> None:
|
492
520
|
self.osIsrResourceLockBudget = None
|
493
521
|
self.osIsrResourceLockResourceRef = None
|
@@ -724,7 +752,7 @@ class OsTask(EcucObject):
|
|
724
752
|
return self.osTaskAutostart is not None
|
725
753
|
|
726
754
|
|
727
|
-
class OsScheduleTableAutostart(
|
755
|
+
class OsScheduleTableAutostart(EcucParamConfContainerDef):
|
728
756
|
def __init__(self, parent, name) -> None:
|
729
757
|
super().__init__(parent, name)
|
730
758
|
|
@@ -754,7 +782,7 @@ class OsScheduleTableAutostart(EcucContainer):
|
|
754
782
|
return self
|
755
783
|
|
756
784
|
|
757
|
-
class OsScheduleTblAdjustableExpPoint(
|
785
|
+
class OsScheduleTblAdjustableExpPoint(EcucParamConfContainerDef):
|
758
786
|
def __init__(self, parent, name) -> None:
|
759
787
|
super().__init__(parent, name)
|
760
788
|
|
@@ -776,7 +804,7 @@ class OsScheduleTblAdjustableExpPoint(EcucContainer):
|
|
776
804
|
return self
|
777
805
|
|
778
806
|
|
779
|
-
class OsScheduleTableTaskActivation(
|
807
|
+
class OsScheduleTableTaskActivation(EcucParamConfContainerDef):
|
780
808
|
def __init__(self, parent, name) -> None:
|
781
809
|
super().__init__(parent, name)
|
782
810
|
|
@@ -790,7 +818,7 @@ class OsScheduleTableTaskActivation(EcucContainer):
|
|
790
818
|
return self
|
791
819
|
|
792
820
|
|
793
|
-
class OsScheduleTableEventSetting(
|
821
|
+
class OsScheduleTableEventSetting(EcucParamConfContainerDef):
|
794
822
|
def __init__(self, parent, name) -> None:
|
795
823
|
super().__init__(parent, name)
|
796
824
|
|
@@ -814,7 +842,7 @@ class OsScheduleTableEventSetting(EcucContainer):
|
|
814
842
|
return self
|
815
843
|
|
816
844
|
|
817
|
-
class OsScheduleTableExpiryPoint(
|
845
|
+
class OsScheduleTableExpiryPoint(EcucParamConfContainerDef):
|
818
846
|
def __init__(self, parent, name) -> None:
|
819
847
|
super().__init__(parent, name)
|
820
848
|
|
@@ -854,7 +882,7 @@ class OsScheduleTableExpiryPoint(EcucContainer):
|
|
854
882
|
return self
|
855
883
|
|
856
884
|
|
857
|
-
class OsScheduleTable(
|
885
|
+
class OsScheduleTable(EcucParamConfContainerDef):
|
858
886
|
|
859
887
|
OS_TIME_UNIT_NANOSECONDS = "NANOSECONDS"
|
860
888
|
OS_TIME_UNIT_TICKS = "TICKS"
|
@@ -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.
|
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]
|
eb_model/models/rte_xdm.py
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
from typing import Dict, List
|
2
|
-
from ..models.abstract import
|
3
|
-
|
2
|
+
from ..models.abstract import EcucParamConfContainerDef, EcucRefType, Module
|
3
|
+
|
4
|
+
|
5
|
+
class RteEventToIsrMapping(EcucParamConfContainerDef):
|
4
6
|
def __init__(self, parent, name) -> None:
|
5
7
|
super().__init__(parent, name)
|
6
8
|
|
@@ -10,7 +12,8 @@ class RteEventToIsrMapping(EcucContainer):
|
|
10
12
|
self.RteRipsFillRoutineRef = None
|
11
13
|
self.RteRipsFlushRoutineRef = None
|
12
14
|
|
13
|
-
|
15
|
+
|
16
|
+
class AbstractEventToTaskMapping(EcucParamConfContainerDef):
|
14
17
|
def __init__(self, parent, name) -> None:
|
15
18
|
super().__init__(parent, name)
|
16
19
|
|
@@ -23,6 +26,7 @@ class AbstractEventToTaskMapping(EcucContainer):
|
|
23
26
|
self.rtePositionInTask = value
|
24
27
|
return self
|
25
28
|
|
29
|
+
|
26
30
|
class RteEventToTaskMapping(AbstractEventToTaskMapping):
|
27
31
|
def __init__(self, parent, name) -> None:
|
28
32
|
super().__init__(parent, name)
|
@@ -174,8 +178,9 @@ class RteEventToTaskMapping(AbstractEventToTaskMapping):
|
|
174
178
|
|
175
179
|
def setRteVirtuallyMappedToTaskRef(self, value):
|
176
180
|
self.rteVirtuallyMappedToTaskRef = value
|
177
|
-
return self
|
178
|
-
|
181
|
+
return self
|
182
|
+
|
183
|
+
|
179
184
|
class RteEventToTaskMappingV3(RteEventToTaskMapping):
|
180
185
|
def __init__(self, parent, name):
|
181
186
|
super().__init__(parent, name)
|
@@ -189,6 +194,7 @@ class RteEventToTaskMappingV3(RteEventToTaskMapping):
|
|
189
194
|
self.rteEventRef = value
|
190
195
|
return self
|
191
196
|
|
197
|
+
|
192
198
|
class RteEventToTaskMappingV4(RteEventToTaskMapping):
|
193
199
|
def __init__(self, parent, name):
|
194
200
|
super().__init__(parent, name)
|
@@ -208,6 +214,7 @@ class RteEventToTaskMappingV4(RteEventToTaskMapping):
|
|
208
214
|
raise ValueError("Unsupported RteEventRef of RteEventToTaskMapping <%s> " % self.name)
|
209
215
|
return self.rteEventRefs[0]
|
210
216
|
|
217
|
+
|
211
218
|
class RteBswEventToTaskMapping(AbstractEventToTaskMapping):
|
212
219
|
def __init__(self, parent, name) -> None:
|
213
220
|
super().__init__(parent, name)
|
@@ -329,6 +336,7 @@ class RteBswEventToTaskMapping(AbstractEventToTaskMapping):
|
|
329
336
|
self.rteRipsFlushRoutineRef = value
|
330
337
|
return self
|
331
338
|
|
339
|
+
|
332
340
|
class RteBswEventToTaskMappingV3(RteBswEventToTaskMapping):
|
333
341
|
def __init__(self, parent, name):
|
334
342
|
super().__init__(parent, name)
|
@@ -343,6 +351,7 @@ class RteBswEventToTaskMappingV3(RteBswEventToTaskMapping):
|
|
343
351
|
self.rteBswEventRef = value
|
344
352
|
return self
|
345
353
|
|
354
|
+
|
346
355
|
class RteBswEventToTaskMappingV4(RteBswEventToTaskMapping):
|
347
356
|
def __init__(self, parent, name):
|
348
357
|
super().__init__(parent, name)
|
@@ -361,10 +370,12 @@ class RteBswEventToTaskMappingV4(RteBswEventToTaskMapping):
|
|
361
370
|
raise ValueError("Unsupported RteEventRef of RteEventToTaskMapping <%s> " % self.name)
|
362
371
|
return self.rteBswEventRefs[0]
|
363
372
|
|
364
|
-
|
373
|
+
|
374
|
+
class AbstractRteInstance(EcucParamConfContainerDef):
|
365
375
|
def __init__(self, parent, name) -> None:
|
366
376
|
super().__init__(parent, name)
|
367
377
|
|
378
|
+
|
368
379
|
class RteSwComponentInstance(AbstractRteInstance):
|
369
380
|
def __init__(self, parent, name) -> None:
|
370
381
|
super().__init__(parent, name)
|
@@ -443,6 +454,7 @@ class RteSwComponentInstance(AbstractRteInstance):
|
|
443
454
|
self.rteNvRamAllocations.append(value)
|
444
455
|
return self
|
445
456
|
|
457
|
+
|
446
458
|
class RteBswModuleInstance(AbstractRteInstance):
|
447
459
|
def __init__(self, parent, name) -> None:
|
448
460
|
super().__init__(parent, name)
|
@@ -551,25 +563,43 @@ class RteBswModuleInstance(AbstractRteInstance):
|
|
551
563
|
def setRteMappedToOsApplicationRef(self, value):
|
552
564
|
self.rteMappedToOsApplicationRef = value
|
553
565
|
return self
|
554
|
-
|
566
|
+
|
567
|
+
|
555
568
|
class Rte(Module):
|
556
569
|
def __init__(self, parent) -> None:
|
557
570
|
super().__init__(parent, "Rte")
|
558
571
|
|
572
|
+
self.rteBswModuleInstances = [] # type: List[RteBswModuleInstance]
|
573
|
+
self.rteSwComponentInstances = [] # type: List[RteSwComponentInstance]
|
574
|
+
|
575
|
+
def getRteBswModuleInstance(self, name: str) -> RteBswModuleInstance:
|
576
|
+
result = list(filter(lambda a: a.name == name, self.rteBswModuleInstances))
|
577
|
+
if len(result) > 0:
|
578
|
+
return result[0]
|
579
|
+
return None
|
580
|
+
|
559
581
|
def getRteBswModuleInstanceList(self) -> List[RteBswModuleInstance]:
|
560
|
-
return list(sorted(
|
582
|
+
return list(sorted(self.rteBswModuleInstances, key=lambda o: o.name))
|
561
583
|
|
562
584
|
def addRteBswModuleInstance(self, value: RteBswModuleInstance):
|
563
585
|
self.elements[value.getName()] = value
|
586
|
+
self.rteBswModuleInstances.append(value)
|
587
|
+
|
588
|
+
def getRteSwComponentInstance(self, name: str) -> RteSwComponentInstance:
|
589
|
+
result = list(filter(lambda a: a.name == name, self.rteSwComponentInstances))
|
590
|
+
if len(result) > 0:
|
591
|
+
return result[0]
|
592
|
+
return None
|
564
593
|
|
565
594
|
def getRteSwComponentInstanceList(self) -> List[RteSwComponentInstance]:
|
566
|
-
return list(sorted(
|
595
|
+
return list(sorted(self.rteSwComponentInstances, key=lambda o: o.name))
|
567
596
|
|
568
597
|
def addRteSwComponentInstance(self, value: RteSwComponentInstance):
|
569
598
|
self.elements[value.getName()] = value
|
599
|
+
self.rteSwComponentInstances.append(value)
|
570
600
|
|
571
601
|
def getRteModuleInstanceList(self) -> List[AbstractRteInstance]:
|
572
|
-
return list(sorted(filter(lambda a: isinstance(a, AbstractRteInstance), self.elements.values()), key=
|
602
|
+
return list(sorted(filter(lambda a: isinstance(a, AbstractRteInstance), self.elements.values()), key=lambda o: o.name))
|
573
603
|
|
574
604
|
def _addToRteEventToOsTasks(self, mapping: AbstractEventToTaskMapping, os_tasks: Dict[str, List[AbstractEventToTaskMapping]]):
|
575
605
|
if isinstance(mapping, RteBswEventToTaskMapping):
|
@@ -601,4 +631,4 @@ class Rte(Module):
|
|
601
631
|
else:
|
602
632
|
raise NotImplementedError("Invalid Rte Module Instance <%s>" % type(instance))
|
603
633
|
|
604
|
-
return os_tasks
|
634
|
+
return os_tasks
|
eb_model/parser/__init__.py
CHANGED
eb_model/parser/eb_parser.py
CHANGED
@@ -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
|
-
|
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
|
+
|
eb_model/parser/os_xdm_parser.py
CHANGED
@@ -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,
|
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
|
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)
|
eb_model/reporter/__init__.py
CHANGED
@@ -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
|
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
|
32
|
-
cell = sheet.cell(row
|
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
|
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
|
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,12 +1,12 @@
|
|
1
1
|
|
2
2
|
from ...models.eb_doc import EBModel
|
3
|
-
from ...models.abstract import
|
3
|
+
from ...models.abstract import EcucParamConfContainerDef, EcucObject
|
4
4
|
|
5
5
|
class TestEcucContainer:
|
6
6
|
|
7
7
|
def test_create_container(self):
|
8
8
|
document = EBModel.getInstance()
|
9
|
-
os_container =
|
9
|
+
os_container = EcucParamConfContainerDef(document, "Os")
|
10
10
|
|
11
11
|
assert (os_container.getFullName() == "/Os")
|
12
12
|
assert (os_container.getParent() == document)
|
@@ -18,5 +18,5 @@ class TestEcucContainer:
|
|
18
18
|
assert (container.getParent() == document)
|
19
19
|
assert (container.getName() == "Os")
|
20
20
|
|
21
|
-
assert(isinstance(container,
|
21
|
+
assert(isinstance(container, EcucParamConfContainerDef))
|
22
22
|
assert(isinstance(container, EcucObject))
|