Coverage Report

Created: 2025-08-04 07:15

/src/wireshark/epan/dissectors/file-ttl.c
Line
Count
Source (jump to first uncovered line)
1
/* file-ttl.c
2
 *
3
 * TTX Logger (TTL) file format from TTTech Computertechnik AG dissector by
4
 * Giovanni Musto <giovanni.musto@partner.italdesign.it>
5
 * Copyright 2024 Giovanni Musto
6
 *
7
 * This dissector allows to parse TTL files.
8
 * You can find the PDF with the documentation of the format at
9
 * https://servicearea.tttech-auto.com/ (registration and approval required).
10
 *
11
 * SPDX-License-Identifier: GPL-2.0-or-later
12
 */
13
14
#include "config.h"
15
16
#include <epan/proto.h>
17
#include <epan/packet.h>
18
#include <epan/expert.h>
19
#include <epan/tvbuff.h>
20
#include <epan/tfs.h>
21
22
#include <wiretap/ttl.h>
23
24
static int proto_ttl;
25
26
static dissector_handle_t xml_handle;
27
28
static int hf_ttl_header;
29
static int hf_ttl_header_magic;
30
static int hf_ttl_header_file_format_version;
31
static int hf_ttl_header_block_size;
32
static int hf_ttl_header_header_size;
33
static int hf_ttl_header_logfile_info;
34
35
static int hf_ttl_header_logfile_info_logger_sn;
36
static int hf_ttl_header_logfile_info_logger_sw_version;
37
static int hf_ttl_header_logfile_info_measurement_creation_date;
38
static int hf_ttl_header_logfile_info_measurement_creation_timestamp;
39
static int hf_ttl_header_logfile_info_supplier_name;
40
static int hf_ttl_header_logfile_info_description;
41
static int hf_ttl_header_logfile_info_hw_version;
42
static int hf_ttl_header_logfile_info_configuration_file_name;
43
static int hf_ttl_header_logfile_info_tracefile_sorted;
44
static int hf_ttl_header_logfile_info_tracefile_split_index;
45
static int hf_ttl_header_logfile_info_completion_date;
46
static int hf_ttl_header_logfile_info_completion_timestamp;
47
static int hf_ttl_header_logfile_info_tc_sw_bootloader_version;
48
static int hf_ttl_header_logfile_info_tc_sw_firmware_version;
49
static int hf_ttl_header_logfile_info_most25_fw_version;
50
static int hf_ttl_header_logfile_info_most150_fw_version;
51
static int hf_ttl_header_logfile_info_split_file_creation_date;
52
static int hf_ttl_header_logfile_info_split_file_creation_timestamp;
53
static int hf_ttl_header_logfile_info_unused_bytes;
54
static int hf_ttl_header_logfile_info_sleep_counter;
55
static int hf_ttl_header_logfile_info_reserved_bytes;
56
static int hf_ttl_header_configuration;
57
58
static int hf_ttl_trace_data;
59
static int hf_ttl_block;
60
static int hf_ttl_trace_data_entry;
61
static int hf_ttl_trace_data_entry_size;
62
static int hf_ttl_trace_data_entry_type;
63
static int hf_ttl_trace_data_entry_dest_addr;
64
static int hf_ttl_trace_data_entry_dest_addr_cascade;
65
static int hf_ttl_trace_data_entry_dest_addr_device_logger;
66
static int hf_ttl_trace_data_entry_dest_addr_device_tap;
67
static int hf_ttl_trace_data_entry_dest_addr_function_fpga;
68
static int hf_ttl_trace_data_entry_dest_addr_function_atom;
69
static int hf_ttl_trace_data_entry_dest_addr_function_tricore1;
70
static int hf_ttl_trace_data_entry_dest_addr_function_tricore2;
71
static int hf_ttl_trace_data_entry_dest_addr_function_tricore3;
72
static int hf_ttl_trace_data_entry_dest_addr_function_tda4x;
73
static int hf_ttl_trace_data_entry_dest_addr_function_fpgaa;
74
static int hf_ttl_trace_data_entry_dest_addr_function_fpgab;
75
static int hf_ttl_trace_data_entry_dest_addr_function_pt15_fpga;
76
static int hf_ttl_trace_data_entry_dest_addr_function_pt20_fpga;
77
static int hf_ttl_trace_data_entry_dest_addr_function_pc3_fpga;
78
static int hf_ttl_trace_data_entry_dest_addr_function_pc3_aurix;
79
static int hf_ttl_trace_data_entry_dest_addr_function_zelda_canfd;
80
static int hf_ttl_trace_data_entry_dest_addr_function_zelda_lin;
81
static int hf_ttl_trace_data_entry_dest_addr_function_unknown;
82
static int hf_ttl_trace_data_entry_meta1;
83
static int hf_ttl_trace_data_entry_meta1_frame_duplication;
84
static int hf_ttl_trace_data_entry_meta1_compressed_format;
85
static int hf_ttl_trace_data_entry_meta1_timestamp_source;
86
static int hf_ttl_trace_data_entry_src_addr;
87
static int hf_ttl_trace_data_entry_src_addr_cascade;
88
static int hf_ttl_trace_data_entry_src_addr_device_logger;
89
static int hf_ttl_trace_data_entry_src_addr_device_tap;
90
static int hf_ttl_trace_data_entry_src_addr_function_fpga;
91
static int hf_ttl_trace_data_entry_src_addr_function_atom;
92
static int hf_ttl_trace_data_entry_src_addr_function_tricore1;
93
static int hf_ttl_trace_data_entry_src_addr_function_tricore2;
94
static int hf_ttl_trace_data_entry_src_addr_function_tricore3;
95
static int hf_ttl_trace_data_entry_src_addr_function_tda4x;
96
static int hf_ttl_trace_data_entry_src_addr_function_fpgaa;
97
static int hf_ttl_trace_data_entry_src_addr_function_fpgab;
98
static int hf_ttl_trace_data_entry_src_addr_function_pt15_fpga;
99
static int hf_ttl_trace_data_entry_src_addr_function_pt20_fpga;
100
static int hf_ttl_trace_data_entry_src_addr_function_pc3_fpga;
101
static int hf_ttl_trace_data_entry_src_addr_function_pc3_aurix;
102
static int hf_ttl_trace_data_entry_src_addr_function_zelda_canfd;
103
static int hf_ttl_trace_data_entry_src_addr_function_zelda_lin;
104
static int hf_ttl_trace_data_entry_src_addr_function_unknown;
105
static int hf_ttl_trace_data_entry_meta2;
106
static int hf_ttl_trace_data_entry_ackmode;
107
108
static int hf_ttl_trace_data_entry_status_information;
109
static int hf_ttl_trace_data_entry_status_info_eth_type;
110
static int hf_ttl_trace_data_entry_status_info_can_flags;
111
static int hf_ttl_trace_data_entry_status_info_can_valid_frame;
112
static int hf_ttl_trace_data_entry_status_info_can_remote_frame;
113
static int hf_ttl_trace_data_entry_status_info_can_bus_off;
114
static int hf_ttl_trace_data_entry_status_info_can_matched;
115
static int hf_ttl_trace_data_entry_status_info_can_error_code;
116
static int hf_ttl_trace_data_entry_status_info_can_res;
117
static int hf_ttl_trace_data_entry_status_info_can_dlc;
118
static int hf_ttl_trace_data_entry_status_info_can_ide;
119
static int hf_ttl_trace_data_entry_status_info_can_edl;
120
static int hf_ttl_trace_data_entry_status_info_can_brs;
121
static int hf_ttl_trace_data_entry_status_info_can_esi;
122
static int hf_ttl_trace_data_entry_status_info_lin_pid;
123
static int hf_ttl_trace_data_entry_status_info_lin_id;
124
static int hf_ttl_trace_data_entry_status_info_lin_parity;
125
static int hf_ttl_trace_data_entry_status_info_lin_flags;
126
static int hf_ttl_trace_data_entry_status_info_lin_parity_error;
127
static int hf_ttl_trace_data_entry_status_info_lin_sync_error;
128
static int hf_ttl_trace_data_entry_status_info_lin_2_checksum_error;
129
static int hf_ttl_trace_data_entry_status_info_lin_1_checksum_error;
130
static int hf_ttl_trace_data_entry_status_info_lin_no_data_error;
131
static int hf_ttl_trace_data_entry_status_info_lin_abort_error;
132
static int hf_ttl_trace_data_entry_status_info_lin_unused;
133
static int hf_ttl_trace_data_entry_status_info_fr_type;
134
static int hf_ttl_trace_data_entry_status_info_fr_matched;
135
static int hf_ttl_trace_data_entry_status_info_fr_res1;
136
static int hf_ttl_trace_data_entry_status_info_fr_error_flags;
137
static int hf_ttl_trace_data_entry_status_info_fr_fss_error;
138
static int hf_ttl_trace_data_entry_status_info_fr_bss_error;
139
static int hf_ttl_trace_data_entry_status_info_fr_fes_error;
140
static int hf_ttl_trace_data_entry_status_info_fr_frame_crc_error;
141
static int hf_ttl_trace_data_entry_status_info_fr_header_crc_error;
142
static int hf_ttl_trace_data_entry_status_info_fr_idle_error;
143
static int hf_ttl_trace_data_entry_status_info_fr_res2;
144
static int hf_ttl_trace_data_entry_status_info_fr_res3;
145
static int hf_ttl_trace_data_entry_status_info_fr_low_phase_exceeded;
146
static int hf_ttl_trace_data_entry_status_info_fr_res4;
147
static int hf_ttl_trace_data_entry_status_info_fr_pulse_flags;
148
static int hf_ttl_trace_data_entry_status_info_fr_cas;
149
static int hf_ttl_trace_data_entry_status_info_fr_mts;
150
static int hf_ttl_trace_data_entry_status_info_fr_wup;
151
static int hf_ttl_trace_data_entry_status_info_fr_res5;
152
153
static int hf_ttl_trace_data_entry_timestamp;
154
static int hf_ttl_trace_data_entry_unparsed;
155
static int hf_ttl_trace_data_entry_payload;
156
static int hf_ttl_eth_phy_status;
157
static int hf_ttl_eth_phy_status_data;
158
static int hf_ttl_eth_phy_status_reg_addr;
159
static int hf_ttl_eth_phy_status_unused;
160
static int hf_ttl_eth_phy_status_res1;
161
static int hf_ttl_eth_phy_status_phy_addr;
162
static int hf_ttl_eth_phy_status_res2;
163
static int hf_ttl_eth_phy_status_valid;
164
static int hf_ttl_trace_data_entry_eth_unused;
165
static int hf_ttl_trace_data_entry_can_id;
166
static int hf_ttl_trace_data_entry_lin_checksum;
167
static int hf_ttl_trace_data_entry_fr_low_phase_counter;
168
static int hf_ttl_trace_data_entry_fr_unused;
169
static int hf_ttl_trace_data_entry_fr_eray_eir_register;
170
static int hf_ttl_trace_data_entry_fr_eray_stpw1_register;
171
static int hf_ttl_trace_data_entry_fr_eray_stpw2_register;
172
static int hf_ttl_trace_data_entry_fr_eray_ccsv_register;
173
static int hf_ttl_trace_data_entry_fr_eray_ccev_register;
174
static int hf_ttl_trace_data_entry_fr_eray_swnit_register;
175
static int hf_ttl_trace_data_entry_fr_eray_acs_register;
176
177
178
static expert_field ei_ttl_block_size_too_short;
179
static expert_field ei_ttl_header_size_too_short;
180
static expert_field ei_ttl_header_size_implausible;
181
static expert_field ei_ttl_header_logfile_info_too_short;
182
static expert_field ei_ttl_entry_size_too_short;
183
184
static int ett_ttl;
185
static int ett_ttl_header;
186
static int ett_ttl_header_logfile_info;
187
static int ett_ttl_header_configuration;
188
static int ett_ttl_trace_data;
189
static int ett_ttl_block;
190
static int ett_ttl_trace_data_entry;
191
static int ett_ttl_trace_data_entry_dest_addr;
192
static int ett_ttl_trace_data_entry_src_addr;
193
static int ett_ttl_trace_data_entry_meta1;
194
static int ett_ttl_trace_data_entry_status_information;
195
static int ett_ttl_trace_data_entry_status_info_can_flags;
196
static int ett_ttl_trace_data_entry_status_info_lin_flags;
197
static int ett_ttl_trace_data_entry_status_info_lin_pid;
198
static int ett_ttl_trace_data_entry_status_info_fr_error_flags;
199
static int ett_ttl_trace_data_entry_status_info_fr_pulse_flags;
200
static int ett_ttl_trace_data_entry_payload;
201
static int ett_ttl_eth_phy_status;
202
203
static const value_string hf_ttl_header_logfile_info_tracefile_sorted_vals[] = {
204
    { '0',  "Not Sorted" },
205
    { '1',  "Sorted" },
206
    { 0, NULL }
207
};
208
209
static const value_string hf_ttl_trace_data_entry_type_vals[] = {
210
    { TTL_BUS_DATA_ENTRY,           "Bus Data Entry" },
211
    { TTL_COMMAND_ENTRY,            "Command Entry" },
212
    { TTL_BUS_RESERVED1_ENTRY,      "Reserved" },
213
    { TTL_JOURNAL_ENTRY,            "Journal Entry" },
214
    { TTL_SEGMENTED_MESSAGE_ENTRY,  "Segmented Message Entry" },
215
    { TTL_SEND_FRAME_ENTRY,         "Send-Frame Entry" },
216
    { TTL_PADDING_ENTRY,            "Padding Entry" },
217
    { TTL_SOFTWARE_DATA_ENTRY,      "Software Data Entry" },
218
    { TTL_DROPPED_FRAMES_ENTRY,     "Dropped Frames Entry" },
219
    { 0, NULL }
220
};
221
222
static const value_string hf_ttl_addr_cascade_vals[] = {
223
    { 0,    "Logger" },
224
    { 1,    "TAP 1" },
225
    { 2,    "TAP 2" },
226
    { 3,    "TAP 3" },
227
    { 4,    "TAP 4" },
228
    { 5,    "TAP 5" },
229
    { 6,    "TAP 6" },
230
    { 7,    "TAP 7" },
231
    { 0, NULL }
232
};
233
234
static const value_string hf_ttl_addr_logger_device_vals[] = {
235
    { TTL_LOGGER_DEVICE_FPGA,       "FPGA" },
236
    { TTL_LOGGER_DEVICE_ATOM,       "Atom" },
237
    { TTL_LOGGER_DEVICE_TRICORE1,   "Tricore 1" },
238
    { TTL_LOGGER_DEVICE_TRICORE2,   "Tricore 2" },
239
    { TTL_LOGGER_DEVICE_TRICORE3,   "Tricore 3" },
240
    { TTL_LOGGER_DEVICE_TDA4x,      "TDA 4x" },
241
    { TTL_LOGGER_DEVICE_FPGAA,      "FPGA A" },
242
    { TTL_LOGGER_DEVICE_FPGAB,      "FPGA B" },
243
    { 15,                           "Not allowed" },
244
    { 0, NULL }
245
};
246
247
static const value_string hf_ttl_addr_tap_device_vals[] = {
248
    { TTL_TAP_DEVICE_PT15_FPGA,         "PT-15B/PT15-CG FPGA" },
249
    { TTL_TAP_DEVICE_PT15_HPS_LINUX,    "PT-15B/PT15-CG HPS Linux" },
250
    { TTL_TAP_DEVICE_PT20_FPGA,         "PT-20MG FPGA" },
251
    { TTL_TAP_DEVICE_PT20_HPS_LINUX,    "PT-20MG HPS Linux" },
252
    { TTL_TAP_DEVICE_PC3_FPGA,          "PC-3 FPGA" },
253
    { TTL_TAP_DEVICE_PC3_HPS_LINUX,     "PC-3 HPS Linux" },
254
    { TTL_TAP_DEVICE_PC3_AURIX,         "PC-3 Aurix" },
255
    { TTL_TAP_DEVICE_ZELDA_CANFD,       "Zelda CAN-FD" },
256
    { TTL_TAP_DEVICE_ZELDA_LIN,         "Zelda LIN" },
257
    { TTL_TAP_DEVICE_ILLEGAL,           "Not allowed" },
258
    { 0, NULL }
259
};
260
261
static const value_string hf_ttl_addr_logger_fpga_function_vals[] = {
262
    { TTL_LOGGER_FPGA_FUNCTION_CORE,            "Core" },
263
    { TTL_LOGGER_FPGA_FUNCTION_EXT0_MOST25,     "MOST25" },
264
    { TTL_LOGGER_FPGA_FUNCTION_EXT0_MOST150,    "MOST150" },
265
    { TTL_LOGGER_FPGA_FUNCTION_ETHA_CH1,        "ETH A (CH1)" },
266
    { TTL_LOGGER_FPGA_FUNCTION_ETHB_CH1,        "ETH B (CH1)" },
267
    { TTL_LOGGER_FPGA_FUNCTION_FLEXRAY1A,       "FlexRay 1A" },
268
    { TTL_LOGGER_FPGA_FUNCTION_FLEXRAY1B,       "FlexRay 1B" },
269
    { TTL_LOGGER_FPGA_FUNCTION_FLEXRAY2A,       "FlexRay 2A" },
270
    { TTL_LOGGER_FPGA_FUNCTION_FLEXRAY2B,       "FlexRay 2B" },
271
    { TTL_LOGGER_FPGA_FUNCTION_FLEXRAY3A,       "FlexRay 3A" },
272
    { TTL_LOGGER_FPGA_FUNCTION_FLEXRAY3B,       "FlexRay 3B" },
273
    { TTL_LOGGER_FPGA_FUNCTION_CAN1,            "CAN 1" },
274
    { TTL_LOGGER_FPGA_FUNCTION_CAN2,            "CAN 2" },
275
    { TTL_LOGGER_FPGA_FUNCTION_CAN3,            "CAN 3" },
276
    { TTL_LOGGER_FPGA_FUNCTION_CAN4,            "CAN 4" },
277
    { TTL_LOGGER_FPGA_FUNCTION_CAN12,           "CAN 12" },
278
    { TTL_LOGGER_FPGA_FUNCTION_CAN6,            "CAN 6" },
279
    { TTL_LOGGER_FPGA_FUNCTION_CAN7,            "CAN 7" },
280
    { TTL_LOGGER_FPGA_FUNCTION_CAN10,           "CAN 10" },
281
    { TTL_LOGGER_FPGA_FUNCTION_CAN11,           "CAN 11" },
282
    { TTL_LOGGER_FPGA_FUNCTION_CAN8,            "CAN 8" },
283
    { TTL_LOGGER_FPGA_FUNCTION_CAN5,            "CAN 5" },
284
    { TTL_LOGGER_FPGA_FUNCTION_CAN9,            "CAN 9" },
285
    { TTL_LOGGER_FPGA_FUNCTION_EXT1_MOST25,     "MOST25 (Expansion Slot 1)" },
286
    { TTL_LOGGER_FPGA_FUNCTION_LIN10,           "LIN 10" },
287
    { TTL_LOGGER_FPGA_FUNCTION_LIN3,            "LIN 3" },
288
    { TTL_LOGGER_FPGA_FUNCTION_LIN5,            "LIN 5" },
289
    { TTL_LOGGER_FPGA_FUNCTION_LIN4,            "LIN 4" },
290
    { TTL_LOGGER_FPGA_FUNCTION_LIN11,           "LIN 11" },
291
    { TTL_LOGGER_FPGA_FUNCTION_LIN1,            "LIN 1" },
292
    { TTL_LOGGER_FPGA_FUNCTION_LIN7,            "LIN 7" },
293
    { TTL_LOGGER_FPGA_FUNCTION_LIN8,            "LIN 8" },
294
    { TTL_LOGGER_FPGA_FUNCTION_LIN12,           "LIN 12" },
295
    { TTL_LOGGER_FPGA_FUNCTION_LIN6,            "LIN 6" },
296
    { TTL_LOGGER_FPGA_FUNCTION_LIN2,            "LIN 2" },
297
    { TTL_LOGGER_FPGA_FUNCTION_LIN9,            "LIN 9" },
298
    { TTL_LOGGER_FPGA_FUNCTION_CAN13,           "CAN 13" },
299
    { TTL_LOGGER_FPGA_FUNCTION_CAN14,           "CAN 14" },
300
    { TTL_LOGGER_FPGA_FUNCTION_CAN15,           "CAN 15" },
301
    { TTL_LOGGER_FPGA_FUNCTION_CAN16,           "CAN 16" },
302
    { TTL_LOGGER_FPGA_FUNCTION_CAN17,           "CAN 17" },
303
    { TTL_LOGGER_FPGA_FUNCTION_CAN18,           "CAN 18" },
304
    { TTL_LOGGER_FPGA_FUNCTION_CAN19,           "CAN 19" },
305
    { TTL_LOGGER_FPGA_FUNCTION_CAN20,           "CAN 20" },
306
    { TTL_LOGGER_FPGA_FUNCTION_CAN21,           "CAN 21" },
307
    { TTL_LOGGER_FPGA_FUNCTION_CAN22,           "CAN 22" },
308
    { TTL_LOGGER_FPGA_FUNCTION_CAN23,           "CAN 23" },
309
    { TTL_LOGGER_FPGA_FUNCTION_CAN24,           "CAN 24" },
310
    { TTL_LOGGER_FPGA_FUNCTION_ETHA_CH2,        "ETH A (CH2)" },
311
    { TTL_LOGGER_FPGA_FUNCTION_ETHB_CH2,        "ETH B (CH2)" },
312
    { TTL_LOGGER_FPGA_FUNCTION_ETHA_CH3,        "ETH A (CH3)" },
313
    { TTL_LOGGER_FPGA_FUNCTION_ETHB_CH3,        "ETH B (CH3)" },
314
    { TTL_LOGGER_FPGA_FUNCTION_CAN_EXT_BOARD,   "CAN Extension Board" },
315
    { TTL_LOGGER_FPGA_FUNCTION_RESERVED1,       "Reserved" },
316
    { TTL_LOGGER_FPGA_FUNCTION_SLOT_CTRL,       "SLOT_CTRL" },
317
    { TTL_LOGGER_FPGA_FUNCTION_DRAM,            "DRAM" },
318
    { TTL_LOGGER_FPGA_FUNCTION_SINK,            "Sink" },
319
    { TTL_LOGGER_FPGA_FUNCTION_POWER_AGENT,     "Power Agent" },
320
    { TTL_LOGGER_FPGA_FUNCTION_PKT_GENERATOR,   "Packet Generator" },
321
    { 0, NULL }
322
};
323
324
static const value_string hf_ttl_addr_logger_atom_function_vals[] = {
325
    { TTL_LOGGER_ATOM_FUNCTION_FRAME_DEVICE,        "Frame Device" },
326
    { TTL_LOGGER_ATOM_FUNCTION_CHARACTER_DEVICE,    "Character Device" },
327
    { TTL_LOGGER_ATOM_FUNCTION_ATMEL,               "Atmel" },
328
    { TTL_LOGGER_ATOM_FUNCTION_ETHA,                "ETH-A" },
329
    { TTL_LOGGER_ATOM_FUNCTION_ETHB,                "ETH-B" },
330
    { 0, NULL }
331
};
332
333
static const value_string hf_ttl_addr_logger_tricore1_function_vals[] = {
334
    { TTL_LOGGER_TRICORE1_FUNCTION_CORE,        "Core" },
335
    { TTL_LOGGER_TRICORE1_FUNCTION_FLEXRAY1A,   "FlexRay 1A" },
336
    { TTL_LOGGER_TRICORE1_FUNCTION_FLEXRAY1B,   "FlexRay 1B" },
337
    { TTL_LOGGER_TRICORE1_FUNCTION_CAN1,        "CAN 1" },
338
    { TTL_LOGGER_TRICORE1_FUNCTION_CAN2,        "CAN 2" },
339
    { TTL_LOGGER_TRICORE1_FUNCTION_CAN3,        "CAN 3" },
340
    { TTL_LOGGER_TRICORE1_FUNCTION_CAN4,        "CAN 4" },
341
    { TTL_LOGGER_TRICORE1_FUNCTION_ANALOGOUT1,  "Analog Out 1" },
342
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALOUT6, "Digital Out 6" },
343
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALOUT5, "Digital Out 5" },
344
    { TTL_LOGGER_TRICORE1_FUNCTION_RESERVED1,   "Reserved" },
