powertrain-build 1.13.1__py3-none-any.whl → 1.13.3.dev3__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.
- powertrain_build/__init__.py +40 -40
- powertrain_build/__main__.py +6 -6
- powertrain_build/a2l.py +582 -582
- powertrain_build/a2l_merge.py +650 -650
- powertrain_build/a2l_templates.py +717 -717
- powertrain_build/build.py +985 -985
- powertrain_build/build_defs.py +309 -309
- powertrain_build/build_proj_config.py +690 -690
- powertrain_build/check_interface.py +575 -575
- powertrain_build/cli.py +141 -141
- powertrain_build/config.py +542 -542
- powertrain_build/core.py +395 -395
- powertrain_build/core_dummy.py +343 -343
- powertrain_build/create_conversion_table.py +73 -73
- powertrain_build/dids.py +916 -916
- powertrain_build/dummy.py +157 -157
- powertrain_build/dummy_spm.py +252 -252
- powertrain_build/environmentcheck.py +52 -52
- powertrain_build/ext_dbg.py +255 -255
- powertrain_build/ext_var.py +327 -327
- powertrain_build/feature_configs.py +301 -301
- powertrain_build/gen_allsysteminfo.py +227 -227
- powertrain_build/gen_label_split.py +449 -449
- powertrain_build/handcode_replacer.py +124 -124
- powertrain_build/html_report.py +133 -133
- powertrain_build/interface/__init__.py +4 -4
- powertrain_build/interface/application.py +511 -511
- powertrain_build/interface/base.py +500 -500
- powertrain_build/interface/csp_api.py +490 -490
- powertrain_build/interface/device_proxy.py +677 -677
- powertrain_build/interface/ems.py +67 -67
- powertrain_build/interface/export_global_vars.py +121 -121
- powertrain_build/interface/generate_adapters.py +132 -132
- powertrain_build/interface/generate_hi_interface.py +87 -87
- powertrain_build/interface/generate_service.py +69 -69
- powertrain_build/interface/generate_wrappers.py +147 -147
- powertrain_build/interface/generation_utils.py +142 -142
- powertrain_build/interface/hal.py +194 -194
- powertrain_build/interface/model_yaml_verification.py +348 -348
- powertrain_build/interface/service.py +296 -296
- powertrain_build/interface/simulink.py +249 -249
- powertrain_build/interface/update_call_sources.py +180 -180
- powertrain_build/interface/update_model_yaml.py +186 -186
- powertrain_build/interface/zone_controller.py +362 -362
- powertrain_build/lib/__init__.py +4 -4
- powertrain_build/lib/helper_functions.py +127 -127
- powertrain_build/lib/logger.py +55 -55
- powertrain_build/matlab_scripts/CodeGen/BuildAutomationPyBuild.m +78 -78
- powertrain_build/matlab_scripts/CodeGen/Generate_A2L.m +154 -154
- powertrain_build/matlab_scripts/CodeGen/generateTLUnit.m +239 -239
- powertrain_build/matlab_scripts/CodeGen/getAsilClassification.m +28 -28
- powertrain_build/matlab_scripts/CodeGen/modelConfiguredForTL.m +28 -28
- powertrain_build/matlab_scripts/CodeGen/moveDefOutports.m +88 -88
- powertrain_build/matlab_scripts/CodeGen/parseCalMeasData.m +410 -410
- powertrain_build/matlab_scripts/CodeGen/parseCoreIdentifiers.m +139 -139
- powertrain_build/matlab_scripts/CodeGen/parseDIDs.m +141 -141
- powertrain_build/matlab_scripts/CodeGen/parseInPorts.m +106 -106
- powertrain_build/matlab_scripts/CodeGen/parseIncludeConfigs.m +25 -25
- powertrain_build/matlab_scripts/CodeGen/parseModelInfo.m +38 -38
- powertrain_build/matlab_scripts/CodeGen/parseNVM.m +81 -81
- powertrain_build/matlab_scripts/CodeGen/parseOutPorts.m +120 -120
- powertrain_build/matlab_scripts/CodeGen/parsePreProcBlks.m +23 -23
- powertrain_build/matlab_scripts/CodeGen/struct2JSON.m +128 -128
- powertrain_build/matlab_scripts/CodeGen/updateCodeSwConfig.m +31 -31
- powertrain_build/matlab_scripts/Init_PyBuild.m +91 -91
- powertrain_build/matlab_scripts/__init__.py +2 -2
- powertrain_build/matlab_scripts/helperFunctions/Get_Full_Name.m +46 -46
- powertrain_build/matlab_scripts/helperFunctions/Get_SrcLines.m +12 -12
- powertrain_build/matlab_scripts/helperFunctions/Init_Models.m +78 -78
- powertrain_build/matlab_scripts/helperFunctions/Init_Projects.m +67 -67
- powertrain_build/matlab_scripts/helperFunctions/Read_Units.m +34 -34
- powertrain_build/matlab_scripts/helperFunctions/SetProjectTimeSamples.m +26 -26
- powertrain_build/matlab_scripts/helperFunctions/Strip_Suffix.m +16 -16
- powertrain_build/matlab_scripts/helperFunctions/followLink.m +118 -118
- powertrain_build/matlab_scripts/helperFunctions/getCodeSwitches.m +50 -50
- powertrain_build/matlab_scripts/helperFunctions/getConsumerBlocks.m +30 -30
- powertrain_build/matlab_scripts/helperFunctions/getDefBlock.m +39 -39
- powertrain_build/matlab_scripts/helperFunctions/getDefOutport.m +58 -58
- powertrain_build/matlab_scripts/helperFunctions/getDstBlocks.m +19 -19
- powertrain_build/matlab_scripts/helperFunctions/getDstLines.m +13 -13
- powertrain_build/matlab_scripts/helperFunctions/getInterfaceSignals.m +37 -37
- powertrain_build/matlab_scripts/helperFunctions/getName.m +37 -37
- powertrain_build/matlab_scripts/helperFunctions/getPath.m +6 -6
- powertrain_build/matlab_scripts/helperFunctions/getProperValue.m +21 -21
- powertrain_build/matlab_scripts/helperFunctions/getSrcBlocks.m +19 -19
- powertrain_build/matlab_scripts/helperFunctions/getSrcLines.m +13 -13
- powertrain_build/matlab_scripts/helperFunctions/loadLibraries.m +10 -10
- powertrain_build/matlab_scripts/helperFunctions/loadjson.m +6 -6
- powertrain_build/matlab_scripts/helperFunctions/modifyEnumStructField.m +21 -21
- powertrain_build/matlab_scripts/helperFunctions/removeConfigDuplicates.m +31 -31
- powertrain_build/matlab_scripts/helperFunctions/sortSystemByClass.m +26 -26
- powertrain_build/matlab_scripts/helperFunctions/tl_getfast.m +89 -89
- powertrain_build/matlab_scripts/helperFunctions/topLevelSystem.m +20 -20
- powertrain_build/matlab_scripts/helperFunctions/updateModels.m +131 -131
- powertrain_build/memory_section.py +224 -224
- powertrain_build/nvm_def.py +729 -729
- powertrain_build/problem_logger.py +86 -86
- powertrain_build/pt_matlab.py +430 -430
- powertrain_build/pt_win32.py +144 -144
- powertrain_build/replace_compu_tab_ref.py +105 -105
- powertrain_build/rte_dummy.py +254 -254
- powertrain_build/sched_funcs.py +209 -207
- powertrain_build/signal.py +7 -7
- powertrain_build/signal_if_html_rep.py +221 -221
- powertrain_build/signal_if_html_rep_all.py +302 -302
- powertrain_build/signal_incons_html_rep.py +180 -180
- powertrain_build/signal_incons_html_rep_all.py +366 -366
- powertrain_build/signal_incons_html_rep_base.py +168 -168
- powertrain_build/signal_inconsistency_check.py +641 -641
- powertrain_build/signal_interfaces.py +864 -864
- powertrain_build/templates/Index_SigCheck_All.html +22 -22
- powertrain_build/templates/Index_SigIf_All.html +19 -19
- powertrain_build/types.py +218 -218
- powertrain_build/unit_configs.py +419 -419
- powertrain_build/user_defined_types.py +660 -660
- powertrain_build/versioncheck.py +66 -66
- powertrain_build/wrapper.py +512 -512
- powertrain_build/xlrd_csv.py +87 -87
- powertrain_build/zone_controller/__init__.py +4 -4
- powertrain_build/zone_controller/calibration.py +176 -176
- powertrain_build/zone_controller/composition_yaml.py +880 -878
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/METADATA +100 -100
- powertrain_build-1.13.3.dev3.dist-info/RECORD +130 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/WHEEL +1 -1
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/LICENSE +202 -202
- powertrain_build-1.13.3.dev3.dist-info/pbr.json +1 -0
- powertrain_build-1.13.1.dist-info/RECORD +0 -130
- powertrain_build-1.13.1.dist-info/pbr.json +0 -1
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/entry_points.txt +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/AUTHORS +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/licenses/NOTICE +0 -0
- {powertrain_build-1.13.1.dist-info → powertrain_build-1.13.3.dev3.dist-info}/top_level.txt +0 -0
|
@@ -1,717 +1,717 @@
|
|
|
1
|
-
# Copyright 2024 Volvo Car Corporation
|
|
2
|
-
# Licensed under Apache 2.0.
|
|
3
|
-
|
|
4
|
-
# -*- coding: utf-8 -*-
|
|
5
|
-
"""Module for creating a project a2l-file from a template."""
|
|
6
|
-
|
|
7
|
-
from string import Template
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class A2lProjectTemplate:
|
|
11
|
-
"""Class for A2l Project Template."""
|
|
12
|
-
def __init__(self, spm_a2l, asap2_version, project_name, events, ip_address, ip_port):
|
|
13
|
-
self.spm_a2l = spm_a2l
|
|
14
|
-
self.asap2_version = asap2_version
|
|
15
|
-
self.project_name = project_name
|
|
16
|
-
self.events = events
|
|
17
|
-
self.ip_address = ip_address
|
|
18
|
-
self.ip_port = ip_port
|
|
19
|
-
self.event_template = Template(
|
|
20
|
-
' /begin EVENT\n'
|
|
21
|
-
' "$name" /* EVENT CHANNEL NAME */\n'
|
|
22
|
-
' "$short_name" /* EVENT CHANNEL SHORT NAME */\n'
|
|
23
|
-
' $channel_id /* EVENT CHANNEL NUMBER */\n'
|
|
24
|
-
' DAQ_STIM\n'
|
|
25
|
-
' 0xFF\n'
|
|
26
|
-
' $time_cycle /* EVENT TIME CYCLE */\n'
|
|
27
|
-
' $time_unit /* EVENT TIME UNIT */\n'
|
|
28
|
-
' 0x00\n'
|
|
29
|
-
' /end EVENT\n'
|
|
30
|
-
)
|
|
31
|
-
self.template = Template(
|
|
32
|
-
'ASAP2_VERSION $asap2_version\n'
|
|
33
|
-
'/begin PROJECT $project_name ""\n'
|
|
34
|
-
' /begin MODULE XCP ""\n'
|
|
35
|
-
' /begin A2ML\n'
|
|
36
|
-
' struct Protocol_Layer {\n'
|
|
37
|
-
' uint; /* XCP protocol layer version, current 0x100 */\n'
|
|
38
|
-
' uint; /* T1 [ms] */\n'
|
|
39
|
-
' uint; /* T2 [ms] */\n'
|
|
40
|
-
' uint; /* T3 [ms] */\n'
|
|
41
|
-
' uint; /* T4 [ms] */\n'
|
|
42
|
-
' uint; /* T5 [ms] */\n'
|
|
43
|
-
' uint; /* T6 [ms] */\n'
|
|
44
|
-
' uint; /* T7 [ms] */\n'
|
|
45
|
-
' uchar; /* MAX_CTO */\n'
|
|
46
|
-
' uint; /* MAX_DTO */\n'
|
|
47
|
-
' enum {\n'
|
|
48
|
-
' "BYTE_ORDER_MSB_LAST" = 0,\n'
|
|
49
|
-
' "BYTE_ORDER_MSB_FIRST" = 1\n'
|
|
50
|
-
' };\n'
|
|
51
|
-
' enum {\n'
|
|
52
|
-
' "ADDRESS_GRANULARITY_BYTE" = 1,\n'
|
|
53
|
-
' "ADDRESS_GRANULARITY_WORD" = 2,\n'
|
|
54
|
-
' "ADDRESS_GRANULARITY_DWORD" = 4\n'
|
|
55
|
-
' };\n'
|
|
56
|
-
' taggedstruct {\n'
|
|
57
|
-
' ("OPTIONAL_CMD" enum {\n'
|
|
58
|
-
' "GET_COMM_MODE_INFO" = 251,\n'
|
|
59
|
-
' "GET_ID" = 250,\n'
|
|
60
|
-
' "SET_REQUEST" = 249,\n'
|
|
61
|
-
' "GET_SEED" = 248,\n'
|
|
62
|
-
' "UNLOCK" = 247,\n'
|
|
63
|
-
' "SET_MTA" = 246,\n'
|
|
64
|
-
' "UPLOAD" = 245,\n'
|
|
65
|
-
' "SHORT_UPLOAD" = 244,\n'
|
|
66
|
-
' "BUILD_CHECKSUM" = 243,\n'
|
|
67
|
-
' "TRANSPORT_LAYER_CMD" = 242,\n'
|
|
68
|
-
' "USER_CMD" = 241,\n'
|
|
69
|
-
' "DOWNLOAD" = 240,\n'
|
|
70
|
-
' "DOWNLOAD_NEXT" = 239,\n'
|
|
71
|
-
' "DOWNLOAD_MAX" = 238,\n'
|
|
72
|
-
' "SHORT_DOWNLOAD" = 237,\n'
|
|
73
|
-
' "MODIFY_BITS" = 236,\n'
|
|
74
|
-
' "SET_CAL_PAGE" = 235,\n'
|
|
75
|
-
' "GET_CAL_PAGE" = 234,\n'
|
|
76
|
-
' "GET_PAG_PROCESSOR_INFO" = 233,\n'
|
|
77
|
-
' "GET_SEGMENT_INFO" = 232,\n'
|
|
78
|
-
' "GET_PAGE_INFO" = 231,\n'
|
|
79
|
-
' "SET_SEGMENT_MODE" = 230,\n'
|
|
80
|
-
' "GET_SEGMENT_MODE" = 229,\n'
|
|
81
|
-
' "COPY_CAL_PAGE" = 228,\n'
|
|
82
|
-
' "CLEAR_DAQ_LIST" = 227,\n'
|
|
83
|
-
' "SET_DAQ_PTR" = 226,\n'
|
|
84
|
-
' "WRITE_DAQ" = 225,\n'
|
|
85
|
-
' "SET_DAQ_LIST_MODE" = 224,\n'
|
|
86
|
-
' "GET_DAQ_LIST_MODE" = 223,\n'
|
|
87
|
-
' "START_STOP_DAQ_LIST" = 222,\n'
|
|
88
|
-
' "START_STOP_SYNCH" = 221,\n'
|
|
89
|
-
' "GET_DAQ_CLOCK" = 220,\n'
|
|
90
|
-
' "READ_DAQ" = 219,\n'
|
|
91
|
-
' "GET_DAQ_PROCESSOR_INFO" = 218,\n'
|
|
92
|
-
' "GET_DAQ_RESOLUTION_INFO" = 217,\n'
|
|
93
|
-
' "GET_DAQ_LIST_INFO" = 216,\n'
|
|
94
|
-
' "GET_DAQ_EVENT_INFO" = 215,\n'
|
|
95
|
-
' "FREE_DAQ" = 214,\n'
|
|
96
|
-
' "ALLOC_DAQ" = 213,\n'
|
|
97
|
-
' "ALLOC_ODT" = 212,\n'
|
|
98
|
-
' "ALLOC_ODT_ENTRY" = 211,\n'
|
|
99
|
-
' "PROGRAM_START" = 210,\n'
|
|
100
|
-
' "PROGRAM_CLEAR" = 209,\n'
|
|
101
|
-
' "PROGRAM" = 208,\n'
|
|
102
|
-
' "PROGRAM_RESET" = 207,\n'
|
|
103
|
-
' "GET_PGM_PROCESSOR_INFO" = 206,\n'
|
|
104
|
-
' "GET_SECTOR_INFO" = 205,\n'
|
|
105
|
-
' "PROGRAM_PREPARE" = 204,\n'
|
|
106
|
-
' "PROGRAM_FORMAT" = 203,\n'
|
|
107
|
-
' "PROGRAM_NEXT" = 202,\n'
|
|
108
|
-
' "PROGRAM_MAX" = 201,\n'
|
|
109
|
-
' "PROGRAM_VERIFY" = 200\n'
|
|
110
|
-
' })*;\n'
|
|
111
|
-
' "COMMUNICATION_MODE_SUPPORTED" taggedunion {\n'
|
|
112
|
-
' "BLOCK" taggedstruct {\n'
|
|
113
|
-
' "SLAVE" ;\n'
|
|
114
|
-
' "MASTER" struct {\n'
|
|
115
|
-
' uchar; /* MAX_BS */\n'
|
|
116
|
-
' uchar; /* MIN_ST */\n'
|
|
117
|
-
' };\n'
|
|
118
|
-
' };\n'
|
|
119
|
-
' "INTERLEAVED" uchar; /* QUEUE_SIZE */\n'
|
|
120
|
-
' };\n'
|
|
121
|
-
' "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256];/* Name of the Seed&Key function */\n'
|
|
122
|
-
' };\n'
|
|
123
|
-
' };\n'
|
|
124
|
-
'\n'
|
|
125
|
-
' struct Daq {\n'
|
|
126
|
-
' enum {\n'
|
|
127
|
-
' "STATIC" = 0,\n'
|
|
128
|
-
' "DYNAMIC" = 1\n'
|
|
129
|
-
' };\n'
|
|
130
|
-
' uint; /* MAX_DAQ */\n'
|
|
131
|
-
' uint; /* MAX_EVENT_CHANNEL */\n'
|
|
132
|
-
' uchar; /* MIN_DAQ */\n'
|
|
133
|
-
' enum {\n'
|
|
134
|
-
' "OPTIMISATION_TYPE_DEFAULT" = 0,\n'
|
|
135
|
-
' "OPTIMISATION_TYPE_ODT_TYPE_16" = 1,\n'
|
|
136
|
-
' "OPTIMISATION_TYPE_ODT_TYPE_32" = 2,\n'
|
|
137
|
-
' "OPTIMISATION_TYPE_ODT_TYPE_64" = 3,\n'
|
|
138
|
-
' "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4,\n'
|
|
139
|
-
' "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5\n'
|
|
140
|
-
' };\n'
|
|
141
|
-
' enum {\n'
|
|
142
|
-
' "ADDRESS_EXTENSION_FREE" = 0,\n'
|
|
143
|
-
' "ADDRESS_EXTENSION_ODT" = 1,\n'
|
|
144
|
-
' "ADDRESS_EXTENSION_DAQ" = 3\n'
|
|
145
|
-
' };\n'
|
|
146
|
-
' enum {\n'
|
|
147
|
-
' "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0,\n'
|
|
148
|
-
' "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1,\n'
|
|
149
|
-
' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2,\n'
|
|
150
|
-
' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3\n'
|
|
151
|
-
' };\n'
|
|
152
|
-
' enum {\n'
|
|
153
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1,\n'
|
|
154
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2,\n'
|
|
155
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4,\n'
|
|
156
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8\n'
|
|
157
|
-
' };\n'
|
|
158
|
-
' uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */\n'
|
|
159
|
-
' enum {\n'
|
|
160
|
-
' "NO_OVERLOAD_INDICATION" = 0,\n'
|
|
161
|
-
' "OVERLOAD_INDICATION_PID" = 1,\n'
|
|
162
|
-
' "OVERLOAD_INDICATION_EVENT" = 2\n'
|
|
163
|
-
' };\n'
|
|
164
|
-
' taggedstruct {\n'
|
|
165
|
-
' "PRESCALER_SUPPORTED" ;\n'
|
|
166
|
-
' "RESUME_SUPPORTED" ;\n'
|
|
167
|
-
' block "STIM" struct {\n'
|
|
168
|
-
' enum {\n'
|
|
169
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1,\n'
|
|
170
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2,\n'
|
|
171
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4,\n'
|
|
172
|
-
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8\n'
|
|
173
|
-
' };\n'
|
|
174
|
-
' uchar; /* MAX_ODT_ENTRY_SIZE_STIM */\n'
|
|
175
|
-
' taggedstruct {\n'
|
|
176
|
-
' "BIT_STIM_SUPPORTED" ;\n'
|
|
177
|
-
' };\n'
|
|
178
|
-
' };\n'
|
|
179
|
-
' block "TIMESTAMP_SUPPORTED" struct {\n'
|
|
180
|
-
' uint; /* TIMESTAMP_TICKS */\n'
|
|
181
|
-
' enum {\n'
|
|
182
|
-
' "NO_TIME_STAMP" = 0,\n'
|
|
183
|
-
' "SIZE_BYTE" = 1,\n'
|
|
184
|
-
' "SIZE_WORD" = 2,\n'
|
|
185
|
-
' "SIZE_DWORD" = 4\n'
|
|
186
|
-
' };\n'
|
|
187
|
-
' enum {\n'
|
|
188
|
-
' "UNIT_1NS" = 0,\n'
|
|
189
|
-
' "UNIT_10NS" = 1,\n'
|
|
190
|
-
' "UNIT_100NS" = 2,\n'
|
|
191
|
-
' "UNIT_1US" = 3,\n'
|
|
192
|
-
' "UNIT_10US" = 4,\n'
|
|
193
|
-
' "UNIT_100US" = 5,\n'
|
|
194
|
-
' "UNIT_1MS" = 6,\n'
|
|
195
|
-
' "UNIT_10MS" = 7,\n'
|
|
196
|
-
' "UNIT_100MS" = 8,\n'
|
|
197
|
-
' "UNIT_1S" = 9\n'
|
|
198
|
-
' };\n'
|
|
199
|
-
' taggedstruct {\n'
|
|
200
|
-
' "TIMESTAMP_FIXED" ;\n'
|
|
201
|
-
' };\n'
|
|
202
|
-
' };\n'
|
|
203
|
-
' "PID_OFF_SUPPORTED" ;\n'
|
|
204
|
-
' (block "DAQ_LIST" struct {\n'
|
|
205
|
-
' uint; /* DAQ_LIST_NUMBER */\n'
|
|
206
|
-
' taggedstruct {\n'
|
|
207
|
-
' "DAQ_LIST_TYPE" enum {\n'
|
|
208
|
-
' "DAQ" = 1,\n'
|
|
209
|
-
' "STIM" = 2,\n'
|
|
210
|
-
' "DAQ_STIM" = 3\n'
|
|
211
|
-
' };\n'
|
|
212
|
-
' "MAX_ODT" uchar;\n'
|
|
213
|
-
' "MAX_ODT_ENTRIES" uchar;\n'
|
|
214
|
-
' "FIRST_PID" uchar;\n'
|
|
215
|
-
' "EVENT_FIXED" uint;\n'
|
|
216
|
-
' block "PREDEFINED" taggedstruct {\n'
|
|
217
|
-
' (block "ODT" struct {\n'
|
|
218
|
-
' uchar; /* ODT number */\n'
|
|
219
|
-
' taggedstruct {\n'
|
|
220
|
-
' ("ODT_ENTRY" struct {\n'
|
|
221
|
-
' uchar; /* ODT_ENTRY number */\n'
|
|
222
|
-
' ulong; /* address of element */\n'
|
|
223
|
-
' uchar; /* address extension of element */\n'
|
|
224
|
-
' uchar; /* size of element [AG] */\n'
|
|
225
|
-
' uchar; /* BIT_OFFSET */\n'
|
|
226
|
-
' })*;\n'
|
|
227
|
-
' };\n'
|
|
228
|
-
' })*;\n'
|
|
229
|
-
' };\n'
|
|
230
|
-
' };\n'
|
|
231
|
-
' })*;\n'
|
|
232
|
-
' (block "EVENT" struct {\n'
|
|
233
|
-
' char[101]; /* EVENT_CHANNEL_NAME */\n'
|
|
234
|
-
' char[9]; /* EVENT_CHANNEL_SHORT_NAME */\n'
|
|
235
|
-
' uint; /* EVENT_CHANNEL_NUMBER */\n'
|
|
236
|
-
' enum {\n'
|
|
237
|
-
' "DAQ" = 1,\n'
|
|
238
|
-
' "STIM" = 2,\n'
|
|
239
|
-
' "DAQ_STIM" = 3\n'
|
|
240
|
-
' };\n'
|
|
241
|
-
' uchar; /* MAX_DAQ_LIST */\n'
|
|
242
|
-
' uchar; /* TIME_CYCLE */\n'
|
|
243
|
-
' uchar; /* TIME_UNIT */\n'
|
|
244
|
-
' uchar; /* PRIORITY */\n'
|
|
245
|
-
' })*;\n'
|
|
246
|
-
' };\n'
|
|
247
|
-
' };\n'
|
|
248
|
-
'\n'
|
|
249
|
-
' taggedunion Daq_Event {\n'
|
|
250
|
-
' "FIXED_EVENT_LIST" taggedstruct {\n'
|
|
251
|
-
' ("EVENT" uint)*;\n'
|
|
252
|
-
' };\n'
|
|
253
|
-
' "VARIABLE" taggedstruct {\n'
|
|
254
|
-
' block "AVAILABLE_EVENT_LIST" taggedstruct {\n'
|
|
255
|
-
' ("EVENT" uint)*;\n'
|
|
256
|
-
' };\n'
|
|
257
|
-
' block "DEFAULT_EVENT_LIST" taggedstruct {\n'
|
|
258
|
-
' ("EVENT" uint)*;\n'
|
|
259
|
-
' };\n'
|
|
260
|
-
' };\n'
|
|
261
|
-
' };\n'
|
|
262
|
-
'\n'
|
|
263
|
-
' struct Pag {\n'
|
|
264
|
-
' uchar; /* MAX_SEGMENTS */\n'
|
|
265
|
-
' taggedstruct {\n'
|
|
266
|
-
' "FREEZE_SUPPORTED" ;\n'
|
|
267
|
-
' };\n'
|
|
268
|
-
' };\n'
|
|
269
|
-
'\n'
|
|
270
|
-
' struct Pgm {\n'
|
|
271
|
-
' enum {\n'
|
|
272
|
-
' "PGM_MODE_ABSOLUTE" = 1,\n'
|
|
273
|
-
' "PGM_MODE_FUNCTIONAL" = 2,\n'
|
|
274
|
-
' "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3\n'
|
|
275
|
-
' };\n'
|
|
276
|
-
' uchar; /* MAX_SECTORS */\n'
|
|
277
|
-
' uchar; /* MAX_CTO_PGM */\n'
|
|
278
|
-
' taggedstruct {\n'
|
|
279
|
-
' (block "SECTOR" struct {\n'
|
|
280
|
-
' char[101]; /* SECTOR_NAME */\n'
|
|
281
|
-
' uchar; /* SECTOR_NUMBER */\n'
|
|
282
|
-
' ulong; /* Address */\n'
|
|
283
|
-
' ulong; /* Length */\n'
|
|
284
|
-
' uchar; /* CLEAR_SEQUENCE_NUMBER */\n'
|
|
285
|
-
' uchar; /* PROGRAM_SEQUENCE_NUMBER */\n'
|
|
286
|
-
' uchar; /* PROGRAM_METHOD */\n'
|
|
287
|
-
' })*;\n'
|
|
288
|
-
' "COMMUNICATION_MODE_SUPPORTED" taggedunion {\n'
|
|
289
|
-
' "BLOCK" taggedstruct {\n'
|
|
290
|
-
' "SLAVE" ;\n'
|
|
291
|
-
' "MASTER" struct {\n'
|
|
292
|
-
' uchar; /* MAX_BS_PGM */\n'
|
|
293
|
-
' uchar; /* MIN_ST_PGM */\n'
|
|
294
|
-
' };\n'
|
|
295
|
-
' };\n'
|
|
296
|
-
' "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */\n'
|
|
297
|
-
' };\n'
|
|
298
|
-
' };\n'
|
|
299
|
-
' };\n'
|
|
300
|
-
'\n'
|
|
301
|
-
' struct Segment {\n'
|
|
302
|
-
' uchar; /* SEGMENT_NUMBER */\n'
|
|
303
|
-
' uchar; /* number of pages */\n'
|
|
304
|
-
' uchar; /* ADDRESS_EXTENSION */\n'
|
|
305
|
-
' uchar; /* COMPRESSION_METHOD */\n'
|
|
306
|
-
' uchar; /* ENCRYPTION_METHOD */\n'
|
|
307
|
-
' taggedstruct {\n'
|
|
308
|
-
' block "CHECKSUM" struct {\n'
|
|
309
|
-
' enum {\n'
|
|
310
|
-
' "XCP_ADD_11" = 1,\n'
|
|
311
|
-
' "XCP_ADD_12" = 2,\n'
|
|
312
|
-
' "XCP_ADD_14" = 3,\n'
|
|
313
|
-
' "XCP_ADD_22" = 4,\n'
|
|
314
|
-
' "XCP_ADD_24" = 5,\n'
|
|
315
|
-
' "XCP_ADD_44" = 6,\n'
|
|
316
|
-
' "XCP_CRC_16" = 7,\n'
|
|
317
|
-
' "XCP_CRC_16_CITT" = 8,\n'
|
|
318
|
-
' "XCP_CRC_32" = 9,\n'
|
|
319
|
-
' "XCP_USER_DEFINED" = 255\n'
|
|
320
|
-
' };\n'
|
|
321
|
-
' taggedstruct {\n'
|
|
322
|
-
' "MAX_BLOCK_SIZE" ulong;\n'
|
|
323
|
-
' "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum.DLL */\n'
|
|
324
|
-
' };\n'
|
|
325
|
-
' };\n'
|
|
326
|
-
' (block "PAGE" struct {\n'
|
|
327
|
-
' uchar; /* PAGE_NUMBER */\n'
|
|
328
|
-
' enum {\n'
|
|
329
|
-
' "ECU_ACCESS_NOT_ALLOWED" = 0,\n'
|
|
330
|
-
' "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1,\n'
|
|
331
|
-
' "ECU_ACCESS_WITH_XCP_ONLY" = 2,\n'
|
|
332
|
-
' "ECU_ACCESS_DONT_CARE" = 3\n'
|
|
333
|
-
' };\n'
|
|
334
|
-
' enum {\n'
|
|
335
|
-
' "XCP_READ_ACCESS_NOT_ALLOWED" = 0,\n'
|
|
336
|
-
' "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1,\n'
|
|
337
|
-
' "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2,\n'
|
|
338
|
-
' "XCP_READ_ACCESS_DONT_CARE" = 3\n'
|
|
339
|
-
' };\n'
|
|
340
|
-
' enum {\n'
|
|
341
|
-
' "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0,\n'
|
|
342
|
-
' "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1,\n'
|
|
343
|
-
' "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2,\n'
|
|
344
|
-
' "XCP_WRITE_ACCESS_DONT_CARE" = 3\n'
|
|
345
|
-
' };\n'
|
|
346
|
-
' taggedstruct {\n'
|
|
347
|
-
' "INIT_SEGMENT" uchar; /* references segment that initialises this page */\n'
|
|
348
|
-
' };\n'
|
|
349
|
-
' })*;\n'
|
|
350
|
-
' (block "ADDRESS_MAPPING" struct {\n'
|
|
351
|
-
' ulong; /* source address */\n'
|
|
352
|
-
' ulong; /* destination address */\n'
|
|
353
|
-
' ulong; /* length */\n'
|
|
354
|
-
' })*;\n'
|
|
355
|
-
' "PGM_VERIFY" ulong; /* verification value for PGM */\n'
|
|
356
|
-
' };\n'
|
|
357
|
-
' };\n'
|
|
358
|
-
'\n'
|
|
359
|
-
' taggedstruct Common_Parameters {\n'
|
|
360
|
-
' block "PROTOCOL_LAYER" struct Protocol_Layer;\n'
|
|
361
|
-
' block "SEGMENT" struct Segment;\n'
|
|
362
|
-
' block "DAQ" struct Daq;\n'
|
|
363
|
-
' block "PAG" struct Pag;\n'
|
|
364
|
-
' block "PGM" struct Pgm;\n'
|
|
365
|
-
' block "DAQ_EVENT" taggedunion Daq_Event;\n'
|
|
366
|
-
' };\n'
|
|
367
|
-
'\n'
|
|
368
|
-
' struct UDP_IP_Parameters {\n'
|
|
369
|
-
' uint; /* XCP on UDP_IP version, currently 0x0100 */\n'
|
|
370
|
-
' uint; /* PORT */\n'
|
|
371
|
-
' taggedunion {\n'
|
|
372
|
-
' "HOST_NAME" char[256];\n'
|
|
373
|
-
' "ADDRESS" char[15];\n'
|
|
374
|
-
' };\n'
|
|
375
|
-
' };\n'
|
|
376
|
-
'\n'
|
|
377
|
-
' block "IF_DATA" taggedunion if_data {\n'
|
|
378
|
-
' "XCP" struct {\n'
|
|
379
|
-
' taggedstruct Common_Parameters; /* default parameters */\n'
|
|
380
|
-
' taggedstruct {\n'
|
|
381
|
-
' block "XCP_ON_UDP_IP" struct {\n'
|
|
382
|
-
' struct UDP_IP_Parameters; /* specific for UDP_IP */\n'
|
|
383
|
-
' taggedstruct Common_Parameters; /* overruling of default */\n'
|
|
384
|
-
' };\n'
|
|
385
|
-
' };\n'
|
|
386
|
-
' };\n'
|
|
387
|
-
' };\n'
|
|
388
|
-
' /end A2ML\n'
|
|
389
|
-
'\n'
|
|
390
|
-
' /begin MOD_COMMON ""\n'
|
|
391
|
-
' BYTE_ORDER MSB_LAST\n'
|
|
392
|
-
' ALIGNMENT_BYTE 1\n'
|
|
393
|
-
' ALIGNMENT_WORD 1\n'
|
|
394
|
-
' ALIGNMENT_LONG 1\n'
|
|
395
|
-
' ALIGNMENT_FLOAT32_IEEE 1\n'
|
|
396
|
-
' ALIGNMENT_FLOAT64_IEEE 1\n'
|
|
397
|
-
' /end MOD_COMMON\n'
|
|
398
|
-
'\n'
|
|
399
|
-
' /begin IF_DATA XCP\n'
|
|
400
|
-
' /begin PROTOCOL_LAYER\n'
|
|
401
|
-
' 0x0100\n'
|
|
402
|
-
' 0x03E8\n'
|
|
403
|
-
' 0xC8\n'
|
|
404
|
-
' 0x00\n'
|
|
405
|
-
' 0x00\n'
|
|
406
|
-
' 0x00\n'
|
|
407
|
-
' 0x00\n'
|
|
408
|
-
' 0x00\n'
|
|
409
|
-
' 0x60\n'
|
|
410
|
-
' 0x12C\n'
|
|
411
|
-
' BYTE_ORDER_MSB_LAST\n'
|
|
412
|
-
' ADDRESS_GRANULARITY_BYTE\n'
|
|
413
|
-
' OPTIONAL_CMD ALLOC_ODT_ENTRY\n'
|
|
414
|
-
' OPTIONAL_CMD ALLOC_ODT\n'
|
|
415
|
-
' OPTIONAL_CMD ALLOC_DAQ\n'
|
|
416
|
-
' OPTIONAL_CMD FREE_DAQ\n'
|
|
417
|
-
' OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO\n'
|
|
418
|
-
' OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO\n'
|
|
419
|
-
' OPTIONAL_CMD START_STOP_SYNCH\n'
|
|
420
|
-
' OPTIONAL_CMD GET_DAQ_CLOCK\n'
|
|
421
|
-
' OPTIONAL_CMD START_STOP_DAQ_LIST\n'
|
|
422
|
-
' OPTIONAL_CMD GET_DAQ_LIST_MODE\n'
|
|
423
|
-
' OPTIONAL_CMD SET_DAQ_LIST_MODE\n'
|
|
424
|
-
' OPTIONAL_CMD WRITE_DAQ\n'
|
|
425
|
-
' OPTIONAL_CMD SET_DAQ_PTR\n'
|
|
426
|
-
' OPTIONAL_CMD CLEAR_DAQ_LIST\n'
|
|
427
|
-
' OPTIONAL_CMD SHORT_UPLOAD\n'
|
|
428
|
-
' OPTIONAL_CMD UPLOAD\n'
|
|
429
|
-
' OPTIONAL_CMD SET_MTA\n'
|
|
430
|
-
' OPTIONAL_CMD GET_ID\n'
|
|
431
|
-
' OPTIONAL_CMD GET_COMM_MODE_INFO\n'
|
|
432
|
-
' OPTIONAL_CMD BUILD_CHECKSUM\n'
|
|
433
|
-
' OPTIONAL_CMD SET_SEGMENT_MODE\n'
|
|
434
|
-
' OPTIONAL_CMD GET_SEGMENT_MODE\n'
|
|
435
|
-
' OPTIONAL_CMD SET_REQUEST\n'
|
|
436
|
-
' OPTIONAL_CMD GET_SEED\n'
|
|
437
|
-
' OPTIONAL_CMD UNLOCK\n'
|
|
438
|
-
' OPTIONAL_CMD COPY_CAL_PAGE\n'
|
|
439
|
-
' SEED_AND_KEY_EXTERNAL_FUNCTION Seed_Key.dll'
|
|
440
|
-
'/* Add name of seed & key dll file here.*/\n'
|
|
441
|
-
' /end PROTOCOL_LAYER\n'
|
|
442
|
-
'\n'
|
|
443
|
-
' /begin DAQ\n'
|
|
444
|
-
' DYNAMIC\n'
|
|
445
|
-
' 0x00\n'
|
|
446
|
-
' 0x06\n'
|
|
447
|
-
' 0x00\n'
|
|
448
|
-
' OPTIMISATION_TYPE_DEFAULT\n'
|
|
449
|
-
' ADDRESS_EXTENSION_FREE\n'
|
|
450
|
-
' IDENTIFICATION_FIELD_TYPE_ABSOLUTE\n'
|
|
451
|
-
' GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE\n'
|
|
452
|
-
' 0x60\n'
|
|
453
|
-
' NO_OVERLOAD_INDICATION\n'
|
|
454
|
-
' /begin TIMESTAMP_SUPPORTED\n'
|
|
455
|
-
' 0x01\n'
|
|
456
|
-
' SIZE_DWORD\n'
|
|
457
|
-
' UNIT_100US\n'
|
|
458
|
-
' TIMESTAMP_FIXED\n'
|
|
459
|
-
' /end TIMESTAMP_SUPPORTED\n'
|
|
460
|
-
'\n'
|
|
461
|
-
'$events\n'
|
|
462
|
-
' /end DAQ\n'
|
|
463
|
-
'\n'
|
|
464
|
-
' /begin PAG\n'
|
|
465
|
-
' 0x01\n'
|
|
466
|
-
' FREEZE_SUPPORTED\n'
|
|
467
|
-
' /end PAG\n'
|
|
468
|
-
' /begin PGM\n'
|
|
469
|
-
' PGM_MODE_ABSOLUTE\n'
|
|
470
|
-
' 0x01\n'
|
|
471
|
-
' 0x00\n'
|
|
472
|
-
' /begin SECTOR\n'
|
|
473
|
-
' "Sector"\n'
|
|
474
|
-
' 0x00\n'
|
|
475
|
-
' 0x22014\n'
|
|
476
|
-
' 0x38\n'
|
|
477
|
-
' 0x00\n'
|
|
478
|
-
' 0x00\n'
|
|
479
|
-
' 0x00\n'
|
|
480
|
-
' /end SECTOR\n'
|
|
481
|
-
' /end PGM\n'
|
|
482
|
-
'\n'
|
|
483
|
-
' /begin XCP_ON_UDP_IP\n'
|
|
484
|
-
' 0x0100\n'
|
|
485
|
-
' $ip_port\n'
|
|
486
|
-
' ADDRESS "$ip_address"\n'
|
|
487
|
-
' /end XCP_ON_UDP_IP\n'
|
|
488
|
-
' /end IF_DATA\n'
|
|
489
|
-
'\n'
|
|
490
|
-
' /begin MOD_PAR ""\n'
|
|
491
|
-
' /begin MEMORY_SEGMENT\n'
|
|
492
|
-
' caldata "caldata"\n'
|
|
493
|
-
' DATA FLASH INTERN 0x00000 0x0000 -1 -1 -1 -1 -1\n'
|
|
494
|
-
' /begin IF_DATA XCP\n'
|
|
495
|
-
' /begin SEGMENT\n'
|
|
496
|
-
' 0x00\n'
|
|
497
|
-
' 0x02\n'
|
|
498
|
-
' 0x00\n'
|
|
499
|
-
' 0x00\n'
|
|
500
|
-
' 0x00\n'
|
|
501
|
-
' /begin CHECKSUM\n'
|
|
502
|
-
' XCP_CRC_16_CITT\n'
|
|
503
|
-
' /end CHECKSUM\n'
|
|
504
|
-
' /begin PAGE\n'
|
|
505
|
-
' 0x00\n'
|
|
506
|
-
' ECU_ACCESS_WITH_XCP_ONLY\n'
|
|
507
|
-
' XCP_READ_ACCESS_WITH_ECU_ONLY\n'
|
|
508
|
-
' XCP_WRITE_ACCESS_NOT_ALLOWED\n'
|
|
509
|
-
' INIT_SEGMENT 0x00\n'
|
|
510
|
-
' /end PAGE\n'
|
|
511
|
-
' /begin PAGE\n'
|
|
512
|
-
' 0x01\n'
|
|
513
|
-
' ECU_ACCESS_WITH_XCP_ONLY\n'
|
|
514
|
-
' XCP_READ_ACCESS_WITH_ECU_ONLY\n'
|
|
515
|
-
' XCP_WRITE_ACCESS_WITH_ECU_ONLY\n'
|
|
516
|
-
' INIT_SEGMENT 0x00\n'
|
|
517
|
-
' /end PAGE\n'
|
|
518
|
-
' /end SEGMENT\n'
|
|
519
|
-
' /end IF_DATA\n'
|
|
520
|
-
' /end MEMORY_SEGMENT\n'
|
|
521
|
-
' /begin MEMORY_SEGMENT\n'
|
|
522
|
-
' text ".text"\n'
|
|
523
|
-
' CODE ROM INTERN 0x26030 0x72c10 -1 -1 -1 -1 -1\n'
|
|
524
|
-
' /begin IF_DATA XCP\n'
|
|
525
|
-
' /begin SEGMENT\n'
|
|
526
|
-
' 0x01\n'
|
|
527
|
-
' 0x01\n'
|
|
528
|
-
' 0x00\n'
|
|
529
|
-
' 0x00\n'
|
|
530
|
-
' 0x00\n'
|
|
531
|
-
' /begin CHECKSUM\n'
|
|
532
|
-
' XCP_CRC_16_CITT\n'
|
|
533
|
-
' /end CHECKSUM\n'
|
|
534
|
-
' /begin PAGE\n'
|
|
535
|
-
' 0x01\n'
|
|
536
|
-
' ECU_ACCESS_WITH_XCP_ONLY\n'
|
|
537
|
-
' XCP_READ_ACCESS_WITH_ECU_ONLY\n'
|
|
538
|
-
' XCP_WRITE_ACCESS_WITH_ECU_ONLY\n'
|
|
539
|
-
' INIT_SEGMENT 0x00\n'
|
|
540
|
-
' /end PAGE\n'
|
|
541
|
-
' /end SEGMENT\n'
|
|
542
|
-
' /end IF_DATA\n'
|
|
543
|
-
' /end MEMORY_SEGMENT\n'
|
|
544
|
-
' /end MOD_PAR\n'
|
|
545
|
-
'\n'
|
|
546
|
-
' /begin COMPU_METHOD BitSlice.CONVERSION ""\n'
|
|
547
|
-
' RAT_FUNC "%6.2f" ""\n'
|
|
548
|
-
' COEFFS 0 1 0 0 0 1\n'
|
|
549
|
-
' /end COMPU_METHOD\n'
|
|
550
|
-
'\n'
|
|
551
|
-
' /* SPM declarations start. */\n'
|
|
552
|
-
'\n'
|
|
553
|
-
'$spm_a2l\n'
|
|
554
|
-
'\n'
|
|
555
|
-
' /* SPM declarations end. */\n'
|
|
556
|
-
'\n'
|
|
557
|
-
' /begin RECORD_LAYOUT __UBYTE_Z\n'
|
|
558
|
-
' FNC_VALUES 1 UBYTE ROW_DIR DIRECT\n'
|
|
559
|
-
' /end RECORD_LAYOUT\n'
|
|
560
|
-
'\n'
|
|
561
|
-
' /begin RECORD_LAYOUT __UWORD_Z\n'
|
|
562
|
-
' FNC_VALUES 1 UWORD ROW_DIR DIRECT\n'
|
|
563
|
-
' /end RECORD_LAYOUT\n'
|
|
564
|
-
'\n'
|
|
565
|
-
' /begin RECORD_LAYOUT __ULONG_Z\n'
|
|
566
|
-
' FNC_VALUES 1 ULONG ROW_DIR DIRECT\n'
|
|
567
|
-
' /end RECORD_LAYOUT\n'
|
|
568
|
-
'\n'
|
|
569
|
-
' /begin RECORD_LAYOUT __SBYTE_Z\n'
|
|
570
|
-
' FNC_VALUES 1 SBYTE ROW_DIR DIRECT\n'
|
|
571
|
-
' /end RECORD_LAYOUT\n'
|
|
572
|
-
'\n'
|
|
573
|
-
' /begin RECORD_LAYOUT __SWORD_Z\n'
|
|
574
|
-
' FNC_VALUES 1 SWORD ROW_DIR DIRECT\n'
|
|
575
|
-
' /end RECORD_LAYOUT\n'
|
|
576
|
-
'\n'
|
|
577
|
-
' /begin RECORD_LAYOUT __SLONG_Z\n'
|
|
578
|
-
' FNC_VALUES 1 SLONG ROW_DIR DIRECT\n'
|
|
579
|
-
' /end RECORD_LAYOUT\n'
|
|
580
|
-
'\n'
|
|
581
|
-
' /begin RECORD_LAYOUT __FLOAT32_IEEE_Z\n'
|
|
582
|
-
' FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT\n'
|
|
583
|
-
' /end RECORD_LAYOUT\n'
|
|
584
|
-
'\n'
|
|
585
|
-
' /begin RECORD_LAYOUT __FLOAT64_IEEE_Z\n'
|
|
586
|
-
' FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT\n'
|
|
587
|
-
' /end RECORD_LAYOUT\n'
|
|
588
|
-
'\n'
|
|
589
|
-
' /begin RECORD_LAYOUT __UBYTE_S\n'
|
|
590
|
-
' FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT\n'
|
|
591
|
-
' /end RECORD_LAYOUT\n'
|
|
592
|
-
'\n'
|
|
593
|
-
' /begin RECORD_LAYOUT __UWORD_S\n'
|
|
594
|
-
' FNC_VALUES 1 UWORD COLUMN_DIR DIRECT\n'
|
|
595
|
-
' /end RECORD_LAYOUT\n'
|
|
596
|
-
'\n'
|
|
597
|
-
' /begin RECORD_LAYOUT __ULONG_S\n'
|
|
598
|
-
' FNC_VALUES 1 ULONG COLUMN_DIR DIRECT\n'
|
|
599
|
-
' /end RECORD_LAYOUT\n'
|
|
600
|
-
'\n'
|
|
601
|
-
' /begin RECORD_LAYOUT __SBYTE_S\n'
|
|
602
|
-
' FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT\n'
|
|
603
|
-
' /end RECORD_LAYOUT\n'
|
|
604
|
-
'\n'
|
|
605
|
-
' /begin RECORD_LAYOUT __SWORD_S\n'
|
|
606
|
-
' FNC_VALUES 1 SWORD COLUMN_DIR DIRECT\n'
|
|
607
|
-
' /end RECORD_LAYOUT\n'
|
|
608
|
-
'\n'
|
|
609
|
-
' /begin RECORD_LAYOUT __SLONG_S\n'
|
|
610
|
-
' FNC_VALUES 1 SLONG COLUMN_DIR DIRECT\n'
|
|
611
|
-
' /end RECORD_LAYOUT\n'
|
|
612
|
-
'\n'
|
|
613
|
-
' /begin RECORD_LAYOUT __FLOAT32_IEEE_S\n'
|
|
614
|
-
' FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT\n'
|
|
615
|
-
' /end RECORD_LAYOUT\n'
|
|
616
|
-
'\n'
|
|
617
|
-
' /begin RECORD_LAYOUT __FLOAT64_IEEE_S\n'
|
|
618
|
-
' FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT\n'
|
|
619
|
-
' /end RECORD_LAYOUT\n'
|
|
620
|
-
'\n'
|
|
621
|
-
' /begin RECORD_LAYOUT SSV__UBYTE_S\n'
|
|
622
|
-
' AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT\n'
|
|
623
|
-
' /end RECORD_LAYOUT\n'
|
|
624
|
-
'\n'
|
|
625
|
-
' /begin RECORD_LAYOUT SSV__UWORD_S\n'
|
|
626
|
-
' AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT\n'
|
|
627
|
-
' /end RECORD_LAYOUT\n'
|
|
628
|
-
'\n'
|
|
629
|
-
' /begin RECORD_LAYOUT SSV__ULONG_S\n'
|
|
630
|
-
' AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT\n'
|
|
631
|
-
' /end RECORD_LAYOUT\n'
|
|
632
|
-
'\n'
|
|
633
|
-
' /begin RECORD_LAYOUT SSV__SBYTE_S\n'
|
|
634
|
-
' AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT\n'
|
|
635
|
-
' /end RECORD_LAYOUT\n'
|
|
636
|
-
'\n'
|
|
637
|
-
' /begin RECORD_LAYOUT SSV__SWORD_S\n'
|
|
638
|
-
' AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT\n'
|
|
639
|
-
' /end RECORD_LAYOUT\n'
|
|
640
|
-
'\n'
|
|
641
|
-
' /begin RECORD_LAYOUT SSV__SLONG_S\n'
|
|
642
|
-
' AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT\n'
|
|
643
|
-
' /end RECORD_LAYOUT\n'
|
|
644
|
-
'\n'
|
|
645
|
-
' /begin RECORD_LAYOUT SSV__FLOAT32_IEEE_S\n'
|
|
646
|
-
' AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT\n'
|
|
647
|
-
' /end RECORD_LAYOUT\n'
|
|
648
|
-
'\n'
|
|
649
|
-
' /begin RECORD_LAYOUT SSV__FLOAT64_IEEE_S\n'
|
|
650
|
-
' AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT\n'
|
|
651
|
-
' /end RECORD_LAYOUT\n'
|
|
652
|
-
'\n'
|
|
653
|
-
' /end MODULE\n'
|
|
654
|
-
'/end PROJECT\n'
|
|
655
|
-
)
|
|
656
|
-
|
|
657
|
-
def render(self):
|
|
658
|
-
"""Render the complete A2L.
|
|
659
|
-
Returns:
|
|
660
|
-
a2l (str): The A2L for the project.
|
|
661
|
-
"""
|
|
662
|
-
event_a2l = ''
|
|
663
|
-
for event in self.events:
|
|
664
|
-
event_a2l += self.event_template.substitute(
|
|
665
|
-
name=event['name'],
|
|
666
|
-
short_name=event['name'],
|
|
667
|
-
channel_id=event['channel_id'],
|
|
668
|
-
time_cycle=event['time_cycle'],
|
|
669
|
-
time_unit=event['time_unit']
|
|
670
|
-
)
|
|
671
|
-
return self.template.substitute(
|
|
672
|
-
events=event_a2l,
|
|
673
|
-
asap2_version=self.asap2_version,
|
|
674
|
-
project_name=self.project_name.replace('-', '_'),
|
|
675
|
-
ip_address=self.ip_address,
|
|
676
|
-
ip_port=self.ip_port,
|
|
677
|
-
spm_a2l=self.spm_a2l
|
|
678
|
-
)
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
class A2lSilverTemplate:
|
|
682
|
-
"""Class for A2l Silver Template."""
|
|
683
|
-
def __init__(self, base_a2l):
|
|
684
|
-
"""Init."""
|
|
685
|
-
self.patched_a2l = self.basic_patching(base_a2l)
|
|
686
|
-
self.template = Template(
|
|
687
|
-
'/* QTronic Header */\n'
|
|
688
|
-
'ASAP2_VERSION 1 6\n'
|
|
689
|
-
'/begin PROJECT SPM ""\n'
|
|
690
|
-
'/begin MODULE SPM ""\n'
|
|
691
|
-
'\n'
|
|
692
|
-
'$base_a2l'
|
|
693
|
-
'\n'
|
|
694
|
-
'/end MODULE\n'
|
|
695
|
-
'/end PROJECT'
|
|
696
|
-
)
|
|
697
|
-
|
|
698
|
-
@staticmethod
|
|
699
|
-
def basic_patching(base_a2l):
|
|
700
|
-
"""Perform required basic patching.
|
|
701
|
-
|
|
702
|
-
Args:
|
|
703
|
-
base_a2l (str): Inital A2l content.
|
|
704
|
-
Returns:
|
|
705
|
-
(str): Patched A2L content.
|
|
706
|
-
"""
|
|
707
|
-
return "".join([char if ord(char) < 128 else "?" for char in base_a2l])
|
|
708
|
-
|
|
709
|
-
def render(self):
|
|
710
|
-
"""Render the complete A2L.
|
|
711
|
-
|
|
712
|
-
Returns:
|
|
713
|
-
(str): The patched A2L for Silver.
|
|
714
|
-
"""
|
|
715
|
-
if "ASAP2_VERSION" in self.patched_a2l[:999]:
|
|
716
|
-
return self.patched_a2l
|
|
717
|
-
return self.template.substitute(base_a2l=self.patched_a2l)
|
|
1
|
+
# Copyright 2024 Volvo Car Corporation
|
|
2
|
+
# Licensed under Apache 2.0.
|
|
3
|
+
|
|
4
|
+
# -*- coding: utf-8 -*-
|
|
5
|
+
"""Module for creating a project a2l-file from a template."""
|
|
6
|
+
|
|
7
|
+
from string import Template
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class A2lProjectTemplate:
|
|
11
|
+
"""Class for A2l Project Template."""
|
|
12
|
+
def __init__(self, spm_a2l, asap2_version, project_name, events, ip_address, ip_port):
|
|
13
|
+
self.spm_a2l = spm_a2l
|
|
14
|
+
self.asap2_version = asap2_version
|
|
15
|
+
self.project_name = project_name
|
|
16
|
+
self.events = events
|
|
17
|
+
self.ip_address = ip_address
|
|
18
|
+
self.ip_port = ip_port
|
|
19
|
+
self.event_template = Template(
|
|
20
|
+
' /begin EVENT\n'
|
|
21
|
+
' "$name" /* EVENT CHANNEL NAME */\n'
|
|
22
|
+
' "$short_name" /* EVENT CHANNEL SHORT NAME */\n'
|
|
23
|
+
' $channel_id /* EVENT CHANNEL NUMBER */\n'
|
|
24
|
+
' DAQ_STIM\n'
|
|
25
|
+
' 0xFF\n'
|
|
26
|
+
' $time_cycle /* EVENT TIME CYCLE */\n'
|
|
27
|
+
' $time_unit /* EVENT TIME UNIT */\n'
|
|
28
|
+
' 0x00\n'
|
|
29
|
+
' /end EVENT\n'
|
|
30
|
+
)
|
|
31
|
+
self.template = Template(
|
|
32
|
+
'ASAP2_VERSION $asap2_version\n'
|
|
33
|
+
'/begin PROJECT $project_name ""\n'
|
|
34
|
+
' /begin MODULE XCP ""\n'
|
|
35
|
+
' /begin A2ML\n'
|
|
36
|
+
' struct Protocol_Layer {\n'
|
|
37
|
+
' uint; /* XCP protocol layer version, current 0x100 */\n'
|
|
38
|
+
' uint; /* T1 [ms] */\n'
|
|
39
|
+
' uint; /* T2 [ms] */\n'
|
|
40
|
+
' uint; /* T3 [ms] */\n'
|
|
41
|
+
' uint; /* T4 [ms] */\n'
|
|
42
|
+
' uint; /* T5 [ms] */\n'
|
|
43
|
+
' uint; /* T6 [ms] */\n'
|
|
44
|
+
' uint; /* T7 [ms] */\n'
|
|
45
|
+
' uchar; /* MAX_CTO */\n'
|
|
46
|
+
' uint; /* MAX_DTO */\n'
|
|
47
|
+
' enum {\n'
|
|
48
|
+
' "BYTE_ORDER_MSB_LAST" = 0,\n'
|
|
49
|
+
' "BYTE_ORDER_MSB_FIRST" = 1\n'
|
|
50
|
+
' };\n'
|
|
51
|
+
' enum {\n'
|
|
52
|
+
' "ADDRESS_GRANULARITY_BYTE" = 1,\n'
|
|
53
|
+
' "ADDRESS_GRANULARITY_WORD" = 2,\n'
|
|
54
|
+
' "ADDRESS_GRANULARITY_DWORD" = 4\n'
|
|
55
|
+
' };\n'
|
|
56
|
+
' taggedstruct {\n'
|
|
57
|
+
' ("OPTIONAL_CMD" enum {\n'
|
|
58
|
+
' "GET_COMM_MODE_INFO" = 251,\n'
|
|
59
|
+
' "GET_ID" = 250,\n'
|
|
60
|
+
' "SET_REQUEST" = 249,\n'
|
|
61
|
+
' "GET_SEED" = 248,\n'
|
|
62
|
+
' "UNLOCK" = 247,\n'
|
|
63
|
+
' "SET_MTA" = 246,\n'
|
|
64
|
+
' "UPLOAD" = 245,\n'
|
|
65
|
+
' "SHORT_UPLOAD" = 244,\n'
|
|
66
|
+
' "BUILD_CHECKSUM" = 243,\n'
|
|
67
|
+
' "TRANSPORT_LAYER_CMD" = 242,\n'
|
|
68
|
+
' "USER_CMD" = 241,\n'
|
|
69
|
+
' "DOWNLOAD" = 240,\n'
|
|
70
|
+
' "DOWNLOAD_NEXT" = 239,\n'
|
|
71
|
+
' "DOWNLOAD_MAX" = 238,\n'
|
|
72
|
+
' "SHORT_DOWNLOAD" = 237,\n'
|
|
73
|
+
' "MODIFY_BITS" = 236,\n'
|
|
74
|
+
' "SET_CAL_PAGE" = 235,\n'
|
|
75
|
+
' "GET_CAL_PAGE" = 234,\n'
|
|
76
|
+
' "GET_PAG_PROCESSOR_INFO" = 233,\n'
|
|
77
|
+
' "GET_SEGMENT_INFO" = 232,\n'
|
|
78
|
+
' "GET_PAGE_INFO" = 231,\n'
|
|
79
|
+
' "SET_SEGMENT_MODE" = 230,\n'
|
|
80
|
+
' "GET_SEGMENT_MODE" = 229,\n'
|
|
81
|
+
' "COPY_CAL_PAGE" = 228,\n'
|
|
82
|
+
' "CLEAR_DAQ_LIST" = 227,\n'
|
|
83
|
+
' "SET_DAQ_PTR" = 226,\n'
|
|
84
|
+
' "WRITE_DAQ" = 225,\n'
|
|
85
|
+
' "SET_DAQ_LIST_MODE" = 224,\n'
|
|
86
|
+
' "GET_DAQ_LIST_MODE" = 223,\n'
|
|
87
|
+
' "START_STOP_DAQ_LIST" = 222,\n'
|
|
88
|
+
' "START_STOP_SYNCH" = 221,\n'
|
|
89
|
+
' "GET_DAQ_CLOCK" = 220,\n'
|
|
90
|
+
' "READ_DAQ" = 219,\n'
|
|
91
|
+
' "GET_DAQ_PROCESSOR_INFO" = 218,\n'
|
|
92
|
+
' "GET_DAQ_RESOLUTION_INFO" = 217,\n'
|
|
93
|
+
' "GET_DAQ_LIST_INFO" = 216,\n'
|
|
94
|
+
' "GET_DAQ_EVENT_INFO" = 215,\n'
|
|
95
|
+
' "FREE_DAQ" = 214,\n'
|
|
96
|
+
' "ALLOC_DAQ" = 213,\n'
|
|
97
|
+
' "ALLOC_ODT" = 212,\n'
|
|
98
|
+
' "ALLOC_ODT_ENTRY" = 211,\n'
|
|
99
|
+
' "PROGRAM_START" = 210,\n'
|
|
100
|
+
' "PROGRAM_CLEAR" = 209,\n'
|
|
101
|
+
' "PROGRAM" = 208,\n'
|
|
102
|
+
' "PROGRAM_RESET" = 207,\n'
|
|
103
|
+
' "GET_PGM_PROCESSOR_INFO" = 206,\n'
|
|
104
|
+
' "GET_SECTOR_INFO" = 205,\n'
|
|
105
|
+
' "PROGRAM_PREPARE" = 204,\n'
|
|
106
|
+
' "PROGRAM_FORMAT" = 203,\n'
|
|
107
|
+
' "PROGRAM_NEXT" = 202,\n'
|
|
108
|
+
' "PROGRAM_MAX" = 201,\n'
|
|
109
|
+
' "PROGRAM_VERIFY" = 200\n'
|
|
110
|
+
' })*;\n'
|
|
111
|
+
' "COMMUNICATION_MODE_SUPPORTED" taggedunion {\n'
|
|
112
|
+
' "BLOCK" taggedstruct {\n'
|
|
113
|
+
' "SLAVE" ;\n'
|
|
114
|
+
' "MASTER" struct {\n'
|
|
115
|
+
' uchar; /* MAX_BS */\n'
|
|
116
|
+
' uchar; /* MIN_ST */\n'
|
|
117
|
+
' };\n'
|
|
118
|
+
' };\n'
|
|
119
|
+
' "INTERLEAVED" uchar; /* QUEUE_SIZE */\n'
|
|
120
|
+
' };\n'
|
|
121
|
+
' "SEED_AND_KEY_EXTERNAL_FUNCTION" char[256];/* Name of the Seed&Key function */\n'
|
|
122
|
+
' };\n'
|
|
123
|
+
' };\n'
|
|
124
|
+
'\n'
|
|
125
|
+
' struct Daq {\n'
|
|
126
|
+
' enum {\n'
|
|
127
|
+
' "STATIC" = 0,\n'
|
|
128
|
+
' "DYNAMIC" = 1\n'
|
|
129
|
+
' };\n'
|
|
130
|
+
' uint; /* MAX_DAQ */\n'
|
|
131
|
+
' uint; /* MAX_EVENT_CHANNEL */\n'
|
|
132
|
+
' uchar; /* MIN_DAQ */\n'
|
|
133
|
+
' enum {\n'
|
|
134
|
+
' "OPTIMISATION_TYPE_DEFAULT" = 0,\n'
|
|
135
|
+
' "OPTIMISATION_TYPE_ODT_TYPE_16" = 1,\n'
|
|
136
|
+
' "OPTIMISATION_TYPE_ODT_TYPE_32" = 2,\n'
|
|
137
|
+
' "OPTIMISATION_TYPE_ODT_TYPE_64" = 3,\n'
|
|
138
|
+
' "OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT" = 4,\n'
|
|
139
|
+
' "OPTIMISATION_TYPE_MAX_ENTRY_SIZE" = 5\n'
|
|
140
|
+
' };\n'
|
|
141
|
+
' enum {\n'
|
|
142
|
+
' "ADDRESS_EXTENSION_FREE" = 0,\n'
|
|
143
|
+
' "ADDRESS_EXTENSION_ODT" = 1,\n'
|
|
144
|
+
' "ADDRESS_EXTENSION_DAQ" = 3\n'
|
|
145
|
+
' };\n'
|
|
146
|
+
' enum {\n'
|
|
147
|
+
' "IDENTIFICATION_FIELD_TYPE_ABSOLUTE" = 0,\n'
|
|
148
|
+
' "IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE" = 1,\n'
|
|
149
|
+
' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD" = 2,\n'
|
|
150
|
+
' "IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED" = 3\n'
|
|
151
|
+
' };\n'
|
|
152
|
+
' enum {\n'
|
|
153
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE" = 1,\n'
|
|
154
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD" = 2,\n'
|
|
155
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD" = 4,\n'
|
|
156
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG" = 8\n'
|
|
157
|
+
' };\n'
|
|
158
|
+
' uchar; /* MAX_ODT_ENTRY_SIZE_DAQ */\n'
|
|
159
|
+
' enum {\n'
|
|
160
|
+
' "NO_OVERLOAD_INDICATION" = 0,\n'
|
|
161
|
+
' "OVERLOAD_INDICATION_PID" = 1,\n'
|
|
162
|
+
' "OVERLOAD_INDICATION_EVENT" = 2\n'
|
|
163
|
+
' };\n'
|
|
164
|
+
' taggedstruct {\n'
|
|
165
|
+
' "PRESCALER_SUPPORTED" ;\n'
|
|
166
|
+
' "RESUME_SUPPORTED" ;\n'
|
|
167
|
+
' block "STIM" struct {\n'
|
|
168
|
+
' enum {\n'
|
|
169
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE" = 1,\n'
|
|
170
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD" = 2,\n'
|
|
171
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD" = 4,\n'
|
|
172
|
+
' "GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG" = 8\n'
|
|
173
|
+
' };\n'
|
|
174
|
+
' uchar; /* MAX_ODT_ENTRY_SIZE_STIM */\n'
|
|
175
|
+
' taggedstruct {\n'
|
|
176
|
+
' "BIT_STIM_SUPPORTED" ;\n'
|
|
177
|
+
' };\n'
|
|
178
|
+
' };\n'
|
|
179
|
+
' block "TIMESTAMP_SUPPORTED" struct {\n'
|
|
180
|
+
' uint; /* TIMESTAMP_TICKS */\n'
|
|
181
|
+
' enum {\n'
|
|
182
|
+
' "NO_TIME_STAMP" = 0,\n'
|
|
183
|
+
' "SIZE_BYTE" = 1,\n'
|
|
184
|
+
' "SIZE_WORD" = 2,\n'
|
|
185
|
+
' "SIZE_DWORD" = 4\n'
|
|
186
|
+
' };\n'
|
|
187
|
+
' enum {\n'
|
|
188
|
+
' "UNIT_1NS" = 0,\n'
|
|
189
|
+
' "UNIT_10NS" = 1,\n'
|
|
190
|
+
' "UNIT_100NS" = 2,\n'
|
|
191
|
+
' "UNIT_1US" = 3,\n'
|
|
192
|
+
' "UNIT_10US" = 4,\n'
|
|
193
|
+
' "UNIT_100US" = 5,\n'
|
|
194
|
+
' "UNIT_1MS" = 6,\n'
|
|
195
|
+
' "UNIT_10MS" = 7,\n'
|
|
196
|
+
' "UNIT_100MS" = 8,\n'
|
|
197
|
+
' "UNIT_1S" = 9\n'
|
|
198
|
+
' };\n'
|
|
199
|
+
' taggedstruct {\n'
|
|
200
|
+
' "TIMESTAMP_FIXED" ;\n'
|
|
201
|
+
' };\n'
|
|
202
|
+
' };\n'
|
|
203
|
+
' "PID_OFF_SUPPORTED" ;\n'
|
|
204
|
+
' (block "DAQ_LIST" struct {\n'
|
|
205
|
+
' uint; /* DAQ_LIST_NUMBER */\n'
|
|
206
|
+
' taggedstruct {\n'
|
|
207
|
+
' "DAQ_LIST_TYPE" enum {\n'
|
|
208
|
+
' "DAQ" = 1,\n'
|
|
209
|
+
' "STIM" = 2,\n'
|
|
210
|
+
' "DAQ_STIM" = 3\n'
|
|
211
|
+
' };\n'
|
|
212
|
+
' "MAX_ODT" uchar;\n'
|
|
213
|
+
' "MAX_ODT_ENTRIES" uchar;\n'
|
|
214
|
+
' "FIRST_PID" uchar;\n'
|
|
215
|
+
' "EVENT_FIXED" uint;\n'
|
|
216
|
+
' block "PREDEFINED" taggedstruct {\n'
|
|
217
|
+
' (block "ODT" struct {\n'
|
|
218
|
+
' uchar; /* ODT number */\n'
|
|
219
|
+
' taggedstruct {\n'
|
|
220
|
+
' ("ODT_ENTRY" struct {\n'
|
|
221
|
+
' uchar; /* ODT_ENTRY number */\n'
|
|
222
|
+
' ulong; /* address of element */\n'
|
|
223
|
+
' uchar; /* address extension of element */\n'
|
|
224
|
+
' uchar; /* size of element [AG] */\n'
|
|
225
|
+
' uchar; /* BIT_OFFSET */\n'
|
|
226
|
+
' })*;\n'
|
|
227
|
+
' };\n'
|
|
228
|
+
' })*;\n'
|
|
229
|
+
' };\n'
|
|
230
|
+
' };\n'
|
|
231
|
+
' })*;\n'
|
|
232
|
+
' (block "EVENT" struct {\n'
|
|
233
|
+
' char[101]; /* EVENT_CHANNEL_NAME */\n'
|
|
234
|
+
' char[9]; /* EVENT_CHANNEL_SHORT_NAME */\n'
|
|
235
|
+
' uint; /* EVENT_CHANNEL_NUMBER */\n'
|
|
236
|
+
' enum {\n'
|
|
237
|
+
' "DAQ" = 1,\n'
|
|
238
|
+
' "STIM" = 2,\n'
|
|
239
|
+
' "DAQ_STIM" = 3\n'
|
|
240
|
+
' };\n'
|
|
241
|
+
' uchar; /* MAX_DAQ_LIST */\n'
|
|
242
|
+
' uchar; /* TIME_CYCLE */\n'
|
|
243
|
+
' uchar; /* TIME_UNIT */\n'
|
|
244
|
+
' uchar; /* PRIORITY */\n'
|
|
245
|
+
' })*;\n'
|
|
246
|
+
' };\n'
|
|
247
|
+
' };\n'
|
|
248
|
+
'\n'
|
|
249
|
+
' taggedunion Daq_Event {\n'
|
|
250
|
+
' "FIXED_EVENT_LIST" taggedstruct {\n'
|
|
251
|
+
' ("EVENT" uint)*;\n'
|
|
252
|
+
' };\n'
|
|
253
|
+
' "VARIABLE" taggedstruct {\n'
|
|
254
|
+
' block "AVAILABLE_EVENT_LIST" taggedstruct {\n'
|
|
255
|
+
' ("EVENT" uint)*;\n'
|
|
256
|
+
' };\n'
|
|
257
|
+
' block "DEFAULT_EVENT_LIST" taggedstruct {\n'
|
|
258
|
+
' ("EVENT" uint)*;\n'
|
|
259
|
+
' };\n'
|
|
260
|
+
' };\n'
|
|
261
|
+
' };\n'
|
|
262
|
+
'\n'
|
|
263
|
+
' struct Pag {\n'
|
|
264
|
+
' uchar; /* MAX_SEGMENTS */\n'
|
|
265
|
+
' taggedstruct {\n'
|
|
266
|
+
' "FREEZE_SUPPORTED" ;\n'
|
|
267
|
+
' };\n'
|
|
268
|
+
' };\n'
|
|
269
|
+
'\n'
|
|
270
|
+
' struct Pgm {\n'
|
|
271
|
+
' enum {\n'
|
|
272
|
+
' "PGM_MODE_ABSOLUTE" = 1,\n'
|
|
273
|
+
' "PGM_MODE_FUNCTIONAL" = 2,\n'
|
|
274
|
+
' "PGM_MODE_ABSOLUTE_AND_FUNCTIONAL" = 3\n'
|
|
275
|
+
' };\n'
|
|
276
|
+
' uchar; /* MAX_SECTORS */\n'
|
|
277
|
+
' uchar; /* MAX_CTO_PGM */\n'
|
|
278
|
+
' taggedstruct {\n'
|
|
279
|
+
' (block "SECTOR" struct {\n'
|
|
280
|
+
' char[101]; /* SECTOR_NAME */\n'
|
|
281
|
+
' uchar; /* SECTOR_NUMBER */\n'
|
|
282
|
+
' ulong; /* Address */\n'
|
|
283
|
+
' ulong; /* Length */\n'
|
|
284
|
+
' uchar; /* CLEAR_SEQUENCE_NUMBER */\n'
|
|
285
|
+
' uchar; /* PROGRAM_SEQUENCE_NUMBER */\n'
|
|
286
|
+
' uchar; /* PROGRAM_METHOD */\n'
|
|
287
|
+
' })*;\n'
|
|
288
|
+
' "COMMUNICATION_MODE_SUPPORTED" taggedunion {\n'
|
|
289
|
+
' "BLOCK" taggedstruct {\n'
|
|
290
|
+
' "SLAVE" ;\n'
|
|
291
|
+
' "MASTER" struct {\n'
|
|
292
|
+
' uchar; /* MAX_BS_PGM */\n'
|
|
293
|
+
' uchar; /* MIN_ST_PGM */\n'
|
|
294
|
+
' };\n'
|
|
295
|
+
' };\n'
|
|
296
|
+
' "INTERLEAVED" uchar; /* QUEUE_SIZE_PGM */\n'
|
|
297
|
+
' };\n'
|
|
298
|
+
' };\n'
|
|
299
|
+
' };\n'
|
|
300
|
+
'\n'
|
|
301
|
+
' struct Segment {\n'
|
|
302
|
+
' uchar; /* SEGMENT_NUMBER */\n'
|
|
303
|
+
' uchar; /* number of pages */\n'
|
|
304
|
+
' uchar; /* ADDRESS_EXTENSION */\n'
|
|
305
|
+
' uchar; /* COMPRESSION_METHOD */\n'
|
|
306
|
+
' uchar; /* ENCRYPTION_METHOD */\n'
|
|
307
|
+
' taggedstruct {\n'
|
|
308
|
+
' block "CHECKSUM" struct {\n'
|
|
309
|
+
' enum {\n'
|
|
310
|
+
' "XCP_ADD_11" = 1,\n'
|
|
311
|
+
' "XCP_ADD_12" = 2,\n'
|
|
312
|
+
' "XCP_ADD_14" = 3,\n'
|
|
313
|
+
' "XCP_ADD_22" = 4,\n'
|
|
314
|
+
' "XCP_ADD_24" = 5,\n'
|
|
315
|
+
' "XCP_ADD_44" = 6,\n'
|
|
316
|
+
' "XCP_CRC_16" = 7,\n'
|
|
317
|
+
' "XCP_CRC_16_CITT" = 8,\n'
|
|
318
|
+
' "XCP_CRC_32" = 9,\n'
|
|
319
|
+
' "XCP_USER_DEFINED" = 255\n'
|
|
320
|
+
' };\n'
|
|
321
|
+
' taggedstruct {\n'
|
|
322
|
+
' "MAX_BLOCK_SIZE" ulong;\n'
|
|
323
|
+
' "EXTERNAL_FUNCTION" char[256]; /* Name of the Checksum.DLL */\n'
|
|
324
|
+
' };\n'
|
|
325
|
+
' };\n'
|
|
326
|
+
' (block "PAGE" struct {\n'
|
|
327
|
+
' uchar; /* PAGE_NUMBER */\n'
|
|
328
|
+
' enum {\n'
|
|
329
|
+
' "ECU_ACCESS_NOT_ALLOWED" = 0,\n'
|
|
330
|
+
' "ECU_ACCESS_WITHOUT_XCP_ONLY" = 1,\n'
|
|
331
|
+
' "ECU_ACCESS_WITH_XCP_ONLY" = 2,\n'
|
|
332
|
+
' "ECU_ACCESS_DONT_CARE" = 3\n'
|
|
333
|
+
' };\n'
|
|
334
|
+
' enum {\n'
|
|
335
|
+
' "XCP_READ_ACCESS_NOT_ALLOWED" = 0,\n'
|
|
336
|
+
' "XCP_READ_ACCESS_WITHOUT_ECU_ONLY" = 1,\n'
|
|
337
|
+
' "XCP_READ_ACCESS_WITH_ECU_ONLY" = 2,\n'
|
|
338
|
+
' "XCP_READ_ACCESS_DONT_CARE" = 3\n'
|
|
339
|
+
' };\n'
|
|
340
|
+
' enum {\n'
|
|
341
|
+
' "XCP_WRITE_ACCESS_NOT_ALLOWED" = 0,\n'
|
|
342
|
+
' "XCP_WRITE_ACCESS_WITHOUT_ECU_ONLY" = 1,\n'
|
|
343
|
+
' "XCP_WRITE_ACCESS_WITH_ECU_ONLY" = 2,\n'
|
|
344
|
+
' "XCP_WRITE_ACCESS_DONT_CARE" = 3\n'
|
|
345
|
+
' };\n'
|
|
346
|
+
' taggedstruct {\n'
|
|
347
|
+
' "INIT_SEGMENT" uchar; /* references segment that initialises this page */\n'
|
|
348
|
+
' };\n'
|
|
349
|
+
' })*;\n'
|
|
350
|
+
' (block "ADDRESS_MAPPING" struct {\n'
|
|
351
|
+
' ulong; /* source address */\n'
|
|
352
|
+
' ulong; /* destination address */\n'
|
|
353
|
+
' ulong; /* length */\n'
|
|
354
|
+
' })*;\n'
|
|
355
|
+
' "PGM_VERIFY" ulong; /* verification value for PGM */\n'
|
|
356
|
+
' };\n'
|
|
357
|
+
' };\n'
|
|
358
|
+
'\n'
|
|
359
|
+
' taggedstruct Common_Parameters {\n'
|
|
360
|
+
' block "PROTOCOL_LAYER" struct Protocol_Layer;\n'
|
|
361
|
+
' block "SEGMENT" struct Segment;\n'
|
|
362
|
+
' block "DAQ" struct Daq;\n'
|
|
363
|
+
' block "PAG" struct Pag;\n'
|
|
364
|
+
' block "PGM" struct Pgm;\n'
|
|
365
|
+
' block "DAQ_EVENT" taggedunion Daq_Event;\n'
|
|
366
|
+
' };\n'
|
|
367
|
+
'\n'
|
|
368
|
+
' struct UDP_IP_Parameters {\n'
|
|
369
|
+
' uint; /* XCP on UDP_IP version, currently 0x0100 */\n'
|
|
370
|
+
' uint; /* PORT */\n'
|
|
371
|
+
' taggedunion {\n'
|
|
372
|
+
' "HOST_NAME" char[256];\n'
|
|
373
|
+
' "ADDRESS" char[15];\n'
|
|
374
|
+
' };\n'
|
|
375
|
+
' };\n'
|
|
376
|
+
'\n'
|
|
377
|
+
' block "IF_DATA" taggedunion if_data {\n'
|
|
378
|
+
' "XCP" struct {\n'
|
|
379
|
+
' taggedstruct Common_Parameters; /* default parameters */\n'
|
|
380
|
+
' taggedstruct {\n'
|
|
381
|
+
' block "XCP_ON_UDP_IP" struct {\n'
|
|
382
|
+
' struct UDP_IP_Parameters; /* specific for UDP_IP */\n'
|
|
383
|
+
' taggedstruct Common_Parameters; /* overruling of default */\n'
|
|
384
|
+
' };\n'
|
|
385
|
+
' };\n'
|
|
386
|
+
' };\n'
|
|
387
|
+
' };\n'
|
|
388
|
+
' /end A2ML\n'
|
|
389
|
+
'\n'
|
|
390
|
+
' /begin MOD_COMMON ""\n'
|
|
391
|
+
' BYTE_ORDER MSB_LAST\n'
|
|
392
|
+
' ALIGNMENT_BYTE 1\n'
|
|
393
|
+
' ALIGNMENT_WORD 1\n'
|
|
394
|
+
' ALIGNMENT_LONG 1\n'
|
|
395
|
+
' ALIGNMENT_FLOAT32_IEEE 1\n'
|
|
396
|
+
' ALIGNMENT_FLOAT64_IEEE 1\n'
|
|
397
|
+
' /end MOD_COMMON\n'
|
|
398
|
+
'\n'
|
|
399
|
+
' /begin IF_DATA XCP\n'
|
|
400
|
+
' /begin PROTOCOL_LAYER\n'
|
|
401
|
+
' 0x0100\n'
|
|
402
|
+
' 0x03E8\n'
|
|
403
|
+
' 0xC8\n'
|
|
404
|
+
' 0x00\n'
|
|
405
|
+
' 0x00\n'
|
|
406
|
+
' 0x00\n'
|
|
407
|
+
' 0x00\n'
|
|
408
|
+
' 0x00\n'
|
|
409
|
+
' 0x60\n'
|
|
410
|
+
' 0x12C\n'
|
|
411
|
+
' BYTE_ORDER_MSB_LAST\n'
|
|
412
|
+
' ADDRESS_GRANULARITY_BYTE\n'
|
|
413
|
+
' OPTIONAL_CMD ALLOC_ODT_ENTRY\n'
|
|
414
|
+
' OPTIONAL_CMD ALLOC_ODT\n'
|
|
415
|
+
' OPTIONAL_CMD ALLOC_DAQ\n'
|
|
416
|
+
' OPTIONAL_CMD FREE_DAQ\n'
|
|
417
|
+
' OPTIONAL_CMD GET_DAQ_RESOLUTION_INFO\n'
|
|
418
|
+
' OPTIONAL_CMD GET_DAQ_PROCESSOR_INFO\n'
|
|
419
|
+
' OPTIONAL_CMD START_STOP_SYNCH\n'
|
|
420
|
+
' OPTIONAL_CMD GET_DAQ_CLOCK\n'
|
|
421
|
+
' OPTIONAL_CMD START_STOP_DAQ_LIST\n'
|
|
422
|
+
' OPTIONAL_CMD GET_DAQ_LIST_MODE\n'
|
|
423
|
+
' OPTIONAL_CMD SET_DAQ_LIST_MODE\n'
|
|
424
|
+
' OPTIONAL_CMD WRITE_DAQ\n'
|
|
425
|
+
' OPTIONAL_CMD SET_DAQ_PTR\n'
|
|
426
|
+
' OPTIONAL_CMD CLEAR_DAQ_LIST\n'
|
|
427
|
+
' OPTIONAL_CMD SHORT_UPLOAD\n'
|
|
428
|
+
' OPTIONAL_CMD UPLOAD\n'
|
|
429
|
+
' OPTIONAL_CMD SET_MTA\n'
|
|
430
|
+
' OPTIONAL_CMD GET_ID\n'
|
|
431
|
+
' OPTIONAL_CMD GET_COMM_MODE_INFO\n'
|
|
432
|
+
' OPTIONAL_CMD BUILD_CHECKSUM\n'
|
|
433
|
+
' OPTIONAL_CMD SET_SEGMENT_MODE\n'
|
|
434
|
+
' OPTIONAL_CMD GET_SEGMENT_MODE\n'
|
|
435
|
+
' OPTIONAL_CMD SET_REQUEST\n'
|
|
436
|
+
' OPTIONAL_CMD GET_SEED\n'
|
|
437
|
+
' OPTIONAL_CMD UNLOCK\n'
|
|
438
|
+
' OPTIONAL_CMD COPY_CAL_PAGE\n'
|
|
439
|
+
' SEED_AND_KEY_EXTERNAL_FUNCTION Seed_Key.dll'
|
|
440
|
+
'/* Add name of seed & key dll file here.*/\n'
|
|
441
|
+
' /end PROTOCOL_LAYER\n'
|
|
442
|
+
'\n'
|
|
443
|
+
' /begin DAQ\n'
|
|
444
|
+
' DYNAMIC\n'
|
|
445
|
+
' 0x00\n'
|
|
446
|
+
' 0x06\n'
|
|
447
|
+
' 0x00\n'
|
|
448
|
+
' OPTIMISATION_TYPE_DEFAULT\n'
|
|
449
|
+
' ADDRESS_EXTENSION_FREE\n'
|
|
450
|
+
' IDENTIFICATION_FIELD_TYPE_ABSOLUTE\n'
|
|
451
|
+
' GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE\n'
|
|
452
|
+
' 0x60\n'
|
|
453
|
+
' NO_OVERLOAD_INDICATION\n'
|
|
454
|
+
' /begin TIMESTAMP_SUPPORTED\n'
|
|
455
|
+
' 0x01\n'
|
|
456
|
+
' SIZE_DWORD\n'
|
|
457
|
+
' UNIT_100US\n'
|
|
458
|
+
' TIMESTAMP_FIXED\n'
|
|
459
|
+
' /end TIMESTAMP_SUPPORTED\n'
|
|
460
|
+
'\n'
|
|
461
|
+
'$events\n'
|
|
462
|
+
' /end DAQ\n'
|
|
463
|
+
'\n'
|
|
464
|
+
' /begin PAG\n'
|
|
465
|
+
' 0x01\n'
|
|
466
|
+
' FREEZE_SUPPORTED\n'
|
|
467
|
+
' /end PAG\n'
|
|
468
|
+
' /begin PGM\n'
|
|
469
|
+
' PGM_MODE_ABSOLUTE\n'
|
|
470
|
+
' 0x01\n'
|
|
471
|
+
' 0x00\n'
|
|
472
|
+
' /begin SECTOR\n'
|
|
473
|
+
' "Sector"\n'
|
|
474
|
+
' 0x00\n'
|
|
475
|
+
' 0x22014\n'
|
|
476
|
+
' 0x38\n'
|
|
477
|
+
' 0x00\n'
|
|
478
|
+
' 0x00\n'
|
|
479
|
+
' 0x00\n'
|
|
480
|
+
' /end SECTOR\n'
|
|
481
|
+
' /end PGM\n'
|
|
482
|
+
'\n'
|
|
483
|
+
' /begin XCP_ON_UDP_IP\n'
|
|
484
|
+
' 0x0100\n'
|
|
485
|
+
' $ip_port\n'
|
|
486
|
+
' ADDRESS "$ip_address"\n'
|
|
487
|
+
' /end XCP_ON_UDP_IP\n'
|
|
488
|
+
' /end IF_DATA\n'
|
|
489
|
+
'\n'
|
|
490
|
+
' /begin MOD_PAR ""\n'
|
|
491
|
+
' /begin MEMORY_SEGMENT\n'
|
|
492
|
+
' caldata "caldata"\n'
|
|
493
|
+
' DATA FLASH INTERN 0x00000 0x0000 -1 -1 -1 -1 -1\n'
|
|
494
|
+
' /begin IF_DATA XCP\n'
|
|
495
|
+
' /begin SEGMENT\n'
|
|
496
|
+
' 0x00\n'
|
|
497
|
+
' 0x02\n'
|
|
498
|
+
' 0x00\n'
|
|
499
|
+
' 0x00\n'
|
|
500
|
+
' 0x00\n'
|
|
501
|
+
' /begin CHECKSUM\n'
|
|
502
|
+
' XCP_CRC_16_CITT\n'
|
|
503
|
+
' /end CHECKSUM\n'
|
|
504
|
+
' /begin PAGE\n'
|
|
505
|
+
' 0x00\n'
|
|
506
|
+
' ECU_ACCESS_WITH_XCP_ONLY\n'
|
|
507
|
+
' XCP_READ_ACCESS_WITH_ECU_ONLY\n'
|
|
508
|
+
' XCP_WRITE_ACCESS_NOT_ALLOWED\n'
|
|
509
|
+
' INIT_SEGMENT 0x00\n'
|
|
510
|
+
' /end PAGE\n'
|
|
511
|
+
' /begin PAGE\n'
|
|
512
|
+
' 0x01\n'
|
|
513
|
+
' ECU_ACCESS_WITH_XCP_ONLY\n'
|
|
514
|
+
' XCP_READ_ACCESS_WITH_ECU_ONLY\n'
|
|
515
|
+
' XCP_WRITE_ACCESS_WITH_ECU_ONLY\n'
|
|
516
|
+
' INIT_SEGMENT 0x00\n'
|
|
517
|
+
' /end PAGE\n'
|
|
518
|
+
' /end SEGMENT\n'
|
|
519
|
+
' /end IF_DATA\n'
|
|
520
|
+
' /end MEMORY_SEGMENT\n'
|
|
521
|
+
' /begin MEMORY_SEGMENT\n'
|
|
522
|
+
' text ".text"\n'
|
|
523
|
+
' CODE ROM INTERN 0x26030 0x72c10 -1 -1 -1 -1 -1\n'
|
|
524
|
+
' /begin IF_DATA XCP\n'
|
|
525
|
+
' /begin SEGMENT\n'
|
|
526
|
+
' 0x01\n'
|
|
527
|
+
' 0x01\n'
|
|
528
|
+
' 0x00\n'
|
|
529
|
+
' 0x00\n'
|
|
530
|
+
' 0x00\n'
|
|
531
|
+
' /begin CHECKSUM\n'
|
|
532
|
+
' XCP_CRC_16_CITT\n'
|
|
533
|
+
' /end CHECKSUM\n'
|
|
534
|
+
' /begin PAGE\n'
|
|
535
|
+
' 0x01\n'
|
|
536
|
+
' ECU_ACCESS_WITH_XCP_ONLY\n'
|
|
537
|
+
' XCP_READ_ACCESS_WITH_ECU_ONLY\n'
|
|
538
|
+
' XCP_WRITE_ACCESS_WITH_ECU_ONLY\n'
|
|
539
|
+
' INIT_SEGMENT 0x00\n'
|
|
540
|
+
' /end PAGE\n'
|
|
541
|
+
' /end SEGMENT\n'
|
|
542
|
+
' /end IF_DATA\n'
|
|
543
|
+
' /end MEMORY_SEGMENT\n'
|
|
544
|
+
' /end MOD_PAR\n'
|
|
545
|
+
'\n'
|
|
546
|
+
' /begin COMPU_METHOD BitSlice.CONVERSION ""\n'
|
|
547
|
+
' RAT_FUNC "%6.2f" ""\n'
|
|
548
|
+
' COEFFS 0 1 0 0 0 1\n'
|
|
549
|
+
' /end COMPU_METHOD\n'
|
|
550
|
+
'\n'
|
|
551
|
+
' /* SPM declarations start. */\n'
|
|
552
|
+
'\n'
|
|
553
|
+
'$spm_a2l\n'
|
|
554
|
+
'\n'
|
|
555
|
+
' /* SPM declarations end. */\n'
|
|
556
|
+
'\n'
|
|
557
|
+
' /begin RECORD_LAYOUT __UBYTE_Z\n'
|
|
558
|
+
' FNC_VALUES 1 UBYTE ROW_DIR DIRECT\n'
|
|
559
|
+
' /end RECORD_LAYOUT\n'
|
|
560
|
+
'\n'
|
|
561
|
+
' /begin RECORD_LAYOUT __UWORD_Z\n'
|
|
562
|
+
' FNC_VALUES 1 UWORD ROW_DIR DIRECT\n'
|
|
563
|
+
' /end RECORD_LAYOUT\n'
|
|
564
|
+
'\n'
|
|
565
|
+
' /begin RECORD_LAYOUT __ULONG_Z\n'
|
|
566
|
+
' FNC_VALUES 1 ULONG ROW_DIR DIRECT\n'
|
|
567
|
+
' /end RECORD_LAYOUT\n'
|
|
568
|
+
'\n'
|
|
569
|
+
' /begin RECORD_LAYOUT __SBYTE_Z\n'
|
|
570
|
+
' FNC_VALUES 1 SBYTE ROW_DIR DIRECT\n'
|
|
571
|
+
' /end RECORD_LAYOUT\n'
|
|
572
|
+
'\n'
|
|
573
|
+
' /begin RECORD_LAYOUT __SWORD_Z\n'
|
|
574
|
+
' FNC_VALUES 1 SWORD ROW_DIR DIRECT\n'
|
|
575
|
+
' /end RECORD_LAYOUT\n'
|
|
576
|
+
'\n'
|
|
577
|
+
' /begin RECORD_LAYOUT __SLONG_Z\n'
|
|
578
|
+
' FNC_VALUES 1 SLONG ROW_DIR DIRECT\n'
|
|
579
|
+
' /end RECORD_LAYOUT\n'
|
|
580
|
+
'\n'
|
|
581
|
+
' /begin RECORD_LAYOUT __FLOAT32_IEEE_Z\n'
|
|
582
|
+
' FNC_VALUES 1 FLOAT32_IEEE ROW_DIR DIRECT\n'
|
|
583
|
+
' /end RECORD_LAYOUT\n'
|
|
584
|
+
'\n'
|
|
585
|
+
' /begin RECORD_LAYOUT __FLOAT64_IEEE_Z\n'
|
|
586
|
+
' FNC_VALUES 1 FLOAT64_IEEE ROW_DIR DIRECT\n'
|
|
587
|
+
' /end RECORD_LAYOUT\n'
|
|
588
|
+
'\n'
|
|
589
|
+
' /begin RECORD_LAYOUT __UBYTE_S\n'
|
|
590
|
+
' FNC_VALUES 1 UBYTE COLUMN_DIR DIRECT\n'
|
|
591
|
+
' /end RECORD_LAYOUT\n'
|
|
592
|
+
'\n'
|
|
593
|
+
' /begin RECORD_LAYOUT __UWORD_S\n'
|
|
594
|
+
' FNC_VALUES 1 UWORD COLUMN_DIR DIRECT\n'
|
|
595
|
+
' /end RECORD_LAYOUT\n'
|
|
596
|
+
'\n'
|
|
597
|
+
' /begin RECORD_LAYOUT __ULONG_S\n'
|
|
598
|
+
' FNC_VALUES 1 ULONG COLUMN_DIR DIRECT\n'
|
|
599
|
+
' /end RECORD_LAYOUT\n'
|
|
600
|
+
'\n'
|
|
601
|
+
' /begin RECORD_LAYOUT __SBYTE_S\n'
|
|
602
|
+
' FNC_VALUES 1 SBYTE COLUMN_DIR DIRECT\n'
|
|
603
|
+
' /end RECORD_LAYOUT\n'
|
|
604
|
+
'\n'
|
|
605
|
+
' /begin RECORD_LAYOUT __SWORD_S\n'
|
|
606
|
+
' FNC_VALUES 1 SWORD COLUMN_DIR DIRECT\n'
|
|
607
|
+
' /end RECORD_LAYOUT\n'
|
|
608
|
+
'\n'
|
|
609
|
+
' /begin RECORD_LAYOUT __SLONG_S\n'
|
|
610
|
+
' FNC_VALUES 1 SLONG COLUMN_DIR DIRECT\n'
|
|
611
|
+
' /end RECORD_LAYOUT\n'
|
|
612
|
+
'\n'
|
|
613
|
+
' /begin RECORD_LAYOUT __FLOAT32_IEEE_S\n'
|
|
614
|
+
' FNC_VALUES 1 FLOAT32_IEEE COLUMN_DIR DIRECT\n'
|
|
615
|
+
' /end RECORD_LAYOUT\n'
|
|
616
|
+
'\n'
|
|
617
|
+
' /begin RECORD_LAYOUT __FLOAT64_IEEE_S\n'
|
|
618
|
+
' FNC_VALUES 1 FLOAT64_IEEE COLUMN_DIR DIRECT\n'
|
|
619
|
+
' /end RECORD_LAYOUT\n'
|
|
620
|
+
'\n'
|
|
621
|
+
' /begin RECORD_LAYOUT SSV__UBYTE_S\n'
|
|
622
|
+
' AXIS_PTS_X 1 UBYTE INDEX_INCR DIRECT\n'
|
|
623
|
+
' /end RECORD_LAYOUT\n'
|
|
624
|
+
'\n'
|
|
625
|
+
' /begin RECORD_LAYOUT SSV__UWORD_S\n'
|
|
626
|
+
' AXIS_PTS_X 1 UWORD INDEX_INCR DIRECT\n'
|
|
627
|
+
' /end RECORD_LAYOUT\n'
|
|
628
|
+
'\n'
|
|
629
|
+
' /begin RECORD_LAYOUT SSV__ULONG_S\n'
|
|
630
|
+
' AXIS_PTS_X 1 ULONG INDEX_INCR DIRECT\n'
|
|
631
|
+
' /end RECORD_LAYOUT\n'
|
|
632
|
+
'\n'
|
|
633
|
+
' /begin RECORD_LAYOUT SSV__SBYTE_S\n'
|
|
634
|
+
' AXIS_PTS_X 1 SBYTE INDEX_INCR DIRECT\n'
|
|
635
|
+
' /end RECORD_LAYOUT\n'
|
|
636
|
+
'\n'
|
|
637
|
+
' /begin RECORD_LAYOUT SSV__SWORD_S\n'
|
|
638
|
+
' AXIS_PTS_X 1 SWORD INDEX_INCR DIRECT\n'
|
|
639
|
+
' /end RECORD_LAYOUT\n'
|
|
640
|
+
'\n'
|
|
641
|
+
' /begin RECORD_LAYOUT SSV__SLONG_S\n'
|
|
642
|
+
' AXIS_PTS_X 1 SLONG INDEX_INCR DIRECT\n'
|
|
643
|
+
' /end RECORD_LAYOUT\n'
|
|
644
|
+
'\n'
|
|
645
|
+
' /begin RECORD_LAYOUT SSV__FLOAT32_IEEE_S\n'
|
|
646
|
+
' AXIS_PTS_X 1 FLOAT32_IEEE INDEX_INCR DIRECT\n'
|
|
647
|
+
' /end RECORD_LAYOUT\n'
|
|
648
|
+
'\n'
|
|
649
|
+
' /begin RECORD_LAYOUT SSV__FLOAT64_IEEE_S\n'
|
|
650
|
+
' AXIS_PTS_X 1 FLOAT64_IEEE INDEX_INCR DIRECT\n'
|
|
651
|
+
' /end RECORD_LAYOUT\n'
|
|
652
|
+
'\n'
|
|
653
|
+
' /end MODULE\n'
|
|
654
|
+
'/end PROJECT\n'
|
|
655
|
+
)
|
|
656
|
+
|
|
657
|
+
def render(self):
|
|
658
|
+
"""Render the complete A2L.
|
|
659
|
+
Returns:
|
|
660
|
+
a2l (str): The A2L for the project.
|
|
661
|
+
"""
|
|
662
|
+
event_a2l = ''
|
|
663
|
+
for event in self.events:
|
|
664
|
+
event_a2l += self.event_template.substitute(
|
|
665
|
+
name=event['name'],
|
|
666
|
+
short_name=event['name'],
|
|
667
|
+
channel_id=event['channel_id'],
|
|
668
|
+
time_cycle=event['time_cycle'],
|
|
669
|
+
time_unit=event['time_unit']
|
|
670
|
+
)
|
|
671
|
+
return self.template.substitute(
|
|
672
|
+
events=event_a2l,
|
|
673
|
+
asap2_version=self.asap2_version,
|
|
674
|
+
project_name=self.project_name.replace('-', '_'),
|
|
675
|
+
ip_address=self.ip_address,
|
|
676
|
+
ip_port=self.ip_port,
|
|
677
|
+
spm_a2l=self.spm_a2l
|
|
678
|
+
)
|
|
679
|
+
|
|
680
|
+
|
|
681
|
+
class A2lSilverTemplate:
|
|
682
|
+
"""Class for A2l Silver Template."""
|
|
683
|
+
def __init__(self, base_a2l):
|
|
684
|
+
"""Init."""
|
|
685
|
+
self.patched_a2l = self.basic_patching(base_a2l)
|
|
686
|
+
self.template = Template(
|
|
687
|
+
'/* QTronic Header */\n'
|
|
688
|
+
'ASAP2_VERSION 1 6\n'
|
|
689
|
+
'/begin PROJECT SPM ""\n'
|
|
690
|
+
'/begin MODULE SPM ""\n'
|
|
691
|
+
'\n'
|
|
692
|
+
'$base_a2l'
|
|
693
|
+
'\n'
|
|
694
|
+
'/end MODULE\n'
|
|
695
|
+
'/end PROJECT'
|
|
696
|
+
)
|
|
697
|
+
|
|
698
|
+
@staticmethod
|
|
699
|
+
def basic_patching(base_a2l):
|
|
700
|
+
"""Perform required basic patching.
|
|
701
|
+
|
|
702
|
+
Args:
|
|
703
|
+
base_a2l (str): Inital A2l content.
|
|
704
|
+
Returns:
|
|
705
|
+
(str): Patched A2L content.
|
|
706
|
+
"""
|
|
707
|
+
return "".join([char if ord(char) < 128 else "?" for char in base_a2l])
|
|
708
|
+
|
|
709
|
+
def render(self):
|
|
710
|
+
"""Render the complete A2L.
|
|
711
|
+
|
|
712
|
+
Returns:
|
|
713
|
+
(str): The patched A2L for Silver.
|
|
714
|
+
"""
|
|
715
|
+
if "ASAP2_VERSION" in self.patched_a2l[:999]:
|
|
716
|
+
return self.patched_a2l
|
|
717
|
+
return self.template.substitute(base_a2l=self.patched_a2l)
|