armodel 1.4.0__py3-none-any.whl → 1.5.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/__init__.py +2 -1
- armodel/cli/arxml_dump_cli.py +9 -7
- armodel/cli/arxml_format_cli.py +72 -0
- armodel/cli/connector_update_cli.py +11 -4
- armodel/data_models/__init__.py +0 -0
- armodel/data_models/sw_connector.py +22 -0
- armodel/lib/data_analyzer.py +1 -1
- armodel/models/__init__.py +3 -2
- armodel/models/annotation.py +20 -0
- armodel/models/ar_object.py +163 -18
- armodel/models/ar_package.py +228 -24
- armodel/models/ar_ref.py +85 -6
- armodel/models/bsw_module_template.py +113 -27
- armodel/models/calibration.py +107 -4
- armodel/models/common_structure.py +142 -52
- armodel/models/communication.py +10 -1
- armodel/models/data_def_properties.py +16 -0
- armodel/models/data_dictionary.py +46 -9
- armodel/models/data_prototype.py +24 -5
- armodel/models/datatype.py +69 -20
- armodel/models/end_to_end_protection.py +67 -0
- armodel/models/fibex/__init__.py +0 -0
- armodel/models/fibex/can_communication.py +6 -0
- armodel/models/fibex/fibex_4_multiplatform.py +145 -0
- armodel/models/fibex/fibex_core.py +341 -0
- armodel/models/fibex/lin_communication.py +17 -0
- armodel/models/fibex/lin_topology.py +7 -0
- armodel/models/general_structure.py +44 -18
- armodel/models/global_constraints.py +4 -4
- armodel/models/implementation.py +79 -32
- armodel/models/internal_behavior.py +63 -0
- armodel/models/m2_msr.py +6 -4
- armodel/models/mode_declaration.py +8 -0
- armodel/models/multilanguage_data.py +42 -0
- armodel/models/per_instance_memory.py +14 -0
- armodel/models/port_interface.py +27 -4
- armodel/models/port_prototype.py +57 -19
- armodel/models/record_layout.py +118 -0
- armodel/models/rpt_scenario.py +20 -0
- armodel/models/service_mapping.py +11 -0
- armodel/models/service_needs.py +48 -0
- armodel/models/sw_component.py +293 -45
- armodel/models/system_template/__init__.py +0 -0
- armodel/models/system_template/network_management.py +7 -0
- armodel/models/system_template/transport_protocols.py +7 -0
- armodel/models/timing.py +91 -0
- armodel/parser/abstract_arxml_parser.py +248 -0
- armodel/parser/arxml_parser.py +1571 -844
- armodel/parser/connector_xlsx_parser.py +190 -0
- armodel/parser/excel_parser.py +18 -0
- armodel/tests/test_armodel/models/test_ar_object.py +152 -0
- armodel/tests/test_armodel/models/test_ar_package.py +1 -1
- armodel/tests/test_armodel/models/test_common_structure.py +2 -2
- armodel/tests/test_armodel/models/test_data_dictionary.py +7 -7
- armodel/tests/test_armodel/models/test_data_prototype.py +3 -3
- armodel/tests/test_armodel/models/test_datatype.py +11 -11
- armodel/tests/test_armodel/models/test_general_structure.py +1 -1
- armodel/tests/test_armodel/models/test_implementation.py +26 -0
- armodel/tests/test_armodel/models/test_m2_msr.py +4 -4
- armodel/tests/test_armodel/models/test_port_interface.py +5 -5
- armodel/tests/test_armodel/parser/test_arxml_parser.py +15 -0
- armodel/tests/test_armodel/parser/test_parse_bswmd.py +74 -42
- armodel/tests/test_armodel/parser/test_sw_components.py +93 -0
- armodel/writer/abstract_arxml_writer.py +123 -0
- armodel/writer/arxml_writer.py +1701 -358
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/METADATA +114 -3
- armodel-1.5.0.dist-info/RECORD +91 -0
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/WHEEL +1 -1
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/entry_points.txt +2 -0
- armodel-1.4.0.dist-info/RECORD +0 -60
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/LICENSE +0 -0
- {armodel-1.4.0.dist-info → armodel-1.5.0.dist-info}/top_level.txt +0 -0
armodel/writer/arxml_writer.py
CHANGED
|
@@ -1,154 +1,125 @@
|
|
|
1
|
-
import logging
|
|
2
1
|
import xml.etree.cElementTree as ET
|
|
3
2
|
|
|
4
|
-
from xml.dom import minidom
|
|
5
3
|
from typing import List
|
|
6
4
|
|
|
5
|
+
from ..models.fibex.fibex_4_multiplatform import Gateway, ISignalMapping
|
|
6
|
+
|
|
7
|
+
from ..models.fibex.can_communication import CanFrame
|
|
8
|
+
from ..models.fibex.fibex_core import DcmIPdu, Frame, ISignal, NPdu, NmPdu
|
|
9
|
+
from ..models.fibex.lin_communication import LinUnconditionalFrame
|
|
10
|
+
from ..models.fibex.lin_topology import LinCluster
|
|
11
|
+
from ..models.system_template.network_management import NmConfig
|
|
12
|
+
from ..models.system_template.transport_protocols import CanTpConfig
|
|
13
|
+
from ..models.internal_behavior import IncludedDataTypeSet, InternalBehavior
|
|
14
|
+
from ..models.timing import EOCExecutableEntityRef, ExecutionOrderConstraint, SwcTiming, TimingExtension
|
|
15
|
+
from ..models.data_def_properties import ValueList
|
|
16
|
+
from ..models.multilanguage_data import MultiLanguageOverviewParagraph, MultilanguageLongName
|
|
17
|
+
from ..models.record_layout import SwRecordLayout, SwRecordLayoutGroup, SwRecordLayoutV
|
|
18
|
+
from ..models.service_mapping import RoleBasedPortAssignment
|
|
19
|
+
from ..models.service_needs import NvBlockNeeds, RoleBasedDataAssignment
|
|
20
|
+
from ..models.data_prototype import ApplicationArrayElement, ApplicationCompositeElementDataPrototype, ApplicationRecordElement, AutosarDataPrototype, DataPrototype, ParameterDataPrototype, VariableDataPrototype
|
|
21
|
+
from ..models.bsw_module_template import BswCalledEntity, BswEvent, BswInternalBehavior, BswModeSenderPolicy, BswModuleDescription, BswModuleEntity, BswModuleEntry, BswSchedulableEntity, BswScheduleEvent, BswTimingEvent
|
|
22
|
+
from ..models.ar_package import AUTOSAR
|
|
23
|
+
from ..models.sw_component import ApplicationSwComponentType, AtomicSwComponentType, ComplexDeviceDriverSwComponentType, DataReceivedEvent, EcuAbstractionSwComponentType, InitEvent, InternalTriggerOccurredEvent, OperationInvokedEvent, ParameterAccess, PortAPIOption, PortGroup, RTEEvent, ServerCallPoint, ServiceDependency, ServiceSwComponentType, SwcModeSwitchEvent, SwcServiceDependency, SynchronousServerCallPoint, VariableAccess
|
|
24
|
+
from ..models.ar_package import ARPackage
|
|
25
|
+
from ..models.ar_ref import ApplicationCompositeElementInPortInterfaceInstanceRef, AutosarParameterRef, AutosarVariableRef, InnerPortGroupInCompositionInstanceRef, POperationInAtomicSwcInstanceRef, PPortInCompositionInstanceRef, RModeGroupInAtomicSWCInstanceRef, RModeInAtomicSwcInstanceRef, ROperationInAtomicSwcInstanceRef, RPortInCompositionInstanceRef, RVariableInAtomicSwcInstanceRef, RefType, VariableDataPrototypeInSystemInstanceRef
|
|
26
|
+
from ..models.calibration import SwAxisGrouped, SwAxisIndividual, SwCalprmAxis, SwCalprmAxisSet, SwValueCont, SwValues
|
|
27
|
+
from ..models.common_structure import ApplicationValueSpecification, ArrayValueSpecification, ConstantReference, IncludedModeDeclarationGroupSet, ModeDeclaration, ModeDeclarationGroup, ModeDeclarationGroupPrototype, NumericalValueSpecification, RecordValueSpecification, TextValueSpecification, ValueSpecification
|
|
28
|
+
from ..models.communication import CompositeNetworkRepresentation, TransmissionAcknowledgementRequest
|
|
29
|
+
from ..models.data_dictionary import SwAddrMethod, SwDataDefProps
|
|
30
|
+
from ..models.datatype import ApplicationArrayDataType, ApplicationCompositeDataType, ApplicationDataType, ApplicationPrimitiveDataType, ApplicationRecordDataType, AutosarDataType, BaseTypeDirectDefinition, DataTypeMappingSet, ImplementationDataType, SwBaseType
|
|
31
|
+
from ..models.general_structure import ARElement, AdminData, Identifiable, Limit, MultilanguageReferrable, Referrable, Sdg, SwcBswMapping, SwcBswRunnableMapping
|
|
32
|
+
from ..models.m2_msr import CompuConstTextContent, CompuMethod, CompuNominatorDenominator, CompuScale, CompuScaleConstantContents, CompuScaleRationalFormula, CompuScales
|
|
33
|
+
from ..models.port_prototype import ClientComSpec, ModeSwitchReceiverComSpec, NonqueuedReceiverComSpec, NonqueuedSenderComSpec, PPortComSpec, PPortPrototype, PortPrototype, QueuedReceiverComSpec, RPortComSpec, RPortPrototype, ReceiverComSpec, SenderComSpec, ServerComSpec
|
|
34
|
+
from ..models.sw_component import AssemblySwConnector, CompositionSwComponentType, DelegationSwConnector, SwComponentPrototype, SwComponentType, SwConnector
|
|
35
|
+
from ..models.annotation import Annotation
|
|
36
|
+
from ..models.end_to_end_protection import EndToEndDescription, EndToEndProtection, EndToEndProtectionSet, EndToEndProtectionVariablePrototype
|
|
37
|
+
from ..models.port_interface import ApplicationError, ClientServerInterface, ClientServerOperation, ModeSwitchInterface, PortInterface, SenderReceiverInterface, TriggerInterface
|
|
38
|
+
from ..models.unit import Unit
|
|
39
|
+
from ..models.implementation import AutosarEngineeringObject, BswImplementation, Code, EngineeringObject, Implementation, SwcImplementation
|
|
40
|
+
from ..models.common_structure import ConstantSpecification, ExecutableEntity, ResourceConsumption
|
|
41
|
+
from ..models.sw_component import RunnableEntity, SwcInternalBehavior, TimingEvent
|
|
7
42
|
from ..models.ar_object import ARLiteral
|
|
8
|
-
from ..models import
|
|
9
|
-
from ..models import CompositionSwComponentType, SwComponentType, SwComponentPrototype
|
|
10
|
-
from ..models import PortPrototype, PPortPrototype, RPortPrototype
|
|
11
|
-
from ..models import NonqueuedReceiverComSpec, NonqueuedSenderComSpec, ClientComSpec
|
|
12
|
-
from ..models import TRefType
|
|
13
|
-
from ..models import PPortComSpec, RPortComSpec, SenderComSpec, ReceiverComSpec
|
|
14
|
-
from ..models import TransmissionAcknowledgementRequest
|
|
15
|
-
from ..models import ValueSpecification, ApplicationValueSpecification, TextValueSpecification, NumericalValueSpecification, ArrayValueSpecification
|
|
16
|
-
from ..models import ConstantSpecification, RecordValueSpecification, ConstantReference
|
|
17
|
-
from ..models import SwValueCont, SwValues
|
|
18
|
-
from ..models import SwConnector, AssemblySwConnector, DelegationSwConnector, PPortInCompositionInstanceRef, RPortInCompositionInstanceRef
|
|
19
|
-
from ..models import ARBoolean
|
|
20
|
-
from ..models import ApplicationPrimitiveDataType, AutosarDataType, ApplicationDataType, ApplicationRecordDataType, BaseType
|
|
21
|
-
from ..models import CompuMethod, CompuScales, CompuScale, Limit, CompuScaleConstantContents, CompuConstTextContent, CompuScaleRationalFormula, CompuNominatorDenominator
|
|
22
|
-
|
|
23
|
-
from ..models.global_constraints import DataConstr, DataConstrRule, InternalConstrs, PhysConstrs
|
|
24
|
-
|
|
25
|
-
from colorama import Fore
|
|
26
|
-
|
|
27
|
-
class ARXMLWriter:
|
|
28
|
-
def __init__(self, options = None) -> None:
|
|
29
|
-
self.options = {}
|
|
30
|
-
self.options['warning'] = False
|
|
31
|
-
self.options['version'] = "4.2.2"
|
|
32
|
-
self.logger = logging.getLogger()
|
|
33
|
-
|
|
34
|
-
self._processOptions(options=options)
|
|
35
|
-
|
|
36
|
-
self.nsmap = {
|
|
37
|
-
"xmlns": "http://autosar.org/schema/r4.0",
|
|
38
|
-
}
|
|
43
|
+
from ..models.global_constraints import DataConstr, InternalConstrs, PhysConstrs
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
from .abstract_arxml_writer import AbstractARXMLWriter
|
|
46
|
+
class ARXMLWriter(AbstractARXMLWriter):
|
|
47
|
+
def __init__(self, options=None) -> None:
|
|
48
|
+
super().__init__(options)
|
|
44
49
|
|
|
45
|
-
def
|
|
46
|
-
if (self.options['warning'] == True):
|
|
47
|
-
self.logger.error(Fore.RED + error_msg + Fore.WHITE)
|
|
48
|
-
else:
|
|
49
|
-
raise ValueError(error_msg)
|
|
50
|
-
|
|
51
|
-
def writeElementAttributes(self, element: ET.Element, ar_obj: ARObject):
|
|
52
|
-
if ar_obj.timestamp is not None:
|
|
53
|
-
self.logger.debug("Timestamp: %s" % ar_obj.timestamp)
|
|
54
|
-
element.attrib['T'] = ar_obj.timestamp
|
|
55
|
-
if ar_obj.uuid is not None:
|
|
56
|
-
self.logger.debug("UUID: %s" % ar_obj.uuid)
|
|
57
|
-
element.attrib['UUID'] = ar_obj.uuid
|
|
58
|
-
|
|
59
|
-
def writeChildOptionalElement(self, element: ET.Element, key: str, value: str):
|
|
60
|
-
if value is not None:
|
|
61
|
-
child_element = ET.SubElement(element, key)
|
|
62
|
-
child_element.text = value
|
|
63
|
-
|
|
64
|
-
def writeChildOptionalRefElement(self, parent: ET.Element, child_tag_name: str, ref: TRefType):
|
|
65
|
-
if ref is not None:
|
|
66
|
-
child_tag = ET.SubElement(parent, child_tag_name)
|
|
67
|
-
if ref.dest is not None:
|
|
68
|
-
child_tag.attrib['DEST'] = ref.dest
|
|
69
|
-
if ref.value is not None:
|
|
70
|
-
child_tag.text = ref.value
|
|
71
|
-
|
|
72
|
-
def writeChildOptionalElementFloatValue(self, element: ET.Element, key: str, value: float):
|
|
73
|
-
if value is not None:
|
|
74
|
-
child_element = ET.SubElement(element, key)
|
|
75
|
-
literal = "%g" % value
|
|
76
|
-
if literal == '0':
|
|
77
|
-
literal = "0.0"
|
|
78
|
-
child_element.text = literal
|
|
79
|
-
|
|
80
|
-
def writeChildOptionalElementBooleanValue(self, element: ET.Element, key: str, value: ARBoolean) -> ET.Element:
|
|
81
|
-
child_element = None
|
|
82
|
-
if value is not None:
|
|
83
|
-
child_element = ET.SubElement(element, key)
|
|
84
|
-
self.writeElementAttributes(child_element, value)
|
|
85
|
-
if value.value:
|
|
86
|
-
child_element.text = "true"
|
|
87
|
-
else:
|
|
88
|
-
child_element.text = "false"
|
|
89
|
-
return child_element
|
|
90
|
-
|
|
91
|
-
def writeChildOptionalElementLiteral(self, element: ET.Element, key: str, value: ARLiteral) -> ET.Element:
|
|
92
|
-
child_element = None
|
|
93
|
-
if value is not None:
|
|
94
|
-
child_element = ET.SubElement(element, key)
|
|
95
|
-
self.writeElementAttributes(child_element, value)
|
|
96
|
-
child_element.text = value.value
|
|
97
|
-
return child_element
|
|
98
|
-
|
|
99
|
-
def writeShortName(self, parent: ET.Element, name: str) -> ET.Element:
|
|
50
|
+
def setShortName(self, parent: ET.Element, name: str) -> ET.Element:
|
|
100
51
|
sub_element = ET.SubElement(parent, "SHORT-NAME")
|
|
101
52
|
sub_element.text = name
|
|
102
53
|
|
|
103
54
|
return sub_element
|
|
104
55
|
|
|
105
|
-
def
|
|
56
|
+
def writeSds(self, parent: ET.Element, sdg: Sdg):
|
|
106
57
|
for sd in sdg.getSds():
|
|
107
58
|
sd_tag = ET.SubElement(parent, "SD")
|
|
108
59
|
sd_tag.attrib['GID'] = sd.gid
|
|
109
60
|
sd_tag.text = sd.value
|
|
110
|
-
|
|
111
|
-
def
|
|
61
|
+
|
|
62
|
+
def setSdg(self, parent: ET.Element, sdg: Sdg):
|
|
63
|
+
if sdg is not None:
|
|
64
|
+
sdg_tag = ET.SubElement(parent, "SDG")
|
|
65
|
+
sdg_tag.attrib['GID'] = sdg.gid
|
|
66
|
+
self.setSdg(sdg_tag, sdg.sdg_contents_type)
|
|
67
|
+
self.writeSds(sdg_tag, sdg)
|
|
68
|
+
|
|
69
|
+
def writeSdgs(self, parent: ET.Element, admin_data: AdminData):
|
|
112
70
|
sdgs = admin_data.getSdgs()
|
|
113
71
|
if len(sdgs) > 0:
|
|
114
72
|
sdgs_tag = ET.SubElement(parent, "SDGS")
|
|
115
73
|
for sdg in sdgs:
|
|
116
|
-
|
|
117
|
-
sdg_tag.attrib['GID'] = sdg.gid
|
|
118
|
-
self.writeSd(sdg_tag, sdg)
|
|
74
|
+
self.setSdg(sdgs_tag, sdg)
|
|
119
75
|
|
|
120
76
|
def writeChildLimitElement(self, element: ET.Element, key: str, limit: Limit):
|
|
121
77
|
if limit is not None:
|
|
122
78
|
limit_tag = ET.SubElement(element, key)
|
|
123
|
-
limit_tag
|
|
79
|
+
self.setARObjectAttributes(limit_tag, limit)
|
|
80
|
+
if limit.intervalType is not None:
|
|
81
|
+
limit_tag.attrib['INTERVAL-TYPE'] = limit.intervalType
|
|
124
82
|
limit_tag.text = limit.value
|
|
125
83
|
|
|
126
84
|
def writeReferable(self, element: ET.Element, referrable: Referrable):
|
|
127
|
-
self.
|
|
128
|
-
self.
|
|
129
|
-
|
|
130
|
-
def
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
l4_tag
|
|
137
|
-
|
|
85
|
+
self.setARObjectAttributes(element, referrable)
|
|
86
|
+
self.setShortName(element, referrable.short_name)
|
|
87
|
+
|
|
88
|
+
def setMultiLongName(self, element: ET.Element, key: str, long_name: MultilanguageLongName):
|
|
89
|
+
if long_name is not None:
|
|
90
|
+
long_name_tag = ET.SubElement(element, key)
|
|
91
|
+
self.setARObjectAttributes(long_name_tag, long_name)
|
|
92
|
+
for l4 in long_name.getL4s():
|
|
93
|
+
l4_tag = ET.SubElement(long_name_tag, "L-4")
|
|
94
|
+
self.setARObjectAttributes(l4_tag, l4)
|
|
95
|
+
if l4.l is not None:
|
|
96
|
+
l4_tag.attrib['L'] = l4.l
|
|
97
|
+
l4_tag.text = l4.value
|
|
98
|
+
|
|
99
|
+
def setMultiLanguageOverviewParagraph(self, element: ET.Element, key: str, paragraph: MultiLanguageOverviewParagraph):
|
|
100
|
+
if paragraph is not None:
|
|
101
|
+
long_name_tag = ET.SubElement(element, key)
|
|
102
|
+
self.setARObjectAttributes(long_name_tag, paragraph)
|
|
103
|
+
for l2 in paragraph.getL2s():
|
|
104
|
+
l2_tag = ET.SubElement(long_name_tag, "L-2")
|
|
105
|
+
self.setARObjectAttributes(l2_tag, l2)
|
|
106
|
+
if l2.l is not None:
|
|
107
|
+
l2_tag.attrib['L'] = l2.l
|
|
108
|
+
l2_tag.text = l2.value
|
|
138
109
|
|
|
139
110
|
def writeMultilanguageReferrable(self, element: ET.Element, referrable: MultilanguageReferrable):
|
|
140
111
|
self.writeReferable(element, referrable)
|
|
141
112
|
if referrable.long_name is not None:
|
|
142
|
-
|
|
143
|
-
self.writeMultiLongName(long_name_tag, referrable.long_name)
|
|
113
|
+
self.setMultiLongName(element, "LONG-NAME", referrable.long_name)
|
|
144
114
|
|
|
145
115
|
def writeAdminData(self, element: ET.Element, admin_data: AdminData):
|
|
146
116
|
element = ET.SubElement(element, "ADMIN-DATA")
|
|
147
|
-
self.
|
|
117
|
+
self.writeSdgs(element, admin_data)
|
|
148
118
|
|
|
149
119
|
def writeIdentifiable(self, element: ET.Element, identifiable: Identifiable):
|
|
150
120
|
self.writeMultilanguageReferrable(element, identifiable)
|
|
151
|
-
self.
|
|
121
|
+
self.setMultiLanguageOverviewParagraph(element, "DESC", identifiable.desc)
|
|
122
|
+
self.setChildElementOptionalLiteral(element, "CATEGORY", identifiable.category)
|
|
152
123
|
if identifiable.admin_data is not None:
|
|
153
124
|
self.writeAdminData(element, identifiable.admin_data)
|
|
154
125
|
|
|
@@ -158,79 +129,110 @@ class ARXMLWriter:
|
|
|
158
129
|
def writeTransmissionAcknowledgementRequest(self, element: ET.Element, acknowledge: TransmissionAcknowledgementRequest):
|
|
159
130
|
if (acknowledge != None):
|
|
160
131
|
child_element = ET.SubElement(element, "TRANSMISSION-ACKNOWLEDGE")
|
|
161
|
-
self.
|
|
132
|
+
self.setARObjectAttributes(child_element, acknowledge)
|
|
162
133
|
if acknowledge.timeout != None:
|
|
163
|
-
self.
|
|
164
|
-
|
|
165
|
-
def writeSenderComSpec(self,
|
|
166
|
-
|
|
167
|
-
if
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
self.
|
|
172
|
-
self.
|
|
134
|
+
self.setChildElementOptionalFloatValue(child_element, "TIMEOUT", acknowledge.timeout)
|
|
135
|
+
|
|
136
|
+
def writeSenderComSpec(self, element: ET.Element, com_spec: SenderComSpec):
|
|
137
|
+
representations = com_spec.getCompositeNetworkRepresentations()
|
|
138
|
+
if len(representations) > 0:
|
|
139
|
+
child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
|
|
140
|
+
for representation in representations:
|
|
141
|
+
self.setCompositeNetworkRepresentation(child_element, representation)
|
|
142
|
+
self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.data_element_ref)
|
|
143
|
+
self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.network_representation)
|
|
144
|
+
self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handle_out_of_range)
|
|
145
|
+
self.writeTransmissionAcknowledgementRequest(element, com_spec.transmission_acknowledge)
|
|
146
|
+
self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.uses_end_to_end_protection)
|
|
173
147
|
|
|
174
148
|
def writeNonqueuedSenderComSpec(self, com_specs_tag: ET.Element, com_spec: NonqueuedSenderComSpec):
|
|
175
149
|
com_spec_tag = ET.SubElement(com_specs_tag, "NONQUEUED-SENDER-COM-SPEC")
|
|
176
|
-
self.
|
|
150
|
+
self.setARObjectAttributes(com_spec_tag, com_spec)
|
|
177
151
|
self.writeSenderComSpec(com_spec_tag, com_spec)
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
elif isinstance(com_spec.init_value, ConstantReference):
|
|
186
|
-
self.writeConstantReference(init_value_tag, com_spec.init_value)
|
|
187
|
-
else:
|
|
188
|
-
raise NotImplementedError("Unsupported ValueSpecification %s" % type(com_spec.init_value))
|
|
152
|
+
self.setInitValue(com_spec_tag, com_spec.init_value)
|
|
153
|
+
|
|
154
|
+
def writeServerComSpec(self, com_specs_tag: ET.Element, com_spec: ServerComSpec):
|
|
155
|
+
com_spec_tag = ET.SubElement(com_specs_tag, "SERVER-COM-SPEC")
|
|
156
|
+
self.setARObjectAttributes(com_spec_tag, com_spec)
|
|
157
|
+
self.setChildElementOptionalRefType(com_spec_tag, "OPERATION-REF", com_spec.operation_ref)
|
|
158
|
+
self.setChildElementOptionalNumericalValue(com_spec_tag, "QUEUE-LENGTH", com_spec.queue_length)
|
|
189
159
|
|
|
190
160
|
def writePPortComSpec(self, com_specs_tag: ET.Element, com_spec: PPortComSpec):
|
|
191
161
|
if isinstance(com_spec, NonqueuedSenderComSpec):
|
|
192
162
|
self.writeNonqueuedSenderComSpec(com_specs_tag, com_spec)
|
|
163
|
+
elif isinstance(com_spec, ServerComSpec):
|
|
164
|
+
self.writeServerComSpec(com_specs_tag, com_spec)
|
|
193
165
|
else:
|
|
194
|
-
raise NotImplementedError("Unsupported PPortComSpec")
|
|
166
|
+
raise NotImplementedError("Unsupported PPortComSpec %s" % type(com_spec))
|
|
195
167
|
|
|
196
|
-
def
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
168
|
+
def setApplicationCompositeElementInPortInterfaceInstanceRef(self, element: ET.Element, key:str, iref: ApplicationCompositeElementInPortInterfaceInstanceRef):
|
|
169
|
+
if iref is not None:
|
|
170
|
+
child_element = ET.SubElement(element, key)
|
|
171
|
+
self.setChildElementOptionalRefType(child_element, "ROOT-DATA-PROTOTYPE-REF", iref.root_data_prototype_ref)
|
|
172
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", iref.target_data_prototype_ref)
|
|
173
|
+
return iref
|
|
174
|
+
|
|
175
|
+
def setCompositeNetworkRepresentation(self, element: ET.Element, representation: CompositeNetworkRepresentation):
|
|
176
|
+
if representation is not None:
|
|
177
|
+
self.logger.debug("setCompositeNetworkRepresentation")
|
|
178
|
+
child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATION")
|
|
179
|
+
self.setApplicationCompositeElementInPortInterfaceInstanceRef(child_element, "LEAF-ELEMENT-IREF", representation.leaf_element_iref)
|
|
180
|
+
self.setSwDataDefProps(child_element, "NETWORK-REPRESENTATION", representation.network_representation)
|
|
181
|
+
|
|
182
|
+
def writeReceiverComSpec(self, element: ET.Element, com_spec: ReceiverComSpec):
|
|
183
|
+
representations = com_spec.getCompositeNetworkRepresentations()
|
|
184
|
+
if len(representations) > 0:
|
|
185
|
+
child_element = ET.SubElement(element, "COMPOSITE-NETWORK-REPRESENTATIONS")
|
|
186
|
+
for representation in representations:
|
|
187
|
+
self.setCompositeNetworkRepresentation(child_element, representation)
|
|
188
|
+
self.setChildElementOptionalRefType(element, "DATA-ELEMENT-REF", com_spec.data_element_ref)
|
|
189
|
+
self.setSwDataDefProps(element, "NETWORK-REPRESENTATION", com_spec.network_representation)
|
|
190
|
+
self.setChildElementOptionalLiteral(element, "HANDLE-OUT-OF-RANGE", com_spec.handle_out_of_range)
|
|
191
|
+
self.setChildElementOptionalBooleanValue(element, "USES-END-TO-END-PROTECTION", com_spec.uses_end_to_end_protection)
|
|
192
|
+
|
|
193
|
+
def setSwValues(self, element: ET.Element, key: str, sw_values: SwValues):
|
|
194
|
+
if sw_values is not None:
|
|
195
|
+
child_element = ET.SubElement(element, key)
|
|
196
|
+
self.setARObjectAttributes(child_element, sw_values)
|
|
197
|
+
for v in sw_values.getVs():
|
|
198
|
+
self.setChildElementOptionalFloatValue(child_element, "V", v)
|
|
199
|
+
self.setChildElementOptionalLiteral(child_element, "VT", sw_values.vt)
|
|
200
200
|
|
|
201
|
-
def
|
|
202
|
-
if
|
|
203
|
-
|
|
201
|
+
def setValueList(self, element: ET.Element, key: str, value_list: ValueList):
|
|
202
|
+
if value_list is not None:
|
|
203
|
+
child_element = ET.SubElement(element, key)
|
|
204
|
+
self.setARObjectAttributes(child_element, value_list)
|
|
205
|
+
self.setChildElementOptionalFloatValue(child_element, "V", value_list.v)
|
|
204
206
|
|
|
205
207
|
def writeSwValueCont(self, element: ET.Element, cont: SwValueCont):
|
|
206
208
|
child_element = ET.SubElement(element, "SW-VALUE-CONT")
|
|
207
|
-
self.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
209
|
+
self.setARObjectAttributes(child_element, cont)
|
|
210
|
+
self.setChildElementOptionalRefType(child_element, "UNIT-REF", cont.unit_ref)
|
|
211
|
+
self.setValueList(child_element, "SW-ARRAYSIZE", cont.sw_arraysize)
|
|
212
|
+
self.setSwValues(child_element, "SW-VALUES-PHYS", cont.sw_values_phys)
|
|
211
213
|
|
|
212
214
|
def writeValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
|
|
213
|
-
self.
|
|
215
|
+
self.setARObjectAttributes(element, value_spec)
|
|
214
216
|
if value_spec.short_label is not None:
|
|
215
|
-
self.
|
|
217
|
+
self.setChildElementOptionalLiteral(element, "SHORT-LABEL", value_spec.short_label)
|
|
216
218
|
|
|
217
|
-
def
|
|
219
|
+
def setApplicationValueSpecification(self, element: ET.Element, value_spec: ApplicationValueSpecification):
|
|
218
220
|
value_spec_tag = ET.SubElement(element, "APPLICATION-VALUE-SPECIFICATION")
|
|
219
221
|
self.writeValueSpecification(value_spec_tag, value_spec)
|
|
220
|
-
self.
|
|
222
|
+
self.setChildElementOptionalLiteral(value_spec_tag, "CATEGORY", value_spec.category)
|
|
221
223
|
self.writeSwValueCont(value_spec_tag, value_spec.sw_value_cont)
|
|
222
224
|
|
|
223
|
-
def
|
|
225
|
+
def setTextValueSpecification(self, element: ET.Element, value_spec: TextValueSpecification):
|
|
224
226
|
value_spec_tag = ET.SubElement(element, "TEXT-VALUE-SPECIFICATION")
|
|
225
227
|
self.writeValueSpecification(value_spec_tag, value_spec)
|
|
226
|
-
self.
|
|
228
|
+
self.setChildElementOptionalLiteral(value_spec_tag, "VALUE", value_spec.value)
|
|
227
229
|
|
|
228
|
-
def
|
|
230
|
+
def setNumericalValueSpecification(self, element: ET.Element, value_spec: NumericalValueSpecification):
|
|
229
231
|
value_spec_tag = ET.SubElement(element, "NUMERICAL-VALUE-SPECIFICATION")
|
|
230
232
|
self.writeValueSpecification(value_spec_tag, value_spec)
|
|
231
|
-
self.
|
|
233
|
+
self.setChildElementOptionalFloatValue(value_spec_tag, "VALUE", value_spec.value)
|
|
232
234
|
|
|
233
|
-
def
|
|
235
|
+
def setArrayValueSpecification(self, element: ET.Element, value_spec: ArrayValueSpecification):
|
|
234
236
|
value_spec_tag = ET.SubElement(element, "ARRAY-VALUE-SPECIFICATION")
|
|
235
237
|
self.writeValueSpecification(value_spec_tag, value_spec)
|
|
236
238
|
sub_elements = value_spec.get_elements()
|
|
@@ -238,55 +240,83 @@ class ARXMLWriter:
|
|
|
238
240
|
elements_tag = ET.SubElement(value_spec_tag, "ELEMENTS")
|
|
239
241
|
for sub_element in sub_elements:
|
|
240
242
|
if isinstance(sub_element, NumericalValueSpecification):
|
|
241
|
-
self.
|
|
243
|
+
self.setNumericalValueSpecification(elements_tag, sub_element)
|
|
244
|
+
elif isinstance(sub_element, ApplicationValueSpecification):
|
|
245
|
+
self.setApplicationValueSpecification(elements_tag, sub_element)
|
|
242
246
|
else:
|
|
243
247
|
raise NotImplementedError("Unsupported element type of <%s> of ArrayValueSpecification" % type(sub_element))
|
|
244
248
|
|
|
245
|
-
def
|
|
249
|
+
def setConstantReference(self, element: ET.Element, value_spec: ConstantReference):
|
|
246
250
|
value_spec_tag = ET.SubElement(element, "CONSTANT-REFERENCE")
|
|
247
251
|
self.writeValueSpecification(value_spec_tag, value_spec)
|
|
248
|
-
self.
|
|
249
|
-
|
|
250
|
-
def
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
self.
|
|
262
|
-
elif isinstance(
|
|
263
|
-
self.
|
|
264
|
-
elif isinstance(com_spec.init_value, ConstantReference):
|
|
265
|
-
self.writeConstantReference(init_value_tag, com_spec.init_value)
|
|
252
|
+
self.setChildElementOptionalRefType(value_spec_tag, "CONSTANT-REF", value_spec.constant_ref)
|
|
253
|
+
|
|
254
|
+
def setValueSpecification(self, element: ET.Element, value_spec: ValueSpecification):
|
|
255
|
+
if value_spec is not None:
|
|
256
|
+
if isinstance(value_spec, ApplicationValueSpecification):
|
|
257
|
+
self.setApplicationValueSpecification(element, value_spec)
|
|
258
|
+
elif isinstance(value_spec, TextValueSpecification):
|
|
259
|
+
self.setTextValueSpecification(element, value_spec)
|
|
260
|
+
elif isinstance(value_spec, ConstantReference):
|
|
261
|
+
self.setConstantReference(element, value_spec)
|
|
262
|
+
elif isinstance(value_spec, NumericalValueSpecification):
|
|
263
|
+
self.setNumericalValueSpecification(element, value_spec)
|
|
264
|
+
elif isinstance(value_spec, ArrayValueSpecification):
|
|
265
|
+
self.setArrayValueSpecification(element, value_spec)
|
|
266
|
+
elif isinstance(value_spec, RecordValueSpecification):
|
|
267
|
+
self.setRecordValueSpecification(element, value_spec)
|
|
266
268
|
else:
|
|
267
|
-
raise NotImplementedError("Unsupported ValueSpecification %s" % type(
|
|
269
|
+
raise NotImplementedError("Unsupported ValueSpecification %s" % type(value_spec))
|
|
270
|
+
|
|
271
|
+
def setInitValue(self, element: ET.Element, init_value: ValueSpecification):
|
|
272
|
+
if init_value is not None:
|
|
273
|
+
child_element = ET.SubElement(element, "INIT-VALUE")
|
|
274
|
+
self.setValueSpecification(child_element, init_value)
|
|
275
|
+
|
|
276
|
+
def writeNonqueuedReceiverComSpec(self, element: ET.Element, com_spec: NonqueuedReceiverComSpec):
|
|
277
|
+
child_element = ET.SubElement(element, "NONQUEUED-RECEIVER-COM-SPEC")
|
|
278
|
+
self.setARObjectAttributes(child_element, com_spec)
|
|
279
|
+
self.writeReceiverComSpec(child_element, com_spec)
|
|
280
|
+
self.setChildElementOptionalFloatValue(child_element, "ALIVE-TIMEOUT", com_spec.alive_timeout)
|
|
281
|
+
self.setChildElementOptionalBooleanValue(child_element, "ENABLE-UPDATE", com_spec.enable_updated)
|
|
282
|
+
self.setChildElementOptionalBooleanValue(child_element, "HANDLE-NEVER-RECEIVED", com_spec.handle_never_received)
|
|
283
|
+
self.setChildElementOptionalLiteral(child_element, "HANDLE-TIMEOUT-TYPE", com_spec.handel_timeout_type)
|
|
284
|
+
self.setInitValue(child_element, com_spec.init_value)
|
|
285
|
+
|
|
286
|
+
def writeQueuedReceiverComSpec(self, element: ET.Element, com_spec: QueuedReceiverComSpec):
|
|
287
|
+
child_element = ET.SubElement(element, "QUEUED-RECEIVER-COM-SPEC")
|
|
288
|
+
self.setARObjectAttributes(child_element, com_spec)
|
|
289
|
+
self.writeReceiverComSpec(child_element, com_spec)
|
|
290
|
+
self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", com_spec.queue_length)
|
|
268
291
|
|
|
269
|
-
def writeClientComSpec(self,
|
|
292
|
+
def writeClientComSpec(self, element: ET.Element, com_spec: ClientComSpec):
|
|
270
293
|
self.logger.debug("writeClientComSpec")
|
|
294
|
+
child_element = ET.SubElement(element, "CLIENT-COM-SPEC")
|
|
295
|
+
self.setARObjectAttributes(child_element, com_spec)
|
|
296
|
+
self.setChildElementOptionalRefType(child_element, "OPERATION-REF", com_spec.operation_ref)
|
|
271
297
|
|
|
272
|
-
|
|
273
|
-
self.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
298
|
+
def writeModeSwitchReceiverComSpec(self, element: ET.Element, com_spec: ModeSwitchReceiverComSpec):
|
|
299
|
+
self.logger.debug("writeModeSwitchReceiverComSpec")
|
|
300
|
+
child_element = ET.SubElement(element, "MODE-SWITCH-RECEIVER-COM-SPEC")
|
|
301
|
+
self.setARObjectAttributes(child_element, com_spec)
|
|
302
|
+
self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", com_spec.modeGroupRef)
|
|
303
|
+
|
|
304
|
+
def writeRPortComSpec(self, element: ET.Element, com_spec: RPortComSpec):
|
|
277
305
|
if isinstance(com_spec, NonqueuedReceiverComSpec):
|
|
278
|
-
self.writeNonqueuedReceiverComSpec(
|
|
306
|
+
self.writeNonqueuedReceiverComSpec(element, com_spec)
|
|
307
|
+
elif isinstance(com_spec, QueuedReceiverComSpec):
|
|
308
|
+
self.writeQueuedReceiverComSpec(element, com_spec)
|
|
279
309
|
elif isinstance(com_spec, ClientComSpec):
|
|
280
|
-
self.writeClientComSpec(
|
|
310
|
+
self.writeClientComSpec(element, com_spec)
|
|
311
|
+
elif isinstance(com_spec, ModeSwitchReceiverComSpec):
|
|
312
|
+
self.writeModeSwitchReceiverComSpec(element, com_spec)
|
|
281
313
|
else:
|
|
282
314
|
raise ValueError("Unsupported RPortComSpec %s" % type(com_spec))
|
|
283
315
|
|
|
284
316
|
def writePPortPrototype(self, ports_tag: ET.Element, prototype: PPortPrototype):
|
|
285
317
|
prototype_tag = ET.SubElement(ports_tag, "P-PORT-PROTOTYPE")
|
|
286
318
|
|
|
287
|
-
self.
|
|
288
|
-
self.writeShortName(prototype_tag, prototype.short_name)
|
|
289
|
-
|
|
319
|
+
self.writeIdentifiable(prototype_tag, prototype)
|
|
290
320
|
self.logger.debug("writePPortPrototype %s" % prototype.short_name)
|
|
291
321
|
|
|
292
322
|
com_specs = prototype.getProvidedComSpecs()
|
|
@@ -295,23 +325,18 @@ class ARXMLWriter:
|
|
|
295
325
|
for com_spec in com_specs:
|
|
296
326
|
self.writePPortComSpec(com_specs_tag, com_spec)
|
|
297
327
|
|
|
298
|
-
self.
|
|
328
|
+
self.setChildElementOptionalRefType(prototype_tag, "PROVIDED-INTERFACE-TREF", prototype.provided_interface_tref)
|
|
299
329
|
|
|
300
330
|
def writeRPortPrototype(self, ports_tag: ET.Element, prototype: RPortPrototype):
|
|
301
|
-
prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
|
|
302
|
-
|
|
303
|
-
self.writeElementAttributes(prototype_tag, prototype)
|
|
304
|
-
self.writeShortName(prototype_tag, prototype.short_name)
|
|
305
|
-
|
|
306
331
|
self.logger.debug("writeRPortPrototype %s" % prototype.short_name)
|
|
307
|
-
|
|
332
|
+
prototype_tag = ET.SubElement(ports_tag, "R-PORT-PROTOTYPE")
|
|
333
|
+
self.writeIdentifiable(prototype_tag, prototype)
|
|
308
334
|
com_specs = prototype.getRequiredComSpecs()
|
|
309
335
|
if len(com_specs) > 0:
|
|
310
336
|
com_specs_tag = ET.SubElement(prototype_tag, "REQUIRED-COM-SPECS")
|
|
311
337
|
for com_spec in com_specs:
|
|
312
338
|
self.writeRPortComSpec(com_specs_tag, com_spec)
|
|
313
|
-
|
|
314
|
-
self.writeChildOptionalRefElement(prototype_tag, "REQUIRED-INTERFACE-TREF", prototype.required_interface_tref)
|
|
339
|
+
self.setChildElementOptionalRefType(prototype_tag, "REQUIRED-INTERFACE-TREF", prototype.required_interface_tref)
|
|
315
340
|
|
|
316
341
|
def writePortPrototypes(self, ports_tag: ET.Element, port_prototypes: List[PortPrototype]):
|
|
317
342
|
for port_prototype in port_prototypes:
|
|
@@ -321,16 +346,53 @@ class ARXMLWriter:
|
|
|
321
346
|
self.writeRPortPrototype(ports_tag, port_prototype)
|
|
322
347
|
else:
|
|
323
348
|
self._raiseError("Invalid PortPrototype")
|
|
349
|
+
|
|
350
|
+
def writeInnerGroupIRef(self, element: ET.Element, inner_group_iref: InnerPortGroupInCompositionInstanceRef):
|
|
351
|
+
child_element = ET.SubElement(element, "INNER-GROUP-IREF")
|
|
352
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-REF", inner_group_iref.contextRef)
|
|
353
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-REF", inner_group_iref.targetRef)
|
|
354
|
+
|
|
355
|
+
def writePortGroupInnerGroupIRefs(self, element: ET.Element, parent: PortGroup):
|
|
356
|
+
irefs = parent.getInnerGroupIRefs()
|
|
357
|
+
if len(irefs) > 0:
|
|
358
|
+
child_element = ET.SubElement(element, "INNER-GROUP-IREFS")
|
|
359
|
+
for iref in irefs:
|
|
360
|
+
self.writeInnerGroupIRef(child_element, iref)
|
|
361
|
+
|
|
362
|
+
def writePortGroupOuterPortRefs(self, element: ET.Element, parent: PortGroup):
|
|
363
|
+
refs = parent.getOuterPortRefs()
|
|
364
|
+
if len(refs) > 0:
|
|
365
|
+
outer_ports_element = ET.SubElement(element, "OUTER-PORTS")
|
|
366
|
+
for ref in refs:
|
|
367
|
+
child_element = ET.SubElement(outer_ports_element, "PORT-PROTOTYPE-REF-CONDITIONAL")
|
|
368
|
+
self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref)
|
|
369
|
+
|
|
370
|
+
def writePortGroup(self, element: ET.Element, port_group: PortGroup):
|
|
371
|
+
self.logger.debug("writePortGroup %s" % port_group.short_name)
|
|
372
|
+
child_element = ET.SubElement(element, "PORT-GROUP")
|
|
373
|
+
self.writeIdentifiable(child_element, port_group)
|
|
374
|
+
self.writePortGroupInnerGroupIRefs(child_element, port_group)
|
|
375
|
+
self.writePortGroupOuterPortRefs(child_element, port_group)
|
|
376
|
+
|
|
377
|
+
def writeSwComponentTypePortGroups(self, element: ET.Element, parent: SwComponentType):
|
|
378
|
+
port_groups = parent.getPortGroups()
|
|
379
|
+
if len(port_groups) > 0:
|
|
380
|
+
child_element = ET.SubElement(element, "PORT-GROUPS")
|
|
381
|
+
for port_group in port_groups:
|
|
382
|
+
self.writePortGroup(child_element, port_group)
|
|
324
383
|
|
|
325
384
|
def writeSwComponentType(self, element: ET.Element, sw_component: SwComponentType):
|
|
326
|
-
|
|
327
|
-
|
|
385
|
+
self.writeIdentifiable(element, sw_component)
|
|
386
|
+
port_prototypes = sw_component.getPortPrototypes()
|
|
387
|
+
if len(port_prototypes) > 0:
|
|
388
|
+
ports_tag = ET.SubElement(element, "PORTS")
|
|
389
|
+
self.writePortPrototypes(ports_tag, port_prototypes)
|
|
390
|
+
self.writeSwComponentTypePortGroups(element, sw_component)
|
|
328
391
|
|
|
329
392
|
def writeSwComponentPrototype(self, element: ET.Element, prototype: SwComponentPrototype):
|
|
330
393
|
prototype_tag = ET.SubElement(element, "SW-COMPONENT-PROTOTYPE")
|
|
331
|
-
self.
|
|
332
|
-
self.
|
|
333
|
-
self.writeChildOptionalRefElement(prototype_tag, "TYPE-TREF", prototype.type_tref)
|
|
394
|
+
self.writeIdentifiable(prototype_tag, prototype)
|
|
395
|
+
self.setChildElementOptionalRefType(prototype_tag, "TYPE-TREF", prototype.type_tref)
|
|
334
396
|
|
|
335
397
|
def writeSwComponentPrototypes(self, element: ET.Element, sw_component: CompositionSwComponentType):
|
|
336
398
|
components_tag = ET.SubElement(element, "COMPONENTS")
|
|
@@ -339,41 +401,39 @@ class ARXMLWriter:
|
|
|
339
401
|
|
|
340
402
|
def writeAssemblySwConnector(self, element: ET.Element, sw_connector: AssemblySwConnector):
|
|
341
403
|
connector_tag = ET.SubElement(element, "ASSEMBLY-SW-CONNECTOR")
|
|
342
|
-
self.
|
|
343
|
-
self.writeShortName(connector_tag, sw_connector.short_name)
|
|
404
|
+
self.writeIdentifiable(connector_tag, sw_connector)
|
|
344
405
|
|
|
345
406
|
if sw_connector.provider_iref is not None:
|
|
346
407
|
provider_iref_tag = ET.SubElement(connector_tag, "PROVIDER-IREF")
|
|
347
|
-
self.
|
|
348
|
-
self.
|
|
349
|
-
self.
|
|
408
|
+
self.setARObjectAttributes(provider_iref_tag, sw_connector.provider_iref)
|
|
409
|
+
self.setChildElementOptionalRefType(provider_iref_tag, "CONTEXT-COMPONENT-REF", sw_connector.provider_iref.context_component_ref)
|
|
410
|
+
self.setChildElementOptionalRefType(provider_iref_tag, "TARGET-P-PORT-REF", sw_connector.provider_iref.target_p_port_ref)
|
|
350
411
|
|
|
351
412
|
if sw_connector.requester_iref is not None:
|
|
352
413
|
requester_iref_tag = ET.SubElement(connector_tag, "REQUESTER-IREF")
|
|
353
|
-
self.
|
|
354
|
-
self.
|
|
355
|
-
self.
|
|
414
|
+
self.setARObjectAttributes(requester_iref_tag, sw_connector.requester_iref)
|
|
415
|
+
self.setChildElementOptionalRefType(requester_iref_tag, "CONTEXT-COMPONENT-REF", sw_connector.requester_iref.context_component_ref)
|
|
416
|
+
self.setChildElementOptionalRefType(requester_iref_tag, "TARGET-R-PORT-REF", sw_connector.requester_iref.target_r_port_ref)
|
|
356
417
|
|
|
357
418
|
def writeDelegationSwConnector(self, element: ET.Element, sw_connector: DelegationSwConnector):
|
|
358
419
|
connector_tag = ET.SubElement(element, "DELEGATION-SW-CONNECTOR")
|
|
359
|
-
self.
|
|
360
|
-
self.writeShortName(connector_tag, sw_connector.short_name)
|
|
420
|
+
self.writeIdentifiable(connector_tag, sw_connector)
|
|
361
421
|
|
|
362
422
|
if sw_connector.inner_port_iref is not None:
|
|
363
423
|
inner_port_iref_tag = ET.SubElement(connector_tag, "INNER-PORT-IREF")
|
|
364
424
|
if isinstance(sw_connector.inner_port_iref, PPortInCompositionInstanceRef):
|
|
365
425
|
instance_ref_tag = ET.SubElement(inner_port_iref_tag, "P-PORT-IN-COMPOSITION-INSTANCE-REF")
|
|
366
|
-
self.
|
|
367
|
-
self.
|
|
426
|
+
self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-COMPONENT-REF", sw_connector.inner_port_iref.context_component_ref)
|
|
427
|
+
self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-P-PORT-REF", sw_connector.inner_port_iref.target_p_port_ref)
|
|
368
428
|
elif isinstance(sw_connector.inner_port_iref, RPortInCompositionInstanceRef):
|
|
369
429
|
instance_ref_tag = ET.SubElement(inner_port_iref_tag, "R-PORT-IN-COMPOSITION-INSTANCE-REF")
|
|
370
|
-
self.
|
|
371
|
-
self.
|
|
430
|
+
self.setChildElementOptionalRefType(instance_ref_tag, "CONTEXT-COMPONENT-REF", sw_connector.inner_port_iref.context_component_ref)
|
|
431
|
+
self.setChildElementOptionalRefType(instance_ref_tag, "TARGET-R-PORT-REF", sw_connector.inner_port_iref.target_r_port_ref)
|
|
372
432
|
else:
|
|
373
433
|
self._raiseError("Invalid inner port of DelegationSwConnector <%s>" % sw_connector.short_name)
|
|
374
434
|
|
|
375
435
|
if sw_connector.outer_port_ref is not None:
|
|
376
|
-
self.
|
|
436
|
+
self.setChildElementOptionalRefType(connector_tag, "OUTER-PORT-REF", sw_connector.outer_port_ref)
|
|
377
437
|
#self.writeChildOptionalRefElement(requester_iref_tag, "TARGET-R-PORT-REF", sw_connector.requester_iref.target_r_port_ref)
|
|
378
438
|
|
|
379
439
|
def writeSwConnector(self, element: ET.Element, sw_connector: SwConnector):
|
|
@@ -385,62 +445,129 @@ class ARXMLWriter:
|
|
|
385
445
|
raise NotImplementedError("Unsupported Sw Connector %s")
|
|
386
446
|
|
|
387
447
|
def writeSwConnectors(self, element: ET.Element, sw_component: CompositionSwComponentType):
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
448
|
+
sw_connectors = sw_component.getSwConnectors()
|
|
449
|
+
if len(sw_connectors) > 0:
|
|
450
|
+
connectors_tag = ET.SubElement(element, "CONNECTORS")
|
|
451
|
+
for sw_connector in sw_connectors:
|
|
452
|
+
self.writeSwConnector(connectors_tag, sw_connector)
|
|
391
453
|
|
|
392
|
-
def
|
|
454
|
+
def writeCompositionSwComponentTypeDataTypeMappingSet(self, element: ET.Element, parent: CompositionSwComponentType):
|
|
393
455
|
data_type_mappings = parent.getDataTypeMappings()
|
|
394
456
|
if len(data_type_mappings) > 0:
|
|
395
457
|
child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-REFS")
|
|
396
458
|
self.logger.debug("writeDataTypeMappingSet")
|
|
397
459
|
for data_type_mapping in data_type_mappings:
|
|
398
|
-
self.
|
|
460
|
+
self.setChildElementOptionalRefType(child_element, "DATA-TYPE-MAPPING-REF", data_type_mapping)
|
|
399
461
|
|
|
400
462
|
def writeCompositionSwComponentType(self, parent: ET.Element, sw_component: CompositionSwComponentType):
|
|
401
463
|
child_element = ET.SubElement(parent, "COMPOSITION-SW-COMPONENT-TYPE")
|
|
402
464
|
|
|
403
|
-
self.writeIdentifiable(child_element, sw_component)
|
|
404
465
|
self.writeSwComponentType(child_element, sw_component)
|
|
405
466
|
self.writeSwComponentPrototypes(child_element, sw_component)
|
|
406
467
|
self.writeSwConnectors(child_element, sw_component)
|
|
407
|
-
self.
|
|
468
|
+
self.writeCompositionSwComponentTypeDataTypeMappingSet(child_element, sw_component)
|
|
408
469
|
|
|
409
470
|
def writeCompositionSwComponentTypes(self, element: ET.Element, ar_package: ARPackage):
|
|
410
471
|
for sw_component in ar_package.getCompositionSwComponentTypes():
|
|
411
472
|
self.writeCompositionSwComponentType(element, sw_component)
|
|
412
473
|
|
|
413
|
-
def
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
def
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
self.
|
|
474
|
+
def writeGeneralAnnotation(self, element: ET.Element, annotation: Annotation):
|
|
475
|
+
self.setMultiLongName(element, "LABEL", annotation.label)
|
|
476
|
+
|
|
477
|
+
def writeAnnotations(self, element: ET.Element, props: SwDataDefProps) :
|
|
478
|
+
annotations = props.getAnnotations()
|
|
479
|
+
if len(annotations) > 0:
|
|
480
|
+
annotations_tag = ET.SubElement(element, "ANNOTATIONS")
|
|
481
|
+
for annotation in annotations:
|
|
482
|
+
annotation_tag = ET.SubElement(annotations_tag, "ANNOTATION")
|
|
483
|
+
self.writeGeneralAnnotation(annotation_tag, annotation)
|
|
484
|
+
|
|
485
|
+
def setSwAxisIndividual(self, element: ET.Element, props: SwAxisIndividual):
|
|
486
|
+
child_element = ET.SubElement(element, "SW-AXIS-INDIVIDUAL")
|
|
487
|
+
self.setARObjectAttributes(child_element, props)
|
|
488
|
+
self.setChildElementOptionalRefType(child_element, "INPUT-VARIABLE-TYPE-REF", props.inputVariableTypeRef)
|
|
489
|
+
self.setChildElementOptionalRefType(child_element, "COMPU-METHOD-REF", props.compuMethodRef)
|
|
490
|
+
self.setChildElementOptionalNumericalValue(child_element, "SW-MAX-AXIS-POINTS", props.swMaxAxisPoints)
|
|
491
|
+
self.setChildElementOptionalNumericalValue(child_element, "SW-MIN-AXIS-POINTS", props.swMinAxisPoints)
|
|
492
|
+
self.setChildElementOptionalRefType(child_element, "DATA-CONSTR-REF", props.dataConstrRef)
|
|
493
|
+
|
|
494
|
+
def setSwAxisGrouped(self, element: ET.Element, props: SwAxisGrouped):
|
|
495
|
+
child_element = ET.SubElement(element, "SW-AXIS-GROUPED")
|
|
496
|
+
self.setARObjectAttributes(child_element, props)
|
|
497
|
+
self.setChildElementOptionalRefType(child_element, "SHARED-AXIS-TYPE-REF", props.sharedAxisTypeRef)
|
|
498
|
+
|
|
499
|
+
def setSwCalprmAxis(self, element: ET.Element, axis: SwCalprmAxis):
|
|
500
|
+
if axis is not None:
|
|
501
|
+
child_element = ET.SubElement(element, "SW-CALPRM-AXIS")
|
|
502
|
+
self.setChildElementOptionalNumericalValue(child_element, "SW-AXIS-INDEX", axis.sw_axis_index)
|
|
503
|
+
self.setChildElementOptionalLiteral(child_element, "CATEGORY", axis.category)
|
|
504
|
+
if axis.sw_calprm_axis_type_props is not None:
|
|
505
|
+
if isinstance(axis.sw_calprm_axis_type_props, SwAxisIndividual):
|
|
506
|
+
self.setSwAxisIndividual(child_element, axis.sw_calprm_axis_type_props)
|
|
507
|
+
elif isinstance(axis.sw_calprm_axis_type_props, SwAxisGrouped):
|
|
508
|
+
self.setSwAxisGrouped(child_element, axis.sw_calprm_axis_type_props)
|
|
509
|
+
else:
|
|
510
|
+
self._raiseError("Unsupported SwCalprmAxisTypeProps %s" % type(axis.sw_calprm_axis_type_props))
|
|
511
|
+
|
|
512
|
+
def setSwCalprmAxisSet(self, element: ET.Element, key: str, set: SwCalprmAxisSet):
|
|
513
|
+
axises = set.getSwCalprmAxises()
|
|
514
|
+
if len(axises) > 0:
|
|
515
|
+
child_element = ET.SubElement(element, key)
|
|
516
|
+
for axis in axises:
|
|
517
|
+
self.setSwCalprmAxis(child_element, axis)
|
|
518
|
+
|
|
519
|
+
def setSwDataDefProps(self, element: ET.Element, key: str, sw_data_def_props: SwDataDefProps):
|
|
520
|
+
if sw_data_def_props is not None:
|
|
521
|
+
child_element = ET.SubElement(element, key)
|
|
522
|
+
self.setARObjectAttributes(child_element, sw_data_def_props)
|
|
523
|
+
sw_data_def_props_variants_tag = ET.SubElement(child_element, "SW-DATA-DEF-PROPS-VARIANTS")
|
|
524
|
+
sw_data_def_props_conditional_tag = ET.SubElement(sw_data_def_props_variants_tag, "SW-DATA-DEF-PROPS-CONDITIONAL")
|
|
525
|
+
self.setARObjectAttributes(sw_data_def_props_conditional_tag, sw_data_def_props.conditional)
|
|
526
|
+
self.writeAnnotations(sw_data_def_props_conditional_tag, sw_data_def_props)
|
|
527
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "BASE-TYPE-REF", sw_data_def_props.baseTypeRef)
|
|
528
|
+
self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-CALIBRATION-ACCESS", sw_data_def_props.swCalibrationAccess)
|
|
529
|
+
self.setSwCalprmAxisSet(sw_data_def_props_conditional_tag, "SW-CALPRM-AXIS-SET", sw_data_def_props.swCalprmAxisSet)
|
|
530
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "COMPU-METHOD-REF", sw_data_def_props.compuMethodRef)
|
|
531
|
+
self.setChildElementOptionalLiteral(sw_data_def_props_conditional_tag, "SW-IMPL-POLICY", sw_data_def_props.swImplPolicy)
|
|
532
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "IMPLEMENTATION-DATA-TYPE-REF", sw_data_def_props.implementationDataTypeRef)
|
|
533
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "DATA-CONSTR-REF", sw_data_def_props.dataConstrRef)
|
|
534
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "SW-RECORD-LAYOUT-REF", sw_data_def_props.swRecordLayoutRef)
|
|
535
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "VALUE-AXIS-DATA-TYPE-REF", sw_data_def_props.valueAxisDataTypeRef)
|
|
536
|
+
self.setChildElementOptionalRefType(sw_data_def_props_conditional_tag, "UNIT-REF", sw_data_def_props.unitRef)
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
def writeApplicationDataType(self, element: ET.Element, data_type: ApplicationDataType):
|
|
540
|
+
self.writeAutosarDataType(element, data_type)
|
|
541
|
+
|
|
542
|
+
def writeApplicationCompositeDataType(self, element: ET.Element, data_type: ApplicationCompositeDataType):
|
|
543
|
+
self.writeApplicationDataType(element, data_type)
|
|
544
|
+
|
|
545
|
+
def writeAutosarDataType(self, element: ET.Element, data_type: AutosarDataType):
|
|
546
|
+
self.writeARElement(element, data_type)
|
|
547
|
+
self.setSwDataDefProps(element, "SW-DATA-DEF-PROPS", data_type.sw_data_def_props)
|
|
431
548
|
|
|
432
549
|
def writeApplicationPrimitiveDataType(self, element: ET.Element, data_type: ApplicationPrimitiveDataType):
|
|
550
|
+
self.logger.debug("writeApplicationPrimitiveDataType %s" % data_type.short_name)
|
|
433
551
|
data_type_tag = ET.SubElement(element, "APPLICATION-PRIMITIVE-DATA-TYPE")
|
|
434
552
|
self.writeApplicationDataType(data_type_tag, data_type)
|
|
435
553
|
|
|
554
|
+
def setDataPrototype(self, element: ET.Element, prototype: DataPrototype):
|
|
555
|
+
self.writeIdentifiable(element, prototype)
|
|
556
|
+
|
|
557
|
+
def setApplicationCompositeElementDataPrototype(self, element: ET.Element, prototype: ApplicationCompositeElementDataPrototype):
|
|
558
|
+
self.setDataPrototype(element, prototype)
|
|
559
|
+
self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.typeTRef)
|
|
560
|
+
|
|
561
|
+
def setApplicationRecordElement(self, element: ET.Element, prototype: ApplicationRecordElement):
|
|
562
|
+
self.setApplicationCompositeElementDataPrototype(element, prototype)
|
|
563
|
+
|
|
436
564
|
def writeApplicationRecordElements(self, element: ET.Element, data_type: ApplicationRecordDataType):
|
|
437
|
-
|
|
438
|
-
if len(
|
|
565
|
+
records = data_type.getApplicationRecordElements()
|
|
566
|
+
if len(records) > 0:
|
|
439
567
|
elements_tag = ET.SubElement(element, "ELEMENTS")
|
|
440
|
-
for
|
|
441
|
-
|
|
442
|
-
self.
|
|
443
|
-
self.writeChildOptionalRefElement(record_element_tag, "TYPE-TREF", record_element.type_tref)
|
|
568
|
+
for record in records:
|
|
569
|
+
child_element = ET.SubElement(elements_tag, "APPLICATION-RECORD-ELEMENT")
|
|
570
|
+
self.setApplicationRecordElement(child_element, record)
|
|
444
571
|
|
|
445
572
|
def writeApplicationRecordDataType(self, element: ET.Element, data_type: ApplicationRecordDataType):
|
|
446
573
|
data_type_tag = ET.SubElement(element, "APPLICATION-RECORD-DATA-TYPE")
|
|
@@ -456,21 +583,21 @@ class ARXMLWriter:
|
|
|
456
583
|
else:
|
|
457
584
|
raise NotImplementedError("Unsupported ApplicationDataType <%s>" % type(data_type))
|
|
458
585
|
|
|
459
|
-
def writeBaseTypeDirectDefinition(self, element: ET.Element,
|
|
460
|
-
self.
|
|
461
|
-
self.
|
|
462
|
-
self.
|
|
586
|
+
def writeBaseTypeDirectDefinition(self, element: ET.Element, base_type_definition: BaseTypeDirectDefinition):
|
|
587
|
+
self.setChildElementOptionalNumericalValue(element, "BASE-TYPE-SIZE", base_type_definition.base_type_size)
|
|
588
|
+
self.setChildElementOptionalLiteral(element, "BASE-TYPE-ENCODING", base_type_definition.base_type_encoding)
|
|
589
|
+
self.setChildElementOptionalNumericalValue(element, "MEM-ALIGNMENT", base_type_definition.mem_alignment)
|
|
590
|
+
self.setChildElementOptionalLiteral(element, "NATIVE-DECLARATION", base_type_definition.native_declaration)
|
|
463
591
|
|
|
464
|
-
def
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
self.writeBaseTypeDirectDefinition(data_type_tag, base_type)
|
|
592
|
+
def writeSwBaseType(self, element: ET.Element, base_type: SwBaseType):
|
|
593
|
+
data_type_tag = ET.SubElement(element, "SW-BASE-TYPE")
|
|
594
|
+
self.writeIdentifiable(data_type_tag, base_type)
|
|
595
|
+
self.writeBaseTypeDirectDefinition(data_type_tag, base_type.baseTypeDefinition)
|
|
469
596
|
|
|
470
597
|
def writeCompuScaleConstantContents(self, element: ET.Element, contents: CompuScaleConstantContents):
|
|
471
598
|
compu_const_tag = ET.SubElement(element, "COMPU-CONST")
|
|
472
599
|
if isinstance(contents.compu_const.compu_const_content_type, CompuConstTextContent):
|
|
473
|
-
self.
|
|
600
|
+
self.setChildElementOptionalLiteral(compu_const_tag, "VT", contents.compu_const.compu_const_content_type.vt)
|
|
474
601
|
|
|
475
602
|
def writeCompuNominatorDenominator(self, element: ET.Element, key: str, parent: CompuNominatorDenominator):
|
|
476
603
|
child_element = ET.SubElement(element, key)
|
|
@@ -487,105 +614,1343 @@ class ARXMLWriter:
|
|
|
487
614
|
self.writeCompuNominatorDenominator(coeffs_tag, "COMPU-DENOMINATOR", contents.compu_rational_coeffs.compu_denominator)
|
|
488
615
|
|
|
489
616
|
def writeCompuScaleContents(self, element: ET.Element, compu_scale: CompuScale):
|
|
490
|
-
if isinstance(compu_scale.
|
|
491
|
-
self.writeCompuScaleConstantContents(element, compu_scale.
|
|
492
|
-
elif isinstance(compu_scale.
|
|
493
|
-
self.writeCompuScaleRationalFormula(element, compu_scale.
|
|
617
|
+
if isinstance(compu_scale.compuScaleContents, CompuScaleConstantContents):
|
|
618
|
+
self.writeCompuScaleConstantContents(element, compu_scale.compuScaleContents)
|
|
619
|
+
elif isinstance(compu_scale.compuScaleContents, CompuScaleRationalFormula):
|
|
620
|
+
self.writeCompuScaleRationalFormula(element, compu_scale.compuScaleContents)
|
|
494
621
|
else:
|
|
495
|
-
raise NotImplementedError("Unsupported CompuScaleContents %s" % type(compu_scale.
|
|
622
|
+
raise NotImplementedError("Unsupported CompuScaleContents %s" % type(compu_scale.compuScaleContents))
|
|
496
623
|
|
|
497
624
|
def writeCompuScales(self, element: ET.Element, compu_scales: CompuScales):
|
|
498
625
|
compu_scales_tag = ET.SubElement(element, "COMPU-SCALES")
|
|
499
626
|
for compu_scale in compu_scales.getCompuScales():
|
|
500
|
-
|
|
501
|
-
self.
|
|
502
|
-
self.
|
|
503
|
-
self.
|
|
627
|
+
child_element = ET.SubElement(compu_scales_tag, "COMPU-SCALE")
|
|
628
|
+
self.setARObjectAttributes(child_element, compu_scale)
|
|
629
|
+
self.setChildElementOptionalLiteral(child_element, "SYMBOL", compu_scale.symbol)
|
|
630
|
+
self.writeChildLimitElement(child_element, "LOWER-LIMIT", compu_scale.lowerLimit)
|
|
631
|
+
self.writeChildLimitElement(child_element, "UPPER-LIMIT", compu_scale.upperLimit)
|
|
632
|
+
self.writeCompuScaleContents(child_element, compu_scale)
|
|
504
633
|
|
|
505
634
|
def writeCompuInternalToPhys(self, element: ET.Element, compu_method: CompuMethod):
|
|
506
635
|
if compu_method.compu_internal_to_phys is not None:
|
|
507
636
|
compu_internal_to_phys_tag = ET.SubElement(element, "COMPU-INTERNAL-TO-PHYS")
|
|
508
|
-
self.
|
|
637
|
+
self.setARObjectAttributes(compu_internal_to_phys_tag, compu_method.compu_internal_to_phys)
|
|
509
638
|
if isinstance(compu_method.compu_internal_to_phys.compu_content, CompuScales):
|
|
510
639
|
self.writeCompuScales(compu_internal_to_phys_tag, compu_method.compu_internal_to_phys.compu_content)
|
|
511
640
|
|
|
512
|
-
def
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
self.writeCompuInternalToPhys(compu_method_tag, compu_method)
|
|
641
|
+
def writeCompuMethod(self, element: ET.Element, compu_method: CompuMethod):
|
|
642
|
+
compu_method_tag = ET.SubElement(element, "COMPU-METHOD")
|
|
643
|
+
self.logger.debug("writeCompuMethods %s" % compu_method.short_name)
|
|
644
|
+
self.writeIdentifiable(compu_method_tag, compu_method)
|
|
645
|
+
self.setChildElementOptionalRefType(compu_method_tag, "UNIT-REF", compu_method.unit_ref)
|
|
646
|
+
self.writeCompuInternalToPhys(compu_method_tag, compu_method)
|
|
519
647
|
|
|
520
|
-
def
|
|
648
|
+
def setApplicationValueSpecification(self, element: ET.Element, spec: ApplicationValueSpecification):
|
|
521
649
|
spec_tag = ET.SubElement(element, "APPLICATION-VALUE-SPECIFICATION")
|
|
522
|
-
self.
|
|
523
|
-
self.
|
|
650
|
+
self.setChildElementOptionalLiteral(spec_tag, "SHORT-LABEL", spec.short_label)
|
|
651
|
+
self.setChildElementOptionalLiteral(spec_tag, "CATEGORY", spec.category)
|
|
524
652
|
self.writeSwValueCont(spec_tag, spec.sw_value_cont)
|
|
525
653
|
|
|
526
|
-
def
|
|
527
|
-
|
|
654
|
+
def setRecordValueSpecification(self, element: ET.Element, spec: RecordValueSpecification):
|
|
655
|
+
child_element = ET.SubElement(element, "RECORD-VALUE-SPECIFICATION")
|
|
656
|
+
self.setARObjectAttributes(child_element, spec)
|
|
657
|
+
self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", spec.short_label)
|
|
528
658
|
fields = spec.get_fields()
|
|
529
659
|
if len(fields) > 0:
|
|
530
|
-
fields_tag = ET.SubElement(
|
|
660
|
+
fields_tag = ET.SubElement(child_element, "FIELDS")
|
|
531
661
|
for field in fields:
|
|
532
662
|
if isinstance(field, ApplicationValueSpecification):
|
|
533
|
-
self.
|
|
663
|
+
self.setApplicationValueSpecification(fields_tag, field)
|
|
664
|
+
elif isinstance(field, NumericalValueSpecification):
|
|
665
|
+
self.setNumericalValueSpecification(fields_tag, field)
|
|
666
|
+
elif isinstance(field, TextValueSpecification):
|
|
667
|
+
self.setTextValueSpecification(fields_tag, field)
|
|
668
|
+
elif isinstance(field, ArrayValueSpecification):
|
|
669
|
+
self.setArrayValueSpecification(fields_tag, field)
|
|
534
670
|
else:
|
|
535
671
|
raise NotImplementedError("Unsupported Field <%s>" % type(field))
|
|
536
672
|
|
|
537
|
-
def
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
if isinstance(spec.value_spec, ApplicationValueSpecification):
|
|
545
|
-
self.writeApplicationValueSpecification(value_spec_tag, spec.value_spec)
|
|
546
|
-
elif isinstance(spec.value_spec, RecordValueSpecification):
|
|
547
|
-
self.writeRecordValueSpecification(value_spec_tag, spec.value_spec)
|
|
548
|
-
else:
|
|
549
|
-
raise NotImplementedError("Unsupported ConstantSpecification %s" % type(spec.value_spec))
|
|
673
|
+
def writeConstantSpecification(self, element: ET.Element, spec: ConstantSpecification):
|
|
674
|
+
spec_tag = ET.SubElement(element, "CONSTANT-SPECIFICATION")
|
|
675
|
+
self.writeIdentifiable(spec_tag, spec)
|
|
676
|
+
|
|
677
|
+
if spec.value_spec is not None:
|
|
678
|
+
value_spec_tag = ET.SubElement(spec_tag, "VALUE-SPEC")
|
|
679
|
+
self.setValueSpecification(value_spec_tag, spec.value_spec)
|
|
550
680
|
|
|
551
|
-
def
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
self.
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
self.
|
|
564
|
-
|
|
681
|
+
def setInternalConstrs(self, element: ET.Element, constrs: InternalConstrs):
|
|
682
|
+
if constrs is not None:
|
|
683
|
+
constrs_tag = ET.SubElement(element, "INTERNAL-CONSTRS")
|
|
684
|
+
self.setARObjectAttributes(constrs_tag, constrs)
|
|
685
|
+
if constrs.lower_limit is not None:
|
|
686
|
+
self.writeChildLimitElement(constrs_tag, "LOWER-LIMIT", constrs.lower_limit)
|
|
687
|
+
if constrs.upper_limit is not None:
|
|
688
|
+
self.writeChildLimitElement(constrs_tag, "UPPER-LIMIT", constrs.upper_limit)
|
|
689
|
+
|
|
690
|
+
def setPhysConstrs(self, element: ET.Element, constrs: PhysConstrs):
|
|
691
|
+
if constrs is not None:
|
|
692
|
+
child_element = ET.SubElement(element, "PHYS-CONSTRS")
|
|
693
|
+
self.setARObjectAttributes(child_element, constrs)
|
|
694
|
+
if constrs.lower_limit is not None:
|
|
695
|
+
self.writeChildLimitElement(child_element, "LOWER-LIMIT", constrs.lower_limit)
|
|
696
|
+
if constrs.upper_limit is not None:
|
|
697
|
+
self.writeChildLimitElement(child_element, "UPPER-LIMIT", constrs.upper_limit)
|
|
698
|
+
self.setChildElementOptionalRefType(child_element, "UNIT-REF", constrs.unit_ref)
|
|
565
699
|
|
|
566
700
|
def writeDataConstrRules(self, element: ET.Element, parent: DataConstr):
|
|
567
701
|
rules = parent.getDataConstrRules()
|
|
568
702
|
if len(rules) > 0:
|
|
569
703
|
rules_tag = ET.SubElement(element, "DATA-CONSTR-RULES")
|
|
570
704
|
for rule in rules:
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
def writeDataConstr(self, element: ET.Element,
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
705
|
+
child_element = ET.SubElement(rules_tag, "DATA-CONSTR-RULE")
|
|
706
|
+
self.setARObjectAttributes(child_element, rule)
|
|
707
|
+
self.setChildElementOptionalNumericalValue(child_element, "CONSTR-LEVEL", rule.constrLevel)
|
|
708
|
+
self.setPhysConstrs(child_element, rule.physConstrs)
|
|
709
|
+
self.setInternalConstrs(child_element, rule.internalConstrs)
|
|
710
|
+
|
|
711
|
+
def writeDataConstr(self, element: ET.Element, constr: DataConstr):
|
|
712
|
+
child_element = ET.SubElement(element, "DATA-CONSTR")
|
|
713
|
+
self.writeIdentifiable(child_element, constr)
|
|
714
|
+
self.writeDataConstrRules(child_element, constr)
|
|
715
|
+
|
|
716
|
+
def writeUnit(self, element: ET.Element, unit: Unit):
|
|
717
|
+
self.logger.debug("writeUnit %s" % unit.short_name)
|
|
718
|
+
child_element = ET.SubElement(element, "UNIT")
|
|
719
|
+
self.writeIdentifiable(child_element, unit)
|
|
720
|
+
self.setChildElementOptionalLiteral(child_element, "DISPLAY-NAME", unit.display_name)
|
|
721
|
+
|
|
722
|
+
def setRModeInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: RModeInAtomicSwcInstanceRef):
|
|
723
|
+
child_element = ET.SubElement(element, key)
|
|
724
|
+
self.setChildElementOptionalRefType(child_element, "BASE", iref.base_ref)
|
|
725
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.context_port_ref)
|
|
726
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-MODE-DECLARATION-GROUP-PROTOTYPE-REF", iref.context_mode_declaration_group_prototype_ref)
|
|
727
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-MODE-DECLARATION-REF", iref.target_mode_declaration_ref)
|
|
728
|
+
|
|
729
|
+
def setPOperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: POperationInAtomicSwcInstanceRef):
|
|
730
|
+
child_element = ET.SubElement(element, key)
|
|
731
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-P-PORT-REF", iref.context_p_port_ref)
|
|
732
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-PROVIDED-OPERATION-REF", iref.target_provided_operation_ref)
|
|
733
|
+
|
|
734
|
+
def setRTEEvent(self, element: ET.Element, event: RTEEvent):
|
|
735
|
+
self.writeIdentifiable(element, event)
|
|
736
|
+
irefs = event.getDisabledModeIRefs()
|
|
737
|
+
if len(irefs) > 0:
|
|
738
|
+
child_element = ET.SubElement(element, "DISABLED-MODE-IREFS")
|
|
739
|
+
for iref in irefs:
|
|
740
|
+
self.setRModeInAtomicSwcInstanceRef(child_element, "DISABLED-MODE-IREF", iref)
|
|
741
|
+
self.setChildElementOptionalRefType(element, "START-ON-EVENT-REF", event.start_on_event_ref)
|
|
742
|
+
|
|
743
|
+
def setTimingEvent(self, element: ET.Element, event: TimingEvent):
|
|
744
|
+
if event is not None:
|
|
745
|
+
child_element = ET.SubElement(element, "TIMING-EVENT")
|
|
746
|
+
self.setRTEEvent(child_element, event)
|
|
747
|
+
self.setChildElementOptionalFloatValue(child_element, "PERIOD", event.period)
|
|
748
|
+
|
|
749
|
+
def setOperationInvokedEvent(self, element: ET.Element, event: OperationInvokedEvent):
|
|
750
|
+
if event is not None:
|
|
751
|
+
child_element = ET.SubElement(element, "OPERATION-INVOKED-EVENT")
|
|
752
|
+
self.setRTEEvent(child_element, event)
|
|
753
|
+
self.setPOperationInAtomicSwcInstanceRef(child_element, "OPERATION-IREF", event.operation_iref)
|
|
754
|
+
|
|
755
|
+
def setSwcModeSwitchEvent(self, element: ET.Element, event: SwcModeSwitchEvent):
|
|
756
|
+
if event is not None:
|
|
757
|
+
child_element = ET.SubElement(element, "SWC-MODE-SWITCH-EVENT")
|
|
758
|
+
self.setRTEEvent(child_element, event)
|
|
759
|
+
self.setChildElementOptionalLiteral(child_element, "ACTIVATION", event.activation)
|
|
760
|
+
irefs = event.getModeIRefs()
|
|
761
|
+
if len(irefs) > 0:
|
|
762
|
+
mode_irefs_tag = ET.SubElement(child_element, "MODE-IREFS")
|
|
763
|
+
for iref in irefs:
|
|
764
|
+
self.setRModeInAtomicSwcInstanceRef(mode_irefs_tag, "MODE-IREF", iref)
|
|
765
|
+
|
|
766
|
+
def setRVariableInAtomicSwcInstanceRef(self, element: ET.Element, iref: RVariableInAtomicSwcInstanceRef):
|
|
767
|
+
if iref is not None:
|
|
768
|
+
child_element = ET.SubElement(element, "DATA-IREF")
|
|
769
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
|
|
770
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-DATA-ELEMENT-REF", iref.target_data_element_ref)
|
|
771
|
+
|
|
772
|
+
def setDataReceivedEvent(self, element: ET.Element, event: DataReceivedEvent):
|
|
773
|
+
if event is not None:
|
|
774
|
+
child_element = ET.SubElement(element, "DATA-RECEIVED-EVENT")
|
|
775
|
+
self.setRTEEvent(child_element, event)
|
|
776
|
+
self.setRVariableInAtomicSwcInstanceRef(child_element, event.data_iref)
|
|
777
|
+
|
|
778
|
+
def setInternalTriggerOccurredEvent(self, element: ET.Element, event: DataReceivedEvent):
|
|
779
|
+
pass
|
|
780
|
+
|
|
781
|
+
def setInitEvent(self, element: ET.Element, event: InitEvent):
|
|
782
|
+
if event is not None:
|
|
783
|
+
child_element = ET.SubElement(element, "INIT-EVENT")
|
|
784
|
+
self.setRTEEvent(child_element, event)
|
|
785
|
+
|
|
786
|
+
def writeRTEEvents(self, element: ET.Element, parent: SwcInternalBehavior):
|
|
787
|
+
events = parent.getRteEvents()
|
|
788
|
+
if len(events) > 0:
|
|
789
|
+
child_element = ET.SubElement(element, "EVENTS")
|
|
790
|
+
|
|
791
|
+
for event in events:
|
|
792
|
+
if isinstance(event, TimingEvent):
|
|
793
|
+
self.setTimingEvent(child_element, event)
|
|
794
|
+
elif isinstance(event, OperationInvokedEvent):
|
|
795
|
+
self.setOperationInvokedEvent(child_element, event)
|
|
796
|
+
elif isinstance(event, SwcModeSwitchEvent):
|
|
797
|
+
self.setSwcModeSwitchEvent(child_element, event)
|
|
798
|
+
elif isinstance(event, DataReceivedEvent):
|
|
799
|
+
self.setDataReceivedEvent(child_element, event)
|
|
800
|
+
elif isinstance(event, InternalTriggerOccurredEvent):
|
|
801
|
+
self.setInternalTriggerOccurredEvent(child_element, event)
|
|
802
|
+
elif isinstance(event, InitEvent):
|
|
803
|
+
self.setInitEvent(child_element, event)
|
|
804
|
+
else:
|
|
805
|
+
raise NotImplementedError("Unsupported Event <%s>" % type(event))
|
|
806
|
+
|
|
807
|
+
def writeExclusiveAreas(self, element: ET.Element, behavior: InternalBehavior):
|
|
808
|
+
areas = behavior.getExclusiveAreas()
|
|
809
|
+
if len(areas) > 0:
|
|
810
|
+
areas_tag = ET.SubElement(element, "EXCLUSIVE-AREAS")
|
|
811
|
+
for area in areas:
|
|
812
|
+
child_element = ET.SubElement(areas_tag, "EXCLUSIVE-AREA")
|
|
813
|
+
self.writeIdentifiable(child_element, area)
|
|
814
|
+
|
|
815
|
+
def writeDataTypeMappingRefs(self, element: ET.Element, behavior: InternalBehavior):
|
|
816
|
+
refs = behavior.getDataTypeMappingRefs()
|
|
817
|
+
if len(refs) > 0:
|
|
818
|
+
refs_tag = ET.SubElement(element, "DATA-TYPE-MAPPING-REFS")
|
|
819
|
+
for ref in refs:
|
|
820
|
+
self.setChildElementOptionalRefType(refs_tag, "DATA-TYPE-MAPPING-REF", ref)
|
|
821
|
+
|
|
822
|
+
def writeInternalBehaviorConstantMemories(self, element: ET.Element, behavior: InternalBehavior):
|
|
823
|
+
memories = behavior.getConstantMemorys()
|
|
824
|
+
if len(memories) > 0:
|
|
825
|
+
child_element = ET.SubElement(element, "CONSTANT-MEMORYS")
|
|
826
|
+
for memory in memories:
|
|
827
|
+
self.writeParameterDataPrototype(child_element, memory)
|
|
828
|
+
|
|
829
|
+
def writeInternalBehavior(self, element: ET.Element, behavior: InternalBehavior):
|
|
830
|
+
self.writeIdentifiable(element, behavior)
|
|
831
|
+
self.writeInternalBehaviorConstantMemories(element, behavior)
|
|
832
|
+
self.writeDataTypeMappingRefs(element, behavior)
|
|
833
|
+
self.writeExclusiveAreas(element, behavior)
|
|
834
|
+
|
|
835
|
+
def writeExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
836
|
+
if entity is not None:
|
|
837
|
+
self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.minimumStartInterval)
|
|
838
|
+
self.setChildElementOptionalRefType(element, "SW-ADDR-METHOD-REF", entity.swAddrMethodRef)
|
|
839
|
+
|
|
840
|
+
def setAutosarVariableRef(self, element: ET.Element, ref: AutosarVariableRef):
|
|
841
|
+
if ref is not None:
|
|
842
|
+
child_element = ET.SubElement(element, "ACCESSED-VARIABLE")
|
|
843
|
+
if ref.autosar_variable_iref is not None:
|
|
844
|
+
child_element = ET.SubElement(child_element, "AUTOSAR-VARIABLE-IREF")
|
|
845
|
+
self.setARObjectAttributes(child_element, ref.autosar_variable_iref)
|
|
846
|
+
self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", ref.autosar_variable_iref.port_prototype_ref)
|
|
847
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", ref.autosar_variable_iref.target_data_prototype_ref)
|
|
848
|
+
if ref.local_variable_ref is not None:
|
|
849
|
+
self.setChildElementOptionalRefType(child_element, "LOCAL-VARIABLE-REF", ref.local_variable_ref)
|
|
850
|
+
|
|
851
|
+
def setVariableAccess(self, element: ET.Element, access: VariableAccess):
|
|
852
|
+
child_element = ET.SubElement(element, "VARIABLE-ACCESS")
|
|
853
|
+
self.writeIdentifiable(child_element, access)
|
|
854
|
+
self.setAutosarVariableRef(child_element, access.accessed_variable_ref)
|
|
855
|
+
|
|
856
|
+
def writeDataReadAccesses(self, element: ET.Element, entity: RunnableEntity):
|
|
857
|
+
#accesses = entity.getDataReadAccesses():
|
|
858
|
+
pass
|
|
859
|
+
|
|
860
|
+
def setAutosarParameterRef(self, element: ET.Element, key: str, parameter_ref: AutosarParameterRef):
|
|
861
|
+
if parameter_ref is not None:
|
|
862
|
+
child_element = ET.SubElement(element, key)
|
|
863
|
+
self.setChildElementOptionalRefType(child_element, "LOCAL-PARAMETER-REF", parameter_ref.local_parameter_ref)
|
|
864
|
+
|
|
865
|
+
def writeParameterAccess(self, element: ET.Element, parameter_access: ParameterAccess):
|
|
866
|
+
child_element = ET.SubElement(element, "PARAMETER-ACCESS")
|
|
867
|
+
self.writeIdentifiable(child_element, parameter_access)
|
|
868
|
+
self.setAutosarParameterRef(child_element, "ACCESSED-PARAMETER", parameter_access.accessed_parameter)
|
|
869
|
+
|
|
870
|
+
def writeParameterAccesses(self, element: ET.Element, entity: RunnableEntity):
|
|
871
|
+
parameter_accesses = entity.getParameterAccesses()
|
|
872
|
+
if len(parameter_accesses) > 0:
|
|
873
|
+
child_element = ET.SubElement(element, "PARAMETER-ACCESSS")
|
|
874
|
+
for parameter_access in parameter_accesses:
|
|
875
|
+
self.writeParameterAccess(child_element, parameter_access)
|
|
876
|
+
|
|
877
|
+
def writeDataReceivePointByArguments(self, element: ET.Element, entity: RunnableEntity):
|
|
878
|
+
accesses = entity.getDataReceivePointByArguments()
|
|
879
|
+
if len(accesses) > 0:
|
|
880
|
+
child_element = ET.SubElement(element, "DATA-RECEIVE-POINT-BY-ARGUMENTS")
|
|
881
|
+
for access in accesses:
|
|
882
|
+
self.setVariableAccess(child_element, access)
|
|
883
|
+
|
|
884
|
+
def writeDataSendPoints(self, element: ET.Element, entity: RunnableEntity):
|
|
885
|
+
points = entity.getDataSendPoints()
|
|
886
|
+
if len(points) > 0:
|
|
887
|
+
child_element = ET.SubElement(element, "DATA-SEND-POINTS")
|
|
888
|
+
for point in points:
|
|
889
|
+
self.setVariableAccess(child_element, point)
|
|
890
|
+
|
|
891
|
+
def writeDataWriteAccesses(self, element: ET.Element, entity: RunnableEntity):
|
|
892
|
+
points = entity.getDataWriteAccesses()
|
|
893
|
+
if len(points) > 0:
|
|
894
|
+
child_element = ET.SubElement(element, "DATA-WRITE-ACCESSS")
|
|
895
|
+
for point in points:
|
|
896
|
+
self.setVariableAccess(child_element, point)
|
|
897
|
+
|
|
898
|
+
def writeReadLocalVariables(self, element: ET.Element, entity: RunnableEntity):
|
|
899
|
+
variables = entity.getReadLocalVariables()
|
|
900
|
+
if len(variables) > 0:
|
|
901
|
+
child_element = ET.SubElement(element, "READ-LOCAL-VARIABLES")
|
|
902
|
+
for access in variables:
|
|
903
|
+
self.setVariableAccess(child_element, access)
|
|
904
|
+
|
|
905
|
+
def writeROperationInAtomicSwcInstanceRef(self, element: ET.Element, key: str, iref: ROperationInAtomicSwcInstanceRef):
|
|
906
|
+
if iref is not None:
|
|
907
|
+
child_element = ET.SubElement(element, key)
|
|
908
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.context_r_port_ref)
|
|
909
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-REQUIRED-OPERATION-REF", iref.target_required_operation_ref)
|
|
910
|
+
|
|
911
|
+
def writeServerCallPoint(self, element: ET.Element, call_point: ServerCallPoint):
|
|
912
|
+
self.writeROperationInAtomicSwcInstanceRef(element, "OPERATION-IREF", call_point.operation_iref)
|
|
913
|
+
self.setChildElementOptionalFloatValue(element, "TIMEOUT", call_point.timeout)
|
|
914
|
+
|
|
915
|
+
def writeSynchronousServerCallPoint(self, element: ET.Element, call_point: SynchronousServerCallPoint):
|
|
916
|
+
child_element = ET.SubElement(element, "SYNCHRONOUS-SERVER-CALL-POINT")
|
|
917
|
+
self.writeIdentifiable(child_element, call_point)
|
|
918
|
+
self.writeServerCallPoint(child_element, call_point)
|
|
919
|
+
|
|
920
|
+
def writeServerCallPoints(self, element: ET.Element, entity: RunnableEntity):
|
|
921
|
+
call_points = entity.getServerCallPoints()
|
|
922
|
+
if len(call_points) > 0:
|
|
923
|
+
child_element = ET.SubElement(element, "SERVER-CALL-POINTS")
|
|
924
|
+
for call_point in call_points:
|
|
925
|
+
if isinstance(call_point, SynchronousServerCallPoint):
|
|
926
|
+
self.writeSynchronousServerCallPoint(child_element, call_point)
|
|
927
|
+
else:
|
|
928
|
+
self._raiseError("Unsupported ServerCallPoint type <%s>" % type(call_point))
|
|
929
|
+
|
|
930
|
+
def writeWrittenLocalVariable(self, element: ET.Element, entity: RunnableEntity):
|
|
931
|
+
variables = entity.getWrittenLocalVariables()
|
|
932
|
+
if len(variables) > 0:
|
|
933
|
+
child_element = ET.SubElement(element, "WRITTEN-LOCAL-VARIABLES")
|
|
934
|
+
for access in variables:
|
|
935
|
+
self.setVariableAccess(child_element, access)
|
|
936
|
+
|
|
937
|
+
def setRModeGroupInAtomicSWCInstanceRef(self, element: ET.Element, iref: RModeGroupInAtomicSWCInstanceRef):
|
|
938
|
+
child_element = ET.SubElement(element, "R-MODE-GROUP-IN-ATOMIC-SWC-INSTANCE-REF")
|
|
939
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-R-PORT-REF", iref.contextRPort)
|
|
940
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-MODE-GROUP-REF", iref.targetModeGroup)
|
|
941
|
+
|
|
942
|
+
def writeModeAccessPoints(self, element: ET.Element, entity: RunnableEntity):
|
|
943
|
+
points = entity.getModeAccessPoints()
|
|
944
|
+
if len(points) > 0:
|
|
945
|
+
mode_access_points_tag = ET.SubElement(element, "MODE-ACCESS-POINTS")
|
|
946
|
+
for point in points:
|
|
947
|
+
child_element = ET.SubElement(mode_access_points_tag, "MODE-ACCESS-POINT")
|
|
948
|
+
if point.modeGroupIRef is not None:
|
|
949
|
+
child_element = ET.SubElement(child_element, "MODE-GROUP-IREF")
|
|
950
|
+
self.setRModeGroupInAtomicSWCInstanceRef(child_element, point.modeGroupIRef)
|
|
951
|
+
|
|
952
|
+
def writeRunnableEntity(self, element: ET.Element, entity: RunnableEntity):
|
|
953
|
+
if entity is not None:
|
|
954
|
+
child_element = ET.SubElement(element, "RUNNABLE-ENTITY")
|
|
955
|
+
self.writeIdentifiable(child_element, entity)
|
|
956
|
+
self.writeExecutableEntity(child_element, entity)
|
|
957
|
+
self.setChildElementOptionalBooleanValue(child_element, "CAN-BE-INVOKED-CONCURRENTLY", entity.can_be_invoked_concurrently)
|
|
958
|
+
self.writeParameterAccesses(child_element, entity)
|
|
959
|
+
self.writeDataReceivePointByArguments(child_element, entity)
|
|
960
|
+
self.writeDataSendPoints(child_element, entity)
|
|
961
|
+
self.writeDataWriteAccesses(child_element, entity)
|
|
962
|
+
self.writeModeAccessPoints(child_element, entity)
|
|
963
|
+
self.writeReadLocalVariables(child_element, entity)
|
|
964
|
+
self.writeServerCallPoints(child_element, entity)
|
|
965
|
+
self.setChildElementOptionalLiteral(child_element, "SYMBOL", entity.symbol)
|
|
966
|
+
self.writeWrittenLocalVariable(child_element, entity)
|
|
967
|
+
|
|
968
|
+
def writeSwcInternalBehaviorRunnableEntities(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
969
|
+
entities = behavior.getRunnableEntities()
|
|
970
|
+
if len(entities) > 0:
|
|
971
|
+
runnables_tag = ET.SubElement(element, "RUNNABLES")
|
|
972
|
+
for entity in entities:
|
|
973
|
+
if isinstance(entity, RunnableEntity):
|
|
974
|
+
self.writeRunnableEntity(runnables_tag, entity)
|
|
975
|
+
else:
|
|
976
|
+
raise NotImplementedError("Unsupported RunnableEntity <%s>" % type(entity))
|
|
977
|
+
|
|
978
|
+
def writeExplicitInterRunnableVariables(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
979
|
+
prototypes = behavior.getExplicitInterRunnableVariables()
|
|
980
|
+
if len(prototypes) > 0:
|
|
981
|
+
child_element = ET.SubElement(element, "EXPLICIT-INTER-RUNNABLE-VARIABLES")
|
|
982
|
+
for prototype in prototypes:
|
|
983
|
+
if isinstance(prototype, VariableDataPrototype):
|
|
984
|
+
self.writeVariableDataPrototype(child_element, prototype)
|
|
985
|
+
else:
|
|
986
|
+
self._raiseError("Unsupported ExplicitInterRunnableVariables <%s>" % type(prototype))
|
|
987
|
+
|
|
988
|
+
def writePerInstanceMemories(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
989
|
+
memories = behavior.getPerInstanceMemories()
|
|
990
|
+
if len(memories) > 0:
|
|
991
|
+
memories_tag = ET.SubElement(element, "PER-INSTANCE-MEMORYS")
|
|
992
|
+
for memory in memories:
|
|
993
|
+
child_element = ET.SubElement(memories_tag, "PER-INSTANCE-MEMORY")
|
|
994
|
+
self.writeIdentifiable(child_element, memory)
|
|
995
|
+
self.setChildElementOptionalLiteral(child_element, "INIT-VALUE", memory.init_value)
|
|
996
|
+
self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", memory.sw_data_def_props)
|
|
997
|
+
self.setChildElementOptionalLiteral(child_element, "TYPE", memory.type)
|
|
998
|
+
self.setChildElementOptionalLiteral (child_element, "TYPE-DEFINITION", memory.type_definition)
|
|
999
|
+
|
|
1000
|
+
def writeParameterDataPrototype(self, element: ET.Element, prototype: ParameterDataPrototype):
|
|
1001
|
+
child_element = ET.SubElement(element, "PARAMETER-DATA-PROTOTYPE")
|
|
1002
|
+
self.writeIdentifiable(child_element, prototype)
|
|
1003
|
+
self.writeAutosarDataPrototype(child_element, prototype)
|
|
1004
|
+
self.setInitValue(child_element, prototype.init_value)
|
|
1005
|
+
|
|
1006
|
+
def writeParameterDataPrototypes(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
1007
|
+
prototypes = behavior.getPerInstanceParameters()
|
|
1008
|
+
if len(prototypes) > 0:
|
|
1009
|
+
child_element = ET.SubElement(element, "PER-INSTANCE-PARAMETERS")
|
|
1010
|
+
for prototype in prototypes:
|
|
1011
|
+
self.writeParameterDataPrototype(child_element, prototype)
|
|
1012
|
+
|
|
1013
|
+
def writePortDefinedArgumentValues(self, element: ET.Element, option: PortAPIOption) :
|
|
1014
|
+
argument_values = option.getPortArgValues()
|
|
1015
|
+
if len(argument_values) > 0:
|
|
1016
|
+
child_element = ET.SubElement(element, "PORT-ARG-VALUES")
|
|
1017
|
+
for argument_value in argument_values:
|
|
1018
|
+
child_element = ET.SubElement(child_element, "PORT-DEFINED-ARGUMENT-VALUE")
|
|
1019
|
+
if argument_value.value is not None:
|
|
1020
|
+
value_tag = ET.SubElement(child_element, "VALUE")
|
|
1021
|
+
self.setValueSpecification(value_tag, argument_value.value)
|
|
1022
|
+
self.setChildElementOptionalRefType(child_element, "VALUE-TYPE-TREF", argument_value.value_type)
|
|
1023
|
+
|
|
1024
|
+
def writePortAPIOptions(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
1025
|
+
options = behavior.getPortAPIOptions()
|
|
1026
|
+
if len(options) > 0:
|
|
1027
|
+
port_api_options_tag = ET.SubElement(element, "PORT-API-OPTIONS")
|
|
1028
|
+
for option in options:
|
|
1029
|
+
child_element = ET.SubElement(port_api_options_tag, "PORT-API-OPTION")
|
|
1030
|
+
self.setChildElementOptionalBooleanValue(child_element, "ENABLE-TAKE-ADDRESS", option.enable_take_address)
|
|
1031
|
+
self.setChildElementOptionalBooleanValue(child_element, "INDIRECT-API", option.indirect_api)
|
|
1032
|
+
self.writePortDefinedArgumentValues(child_element, option)
|
|
1033
|
+
self.setChildElementOptionalRefType(child_element, "PORT-REF", option.port_ref)
|
|
1034
|
+
|
|
1035
|
+
def writeServiceDependency(self, element: ET.Element, dependency: ServiceDependency):
|
|
1036
|
+
self.writeIdentifiable(element, dependency)
|
|
1037
|
+
|
|
1038
|
+
def writeRoleBasedDataAssignment(self, element: ET.Element, assignment: RoleBasedDataAssignment):
|
|
1039
|
+
child_element = ET.SubElement(element, "ROLE-BASED-DATA-ASSIGNMENT")
|
|
1040
|
+
self.setChildElementOptionalLiteral(child_element, "ROLE", assignment.role)
|
|
1041
|
+
self.setAutosarParameterRef(child_element, "USED-PARAMETER-ELEMENT", assignment.used_parameter_element)
|
|
1042
|
+
self.setChildElementOptionalRefType(child_element, "USED-PIM-REF", assignment.used_pim_ref)
|
|
1043
|
+
|
|
1044
|
+
def writeRoleBasedPortAssignment(self, element: ET.Element, assignment: RoleBasedPortAssignment):
|
|
1045
|
+
child_element = ET.SubElement(element, "ROLE-BASED-PORT-ASSIGNMENT")
|
|
1046
|
+
self.setChildElementOptionalRefType(child_element, "PORT-PROTOTYPE-REF", assignment.port_prototype_ref)
|
|
1047
|
+
self.setChildElementOptionalLiteral(child_element, "ROLE", assignment.role)
|
|
1048
|
+
|
|
1049
|
+
def writeSwcServiceDependencyAssignedData(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
1050
|
+
assigned_data = dependency.getAssignedData()
|
|
1051
|
+
if len(assigned_data) > 0:
|
|
1052
|
+
child_element = ET.SubElement(element, "ASSIGNED-DATAS")
|
|
1053
|
+
for data in assigned_data:
|
|
1054
|
+
if isinstance(data, RoleBasedDataAssignment):
|
|
1055
|
+
self.writeRoleBasedDataAssignment(child_element, data)
|
|
1056
|
+
else:
|
|
1057
|
+
self._raiseError("Unsupported Assigned Data <%s>" % type(data))
|
|
1058
|
+
|
|
1059
|
+
def writeSwcServiceDependencyAssignedPorts(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
1060
|
+
assigned_data = dependency.getAssignedPorts()
|
|
1061
|
+
if len(assigned_data) > 0:
|
|
1062
|
+
child_element = ET.SubElement(element, "ASSIGNED-PORTS")
|
|
1063
|
+
for data in assigned_data:
|
|
1064
|
+
if isinstance(data, RoleBasedPortAssignment):
|
|
1065
|
+
self.writeRoleBasedPortAssignment(child_element, data)
|
|
1066
|
+
else:
|
|
1067
|
+
self._raiseError("Unsupported Assigned Data <%s>" % type(data))
|
|
1068
|
+
|
|
1069
|
+
def writeNvBlockNeeds(self, element: ET.Element, needs: NvBlockNeeds):
|
|
1070
|
+
child_element = ET.SubElement(element, "NV-BLOCK-NEEDS")
|
|
1071
|
+
self.logger.debug("writeNvBlockNeeds %s" % needs.short_name)
|
|
1072
|
+
self.writeIdentifiable(child_element, needs)
|
|
1073
|
+
self.setChildElementOptionalBooleanValue(child_element, "CALC-RAM-BLOCK-CRC", needs.calc_ram_block_crc)
|
|
1074
|
+
self.setChildElementOptionalBooleanValue(child_element, "CHECK-STATIC-BLOCK-ID", needs.check_static_block_id)
|
|
1075
|
+
self.setChildElementOptionalNumericalValue(child_element, "N-DATA-SETS", needs.n_data_sets)
|
|
1076
|
+
self.setChildElementOptionalNumericalValue(child_element, "N-ROM-BLOCKS", needs.n_rom_blocks)
|
|
1077
|
+
self.setChildElementOptionalBooleanValue(child_element, "READONLY", needs.readonly)
|
|
1078
|
+
self.setChildElementOptionalLiteral(child_element, "RELIABILITY", needs.reliability)
|
|
1079
|
+
self.setChildElementOptionalBooleanValue(child_element, "RESISTANT-TO-CHANGED-SW", needs.resistant_to_changed_sw)
|
|
1080
|
+
self.setChildElementOptionalBooleanValue(child_element, "RESTORE-AT-START", needs.restore_at_start)
|
|
1081
|
+
self.setChildElementOptionalBooleanValue(child_element, "STORE-AT-SHUTDOWN", needs.store_at_shutdown)
|
|
1082
|
+
self.setChildElementOptionalBooleanValue(child_element, "WRITE-ONLY-ONCE", needs.write_only_once)
|
|
1083
|
+
self.setChildElementOptionalBooleanValue(child_element, "WRITE-VERIFICATION", needs.write_verification)
|
|
1084
|
+
self.setChildElementOptionalLiteral(child_element, "WRITING-PRIORITY", needs.writing_priority)
|
|
1085
|
+
|
|
1086
|
+
def writeSwcServiceDependencyServiceNeeds(self, element: ET.Element, parent: SwcServiceDependency):
|
|
1087
|
+
needs = parent.getServiceNeeds()
|
|
1088
|
+
if len(needs) > 0:
|
|
1089
|
+
child_element = ET.SubElement(element, "SERVICE-NEEDS")
|
|
1090
|
+
for need in needs:
|
|
1091
|
+
if isinstance(need, NvBlockNeeds):
|
|
1092
|
+
self.writeNvBlockNeeds(child_element, need)
|
|
1093
|
+
else:
|
|
1094
|
+
self._raiseError("Unsupported service needs <%s>" % type(need))
|
|
1095
|
+
|
|
1096
|
+
def writeSwcServiceDependency(self, element: ET.Element, dependency: SwcServiceDependency):
|
|
1097
|
+
child_element = ET.SubElement(element, "SWC-SERVICE-DEPENDENCY")
|
|
1098
|
+
self.writeServiceDependency(child_element, dependency)
|
|
1099
|
+
self.writeSwcServiceDependencyAssignedData(child_element, dependency)
|
|
1100
|
+
self.writeSwcServiceDependencyAssignedPorts(child_element, dependency)
|
|
1101
|
+
self.writeSwcServiceDependencyServiceNeeds(child_element, dependency)
|
|
1102
|
+
|
|
1103
|
+
def writeSwcInternalBehaviorServiceDependencies(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
1104
|
+
dependencies = behavior.getSwcServiceDependencies()
|
|
1105
|
+
if len(dependencies) > 0:
|
|
1106
|
+
child_element = ET.SubElement(element, "SERVICE-DEPENDENCYS")
|
|
1107
|
+
for dependency in dependencies:
|
|
1108
|
+
if isinstance(dependency, SwcServiceDependency):
|
|
1109
|
+
self.writeSwcServiceDependency(child_element, dependency)
|
|
1110
|
+
else:
|
|
1111
|
+
self._raiseError("Unsupported ServiceDependency <%s>" % type(dependency))
|
|
1112
|
+
|
|
1113
|
+
def setIncludedDataTypeSets(self, element: ET.Element, sets: List[IncludedDataTypeSet]):
|
|
1114
|
+
if len(sets) > 0:
|
|
1115
|
+
include_data_type_sets_tag = ET.SubElement(element, "INCLUDED-DATA-TYPE-SETS")
|
|
1116
|
+
for set in sets:
|
|
1117
|
+
child_element = ET.SubElement(include_data_type_sets_tag, "INCLUDED-DATA-TYPE-SET")
|
|
1118
|
+
self.setARObjectAttributes(child_element, set)
|
|
1119
|
+
type_refs = set.getDataTypeRefs()
|
|
1120
|
+
if len(type_refs) > 0:
|
|
1121
|
+
data_type_refs_tag = ET.SubElement(child_element, "DATA-TYPE-REFS")
|
|
1122
|
+
for type_ref in type_refs:
|
|
1123
|
+
self.setChildElementOptionalRefType(data_type_refs_tag, "DATA-TYPE-REF", type_ref)
|
|
1124
|
+
|
|
1125
|
+
def writeSwcInternalBehavior(self, element: ET.Element, behavior: SwcInternalBehavior):
|
|
1126
|
+
self.logger.debug("writeSwInternalBehavior %s" % behavior.short_name)
|
|
1127
|
+
|
|
1128
|
+
child_element = ET.SubElement(element, "SWC-INTERNAL-BEHAVIOR")
|
|
1129
|
+
self.writeInternalBehavior(child_element, behavior)
|
|
1130
|
+
self.writeRTEEvents(child_element, behavior)
|
|
1131
|
+
self.writeExplicitInterRunnableVariables(child_element, behavior)
|
|
1132
|
+
self.setChildElementOptionalLiteral(child_element, "HANDLE-TERMINATION-AND-RESTART", behavior.handle_termination_and_restart)
|
|
1133
|
+
self.setIncludedDataTypeSets(child_element, behavior.getIncludedDataTypeSets())
|
|
1134
|
+
self.writePerInstanceMemories(child_element, behavior)
|
|
1135
|
+
self.writeParameterDataPrototypes(child_element, behavior)
|
|
1136
|
+
self.writePortAPIOptions(child_element, behavior)
|
|
1137
|
+
self.writeSwcInternalBehaviorRunnableEntities(child_element, behavior)
|
|
1138
|
+
self.writeSwcInternalBehaviorServiceDependencies(child_element, behavior)
|
|
1139
|
+
self.setChildElementOptionalBooleanValue(child_element, "SUPPORTS-MULTIPLE-INSTANTIATION", behavior.supports_multiple_instantiation)
|
|
1140
|
+
|
|
1141
|
+
def writeAtomicSwComponentTypeInternalBehaviors(self, element: ET.Element, behavior: InternalBehavior):
|
|
1142
|
+
if behavior is not None:
|
|
1143
|
+
behaviors_tag = ET.SubElement(element, "INTERNAL-BEHAVIORS")
|
|
1144
|
+
if isinstance(behavior, SwcInternalBehavior):
|
|
1145
|
+
self.writeSwcInternalBehavior(behaviors_tag, behavior)
|
|
1146
|
+
else:
|
|
1147
|
+
self._raiseError("Unsupported Internal Behaviors <%s>" % type(behavior))
|
|
1148
|
+
|
|
1149
|
+
def writeAtomicSwComponentType(self, element: ET.Element, sw_component: AtomicSwComponentType):
|
|
1150
|
+
self.writeSwComponentType(element, sw_component)
|
|
1151
|
+
self.writeAtomicSwComponentTypeInternalBehaviors(element, sw_component.internal_behavior)
|
|
1152
|
+
|
|
1153
|
+
def writeComplexDeviceDriverSwComponentType(self, element: ET.Element, sw_component: ComplexDeviceDriverSwComponentType):
|
|
1154
|
+
self.logger.debug("writeComplexDeviceDriverSwComponentType %s" % sw_component.short_name)
|
|
1155
|
+
child_element = ET.SubElement(element, "COMPLEX-DEVICE-DRIVER-SW-COMPONENT-TYPE")
|
|
1156
|
+
self.writeAtomicSwComponentType(child_element, sw_component)
|
|
1157
|
+
|
|
1158
|
+
def writeArtifactDescriptors(self, element: ET.Element, code_desc: Code):
|
|
1159
|
+
artifact_descriptors = code_desc.getArtifactDescriptors()
|
|
1160
|
+
if len(artifact_descriptors) > 0:
|
|
1161
|
+
artifact_descs_tag = ET.SubElement(element, "ARTIFACT-DESCRIPTORS")
|
|
1162
|
+
for artifact_desc in artifact_descriptors:
|
|
1163
|
+
artifact_desc_tag = ET.SubElement(artifact_descs_tag, "AUTOSAR-ENGINEERING-OBJECT")
|
|
1164
|
+
self.logger.debug("writeArtifactDescriptor %s", artifact_desc.short_label)
|
|
1165
|
+
self.setARObjectAttributes(artifact_desc_tag, artifact_desc)
|
|
1166
|
+
self.setChildElementOptionalLiteral(artifact_desc_tag, "SHORT-LABEL", artifact_desc.short_label)
|
|
1167
|
+
self.setChildElementOptionalLiteral(artifact_desc_tag, "CATEGORY", artifact_desc.category)
|
|
1168
|
+
|
|
1169
|
+
def setCode(self, element: ET.SubElement, code_desc: Code):
|
|
1170
|
+
self.logger.debug("setCode %s" % code_desc.short_name)
|
|
1171
|
+
child_element = ET.SubElement(element, "CODE")
|
|
1172
|
+
self.writeIdentifiable(child_element, code_desc)
|
|
1173
|
+
self.writeArtifactDescriptor(child_element, code_desc)
|
|
1174
|
+
|
|
1175
|
+
def writeCodeDescriptors(self, element: ET.Element, impl: Implementation):
|
|
1176
|
+
descs = impl.getCodeDescriptors()
|
|
1177
|
+
if len(descs) > 0:
|
|
1178
|
+
child_element = ET.SubElement(element, "CODE-DESCRIPTORS")
|
|
1179
|
+
for desc in descs:
|
|
1180
|
+
if isinstance(desc, Code):
|
|
1181
|
+
self.setCode(child_element, desc)
|
|
1182
|
+
else:
|
|
1183
|
+
self._raiseError("Unsupported Code Descriptor <%s>" % type(desc))
|
|
1184
|
+
|
|
1185
|
+
def setMemorySectionOptions(self, element: ET.Element, options: List[ARLiteral]):
|
|
1186
|
+
if len(options) > 0:
|
|
1187
|
+
child_element = ET.SubElement(element, "OPTIONS")
|
|
1188
|
+
for option in options:
|
|
1189
|
+
self.setChildElementOptionalLiteral(child_element, "OPTION", option)
|
|
1190
|
+
|
|
1191
|
+
def writeMemorySections(self, element: ET.Element, consumption: ResourceConsumption):
|
|
1192
|
+
memory_sections = consumption.getMemorySections()
|
|
1193
|
+
if len(memory_sections) > 0:
|
|
1194
|
+
sections_tag = ET.SubElement(element, "MEMORY-SECTIONS")
|
|
1195
|
+
for memory_section in memory_sections:
|
|
1196
|
+
child_element = ET.SubElement(sections_tag, "MEMORY-SECTION")
|
|
1197
|
+
self.writeIdentifiable(child_element, memory_section)
|
|
1198
|
+
self.setChildElementOptionalLiteral(child_element, "ALIGNMENT", memory_section.alignment)
|
|
1199
|
+
self.setMemorySectionOptions(child_element, memory_section.getOptions())
|
|
1200
|
+
self.setChildElementOptionalNumericalValue(child_element, "SIZE", memory_section.size)
|
|
1201
|
+
self.setChildElementOptionalRefType(child_element, "SW-ADDRMETHOD-REF", memory_section.swAddrMethodRef)
|
|
1202
|
+
self.setChildElementOptionalLiteral(child_element, "SYMBOL", memory_section.symbol)
|
|
1203
|
+
self.logger.debug("writeMemorySections %s" % memory_section.short_name)
|
|
1204
|
+
|
|
1205
|
+
def setResourceConsumption(self, element: ET.Element, consumption: ResourceConsumption):
|
|
1206
|
+
if consumption is not None:
|
|
1207
|
+
child_element = ET.SubElement(element, "RESOURCE-CONSUMPTION")
|
|
1208
|
+
self.writeIdentifiable(child_element, consumption)
|
|
1209
|
+
self.writeMemorySections(child_element, consumption)
|
|
1210
|
+
|
|
1211
|
+
def writeImplementation(self, element: ET.Element, impl: Implementation):
|
|
1212
|
+
self.writeIdentifiable(element, impl)
|
|
1213
|
+
self.writeCodeDescriptors(element, impl)
|
|
1214
|
+
self.setChildElementOptionalLiteral(element, "PROGRAMMING-LANGUAGE", impl.programming_language)
|
|
1215
|
+
self.setResourceConsumption(element, impl.getResourceConsumption())
|
|
1216
|
+
self.setChildElementOptionalLiteral(element, "SW-VERSION", impl.sw_version)
|
|
1217
|
+
self.setChildElementOptionalRefType(element, "SWC-BSW-MAPPING-REF", impl.swc_bsw_mapping_ref)
|
|
1218
|
+
self.setChildElementOptionalLiteral(element, "USED-CODE-GENERATOR", impl.used_code_generator)
|
|
1219
|
+
self.setChildElementOptionalNumericalValue(element, "VENDOR-ID", impl.vendor_id)
|
|
1220
|
+
|
|
1221
|
+
def writeSwcImplementation(self, element: ET.Element, impl: SwcImplementation):
|
|
1222
|
+
self.logger.debug("writeSwcImplementation %s" % impl.short_name)
|
|
1223
|
+
child_element = ET.SubElement(element, "SWC-IMPLEMENTATION")
|
|
1224
|
+
self.writeImplementation(child_element, impl)
|
|
1225
|
+
self.setChildElementOptionalRefType(child_element, "BEHAVIOR-REF", impl.behavior_ref)
|
|
1226
|
+
|
|
1227
|
+
def writeEndToEndDescriptionDataId(self, element: ET.Element, parent: EndToEndDescription):
|
|
1228
|
+
data_ids = parent.getDataIds()
|
|
1229
|
+
if len(data_ids) > 0:
|
|
1230
|
+
child_element = ET.SubElement(element, "DATA-IDS")
|
|
1231
|
+
for data_id in data_ids:
|
|
1232
|
+
self.setChildElementOptionalNumericalValue(child_element, "DATA-ID", data_id)
|
|
1233
|
+
|
|
1234
|
+
def setEndToEndDescription(self, element: ET.Element, key: str, desc: EndToEndDescription):
|
|
1235
|
+
if desc is not None:
|
|
1236
|
+
child_element = ET.SubElement(element, key)
|
|
1237
|
+
self.setChildElementOptionalLiteral(child_element, "CATEGORY", desc.category)
|
|
1238
|
+
self.writeEndToEndDescriptionDataId(child_element, desc)
|
|
1239
|
+
self.setChildElementOptionalNumericalValue(child_element, "DATA-ID-MODE", desc.dataIdMode)
|
|
1240
|
+
self.setChildElementOptionalNumericalValue(child_element, "MAX-DELTA-COUNTER-INIT", desc.maxDeltaCounterInit)
|
|
1241
|
+
self.setChildElementOptionalNumericalValue(child_element, "CRC-OFFSET", desc.crcOffset)
|
|
1242
|
+
self.setChildElementOptionalNumericalValue(child_element, "COUNTER-OFFSET", desc.counterOffset)
|
|
1243
|
+
|
|
1244
|
+
def setVariableDataPrototypeInSystemInstanceRef(self, element: ET.Element, key: str, iref: VariableDataPrototypeInSystemInstanceRef):
|
|
1245
|
+
if iref is not None:
|
|
1246
|
+
child_element = ET.SubElement(element, key)
|
|
1247
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPONENT-REF", iref.context_component_refs)
|
|
1248
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-COMPOSITION-REF", iref.context_composition_ref)
|
|
1249
|
+
self.setChildElementOptionalRefType(child_element, "CONTEXT-PORT-REF", iref.context_port_ref)
|
|
1250
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-DATA-PROTOTYPE-REF", iref.target_data_prototype_ref)
|
|
1251
|
+
|
|
1252
|
+
def setEndToEndProtectionVariablePrototype(self, element: ET.Element, key: str, prototype: EndToEndProtectionVariablePrototype):
|
|
1253
|
+
if prototype is not None:
|
|
1254
|
+
child_element = ET.SubElement(element, key)
|
|
1255
|
+
irefs = prototype.getReceiverIrefs()
|
|
1256
|
+
if len(irefs) > 0:
|
|
1257
|
+
child_element = ET.SubElement(child_element, "RECEIVER-IREFS")
|
|
1258
|
+
for iref in irefs:
|
|
1259
|
+
self.setVariableDataPrototypeInSystemInstanceRef(child_element, "RECEIVER-IREF", iref)
|
|
1260
|
+
self.setVariableDataPrototypeInSystemInstanceRef(child_element, "SENDER-IREF", prototype.senderIRef)
|
|
1261
|
+
|
|
1262
|
+
def writeEndToEndProtectionVariablePrototypes(self, element: ET.Element, parent: EndToEndProtection):
|
|
1263
|
+
prototypes = parent.getEndToEndProtectionVariablePrototypes()
|
|
1264
|
+
if len(prototypes) > 0:
|
|
1265
|
+
child_element = ET.SubElement(element, "END-TO-END-PROTECTION-VARIABLE-PROTOTYPES")
|
|
1266
|
+
for prototype in prototypes:
|
|
1267
|
+
if isinstance(prototype, EndToEndProtectionVariablePrototype):
|
|
1268
|
+
self.setEndToEndProtectionVariablePrototype(child_element, "END-TO-END-PROTECTION-VARIABLE-PROTOTYPE", prototype)
|
|
1269
|
+
else:
|
|
1270
|
+
self._raiseError("Unsupported End To End Protection Variable Prototype <%s>" % type(prototype))
|
|
1271
|
+
|
|
1272
|
+
def setEndToEndProtection(self, element: ET.Element, protection: EndToEndProtection):
|
|
1273
|
+
if protection is not None:
|
|
1274
|
+
child_element = ET.SubElement(element, "END-TO-END-PROTECTION")
|
|
1275
|
+
self.writeIdentifiable(child_element, protection)
|
|
1276
|
+
self.setEndToEndDescription(child_element, "END-TO-END-PROFILE", protection.endToEndProfile)
|
|
1277
|
+
self.writeEndToEndProtectionVariablePrototypes(child_element, protection)
|
|
1278
|
+
|
|
1279
|
+
def writeEndToEndProtections(self, element: ET.Element, protection_set: EndToEndProtectionSet):
|
|
1280
|
+
protections = protection_set.getEndToEndProtections()
|
|
1281
|
+
if len(protections) > 0:
|
|
1282
|
+
child_element = ET.SubElement(element, "END-TO-END-PROTECTIONS")
|
|
1283
|
+
for protection in protections:
|
|
1284
|
+
if isinstance(protection, EndToEndProtection):
|
|
1285
|
+
self.setEndToEndProtection(child_element, protection)
|
|
1286
|
+
|
|
1287
|
+
def writeEndToEndProtectionSet(self, element: ET.Element, protection_set: EndToEndProtectionSet):
|
|
1288
|
+
self.logger.debug("writeEndToEndProtectionSet %s" % protection_set.short_name)
|
|
1289
|
+
child_element = ET.SubElement(element, "END-TO-END-PROTECTION-SET")
|
|
1290
|
+
self.writeIdentifiable(child_element, protection_set)
|
|
1291
|
+
self.writeEndToEndProtections(child_element, protection_set)
|
|
1292
|
+
|
|
1293
|
+
def writeAutosarDataPrototype(self, element: ET.Element, prototype: AutosarDataPrototype):
|
|
1294
|
+
self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
|
|
1295
|
+
|
|
1296
|
+
def writeVariableDataPrototype(self, element: ET.Element, prototype: VariableDataPrototype):
|
|
1297
|
+
self.logger.debug("writeVariableDataPrototype %s" % prototype.short_name)
|
|
1298
|
+
child_element = ET.SubElement(element, "VARIABLE-DATA-PROTOTYPE")
|
|
1299
|
+
self.writeIdentifiable(child_element, prototype)
|
|
1300
|
+
self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.sw_data_def_props)
|
|
1301
|
+
self.writeAutosarDataPrototype(child_element, prototype)
|
|
1302
|
+
self.setInitValue(child_element, prototype.init_value)
|
|
1303
|
+
|
|
1304
|
+
def writeDataElements(self, element: ET.Element, sr_interface: SenderReceiverInterface):
|
|
1305
|
+
data_elements = sr_interface.getDataElements()
|
|
1306
|
+
if len(data_elements) > 0:
|
|
1307
|
+
data_elements_tag = ET.SubElement(element, "DATA-ELEMENTS")
|
|
1308
|
+
for data_element in data_elements:
|
|
1309
|
+
if isinstance(data_element, VariableDataPrototype):
|
|
1310
|
+
self.writeVariableDataPrototype(data_elements_tag, data_element)
|
|
1311
|
+
else:
|
|
1312
|
+
self._raiseError("Unsupported Data Element <%s>" % type(data_element))
|
|
1313
|
+
|
|
1314
|
+
def writeSenderReceiverInterface(self, element: ET.Element, sr_interface: SenderReceiverInterface):
|
|
1315
|
+
self.logger.debug("writeSenderReceiverInterface %s" % sr_interface.short_name)
|
|
1316
|
+
child_element = ET.SubElement(element, "SENDER-RECEIVER-INTERFACE")
|
|
1317
|
+
self.writeIdentifiable(child_element, sr_interface)
|
|
1318
|
+
self.setChildElementOptionalBooleanValue(child_element, "IS-SERVICE", sr_interface.is_service)
|
|
1319
|
+
self.writeDataElements(child_element, sr_interface)
|
|
1320
|
+
|
|
1321
|
+
def writerBswModuleDescriptionImplementedEntry(self, element: ET.Element, desc: BswModuleDescription):
|
|
1322
|
+
entries = desc.getImplementedEntries()
|
|
1323
|
+
if len(entries) > 0:
|
|
1324
|
+
entries_tag = ET.SubElement(element, "PROVIDED-ENTRYS")
|
|
1325
|
+
for entry in entries:
|
|
1326
|
+
entry_tag = ET.SubElement(entries_tag, "BSW-MODULE-ENTRY-REF-CONDITIONAL")
|
|
1327
|
+
self.setChildElementOptionalRefType(entry_tag, "BSW-MODULE-ENTRY-REF", entry)
|
|
1328
|
+
|
|
1329
|
+
def setModeDeclarationGroupPrototype(self, element: ET.Element, prototype: ModeDeclarationGroupPrototype):
|
|
1330
|
+
self.writeIdentifiable(element, prototype)
|
|
1331
|
+
self.setChildElementOptionalRefType(element, "TYPE-TREF", prototype.type_tref)
|
|
1332
|
+
|
|
1333
|
+
def writeProvidedModeGroup(self, element: ET.Element, parent: BswModuleDescription):
|
|
1334
|
+
mode_groups = parent.getProvidedModeGroups()
|
|
1335
|
+
if len(mode_groups) > 0:
|
|
1336
|
+
mode_groups_tag = ET.SubElement(element, "PROVIDED-MODE-GROUPS")
|
|
1337
|
+
for mode_group in mode_groups:
|
|
1338
|
+
child_element = ET.SubElement(mode_groups_tag, "MODE-DECLARATION-GROUP-PROTOTYPE")
|
|
1339
|
+
self.setModeDeclarationGroupPrototype(child_element, mode_group)
|
|
1340
|
+
|
|
1341
|
+
def writeCanEnterExclusiveAreaRefs(self, element: ET.Element, entity: ExecutableEntity):
|
|
1342
|
+
refs = entity.getCanEnterExclusiveAreaRefs()
|
|
1343
|
+
if len(refs) > 0:
|
|
1344
|
+
child_element = ET.SubElement(element, "CAN-ENTER-EXCLUSIVE-AREA-REFS")
|
|
1345
|
+
for ref in refs:
|
|
1346
|
+
self.setChildElementOptionalRefType(child_element, "CAN-ENTER-EXCLUSIVE-AREA-REF", ref)
|
|
1347
|
+
|
|
1348
|
+
def setExecutableEntity(self, element: ET.Element, entity: ExecutableEntity):
|
|
1349
|
+
self.writeIdentifiable(element, entity)
|
|
1350
|
+
self.writeCanEnterExclusiveAreaRefs(element, entity)
|
|
1351
|
+
self.setChildElementOptionalFloatValue(element, "MINIMUM-START-INTERVAL", entity.minimum_start_interval)
|
|
1352
|
+
|
|
1353
|
+
def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
|
|
1354
|
+
mode_group_refs = entity.getManagedModeGroupRefs()
|
|
1355
|
+
if len(mode_group_refs) > 0:
|
|
1356
|
+
mode_groups_tag = ET.SubElement(element, "MANAGED-MODE-GROUPS")
|
|
1357
|
+
for mode_group_ref in mode_group_refs:
|
|
1358
|
+
child_element = ET.SubElement(mode_groups_tag, "MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL")
|
|
1359
|
+
self.setChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF", mode_group_ref)
|
|
1360
|
+
|
|
1361
|
+
def setBswModuleEntity(self, element: ET.Element, entity: BswModuleEntity):
|
|
1362
|
+
self.setExecutableEntity(element, entity)
|
|
1363
|
+
self.setChildElementOptionalRefType(element, "IMPLEMENTED-ENTRY-REF", entity.implemented_entry_ref)
|
|
1364
|
+
self.writeBswModuleEntityManagedModeGroup(element, entity)
|
|
1365
|
+
|
|
1366
|
+
def setBswCalledEntity(self, element: ET.Element, entity: BswCalledEntity):
|
|
1367
|
+
self.logger.debug("setBswCalledEntity %s" % entity.short_name)
|
|
1368
|
+
child_element = ET.SubElement(element, "BSW-CALLED-ENTITY")
|
|
1369
|
+
self.setBswModuleEntity(child_element, entity)
|
|
1370
|
+
|
|
1371
|
+
def setBswSchedulableEntity(self, element: ET.Element, entity: BswSchedulableEntity):
|
|
1372
|
+
self.logger.debug("setBswCalledEntity %s" % entity.short_name)
|
|
1373
|
+
child_element = ET.SubElement(element, "BSW-SCHEDULABLE-ENTITY")
|
|
1374
|
+
self.setBswModuleEntity(child_element, entity)
|
|
1375
|
+
|
|
1376
|
+
def writeBswInternalBehaviorBswModuleEntities(self, element: ET.Element, parent: BswInternalBehavior):
|
|
1377
|
+
entities = parent.getBswModuleEntities()
|
|
1378
|
+
if len(entities) > 0:
|
|
1379
|
+
child_element = ET.SubElement(element, "ENTITYS")
|
|
1380
|
+
for entity in entities:
|
|
1381
|
+
if isinstance(entity, BswCalledEntity):
|
|
1382
|
+
self.setBswCalledEntity(child_element, entity)
|
|
1383
|
+
elif isinstance(entity, BswSchedulableEntity):
|
|
1384
|
+
self.setBswSchedulableEntity(child_element, entity)
|
|
1385
|
+
else:
|
|
1386
|
+
self._raiseError("Unsupported BswModuleEntity <%s>" % type(entity))
|
|
1387
|
+
|
|
1388
|
+
def setBswEvent(self, element: ET.Element, event: BswEvent):
|
|
1389
|
+
self.writeIdentifiable(element, event)
|
|
1390
|
+
self.setChildElementOptionalRefType(element, "STARTS-ON-EVENT-REF", event.startsOnEventRef)
|
|
1391
|
+
|
|
1392
|
+
def setBswScheduleEvent(self, element: ET.Element, event: BswScheduleEvent):
|
|
1393
|
+
self.setBswEvent(element, event)
|
|
1394
|
+
|
|
1395
|
+
def setBswTimingEvent(self, element: ET.Element, event: BswTimingEvent):
|
|
1396
|
+
self.logger.debug("setBswTimingEvent %s" % event.short_name)
|
|
1397
|
+
child_element = ET.SubElement(element, "BSW-TIMING-EVENT")
|
|
1398
|
+
self.setBswScheduleEvent(child_element, event)
|
|
1399
|
+
self.setChildElementOptionalFloatValue(child_element, "PERIOD", event.period)
|
|
1400
|
+
|
|
1401
|
+
def writeBswInternalBehaviorBswEvents(self, element: ET.Element, parent: BswInternalBehavior):
|
|
1402
|
+
events = parent.getBswEvents()
|
|
1403
|
+
if len(events) > 0:
|
|
1404
|
+
child_element = ET.SubElement(element, "EVENTS")
|
|
1405
|
+
for event in events:
|
|
1406
|
+
if isinstance(event, BswTimingEvent):
|
|
1407
|
+
self.setBswTimingEvent(child_element, event)
|
|
1408
|
+
else:
|
|
1409
|
+
self._raiseError("Unsupported BswModuleEntity <%s>" % type(event))
|
|
1410
|
+
|
|
1411
|
+
def setBswModeSenderPolicy(self, element: ET.Element, policy: BswModeSenderPolicy):
|
|
1412
|
+
child_element = ET.SubElement(element, "BSW-MODE-SENDER-POLICY")
|
|
1413
|
+
self.setChildElementOptionalRefType(child_element, "PROVIDED-MODE-GROUP-REF", policy.getProvidedModeGroupRef())
|
|
1414
|
+
self.setChildElementOptionalNumericalValue(child_element, "QUEUE-LENGTH", policy.getQueueLength())
|
|
1415
|
+
|
|
1416
|
+
def writeBswInternalBehaviorModeSenderPolicy(self, element: ET.Element, parent: BswInternalBehavior):
|
|
1417
|
+
policies = parent.getModeSenderPolicies()
|
|
1418
|
+
if len(policies) > 0:
|
|
1419
|
+
child_element = ET.SubElement(element, "MODE-SENDER-POLICYS")
|
|
1420
|
+
for policy in policies:
|
|
1421
|
+
if isinstance(policy, BswModeSenderPolicy):
|
|
1422
|
+
self.setBswModeSenderPolicy(child_element, policy)
|
|
1423
|
+
else:
|
|
1424
|
+
self._raiseError("Unsupported ModeSenderPolicy type <%s>." % type(policy))
|
|
1425
|
+
|
|
1426
|
+
def setIncludedModeDeclarationGroupSet(self, element: ET.Element, group_set: IncludedModeDeclarationGroupSet):
|
|
1427
|
+
child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SET")
|
|
1428
|
+
|
|
1429
|
+
def writeBswInternalBehaviorIncludedModeDeclarationGroupSets(self, element: ET.Element, behavior: BswInternalBehavior):
|
|
1430
|
+
group_sets = behavior.getIncludedModeDeclarationGroupSets()
|
|
1431
|
+
if len(group_sets) > 0:
|
|
1432
|
+
child_element = ET.SubElement(element, "INCLUDED-MODE-DECLARATION-GROUP-SETS")
|
|
1433
|
+
for group_set in group_sets:
|
|
1434
|
+
self.setIncludedModeDeclarationGroupSet(child_element, group_set)
|
|
1435
|
+
|
|
1436
|
+
def setBswInternalBehavior(self, element: ET.Element, behavior: BswInternalBehavior):
|
|
1437
|
+
child_element = ET.SubElement(element, "BSW-INTERNAL-BEHAVIOR")
|
|
1438
|
+
self.writeInternalBehavior(child_element, behavior)
|
|
1439
|
+
self.writeBswInternalBehaviorBswModuleEntities(child_element, behavior)
|
|
1440
|
+
self.writeBswInternalBehaviorBswEvents(child_element, behavior)
|
|
1441
|
+
self.writeBswInternalBehaviorModeSenderPolicy(child_element, behavior)
|
|
1442
|
+
self.writeBswInternalBehaviorIncludedModeDeclarationGroupSets(child_element, behavior)
|
|
1443
|
+
|
|
1444
|
+
def writeBswModuleDescriptionInternalBehaviors(self, element: ET.Element, behaviors: List[InternalBehavior]):
|
|
1445
|
+
if len(behaviors) > 0:
|
|
1446
|
+
child_element = ET.SubElement(element, "INTERNAL-BEHAVIORS")
|
|
1447
|
+
for behavior in behaviors:
|
|
1448
|
+
if isinstance(behavior, BswInternalBehavior):
|
|
1449
|
+
self.setBswInternalBehavior(child_element, behavior)
|
|
1450
|
+
else:
|
|
1451
|
+
self._raiseError("Unsupported BswInternalBehavior <%s>" % type(behavior))
|
|
1452
|
+
|
|
1453
|
+
def writeBswModuleDescription(self, element: ET.Element, desc: BswModuleDescription):
|
|
1454
|
+
self.logger.debug("writeBswModuleDescription %s" % desc.short_name)
|
|
1455
|
+
child_element = ET.SubElement(element, "BSW-MODULE-DESCRIPTION")
|
|
1456
|
+
self.writeIdentifiable(child_element, desc)
|
|
1457
|
+
self.setChildElementOptionalNumericalValue(child_element, "MODULE-ID", desc.module_id)
|
|
1458
|
+
self.writerBswModuleDescriptionImplementedEntry(child_element, desc)
|
|
1459
|
+
self.writeProvidedModeGroup(child_element, desc)
|
|
1460
|
+
#self.readRequiredModeGroup(element, bsw_module_description)
|
|
1461
|
+
self.writeBswModuleDescriptionInternalBehaviors(child_element, desc.getBswInternalBehaviors())
|
|
1462
|
+
|
|
1463
|
+
def writeBswModuleEntityManagedModeGroup(self, element: ET.Element, entity: BswModuleEntity):
|
|
1464
|
+
mode_group_refs = entity.getManagedModeGroupRefs()
|
|
1465
|
+
if len(mode_group_refs) > 0:
|
|
1466
|
+
mode_groups_tag = ET.SubElement(element, "MANAGED-MODE-GROUPS")
|
|
1467
|
+
for mode_group_ref in mode_group_refs:
|
|
1468
|
+
child_element = ET.SubElement(mode_groups_tag, "MODE-DECLARATION-GROUP-PROTOTYPE-REF-CONDITIONAL")
|
|
1469
|
+
self.setChildElementOptionalRefType(child_element, "MODE-DECLARATION-GROUP-PROTOTYPE-REF", mode_group_ref)
|
|
1470
|
+
|
|
1471
|
+
def writeBswModuleEntry(self, element: ET.Element, entry: BswModuleEntry):
|
|
1472
|
+
self.logger.debug("writeBswModuleDescription %s" % entry.short_name)
|
|
1473
|
+
child_element = ET.SubElement(element, "BSW-MODULE-ENTRY")
|
|
1474
|
+
self.writeIdentifiable(child_element, entry)
|
|
1475
|
+
self.setChildElementOptionalNumericalValue(child_element, "SERVICE-ID", entry.service_id)
|
|
1476
|
+
self.setChildElementOptionalBooleanValue(child_element, "IS-REENTRANT", entry.is_reentrant)
|
|
1477
|
+
self.setChildElementOptionalBooleanValue(child_element, "IS-SYNCHRONOUS", entry.is_synchronous)
|
|
1478
|
+
self.setChildElementOptionalLiteral(child_element, "CALL-TYPE", entry.call_type)
|
|
1479
|
+
self.setChildElementOptionalLiteral(child_element, "EXECUTION-CONTEXT", entry.execution_context)
|
|
1480
|
+
self.setChildElementOptionalLiteral(child_element, "SW-SERVICE-IMPL-POLICY", entry.sw_service_impl_policy)
|
|
1481
|
+
|
|
1482
|
+
|
|
1483
|
+
def setSwcBswRunnableMapping(self, element: ET.SubElement, mapping: SwcBswRunnableMapping):
|
|
1484
|
+
child_element = ET.SubElement(element, "SWC-BSW-RUNNABLE-MAPPING")
|
|
1485
|
+
self.setChildElementOptionalRefType(child_element, "BSW-ENTITY-REF", mapping.bswEntityRef)
|
|
1486
|
+
self.setChildElementOptionalRefType(child_element, "SWC-RUNNABLE-REF", mapping.swcRunnableRef)
|
|
1487
|
+
|
|
1488
|
+
def writeSwcBswRunnableMappings(self, element: ET.Element, parent: SwcBswMapping):
|
|
1489
|
+
runnable_mappings = parent.getRunnableMappings()
|
|
1490
|
+
if len(runnable_mappings) > 0:
|
|
1491
|
+
child_element = ET.SubElement(element, "RUNNABLE-MAPPINGS")
|
|
1492
|
+
for mapping in runnable_mappings:
|
|
1493
|
+
if isinstance(mapping, SwcBswRunnableMapping):
|
|
1494
|
+
self.setSwcBswRunnableMapping(child_element, mapping)
|
|
1495
|
+
else:
|
|
1496
|
+
self._raiseError("Unsupported Runnable Mapping <%s>" % type(mapping))
|
|
1497
|
+
|
|
1498
|
+
def setSwcBswMapping(self, element: ET.Element, mapping: SwcBswMapping):
|
|
1499
|
+
self.logger.debug("writeBswModuleDescription %s" % mapping.short_name)
|
|
1500
|
+
child_element = ET.SubElement(element, "SWC-BSW-MAPPING")
|
|
1501
|
+
self.writeIdentifiable(child_element, mapping)
|
|
1502
|
+
self.setChildElementOptionalRefType(child_element, "BSW-BEHAVIOR-REF", mapping.bswBehaviorRef)
|
|
1503
|
+
self.writeSwcBswRunnableMappings(child_element, mapping)
|
|
1504
|
+
self.setChildElementOptionalRefType(child_element, "SWC-BEHAVIOR-REF", mapping.swcBehaviorRef)
|
|
1505
|
+
|
|
1506
|
+
def writeEngineeringObject(self, element: ET.Element, engineering_obj: EngineeringObject):
|
|
1507
|
+
self.setARObjectAttributes(element, engineering_obj)
|
|
1508
|
+
self.setChildElementOptionalLiteral(element, "SHORT-LABEL", engineering_obj.short_label)
|
|
1509
|
+
self.setChildElementOptionalLiteral(element, "CATEGORY", engineering_obj.category)
|
|
1510
|
+
|
|
1511
|
+
def setAutosarEngineeringObject(self, element: ET.Element, obj: AutosarEngineeringObject):
|
|
1512
|
+
self.logger.debug("readArtifactDescriptor %s", obj.short_label)
|
|
1513
|
+
child_element = ET.SubElement(element, "AUTOSAR-ENGINEERING-OBJECT")
|
|
1514
|
+
self.writeEngineeringObject(child_element, obj)
|
|
1515
|
+
|
|
1516
|
+
def writeArtifactDescriptor(self, element: ET.Element, code_desc: Code):
|
|
1517
|
+
artifact_descs = code_desc.getArtifactDescriptors()
|
|
1518
|
+
if len(artifact_descs) > 0:
|
|
1519
|
+
child_element = ET.SubElement(element, "ARTIFACT-DESCRIPTORS")
|
|
1520
|
+
for artifact_desc in artifact_descs:
|
|
1521
|
+
if isinstance(artifact_desc, AutosarEngineeringObject):
|
|
1522
|
+
self.setAutosarEngineeringObject(child_element, artifact_desc)
|
|
1523
|
+
else:
|
|
1524
|
+
self._raiseError("Unsupported Artifact descriptor <%s>" % type(artifact_desc))
|
|
1525
|
+
|
|
1526
|
+
def writeBswImplementationVendorSpecificModuleDefRefs(self, element: ET.Element, parent: BswImplementation):
|
|
1527
|
+
refs = parent.getVendorSpecificModuleDefRefs()
|
|
1528
|
+
if len(refs) > 0:
|
|
1529
|
+
child_element = ET.SubElement(element, "VENDOR-SPECIFIC-MODULE-DEF-REFS")
|
|
1530
|
+
if child_element != None:
|
|
1531
|
+
for ref in refs:
|
|
1532
|
+
self.setChildElementOptionalRefType(child_element, "VENDOR-SPECIFIC-MODULE-DEF-REF", ref)
|
|
1533
|
+
|
|
1534
|
+
def writeBswImplementation(self, element: ET.Element, impl: BswImplementation):
|
|
1535
|
+
self.logger.debug("writeBswModuleDescription %s" % impl.short_name)
|
|
1536
|
+
child_element = ET.SubElement(element, "BSW-IMPLEMENTATION")
|
|
1537
|
+
self.writeImplementation(child_element, impl)
|
|
1538
|
+
self.setChildElementOptionalLiteral(child_element, "AR-RELEASE-VERSION", impl.ar_release_version)
|
|
1539
|
+
self.setChildElementOptionalRefType(child_element, "BEHAVIOR-REF", impl.behavior_ref)
|
|
1540
|
+
self.writeBswImplementationVendorSpecificModuleDefRefs(child_element, impl)
|
|
1541
|
+
|
|
1542
|
+
def writeImplementationDataTypeElements(self, element: ET.Element, parent: ImplementationDataType):
|
|
1543
|
+
sub_elements = parent.getImplementationDataTypeElements()
|
|
1544
|
+
if len(sub_elements) > 0:
|
|
1545
|
+
sub_elements_tag = ET.SubElement(element, "SUB-ELEMENTS")
|
|
1546
|
+
for type_element in sub_elements:
|
|
1547
|
+
child_element = ET.SubElement(sub_elements_tag, "IMPLEMENTATION-DATA-TYPE-ELEMENT")
|
|
1548
|
+
self.writeIdentifiable(child_element, type_element)
|
|
1549
|
+
self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", type_element.sw_data_def_props)
|
|
1550
|
+
|
|
1551
|
+
def writeImplementationDataType(self, element: ET.Element, data_type: ImplementationDataType):
|
|
1552
|
+
self.logger.debug("writeImplementationDataType %s" % data_type.short_name)
|
|
1553
|
+
child_element = ET.SubElement(element, "IMPLEMENTATION-DATA-TYPE")
|
|
1554
|
+
self.writeAutosarDataType(child_element, data_type)
|
|
1555
|
+
self.setChildElementOptionalLiteral(child_element, "TYPE-EMITTER", data_type.getTypeEmitter())
|
|
1556
|
+
self.writeImplementationDataTypeElements(child_element, data_type)
|
|
1557
|
+
|
|
1558
|
+
def writeArgumentDataPrototypes(self, element: ET.Element, parent: ClientServerOperation):
|
|
1559
|
+
arguments = parent.getArgumentDataPrototypes()
|
|
1560
|
+
if len(arguments) > 0:
|
|
1561
|
+
arguments_tag = ET.SubElement(element, "ARGUMENTS")
|
|
1562
|
+
for prototype in arguments:
|
|
1563
|
+
child_element = ET.SubElement(arguments_tag, "ARGUMENT-DATA-PROTOTYPE")
|
|
1564
|
+
self.writeIdentifiable(child_element, prototype)
|
|
1565
|
+
self.setSwDataDefProps(child_element, "SW-DATA-DEF-PROPS", prototype.sw_data_def_props)
|
|
1566
|
+
self.setChildElementOptionalRefType(child_element, "TYPE-TREF", prototype.type_tref)
|
|
1567
|
+
self.setChildElementOptionalLiteral(child_element, "DIRECTION", prototype.direction)
|
|
1568
|
+
|
|
1569
|
+
def writePossibleErrorRefs(self, element: ET.Element, parent: ClientServerOperation):
|
|
1570
|
+
error_refs = parent.getPossbileErrorRefs()
|
|
1571
|
+
if len(error_refs) > 0:
|
|
1572
|
+
error_refs_tag = ET.SubElement(element, "POSSIBLE-ERROR-REFS")
|
|
1573
|
+
for error_ref in error_refs:
|
|
1574
|
+
self.setChildElementOptionalRefType(error_refs_tag, "POSSIBLE-ERROR-REF", error_ref)
|
|
1575
|
+
|
|
1576
|
+
def writeClientServerOperation(self, element: ET.Element, operation: ClientServerOperation):
|
|
1577
|
+
self.logger.debug("writeClientServerOperation %s" % operation.short_name)
|
|
1578
|
+
child_element = ET.SubElement(element, "CLIENT-SERVER-OPERATION")
|
|
1579
|
+
self.writeIdentifiable(child_element, operation)
|
|
1580
|
+
self.writeArgumentDataPrototypes(child_element, operation)
|
|
1581
|
+
self.writePossibleErrorRefs(child_element, operation)
|
|
1582
|
+
|
|
1583
|
+
def writeOperations(self, element: ET.Element, parent: ClientServerInterface):
|
|
1584
|
+
operations = parent.getOperations()
|
|
1585
|
+
if len(operations) > 0:
|
|
1586
|
+
operations_tag = ET.SubElement(element, "OPERATIONS")
|
|
1587
|
+
for operation in operations:
|
|
1588
|
+
if isinstance(operation, ClientServerOperation):
|
|
1589
|
+
self.writeClientServerOperation(operations_tag, operation)
|
|
1590
|
+
else:
|
|
1591
|
+
self._raiseError("Unsupported Operation <%s>" % type(operation))
|
|
1592
|
+
|
|
1593
|
+
def writeApplicationError(self, element: ET.Element, error: ApplicationError):
|
|
1594
|
+
self.logger.debug("writeApplicationError %s" % error.short_name)
|
|
1595
|
+
child_element = ET.SubElement(element, "APPLICATION-ERROR")
|
|
1596
|
+
self.writeIdentifiable(child_element, error)
|
|
1597
|
+
self.setChildElementOptionalNumericalValue(child_element, "ERROR-CODE", error.error_code)
|
|
1598
|
+
|
|
1599
|
+
def writePossibleErrors(self, element: ET.Element, parent: ClientServerInterface):
|
|
1600
|
+
errors = parent.getPossibleErrors()
|
|
1601
|
+
if len(errors) > 0:
|
|
1602
|
+
errors_tag = ET.SubElement(element, "POSSIBLE-ERRORS")
|
|
1603
|
+
for error in errors:
|
|
1604
|
+
if isinstance(error, ApplicationError):
|
|
1605
|
+
self.writeApplicationError(errors_tag, error)
|
|
1606
|
+
else:
|
|
1607
|
+
self._raiseError("Unsupported PossibleError %s" % type(error))
|
|
1608
|
+
|
|
1609
|
+
def setPortInterface(self, element: ET.Element, port_interface: PortInterface):
|
|
1610
|
+
self.writeIdentifiable(element, port_interface)
|
|
1611
|
+
self.setChildElementOptionalBooleanValue(element, "IS-SERVICE", port_interface.is_service)
|
|
1612
|
+
self.setChildElementOptionalLiteral(element, "SERVICE-KIND", port_interface.serviceKind)
|
|
1613
|
+
|
|
1614
|
+
def writeClientServerInterface(self, element: ET.Element, cs_interface: ClientServerInterface):
|
|
1615
|
+
self.logger.debug("writeClientServerInterface %s" % cs_interface.short_name)
|
|
1616
|
+
child_element = ET.SubElement(element, "CLIENT-SERVER-INTERFACE")
|
|
1617
|
+
self.setPortInterface(child_element, cs_interface)
|
|
1618
|
+
self.writeOperations(child_element, cs_interface)
|
|
1619
|
+
self.writePossibleErrors(child_element, cs_interface)
|
|
1620
|
+
|
|
1621
|
+
def writeApplicationSwComponentType(self, element: ET.Element, sw_component: ApplicationSwComponentType):
|
|
1622
|
+
self.logger.debug("writeApplicationSwComponentType %s" % sw_component.short_name)
|
|
1623
|
+
child_element = ET.SubElement(element, "APPLICATION-SW-COMPONENT-TYPE")
|
|
1624
|
+
self.writeAtomicSwComponentType(child_element, sw_component)
|
|
1625
|
+
|
|
1626
|
+
def writeEcuAbstractionSwComponentType(self, element: ET.Element, sw_component: EcuAbstractionSwComponentType):
|
|
1627
|
+
self.logger.debug("writeEcuAbstractionSwComponentType %s" % sw_component.short_name)
|
|
1628
|
+
child_element = ET.SubElement(element, "ECU-ABSTRACTION-SW-COMPONENT-TYPE")
|
|
1629
|
+
self.writeAtomicSwComponentType(child_element, sw_component)
|
|
1630
|
+
|
|
1631
|
+
def setApplicationArrayElement(self, element: ET.Element, prototype: ApplicationArrayElement):
|
|
1632
|
+
if prototype is not None:
|
|
1633
|
+
child_element = ET.SubElement(element, "ELEMENT")
|
|
1634
|
+
self.setApplicationCompositeElementDataPrototype(child_element, prototype)
|
|
1635
|
+
self.setChildElementOptionalLiteral(child_element, "ARRAY-SIZE-SEMANTICS", prototype.arraySizeSemantics)
|
|
1636
|
+
self.setChildElementOptionalNumericalValue(child_element, "MAX-NUMBER-OF-ELEMENTS", prototype.maxNumberOfElements)
|
|
1637
|
+
|
|
1638
|
+
def writeApplicationArrayDataType(self, element: ET.Element, data_type: ApplicationArrayDataType):
|
|
1639
|
+
self.logger.debug("writeApplicationArrayDataType %s" % data_type.short_name)
|
|
1640
|
+
child_element = ET.SubElement(element, "APPLICATION-ARRAY-DATA-TYPE")
|
|
1641
|
+
self.writeApplicationCompositeDataType(child_element, data_type)
|
|
1642
|
+
self.setApplicationArrayElement(child_element, data_type.element)
|
|
1643
|
+
|
|
1644
|
+
def setSwRecordLayoutV(self, element: ET.Element, key: str, layout_v: SwRecordLayoutV):
|
|
1645
|
+
if layout_v is not None:
|
|
1646
|
+
child_element = ET.SubElement(element, key)
|
|
1647
|
+
self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", layout_v.shortLabel)
|
|
1648
|
+
self.setChildElementOptionalRefType(child_element, "BASE-TYPE-REF", layout_v.baseTypeRef)
|
|
1649
|
+
self.setChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-V-AXIS", layout_v.swRecordLayoutVAxis)
|
|
1650
|
+
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-PROP", layout_v.swRecordLayoutVProp)
|
|
1651
|
+
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-V-INDEX", layout_v.swRecordLayoutVIndex)
|
|
1652
|
+
|
|
1653
|
+
def setSwRecordLayoutGroup(self, element: ET.Element, key: str, group: SwRecordLayoutGroup):
|
|
1654
|
+
if group is not None:
|
|
1655
|
+
child_element = ET.SubElement(element, key)
|
|
1656
|
+
self.setChildElementOptionalLiteral(child_element, "SHORT-LABEL", group.shortLabel)
|
|
1657
|
+
self.setChildElementOptionalLiteral(child_element, "CATEGORY", group.category)
|
|
1658
|
+
self.setChildElementOptionalNumericalValue(child_element, "SW-RECORD-LAYOUT-GROUP-AXIS", group.swRecordLayoutGroupAxis)
|
|
1659
|
+
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-INDEX", group.swRecordLayoutGroupIndex)
|
|
1660
|
+
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-FROM", group.swRecordLayoutGroupFrom)
|
|
1661
|
+
self.setChildElementOptionalLiteral(child_element, "SW-RECORD-LAYOUT-GROUP-TO", group.swRecordLayoutGroupTo)
|
|
1662
|
+
self.setSwRecordLayoutV(child_element, "SW-RECORD-LAYOUT-V", group.swRecordLayoutGroupContentType.swRecordLayoutV)
|
|
1663
|
+
self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", group.swRecordLayoutGroupContentType.swRecordLayoutGroup)
|
|
1664
|
+
return group
|
|
1665
|
+
|
|
1666
|
+
def writeSwRecordLayout(self, element: ET.Element, layout: SwRecordLayout):
|
|
1667
|
+
self.logger.debug("writeSwRecordLayout %s" % layout.short_name)
|
|
1668
|
+
child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
|
|
1669
|
+
self.writeIdentifiable(child_element, layout)
|
|
1670
|
+
self.setSwRecordLayoutGroup(child_element, "SW-RECORD-LAYOUT-GROUP", layout.swRecordLayoutGroup)
|
|
1671
|
+
|
|
1672
|
+
def writeSwAddrMethod(self, element: ET.Element, method: SwAddrMethod):
|
|
1673
|
+
self.logger.debug("writeSwAddrMethod %s" % method.short_name)
|
|
1674
|
+
child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
|
|
1675
|
+
|
|
1676
|
+
def writeTriggerInterface(self, element: ET.Element, trigger_if: TriggerInterface):
|
|
1677
|
+
self.logger.debug("writeTriggerInterface %s" % trigger_if.short_name)
|
|
1678
|
+
child_element = ET.SubElement(element, "SW-RECORD-LAYOUT")
|
|
1679
|
+
|
|
1680
|
+
def writeServiceSwComponentType(self, element: ET.Element, sw_component: ServiceSwComponentType):
|
|
1681
|
+
self.logger.debug("writeServiceSwComponentType %s" % sw_component.short_name)
|
|
1682
|
+
child_element = ET.SubElement(element, "SERVICE-SW-COMPONENT-TYPE")
|
|
1683
|
+
self.writeAtomicSwComponentType(child_element, sw_component)
|
|
1684
|
+
|
|
1685
|
+
def writeDataTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
1686
|
+
maps = parent.getDataTypeMaps()
|
|
1687
|
+
if len(maps) > 0:
|
|
1688
|
+
maps_tag = ET.SubElement(element, "DATA-TYPE-MAPS")
|
|
1689
|
+
for map in maps:
|
|
1690
|
+
child_element = ET.SubElement(maps_tag, "DATA-TYPE-MAP")
|
|
1691
|
+
self.setARObjectAttributes(child_element, map)
|
|
1692
|
+
self.setChildElementOptionalRefType(child_element, "APPLICATION-DATA-TYPE-REF", map.application_data_type_ref)
|
|
1693
|
+
self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.implementation_data_type_ref)
|
|
1694
|
+
|
|
1695
|
+
def writeModeRequestTypeMaps(self, element: ET.Element, parent: DataTypeMappingSet):
|
|
1696
|
+
maps = parent.getModeRequestTypeMaps()
|
|
1697
|
+
if len(maps) > 0:
|
|
1698
|
+
maps_tag = ET.SubElement(element, "MODE-REQUEST-TYPE-MAPS")
|
|
1699
|
+
for map in maps:
|
|
1700
|
+
child_element = ET.SubElement(maps_tag, "MODE-REQUEST-TYPE-MAP")
|
|
1701
|
+
self.setARObjectAttributes(child_element, map)
|
|
1702
|
+
self.setChildElementOptionalRefType(child_element, "IMPLEMENTATION-DATA-TYPE-REF", map.implementation_data_type_ref)
|
|
1703
|
+
self.setChildElementOptionalRefType(child_element, "MODE-GROUP-REF", map.mode_group_ref)
|
|
1704
|
+
|
|
1705
|
+
def writeDataTypeMappingSet(self, element: ET.Element, mapping_set: DataTypeMappingSet):
|
|
1706
|
+
self.logger.debug("writeDataTypeMappingSet %s" % mapping_set.short_name)
|
|
1707
|
+
child_element = ET.SubElement(element, "DATA-TYPE-MAPPING-SET")
|
|
1708
|
+
self.writeIdentifiable(child_element, mapping_set)
|
|
1709
|
+
self.writeDataTypeMaps(child_element, mapping_set)
|
|
1710
|
+
self.writeModeRequestTypeMaps(child_element, mapping_set)
|
|
1711
|
+
|
|
1712
|
+
def setModeDeclaration(self, element: ET.Element, mode_declaration: ModeDeclaration):
|
|
1713
|
+
child_element = ET.SubElement(element, "MODE-DECLARATION")
|
|
1714
|
+
self.writeIdentifiable(child_element, mode_declaration)
|
|
1715
|
+
self.setChildElementOptionalNumericalValue(child_element, "VALUE", mode_declaration.getValue())
|
|
1716
|
+
|
|
1717
|
+
def writeModeDeclarationGroupModeDeclaration(self, element: ET.Element, parent: ModeDeclarationGroup):
|
|
1718
|
+
mode_declarations = parent.getModeDeclarations()
|
|
1719
|
+
if len(mode_declarations) > 0:
|
|
1720
|
+
child_element = ET.SubElement(element, "MODE-DECLARATIONS")
|
|
1721
|
+
for mode_declaration in mode_declarations:
|
|
1722
|
+
self.setModeDeclaration(child_element, mode_declaration)
|
|
1723
|
+
|
|
1724
|
+
def writeModeDeclarationGroup(self, element: ET.Element, group: ModeDeclarationGroup):
|
|
1725
|
+
self.logger.debug("writeModeDeclarationGroup %s" % group.short_name)
|
|
1726
|
+
child_element = ET.SubElement(element, "MODE-DECLARATION-GROUP")
|
|
1727
|
+
self.writeIdentifiable(child_element, group)
|
|
1728
|
+
self.setChildElementOptionalRefType(child_element, "INITIAL-MODE-REF", group._initial_mode_ref)
|
|
1729
|
+
self.writeModeDeclarationGroupModeDeclaration(child_element, group)
|
|
1730
|
+
self.setChildElementOptionalNumericalValue(child_element, "ON-TRANSITION-VALUE", group.getOnTransitionValue())
|
|
1731
|
+
|
|
1732
|
+
def writeModeSwitchInterfaceModeGroup(self, element: ET.Element, parent: ModeSwitchInterface):
|
|
1733
|
+
mode_groups = parent.getModeGroups()
|
|
1734
|
+
if len(mode_groups) > 0:
|
|
1735
|
+
mode_group = mode_groups[0]
|
|
1736
|
+
child_element = ET.SubElement(element, "MODE-GROUP")
|
|
1737
|
+
self.writeIdentifiable(child_element, mode_group)
|
|
1738
|
+
self.setChildElementOptionalRefType(child_element, "TYPE-TREF", mode_group.type_tref)
|
|
1739
|
+
|
|
1740
|
+
def writeModeSwitchInterface(self, element: ET.Element, mode_interface: ModeSwitchInterface):
|
|
1741
|
+
self.logger.debug("writeModeSwitchInterface %s" % mode_interface.short_name)
|
|
1742
|
+
child_element = ET.SubElement(element, "MODE-SWITCH-INTERFACE")
|
|
1743
|
+
self.setPortInterface(child_element, mode_interface)
|
|
1744
|
+
self.writeModeSwitchInterfaceModeGroup(child_element, mode_interface)
|
|
1745
|
+
|
|
1746
|
+
def setEOCExecutableEntityRefSuccessorRefs(self, element: ET.Element, successor_refs: List[RefType]):
|
|
1747
|
+
if len(successor_refs) > 0:
|
|
1748
|
+
child_element = ET.SubElement(element, "SUCCESSOR-REFS")
|
|
1749
|
+
for successor_ref in successor_refs:
|
|
1750
|
+
self.setChildElementOptionalRefType(child_element, "SUCCESSOR-REF", successor_ref)
|
|
1751
|
+
|
|
1752
|
+
def writeEOCExecutableEntityRef(self, element: ET.Element, entity_ref: EOCExecutableEntityRef):
|
|
1753
|
+
child_element = ET.SubElement(element, "EOC-EXECUTABLE-ENTITY-REF")
|
|
1754
|
+
self.writeIdentifiable(child_element, entity_ref)
|
|
1755
|
+
self.setEOCExecutableEntityRefSuccessorRefs(child_element, entity_ref.getSuccessorRefs())
|
|
1756
|
+
|
|
1757
|
+
def writeExecutionOrderConstraintOrderedElement(self, element: ET.Element, constraint: ExecutionOrderConstraint):
|
|
1758
|
+
order_elements = constraint.getOrderedElements()
|
|
1759
|
+
if len(order_elements) > 0:
|
|
1760
|
+
child_element = ET.SubElement(element, "ORDERED-ELEMENTS")
|
|
1761
|
+
for order_element in order_elements:
|
|
1762
|
+
if isinstance(order_element, EOCExecutableEntityRef):
|
|
1763
|
+
self.writeEOCExecutableEntityRef(child_element, order_element)
|
|
1764
|
+
else:
|
|
1765
|
+
self._raiseError("Unsupported order element <%s>" % type(order_element))
|
|
1766
|
+
|
|
1767
|
+
def writeExecutionOrderConstraint(self, element: ET.Element, constraint: ExecutionOrderConstraint):
|
|
1768
|
+
self.logger.debug("writeExecutionOrderConstraint %s" % constraint.short_name)
|
|
1769
|
+
child_element = ET.SubElement(element, "EXECUTION-ORDER-CONSTRAINT")
|
|
1770
|
+
self.writeIdentifiable(child_element, constraint)
|
|
1771
|
+
self.writeExecutionOrderConstraintOrderedElement(child_element, constraint)
|
|
1772
|
+
|
|
1773
|
+
def writeTimingRequirements(self, element: ET.Element, extension: TimingExtension):
|
|
1774
|
+
requirements = extension.getTimingRequirements()
|
|
1775
|
+
if len(requirements) > 0:
|
|
1776
|
+
child_element = ET.SubElement(element, "TIMING-REQUIREMENTS")
|
|
1777
|
+
for requirement in requirements:
|
|
1778
|
+
if isinstance(requirement, ExecutionOrderConstraint):
|
|
1779
|
+
self.writeExecutionOrderConstraint(child_element, requirement)
|
|
1780
|
+
else:
|
|
1781
|
+
self._raiseError("Unsupported timing requirement <%s>" % type(requirement))
|
|
1782
|
+
|
|
1783
|
+
def writeTimingExtension(self, element: ET.Element, extension: TimingExtension):
|
|
1784
|
+
self.writeTimingRequirements(element, extension)
|
|
1785
|
+
|
|
1786
|
+
def writeSwcTiming(self, element: ET.Element, timing: SwcTiming):
|
|
1787
|
+
self.logger.debug("writeSWcTiming %s" % timing.short_name)
|
|
1788
|
+
child_element = ET.SubElement(element, "SWC-TIMING")
|
|
1789
|
+
self.writeIdentifiable(child_element, timing)
|
|
1790
|
+
self.writeTimingExtension(child_element, timing)
|
|
1791
|
+
|
|
1792
|
+
def writePduToFrameMappings(self, element: ET.Element, parent: Frame):
|
|
1793
|
+
mappings = parent.getPduToFrameMappings()
|
|
1794
|
+
if len(mappings) > 0:
|
|
1795
|
+
mappings_tags = ET.SubElement(element, "PDU-TO-FRAME-MAPPINGS")
|
|
1796
|
+
for mapping in mappings:
|
|
1797
|
+
child_element = ET.SubElement(mappings_tags, "PDU-TO-FRAME-MAPPING")
|
|
1798
|
+
self.writeIdentifiable(child_element, mapping)
|
|
1799
|
+
self.setChildElementOptionalLiteral(child_element, "PACKING-BYTE-ORDER", mapping.packingByteOrder)
|
|
1800
|
+
self.setChildElementOptionalRefType(child_element, "PDU-REF", mapping.pduRef)
|
|
1801
|
+
self.setChildElementOptionalNumericalValue(child_element, "START-POSITION", mapping.startPosition)
|
|
1802
|
+
|
|
1803
|
+
def writeFrame(self, element: ET.Element, frame: Frame):
|
|
1804
|
+
self.writeIdentifiable(element, frame)
|
|
1805
|
+
self.setChildElementOptionalNumericalValue(element, "FRAME-LENGTH", frame.frameLength)
|
|
1806
|
+
self.writePduToFrameMappings(element, frame)
|
|
1807
|
+
|
|
1808
|
+
def writeLinUnconditionalFrame(self, element: ET.Element, frame: LinUnconditionalFrame):
|
|
1809
|
+
self.logger.debug("LinUnconditionalFrame %s" % frame.short_name)
|
|
1810
|
+
child_element = ET.SubElement(element, "LIN-UNCONDITIONAL-FRAME")
|
|
1811
|
+
self.writeFrame(child_element, frame)
|
|
1812
|
+
|
|
1813
|
+
def writeNmConfig(self, element: ET.Element, config: NmConfig):
|
|
1814
|
+
self.logger.debug("NmConfig %s" % config.short_name)
|
|
1815
|
+
child_element = ET.SubElement(element, "NM-CONFIG")
|
|
1816
|
+
self.writeIdentifiable(child_element, config)
|
|
1817
|
+
|
|
1818
|
+
def writeNmPdu(self, element: ET.Element, pdu: NmPdu):
|
|
1819
|
+
self.logger.debug("NmPdu %s" % pdu.short_name)
|
|
1820
|
+
child_element = ET.SubElement(element, "NM-PDU")
|
|
1821
|
+
self.writeIdentifiable(child_element, pdu)
|
|
1822
|
+
|
|
1823
|
+
def writeNPdu(self, element: ET.Element, pdu: NPdu):
|
|
1824
|
+
self.logger.debug("NPdu %s" % pdu.short_name)
|
|
1825
|
+
child_element = ET.SubElement(element, "N-PDU")
|
|
1826
|
+
self.writeIdentifiable(child_element, pdu)
|
|
1827
|
+
|
|
1828
|
+
def writeDcmIPdu(self, element: ET.Element, pdu: DcmIPdu):
|
|
1829
|
+
self.logger.debug("DcmIPdu %s" % pdu.short_name)
|
|
1830
|
+
child_element = ET.SubElement(element, "DCM-I-PDU")
|
|
1831
|
+
self.writeIdentifiable(child_element, pdu)
|
|
1832
|
+
|
|
1833
|
+
def writeCanTpConfig(self, element: ET.Element, config: CanTpConfig):
|
|
1834
|
+
self.logger.debug("CanTpConfig %s" % config.short_name)
|
|
1835
|
+
child_element = ET.SubElement(element, "CAN-TP-CONFIG")
|
|
1836
|
+
self.writeIdentifiable(child_element, config)
|
|
1837
|
+
|
|
1838
|
+
def writeLinCluster(self, element: ET.Element, cluster: LinCluster):
|
|
1839
|
+
self.logger.debug("LinCluster %s" % cluster.short_name)
|
|
1840
|
+
child_element = ET.SubElement(element, "LIN-CLUSTER")
|
|
1841
|
+
self.writeIdentifiable(child_element, cluster)
|
|
1842
|
+
|
|
1843
|
+
def writeCanFrame(self, element: ET.Element, frame: CanFrame):
|
|
1844
|
+
self.logger.debug("CanFrame %s" % frame.short_name)
|
|
1845
|
+
child_element = ET.SubElement(element, "CAN-FRAME")
|
|
1846
|
+
self.writeFrame(child_element, frame)
|
|
1847
|
+
|
|
1848
|
+
def setISignalMappings(self, element: ET.Element, mappings: List[ISignalMapping]):
|
|
1849
|
+
if len(mappings) > 0:
|
|
1850
|
+
mappings_tag = ET.SubElement(element, "SIGNAL-MAPPINGS")
|
|
1851
|
+
for mapping in mappings:
|
|
1852
|
+
child_element = ET.SubElement(mappings_tag, "I-SIGNAL-MAPPING")
|
|
1853
|
+
self.setChildElementOptionalRefType(child_element, "SOURCE-SIGNAL-REF", mapping.sourceSignalRef)
|
|
1854
|
+
self.setChildElementOptionalRefType(child_element, "TARGET-SIGNAL-REF", mapping.targetSignalRef)
|
|
1855
|
+
|
|
1856
|
+
def writeGateway(self, element: ET.Element, gateway: Gateway):
|
|
1857
|
+
self.logger.debug("Gateway %s" % gateway.short_name)
|
|
1858
|
+
child_element = ET.SubElement(element, "GATEWAY")
|
|
1859
|
+
self.writeIdentifiable(child_element, gateway)
|
|
1860
|
+
self.setChildElementOptionalRefType(child_element, "ECU-REF", gateway.ecuRef)
|
|
1861
|
+
self.setISignalMappings(child_element, gateway.getSignalMappings())
|
|
1862
|
+
|
|
1863
|
+
def writeISignal(self, element: ET.Element, signal: ISignal):
|
|
1864
|
+
self.logger.debug("ISignal %s" % signal.short_name)
|
|
1865
|
+
child_element = ET.SubElement(element, "I-SIGNAL")
|
|
1866
|
+
self.writeIdentifiable(child_element, signal)
|
|
1867
|
+
self.setChildElementOptionalLiteral(child_element, "DATA-TYPE-POLICY", signal.dataTypePolicy)
|
|
1868
|
+
self.setInitValue(child_element, signal.initValue)
|
|
1869
|
+
self.setChildElementOptionalNumericalValue(child_element, "LENGTH", signal.length)
|
|
1870
|
+
self.setSwDataDefProps(child_element, "NETWORK-REPRESENTATION-PROPS", signal.networkRepresentationProps)
|
|
1871
|
+
self.setChildElementOptionalRefType(child_element, "SYSTEM-SIGNAL-REF", signal.systemSignalRef)
|
|
1872
|
+
|
|
1873
|
+
def writeARPackageElement(self, element: ET.Element, ar_element: ARElement):
|
|
1874
|
+
if isinstance(ar_element, ComplexDeviceDriverSwComponentType):
|
|
1875
|
+
self.writeComplexDeviceDriverSwComponentType(element, ar_element)
|
|
1876
|
+
elif isinstance(ar_element, SwcImplementation):
|
|
1877
|
+
self.writeSwcImplementation(element, ar_element)
|
|
1878
|
+
elif isinstance(ar_element, CompositionSwComponentType):
|
|
1879
|
+
self.writeCompositionSwComponentType(element, ar_element)
|
|
1880
|
+
elif isinstance(ar_element, ApplicationPrimitiveDataType):
|
|
1881
|
+
self.writeApplicationPrimitiveDataType(element, ar_element)
|
|
1882
|
+
elif isinstance(ar_element, ApplicationRecordDataType):
|
|
1883
|
+
self.writeApplicationRecordDataType(element, ar_element)
|
|
1884
|
+
elif isinstance(ar_element, SwBaseType):
|
|
1885
|
+
self.writeSwBaseType(element, ar_element)
|
|
1886
|
+
elif isinstance(ar_element, CompuMethod):
|
|
1887
|
+
self.writeCompuMethod(element, ar_element)
|
|
1888
|
+
elif isinstance(ar_element, ConstantSpecification):
|
|
1889
|
+
self.writeConstantSpecification(element, ar_element)
|
|
1890
|
+
elif isinstance(ar_element, DataConstr):
|
|
1891
|
+
self.writeDataConstr(element, ar_element)
|
|
1892
|
+
elif isinstance(ar_element, EndToEndProtectionSet):
|
|
1893
|
+
self.writeEndToEndProtectionSet(element, ar_element)
|
|
1894
|
+
elif isinstance(ar_element, SenderReceiverInterface):
|
|
1895
|
+
self.writeSenderReceiverInterface(element, ar_element)
|
|
1896
|
+
elif isinstance(ar_element, Unit):
|
|
1897
|
+
self.writeUnit(element, ar_element)
|
|
1898
|
+
elif isinstance(ar_element, BswModuleDescription):
|
|
1899
|
+
self.writeBswModuleDescription(element, ar_element)
|
|
1900
|
+
elif isinstance(ar_element, BswModuleEntry):
|
|
1901
|
+
self.writeBswModuleEntry(element, ar_element)
|
|
1902
|
+
elif isinstance(ar_element, SwcBswMapping):
|
|
1903
|
+
self.setSwcBswMapping(element, ar_element)
|
|
1904
|
+
elif isinstance(ar_element, BswImplementation):
|
|
1905
|
+
self.writeBswImplementation(element, ar_element)
|
|
1906
|
+
elif isinstance(ar_element, ImplementationDataType):
|
|
1907
|
+
self.writeImplementationDataType(element, ar_element)
|
|
1908
|
+
elif isinstance(ar_element, ClientServerInterface):
|
|
1909
|
+
self.writeClientServerInterface(element, ar_element)
|
|
1910
|
+
elif isinstance(ar_element, ApplicationSwComponentType):
|
|
1911
|
+
self.writeApplicationSwComponentType(element, ar_element)
|
|
1912
|
+
elif isinstance(ar_element, EcuAbstractionSwComponentType):
|
|
1913
|
+
self.writeEcuAbstractionSwComponentType(element, ar_element)
|
|
1914
|
+
elif isinstance(ar_element, ApplicationArrayDataType):
|
|
1915
|
+
self.writeApplicationArrayDataType(element, ar_element)
|
|
1916
|
+
elif isinstance(ar_element, SwRecordLayout):
|
|
1917
|
+
self.writeSwRecordLayout(element, ar_element)
|
|
1918
|
+
elif isinstance(ar_element, SwAddrMethod):
|
|
1919
|
+
self.writeSwAddrMethod(element, ar_element)
|
|
1920
|
+
elif isinstance(ar_element, TriggerInterface):
|
|
1921
|
+
self.writeTriggerInterface(element, ar_element)
|
|
1922
|
+
elif isinstance(ar_element, ServiceSwComponentType):
|
|
1923
|
+
self.writeServiceSwComponentType(element, ar_element)
|
|
1924
|
+
elif isinstance(ar_element, DataTypeMappingSet):
|
|
1925
|
+
self.writeDataTypeMappingSet(element, ar_element)
|
|
1926
|
+
elif isinstance(ar_element, ModeDeclarationGroup):
|
|
1927
|
+
self.writeModeDeclarationGroup(element, ar_element)
|
|
1928
|
+
elif isinstance(ar_element, ModeSwitchInterface):
|
|
1929
|
+
self.writeModeSwitchInterface(element, ar_element)
|
|
1930
|
+
elif isinstance(ar_element, SwcTiming):
|
|
1931
|
+
self.writeSwcTiming(element, ar_element)
|
|
1932
|
+
elif isinstance(ar_element, LinUnconditionalFrame):
|
|
1933
|
+
self.writeLinUnconditionalFrame(element, ar_element)
|
|
1934
|
+
elif isinstance(ar_element, NmConfig):
|
|
1935
|
+
self.writeNmConfig(element, ar_element)
|
|
1936
|
+
elif isinstance(ar_element, NmPdu):
|
|
1937
|
+
self.writeNmPdu(element, ar_element)
|
|
1938
|
+
elif isinstance(ar_element, NPdu):
|
|
1939
|
+
self.writeNPdu(element, ar_element)
|
|
1940
|
+
elif isinstance(ar_element, DcmIPdu):
|
|
1941
|
+
self.writeDcmIPdu(element, ar_element)
|
|
1942
|
+
elif isinstance(ar_element, CanTpConfig):
|
|
1943
|
+
self.writeCanTpConfig(element, ar_element)
|
|
1944
|
+
elif isinstance(ar_element, LinCluster):
|
|
1945
|
+
self.writeLinCluster(element, ar_element)
|
|
1946
|
+
elif isinstance(ar_element, CanFrame):
|
|
1947
|
+
self.writeCanFrame(element, ar_element)
|
|
1948
|
+
elif isinstance(ar_element, Gateway):
|
|
1949
|
+
self.writeGateway(element, ar_element)
|
|
1950
|
+
elif isinstance(ar_element, ISignal):
|
|
1951
|
+
self.writeISignal(element, ar_element)
|
|
1952
|
+
else:
|
|
1953
|
+
raise NotImplementedError("Unsupported Elements of ARPackage <%s>" % type(ar_element))
|
|
589
1954
|
|
|
590
1955
|
def writeARPackages(self, element: ET.Element, pkgs: List[ARPackage]):
|
|
591
1956
|
if len(pkgs) > 0:
|
|
@@ -594,46 +1959,24 @@ class ARXMLWriter:
|
|
|
594
1959
|
for pkg in pkgs:
|
|
595
1960
|
pkg_tag = ET.SubElement(pkgs_tag, "AR-PACKAGE")
|
|
596
1961
|
|
|
597
|
-
self.
|
|
598
|
-
self.writeShortName(pkg_tag, pkg.short_name)
|
|
1962
|
+
self.writeIdentifiable(pkg_tag, pkg)
|
|
599
1963
|
self.logger.debug("writeARPackage %s" % pkg.full_name)
|
|
600
1964
|
|
|
601
1965
|
if pkg.getTotalElement() > 0:
|
|
602
1966
|
elements_tag = ET.SubElement(pkg_tag, "ELEMENTS")
|
|
603
|
-
|
|
604
|
-
self.writeApplicationDataTypes(elements_tag, pkg)
|
|
605
|
-
self.writeCompositionSwComponentTypes(elements_tag, pkg)
|
|
606
|
-
self.writeSwBaseTypes(elements_tag, pkg)
|
|
607
|
-
self.writeCompuMethods(elements_tag, pkg)
|
|
608
|
-
self.writeConstantSpecifications(elements_tag, pkg)
|
|
609
|
-
self.writeDataConstr(elements_tag, pkg)
|
|
610
|
-
self.writeUnit(elements_tag, pkg)
|
|
611
|
-
|
|
612
|
-
self.writeARPackages(pkg_tag, pkg.getARPackages())
|
|
613
|
-
|
|
614
|
-
def patch_xml(self, xml: str) -> str:
|
|
615
|
-
xml = xml.replace("<SW-DATA-DEF-PROPS-CONDITIONAL/>","<SW-DATA-DEF-PROPS-CONDITIONAL></SW-DATA-DEF-PROPS-CONDITIONAL>")
|
|
616
|
-
xml = xml.replace("<ELEMENTS/>","")
|
|
617
|
-
return xml
|
|
618
|
-
|
|
619
|
-
def saveToFile(self, filename, root: ET.Element):
|
|
620
|
-
xml = ET.tostring(root, encoding = "UTF-8", xml_declaration = True, short_empty_elements = False)
|
|
621
|
-
|
|
622
|
-
dom = minidom.parseString(xml.decode())
|
|
623
|
-
xml = dom.toprettyxml(indent = " ", encoding = "UTF-8")
|
|
624
1967
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
1968
|
+
for ar_element in pkg.getElements():
|
|
1969
|
+
if not isinstance(ar_element, ARPackage):
|
|
1970
|
+
self.writeARPackageElement(elements_tag, ar_element)
|
|
1971
|
+
|
|
1972
|
+
self.writeARPackages(pkg_tag, pkg.getARPackages())
|
|
630
1973
|
|
|
631
1974
|
def save(self, filename, document: AUTOSAR):
|
|
632
1975
|
self.logger.info("Save %s ..." % filename)
|
|
633
1976
|
|
|
634
1977
|
root = ET.Element("AUTOSAR", self.nsmap)
|
|
635
1978
|
root.attrib["xmlns:xsi"] = "http://www.w3.org/2001/XMLSchema-instance"
|
|
636
|
-
root.attrib["xsi:schemaLocation"] =
|
|
1979
|
+
root.attrib["xsi:schemaLocation"] = document.schema_location
|
|
637
1980
|
|
|
638
1981
|
self.writeARPackages(root, document.getARPackages())
|
|
639
1982
|
|