345
    { TTL_LOGGER_TRICORE1_FUNCTION_RESERVED2,   "Reserved" },
346
    { TTL_LOGGER_TRICORE1_FUNCTION_SERIAL1,     "RS232 1" },
347
    { TTL_LOGGER_TRICORE1_FUNCTION_SERIAL2,     "RS232 2" },
348
    { TTL_LOGGER_TRICORE1_FUNCTION_ANALOGIN6,   "Analog In 6" },
349
    { TTL_LOGGER_TRICORE1_FUNCTION_ANALOGIN8,   "Analog In 8" },
350
    { TTL_LOGGER_TRICORE1_FUNCTION_ANALOGIN14,  "Analog In 14" },
351
    { TTL_LOGGER_TRICORE1_FUNCTION_ANALOGIN15,  "Analog In 15" },
352
    { TTL_LOGGER_TRICORE1_FUNCTION_ANALOGIN11,  "Analog In 11" },
353
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALIN8,  "Digital In 8" },
354
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALIN10, "Digital In 10" },
355
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALIN12, "Digital In 12" },
356
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALIN13, "Digital In 13" },
357
    { TTL_LOGGER_TRICORE1_FUNCTION_DIGITALIN11, "Digital In 11" },
358
    { TTL_LOGGER_TRICORE1_FUNCTION_KL15IN,      "KL15 Input" },
359
    { TTL_LOGGER_TRICORE1_FUNCTION_KL30IN,      "KL30 Input" },
360
    { TTL_LOGGER_TRICORE1_FUNCTION_FLEXRAY1,    "FlexRay 1" },
361
    { TTL_LOGGER_TRICORE1_FUNCTION_FLEXRAY1AB,  "FlexRay 1AB" },
362
    { 0, NULL }
363
};
364
365
static const value_string hf_ttl_addr_logger_tricore2_function_vals[] = {
366
    { TTL_LOGGER_TRICORE2_FUNCTION_CORE,        "Core" },
367
    { TTL_LOGGER_TRICORE2_FUNCTION_FLEXRAY2A,   "FlexRay 2A" },
368
    { TTL_LOGGER_TRICORE2_FUNCTION_FLEXRAY2B,   "FlexRay 2B" },
369
    { TTL_LOGGER_TRICORE2_FUNCTION_CAN12,       "CAN 12" },
370
    { TTL_LOGGER_TRICORE2_FUNCTION_CAN6,        "CAN 6" },
371
    { TTL_LOGGER_TRICORE2_FUNCTION_CAN7,        "CAN 7" },
372
    { TTL_LOGGER_TRICORE2_FUNCTION_CAN10,       "CAN 10" },
373
    { TTL_LOGGER_TRICORE2_FUNCTION_ANALOGOUT2,  "Analog Out 2" },
374
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALOUT4, "Digital Out 4" },
375
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALOUT3, "Digital Out 3" },
376
    { TTL_LOGGER_TRICORE2_FUNCTION_RESERVED1,   "Reserved" },
377
    { TTL_LOGGER_TRICORE2_FUNCTION_RESERVED2,   "Reserved" },
378
    { TTL_LOGGER_TRICORE2_FUNCTION_SERIAL3,     "RS232 3" },
379
    { TTL_LOGGER_TRICORE2_FUNCTION_SERIAL4,     "RS232 4" },
380
    { TTL_LOGGER_TRICORE2_FUNCTION_ANALOGIN4,   "Analog In 4" },
381
    { TTL_LOGGER_TRICORE2_FUNCTION_ANALOGIN3,   "Analog In 3" },
382
    { TTL_LOGGER_TRICORE2_FUNCTION_ANALOGIN5,   "Analog In 5" },
383
    { TTL_LOGGER_TRICORE2_FUNCTION_ANALOGIN9,   "Analog In 9" },
384
    { TTL_LOGGER_TRICORE2_FUNCTION_ANALOGIN7,   "Analog In 7" },
385
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALIN14, "Digital In 14" },
386
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALIN9,  "Digital In 9" },
387
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALIN15, "Digital In 15" },
388
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALIN7,  "Digital In 7" },
389
    { TTL_LOGGER_TRICORE2_FUNCTION_DIGITALIN6,  "Digital In 6" },
390
    { TTL_LOGGER_TRICORE2_FUNCTION_FLEXRAY2,    "FlexRay 2" },
391
    { TTL_LOGGER_TRICORE2_FUNCTION_FLEXRAY2AB,  "FlexRay 2AB" },
392
    { 0, NULL }
393
};
394
395
static const value_string hf_ttl_addr_logger_tricore3_function_vals[] = {
396
    { TTL_LOGGER_TRICORE3_FUNCTION_CORE,        "Core" },
397
    { TTL_LOGGER_TRICORE3_FUNCTION_FLEXRAY3A,   "FlexRay 3A" },
398
    { TTL_LOGGER_TRICORE3_FUNCTION_FLEXRAY3B,   "FlexRay 3B" },
399
    { TTL_LOGGER_TRICORE3_FUNCTION_CAN11,       "CAN 11" },
400
    { TTL_LOGGER_TRICORE3_FUNCTION_CAN8,        "CAN 8" },
401
    { TTL_LOGGER_TRICORE3_FUNCTION_CAN5,        "CAN 5" },
402
    { TTL_LOGGER_TRICORE3_FUNCTION_CAN9,        "CAN 9" },
403
    { TTL_LOGGER_TRICORE3_FUNCTION_ANALOGOUT3,  "Analog Out 3" },
404
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALOUT2, "Digital Out 2" },
405
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALOUT1, "Digital Out 1" },
406
    { TTL_LOGGER_TRICORE3_FUNCTION_RESERVED1,   "Reserved" },
407
    { TTL_LOGGER_TRICORE3_FUNCTION_RESERVED2,   "Reserved" },
408
    { TTL_LOGGER_TRICORE3_FUNCTION_SERIAL5,     "RS232 5" },
409
    { TTL_LOGGER_TRICORE3_FUNCTION_SERIAL6,     "RS232 6" },
410
    { TTL_LOGGER_TRICORE3_FUNCTION_ANALOGIN1,   "Analog In 1" },
411
    { TTL_LOGGER_TRICORE3_FUNCTION_ANALOGIN2,   "Analog In 2" },
412
    { TTL_LOGGER_TRICORE3_FUNCTION_ANALOGIN10,  "Analog In 10" },
413
    { TTL_LOGGER_TRICORE3_FUNCTION_ANALOGIN12,  "Analog In 12" },
414
    { TTL_LOGGER_TRICORE3_FUNCTION_ANALOGIN13,  "Analog In 13" },
415
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALIN5,  "Digital In 5" },
416
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALIN4,  "Digital In 4" },
417
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALIN3,  "Digital In 3" },
418
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALIN2,  "Digital In 2" },
419
    { TTL_LOGGER_TRICORE3_FUNCTION_DIGITALIN1,  "Digital In 1" },
420
    { TTL_LOGGER_TRICORE3_FUNCTION_FLEXRAY3,    "FlexRay 3" },
421
    { TTL_LOGGER_TRICORE3_FUNCTION_FLEXRAY3AB,  "FlexRay 3AB" },
422
    { 0, NULL }
