armodel 1.1.0__py3-none-any.whl → 1.3.0__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.
- armodel/cli/arxml_dump_cli.py +8 -8
- armodel/cli/swc_list_cli.py +81 -0
- armodel/lib/__init__.py +3 -0
- armodel/lib/cli_args_parser.py +36 -0
- armodel/lib/data_analyzer.py +34 -0
- armodel/models/ar_object.py +1 -1
- armodel/models/ar_package.py +25 -2
- armodel/models/common_structure.py +13 -4
- armodel/models/implementation.py +9 -8
- armodel/models/sw_component.py +2 -0
- armodel/parser/arxml_parser.py +92 -68
- {armodel-1.1.0.dist-info → armodel-1.3.0.dist-info}/METADATA +185 -145
- armodel-1.3.0.dist-info/RECORD +31 -0
- {armodel-1.1.0.dist-info → armodel-1.3.0.dist-info}/WHEEL +1 -1
- {armodel-1.1.0.dist-info → armodel-1.3.0.dist-info}/entry_points.txt +1 -0
- armodel-1.1.0.dist-info/RECORD +0 -27
- {armodel-1.1.0.dist-info → armodel-1.3.0.dist-info}/LICENSE +0 -0
- {armodel-1.1.0.dist-info → armodel-1.3.0.dist-info}/top_level.txt +0 -0
armodel/cli/arxml_dump_cli.py
CHANGED
|
@@ -17,16 +17,16 @@ def show_variable_access(indent:int, variable_access: VariableAccess):
|
|
|
17
17
|
print("%s: %s" % (" " * indent, autosar_variable_in_impl_datatype.port_prototype.value))
|
|
18
18
|
print("%s: %s" % (" " * indent, autosar_variable_in_impl_datatype.target_data_prototype.value))
|
|
19
19
|
|
|
20
|
-
def show_port(indent:int,
|
|
21
|
-
if (isinstance(
|
|
22
|
-
print("%s-RPort: %s (%s)" % (" " * indent,
|
|
23
|
-
for client_com_spec in
|
|
20
|
+
def show_port(indent:int, port_prototype: PortPrototype):
|
|
21
|
+
if (isinstance(port_prototype, RPortPrototype)):
|
|
22
|
+
print("%s-RPort: %s (%s)" % (" " * indent, port_prototype.short_name, port_prototype.required_interface_tref.value))
|
|
23
|
+
for client_com_spec in port_prototype.getClientComSpecs():
|
|
24
24
|
print("%s : %s (ClientComSpec)" % (" " * (indent + 2), client_com_spec.operation_ref.value))
|
|
25
|
-
for com_spec in
|
|
25
|
+
for com_spec in port_prototype.getNonqueuedReceiverComSpecs():
|
|
26
26
|
print("%s : %s (NonqueuedReceiverComSpec)" % (" " * (indent + 2), com_spec.data_element_ref.value))
|
|
27
|
-
elif (isinstance(
|
|
28
|
-
print("%s-PPort: %s (%s)" % (" " * indent,
|
|
29
|
-
for com_spec in
|
|
27
|
+
elif (isinstance(port_prototype, PPortPrototype)):
|
|
28
|
+
print("%s-PPort: %s (%s)" % (" " * indent, port_prototype.short_name, port_prototype.provided_interface_tref.value))
|
|
29
|
+
for com_spec in port_prototype.getNonqueuedSenderComSpecs():
|
|
30
30
|
print("%s : %s (NonqueuedSenderComSpec)" % (" " * (indent + 2), com_spec.data_element_ref.value))
|
|
31
31
|
else:
|
|
32
32
|
raise ValueError("Unsupported Port prototype")
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
import pkg_resources
|
|
3
|
+
import logging
|
|
4
|
+
import sys
|
|
5
|
+
import os.path
|
|
6
|
+
|
|
7
|
+
from armodel import AUTOSAR, ARPackage
|
|
8
|
+
from armodel.parser import ARXMLParser
|
|
9
|
+
|
|
10
|
+
from ..lib import InputFileParser, SwComponentAnalyzer
|
|
11
|
+
|
|
12
|
+
def main():
|
|
13
|
+
version = pkg_resources.require("armodel")[0].version
|
|
14
|
+
|
|
15
|
+
ap = argparse.ArgumentParser()
|
|
16
|
+
ap.add_argument("-v", "--verbose", required= False, help= "Print debug information", action= "store_true")
|
|
17
|
+
ap.add_argument("-f", "--format", required= False, help= "Specify the short or long name of Sw-C. [short|long]")
|
|
18
|
+
ap.add_argument("--filter", required= False, help = "Set the filter condition. [CompositionSwComponent]")
|
|
19
|
+
ap.add_argument("Input", help = "The path of AUTOSAR XML", nargs='+')
|
|
20
|
+
|
|
21
|
+
args = ap.parse_args()
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger()
|
|
24
|
+
|
|
25
|
+
formatter = logging.Formatter('[%(levelname)s] : %(message)s')
|
|
26
|
+
|
|
27
|
+
stdout_handler = logging.StreamHandler(sys.stderr)
|
|
28
|
+
stdout_handler.setFormatter(formatter)
|
|
29
|
+
|
|
30
|
+
#base_path = os.path.dirname(args.Output)
|
|
31
|
+
log_file = os.path.join(".", 'swc-list.log')
|
|
32
|
+
|
|
33
|
+
if os.path.exists(log_file):
|
|
34
|
+
os.remove(log_file)
|
|
35
|
+
|
|
36
|
+
file_handler = logging.FileHandler(log_file)
|
|
37
|
+
file_handler.setFormatter(formatter)
|
|
38
|
+
|
|
39
|
+
logger.setLevel(logging.DEBUG)
|
|
40
|
+
file_handler.setLevel(logging.DEBUG)
|
|
41
|
+
|
|
42
|
+
if args.verbose:
|
|
43
|
+
stdout_handler.setLevel(logging.DEBUG)
|
|
44
|
+
|
|
45
|
+
else:
|
|
46
|
+
stdout_handler.setLevel(logging.INFO)
|
|
47
|
+
|
|
48
|
+
logger.addHandler(file_handler)
|
|
49
|
+
logger.addHandler(stdout_handler)
|
|
50
|
+
|
|
51
|
+
try:
|
|
52
|
+
parser = InputFileParser(args.Input)
|
|
53
|
+
filenames = parser.parse()
|
|
54
|
+
|
|
55
|
+
document = AUTOSAR().getInstance()
|
|
56
|
+
parser = ARXMLParser({'warning': True})
|
|
57
|
+
|
|
58
|
+
format = "short"
|
|
59
|
+
if args.format is not None and args.format.lower() == "long":
|
|
60
|
+
format = "long"
|
|
61
|
+
|
|
62
|
+
for filename in filenames:
|
|
63
|
+
parser.load(filename, document)
|
|
64
|
+
|
|
65
|
+
filter = ""
|
|
66
|
+
if args.filter is not None and args.filter.lower() == "compositionswcomponent":
|
|
67
|
+
filter = "CompositionSwComponent"
|
|
68
|
+
|
|
69
|
+
analyzer = SwComponentAnalyzer()
|
|
70
|
+
analyzer.import_data(document)
|
|
71
|
+
analyzer.print_out({
|
|
72
|
+
'format': format,
|
|
73
|
+
'filter': filter,
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
except Exception as e:
|
|
77
|
+
#print(e)
|
|
78
|
+
raise e
|
|
79
|
+
|
|
80
|
+
if __name__ == "__main__":
|
|
81
|
+
main()
|
armodel/lib/__init__.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from typing import List
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import os, re
|
|
5
|
+
|
|
6
|
+
class InputFileParser:
|
|
7
|
+
def __init__(self, args: List[str]) -> None:
|
|
8
|
+
self._args = args
|
|
9
|
+
self._filenames = [] # type: List[str]
|
|
10
|
+
self._logger = logging.getLogger()
|
|
11
|
+
|
|
12
|
+
def _parse_file_list(self, file):
|
|
13
|
+
with open(file) as f_in:
|
|
14
|
+
for line in f_in:
|
|
15
|
+
self._filenames.append(line.strip())
|
|
16
|
+
|
|
17
|
+
def _parse_dir_files(self, dir_name):
|
|
18
|
+
for (root, _, files) in os.walk(dir_name, topdown=False):
|
|
19
|
+
for file in files:
|
|
20
|
+
m = re.match(r'.*\.arxml$', file, re.I)
|
|
21
|
+
|
|
22
|
+
if m:
|
|
23
|
+
self._filenames.append(os.path.join(root, file))
|
|
24
|
+
|
|
25
|
+
def parse(self) -> List[str]:
|
|
26
|
+
for input_file in self._args:
|
|
27
|
+
if os.path.isdir(input_file):
|
|
28
|
+
self._parse_dir_files(input_file)
|
|
29
|
+
else:
|
|
30
|
+
if input_file[0] == "@":
|
|
31
|
+
self._logger.debug("Parse ARXML list file %s " % input_file)
|
|
32
|
+
self._parse_file_list(input_file[1:])
|
|
33
|
+
else:
|
|
34
|
+
self._filenames.append(input_file)
|
|
35
|
+
|
|
36
|
+
return self._filenames
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from typing import List
|
|
4
|
+
from ..models import AUTOSAR, ARPackage, AtomicSwComponentType, CompositionSwComponentType
|
|
5
|
+
|
|
6
|
+
class SwComponentAnalyzer:
|
|
7
|
+
def __init__(self) -> None:
|
|
8
|
+
self.swcs = [] # type: List[AtomicSwComponentType]
|
|
9
|
+
|
|
10
|
+
def parse_pkg(self, parent: ARPackage):
|
|
11
|
+
for pkg in parent.getARPackages():
|
|
12
|
+
self.parse_pkg(pkg)
|
|
13
|
+
for swc in parent.getSwComponentTypes():
|
|
14
|
+
self.swcs.append(swc)
|
|
15
|
+
|
|
16
|
+
def import_data(self, document: AUTOSAR):
|
|
17
|
+
for pkg in document.getARPackages():
|
|
18
|
+
self.parse_pkg(pkg)
|
|
19
|
+
|
|
20
|
+
def print_out(self, option = {}):
|
|
21
|
+
logger = logging.getLogger()
|
|
22
|
+
|
|
23
|
+
logger.info("== SW-C LIST ==")
|
|
24
|
+
|
|
25
|
+
if option['filter'] == 'CompositionSwComponent':
|
|
26
|
+
swc_list = filter(lambda o: isinstance(o, CompositionSwComponentType), self.swcs)
|
|
27
|
+
else:
|
|
28
|
+
swc_list = self.swcs
|
|
29
|
+
|
|
30
|
+
for swc in sorted(swc_list, key = lambda o: o.short_name):
|
|
31
|
+
if option['format'] == 'long':
|
|
32
|
+
logger.info("%s" % swc.full_name)
|
|
33
|
+
else:
|
|
34
|
+
logger.info("%s" % swc.short_name)
|
armodel/models/ar_object.py
CHANGED
armodel/models/ar_package.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from typing import List
|
|
2
2
|
from .general_structure import Identifiable, ARObject, Referrable, CollectableElement, SwcBswMapping
|
|
3
3
|
from .port_interface import SenderReceiverInterface, ClientServerInterface
|
|
4
|
-
from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType, ServiceSwComponentType, CompositionSwComponentType
|
|
4
|
+
from .sw_component import SwComponentType, EcuAbstractionSwComponentType, AtomicSwComponentType, ApplicationSwComponentType, ServiceSwComponentType, CompositionSwComponentType, SensorActuatorSwComponentType
|
|
5
5
|
from .datatype import ImplementationDataType, ApplicationDataType, DataTypeMappingSet, DataTypeMap, SwBaseType, ApplicationPrimitiveDataType, ApplicationRecordDataType
|
|
6
6
|
from .m2_msr import CompuMethod
|
|
7
|
-
from .implementation import BswImplementation
|
|
7
|
+
from .implementation import BswImplementation, SwcImplementation, Implementation
|
|
8
8
|
from .bsw_module_template import BswModuleDescription, BswModuleEntry
|
|
9
9
|
|
|
10
10
|
class ARPackage(Identifiable, CollectableElement):
|
|
@@ -38,6 +38,12 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
38
38
|
sw_component = ServiceSwComponentType(self, short_name)
|
|
39
39
|
self.elements[short_name] = sw_component
|
|
40
40
|
return self.elements[short_name]
|
|
41
|
+
|
|
42
|
+
def createSensorActuatorSwComponentType(self, short_name: str) -> SensorActuatorSwComponentType:
|
|
43
|
+
if (short_name not in self.elements):
|
|
44
|
+
sw_component = SensorActuatorSwComponentType(self, short_name)
|
|
45
|
+
self.elements[short_name] = sw_component
|
|
46
|
+
return self.elements[short_name]
|
|
41
47
|
|
|
42
48
|
def createCompositionSwComponentType(self, short_name: str) -> CompositionSwComponentType:
|
|
43
49
|
if (short_name not in self.elements):
|
|
@@ -110,6 +116,12 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
110
116
|
sw_component = BswImplementation(self, short_name)
|
|
111
117
|
self.elements[short_name] = sw_component
|
|
112
118
|
return self.elements[short_name]
|
|
119
|
+
|
|
120
|
+
def createSwcImplementation(self, short_name: str) -> SwcImplementation:
|
|
121
|
+
if (short_name not in self.elements):
|
|
122
|
+
sw_component = SwcImplementation(self, short_name)
|
|
123
|
+
self.elements[short_name] = sw_component
|
|
124
|
+
return self.elements[short_name]
|
|
113
125
|
|
|
114
126
|
def createSwcBswMapping(self, short_name: str) -> SwcBswMapping:
|
|
115
127
|
if (short_name not in self.elements):
|
|
@@ -128,6 +140,9 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
128
140
|
|
|
129
141
|
def getSwComponentTypes(self) -> List[SwComponentType]:
|
|
130
142
|
return list(filter(lambda a : isinstance(a, SwComponentType), self.elements.values()))
|
|
143
|
+
|
|
144
|
+
def getSensorActuatorSwComponentType(self) -> List[SensorActuatorSwComponentType]:
|
|
145
|
+
return list(filter(lambda a : isinstance(a, SensorActuatorSwComponentType), self.elements.values()))
|
|
131
146
|
|
|
132
147
|
def getAtomicSwComponentTypes(self) -> List[AtomicSwComponentType]:
|
|
133
148
|
return list(filter(lambda a : isinstance(a, AtomicSwComponentType), self.elements.values()))
|
|
@@ -155,6 +170,12 @@ class ARPackage(Identifiable, CollectableElement):
|
|
|
155
170
|
|
|
156
171
|
def getBswImplementations(self) -> List[BswImplementation]:
|
|
157
172
|
return list(filter(lambda a: isinstance(a, BswImplementation), self.elements.values()))
|
|
173
|
+
|
|
174
|
+
def getSwcImplementations(self) -> List[SwcImplementation]:
|
|
175
|
+
return list(filter(lambda a: isinstance(a, SwcImplementation), self.elements.values()))
|
|
176
|
+
|
|
177
|
+
def getImplementations(self) -> List[Implementation]:
|
|
178
|
+
return list(filter(lambda a: isinstance(a, Implementation), self.elements.values()))
|
|
158
179
|
|
|
159
180
|
def getSwcBswMappings(self) -> List[SwcBswMapping]:
|
|
160
181
|
return list(filter(lambda a: isinstance(a, SwcBswMapping), self.elements.values()))
|
|
@@ -220,6 +241,8 @@ class AUTOSAR (ARObject, CollectableElement):
|
|
|
220
241
|
raise ValueError("%s is not ImplementationDataType." % data_type)
|
|
221
242
|
|
|
222
243
|
def addDataTypeMap(self, data_type_map: DataTypeMap):
|
|
244
|
+
if (data_type_map.application_data_type_ref is None) or (data_type_map.implementation_data_type_ref is None):
|
|
245
|
+
return
|
|
223
246
|
self._appl_impl_type_maps[data_type_map.application_data_type_ref.value] = data_type_map.implementation_data_type_ref.value
|
|
224
247
|
self._impl_appl_type_maps[data_type_map.implementation_data_type_ref.value] = data_type_map.application_data_type_ref.value
|
|
225
248
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
#from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
from abc import ABCMeta
|
|
3
4
|
from typing import List
|
|
4
5
|
|
|
@@ -6,6 +7,8 @@ from .general_structure import ARObject, ARElement, Identifiable
|
|
|
6
7
|
from .data_dictionary import SwDataDefProps
|
|
7
8
|
from .ar_ref import RefType
|
|
8
9
|
|
|
10
|
+
import re
|
|
11
|
+
|
|
9
12
|
class ValueSpecification(ARObject, metaclass=ABCMeta):
|
|
10
13
|
def __init__(self):
|
|
11
14
|
if type(self) == ValueSpecification:
|
|
@@ -139,11 +142,17 @@ class MemorySection(Identifiable):
|
|
|
139
142
|
|
|
140
143
|
@alignment.setter
|
|
141
144
|
def alignment(self, value:str):
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
elif re.match(r'\d+', value):
|
|
145
|
+
match = False
|
|
146
|
+
if value in ("UNKNOWN", "UNSPECIFIED", "BOOLEAN", "PTR"):
|
|
145
147
|
self._alignment = value
|
|
148
|
+
match = True
|
|
146
149
|
else:
|
|
150
|
+
m = re.match(r'^\d+', value)
|
|
151
|
+
if m:
|
|
152
|
+
self._alignment = value
|
|
153
|
+
match = True
|
|
154
|
+
|
|
155
|
+
if not match:
|
|
147
156
|
raise ValueError("Invalid alignment <%s> of memory section <%s>" % (value, self.short_name))
|
|
148
157
|
|
|
149
158
|
|
armodel/models/implementation.py
CHANGED
|
@@ -74,14 +74,15 @@ class BswImplementation(Implementation):
|
|
|
74
74
|
self.ar_release_version = ""
|
|
75
75
|
self.revision_label_string = "" # 1
|
|
76
76
|
self.behavior_ref = None # type: RefType
|
|
77
|
-
self.
|
|
78
|
-
self.
|
|
77
|
+
self.preconfigured_configuration_ref = None # *
|
|
78
|
+
self.recommended_configuration_ref = None # *
|
|
79
79
|
self.vendor_api_infix = "" # 0..1
|
|
80
|
-
self.
|
|
80
|
+
self.vendor_specific_module_def_ref = None # *
|
|
81
81
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
def getVendorSpecificModuleDefRefs(self) -> List[RefType]:
|
|
86
|
-
return self.vendor_specific_module_def_refs
|
|
82
|
+
class SwcImplementation(Implementation):
|
|
83
|
+
def __init__(self, parent: ARObject, short_name: str) -> None:
|
|
84
|
+
super().__init__(parent, short_name)
|
|
87
85
|
|
|
86
|
+
self.behavior_ref = None # type: RefType
|
|
87
|
+
self.per_instance_memory_size = None
|
|
88
|
+
self.required_rte_vendor = ""
|
armodel/models/sw_component.py
CHANGED
|
@@ -11,6 +11,8 @@ class VariableAccess(Identifiable):
|
|
|
11
11
|
def __init__(self, parent: ARObject, short_name):
|
|
12
12
|
super().__init__(parent, short_name)
|
|
13
13
|
self.accessed_variable_ref = AutosarVariableRef()
|
|
14
|
+
self.accessed_variable_ref.parent = self
|
|
15
|
+
self.parent = parent
|
|
14
16
|
self.local_variable_ref = None # type: RefType
|
|
15
17
|
|
|
16
18
|
class ExecutableEntity(Identifiable):
|
armodel/parser/arxml_parser.py
CHANGED
|
@@ -15,6 +15,7 @@ from ..models import Implementation, Code, AutosarEngineeringObject, ResourceCon
|
|
|
15
15
|
from ..models import BswImplementation, BswModuleDescription, BswInternalBehavior, BswCalledEntity, BswModuleEntity, BswScheduleEvent, SwcBswMapping, SwcBswRunnableMapping
|
|
16
16
|
|
|
17
17
|
from typing import List
|
|
18
|
+
from colorama import Fore
|
|
18
19
|
import xml.etree.ElementTree as ET
|
|
19
20
|
import re
|
|
20
21
|
import logging
|
|
@@ -24,6 +25,7 @@ class ARXMLParser:
|
|
|
24
25
|
self.nsmap = {"xmlns": "http://autosar.org/schema/r4.0"}
|
|
25
26
|
self.options = {}
|
|
26
27
|
self.options['warning'] = False
|
|
28
|
+
self.logger = logging.getLogger()
|
|
27
29
|
|
|
28
30
|
self._processOptions(options=options)
|
|
29
31
|
|
|
@@ -35,7 +37,7 @@ class ARXMLParser:
|
|
|
35
37
|
|
|
36
38
|
def _raiseError(self, error_msg):
|
|
37
39
|
if (self.options['warning'] == True):
|
|
38
|
-
|
|
40
|
+
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
39
41
|
else:
|
|
40
42
|
raise ValueError(error_msg)
|
|
41
43
|
|
|
@@ -125,24 +127,25 @@ class ARXMLParser:
|
|
|
125
127
|
return None
|
|
126
128
|
|
|
127
129
|
def readChildRefElementList(self, element, key) -> List[RefType]:
|
|
128
|
-
|
|
130
|
+
child_elements = element.findall("./xmlns:%s" % key, self.nsmap)
|
|
129
131
|
results = []
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
ref.value = child_element.text
|
|
136
|
-
results.append(ref)
|
|
137
|
-
|
|
132
|
+
for child_element in child_elements:
|
|
133
|
+
ref = RefType()
|
|
134
|
+
ref.dest = child_element.attrib['DEST']
|
|
135
|
+
ref.value = child_element.text
|
|
136
|
+
results.append(ref)
|
|
138
137
|
return results
|
|
139
138
|
|
|
140
|
-
def readAutosarVariableInImplDatatype(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
139
|
+
def readAutosarVariableInImplDatatype(self, element: ET.Element, accessed_variable_ref: AutosarVariableRef):
|
|
141
140
|
child_element = element.find("./xmlns:ACCESSED-VARIABLE/xmlns:AUTOSAR-VARIABLE-IREF", self.nsmap)
|
|
142
141
|
if (child_element != None):
|
|
143
142
|
autosar_variable_in_impl_datatype = ArVariableInImplementationDataInstanceRef()
|
|
144
143
|
autosar_variable_in_impl_datatype.port_prototype_ref = self.readChildOptionalRefElement(child_element, "PORT-PROTOTYPE-REF")
|
|
145
|
-
autosar_variable_in_impl_datatype.
|
|
144
|
+
if autosar_variable_in_impl_datatype.port_prototype_ref is None:
|
|
145
|
+
self._raiseError("PORT-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
146
|
+
autosar_variable_in_impl_datatype.target_data_prototype_ref = self.readChildOptionalRefElement(child_element, "TARGET-DATA-PROTOTYPE-REF")
|
|
147
|
+
if autosar_variable_in_impl_datatype.target_data_prototype_ref is None:
|
|
148
|
+
self._raiseError("TARGET-DATA-PROTOTYPE-REF of <%s> is empty." % accessed_variable_ref.parent.short_name)
|
|
146
149
|
accessed_variable_ref.autosar_variable_in_impl_datatype = autosar_variable_in_impl_datatype
|
|
147
150
|
|
|
148
151
|
def readLocalVariableRef(self, element, accessed_variable_ref: AutosarVariableRef):
|
|
@@ -153,6 +156,8 @@ class ARXMLParser:
|
|
|
153
156
|
def _readVariableAccesses(self, element, parent: RunnableEntity, key: str):
|
|
154
157
|
for child_element in element.findall("./xmlns:%s/xmlns:VARIABLE-ACCESS" % key, self.nsmap):
|
|
155
158
|
short_name = self.readShortName(child_element)
|
|
159
|
+
self.logger.debug("readVariableAccesses %s" % short_name)
|
|
160
|
+
|
|
156
161
|
if (key == "DATA-RECEIVE-POINT-BY-ARGUMENTS"):
|
|
157
162
|
variable_access = parent.createDataReceivePointByArgument(short_name)
|
|
158
163
|
self.readAutosarVariableInImplDatatype(child_element, variable_access.accessed_variable_ref)
|
|
@@ -179,12 +184,12 @@ class ARXMLParser:
|
|
|
179
184
|
ref = self.readChildOptionalRefElement(child_element, "BSW-MODULE-ENTRY-REF")
|
|
180
185
|
if (ref != None):
|
|
181
186
|
parent.implemented_entry_refs.append(ref)
|
|
182
|
-
|
|
187
|
+
self.logger.debug("ImplementedEntry <%s> of BswModuleDescription <%s> has been added", ref.value, parent.short_name)
|
|
183
188
|
|
|
184
189
|
def readProvidedModeGroup(self, element, parent: BswModuleDescription):
|
|
185
190
|
for child_element in element.findall("./xmlns:PROVIDED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
186
191
|
short_name = self.readShortName(child_element)
|
|
187
|
-
|
|
192
|
+
self.logger.debug("readProvidedModeGroup %s" % short_name)
|
|
188
193
|
|
|
189
194
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
190
195
|
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
@@ -192,13 +197,15 @@ class ARXMLParser:
|
|
|
192
197
|
def readRequiredModeGroup(self, element, parent: BswModuleDescription):
|
|
193
198
|
for child_element in element.findall("./xmlns:REQUIRED-MODE-GROUPS/xmlns:MODE-DECLARATION-GROUP-PROTOTYPE", self.nsmap):
|
|
194
199
|
short_name = self.readShortName(child_element)
|
|
195
|
-
|
|
200
|
+
self.logger.debug("readRequiredModeGroup %s" % short_name)
|
|
196
201
|
mode_group = parent.createProvidedModeGroup(short_name)
|
|
197
202
|
mode_group.type_tref = self.readChildRefElement(parent.short_name, child_element, "TYPE-TREF")
|
|
198
203
|
|
|
199
204
|
def readCanEnterExclusiveAreaRefs(self, element, entity: ExecutableEntity):
|
|
200
|
-
|
|
201
|
-
|
|
205
|
+
child_element = element.find("./xmlns:CAN-ENTER-EXCLUSIVE-AREA-REFS", self.nsmap)
|
|
206
|
+
if child_element != None:
|
|
207
|
+
for ref in self.readChildRefElementList(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF"):
|
|
208
|
+
entity.addCanEnterExclusiveAreaRef(ref)
|
|
202
209
|
|
|
203
210
|
def readExecutableEntity(self, element, entity: ExecutableEntity):
|
|
204
211
|
self.readCanEnterExclusiveAreaRefs(element, entity)
|
|
@@ -211,7 +218,7 @@ class ARXMLParser:
|
|
|
211
218
|
def readBswCalledEntity(self, element, parent: BswInternalBehavior):
|
|
212
219
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-CALLED-ENTITY", self.nsmap):
|
|
213
220
|
short_name = self.readShortName(child_element)
|
|
214
|
-
|
|
221
|
+
self.logger.debug("readBswCalledEntity %s" % short_name)
|
|
215
222
|
entity = parent.createBswCalledEntity(short_name)
|
|
216
223
|
|
|
217
224
|
self.readBswModuleEntity(child_element, entity)
|
|
@@ -219,7 +226,7 @@ class ARXMLParser:
|
|
|
219
226
|
def readBswSchedulableEntity(self, element, parent: BswInternalBehavior):
|
|
220
227
|
for child_element in element.findall("./xmlns:ENTITYS/xmlns:BSW-SCHEDULABLE-ENTITY", self.nsmap):
|
|
221
228
|
short_name = self.readShortName(child_element)
|
|
222
|
-
|
|
229
|
+
self.logger.debug("readBswSchedulableEntity %s" % short_name)
|
|
223
230
|
entity = parent.createBswSchedulableEntity(short_name)
|
|
224
231
|
|
|
225
232
|
self.readBswModuleEntity(child_element, entity)
|
|
@@ -233,7 +240,7 @@ class ARXMLParser:
|
|
|
233
240
|
def readBswModeSwitchEvent(self, element, parent: BswInternalBehavior):
|
|
234
241
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-MODE-SWITCH-EVENT", self.nsmap):
|
|
235
242
|
short_name = self.readShortName(child_element)
|
|
236
|
-
|
|
243
|
+
self.logger.debug("readBswModeSwitchEvent %s" % short_name)
|
|
237
244
|
event = parent.createBswModeSwitchEvent(short_name)
|
|
238
245
|
|
|
239
246
|
self.readBswScheduleEvent(child_element, event)
|
|
@@ -241,7 +248,7 @@ class ARXMLParser:
|
|
|
241
248
|
def readBswTimingEvent(self, element, parent: BswInternalBehavior):
|
|
242
249
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-TIMING-EVENT", self.nsmap):
|
|
243
250
|
short_name = self.readShortName(child_element)
|
|
244
|
-
|
|
251
|
+
self.logger.debug("readBswTimingEvent %s" % short_name)
|
|
245
252
|
event = parent.createBswTimingEvent(short_name)
|
|
246
253
|
event.period = self.readChildElementFloatValue(short_name, child_element, "PERIOD")
|
|
247
254
|
|
|
@@ -250,7 +257,7 @@ class ARXMLParser:
|
|
|
250
257
|
def readBswDataReceivedEvent(self, element, parent: BswInternalBehavior):
|
|
251
258
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-DATA-RECEIVED-EVENT", self.nsmap):
|
|
252
259
|
short_name = self.readShortName(child_element)
|
|
253
|
-
|
|
260
|
+
self.logger.debug("readBswDataReceivedEvent %s" % short_name)
|
|
254
261
|
event = parent.createBswDataReceivedEvent(short_name)
|
|
255
262
|
event.data_ref = self.readChildRefElement(parent.short_name, child_element, "DATA-REF")
|
|
256
263
|
|
|
@@ -259,15 +266,17 @@ class ARXMLParser:
|
|
|
259
266
|
def readBswInternalTriggerOccurredEvent(self, element, parent: BswInternalBehavior):
|
|
260
267
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:BSW-INTERNAL-TRIGGER-OCCURRED-EVENT", self.nsmap):
|
|
261
268
|
short_name = self.readShortName(child_element)
|
|
262
|
-
|
|
269
|
+
self.logger.debug("readBswInternalTriggerOccurredEvent %s" % short_name)
|
|
263
270
|
event = parent.createBswInternalTriggerOccurredEvent(short_name)
|
|
264
271
|
event.event_source_ref = self.readChildRefElement(parent.short_name, child_element, "EVENT-SOURCE-REF")
|
|
265
272
|
|
|
266
273
|
self.readBswScheduleEvent(child_element, event)
|
|
267
274
|
|
|
268
275
|
def readDataTypeMappingRefs(self, element, behavior: InternalBehavior):
|
|
269
|
-
|
|
270
|
-
|
|
276
|
+
child_element = element.find("./xmlns:DATA-TYPE-MAPPING-REFS", self.nsmap)
|
|
277
|
+
if child_element != None:
|
|
278
|
+
for ref in self.readChildRefElementList(child_element, "DATA-TYPE-MAPPING-REF"):
|
|
279
|
+
behavior.addDataTypeMappingRef(ref)
|
|
271
280
|
|
|
272
281
|
def readInternalBehavior(self, element, behavior: InternalBehavior):
|
|
273
282
|
for child_element in element.findall("./xmlns:EXCLUSIVE-AREAS/xmlns:EXCLUSIVE-AREA", self.nsmap):
|
|
@@ -280,17 +289,14 @@ class ARXMLParser:
|
|
|
280
289
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:SWC-INTERNAL-BEHAVIOR", self.nsmap):
|
|
281
290
|
short_name = self.readShortName(child_element)
|
|
282
291
|
behavior = parent.createSwcInternalBehavior(short_name)
|
|
283
|
-
|
|
292
|
+
self.logger.debug("readSwInternalBehavior %s" % behavior.full_name)
|
|
284
293
|
|
|
285
294
|
# read the internal behavior
|
|
286
295
|
self.readInternalBehavior(child_element, behavior)
|
|
287
296
|
|
|
288
297
|
self.readRunnableEntities(child_element, behavior)
|
|
289
298
|
self.readOperationInvokedEvents(child_element, behavior)
|
|
290
|
-
self.readInitEvents(child_element, behavior)
|
|
291
299
|
self.readTimingEvents(child_element, behavior)
|
|
292
|
-
self.readDataReceivedEvent(child_element, behavior)
|
|
293
|
-
self.readSwcModeSwitchEvent(child_element, behavior)
|
|
294
300
|
self.readInternalTriggerOccurredEvent(child_element, behavior)
|
|
295
301
|
self.readExplicitInterRunnableVariables(child_element, behavior)
|
|
296
302
|
|
|
@@ -298,7 +304,7 @@ class ARXMLParser:
|
|
|
298
304
|
for child_element in element.findall("./xmlns:INTERNAL-BEHAVIORS/xmlns:BSW-INTERNAL-BEHAVIOR", self.nsmap):
|
|
299
305
|
short_name = self.readShortName(child_element)
|
|
300
306
|
behavior = parent.createBswInternalBehavior(short_name)
|
|
301
|
-
|
|
307
|
+
self.logger.debug("readBswInternalBehavior %s" % behavior.full_name)
|
|
302
308
|
|
|
303
309
|
# read the internal behavior
|
|
304
310
|
self.readInternalBehavior(child_element, behavior)
|
|
@@ -316,7 +322,7 @@ class ARXMLParser:
|
|
|
316
322
|
bsw_module_description = parent.createBswModuleDescription(short_name)
|
|
317
323
|
bsw_module_description.module_id = self.readChildElementNumberValue(short_name, child_element, "MODULE-ID")
|
|
318
324
|
|
|
319
|
-
|
|
325
|
+
self.logger.debug("readBswModuleDescription %s" % bsw_module_description.full_name)
|
|
320
326
|
|
|
321
327
|
self.readBswModuleDescriptionImplementedEntry(child_element, bsw_module_description)
|
|
322
328
|
self.readProvidedModeGroup(child_element, bsw_module_description)
|
|
@@ -334,8 +340,8 @@ class ARXMLParser:
|
|
|
334
340
|
entry.execution_context = self.readChildOptionalElement(child_element, "EXECUTION-CONTEXT")
|
|
335
341
|
entry.sw_service_impl_policy = self.readChildOptionalElement(child_element, "SW-SERVICE-IMPL-POLICY")
|
|
336
342
|
|
|
337
|
-
#
|
|
338
|
-
|
|
343
|
+
#self.logger.debug("readBswModuleEntry \n%s" % entry)
|
|
344
|
+
self.logger.debug("readBswModuleEntry %s" % entry.short_name)
|
|
339
345
|
|
|
340
346
|
def readArtifactDescriptor(self, element, code_desc: Code):
|
|
341
347
|
for child_element in element.findall("./xmlns:ARTIFACT-DESCRIPTORS/xmlns:AUTOSAR-ENGINEERING-OBJECT", self.nsmap):
|
|
@@ -344,12 +350,12 @@ class ARXMLParser:
|
|
|
344
350
|
artifact_desc.category = self.readChildElement(code_desc.short_name, child_element, "CATEGORY")
|
|
345
351
|
code_desc.addArtifactDescriptor(artifact_desc)
|
|
346
352
|
|
|
347
|
-
|
|
353
|
+
self.logger.debug("readArtifactDescriptor %s", artifact_desc.short_label)
|
|
348
354
|
|
|
349
355
|
def readCodeDescriptor(self, element, impl: Implementation):
|
|
350
356
|
for child_element in element.findall("./xmlns:CODE-DESCRIPTORS/xmlns:CODE", self.nsmap):
|
|
351
357
|
short_name = self.readShortName(child_element)
|
|
352
|
-
|
|
358
|
+
self.logger.debug("readCodeDescriptor %s" % short_name)
|
|
353
359
|
code_desc = impl.createCodeDescriptor(short_name)
|
|
354
360
|
self.readArtifactDescriptor(child_element, code_desc)
|
|
355
361
|
|
|
@@ -361,7 +367,7 @@ class ARXMLParser:
|
|
|
361
367
|
if (alignment != None):
|
|
362
368
|
memory_section.alignment = alignment
|
|
363
369
|
memory_section.sw_addr_method_ref = self.readChildRefElement(consumption.short_name, child_element, "SW-ADDRMETHOD-REF")
|
|
364
|
-
|
|
370
|
+
self.logger.debug("readMemorySections %s" % memory_section.short_name)
|
|
365
371
|
|
|
366
372
|
def readResourceConsumption(self, element, impl: Implementation):
|
|
367
373
|
child_element = element.find("./xmlns:RESOURCE-CONSUMPTION", self.nsmap)
|
|
@@ -374,28 +380,32 @@ class ARXMLParser:
|
|
|
374
380
|
|
|
375
381
|
def readImplementation(self, element, impl: Implementation):
|
|
376
382
|
self.readCodeDescriptor(element, impl)
|
|
377
|
-
impl.programming_language = self.
|
|
383
|
+
impl.programming_language = self.readChildOptionalElement(element, "PROGRAMMING-LANGUAGE")
|
|
378
384
|
self.readResourceConsumption(element, impl)
|
|
379
|
-
impl.sw_version = self.
|
|
385
|
+
impl.sw_version = self.readChildOptionalElement(element, "SW-VERSION")
|
|
380
386
|
impl.swc_bsw_mapping_ref = self.readChildOptionalRefElement(element, "SWC-BSW-MAPPING-REF")
|
|
381
387
|
impl.vendor_id = self.readChildOptionalElementNumberValue(element, "VENDOR-ID")
|
|
382
|
-
if (impl.vendor_id == None):
|
|
383
|
-
self._raiseError("Vendor id of <%s> is required" % impl.short_name)
|
|
384
|
-
|
|
385
|
-
def readVendorSpecificModuleDefs(self, element, impl: BswImplementation):
|
|
386
|
-
for ref in self.readChildRefElementList(element, "VENDOR-SPECIFIC-MODULE-DEF-REF"):
|
|
387
|
-
impl.addVendorSpecificModuleDefRef(ref)
|
|
388
388
|
|
|
389
389
|
def readBswImplementation(self, element, parent: ARPackage):
|
|
390
390
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:BSW-IMPLEMENTATION", self.nsmap):
|
|
391
391
|
short_name = self.readShortName(child_element)
|
|
392
|
-
impl = parent.createBswImplementation(short_name)
|
|
393
|
-
|
|
392
|
+
impl = parent.createBswImplementation(short_name)
|
|
393
|
+
self.logger.debug("readBswImplementation %s" % impl.short_name)
|
|
394
394
|
|
|
395
395
|
self.readImplementation(child_element, impl)
|
|
396
|
+
|
|
396
397
|
impl.ar_release_version = self.readChildElement(parent.short_name, child_element, "AR-RELEASE-VERSION")
|
|
397
398
|
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
398
|
-
|
|
399
|
+
|
|
400
|
+
def readSwcImplementation(self, element, parent: ARPackage):
|
|
401
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SWC-IMPLEMENTATION", self.nsmap):
|
|
402
|
+
short_name = self.readShortName(child_element)
|
|
403
|
+
impl = parent.createSwcImplementation(short_name)
|
|
404
|
+
self.logger.debug("readSwcImplementation %s" % impl.short_name)
|
|
405
|
+
|
|
406
|
+
self.readImplementation(child_element, impl)
|
|
407
|
+
|
|
408
|
+
impl.behavior_ref = self.readChildRefElement(parent.short_name, child_element, "BEHAVIOR-REF")
|
|
399
409
|
|
|
400
410
|
def readDataReceivePointByArguments(self, element, parent: RunnableEntity):
|
|
401
411
|
self._readVariableAccesses(element, parent, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
@@ -463,9 +473,11 @@ class ARXMLParser:
|
|
|
463
473
|
for child_element in element.findall("./xmlns:RUNNABLES/xmlns:RUNNABLE-ENTITY", self.nsmap):
|
|
464
474
|
short_name = self.readShortName(child_element)
|
|
465
475
|
runnable = parent.createRunnableEntity(short_name)
|
|
466
|
-
runnable.can_be_invoked_concurrently = self.
|
|
476
|
+
runnable.can_be_invoked_concurrently = self.readChildOptionalElement(child_element, "CAN-BE-INVOKED-CONCURRENTLY")
|
|
467
477
|
runnable.symbol = self.readChildElement(short_name, child_element, "SYMBOL")
|
|
468
478
|
|
|
479
|
+
self.logger.debug("readRunnableEntities %s" % short_name)
|
|
480
|
+
|
|
469
481
|
self.readDataReceivePointByArguments(child_element, runnable)
|
|
470
482
|
self.readDataReceivePointByValues(child_element, runnable)
|
|
471
483
|
self.readDataReadAccesses(child_element, runnable)
|
|
@@ -477,7 +489,7 @@ class ARXMLParser:
|
|
|
477
489
|
self.readInternalTriggeringPoint(child_element, runnable)
|
|
478
490
|
|
|
479
491
|
def readRTEEvent(self, element, event: RTEEvent):
|
|
480
|
-
event.start_on_event_ref = self.
|
|
492
|
+
event.start_on_event_ref = self.readChildOptionalRefElement(element, "START-ON-EVENT-REF")
|
|
481
493
|
|
|
482
494
|
def readOperationIRef(self, element, parent: OperationInvokedEvent):
|
|
483
495
|
child_element = element.find("./xmlns:OPERATION-IREF", self.nsmap)
|
|
@@ -504,7 +516,7 @@ class ARXMLParser:
|
|
|
504
516
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:INIT-EVENT", self.nsmap):
|
|
505
517
|
short_name = self.readShortName(child_element)
|
|
506
518
|
event = parent.createInitEvent(short_name)
|
|
507
|
-
|
|
519
|
+
|
|
508
520
|
self.readRTEEvent(child_element, event)
|
|
509
521
|
|
|
510
522
|
def readTimingEvents(self, element, parent: SwcInternalBehavior):
|
|
@@ -523,7 +535,7 @@ class ARXMLParser:
|
|
|
523
535
|
for child_element in element.findall("./xmlns:EVENTS/xmlns:DATA-RECEIVED-EVENT", self.nsmap):
|
|
524
536
|
short_name = self.readShortName(child_element)
|
|
525
537
|
event = parent.createDataReceivedEvent(short_name)
|
|
526
|
-
|
|
538
|
+
|
|
527
539
|
self.readRTEEvent(child_element, event)
|
|
528
540
|
self.readRVariableInAtomicSwcInstanceRef(child_element, event)
|
|
529
541
|
|
|
@@ -605,8 +617,10 @@ class ARXMLParser:
|
|
|
605
617
|
array_sub_element = data_type.getImplementationDataTypeElements()[0]
|
|
606
618
|
if (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_REFERENCE):
|
|
607
619
|
data_type.setArrayElementType(array_sub_element.sw_data_def_props.implementation_data_type_ref.value)
|
|
620
|
+
elif (array_sub_element.category == ImplementationDataType.CATEGORY_TYPE_VALUE): # TODO: fix
|
|
621
|
+
continue
|
|
608
622
|
else:
|
|
609
|
-
self._raiseError("The
|
|
623
|
+
self._raiseError("The category <%s> of array sub-element <%s> does not support." % (array_sub_element.category, data_type.short_name))
|
|
610
624
|
|
|
611
625
|
def readSwDataTypes(self, element, parent: ARPackage):
|
|
612
626
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SW-BASE-TYPE", self.nsmap):
|
|
@@ -620,12 +634,12 @@ class ARXMLParser:
|
|
|
620
634
|
com_spec.operation_ref = self.readChildRefElement(parent.short_name, child_element, "OPERATION-REF")
|
|
621
635
|
parent.addRequiredComSpec(com_spec)
|
|
622
636
|
except ValueError as err:
|
|
623
|
-
|
|
637
|
+
self.logger.error(parent.short_name + ": " + str(err))
|
|
624
638
|
|
|
625
639
|
def readReceiverComSpec(self, element, com_spec: ReceiverComSpec):
|
|
626
640
|
#FIXME: readchildElement
|
|
627
641
|
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
628
|
-
com_spec.handle_out_of_range = self.
|
|
642
|
+
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
629
643
|
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
630
644
|
|
|
631
645
|
def readNonqueuedReceiverComSpec(self, element, parent: RPortPrototype):
|
|
@@ -640,14 +654,14 @@ class ARXMLParser:
|
|
|
640
654
|
com_spec.handle_never_received = self.readChildElementBooleanValue("", child_element, "HANDLE-NEVER-RECEIVED")
|
|
641
655
|
com_spec.handel_timeout_type = self.readChildElement("", child_element, "HANDLE-TIMEOUT-TYPE")
|
|
642
656
|
except ValueError as err:
|
|
643
|
-
|
|
657
|
+
self.logger.error(parent.short_name + ": " + str(err))
|
|
644
658
|
|
|
645
659
|
parent.addRequiredComSpec(com_spec)
|
|
646
660
|
|
|
647
661
|
def readRPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
648
662
|
for child_element in element.findall("./xmlns:PORTS/xmlns:R-PORT-PROTOTYPE", self.nsmap):
|
|
649
663
|
short_name = self.readShortName(child_element)
|
|
650
|
-
|
|
664
|
+
self.logger.debug("readRPortPrototype %s" % short_name)
|
|
651
665
|
|
|
652
666
|
prototype = parent.createRPortPrototype(short_name)
|
|
653
667
|
prototype.required_interface_tref = self.readChildOptionalRefElement(child_element, "REQUIRED-INTERFACE-TREF")
|
|
@@ -658,7 +672,7 @@ class ARXMLParser:
|
|
|
658
672
|
def readSenderComSpec(self, element, com_spec: SenderComSpec):
|
|
659
673
|
# FIXME:
|
|
660
674
|
com_spec.data_element_ref = self.readChildOptionalRefElement(element, "DATA-ELEMENT-REF")
|
|
661
|
-
com_spec.handle_out_of_range = self.
|
|
675
|
+
com_spec.handle_out_of_range = self.readChildOptionalElement(element, "HANDLE-OUT-OF-RANGE")
|
|
662
676
|
com_spec.uses_end_to_end_protection = self.readChildOptionalElementBooleanValue(element, "USES-END-TO-END-PROTECTION")
|
|
663
677
|
|
|
664
678
|
def readNonqueuedSenderComSpec(self, element, parent: PPortPrototype):
|
|
@@ -670,7 +684,7 @@ class ARXMLParser:
|
|
|
670
684
|
def readPPortPrototype(self, element, parent: AtomicSwComponentType):
|
|
671
685
|
for child_element in element.findall("./xmlns:PORTS/xmlns:P-PORT-PROTOTYPE", self.nsmap):
|
|
672
686
|
short_name = self.readShortName(child_element)
|
|
673
|
-
|
|
687
|
+
self.logger.debug("readPPortPrototype %s" % short_name)
|
|
674
688
|
|
|
675
689
|
prototype = parent.createPPortPrototype(short_name)
|
|
676
690
|
prototype.provided_interface_tref = self.readChildOptionalRefElement(child_element, "PROVIDED-INTERFACE-TREF")
|
|
@@ -695,7 +709,6 @@ class ARXMLParser:
|
|
|
695
709
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:APPLICATION-SW-COMPONENT-TYPE", self.nsmap):
|
|
696
710
|
short_name = self.readShortName(child_element)
|
|
697
711
|
sw_component = parent.createApplicationSwComponentType(short_name)
|
|
698
|
-
logging.debug("Read ApplicationSwComponentTypes <%s>" % sw_component.short_name)
|
|
699
712
|
self.readAtomicSwComponentType(child_element, sw_component)
|
|
700
713
|
|
|
701
714
|
def readComplexDeviceDriverSwComponentTypes(self, element, parent: ARPackage):
|
|
@@ -704,6 +717,12 @@ class ARXMLParser:
|
|
|
704
717
|
sw_component = parent.createApplicationSwComponentType(short_name)
|
|
705
718
|
self.readAtomicSwComponentType(child_element, sw_component)
|
|
706
719
|
|
|
720
|
+
def readSensorActuatorSwComponentType(self, element, parent: ARPackage):
|
|
721
|
+
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SENSOR-ACTUATOR-SW-COMPONENT-TYPE", self.nsmap):
|
|
722
|
+
short_name = self.readShortName(child_element)
|
|
723
|
+
sw_component = parent.createSensorActuatorSwComponentType(short_name)
|
|
724
|
+
self.readAtomicSwComponentType(child_element, sw_component)
|
|
725
|
+
|
|
707
726
|
def readServiceSwComponentTypes(self, element, parent: ARPackage):
|
|
708
727
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:SERVICE-SW-COMPONENT-TYPE", self.nsmap):
|
|
709
728
|
short_name = self.readShortName(child_element)
|
|
@@ -729,7 +748,7 @@ class ARXMLParser:
|
|
|
729
748
|
def readAssemblySwConnectors(self, element, parent: CompositionSwComponentType):
|
|
730
749
|
for child_element in element.findall("./xmlns:CONNECTORS/xmlns:ASSEMBLY-SW-CONNECTOR", self.nsmap):
|
|
731
750
|
short_name = self.readShortName(child_element)
|
|
732
|
-
|
|
751
|
+
self.logger.debug("readAssemblySwConnectors %s" % short_name)
|
|
733
752
|
|
|
734
753
|
connector = parent.createAssemblySwConnector(short_name)
|
|
735
754
|
self.readAssemblySwConnectorProviderIRef(child_element, connector)
|
|
@@ -738,7 +757,7 @@ class ARXMLParser:
|
|
|
738
757
|
def readSwComponentPrototypes(self, element, parent: CompositionSwComponentType):
|
|
739
758
|
for child_element in element.findall("./xmlns:COMPONENTS/xmlns:SW-COMPONENT-PROTOTYPE", self.nsmap):
|
|
740
759
|
short_name = self.readShortName(child_element)
|
|
741
|
-
|
|
760
|
+
self.logger.debug("readSwComponentPrototypes %s" % short_name)
|
|
742
761
|
|
|
743
762
|
prototype = parent.createSwComponentPrototype(short_name)
|
|
744
763
|
prototype.type_tref = self.readChildOptionalRefElement(child_element, "TYPE-TREF")
|
|
@@ -746,7 +765,7 @@ class ARXMLParser:
|
|
|
746
765
|
def readCompositionSwComponentTypes(self, element, parent: ARPackage):
|
|
747
766
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPOSITION-SW-COMPONENT-TYPE", self.nsmap):
|
|
748
767
|
short_name = self.readShortName(child_element)
|
|
749
|
-
|
|
768
|
+
self.logger.debug("readCompositionSwComponentTypes: <%s>" % short_name)
|
|
750
769
|
|
|
751
770
|
sw_component = parent.createCompositionSwComponentType(short_name)
|
|
752
771
|
self.readSwComponentType(child_element, sw_component)
|
|
@@ -790,8 +809,10 @@ class ARXMLParser:
|
|
|
790
809
|
parent.addArgumentDataPrototype(prototype)
|
|
791
810
|
|
|
792
811
|
def readPossibleErrorRefs(self, element, parent: ClientServerOperation):
|
|
793
|
-
|
|
794
|
-
|
|
812
|
+
child_element = element.find("./xmlns:POSSIBLE-ERROR-REFS", self.nsmap)
|
|
813
|
+
if child_element != None:
|
|
814
|
+
for ref in self.readChildRefElementList(child_element, "POSSIBLE-ERROR-REF"):
|
|
815
|
+
parent.addPossibleErrorRef(ref)
|
|
795
816
|
|
|
796
817
|
def readOperations(self, element, parent: ClientServerInterface):
|
|
797
818
|
for child_element in element.findall("./xmlns:OPERATIONS/xmlns:CLIENT-SERVER-OPERATION", self.nsmap):
|
|
@@ -839,7 +860,7 @@ class ARXMLParser:
|
|
|
839
860
|
for child_element in element.findall("./xmlns:ELEMENTS/xmlns:COMPU-METHOD", self.nsmap):
|
|
840
861
|
short_name = self.readShortName(child_element)
|
|
841
862
|
compu_method = parent.createCompuMethod(short_name)
|
|
842
|
-
compu_method.category = self.
|
|
863
|
+
compu_method.category = self.readChildOptionalElement(child_element, "CATEGORY")
|
|
843
864
|
self.readCompuInternalToPhys(child_element, compu_method)
|
|
844
865
|
|
|
845
866
|
def readSwcBswRunnableMappings(self, element, parent: SwcBswMapping):
|
|
@@ -863,7 +884,7 @@ class ARXMLParser:
|
|
|
863
884
|
short_name = self.readShortName(child_element)
|
|
864
885
|
ar_package = parent.createARPackage(short_name)
|
|
865
886
|
|
|
866
|
-
|
|
887
|
+
self.logger.debug("readARPackages %s" % ar_package.full_name)
|
|
867
888
|
|
|
868
889
|
self.readSenderReceiverInterfaces(child_element, ar_package)
|
|
869
890
|
self.readClientServerInterfaces(child_element, ar_package)
|
|
@@ -877,20 +898,23 @@ class ARXMLParser:
|
|
|
877
898
|
self.readEcuAbstractionSwComponents(child_element, ar_package)
|
|
878
899
|
self.readApplicationSwComponentTypes(child_element, ar_package)
|
|
879
900
|
self.readComplexDeviceDriverSwComponentTypes(child_element, ar_package)
|
|
901
|
+
self.readSensorActuatorSwComponentType(child_element, ar_package)
|
|
880
902
|
self.readServiceSwComponentTypes(child_element, ar_package)
|
|
881
903
|
self.readCompositionSwComponentTypes(child_element, ar_package)
|
|
882
904
|
self.readBswModuleDescription(child_element, ar_package)
|
|
883
905
|
self.readBswModuleEntry(child_element, ar_package)
|
|
884
906
|
self.readSwcBswMappings(child_element, ar_package)
|
|
885
907
|
self.readBswImplementation(child_element, ar_package)
|
|
886
|
-
|
|
908
|
+
self.readSwcImplementation(child_element, ar_package)
|
|
887
909
|
|
|
888
910
|
def load(self, filename, document: AUTOSAR):
|
|
911
|
+
self.logger.info("Load %s ..." % filename)
|
|
912
|
+
|
|
889
913
|
tree = ET.parse(filename)
|
|
890
914
|
root = tree.getroot()
|
|
891
915
|
if (self.getPureTagName(root.tag) != "AUTOSAR"):
|
|
892
916
|
self._raiseError("Invalid ARXML file <%s>" % filename)
|
|
893
917
|
|
|
894
|
-
|
|
918
|
+
|
|
895
919
|
|
|
896
920
|
self.readARPackages(root, document)
|
|
@@ -1,145 +1,185 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: armodel
|
|
3
|
-
Version: 1.
|
|
4
|
-
Summary: the python arxml parser
|
|
5
|
-
Home-page: http://github.com/melodypapa/py-armodel
|
|
6
|
-
Author: melodypapa
|
|
7
|
-
Author-email: melodypapa@outlook.com
|
|
8
|
-
License: MIT
|
|
9
|
-
Keywords: AUTOSAR ARXML
|
|
10
|
-
Platform: UNKNOWN
|
|
11
|
-
Classifier: Development Status :: 1 - Planning
|
|
12
|
-
Classifier: Environment :: Console
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
-
Classifier: Operating System :: OS Independent
|
|
16
|
-
Requires-Python: >=3.5
|
|
17
|
-
Description-Content-Type: text/markdown
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
1.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
1.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
* Run `
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
--arxml arg
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
2.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: armodel
|
|
3
|
+
Version: 1.3.0
|
|
4
|
+
Summary: the python arxml parser
|
|
5
|
+
Home-page: http://github.com/melodypapa/py-armodel
|
|
6
|
+
Author: melodypapa
|
|
7
|
+
Author-email: melodypapa@outlook.com
|
|
8
|
+
License: MIT
|
|
9
|
+
Keywords: AUTOSAR ARXML
|
|
10
|
+
Platform: UNKNOWN
|
|
11
|
+
Classifier: Development Status :: 1 - Planning
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Requires-Python: >=3.5
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: colorama
|
|
19
|
+
Provides-Extra: pytest
|
|
20
|
+
Requires-Dist: pytest-cov ; extra == 'pytest'
|
|
21
|
+
|
|
22
|
+
# 1. py-armodel
|
|
23
|
+
|
|
24
|
+
## 1.1. Purpose
|
|
25
|
+
|
|
26
|
+
To support AUTOSAR model with python
|
|
27
|
+
|
|
28
|
+
## 1.2. Reference Documents
|
|
29
|
+
1. AUTOSAR_TPS_XMLSchemaProductionRules.pdf
|
|
30
|
+
2. AUTOSAR_TPS_ARXMLSerializationRules.pdf
|
|
31
|
+
|
|
32
|
+
|Version|Documentation|Travis CI|Coverage Status|Pypi|
|
|
33
|
+
|--|--|--|--|--|
|
|
34
|
+
|[](https://badge.fury.io/gh/melodypapa%2Fpy-armodel)|[](https://py-armodel.readthedocs.io/en/latest)|[](https://www.travis-ci.com/melodypapa/py-armodel)|[](https://coveralls.io/github/melodypapa/py-armodel?branch=main)|[](https://badge.fury.io/py/armodel)|
|
|
35
|
+
|
|
36
|
+
## 1.3. How to create the distribution and upload to pypi
|
|
37
|
+
1. Run `python setup.py bdist_wheel` to generate distribution
|
|
38
|
+
2. Run `twine check dist/*` to check the validation of distribution
|
|
39
|
+
3. Run `twine upload dist/*` to upload to pypi repository
|
|
40
|
+
4. Check the website https://pypi.org/project/armodel/ to find out it works or not
|
|
41
|
+
|
|
42
|
+
And more details can be found at https://packaging.python.org/
|
|
43
|
+
|
|
44
|
+
## 1.4. How to perform Unit test
|
|
45
|
+
|
|
46
|
+
* Run `pip install pytest pytest-cov` to install pytest.
|
|
47
|
+
* Run `pytest --cov=armodel --cov-report term-missing` to verify all the functionality.
|
|
48
|
+
|
|
49
|
+
## 1.5. How to create a distribution and wheel
|
|
50
|
+
|
|
51
|
+
* Run `python setup.py sdist bdist_wheel --universal`
|
|
52
|
+
|
|
53
|
+
## 1.6. How to create the document
|
|
54
|
+
|
|
55
|
+
1. Run `pip install sphinx` to install the necessary document
|
|
56
|
+
|
|
57
|
+
## 1.7. Heritage
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
- ARObject
|
|
61
|
+
- Referrable
|
|
62
|
+
- MultilanguageReferrable
|
|
63
|
+
- Identifiable
|
|
64
|
+
- PackageableElement
|
|
65
|
+
- ARElement
|
|
66
|
+
- AtpType
|
|
67
|
+
- AutosarDataType
|
|
68
|
+
- PortInterface
|
|
69
|
+
- DataInterface
|
|
70
|
+
- NvDataInterface
|
|
71
|
+
- ParameterInterface
|
|
72
|
+
- SenderReceiverInterface
|
|
73
|
+
- BswModuleEntry
|
|
74
|
+
- Implementation
|
|
75
|
+
- BswImplementation
|
|
76
|
+
- AtpFeature
|
|
77
|
+
- AtpPrototype
|
|
78
|
+
- AtpPrototype
|
|
79
|
+
- DataPrototype
|
|
80
|
+
- AutosarDataPrototype
|
|
81
|
+
- VariableDataPrototype
|
|
82
|
+
- ApplicationCompositeElementDataPrototype
|
|
83
|
+
- ApplicationArrayElement
|
|
84
|
+
- ApplicationRecordElement
|
|
85
|
+
- AtpStructureElement
|
|
86
|
+
- BswModuleDescription
|
|
87
|
+
- ExecutableEntity
|
|
88
|
+
- SwcBswMapping
|
|
89
|
+
- ValueSpecification
|
|
90
|
+
- ConstantReference
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## 1.8. CLI usages
|
|
94
|
+
|
|
95
|
+
### 1.8.1. arxml-dump
|
|
96
|
+
|
|
97
|
+
**Dump all the arxml data to screen**
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
`arxml-dump --arxml arg -h`
|
|
101
|
+
|
|
102
|
+
--arxml arg The file name of arxml data
|
|
103
|
+
-h show the help information
|
|
104
|
+
|
|
105
|
+
#### 1.8.1.1. arxml-dump usage
|
|
106
|
+
|
|
107
|
+
**Dump the arxml data from test1.arxml and test2.arxml**
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
$arxml-dump --arxml test1.arxml --arxml test2.arxml
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 1.8.2. swc-list
|
|
114
|
+
|
|
115
|
+
**List all the SwComponentType in the autosar model**
|
|
116
|
+
|
|
117
|
+
usage: swc-list [-h] [-v] [-f FORMAT] [--filter FILTER] Input [Input ...]
|
|
118
|
+
|
|
119
|
+
-h, --help show the help message and exit
|
|
120
|
+
-v, --verbose Print debug information
|
|
121
|
+
-f FORMAT, --format FORMAT
|
|
122
|
+
Specify the short or long name of Sw-C.
|
|
123
|
+
*short* : only print the short name of SWComponentType
|
|
124
|
+
*long* : print the SWComponentType with ARPackage names
|
|
125
|
+
--filter FILTER Set the filter condition.
|
|
126
|
+
*CompositionSwComponent* : Print the CompositionSwComponent only.
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#### 1.8.2.1. List all the SW-Components in the specific path
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
$swc-list <arxml_folder>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
#### 1.8.2.2. List all the CompositionSwComponent with the long name
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
$swc-list --format long --filter CompositionSwComponent <arxml_folder>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## 1.9. API
|
|
142
|
+
|
|
143
|
+
### 1.9.1. Constructor
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
ARXMLParser(options={"warning": True})
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 1.10. Change notes:
|
|
150
|
+
|
|
151
|
+
**Version 0.1.1**
|
|
152
|
+
|
|
153
|
+
Add the ARRAY category support for ImplementationDataType
|
|
154
|
+
|
|
155
|
+
**Version 0.1.2**
|
|
156
|
+
|
|
157
|
+
Add the AsynchronousServerCallPoint support for ARXML
|
|
158
|
+
|
|
159
|
+
**Version 0.1.3**
|
|
160
|
+
|
|
161
|
+
Fix the attribute intervalType of **Limit** is empty issue.
|
|
162
|
+
|
|
163
|
+
**Version 1.0.0**
|
|
164
|
+
|
|
165
|
+
1. Add the logging support
|
|
166
|
+
2. Add the <warning> option to disable exception raised.
|
|
167
|
+
3. Add the BswMD support
|
|
168
|
+
|
|
169
|
+
**Version 1.1.0**
|
|
170
|
+
|
|
171
|
+
1. Add the InitEvent support. (Issue #5)
|
|
172
|
+
2. Add the DataReceiveEvent support. (Issue #5)
|
|
173
|
+
3. Add the SwcModeSwitchEvent support. (Issue #5)
|
|
174
|
+
|
|
175
|
+
**Version 1.2.0**
|
|
176
|
+
|
|
177
|
+
1. Add the SwcImplementation support (Issue #9)
|
|
178
|
+
2. Add the integer value for memory section alignment (Issue #9)
|
|
179
|
+
3. Remove the required attributes for the Implementation according to the AUTOSAR standard 23R-11. (Issue #9)
|
|
180
|
+
4. Change the START-ON-EVENT-REF to optional according to the AUTOSAR standard 23R-11. (Issue #9)
|
|
181
|
+
5. Change the HANDLE-OUT-OF-RANGE to optional according to the AUTOSAR standard 23R-11. (Issue #9)
|
|
182
|
+
6. Add the SensorActuatorSwComponentType support (Issue #9)
|
|
183
|
+
7. Change the CATEGORY of COMPU-METHOD to optional.
|
|
184
|
+
8. Change the CAN-BE-INVOKED-CONCURRENTLY to optional.
|
|
185
|
+
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
armodel/__init__.py,sha256=K_KHb3O2T21uteIe0wac-tb3kI2xWHTnwV9ShaXesAU,54
|
|
2
|
+
armodel/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
armodel/cli/arxml_dump_cli.py,sha256=SELbIKJMN65Lzfuze-q_XPBme-KTPrpb2yDl3fLctc8,9932
|
|
4
|
+
armodel/cli/swc_list_cli.py,sha256=9dgW-5Gn1TFqbq5wQd_EFpe9IDLJhPBlYcWRi3m5x84,2414
|
|
5
|
+
armodel/lib/__init__.py,sha256=1i7vjCwcVMUrTrN7mRgQsIN6eP-8gsIKSLDh6YXjNe8,94
|
|
6
|
+
armodel/lib/cli_args_parser.py,sha256=WiTC3wy_fZYloA1AjPqCvvOA_26V_y5toun0qfV51cw,1207
|
|
7
|
+
armodel/lib/data_analyzer.py,sha256=y4ViEGPi_xRKD7hw1ptkGl0_UfhnNdgNzf2YjbOhpjM,1159
|
|
8
|
+
armodel/models/__init__.py,sha256=ijDu-Ra2ZjEJNy88Y5ZsPqxAt05_reQsQti-_X4gD3o,402
|
|
9
|
+
armodel/models/ar_object.py,sha256=-XM0LFxXJovY7ANh-enGmAFu8yhkj9YzFFyCY7ffO8U,371
|
|
10
|
+
armodel/models/ar_package.py,sha256=OPoNGaAhTBf30elxc1dvJMyU6CpMUmvs0SUwaYoEtVs,13275
|
|
11
|
+
armodel/models/ar_ref.py,sha256=RZT6URQ91YgmRk1oUTC-0UPnwn61MgEzmII7UKwQXUM,3548
|
|
12
|
+
armodel/models/bsw_module_template.py,sha256=k_CZWtTipKtVFjIx08uRqadSubVtBJ-NhUlocfoA0a0,11778
|
|
13
|
+
armodel/models/common_structure.py,sha256=DSnuhhYdpDW-klOCZNg8zULuhFBdk7k601YQsPg5IT4,6745
|
|
14
|
+
armodel/models/data_dictionary.py,sha256=xSQzXkLQyOJiLIsczlAzGBnrrvHFVv2_-OfVyN6_MSE,867
|
|
15
|
+
armodel/models/data_prototype.py,sha256=pyIahyJh4KaikMfHikHiKzbGai1JnkrzDZpkVLvb6iU,2096
|
|
16
|
+
armodel/models/datatype.py,sha256=BEc8y3mcQZEvwteFUtJyPYBIwnHJcs9fIyxLgnMK5rk,5802
|
|
17
|
+
armodel/models/ecuc_parameter_def_template.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
armodel/models/general_structure.py,sha256=syJTAAo3DIBE6O0nB8Whm4OEnNyN4uVIAJZPA8t3ukY,4480
|
|
19
|
+
armodel/models/implementation.py,sha256=jfatA90Ww51kMqnUsbx6q4JRRRIRFCQXVg88J44RNoA,3850
|
|
20
|
+
armodel/models/m2_msr.py,sha256=Gk-h-4jSnOkWlfJJcI1-1YvSQvBqkUJZxlzikwgAsec,2165
|
|
21
|
+
armodel/models/port_interface.py,sha256=UDCvj78k3sfG4IJX4FWQj6LUV2mWw6Nt0plMnLsQfZk,6026
|
|
22
|
+
armodel/models/port_prototype.py,sha256=Pqp5euv_RDfTlsEqvBkpAreBFMJlovuU49cJsYD4d3Q,7215
|
|
23
|
+
armodel/models/sw_component.py,sha256=ix6LP1-TLN1r7YEl3CrUoo_ZGfvNGj5q8p3XNPUbabU,20583
|
|
24
|
+
armodel/parser/__init__.py,sha256=whzCLvAstuSlm6scgcCId7AUxSX8z8PV8AIKSNWMkGo,37
|
|
25
|
+
armodel/parser/arxml_parser.py,sha256=LPSj4BxO9fV9pIXVhzMjJmOIC4YUSbDi3H6I11McXOM,56759
|
|
26
|
+
armodel-1.3.0.dist-info/LICENSE,sha256=rceTpGhsmmN1M0k1KO0HRS11iCjen-2y56ZEqgo43wo,1088
|
|
27
|
+
armodel-1.3.0.dist-info/METADATA,sha256=eael0JbJhlKXRebYA2EHb83ccoqjtCd-Z6zVzx51SJk,5932
|
|
28
|
+
armodel-1.3.0.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
29
|
+
armodel-1.3.0.dist-info/entry_points.txt,sha256=U-GD6do9I0ZRKENiIdmJMbsLHbtBX2Q7CWIldbNFrc0,109
|
|
30
|
+
armodel-1.3.0.dist-info/top_level.txt,sha256=AEATYsqAuRpr0XGa_ThW7-o4WLlA5e3PEgD0QJhzmoA,8
|
|
31
|
+
armodel-1.3.0.dist-info/RECORD,,
|
armodel-1.1.0.dist-info/RECORD
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
armodel/__init__.py,sha256=K_KHb3O2T21uteIe0wac-tb3kI2xWHTnwV9ShaXesAU,54
|
|
2
|
-
armodel/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
armodel/cli/arxml_dump_cli.py,sha256=VBOTkrpj59kt2hM62iNVcDYGch_A2WL5_vFpbmC9ucI,9932
|
|
4
|
-
armodel/models/__init__.py,sha256=ijDu-Ra2ZjEJNy88Y5ZsPqxAt05_reQsQti-_X4gD3o,402
|
|
5
|
-
armodel/models/ar_object.py,sha256=gbo71ZPQ61-OhiPpHFbKtE2JA-8vOzXrd9T_0hh4GfA,341
|
|
6
|
-
armodel/models/ar_package.py,sha256=Z_tcjcJ6lAqp4yDjFkaYFZAuVbXSxoe1cPNBPN4zt4o,11921
|
|
7
|
-
armodel/models/ar_ref.py,sha256=RZT6URQ91YgmRk1oUTC-0UPnwn61MgEzmII7UKwQXUM,3548
|
|
8
|
-
armodel/models/bsw_module_template.py,sha256=k_CZWtTipKtVFjIx08uRqadSubVtBJ-NhUlocfoA0a0,11778
|
|
9
|
-
armodel/models/common_structure.py,sha256=GJFTTwvAZgt9aLY63A3Vynp-tZt65-8Oy4k5YBMYfB8,6559
|
|
10
|
-
armodel/models/data_dictionary.py,sha256=xSQzXkLQyOJiLIsczlAzGBnrrvHFVv2_-OfVyN6_MSE,867
|
|
11
|
-
armodel/models/data_prototype.py,sha256=pyIahyJh4KaikMfHikHiKzbGai1JnkrzDZpkVLvb6iU,2096
|
|
12
|
-
armodel/models/datatype.py,sha256=BEc8y3mcQZEvwteFUtJyPYBIwnHJcs9fIyxLgnMK5rk,5802
|
|
13
|
-
armodel/models/ecuc_parameter_def_template.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
14
|
-
armodel/models/general_structure.py,sha256=syJTAAo3DIBE6O0nB8Whm4OEnNyN4uVIAJZPA8t3ukY,4480
|
|
15
|
-
armodel/models/implementation.py,sha256=iGm5aS1L2sA9eP0jeDFkkIURvr6zzHOCaTtL59G48Yg,3875
|
|
16
|
-
armodel/models/m2_msr.py,sha256=Gk-h-4jSnOkWlfJJcI1-1YvSQvBqkUJZxlzikwgAsec,2165
|
|
17
|
-
armodel/models/port_interface.py,sha256=UDCvj78k3sfG4IJX4FWQj6LUV2mWw6Nt0plMnLsQfZk,6026
|
|
18
|
-
armodel/models/port_prototype.py,sha256=Pqp5euv_RDfTlsEqvBkpAreBFMJlovuU49cJsYD4d3Q,7215
|
|
19
|
-
armodel/models/sw_component.py,sha256=LUmof9nZnN7krpIScS72R6YqTzzpkIFkIvHJoklYXgw,20503
|
|
20
|
-
armodel/parser/__init__.py,sha256=whzCLvAstuSlm6scgcCId7AUxSX8z8PV8AIKSNWMkGo,37
|
|
21
|
-
armodel/parser/arxml_parser.py,sha256=qjzZ9eeG6dGo5yt4Si007PVmaRlI6D8ulZthH5JjUFk,55261
|
|
22
|
-
armodel-1.1.0.dist-info/LICENSE,sha256=rceTpGhsmmN1M0k1KO0HRS11iCjen-2y56ZEqgo43wo,1088
|
|
23
|
-
armodel-1.1.0.dist-info/METADATA,sha256=zTaCxzE_4Cb1THE3btuz04QuzRNaJw6bjVMcAUhDqlU,4359
|
|
24
|
-
armodel-1.1.0.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
|
|
25
|
-
armodel-1.1.0.dist-info/entry_points.txt,sha256=ofkww3HejFuRvGlQSANqFbTEcf0LUXX2FmXZovba9m0,68
|
|
26
|
-
armodel-1.1.0.dist-info/top_level.txt,sha256=AEATYsqAuRpr0XGa_ThW7-o4WLlA5e3PEgD0QJhzmoA,8
|
|
27
|
-
armodel-1.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|