423
};
424
425
static const value_string hf_ttl_addr_logger_tda4x_function_vals[] = {
426
    { TTL_LOGGER_TDA4x_FUNCTION_CORE,               "Core" },
427
    { TTL_LOGGER_TDA4x_FUNCTION_CHARACTER_DEVICE,   "Character Device" },
428
    { TTL_LOGGER_TDA4x_FUNCTION_CAN1,               "CAN 1" },
429
    { TTL_LOGGER_TDA4x_FUNCTION_CAN2,               "CAN 2" },
430
    { TTL_LOGGER_TDA4x_FUNCTION_CAN3,               "CAN 3" },
431
    { TTL_LOGGER_TDA4x_FUNCTION_CAN4,               "CAN 4" },
432
    { TTL_LOGGER_TDA4x_FUNCTION_CAN5,               "CAN 5" },
433
    { TTL_LOGGER_TDA4x_FUNCTION_CAN6,               "CAN 6" },
434
    { TTL_LOGGER_TDA4x_FUNCTION_CAN7,               "CAN 7" },
435
    { TTL_LOGGER_TDA4x_FUNCTION_CAN8,               "CAN 8" },
436
    { TTL_LOGGER_TDA4x_FUNCTION_CAN9,               "CAN 9" },
437
    { TTL_LOGGER_TDA4x_FUNCTION_CAN10,              "CAN 10" },
438
    { TTL_LOGGER_TDA4x_FUNCTION_CAN11,              "CAN 11" },
439
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL1,            "RS232 1" },
440
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL2,            "RS232 2" },
441
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL3,            "RS232 3" },
442
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL4,            "RS232 4" },
443
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL5,            "RS232 5" },
444
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL6,            "RS232 6" },
445
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGIN1,          "Analog In 1" },
446
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGIN2,          "Analog In 2" },
447
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGIN3,          "Analog In 3" },
448
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGIN4,          "Analog In 4" },
449
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGIN5,          "Analog In 5" },
450
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGIN6,          "Analog In 6" },
451
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGOUT1,         "Analog Out 1" },
452
    { TTL_LOGGER_TDA4x_FUNCTION_ANALOGOUT2,         "Analog Out 2" },
453
    { TTL_LOGGER_TDA4x_FUNCTION_KL15IN,             "KL15 Input" },
454
    { TTL_LOGGER_TDA4x_FUNCTION_KL30IN,             "KL30 Input" },
455
    { TTL_LOGGER_TDA4x_FUNCTION_FLEXRAY1A,          "FlexRay 1A" },
456
    { TTL_LOGGER_TDA4x_FUNCTION_FLEXRAY1B,          "FlexRay 1B" },
457
    { TTL_LOGGER_TDA4x_FUNCTION_FLEXRAY1AB,         "FlexRay 1AB" },
458
    { TTL_LOGGER_TDA4x_FUNCTION_CAN12,              "CAN 12" },
459
    { TTL_LOGGER_TDA4x_FUNCTION_CAN13,              "CAN 13" },
460
    { TTL_LOGGER_TDA4x_FUNCTION_CAN14,              "CAN 14" },
461
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL7,            "RS232 7" },
462
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL8,            "RS232 8" },
463
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL9,            "RS232 9" },
464
    { TTL_LOGGER_TDA4x_FUNCTION_SERIAL10,           "RS232 10" },
465
    { 0, NULL }
466
};
467
468
static const value_string hf_ttl_addr_logger_fpgaa_function_vals[] = {
469
    { TTL_LOGGER_FPGAA_FUNCTION_CORE,           "Core" },
470
    { TTL_LOGGER_FPGAA_FUNCTION_CAN1,           "CAN 1" },
471
    { TTL_LOGGER_FPGAA_FUNCTION_CAN2,           "CAN 2" },
472
    { TTL_LOGGER_FPGAA_FUNCTION_CAN3,           "CAN 3" },
473
    { TTL_LOGGER_FPGAA_FUNCTION_CAN4,           "CAN 4" },
474
    { TTL_LOGGER_FPGAA_FUNCTION_CAN5,           "CAN 5" },
475
    { TTL_LOGGER_FPGAA_FUNCTION_CAN6,           "CAN 6" },
476
    { TTL_LOGGER_FPGAA_FUNCTION_CAN7,           "CAN 7" },
477
    { TTL_LOGGER_FPGAA_FUNCTION_CAN8,           "CAN 8" },
478
    { TTL_LOGGER_FPGAA_FUNCTION_CAN9,           "CAN 9" },
479
    { TTL_LOGGER_FPGAA_FUNCTION_CAN10,          "CAN 10" },
480
    { TTL_LOGGER_FPGAA_FUNCTION_CAN11,          "CAN 11" },
481
    { TTL_LOGGER_FPGAA_FUNCTION_LIN1,           "LIN 1" },
482
    { TTL_LOGGER_FPGAA_FUNCTION_LIN2,           "LIN 2" },
483
    { TTL_LOGGER_FPGAA_FUNCTION_LIN3,           "LIN 3" },
484
    { TTL_LOGGER_FPGAA_FUNCTION_LIN4,           "LIN 4" },
485
    { TTL_LOGGER_FPGAA_FUNCTION_LIN5,           "LIN 5" },
486
    { TTL_LOGGER_FPGAA_FUNCTION_LIN6,           "LIN 6" },
487
    { TTL_LOGGER_FPGAA_FUNCTION_LIN7,           "LIN 7" },
488
    { TTL_LOGGER_FPGAA_FUNCTION_LIN8,           "LIN 8" },
489
    { TTL_LOGGER_FPGAA_FUNCTION_LIN9,           "LIN 9" },
490
    { TTL_LOGGER_FPGAA_FUNCTION_LIN10,          "LIN 10" },
491
    { TTL_LOGGER_FPGAA_FUNCTION_LIN11,          "LIN 11" },
492
    { TTL_LOGGER_FPGAA_FUNCTION_LIN12,          "LIN 12" },
493
    { TTL_LOGGER_FPGAA_FUNCTION_LIN13,          "LIN 13" },
494
    { TTL_LOGGER_FPGAA_FUNCTION_LIN14,          "LIN 14" },
495
    { TTL_LOGGER_FPGAA_FUNCTION_LIN15,          "LIN 15" },
496
    { TTL_LOGGER_FPGAA_FUNCTION_LIN16,          "LIN 16" },
497
    { TTL_LOGGER_FPGAA_FUNCTION_FLEXRAY1A,      "FlexRay 1A" },
498
    { TTL_LOGGER_FPGAA_FUNCTION_FLEXRAY1B,      "FlexRay 1B" },
499
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL1,        "RS232 1" },
500
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL2,        "RS232 2" },
501
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL3,        "RS232 3" },
502
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL4,        "RS232 4" },
503
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL5,        "RS232 5" },
504
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL6,        "RS232 6" },
505
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL7,        "RS232 7" },
506
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL8,        "RS232 8" },
507
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL9,        "RS232 9" },
508
    { TTL_LOGGER_FPGAA_FUNCTION_SERIAL10,       "RS232 10" },
509
    { TTL_LOGGER_FPGAA_FUNCTION_CAN12,          "CAN 12" },
510
    { TTL_LOGGER_FPGAA_FUNCTION_CAN13,          "CAN 13" },
511
    { TTL_LOGGER_FPGAA_FUNCTION_CAN14,          "CAN 14" },
512
    { TTL_LOGGER_FPGAA_FUNCTION_SLOT_CTRL,      "SLOT_CTRL" },
513
    { TTL_LOGGER_FPGAA_FUNCTION_DRAM,           "DRAM" },
514
    { TTL_LOGGER_FPGAA_FUNCTION_SINK,           "Sink" },
515
    { TTL_LOGGER_FPGAA_FUNCTION_POWER_AGENT,    "Power Agent" },
516
    { TTL_LOGGER_FPGAA_FUNCTION_PKT_GENERATOR,  "Packet Generator" },
517
    { 0, NULL }
518
};
519
520
static const value_string hf_ttl_addr_logger_fpgab_function_vals[] = {
521
    { TTL_LOGGER_FPGAB_FUNCTION_ETHA_CH1,   "Ethernet A (CH1)" },
522
    { TTL_LOGGER_FPGAB_FUNCTION_ETHB_CH1,   "Ethernet B (CH1)" },
523
    { TTL_LOGGER_FPGAB_FUNCTION_AETH1a_CH1, "Automotive Ethernet 1a (CH1)" },
524
    { TTL_LOGGER_FPGAB_FUNCTION_AETH1b_CH1, "Automotive Ethernet 1b (CH1)" },
525
    { TTL_LOGGER_FPGAB_FUNCTION_AETH2a_CH1, "Automotive Ethernet 2a (CH1)" },
526
    { TTL_LOGGER_FPGAB_FUNCTION_AETH2b_CH1, "Automotive Ethernet 2b (CH1)" },
527
    { TTL_LOGGER_FPGAB_FUNCTION_AETH3a_CH1, "Automotive Ethernet 3a (CH1)" },
528
    { TTL_LOGGER_FPGAB_FUNCTION_AETH3b_CH1, "Automotive Ethernet 3b (CH1)" },
529
    { TTL_LOGGER_FPGAB_FUNCTION_AETH4a_CH1, "Automotive Ethernet 4a (CH1)" },
530
    { TTL_LOGGER_FPGAB_FUNCTION_AETH4b_CH1, "Automotive Ethernet 4b (CH1)" },
531
    { TTL_LOGGER_FPGAB_FUNCTION_AETH5a_CH1, "Automotive Ethernet 5a (CH1)" },
532
    { TTL_LOGGER_FPGAB_FUNCTION_AETH5b_CH1, "Automotive Ethernet 5b (CH1)" },
533
    { TTL_LOGGER_FPGAB_FUNCTION_AETH6a_CH1, "Automotive Ethernet 6a (CH1)" },
534
    { TTL_LOGGER_FPGAB_FUNCTION_AETH6b_CH1, "Automotive Ethernet 6b (CH1)" },
535
    { TTL_LOGGER_FPGAB_FUNCTION_ETHA_CH2,   "Ethernet A (CH2)" },
536
    { TTL_LOGGER_FPGAB_FUNCTION_ETHB_CH2,   "Ethernet B (CH2)" },
537
    { TTL_LOGGER_FPGAB_FUNCTION_AETH1a_CH2, "Automotive Ethernet 1a (CH2)" },
538
    { TTL_LOGGER_FPGAB_FUNCTION_AETH1b_CH2, "Automotive Ethernet 1b (CH2)" },
539
    { TTL_LOGGER_FPGAB_FUNCTION_AETH2a_CH2, "Automotive Ethernet 2a (CH2)" },
540
    { TTL_LOGGER_FPGAB_FUNCTION_AETH2b_CH2, "Automotive Ethernet 2b (CH2)" },
541
    { TTL_LOGGER_FPGAB_FUNCTION_AETH3a_CH2, "Automotive Ethernet 3a (CH2)" },
542
    { TTL_LOGGER_FPGAB_FUNCTION_AETH3b_CH2, "Automotive Ethernet 3b (CH2)" },
543
    { TTL_LOGGER_FPGAB_FUNCTION_AETH4a_CH2, "Automotive Ethernet 4a (CH2)" },
544
    { TTL_LOGGER_FPGAB_FUNCTION_AETH4b_CH2, "Automotive Ethernet 4b (CH2)" },
545
    { TTL_LOGGER_FPGAB_FUNCTION_AETH5a_CH2, "Automotive Ethernet 5a (CH2)" },
546
    { TTL_LOGGER_FPGAB_FUNCTION_AETH5b_CH2, "Automotive Ethernet 5b (CH2)" },
547
    { TTL_LOGGER_FPGAB_FUNCTION_AETH6a_CH2, "Automotive Ethernet 6a (CH2)" },
548
    { TTL_LOGGER_FPGAB_FUNCTION_AETH6b_CH2, "Automotive Ethernet 6b (CH2)" },
549
    { 0, NULL }
550
};
551
552
static const value_string hf_ttl_addr_pt15_fpga_function_vals[] = {
553
    { TTL_PT15_FPGA_FUNCTION_CORE,      "Core" },
554
    { TTL_PT15_FPGA_FUNCTION_CAN1,      "CAN 1" },
555
    { TTL_PT15_FPGA_FUNCTION_CAN2,      "CAN 2" },
556
    { TTL_PT15_FPGA_FUNCTION_BrdR1a,    "100BASE-T1 1a (Master)" },
557
    { TTL_PT15_FPGA_FUNCTION_BrdR1b,    "100BASE-T1 1b (Slave)" },
558
    { TTL_PT15_FPGA_FUNCTION_BrdR2a,    "100BASE-T1 2a (Master)" },
559
    { TTL_PT15_FPGA_FUNCTION_BrdR2b,    "100BASE-T1 2b (Slave)" },
560
    { TTL_PT15_FPGA_FUNCTION_BrdR3a,    "100BASE-T1 3a (Master)" },
561
    { TTL_PT15_FPGA_FUNCTION_BrdR3b,    "100BASE-T1 3b (Slave)" },
562
    { TTL_PT15_FPGA_FUNCTION_BrdR4a,    "100BASE-T1 4a (Master)" },
563
    { TTL_PT15_FPGA_FUNCTION_BrdR4b,    "100BASE-T1 4b (Slave)" },
564
    { TTL_PT15_FPGA_FUNCTION_BrdR5a,    "100BASE-T1 5a (Master)" },
565
    { TTL_PT15_FPGA_FUNCTION_BrdR5b,    "100BASE-T1 5b (Slave)" },
566
    { TTL_PT15_FPGA_FUNCTION_BrdR6a,    "100BASE-T1 6a (Master)" },
567
    { TTL_PT15_FPGA_FUNCTION_BrdR6b,    "100BASE-T1 6b (Slave)" },
568
    { TTL_PT15_FPGA_FUNCTION_MDIO,      "MDIO" },
569
    { 0, NULL }
570
};
571
572
static const value_string hf_ttl_addr_pt20_fpga_function_vals[] = {
573
    { TTL_PT20_FPGA_FUNCTION_CORE,      "Core" },
574
    { TTL_PT20_FPGA_FUNCTION_CAN1,      "CAN 1" },
575
    { TTL_PT20_FPGA_FUNCTION_CAN2,      "CAN 2" },
576
    { TTL_PT20_FPGA_FUNCTION_CAN3,      "CAN 3" },
577
    { TTL_PT20_FPGA_FUNCTION_CAN4,      "CAN 4" },
578
    { TTL_PT20_FPGA_FUNCTION_CAN5,      "CAN 5" },
579
    { TTL_PT20_FPGA_FUNCTION_GbEth1a,   "1000BASE-T1 1a (Master)" },
580
    { TTL_PT20_FPGA_FUNCTION_GbEth1b,   "1000BASE-T1 1b (Slave)" },
581
    { TTL_PT20_FPGA_FUNCTION_GbEth2a,   "1000BASE-T1 2a (Master)" },
582
    { TTL_PT20_FPGA_FUNCTION_GbEth2b,   "1000BASE-T1 2b (Slave)" },
583
    { TTL_PT20_FPGA_FUNCTION_GbEth3a,   "1000BASE-T1 3a (Master)" },
584
    { TTL_PT20_FPGA_FUNCTION_GbEth3b,   "1000BASE-T1 3b (Slave)" },
585
    { TTL_PT20_FPGA_FUNCTION_MDIO,      "MDIO" },
586
    { 0, NULL }
587
};
588
589
static const value_string hf_ttl_addr_pc3_fpga_function_vals[] = {
590
    { TTL_PC3_FPGA_FUNCTION_CORE,   "Core" },
591
    { TTL_PC3_FPGA_FUNCTION_BrdR1a, "BroadR-Reach 1a (Master)" },
592
    { TTL_PC3_FPGA_FUNCTION_BrdR1b, "BroadR-Reach 1b (Slave)" },
593
    { 0, NULL }
594
};
595
596
static const value_string hf_ttl_addr_pc3_aurix_function_vals[] = {
597
    { TTL_PC3_AURIX_FUNCTION_CORE,          "Core" },
598
    { TTL_PC3_AURIX_FUNCTION_CAN1,          "CAN 1" },
599
    { TTL_PC3_AURIX_FUNCTION_CAN2,          "CAN 2" },
600
    { TTL_PC3_AURIX_FUNCTION_CAN3,          "CAN 3" },
601
    { TTL_PC3_AURIX_FUNCTION_CAN4,          "CAN 4" },
602
    { TTL_PC3_AURIX_FUNCTION_FLEXRAY1A,     "FlexRay 1A" },
603
    { TTL_PC3_AURIX_FUNCTION_FLEXRAY1B,     "FlexRay 1B" },
604
    { TTL_PC3_AURIX_FUNCTION_FLEXRAY2A,     "FlexRay 2A" },
605
    { TTL_PC3_AURIX_FUNCTION_FLEXRAY2B,     "FlexRay 2B" },
606
    { TTL_PC3_AURIX_FUNCTION_DIGITALIN1,    "Digital In 1" },
607
    { TTL_PC3_AURIX_FUNCTION_DIGITALIN2,    "Digital In 2" },
608
    { TTL_PC3_AURIX_FUNCTION_DIGITALOUT1,   "Digital Out 1" },
609
    { TTL_PC3_AURIX_FUNCTION_DIGITALOUT2,   "Digital Out 2" },
610
    { 0, NULL }
611
};
612
613
static const value_string hf_ttl_addr_zelda_canfd_function_vals[] = {
614
    { TTL_TAP_DEVICE_ZELDA_CORE,    "Core" },
615
    { TTL_TAP_DEVICE_ZELDA_CANFD1,  "CAN-FD 1" },
616
    { TTL_TAP_DEVICE_ZELDA_CANFD2,  "CAN-FD 2" },
617
    { TTL_TAP_DEVICE_ZELDA_CANFD3,  "CAN-FD 3" },
618
    { TTL_TAP_DEVICE_ZELDA_CANFD4,  "CAN-FD 4" },
619
    { TTL_TAP_DEVICE_ZELDA_CANFD5,  "CAN-FD 5" },
620
    { TTL_TAP_DEVICE_ZELDA_CANFD6,  "CAN-FD 6" },
621
    { TTL_TAP_DEVICE_ZELDA_CANFD7,  "CAN-FD 7" },
622
    { TTL_TAP_DEVICE_ZELDA_CANFD8,  "CAN-FD 8" },
623
    { TTL_TAP_DEVICE_ZELDA_CANFD9,  "CAN-FD 9" },
624
    { TTL_TAP_DEVICE_ZELDA_CANFD10, "CAN-FD 10" },
625
    { TTL_TAP_DEVICE_ZELDA_CANFD11, "CAN-FD 11" },
626
    { TTL_TAP_DEVICE_ZELDA_CANFD12, "CAN-FD 12" },
627
    { TTL_TAP_DEVICE_ZELDA_CANFD13, "CAN-FD 13" },
628
    { TTL_TAP_DEVICE_ZELDA_CANFD14, "CAN-FD 14" },
629
    { TTL_TAP_DEVICE_ZELDA_CANFD15, "CAN-FD 15" },
630
    { 0, NULL }
631
};
632
633
static const value_string hf_ttl_addr_zelda_lin_function_vals[] = {
634
    { TTL_TAP_DEVICE_ZELDA_CORE,    "Core" },
635
    { TTL_TAP_DEVICE_ZELDA_LIN1,    "LIN 1" },
636
    { TTL_TAP_DEVICE_ZELDA_LIN2,    "LIN 2" },
637
    { TTL_TAP_DEVICE_ZELDA_LIN3,    "LIN 3" },
638
    { TTL_TAP_DEVICE_ZELDA_LIN4,    "LIN 4" },
639
    { TTL_TAP_DEVICE_ZELDA_LIN5,    "LIN 5" },
640
    { TTL_TAP_DEVICE_ZELDA_LIN6,    "LIN 6" },
641
    { TTL_TAP_DEVICE_ZELDA_LIN7,    "LIN 7" },
642
    { TTL_TAP_DEVICE_ZELDA_LIN8,    "LIN 8" },
643
    { TTL_TAP_DEVICE_ZELDA_LIN9,    "LIN 9" },
644
    { TTL_TAP_DEVICE_ZELDA_LIN10,   "LIN 10" },
645
    { TTL_TAP_DEVICE_ZELDA_LIN11,   "LIN 11" },
646
    { TTL_TAP_DEVICE_ZELDA_LIN12,   "LIN 12" },
647
    { TTL_TAP_DEVICE_ZELDA_LIN13,   "LIN 13" },
648
    { TTL_TAP_DEVICE_ZELDA_LIN14,   "LIN 14" },
649
    { TTL_TAP_DEVICE_ZELDA_LIN15,   "LIN 15" },
650
    { TTL_TAP_DEVICE_ZELDA_LIN16,   "LIN 16" },
651
    { TTL_TAP_DEVICE_ZELDA_LIN17,   "LIN 17" },
652
    { TTL_TAP_DEVICE_ZELDA_LIN18,   "LIN 18" },
653
    { TTL_TAP_DEVICE_ZELDA_LIN19,   "LIN 19" },
654
    { TTL_TAP_DEVICE_ZELDA_LIN20,   "LIN 20" },
655
    { TTL_TAP_DEVICE_ZELDA_LIN21,   "LIN 21" },
656
    { TTL_TAP_DEVICE_ZELDA_LIN22,   "LIN 22" },
657
    { TTL_TAP_DEVICE_ZELDA_LIN23,   "LIN 23" },
658
    { TTL_TAP_DEVICE_ZELDA_LIN24,   "LIN 24" },
659
    { 0, NULL }
660
};
661
662
static const true_false_string hf_ttl_trace_data_entry_meta1_frame_duplication_tfs = {
663
    "Frame Duplication",
664
    "No Frame Duplication"
665
};
666
667
static const true_false_string hf_ttl_trace_data_entry_meta1_compressed_format_tfs = {
668
    "Compressed (32 bit) Timestamp",
669
    "Normal (64 bit) Timestamp"
670
};
671
672
static const true_false_string hf_ttl_trace_data_entry_meta1_timestamp_source_tfs = {
673
    "Timestamp comes from Source Address component",
674
    "Timestamp comes from the FPGA"
675
};
676
677
static const value_string hf_ttl_trace_data_entry_ackmode_vals[] = {
678
    { 0,    "Acknowledgement not used" },
679
    { 1,    "Acknowledgement requested" },
680
    { 2,    "Request finished: Processing successfully finished" },
681
    { 3,    "Request failed: Processing had errors" },
682
    { 4,    "Request accepted: Frame received" },
683
    { 5,    "Request not accepted: Error in the header processing" },
684
    { 0, NULL }
685
};
686
687
static const value_string hf_ttl_trace_data_entry_status_info_can_error_code_vals[] = {
688
    { 0,    "No Error" },
689
    { 1,    "Stuff Error" },
690
    { 2,    "Form Error" },
691
    { 3,    "Ack Error" },
692
    { 4,    "Bit 1 Error" },
693
    { 5,    "Bit 0 Error" },
694
    { 6,    "CRC Error" },
695
    { 7,    "Invalid DLC" },
696
    { 0, NULL }
697
};
698
699
static const value_string hf_ttl_trace_data_entry_status_info_eth_type_vals[] = {
700
    { TTL_ETH_STATUS_VALID_FRAME,           "Valid Ethernet Frame" },
701
    { TTL_ETH_STATUS_CRC_ERROR_FRAME,       "Ethernet CRC Error Frame" },
702
    { TTL_ETH_STATUS_LENGTH_ERROR_FRAME,    "Ethernet Length Error Frame" },
703
    { TTL_ETH_STATUS_PHY_ERROR_FRAME,       "Ethernet PHY Error Frame" },
704
    { TTL_ETH_STATUS_TX_ERROR_FRAME,        "Ethernet TX Error Frame" },
705
    { TTL_ETH_STATUS_TX_FREEMEM_INFO_FRAME, "Ethernet TX FreeMem Info Frame" },
706
    { TTL_ETH_STATUS_TX_FRAME,              "Ethernet TX Frame" },
707
    { TTL_ETH_STATUS_PHY_STATUS,            "Ethernet PHY Status" },
708
    { 0, NULL }
709
};
710
711
static const value_string hf_ttl_eth_phy_status_phy_addr_vals[] = {
712
    { 2,    "BroadR-Reach 1a" },
713
    { 3,    "BroadR-Reach 1b" },
714
    { 4,    "BroadR-Reach 2a" },
715
    { 5,    "BroadR-Reach 2b" },
716
    { 6,    "BroadR-Reach 3a" },
717
    { 7,    "BroadR-Reach 3b" },
718
    { 8,    "BroadR-Reach 4a" },
719
    { 9,    "BroadR-Reach 4b" },
720
    { 10,   "BroadR-Reach 5a" },
721
    { 11,   "BroadR-Reach 5b" },
722
    { 12,   "BroadR-Reach 6a" },
723
    { 13,   "BroadR-Reach 6b" },
724
    { 0, NULL }
725
};
726
727
static const value_string hf_ttl_trace_data_entry_status_info_fr_type_vals[] = {
728
    { TTL_FLEXRAY_ITEM_REGULAR_FRAME,       "Regular Frame" },
729
    { TTL_FLEXRAY_ITEM_ABORTED_FRAME,       "Aborted Frame" },
730
    { TTL_FLEXRAY_ITEM_0_PULSE,             "0 Pulse" },
731
    { TTL_FLEXRAY_ITEM_1_PULSE,             "1 Pulse" },
732
    { TTL_FLEXRAY_ITEM_ERROR_INFORMATION,   "Error Information" },
733
    { 0, NULL }
734
};
735
736
static const true_false_string tfs_recognized_not_recognized = {
737
    "Recognized",
738
    "Not Recognized"
739
};
740
741
static int* const ttl_trace_data_entry_meta1[] = {
742
    &hf_ttl_trace_data_entry_meta1_frame_duplication,
743
    &hf_ttl_trace_data_entry_meta1_compressed_format,
744
    &hf_ttl_trace_data_entry_meta1_timestamp_source,
745
    NULL
746
};
747
748
static int* const ttl_trace_data_entry_status_info_can_flags[] = {
749
    &hf_ttl_trace_data_entry_status_info_can_valid_frame,
750
    &hf_ttl_trace_data_entry_status_info_can_remote_frame,
751
    &hf_ttl_trace_data_entry_status_info_can_bus_off,
752
    &hf_ttl_trace_data_entry_status_info_can_matched,
753
    &hf_ttl_trace_data_entry_status_info_can_ide,
754
    &hf_ttl_trace_data_entry_status_info_can_edl,
755
    &hf_ttl_trace_data_entry_status_info_can_brs,
756
    &hf_ttl_trace_data_entry_status_info_can_esi,
757
    NULL
758
};
759
760
static int* const ttl_trace_data_entry_status_info_lin_flags[] = {
761
    &hf_ttl_trace_data_entry_status_info_lin_parity_error,
762
    &hf_ttl_trace_data_entry_status_info_lin_sync_error,
763
    &hf_ttl_trace_data_entry_status_info_lin_2_checksum_error,
764
    &hf_ttl_trace_data_entry_status_info_lin_1_checksum_error,
765
    &hf_ttl_trace_data_entry_status_info_lin_no_data_error,
766
    &hf_ttl_trace_data_entry_status_info_lin_abort_error,
767
    NULL
768
};
769
770
static int* const ttl_trace_data_entry_status_info_fr_error_flags[] = {
771
    &hf_ttl_trace_data_entry_status_info_fr_matched,
772
    &hf_ttl_trace_data_entry_status_info_fr_fss_error,
773
    &hf_ttl_trace_data_entry_status_info_fr_bss_error,
774
    &hf_ttl_trace_data_entry_status_info_fr_fes_error,
775
    &hf_ttl_trace_data_entry_status_info_fr_frame_crc_error,
776
    &hf_ttl_trace_data_entry_status_info_fr_header_crc_error,
777
    &hf_ttl_trace_data_entry_status_info_fr_idle_error,
778
    NULL
779
};
780
781
static int* const ttl_trace_data_entry_status_info_fr_pulse_flags[] = {
782
    &hf_ttl_trace_data_entry_status_info_fr_matched,
783
    &hf_ttl_trace_data_entry_status_info_fr_low_phase_exceeded,
784
    &hf_ttl_trace_data_entry_status_info_fr_cas,
785
    &hf_ttl_trace_data_entry_status_info_fr_mts,
786
    &hf_ttl_trace_data_entry_status_info_fr_wup,
787
    NULL
788
};
789
790
791
void proto_register_file_ttl(void);
792
void proto_reg_handoff_file_ttl(void);
793
794
0
#define TTL_MAGIC_SIZE 4
795
static const uint8_t ttl_magic[TTL_MAGIC_SIZE] = { 'T', 'T', 'L', ' ' };
796
797
static proto_item*
798
0
dissect_ttl_sw_version(proto_tree* tree, int hf, tvbuff_t* tvb, int offset, int length) {
799
0
    uint8_t             major, minor, build, patch;
800
0
    header_field_info*  hfinfo;
801
802
0
    major = tvb_get_uint8(tvb, offset);
803
0
    minor = tvb_get_uint8(tvb, offset + 1);
804
0
    build = tvb_get_uint8(tvb, offset + 2);
805
0
    patch = tvb_get_uint8(tvb, offset + 3);
806
807
0
    hfinfo = proto_registrar_get_nth(hf);
808
809
0
    return proto_tree_add_bytes_format(tree, hf, tvb, offset, length, NULL, "%s: %d.%d.%d.%d",
810
0
        hfinfo->name, major, minor, build, patch);
811
0
}
812
813
static proto_item*
814
0
dissect_ttl_hw_version(proto_tree* tree, int hf, tvbuff_t* tvb, int offset, int length) {
815
0
    uint16_t            major, minor;
816
0
    header_field_info*  hfinfo;
817
818
0
    major = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
819
0
    minor = tvb_get_uint16(tvb, offset + 2, ENC_LITTLE_ENDIAN);
820
821
0
    hfinfo = proto_registrar_get_nth(hf);
822
823
0
    return proto_tree_add_bytes_format(tree, hf, tvb, offset, length, NULL, "%s: %d.%d",
824
0
        hfinfo->name, major, minor);
825
0
}
826
827
static proto_item*
828
0
dissect_ttl_tc_sw_version(proto_tree* tree, int hf, tvbuff_t* tvb, int offset, int length) {
829
0
    uint8_t             major, minor;
830
0
    header_field_info*  hfinfo;
831
832
0
    major = tvb_get_uint8(tvb, offset);
833
0
    minor = tvb_get_uint8(tvb, offset + 1);
834
835
0
    hfinfo = proto_registrar_get_nth(hf);
836
837
0
    return proto_tree_add_bytes_format(tree, hf, tvb, offset, length, NULL, "%s: %d.%d",
838
0
        hfinfo->name, major, minor);
839
0
}
840
841
static int
842
0
dissect_ttl_logfile_information(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset) {
843
0
    int orig_offset = offset;
844
845
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_logger_sn, tvb, offset, 20, ENC_NA);
846
0
    offset += 20;
847
0
    dissect_ttl_sw_version(tree, hf_ttl_header_logfile_info_logger_sw_version, tvb, offset, 4);
848
0
    offset += 4;
849
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_measurement_creation_date, tvb, offset, 20, ENC_NA);
850
0
    offset += 20;
851
0
    proto_tree_add_time_item(tree, hf_ttl_header_logfile_info_measurement_creation_timestamp, tvb, offset, 8, ENC_LITTLE_ENDIAN|ENC_TIME_USECS, NULL, NULL, NULL);
852
0
    offset += 8;
853
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_supplier_name, tvb, offset, 28, ENC_NA);
854
0
    offset += 28;
855
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_description, tvb, offset, 128, ENC_NA);
856
0
    offset += 128;
857
0
    dissect_ttl_hw_version(tree, hf_ttl_header_logfile_info_hw_version, tvb, offset, 4);
858
0
    offset += 4;
859
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_configuration_file_name, tvb, offset, 64, ENC_NA);
860
0
    offset += 64;
861
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_tracefile_sorted, tvb, offset, 1, ENC_NA);
862
0
    offset += 1;
863
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_tracefile_split_index, tvb, offset, 2, ENC_LITTLE_ENDIAN);
864
0
    offset += 2;
865
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_completion_date, tvb, offset, 20, ENC_NA);
866
0
    offset += 20;
867
0
    proto_tree_add_time_item(tree, hf_ttl_header_logfile_info_completion_timestamp, tvb, offset, 8, ENC_LITTLE_ENDIAN|ENC_TIME_USECS, NULL, NULL, NULL);
868
0
    offset += 8;
869
0
    dissect_ttl_tc_sw_version(tree, hf_ttl_header_logfile_info_tc_sw_bootloader_version, tvb, offset, 2);
870
0
    offset += 2;
871
0
    dissect_ttl_tc_sw_version(tree, hf_ttl_header_logfile_info_tc_sw_firmware_version, tvb, offset, 2);
872
0
    offset += 2;
873
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_most25_fw_version, tvb, offset, 32, ENC_NA);
874
0
    offset += 32;
875
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_most150_fw_version, tvb, offset, 32, ENC_NA);
876
0
    offset += 32;
877
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_split_file_creation_date, tvb, offset, 20, ENC_NA);
878
0
    offset += 20;
879
0
    proto_tree_add_time_item(tree, hf_ttl_header_logfile_info_split_file_creation_timestamp, tvb, offset, 8, ENC_LITTLE_ENDIAN|ENC_TIME_USECS, NULL, NULL, NULL);
880
0
    offset += 8;
881
0
    proto_tree_add_bytes_item(tree, hf_ttl_header_logfile_info_unused_bytes, tvb, offset, 512, ENC_NA, NULL, NULL, NULL);
882
0
    offset += 512;
883
0
    proto_tree_add_item(tree, hf_ttl_header_logfile_info_sleep_counter, tvb, offset, 4, ENC_LITTLE_ENDIAN);
884
0
    offset += 4;
885
0
    proto_tree_add_bytes_item(tree, hf_ttl_header_logfile_info_reserved_bytes, tvb, offset, 3161, ENC_NA, NULL, NULL, NULL);
886
0
    offset += 3161;
887
888
0
    return offset - orig_offset;
889
0
}
890
891
static int
892
0
dissect_ttl_dest_addr_ret(proto_tree* tree, tvbuff_t* tvb, int offset, uint16_t* ret) {
893
0
    uint32_t    addr, cascade, device;
894
0
    proto_tree* addr_subtree;
895
0
    proto_item* ti;
896
897
0
    ti = proto_tree_add_item_ret_uint(tree, hf_ttl_trace_data_entry_dest_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN, &addr);
898
0
    addr_subtree = proto_item_add_subtree(ti, ett_ttl_trace_data_entry_dest_addr);
899
0
    proto_tree_add_item_ret_uint(addr_subtree, hf_ttl_trace_data_entry_dest_addr_cascade, tvb, offset, 2, ENC_LITTLE_ENDIAN, &cascade);
900
0
    if (cascade == 0) {
901
0
        proto_tree_add_item_ret_uint(addr_subtree, hf_ttl_trace_data_entry_dest_addr_device_logger, tvb, offset, 2, ENC_LITTLE_ENDIAN, &device);
902
0
        switch (device) {
903
0
        case TTL_LOGGER_DEVICE_FPGA:
904
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
905
0
            break;
906
0
        case TTL_LOGGER_DEVICE_ATOM:
907
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_atom, tvb, offset, 2, ENC_LITTLE_ENDIAN);
908
0
            break;
909
0
        case TTL_LOGGER_DEVICE_TRICORE1:
910
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_tricore1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
911
0
            break;
912
0
        case TTL_LOGGER_DEVICE_TRICORE2:
913
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_tricore2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
914
0
            break;
915
0
        case TTL_LOGGER_DEVICE_TRICORE3:
916
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_tricore3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
917
0
            break;
918
0
        case TTL_LOGGER_DEVICE_TDA4x:
919
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_tda4x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
920
0
            break;
921
0
        case TTL_LOGGER_DEVICE_FPGAA:
922
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_fpgaa, tvb, offset, 2, ENC_LITTLE_ENDIAN);
923
0
            break;
924
0
        case TTL_LOGGER_DEVICE_FPGAB:
925
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_fpgab, tvb, offset, 2, ENC_LITTLE_ENDIAN);
926
0
            break;
927
0
        default:
928
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_unknown, tvb, offset, 2, ENC_LITTLE_ENDIAN);
929
0
            break;
930
0
        }
931
0
    }
932
0
    else {
933
0
        proto_tree_add_item_ret_uint(addr_subtree, hf_ttl_trace_data_entry_dest_addr_device_tap, tvb, offset, 2, ENC_LITTLE_ENDIAN, &device);
934
0
        switch (device) {
935
0
        case TTL_TAP_DEVICE_PT15_FPGA:
936
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_pt15_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
937
0
            break;
938
0
        case TTL_TAP_DEVICE_PT20_FPGA:
939
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_pt20_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
940
0
            break;
941
0
        case TTL_TAP_DEVICE_PC3_FPGA:
942
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_pc3_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
943
0
            break;
944
0
        case TTL_TAP_DEVICE_PC3_AURIX:
945
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_pc3_aurix, tvb, offset, 2, ENC_LITTLE_ENDIAN);
946
0
            break;
947
0
        case TTL_TAP_DEVICE_ZELDA_CANFD:
948
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_zelda_canfd, tvb, offset, 2, ENC_LITTLE_ENDIAN);
949
0
            break;
950
0
        case TTL_TAP_DEVICE_ZELDA_LIN:
951
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_zelda_lin, tvb, offset, 2, ENC_LITTLE_ENDIAN);
952
0
            break;
953
0
        default:
954
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_dest_addr_function_unknown, tvb, offset, 2, ENC_LITTLE_ENDIAN);
955
0
            break;
956
0
        }
957
0
    }
958
959
0
    if (ret) {
960
0
        *ret = (uint16_t)addr;
961
0
    }
962
0
    return 2;
963
0
}
964
965
static int
966
0
dissect_ttl_src_addr_ret(proto_tree* tree, tvbuff_t* tvb, int offset, uint16_t* ret) {
967
0
    uint32_t    addr, cascade, device;
968
0
    proto_tree* addr_subtree;
969
0
    proto_item* ti;
970
971
0
    ti = proto_tree_add_item_ret_uint(tree, hf_ttl_trace_data_entry_src_addr, tvb, offset, 2, ENC_LITTLE_ENDIAN, &addr);
972
0
    addr_subtree = proto_item_add_subtree(ti, ett_ttl_trace_data_entry_src_addr);
973
0
    proto_tree_add_item_ret_uint(addr_subtree, hf_ttl_trace_data_entry_src_addr_cascade, tvb, offset, 2, ENC_LITTLE_ENDIAN, &cascade);
974
0
    if (cascade == 0) {
975
0
        proto_tree_add_item_ret_uint(addr_subtree, hf_ttl_trace_data_entry_src_addr_device_logger, tvb, offset, 2, ENC_LITTLE_ENDIAN, &device);
976
0
        switch (device) {
977
0
        case TTL_LOGGER_DEVICE_FPGA:
978
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
979
0
            break;
980
0
        case TTL_LOGGER_DEVICE_ATOM:
981
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_atom, tvb, offset, 2, ENC_LITTLE_ENDIAN);
982
0
            break;
983
0
        case TTL_LOGGER_DEVICE_TRICORE1:
984
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_tricore1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
985
0
            break;
986
0
        case TTL_LOGGER_DEVICE_TRICORE2:
987
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_tricore2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
988
0
            break;
989
0
        case TTL_LOGGER_DEVICE_TRICORE3:
990
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_tricore3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
991
0
            break;
992
0
        case TTL_LOGGER_DEVICE_TDA4x:
993
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_tda4x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
994
0
            break;
995
0
        case TTL_LOGGER_DEVICE_FPGAA:
996
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_fpgaa, tvb, offset, 2, ENC_LITTLE_ENDIAN);
997
0
            break;
998
0
        case TTL_LOGGER_DEVICE_FPGAB:
999
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_fpgab, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1000
0
            break;
1001
0
        default:
1002
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_unknown, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1003
0
            break;
1004
0
        }
1005
0
    }
1006
0
    else {
1007
0
        proto_tree_add_item_ret_uint(addr_subtree, hf_ttl_trace_data_entry_src_addr_device_tap, tvb, offset, 2, ENC_LITTLE_ENDIAN, &device);
1008
0
        switch (device) {
1009
0
        case TTL_TAP_DEVICE_PT15_FPGA:
1010
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_pt15_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1011
0
            break;
1012
0
        case TTL_TAP_DEVICE_PT20_FPGA:
1013
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_pt20_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1014
0
            break;
1015
0
        case TTL_TAP_DEVICE_PC3_FPGA:
1016
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_pc3_fpga, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1017
0
            break;
1018
0
        case TTL_TAP_DEVICE_PC3_AURIX:
1019
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_pc3_aurix, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1020
0
            break;
1021
0
        case TTL_TAP_DEVICE_ZELDA_CANFD:
1022
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_zelda_canfd, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1023
0
            break;
1024
0
        case TTL_TAP_DEVICE_ZELDA_LIN:
1025
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_zelda_lin, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1026
0
            break;
1027
0
        default:
1028
0
            proto_tree_add_item(addr_subtree, hf_ttl_trace_data_entry_src_addr_function_unknown, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1029
0
            break;
1030
0
        }
1031
0
    }
1032
1033
0
    if (ret) {
1034
0
        *ret = (uint16_t)addr;
1035
0
    }
1036
0
    return 2;
1037
0
}
1038
1039
static int
1040
dissect_ttl_eth_bus_data_entry(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int size,
1041
0
                               proto_tree* status_tree, int status_pos, uint16_t src) {
1042
0
    proto_item *ti;
1043
0
    proto_tree *subtree, *payload_subtree;
1044
0
    int         orig_offset = offset;
1045
0
    uint16_t    status;
1046
0
    uint8_t     cascade = (src >> 10) & 0x7;
1047
0
    bool        valid;
1048
1049
0
    status = tvb_get_uint16(tvb, status_pos, ENC_LITTLE_ENDIAN);
1050
1051
0
    if (status != TTL_ETH_STATUS_PHY_STATUS) {
1052
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_eth_unused, tvb, offset, 2, ENC_NA);
1053
0
        offset += 2;
1054
0
        size -= 2;
1055
0
    }
1056
1057
0
    ti = proto_tree_add_item(tree, hf_ttl_trace_data_entry_payload, tvb, offset, size, ENC_NA);
1058
0
    payload_subtree = proto_item_add_subtree(ti, ett_ttl_trace_data_entry_payload);
1059
0
    proto_item_prepend_text(ti, "%s ", val_to_str_const(status, hf_ttl_trace_data_entry_status_info_eth_type_vals, "Unknown"));
1060
1061
0
    proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_eth_type, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1062
1063
0
    if (status == TTL_ETH_STATUS_PHY_STATUS) {
1064
0
        while (size >= 4) {
1065
0
            ti = proto_tree_add_item(payload_subtree, hf_ttl_eth_phy_status, tvb, offset, 4, ENC_NA);
1066
0
            subtree = proto_item_add_subtree(ti, ett_ttl_eth_phy_status);
1067
0
            proto_tree_add_item_ret_boolean(subtree, hf_ttl_eth_phy_status_valid, tvb, offset + 3, 1, ENC_NA, &valid);
1068
0
            proto_item_append_text(ti, " (%s)", tfs_get_string(valid, &tfs_valid_invalid));
1069
0
            proto_tree_add_item(subtree, hf_ttl_eth_phy_status_res2, tvb, offset + 3, 1, ENC_NA);
1070
0
            if (cascade == 0) {
1071
0
                proto_tree_add_item(subtree, hf_ttl_eth_phy_status_unused, tvb, offset + 3, 1, ENC_NA);
1072
0
            }
1073
0
            else {
1074
0
                proto_tree_add_item(subtree, hf_ttl_eth_phy_status_phy_addr, tvb, offset + 3, 1, ENC_NA);
1075
0
            }
1076
0
            proto_tree_add_item(subtree, hf_ttl_eth_phy_status_res1, tvb, offset + 2, 1, ENC_NA);
1077
0
            proto_tree_add_item(subtree, hf_ttl_eth_phy_status_reg_addr, tvb, offset + 2, 1, ENC_NA);
1078
0
            proto_tree_add_item(subtree, hf_ttl_eth_phy_status_data, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1079
1080
0
            offset += 4;
1081
0
            size -= 4;
1082
0
        }
1083
0
    }
1084
0
    else {
1085
0
        offset += size;
1086
0
    }
1087
1088
0
    return offset - orig_offset;
1089
0
}
1090
1091
static int
1092
dissect_ttl_can_bus_data_entry(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int size,
1093
0
                               proto_tree* status_tree, int status_pos) {
1094
0
    proto_item* ti;
1095
0
    int         orig_offset = offset;
1096
1097
0
    proto_tree_add_bitmask(status_tree, tvb, status_pos, hf_ttl_trace_data_entry_status_info_can_flags,
1098
0
                           ett_ttl_trace_data_entry_status_info_can_flags, ttl_trace_data_entry_status_info_can_flags, ENC_LITTLE_ENDIAN);
1099
0
    proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_can_error_code, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1100
0
    proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_can_res, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1101
0
    proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_can_dlc, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1102
1103
0
    proto_tree_add_item(tree, hf_ttl_trace_data_entry_can_id, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1104
0
    offset += 4;
1105
0
    size -= 4;
1106
1107
0
    ti = proto_tree_add_item(tree, hf_ttl_trace_data_entry_payload, tvb, offset, size, ENC_NA);
1108
0
    proto_item_prepend_text(ti, "CAN ");
1109
0
    offset += size;
1110
1111
0
    return offset - orig_offset;
1112
0
}
1113
1114
static int
1115
dissect_ttl_lin_bus_data_entry(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int size,
1116
0
                               proto_tree* status_tree, int status_pos) {
1117
0
    proto_item* ti;
1118
0
    proto_tree* subtree;
1119
0
    int         orig_offset = offset;
1120
1121
0
    ti = proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_lin_pid, tvb, status_pos, 1, ENC_NA);
1122
0
    subtree = proto_item_add_subtree(ti, ett_ttl_trace_data_entry_status_info_lin_pid);
1123
0
    proto_tree_add_item(subtree, hf_ttl_trace_data_entry_status_info_lin_parity, tvb, status_pos, 1, ENC_NA);
1124
0
    proto_tree_add_item(subtree, hf_ttl_trace_data_entry_status_info_lin_id, tvb, status_pos, 1, ENC_NA);
1125
0
    proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_lin_unused, tvb, status_pos + 1, 1, ENC_NA);
1126
0
    proto_tree_add_bitmask(status_tree, tvb, status_pos + 1, hf_ttl_trace_data_entry_status_info_lin_flags,
1127
0
                           ett_ttl_trace_data_entry_status_info_lin_flags, ttl_trace_data_entry_status_info_lin_flags, ENC_NA);
1128
1129
0
    if (size > 1) {
1130
0
        ti = proto_tree_add_item(tree, hf_ttl_trace_data_entry_payload, tvb, offset, size - 1, ENC_NA);
1131
0
        proto_item_prepend_text(ti, "LIN ");
1132
0
        offset += (size - 1);
1133
1134
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_lin_checksum, tvb, offset, 1, ENC_NA);
1135
0
        offset += 1;
1136
0
    }
1137
1138
0
    return offset - orig_offset;
1139
0
}
1140
1141
static int
1142
dissect_ttl_flexray_bus_data_entry(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int size,
1143
0
                                   proto_tree* status_tree, int status_pos) {
1144
0
    proto_item* ti;
1145
0
    int         orig_offset = offset;
1146
0
    uint16_t    status;
1147
0
    uint8_t     type;
1148
1149
0
    status = tvb_get_uint16(tvb, status_pos, ENC_LITTLE_ENDIAN);
1150
1151
0
    type = status & TTL_FLEXRAY_ITEM_MASK;
1152
1153
0
    proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_fr_type, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1154
1155
0
    if (type == TTL_FLEXRAY_ITEM_REGULAR_FRAME || type == TTL_FLEXRAY_ITEM_ABORTED_FRAME) {
1156
0
        proto_tree_add_bitmask(status_tree, tvb, status_pos, hf_ttl_trace_data_entry_status_info_fr_error_flags,
1157
0
                               ett_ttl_trace_data_entry_status_info_fr_error_flags, ttl_trace_data_entry_status_info_fr_error_flags, ENC_LITTLE_ENDIAN);
1158
0
        proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_fr_res1, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1159
0
        proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_fr_res2, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1160
0
    }
1161
0
    else if (type == TTL_FLEXRAY_ITEM_0_PULSE || type == TTL_FLEXRAY_ITEM_1_PULSE) {
1162
0
        proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_fr_res3, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1163
0
        proto_tree_add_bitmask(status_tree, tvb, status_pos, hf_ttl_trace_data_entry_status_info_fr_pulse_flags,
1164
0
                               ett_ttl_trace_data_entry_status_info_fr_pulse_flags, ttl_trace_data_entry_status_info_fr_pulse_flags, ENC_LITTLE_ENDIAN);
1165
0
        proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_fr_res4, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1166
1167
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_low_phase_counter, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1168
0
        offset += 2;
1169
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_unused, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1170
0
        offset += 2;
1171
0
    }
1172
0
    else if (type == TTL_FLEXRAY_ITEM_ERROR_INFORMATION) {
1173
0
        proto_tree_add_item(status_tree, hf_ttl_trace_data_entry_status_info_fr_res5, tvb, status_pos, 2, ENC_LITTLE_ENDIAN);
1174
1175
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_eir_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1176
0
        offset += 4;
1177
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_stpw1_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1178
0
        offset += 4;
1179
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_stpw2_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1180
0
        offset += 4;
1181
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_ccsv_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1182
0
        offset += 4;
1183
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_ccev_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1184
0
        offset += 4;
1185
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_swnit_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1186
0
        offset += 4;
1187
0
        proto_tree_add_item(tree, hf_ttl_trace_data_entry_fr_eray_acs_register, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1188
0
        offset += 4;
1189
0
    }
1190
1191
0
    size -= (offset - orig_offset);
1192
1193
0
    if (size > 0) {
1194
0
        ti = proto_tree_add_item(tree, hf_ttl_trace_data_entry_payload, tvb, offset, size, ENC_NA);
1195
0
        proto_item_prepend_text(ti, "FlexRay ");
1196
0
        offset += size;
1197
0
    }
1198
1199
0
    return offset - orig_offset;
1200
0
}
1201
1202
static int
1203
dissect_ttl_bus_data_entry(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, int size,
1204
0
                           proto_item* root, proto_tree* status_tree, int status_pos, uint16_t src) {
1205
0
    int         orig_offset = offset;
1206
1207
0
    proto_tree_add_item(tree, hf_ttl_trace_data_entry_timestamp, tvb, offset, 8, ENC_LITTLE_ENDIAN|ENC_TIME_USECS);
1208
0
    offset += 8;
1209
1210
0
    switch (ttl_get_address_iface_type(src)) {
1211
0
    case WTAP_ENCAP_ETHERNET:
1212
0
        proto_item_append_text(root, " (Ethernet)");
1213
0
        offset += dissect_ttl_eth_bus_data_entry(tvb, pinfo, tree, offset, size - (offset - orig_offset), status_tree, status_pos, src);
1214
0
        break;
1215
0
    case WTAP_ENCAP_SOCKETCAN:
1216
0
        proto_item_append_text(root, " (CAN)");
1217
0
        offset += dissect_ttl_can_bus_data_entry(tvb, pinfo, tree, offset, size - (offset - orig_offset), status_tree, status_pos);
1218
0
        break;
1219
0
    case WTAP_ENCAP_LIN:
1220
0
        proto_item_append_text(root, " (LIN)");
1221
0
        offset += dissect_ttl_lin_bus_data_entry(tvb, pinfo, tree, offset, size - (offset - orig_offset), status_tree, status_pos);
1222
0
        break;
1223
0
    case WTAP_ENCAP_FLEXRAY:
1224
0
        proto_item_append_text(root, " (FlexRay)");
1225
0
        offset += dissect_ttl_flexray_bus_data_entry(tvb, pinfo, tree, offset, size - (offset - orig_offset), status_tree, status_pos);
1226
0
        break;
1227
0
    default:
1228
0
        proto_item_append_text(root, " (Unsupported)");
1229
0
        break;
1230
0
    }
1231
1232
0
    return offset - orig_offset;
1233
0
}
1234
1235
static int
1236
0
dissect_ttl_entry(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset) {
1237
0
    proto_tree  *entry_subtree, *status_subtree;
1238
0
    proto_item  *ti, *root_ti;
1239
0
    int         orig_offset = offset;
1240
0
    uint32_t    status;
1241
0
    uint16_t    entry_size_type;
1242
0
    uint16_t    size;
1243
0
    uint16_t    src_addr;
1244
0
    uint8_t     type;
1245
1246
0
    entry_size_type = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
1247
0
    type = entry_size_type >> 12;
1248
0
    size = entry_size_type & TTL_SIZE_MASK;
1249
1250
0
    root_ti = proto_tree_add_item(tree, hf_ttl_trace_data_entry, tvb, offset, size, ENC_NA);
1251
0
    proto_item_append_text(root_ti, " - %s", val_to_str_const(type, hf_ttl_trace_data_entry_type_vals, "Unknown Entry"));
1252
0
    entry_subtree = proto_item_add_subtree(root_ti, ett_ttl_trace_data_entry);
1253
1254
0
    proto_tree_add_item(entry_subtree, hf_ttl_trace_data_entry_type, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1255
0
    proto_tree_add_item(entry_subtree, hf_ttl_trace_data_entry_size, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1256
0
    offset += 2;
1257
0
    proto_tree_add_bitmask(entry_subtree, tvb, offset, hf_ttl_trace_data_entry_meta1, ett_ttl_trace_data_entry_meta1, ttl_trace_data_entry_meta1, ENC_LITTLE_ENDIAN);
1258
0
    offset += dissect_ttl_dest_addr_ret(entry_subtree, tvb, offset, NULL);
1259
0
    ti = proto_tree_add_item(entry_subtree, hf_ttl_trace_data_entry_meta2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1260
0
    proto_item_set_hidden(ti);
1261
0
    proto_tree_add_item(entry_subtree, hf_ttl_trace_data_entry_ackmode, tvb, offset, 2, ENC_LITTLE_ENDIAN);
1262
0
    offset += dissect_ttl_src_addr_ret(entry_subtree, tvb, offset, &src_addr);
1263
1264
0
    ti = proto_tree_add_item_ret_uint(entry_subtree, hf_ttl_trace_data_entry_status_information, tvb, offset, 2, ENC_LITTLE_ENDIAN, &status);
1265
0
    status_subtree = proto_item_add_subtree(ti, ett_ttl_trace_data_entry_status_information);
1266
0
    offset += 2;
1267
1268
0
    if (size < sizeof(ttl_entryheader_t)) {
1269
0
        expert_add_info(pinfo, root_ti, &ei_ttl_entry_size_too_short);
1270
0
    }
1271
0
    else {
1272
0
        switch (type) {
1273
0
        case TTL_BUS_DATA_ENTRY:
1274
0
            offset += dissect_ttl_bus_data_entry(tvb, pinfo, entry_subtree, offset, (int)size - (offset - orig_offset),
1275
0
                                                 root_ti, status_subtree, orig_offset + 6, src_addr);
1276
0
            break;
1277
0
        case TTL_COMMAND_ENTRY:
1278
0
        case TTL_JOURNAL_ENTRY:
1279
0
        case TTL_SEGMENTED_MESSAGE_ENTRY:
1280
0
        case TTL_SEND_FRAME_ENTRY:
1281
0
        case TTL_PADDING_ENTRY:
1282
0
        case TTL_SOFTWARE_DATA_ENTRY:
1283
0
        case TTL_DROPPED_FRAMES_ENTRY:
1284
0
        default:
1285
0
            break;
1286
0
        }
1287
0
    }
1288
1289
0
    if ((offset - orig_offset) < size) {
1290
0
        proto_tree_add_item(entry_subtree, hf_ttl_trace_data_entry_unparsed, tvb, offset, (int)size - (offset - orig_offset), ENC_NA);
1291
0
        offset += (int)size - (offset - orig_offset);
1292
0
    }
1293
1294
0
    return offset - orig_offset;
1295
0
}
1296
1297
static int
1298
0
dissect_ttl_block(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, int size) {
1299
0
    proto_tree* block_subtree;
1300
0
    proto_item* ti;
1301
0
    int orig_offset = offset;
1302
0
    int dissected;
1303
1304
0
    if (size > 0) {
1305
0
        ti = proto_tree_add_item(tree, hf_ttl_block, tvb, offset, size, ENC_NA);
1306
0
        block_subtree = proto_item_add_subtree(ti, ett_ttl_block);
1307
1308
0
        while (size >= (int)sizeof(ttl_entryheader_t)) {
1309
0
            dissected = dissect_ttl_entry(tvb, pinfo, block_subtree, offset);
1310
0
            offset += dissected;
1311
0
            size -= dissected;
1312
0
        }
1313
0
    }
1314
1315
0
    return offset - orig_offset;
1316
0
}
1317
1318
static int
1319
0
dissect_ttl(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U_) {
1320
0
    int             offset = 0;
1321
0
    proto_tree     *ttl_tree, *header_subtree, *logfile_info_subtree, *configuration_subtree, *trace_data_subtree;
1322
0
    proto_item*     ti;
1323
0
    uint32_t        format_version, header_length, block_size;
1324
0
    int             logfile_info_length, xml_length, remaining;
1325
1326
0
    if (tvb_captured_length(tvb) < sizeof(ttl_fileheader_t) || tvb_memeql(tvb, 0, ttl_magic, TTL_MAGIC_SIZE) != 0) {
1327
0
        return 0;
1328
0
    }
1329
1330
0
    ti = proto_tree_add_item(tree, proto_ttl, tvb, offset, -1, ENC_NA);
1331
0
    ttl_tree = proto_item_add_subtree(ti, ett_ttl);
1332
0
    header_length = tvb_get_uint32(tvb, 12, ENC_LITTLE_ENDIAN);
1333
1334
0
    ti = proto_tree_add_item(ttl_tree, hf_ttl_header, tvb, offset, header_length, ENC_NA);
1335
0
    header_subtree = proto_item_add_subtree(ti, ett_ttl_header);
1336
1337
0
    proto_tree_add_item(header_subtree, hf_ttl_header_magic, tvb, offset, 4, ENC_NA);
1338
0
    offset += 4;
1339
0
    proto_tree_add_item_ret_uint(header_subtree, hf_ttl_header_file_format_version, tvb, offset, 4, ENC_LITTLE_ENDIAN, &format_version);
1340
0
    offset += 4;
1341
0
    ti = proto_tree_add_item_ret_uint(header_subtree, hf_ttl_header_block_size, tvb, offset, 4, ENC_LITTLE_ENDIAN, &block_size);
1342
0
    offset += 4;
1343
0
    if (block_size == 0) {
1344
0
        expert_add_info(pinfo, ti, &ei_ttl_block_size_too_short);
1345
0
    }
1346
0
    ti = proto_tree_add_item(header_subtree, hf_ttl_header_header_size, tvb, offset, 4, ENC_LITTLE_ENDIAN);
1347
0
    offset += 4;
1348
0
    if (header_length < sizeof(ttl_fileheader_t)) {
1349
0
        expert_add_info(pinfo, ti, &ei_ttl_header_size_too_short);
1350
0
    }
1351
0
    else if (header_length > INT32_MAX) {
1352
0
        expert_add_info(pinfo, ti, &ei_ttl_header_size_implausible);
1353
0
    }
1354
0
    else {
1355
0
        logfile_info_length = MIN(MIN(tvb_captured_length_remaining(tvb, offset), (int)header_length - offset), TTL_LOGFILE_INFO_SIZE);
1356
0
        ti = proto_tree_add_item(header_subtree, hf_ttl_header_logfile_info, tvb, offset, logfile_info_length, ENC_NA);
1357
0
        logfile_info_subtree = proto_item_add_subtree(ti, ett_ttl_header_logfile_info);
1358
1359
0
        if ((logfile_info_length < TTL_LOGFILE_INFO_SIZE) && format_version >= 10) {
1360
            /* Starting from format version 10, the header is at least TTL_LOGFILE_INFO_SIZE bytes */
1361
0
            expert_add_info(pinfo, ti, &ei_ttl_header_logfile_info_too_short);
1362
0
        }
1363
1364
0
        offset += dissect_ttl_logfile_information(tvb, pinfo, logfile_info_subtree, offset);
1365
1366
0
        if (format_version >= 10 && (int)header_length > offset) {
1367
0
            xml_length = MIN(tvb_captured_length_remaining(tvb, offset), (int)header_length - offset);
1368
0
            ti = proto_tree_add_item(header_subtree, hf_ttl_header_configuration, tvb, offset, xml_length, ENC_NA);
1369
1370
0
            if (xml_handle) {
1371
0
                configuration_subtree = proto_item_add_subtree(ti, ett_ttl_header_configuration);
1372
0
                tvbuff_t* new_tvb = tvb_new_subset_length(tvb, offset, xml_length);
1373
0
                call_dissector(xml_handle, new_tvb, pinfo, configuration_subtree);
1374
0
            }
1375
0
        }
1376
1377
0
        offset = (int)header_length;
1378
1379
0
        ti = proto_tree_add_item(ttl_tree, hf_ttl_trace_data, tvb, offset, -1, ENC_NA);
1380
0
        trace_data_subtree = proto_item_add_subtree(ti, ett_ttl_trace_data);
1381
1382
0
        if (block_size != 0) {
1383
0
            while ((remaining = tvb_captured_length_remaining(tvb, offset)) > 0) {
1384
0
                dissect_ttl_block(tvb, pinfo, trace_data_subtree, offset, MIN((int)block_size, remaining));
1385
0
                offset += block_size;
1386
0
            }
1387
0
        }
1388
1389
0
    }
1390
1391
0
    return offset;
1392
0
}
1393
1394
1395
static bool
1396
0
dissect_ttl_heur(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data) {
1397
0
    return dissect_ttl(tvb, pinfo, tree, data) > 0;
1398
0
}
1399
1400
void
1401
14
proto_register_file_ttl(void) {
1402
14
    expert_module_t* expert_ttl;
1403
1404
14
    static hf_register_info hf[] = {
1405
14
        { &hf_ttl_header,
1406
14
            { "Header Section", "ttl.header", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1407
14
        { &hf_ttl_header_magic,
1408
14
            { "Magic", "ttl.header.magic", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1409
14
        { &hf_ttl_header_file_format_version,
1410
14
            { "File Format Version", "ttl.header.version", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } },
1411
14
        { &hf_ttl_header_block_size,
1412
14
            { "Block Size", "ttl.header.block_size", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } },
1413
14
        { &hf_ttl_header_header_size,
1414
14
            { "Header Size", "ttl.header.header_size", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } },
1415
14
        { &hf_ttl_header_logfile_info,
1416
14
            { "Logfile Information", "ttl.header.logfile_info", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1417
1418
14
        { &hf_ttl_header_logfile_info_logger_sn,
1419
14
            { "Logger Serial Number", "ttl.header.logfile_info.logger_sn", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1420
14
        { &hf_ttl_header_logfile_info_logger_sw_version,
1421
14
            { "Logger Software Version", "ttl.header.logfile_info.logger_sw_version", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1422
14
        { &hf_ttl_header_logfile_info_measurement_creation_date,
1423
14
            { "Measurement Creation Date", "ttl.header.logfile_info.measurement_creation_date", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1424
14
        { &hf_ttl_header_logfile_info_measurement_creation_timestamp,
1425
14
            { "Measurement Creation Timestamp", "ttl.header.logfile_info.measurement_creation_timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL } },
1426
14
        { &hf_ttl_header_logfile_info_supplier_name,
1427
14
            { "Supplier Name", "ttl.header.logfile_info.supplier_name", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1428
14
        { &hf_ttl_header_logfile_info_description,
1429
14
            { "Description", "ttl.header.logfile_info.description", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1430
14
        { &hf_ttl_header_logfile_info_hw_version,
1431
14
            { "Hardware Version", "ttl.header.logfile_info.hw_version", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1432
14
        { &hf_ttl_header_logfile_info_configuration_file_name,
1433
14
            { "Configuration File Name", "ttl.header.logfile_info.config_filename", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1434
14
        { &hf_ttl_header_logfile_info_tracefile_sorted,
1435
14
            { "Tracefile Sorted", "ttl.header.logfile_info.tracefile_sorted", FT_UINT8, BASE_HEX, VALS(hf_ttl_header_logfile_info_tracefile_sorted_vals), 0x0, NULL, HFILL} },
1436
14
        { &hf_ttl_header_logfile_info_tracefile_split_index,
1437
14
            { "Tracefile Split Index", "ttl.header.logfile_info.tracefile_split_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
1438
14
        { &hf_ttl_header_logfile_info_completion_date,
1439
14
            { "Completion Date", "ttl.header.logfile_info.completion_date", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1440
14
        { &hf_ttl_header_logfile_info_completion_timestamp,
1441
14
            { "Completion Timestamp", "ttl.header.logfile_info.completion_timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL } },
1442
14
        { &hf_ttl_header_logfile_info_tc_sw_bootloader_version,
1443
14
            { "TC SW Bootloader Version", "ttl.header.logfile_info.tc_sw_bootloader_version", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1444
14
        { &hf_ttl_header_logfile_info_tc_sw_firmware_version,
1445
14
            { "TC SW Firmware Version", "ttl.header.logfile_info.tc_sw_firmware_version", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1446
14
        { &hf_ttl_header_logfile_info_most25_fw_version,
1447
14
            { "MOST25 Piggy Firmware Version", "ttl.header.logfile_info.most25_fw_version", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1448
14
        { &hf_ttl_header_logfile_info_most150_fw_version,
1449
14
            { "MOST150 Piggy Firmware Version", "ttl.header.logfile_info.most150_fw_version", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1450
14
        { &hf_ttl_header_logfile_info_split_file_creation_date,
1451
14
            { "Split File Creation Date", "ttl.header.logfile_info.split_file_creation_date", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1452
14
        { &hf_ttl_header_logfile_info_split_file_creation_timestamp,
1453
14
            { "Split File Creation Timestamp", "ttl.header.logfile_info.split_file_creation_timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL } },
1454
14
        { &hf_ttl_header_logfile_info_unused_bytes,
1455
14
            { "Unused Bytes", "ttl.header.logfile_info.unused", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1456
14
        { &hf_ttl_header_logfile_info_sleep_counter,
1457
14
            { "Sleep Counter", "ttl.header.logfile_info.sleep_counter", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } },
1458
14
        { &hf_ttl_header_logfile_info_reserved_bytes,
1459
14
            { "Reserved Bytes", "ttl.header.logfile_info.reserved", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1460
14
        { &hf_ttl_header_configuration,
1461
14
            { "Configuration", "ttl.header.configuration", FT_STRINGZPAD, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1462
1463
14
        { &hf_ttl_trace_data,
1464
14
            { "Trace Data Section", "ttl.trace_data", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1465
14
        { &hf_ttl_block,
1466
14
            { "Trace Data Block", "ttl.trace_data_block", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1467
14
        { &hf_ttl_trace_data_entry,
1468
14
            { "Trace Data Entry", "ttl.trace_data.entry", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1469
14
        { &hf_ttl_trace_data_entry_size,
1470
14
            { "Entry Size", "ttl.trace_data.entry.size", FT_UINT16, BASE_DEC_HEX, NULL, 0x0fff, NULL, HFILL } },
1471
14
        { &hf_ttl_trace_data_entry_type,
1472
14
            { "Entry Type", "ttl.trace_data.entry.type", FT_UINT16, BASE_DEC, VALS(hf_ttl_trace_data_entry_type_vals), 0xf000, NULL, HFILL} },
1473
1474
14
        { &hf_ttl_trace_data_entry_dest_addr,
1475
14
            { "Destination Address", "ttl.trace_data.entry.dst_addr", FT_UINT16, BASE_DEC_HEX, NULL, 0x1fff, NULL, HFILL } },
1476
14
        { &hf_ttl_trace_data_entry_dest_addr_cascade,
1477
14
            { "Destination Address Cascade", "ttl.trace_data.entry.dst_addr.cascade", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_cascade_vals), 0x1c00, NULL, HFILL } },
1478
14
        { &hf_ttl_trace_data_entry_dest_addr_device_logger,
1479
14
            { "Destination Address Device", "ttl.trace_data.entry.dst_addr.device", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_device_vals), 0x03c0, NULL, HFILL} },
1480
14
        { &hf_ttl_trace_data_entry_dest_addr_device_tap,
1481
14
            { "Destination Address Device", "ttl.trace_data.entry.dst_addr.device", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_tap_device_vals), 0x03c0, NULL, HFILL} },
1482
14
        { &hf_ttl_trace_data_entry_dest_addr_function_fpga,
1483
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_fpga_function_vals), 0x003f, NULL, HFILL} },
1484
14
        { &hf_ttl_trace_data_entry_dest_addr_function_atom,
1485
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_atom_function_vals), 0x003f, NULL, HFILL} },
1486
14
        { &hf_ttl_trace_data_entry_dest_addr_function_tricore1,
1487
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tricore1_function_vals), 0x003f, NULL, HFILL} },
1488
14
        { &hf_ttl_trace_data_entry_dest_addr_function_tricore2,
1489
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tricore2_function_vals), 0x003f, NULL, HFILL } },
1490
14
        { &hf_ttl_trace_data_entry_dest_addr_function_tricore3,
1491
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tricore3_function_vals), 0x003f, NULL, HFILL } },
1492
14
        { &hf_ttl_trace_data_entry_dest_addr_function_tda4x,
1493
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tda4x_function_vals), 0x003f, NULL, HFILL} },
1494
14
        { &hf_ttl_trace_data_entry_dest_addr_function_fpgaa,
1495
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_fpgaa_function_vals), 0x003f, NULL, HFILL } },
1496
14
        { &hf_ttl_trace_data_entry_dest_addr_function_fpgab,
1497
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_fpgab_function_vals), 0x003f, NULL, HFILL } },
1498
14
        { &hf_ttl_trace_data_entry_dest_addr_function_pt15_fpga,
1499
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pt15_fpga_function_vals), 0x003f, NULL, HFILL } },
1500
14
        { &hf_ttl_trace_data_entry_dest_addr_function_pt20_fpga,
1501
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pt20_fpga_function_vals), 0x003f, NULL, HFILL } },
1502
14
        { &hf_ttl_trace_data_entry_dest_addr_function_pc3_fpga,
1503
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pc3_fpga_function_vals), 0x003f, NULL, HFILL } },
1504
14
        { &hf_ttl_trace_data_entry_dest_addr_function_pc3_aurix,
1505
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pc3_aurix_function_vals), 0x003f, NULL, HFILL } },
1506
14
        { &hf_ttl_trace_data_entry_dest_addr_function_zelda_canfd,
1507
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_zelda_canfd_function_vals), 0x003f, NULL, HFILL } },
1508
14
        { &hf_ttl_trace_data_entry_dest_addr_function_zelda_lin,
1509
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_zelda_lin_function_vals), 0x003f, NULL, HFILL } },
1510
14
        { &hf_ttl_trace_data_entry_dest_addr_function_unknown,
1511
14
            { "Destination Address Function", "ttl.trace_data.entry.dst_addr.function", FT_UINT16, BASE_DEC_HEX, NULL, 0x003f, NULL, HFILL } },
1512
1513
14
        { &hf_ttl_trace_data_entry_meta1,
1514
14
            { "Meta 1", "ttl.trace_data.entry.meta1", FT_UINT16, BASE_DEC_HEX, NULL, 0xe000, NULL, HFILL } },
1515
14
        { &hf_ttl_trace_data_entry_meta1_frame_duplication,
1516
14
            { "Frame Duplication Marker", "ttl.trace_data.entry.frame_duplication", FT_BOOLEAN, 16, TFS(&hf_ttl_trace_data_entry_meta1_frame_duplication_tfs), 0x8000, NULL, HFILL } },
1517
14
        { &hf_ttl_trace_data_entry_meta1_compressed_format,
1518
14
            { "Compressed Format Field", "ttl.trace_data.entry.compressed_format", FT_BOOLEAN, 16, TFS(&hf_ttl_trace_data_entry_meta1_compressed_format_tfs), 0x4000, NULL, HFILL } },
1519
14
        { &hf_ttl_trace_data_entry_meta1_timestamp_source,
1520
14
            { "Timestamp Source Field", "ttl.trace_data.entry.timestamp_source", FT_BOOLEAN, 16, TFS(&hf_ttl_trace_data_entry_meta1_timestamp_source_tfs), 0x2000, NULL, HFILL } },
1521
1522
14
        { &hf_ttl_trace_data_entry_src_addr,
1523
14
            { "Source Address", "ttl.trace_data.entry.src_addr", FT_UINT16, BASE_DEC_HEX, NULL, 0x1fff, NULL, HFILL } },
1524
14
        { &hf_ttl_trace_data_entry_src_addr_cascade,
1525
14
            { "Source Address Cascade", "ttl.trace_data.entry.src_addr.cascade", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_cascade_vals), 0x1c00, NULL, HFILL } },
1526
14
        { &hf_ttl_trace_data_entry_src_addr_device_logger,
1527
14
            { "Source Address Device", "ttl.trace_data.entry.src_addr.device", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_device_vals), 0x03c0, NULL, HFILL} },
1528
14
        { &hf_ttl_trace_data_entry_src_addr_device_tap,
1529
14
            { "Source Address Device", "ttl.trace_data.entry.src_addr.device", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_tap_device_vals), 0x03c0, NULL, HFILL} },
1530
14
        { &hf_ttl_trace_data_entry_src_addr_function_fpga,
1531
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_fpga_function_vals), 0x003f, NULL, HFILL} },
1532
14
        { &hf_ttl_trace_data_entry_src_addr_function_atom,
1533
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_atom_function_vals), 0x003f, NULL, HFILL} },
1534
14
        { &hf_ttl_trace_data_entry_src_addr_function_tricore1,
1535
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tricore1_function_vals), 0x003f, NULL, HFILL} },
1536
14
        { &hf_ttl_trace_data_entry_src_addr_function_tricore2,
1537
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tricore2_function_vals), 0x003f, NULL, HFILL } },
1538
14
        { &hf_ttl_trace_data_entry_src_addr_function_tricore3,
1539
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tricore3_function_vals), 0x003f, NULL, HFILL } },
1540
14
        { &hf_ttl_trace_data_entry_src_addr_function_tda4x,
1541
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_tda4x_function_vals), 0x003f, NULL, HFILL} },
1542
14
        { &hf_ttl_trace_data_entry_src_addr_function_fpgaa,
1543
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_fpgaa_function_vals), 0x003f, NULL, HFILL } },
1544
14
        { &hf_ttl_trace_data_entry_src_addr_function_fpgab,
1545
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_logger_fpgab_function_vals), 0x003f, NULL, HFILL } },
1546
14
        { &hf_ttl_trace_data_entry_src_addr_function_pt15_fpga,
1547
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pt15_fpga_function_vals), 0x003f, NULL, HFILL } },
1548
14
        { &hf_ttl_trace_data_entry_src_addr_function_pt20_fpga,
1549
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pt20_fpga_function_vals), 0x003f, NULL, HFILL } },
1550
14
        { &hf_ttl_trace_data_entry_src_addr_function_pc3_fpga,
1551
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pc3_fpga_function_vals), 0x003f, NULL, HFILL } },
1552
14
        { &hf_ttl_trace_data_entry_src_addr_function_pc3_aurix,
1553
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_pc3_aurix_function_vals), 0x003f, NULL, HFILL } },
1554
14
        { &hf_ttl_trace_data_entry_src_addr_function_zelda_canfd,
1555
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_zelda_canfd_function_vals), 0x003f, NULL, HFILL } },
1556
14
        { &hf_ttl_trace_data_entry_src_addr_function_zelda_lin,
1557
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, VALS(hf_ttl_addr_zelda_lin_function_vals), 0x003f, NULL, HFILL } },
1558
14
        { &hf_ttl_trace_data_entry_src_addr_function_unknown,
1559
14
            { "Source Address Function", "ttl.trace_data.entry.src_addr.function", FT_UINT16, BASE_DEC_HEX, NULL, 0x003f, NULL, HFILL } },
1560
1561
14
        { &hf_ttl_trace_data_entry_meta2,
1562
14
            { "Meta 2", "ttl.trace_data.entry.meta2", FT_UINT16, BASE_DEC_HEX, NULL, 0xe000, NULL, HFILL }},
1563
14
        { &hf_ttl_trace_data_entry_ackmode,
1564
14
            { "Ack Mode", "ttl.trace_data.entry.ackmode", FT_UINT16, BASE_DEC, VALS(hf_ttl_trace_data_entry_ackmode_vals), 0xe000, NULL, HFILL}},
1565
1566
14
        { &hf_ttl_trace_data_entry_status_information,
1567
14
            { "Status Information", "ttl.trace_data.entry.status_info", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }},
1568
14
        { &hf_ttl_trace_data_entry_status_info_eth_type,
1569
14
            { "Type", "ttl.trace_data.entry.status_info.eth_type", FT_UINT16, BASE_HEX, VALS(hf_ttl_trace_data_entry_status_info_eth_type_vals), 0x0, NULL, HFILL} },
1570
14
        { &hf_ttl_trace_data_entry_status_info_can_flags,
1571
14
            { "CAN Flags", "ttl.trace_data.entry.status_info.can_flags", FT_UINT16, BASE_HEX, NULL, 0xf00f, NULL, HFILL } },
1572
14
        { &hf_ttl_trace_data_entry_status_info_can_valid_frame,
1573
14
            { "Valid Frame", "ttl.trace_data.entry.status_info.can_flags.valid", FT_BOOLEAN, 16, TFS(&tfs_valid_invalid), 0x0001, NULL, HFILL } },
1574
14
        { &hf_ttl_trace_data_entry_status_info_can_remote_frame,
1575
14
            { "Remote Frame", "ttl.trace_data.entry.status_info.can_flags.rtr", FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } },
1576
14
        { &hf_ttl_trace_data_entry_status_info_can_bus_off,
1577
14
            { "Bus Off", "ttl.trace_data.entry.status_info.can_flags.bus_off", FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } },
1578
14
        { &hf_ttl_trace_data_entry_status_info_can_matched,
1579
14
            { "Matched", "ttl.trace_data.entry.status_info.can_flags.matched", FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
1580
14
        { &hf_ttl_trace_data_entry_status_info_can_error_code,
1581
14
            { "CAN Error Code", "ttl.trace_data.entry.status_info.can_error_code", FT_UINT16, BASE_HEX, VALS(hf_ttl_trace_data_entry_status_info_can_error_code_vals), 0x0070, NULL, HFILL}},
1582
14
        { &hf_ttl_trace_data_entry_status_info_can_res,
1583
14
            { "Reserved", "ttl.trace_data.entry.status_info.can_res", FT_UINT16, BASE_HEX, NULL, 0x0080, NULL, HFILL } },
1584
14
        { &hf_ttl_trace_data_entry_status_info_can_dlc,
1585
14
            { "CAN DLC", "ttl.trace_data.entry.status_info.can_dlc", FT_UINT16, BASE_DEC, NULL, 0x0f00, NULL, HFILL } },
1586
14
        { &hf_ttl_trace_data_entry_status_info_can_ide,
1587
14
            { "Extended Frame", "ttl.trace_data.entry.status_info.can_flags.ide", FT_BOOLEAN, 16, NULL, 0x1000, NULL, HFILL } },
1588
14
        { &hf_ttl_trace_data_entry_status_info_can_edl,
1589
14
            { "Extended Data Length", "ttl.trace_data.entry.status_info.can_flags.edl", FT_BOOLEAN, 16, NULL, 0x2000, NULL, HFILL } },
1590
14
        { &hf_ttl_trace_data_entry_status_info_can_brs,
1591
14
            { "Bit Rate Switch", "ttl.trace_data.entry.status_info.can_flags.brs", FT_BOOLEAN, 16, NULL, 0x4000, NULL, HFILL } },
1592
14
        { &hf_ttl_trace_data_entry_status_info_can_esi,
1593
14
            { "Error State Indicator", "ttl.trace_data.entry.status_info.can_flags.esi", FT_BOOLEAN, 16, NULL, 0x8000, NULL, HFILL } },
1594
14
        { &hf_ttl_trace_data_entry_status_info_lin_pid,
1595
14
            { "LIN PID", "ttl.trace_data.entry.status_info.lin_pid", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } },
1596
14
        { &hf_ttl_trace_data_entry_status_info_lin_parity,
1597
14
            { "LIN Parity Bits", "ttl.trace_data.entry.status_info.lin_parity", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL } },
1598
14
        { &hf_ttl_trace_data_entry_status_info_lin_id,
1599
14
            { "LIN ID", "ttl.trace_data.entry.status_info.lin_id", FT_UINT8, BASE_DEC_HEX, NULL, 0x3f, NULL, HFILL } },
1600
14
        { &hf_ttl_trace_data_entry_status_info_lin_flags,
1601
14
            { "LIN Flags", "ttl.trace_data.entry.status_info.lin_flags", FT_UINT8, BASE_HEX, NULL, 0x3f, NULL, HFILL } },
1602
14
        { &hf_ttl_trace_data_entry_status_info_lin_parity_error,
1603
14
            { "Parity Error", "ttl.trace_data.entry.status_info.lin_flags.parity_error", FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } },
1604
14
        { &hf_ttl_trace_data_entry_status_info_lin_sync_error,
1605
14
            { "Sync Error", "ttl.trace_data.entry.status_info.lin_flags.sync_error", FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL } },
1606
14
        { &hf_ttl_trace_data_entry_status_info_lin_2_checksum_error,
1607
14
            { "LIN 2.x Checksum Error", "ttl.trace_data.entry.status_info.lin_flags.lin2_checksum_error", FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } },
1608
14
        { &hf_ttl_trace_data_entry_status_info_lin_1_checksum_error,
1609
14
            { "LIN 1.x Checksum Error", "ttl.trace_data.entry.status_info.lin_flags.lin1_checksum_error", FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } },
1610
14
        { &hf_ttl_trace_data_entry_status_info_lin_no_data_error,
1611
14
            { "No Slave Response", "ttl.trace_data.entry.status_info.lin_flags.no_slave_response", FT_BOOLEAN, 8, NULL, 0x10, NULL, HFILL } },
1612
14
        { &hf_ttl_trace_data_entry_status_info_lin_abort_error,
1613
14
            { "Abort Error", "ttl.trace_data.entry.status_info.lin_flags.abort_error", FT_BOOLEAN, 8, NULL, 0x20, NULL, HFILL } },
1614
14
        { &hf_ttl_trace_data_entry_status_info_lin_unused,
1615
14
            { "Unused", "ttl.trace_data.entry.status_info.lin_unused", FT_UINT8, BASE_HEX, NULL, 0xc0, NULL, HFILL } },
1616
14
        { &hf_ttl_trace_data_entry_status_info_fr_type,
1617
14
            { "Type", "ttl.trace_data.entry.status_info.fr_type", FT_UINT16, BASE_HEX, VALS(hf_ttl_trace_data_entry_status_info_fr_type_vals), 0x0007, NULL, HFILL}},
1618
14
        { &hf_ttl_trace_data_entry_status_info_fr_error_flags,
1619
14
            { "FlexRay Flags", "ttl.trace_data.entry.status_info.fr_flags", FT_UINT16, BASE_HEX, NULL, 0x07e8, NULL, HFILL } },
1620
14
        { &hf_ttl_trace_data_entry_status_info_fr_matched,
1621
14
            { "Matched", "ttl.trace_data.entry.status_info.fr_flags.matched", FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
1622
14
        { &hf_ttl_trace_data_entry_status_info_fr_res1,
1623
14
            { "Reserved", "ttl.trace_data.entry.status_info.fr_res1", FT_UINT16, BASE_HEX, NULL, 0x0010, NULL, HFILL } },
1624
14
        { &hf_ttl_trace_data_entry_status_info_fr_fss_error,
1625
14
            { "FSS Error", "ttl.trace_data.entry.status_info.fr_flags.fss_error", FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } },
1626
14
        { &hf_ttl_trace_data_entry_status_info_fr_bss_error,
1627
14
            { "BSS Error", "ttl.trace_data.entry.status_info.fr_flags.bss_error", FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } },
1628
14
        { &hf_ttl_trace_data_entry_status_info_fr_fes_error,
1629
14
            { "FES Error", "ttl.trace_data.entry.status_info.fr_flags.fes_error", FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } },
1630
14
        { &hf_ttl_trace_data_entry_status_info_fr_frame_crc_error,
1631
14
            { "Frame CRC Error", "ttl.trace_data.entry.status_info.fr_flags.frame_crc_error", FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL } },
1632
14
        { &hf_ttl_trace_data_entry_status_info_fr_header_crc_error,
1633
14
            { "Header CRC Error", "ttl.trace_data.entry.status_info.fr_flags.header_crc_error", FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL } },
1634
14
        { &hf_ttl_trace_data_entry_status_info_fr_idle_error,
1635
14
            { "Idle Error", "ttl.trace_data.entry.status_info.fr_flags.idle_error", FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL } },
1636
14
        { &hf_ttl_trace_data_entry_status_info_fr_res2,
1637
14
            { "Reserved", "ttl.trace_data.entry.status_info.fr_res2", FT_UINT16, BASE_HEX, NULL, 0xf800, NULL, HFILL } },
1638
14
        { &hf_ttl_trace_data_entry_status_info_fr_res3,
1639
14
            { "Reserved", "ttl.trace_data.entry.status_info.fr_res3", FT_UINT16, BASE_HEX, NULL, 0x07f0, NULL, HFILL } },
1640
14
        { &hf_ttl_trace_data_entry_status_info_fr_pulse_flags,
1641
14
            { "FlexRay Flags", "ttl.trace_data.entry.status_info.fr_pulse_flags", FT_UINT16, BASE_HEX, NULL, 0xe808, NULL, HFILL } },
1642
14
        { &hf_ttl_trace_data_entry_status_info_fr_low_phase_exceeded,
1643
14
            { "Low Phase Exceeded", "ttl.trace_data.entry.status_info.fr_flags.low_phase_exceeded", FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL } },
1644
14
        { &hf_ttl_trace_data_entry_status_info_fr_res4,
1645
14
            { "Reserved", "ttl.trace_data.entry.status_info.fr_res4", FT_UINT16, BASE_HEX, NULL, 0x1000, NULL, HFILL } },
1646
14
        { &hf_ttl_trace_data_entry_status_info_fr_cas,
1647
14
            { "Collision Avoidance Symbol", "ttl.trace_data.entry.status_info.fr_flags.cas", FT_BOOLEAN, 16, TFS(&tfs_recognized_not_recognized), 0x2000, NULL, HFILL}},
1648
14
        { &hf_ttl_trace_data_entry_status_info_fr_mts,
1649
14
            { "Media Test Symbol", "ttl.trace_data.entry.status_info.fr_flags.mts", FT_BOOLEAN, 16, TFS(&tfs_recognized_not_recognized), 0x4000, NULL, HFILL } },
1650
14
        { &hf_ttl_trace_data_entry_status_info_fr_wup,
1651
14
            { "Wake-Up Pattern", "ttl.trace_data.entry.status_info.fr_flags.wup", FT_BOOLEAN, 16, TFS(&tfs_recognized_not_recognized), 0x8000, NULL, HFILL } },
1652
14
        { &hf_ttl_trace_data_entry_status_info_fr_res5,
1653
14
            { "Reserved", "ttl.trace_data.entry.status_info.fr_res5", FT_UINT16, BASE_HEX, NULL, 0xfff8, NULL, HFILL } },
1654
1655
14
        { &hf_ttl_trace_data_entry_timestamp,
1656
14
            { "Timestamp", "ttl.trace_data.entry.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_LOCAL, NULL, 0x0, NULL, HFILL } },
1657
14
        { &hf_ttl_trace_data_entry_eth_unused,
1658
14
            { "Unused", "ttl.trace_data.entry.eth_unused", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1659
14
        { &hf_ttl_trace_data_entry_can_id,
1660
14
            { "CAN Frame ID", "ttl.trace_data.entry.can_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } },
1661
14
        { &hf_ttl_trace_data_entry_lin_checksum,
1662
14
            { "LIN Checksum", "ttl.trace_data.entry.lin_checksum", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1663
14
        { &hf_ttl_trace_data_entry_fr_low_phase_counter,
1664
14
            { "FlexRay Low Phase Counter", "ttl.trace_data.entry.fr_low_phase_counter", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1665
14
        { &hf_ttl_trace_data_entry_fr_unused,
1666
14
            { "Unused", "ttl.trace_data.entry.fr_unused", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1667
14
        { &hf_ttl_trace_data_entry_fr_eray_eir_register,
1668
14
            { "FlexRay Eray EIR Register", "ttl.trace_data.entry.fr_eir", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1669
14
        { &hf_ttl_trace_data_entry_fr_eray_stpw1_register,
1670
14
            { "FlexRay Eray STPW1 Register", "ttl.trace_data.entry.fr_stpw1", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1671
14
        { &hf_ttl_trace_data_entry_fr_eray_stpw2_register,
1672
14
            { "FlexRay Eray STPW2 Register", "ttl.trace_data.entry.fr_stpw2", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1673
14
        { &hf_ttl_trace_data_entry_fr_eray_ccsv_register,
1674
14
            { "FlexRay Eray CCSV Register", "ttl.trace_data.entry.fr_ccsv", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1675
14
        { &hf_ttl_trace_data_entry_fr_eray_ccev_register,
1676
14
            { "FlexRay Eray CCEV Register", "ttl.trace_data.entry.fr_ccev", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1677
14
        { &hf_ttl_trace_data_entry_fr_eray_swnit_register,
1678
14
            { "FlexRay Eray SWNIT Register", "ttl.trace_data.entry.fr_swnit", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1679
14
        { &hf_ttl_trace_data_entry_fr_eray_acs_register,
1680
14
            { "FlexRay Eray ACS Register", "ttl.trace_data.entry.fr_acs", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1681
1682
14
        { &hf_ttl_trace_data_entry_unparsed,
1683
14
            { "Unparsed Data", "ttl.trace_data.entry.unparsed", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1684
14
        { &hf_ttl_trace_data_entry_payload,
1685
14
            { "Payload", "ttl.trace_data.entry.payload", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1686
1687
14
        { &hf_ttl_eth_phy_status,
1688
14
            { "Ethernet PHY Status", "ttl.trace_data.entry.eth_phy_status", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } },
1689
14
        { &hf_ttl_eth_phy_status_valid,
1690
14
            { "Valid Entry", "ttl.trace_data.entry.eth_phy_status.valid", FT_BOOLEAN, 8, TFS(&tfs_valid_invalid), 0x80, NULL, HFILL } },
1691
14
        { &hf_ttl_eth_phy_status_res2,
1692
14
            { "Reserved", "ttl.trace_data.entry.eth_phy_status.res2", FT_UINT8, BASE_HEX, NULL, 0x60, NULL, HFILL } },
1693
14
        { &hf_ttl_eth_phy_status_phy_addr,
1694
14
            { "PHY Address", "ttl.trace_data.entry.eth_phy_status.phy_addr", FT_UINT8, BASE_HEX, VALS(hf_ttl_eth_phy_status_phy_addr_vals), 0x1f, NULL, HFILL } },
1695
14
        { &hf_ttl_eth_phy_status_unused,
1696
14
            { "Unused", "ttl.trace_data.entry.eth_phy_status.unused", FT_UINT8, BASE_HEX, NULL, 0x1f, NULL, HFILL } },
1697
14
        { &hf_ttl_eth_phy_status_res1,
1698
14
            { "Reserved", "ttl.trace_data.entry.eth_phy_status.res1", FT_UINT8, BASE_HEX, NULL, 0xe0, NULL, HFILL } },
1699
14
        { &hf_ttl_eth_phy_status_reg_addr,
1700
14
            { "MDIO Register", "ttl.trace_data.entry.eth_phy_status.reg_addr", FT_UINT8, BASE_HEX, NULL, 0x1f, NULL, HFILL } },
1701
14
        { &hf_ttl_eth_phy_status_data,
1702
14
            { "MDIO Data", "ttl.trace_data.entry.eth_phy_status.data", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
1703
14
    };
1704
1705
14
    static ei_register_info ei[] = {
1706
14
        { &ei_ttl_block_size_too_short,
1707
14
            { "ttl.block_size_too_short", PI_MALFORMED, PI_ERROR,
1708
14
                "block size is too short",
1709
14
                EXPFILL }},
1710
14
        { &ei_ttl_header_size_too_short,
1711
14
            { "ttl.header_size_too_short", PI_MALFORMED, PI_ERROR,
1712
14
                "header size is too short",
1713
14
                EXPFILL }},
1714
14
        { &ei_ttl_header_size_implausible,
1715
14
            { "ttl.header_size_implausible", PI_MALFORMED, PI_ERROR,
1716
14
                "header size is implausible",
1717
14
                EXPFILL }},
1718
14
        { &ei_ttl_header_logfile_info_too_short,
1719
14
            { "ttl.header.logfile_info_too_short", PI_MALFORMED, PI_ERROR,
1720
14
                "logfile info is too short",
1721
14
                EXPFILL }},
1722
14
        { &ei_ttl_entry_size_too_short,
1723
14
            { "ttl.trace_data.entry_size_too_short", PI_MALFORMED, PI_ERROR,
1724
14
                "entry size is too short",
1725
14
                EXPFILL }},
1726
14
    };
1727
1728
14
    static int* ett[] = {
1729
14
        &ett_ttl,
1730
14
        &ett_ttl_header,
1731
14
        &ett_ttl_header_logfile_info,
1732
14
        &ett_ttl_header_configuration,
1733
14
        &ett_ttl_trace_data,
1734
14
        &ett_ttl_block,
1735
14
        &ett_ttl_trace_data_entry,
1736
14
        &ett_ttl_trace_data_entry_dest_addr,
1737
14
        &ett_ttl_trace_data_entry_src_addr,
1738
14
        &ett_ttl_trace_data_entry_meta1,
1739
14
        &ett_ttl_trace_data_entry_status_information,
1740
14
        &ett_ttl_trace_data_entry_status_info_can_flags,
1741
14
        &ett_ttl_trace_data_entry_status_info_lin_flags,
1742
14
        &ett_ttl_trace_data_entry_status_info_lin_pid,
1743
14
        &ett_ttl_trace_data_entry_status_info_fr_error_flags,
1744
14
        &ett_ttl_trace_data_entry_status_info_fr_pulse_flags,
1745
14
        &ett_ttl_trace_data_entry_payload,
1746
14
        &ett_ttl_eth_phy_status,
1747
14
    };
1748
1749
14
    proto_ttl = proto_register_protocol("TTL File Format", "File-TTL", "file-ttl");
1750
14
    expert_ttl = expert_register_protocol(proto_ttl);
1751
14
    expert_register_field_array(expert_ttl, ei, array_length(ei));
1752
1753
14
    proto_register_field_array(proto_ttl, hf, array_length(hf));
1754
14
    proto_register_subtree_array(ett, array_length(ett));
1755
1756
14
    register_dissector("file-ttl", dissect_ttl, proto_ttl);
1757
14
}
1758
1759
void
1760
14
proto_reg_handoff_file_ttl(void) {
1761
14
    heur_dissector_add("wtap_file", dissect_ttl_heur, "TTL File", "ttl_wtap", proto_ttl, HEURISTIC_ENABLE);
1762
14
    xml_handle = find_dissector_add_dependency("xml", proto_ttl);
1763
14
}
1764
1765
/*
1766
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
1767
 *
1768
 * Local Variables:
1769
 * c-basic-offset: 4
1770
 * tab-width: 8
1771
 * indent-tabs-mode: nil
1772
 * End:
1773
 *
1774
 * ex: set shiftwidth=4 tabstop=8 expandtab:
1775
 * :indentSize=4:tabSize=8:noTabs=true:
1776
 */