Bug Summary

File:builds/wireshark/wireshark/epan/dissectors/packet-asam-cmp.c
Warning:line 3288, column 13
Value stored to 'offset' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-asam-cmp.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-22/lib/clang/22 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D CARES_NO_DEPRECATED -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-22/lib/clang/22/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/16/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-nonliteral -std=gnu17 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -fdwarf2-cfi-asm -o /builds/wireshark/wireshark/sbout/2026-11-05-100337-3661-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-asam-cmp.c
1/* packet-asam-cmp.c
2 * ASAM Capture Module Protocol dissector.
3 * Copyright 2021-2023 Alicia Mediano Schikarski, Technica Engineering GmbH
4 * Copyright 2021-2026 Dr. Lars Völker, Technica Engineering GmbH
5 *
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 */
12
13 /*
14 * This is a dissector for the Capture Module Protocol standardized by the ASAM.
15 * ASAM CMP is the standardized successor of TECMP.
16 */
17
18#include "config.h"
19
20#include "math.h"
21
22#include <epan/packet.h>
23#include <epan/uat.h>
24#include <epan/expert.h>
25#include <epan/tfs.h>
26#include <epan/unit_strings.h>
27
28#include "packet-socketcan.h"
29#include "packet-flexray.h"
30#include "packet-lin.h"
31
32void proto_register_asam_cmp(void);
33void proto_reg_handoff_asam_cmp(void);
34
35static int proto_asam_cmp;
36
37static dissector_handle_t eth_handle;
38
39static bool_Bool heuristic_first;
40static bool_Bool old_11bit_canid_encoding;
41
42/* Header fields */
43static int hf_cmp_header;
44static int hf_cmp_version;
45static int hf_cmp_header_res;
46static int hf_cmp_device_id;
47static int hf_cmp_msg_type;
48static int hf_cmp_stream_id;
49static int hf_cmp_stream_seq_ctr;
50
51/* Message Fields */
52/* Message Header Fields */
53static int hf_cmp_msg_header;
54
55static int hf_cmp_common_flag_recal;
56static int hf_cmp_common_flag_relative;
57static int hf_cmp_common_flag_insync;
58static int hf_cmp_common_flag_reserved_0x02;
59static int hf_cmp_common_flag_seg;
60static int hf_cmp_common_flag_dir_on_if;
61static int hf_cmp_common_flag_overflow;
62static int hf_cmp_common_flag_err_in_payload;
63static int hf_cmp_common_flag_reserved;
64static int hf_cmp_common_flag_reserved_0xf0;
65
66static int hf_cmp_msg_timestamp;
67static int hf_cmp_msg_timestamp_ns;
68static int hf_cmp_msg_deadline;
69static int hf_cmp_msg_reserved;
70static int hf_cmp_msg_trans_opts;
71static int hf_cmp_msg_trans_opts_res;
72static int hf_cmp_msg_trans_opts_lin_wup_dura;
73static int hf_cmp_msg_trans_opts_lin_res;
74static int hf_cmp_msg_trans_opts_fr_op;
75static int hf_cmp_msg_trans_opts_fr_cycle_rep;
76static int hf_cmp_msg_trans_opts_fr_res;
77static int hf_cmp_msg_common_flags;
78static int hf_cmp_msg_vendor_id;
79static int hf_cmp_msg_payload_length;
80static int hf_cmp_msg_payload;
81
82/* Additional Data Message Header Fields */
83static int hf_cmp_interface_id;
84static int hf_cmp_payload_type;
85
86/* Additional Control Message Header Fields */
87static int hf_cmp_ctrl_msg_reserved;
88static int hf_cmp_ctrl_msg_payload_type;
89
90/* Additional Status Message Header Fields */
91static int hf_cmp_status_msg_payload_type;
92
93/* Additional Status Message Header Fields */
94static int hf_cmp_vendor_msg_payload_type;
95
96/* Data Message Payload Fields */
97/* CAN */
98#define CMP_CAN_FLAGS_ERRORS0x03ff 0x03ff
99#define CMP_CAN_ID_11BIT_MASK0x1ffc0000 0x1ffc0000
100#define CMP_CAN_ID_11BIT_SHIFT18 18
101#define CMP_CAN_ID_11BIT_MASK_OLD0x000007ff 0x000007ff
102#define CMP_CAN_ID_29BIT_MASK0x1fffffff 0x1fffffff
103#define CMP_CAN_ID_ERR0x20000000 0x20000000
104#define CMP_CAN_ID_RTR0x40000000 0x40000000
105#define CMP_CAN_ID_IDE0x80000000 0x80000000
106
107#define CMP_CAN_CRC_CRC0x00007fff 0x00007fff
108#define CMP_CAN_CRC_RES0x7fff8000 0x7fff8000
109#define CMP_CAN_CRC_CRC_SUPP0x80000000 0x80000000
110
111static int hf_cmp_can_flags;
112
113static int hf_cmp_can_flag_crc_err;
114static int hf_cmp_can_flag_ack_err;
115static int hf_cmp_can_flag_passive_ack_err;
116static int hf_cmp_can_flag_reserved_0004;
117static int hf_cmp_can_flag_active_ack_err;
118static int hf_cmp_can_flag_reserved_0008;
119static int hf_cmp_can_flag_ack_del_err;
120static int hf_cmp_can_flag_form_err;
121static int hf_cmp_can_flag_stuff_err;
122static int hf_cmp_can_flag_crc_del_err;
123static int hf_cmp_can_flag_eof_err;
124static int hf_cmp_can_flag_bit_err;
125static int hf_cmp_can_flag_r0;
126static int hf_cmp_can_flag_srr_dom;
127static int hf_cmp_can_flag_reserved;
128static int hf_cmp_can_flag_reserved_1000;
129static int hf_cmp_can_flag_reserved_2000;
130static int hf_cmp_can_flag_gen_err;
131static int hf_cmp_can_flag_reserved_tx;
132
133static int hf_cmp_can_reserved;
134static int hf_cmp_can_id;
135static int hf_cmp_can_id_11bit;
136static int hf_cmp_can_id_11bit_old;
137static int hf_cmp_can_id_29bit;
138static int hf_cmp_can_id_err;
139static int hf_cmp_can_id_rtr;
140static int hf_cmp_can_id_ide;
141static int hf_cmp_can_crc;
142static int hf_cmp_can_crc_crc;
143static int hf_cmp_can_crc_res;
144static int hf_cmp_can_crc_crc_support;
145static int hf_cmp_can_err_pos;
146static int hf_cmp_can_dlc;
147static int hf_cmp_can_data_len;
148
149/* CAN FD */
150#define CMP_CANFD_FLAGS_ERRORS0x03ff 0x03ff
151#define CMP_CANFD_ID_ERR0x20000000 0x20000000
152#define CMP_CANFD_ID_RRS0x40000000 0x40000000
153#define CMP_CANFD_ID_IDE0x80000000 0x80000000
154
155#define CMP_CANFD_CRC_CRC170x0001ffff 0x0001ffff
156#define CMP_CANFD_CRC_CRC210x001fffff 0x001fffff
157#define CMP_CANFD_CRC_SBC0x00e00000 0x00e00000
158#define CMP_CANFD_CRC_SBC_PARITY0x01000000 0x01000000
159#define CMP_CANFD_CRC_RES0x3e000000 0x3e000000
160#define CMP_CANFD_CRC_SBC_SUPP0x40000000 0x40000000
161#define CMP_CANFD_CRC_CRC_SUPP0x80000000 0x80000000
162
163static int hf_cmp_canfd_flags;
164
165static int hf_cmp_canfd_flag_crc_err;
166static int hf_cmp_canfd_flag_ack_err;
167static int hf_cmp_canfd_flag_passive_ack_err;
168static int hf_cmp_canfd_flag_reserved_0004;
169static int hf_cmp_canfd_flag_active_ack_err;
170static int hf_cmp_canfd_flag_reserved_0008;
171static int hf_cmp_canfd_flag_ack_del_err;
172static int hf_cmp_canfd_flag_form_err;
173static int hf_cmp_canfd_flag_stuff_err;
174static int hf_cmp_canfd_flag_crc_del_err;
175static int hf_cmp_canfd_flag_eof_err;
176static int hf_cmp_canfd_flag_bit_err;
177static int hf_cmp_canfd_flag_res;
178static int hf_cmp_canfd_flag_srr_dom;
179static int hf_cmp_canfd_flag_brs;
180static int hf_cmp_canfd_flag_esi;
181static int hf_cmp_canfd_flag_reserved;
182static int hf_cmp_canfd_flag_gen_err;
183static int hf_cmp_canfd_flag_reserved_tx;
184
185static int hf_cmp_canfd_reserved;
186static int hf_cmp_canfd_id;
187static int hf_cmp_canfd_id_11bit;
188static int hf_cmp_canfd_id_11bit_old;
189static int hf_cmp_canfd_id_29bit;
190static int hf_cmp_canfd_id_err;
191static int hf_cmp_canfd_id_rrs;
192static int hf_cmp_canfd_id_ide;
193static int hf_cmp_canfd_crc;
194static int hf_cmp_canfd_crc_crc17;
195static int hf_cmp_canfd_crc_crc21;
196static int hf_cmp_canfd_crc_sbc;
197static int hf_cmp_canfd_crc_sbc_parity;
198static int hf_cmp_canfd_crc_res;
199static int hf_cmp_canfd_crc_sbc_support;
200static int hf_cmp_canfd_crc_crc_support;
201static int hf_cmp_canfd_err_pos;
202static int hf_cmp_canfd_dlc;
203static int hf_cmp_canfd_data_len;
204
205/* LIN */
206#define CMP_CANFD_PID_PARITY_MASK0xc0 0xc0
207#define CMP_CANFD_PID_ID_MASK0x3f 0x3f
208
209static int hf_cmp_lin_flags;
210static int hf_cmp_lin_flag_checksum_err;
211static int hf_cmp_lin_flag_col_err;
212static int hf_cmp_lin_flag_reserved_0x0002;
213static int hf_cmp_lin_flag_parity_err;
214static int hf_cmp_lin_flag_no_slave_res;
215static int hf_cmp_lin_flag_reserved_0x0008;
216static int hf_cmp_lin_flag_sync_err;
217static int hf_cmp_lin_flag_framing_err;
218static int hf_cmp_lin_flag_short_dom_err;
219static int hf_cmp_lin_flag_long_dom_err;
220static int hf_cmp_lin_flag_wup;
221static int hf_cmp_lin_flag_reserved;
222
223static int hf_cmp_lin_reserved;
224static int hf_cmp_lin_pid;
225static int hf_cmp_lin_pid_parity;
226static int hf_cmp_lin_pid_id;
227static int hf_cmp_lin_reserved_2;
228static int hf_cmp_lin_checksum;
229static int hf_cmp_lin_data_len;
230
231/* FlexRay */
232#define CMP_FLEXRAY_FLAGS_NF0x0004 0x0004
233
234static int hf_cmp_flexray_flags;
235
236static int hf_cmp_flexray_flag_crc_frame_err;
237static int hf_cmp_flexray_flag_crc_header_err;
238static int hf_cmp_flexray_flag_nf;
239static int hf_cmp_flexray_flag_sf;
240static int hf_cmp_flexray_flag_sync;
241static int hf_cmp_flexray_flag_wus;
242static int hf_cmp_flexray_flag_ppi;
243static int hf_cmp_flexray_flag_cas;
244static int hf_cmp_flexray_flag_reserved_0x0100;
245static int hf_cmp_flexray_flag_leading;
246static int hf_cmp_flexray_flag_channel;
247static int hf_cmp_flexray_flag_reserved;
248
249static int hf_cmp_flexray_reserved;
250static int hf_cmp_flexray_header_crc;
251static int hf_cmp_flexray_frame_id;
252static int hf_cmp_flexray_cycle;
253static int hf_cmp_flexray_frame_crc;
254static int hf_cmp_flexray_reserved_2;
255static int hf_cmp_flexray_data_len;
256
257/* Digital */
258#define CMP_DIGITAL_FLAG_TRIGGER_PRESENT0x0001 0x0001
259#define CMP_DIGITAL_FLAG_SAMPLE_PRESENT0x0002 0x0002
260
261static int hf_cmp_digital_flags;
262
263static int hf_cmp_digital_flag_trig_present;
264static int hf_cmp_digital_flag_sampl_present;
265static int hf_cmp_digital_flag_reserved;
266
267static int hf_cmp_digital_reserved;
268static int hf_cmp_digital_pin_count;
269
270static int hf_cmp_digital_trig_pattern;
271static int hf_cmp_digital_trig_pin;
272static int hf_cmp_digital_flag_reserved2;
273
274static int hf_cmp_digital_sample_interval;
275static int hf_cmp_digital_sample_count;
276
277static int hf_cmp_digital_sample;
278
279/* define 32 Pins for now */
280static int hf_cmp_digital_sample_pin_0;
281static int hf_cmp_digital_sample_pin_1;
282static int hf_cmp_digital_sample_pin_2;
283static int hf_cmp_digital_sample_pin_3;
284static int hf_cmp_digital_sample_pin_4;
285static int hf_cmp_digital_sample_pin_5;
286static int hf_cmp_digital_sample_pin_6;
287static int hf_cmp_digital_sample_pin_7;
288
289static int hf_cmp_digital_sample_pin_8;
290static int hf_cmp_digital_sample_pin_9;
291static int hf_cmp_digital_sample_pin_10;
292static int hf_cmp_digital_sample_pin_11;
293static int hf_cmp_digital_sample_pin_12;
294static int hf_cmp_digital_sample_pin_13;
295static int hf_cmp_digital_sample_pin_14;
296static int hf_cmp_digital_sample_pin_15;
297
298static int hf_cmp_digital_sample_pin_16;
299static int hf_cmp_digital_sample_pin_17;
300static int hf_cmp_digital_sample_pin_18;
301static int hf_cmp_digital_sample_pin_19;
302static int hf_cmp_digital_sample_pin_20;
303static int hf_cmp_digital_sample_pin_21;
304static int hf_cmp_digital_sample_pin_22;
305static int hf_cmp_digital_sample_pin_23;
306
307static int hf_cmp_digital_sample_pin_24;
308static int hf_cmp_digital_sample_pin_25;
309static int hf_cmp_digital_sample_pin_26;
310static int hf_cmp_digital_sample_pin_27;
311static int hf_cmp_digital_sample_pin_28;
312static int hf_cmp_digital_sample_pin_29;
313static int hf_cmp_digital_sample_pin_30;
314static int hf_cmp_digital_sample_pin_31;
315
316/* UART/RS-232 */
317#define CMP_UART_DATA_DATA_MASK0x01FF 0x01FF
318
319static int hf_cmp_uart_flags;
320
321static int hf_cmp_uart_flag_cl;
322static int hf_cmp_uart_flag_reserved;
323
324static int hf_cmp_uart_reserved;
325static int hf_cmp_uart_data_len;
326static int hf_cmp_uart_data;
327
328static int hf_cmp_uart_data_data;
329static int hf_cmp_uart_data_reserved;
330static int hf_cmp_uart_data_framing_err;
331static int hf_cmp_uart_data_break_condition;
332static int hf_cmp_uart_data_parity_err;
333
334/* Analog */
335static int hf_cmp_analog_flags;
336
337static int hf_cmp_analog_flag_sample_dt;
338static int hf_cmp_analog_flag_reserved;
339
340static int hf_cmp_analog_reserved;
341static int hf_cmp_analog_unit;
342static int hf_cmp_analog_sample_interval;
343static int hf_cmp_analog_sample_offset;
344static int hf_cmp_analog_sample_scalar;
345static int hf_cmp_analog_sample;
346static int hf_cmp_analog_sample_raw;
347
348/* Ethernet */
349static int hf_cmp_eth_flags;
350
351static int hf_cmp_eth_flag_fcs_err;
352static int hf_cmp_eth_flag_short_err;
353static int hf_cmp_eth_flag_tx_down;
354static int hf_cmp_eth_flag_collision;
355static int hf_cmp_eth_flag_long_err;
356static int hf_cmp_eth_flag_phy_err;
357static int hf_cmp_eth_flag_truncated;
358static int hf_cmp_eth_flag_fcs_supported;
359static int hf_cmp_eth_flag_reserved_cap;
360
361static int hf_cmp_eth_flag_reserved_tx;
362static int hf_cmp_eth_flag_fcs_sending;
363static int hf_cmp_eth_flag_reserved_tx2;
364
365static int hf_cmp_eth_reserved;
366static int hf_cmp_eth_payload_length;
367
368/* SPI */
369static int hf_cmp_spi_flags;
370
371static int hf_cmp_spi_flag_reserved;
372
373static int hf_cmp_spi_reserved;
374static int hf_cmp_spi_cipo_length;
375static int hf_cmp_spi_cipo;
376static int hf_cmp_spi_copi_length;
377static int hf_cmp_spi_copi;
378
379/* I2C */
380static int hf_cmp_i2c_flags;
381static int hf_cmp_i2c_flag_dir;
382static int hf_cmp_i2c_flag_addr_len;
383static int hf_cmp_i2c_flag_addr_ack;
384static int hf_cmp_i2c_flag_addr_err;
385static int hf_cmp_i2c_flag_stop_cond;
386static int hf_cmp_i2c_flag_start_cond;
387static int hf_cmp_i2c_flag_reserved;
388
389static int hf_cmp_i2c_reserved;
390static int hf_cmp_i2c_addr;
391static int hf_cmp_i2c_data_entry_count;
392static int hf_cmp_i2c_data;
393static int hf_cmp_i2c_data_byte;
394static int hf_cmp_i2c_data_control_ack;
395static int hf_cmp_i2c_data_control_res;
396
397/* GigE Vision */
398static int hf_cmp_gige_flags;
399static int hf_cmp_gige_flag_reserved;
400
401static int hf_cmp_gige_reserved;
402static int hf_cmp_gige_payload_length;
403static int hf_cmp_gige_payload;
404
405/* MIPI CSI-2 */
406static int hf_cmp_mipi_csi2_flags;
407static int hf_cmp_mipi_csi2_flag_crc_err;
408static int hf_cmp_mipi_csi2_flag_ecc_err_c;
409static int hf_cmp_mipi_csi2_flag_ecc_err_uc;
410static int hf_cmp_mipi_csi2_flag_ecc_fmt;
411static int hf_cmp_mipi_csi2_flag_frame_ctr_src;
412static int hf_cmp_mipi_csi2_flag_line_ctr_src;
413static int hf_cmp_mipi_csi2_flag_cs_support;
414static int hf_cmp_mipi_csi2_flag_reserved;
415
416static int hf_cmp_mipi_csi2_flag_reserved_tx;
417
418static int hf_cmp_mipi_csi2_reserved;
419static int hf_cmp_mipi_csi2_frame_counter;
420static int hf_cmp_mipi_csi2_line_counter;
421static int hf_cmp_mipi_csi2_dt;
422static int hf_cmp_mipi_csi2_dt_res;
423static int hf_cmp_mipi_csi2_dt_dt;
424static int hf_cmp_mipi_csi2_vci;
425static int hf_cmp_mipi_csi2_vci_res;
426static int hf_cmp_mipi_csi2_vci_vcx;
427static int hf_cmp_mipi_csi2_vci_vci;
428static int hf_cmp_mipi_csi2_reserved2;
429static int hf_cmp_mipi_csi2_ecc;
430static int hf_cmp_mipi_csi2_ecc_res;
431static int hf_cmp_mipi_csi2_ecc_ecc;
432static int hf_cmp_mipi_csi2_cs;
433static int hf_cmp_mipi_csi2_wc;
434static int hf_cmp_mipi_csi2_short_packet_data;
435static int hf_cmp_mipi_csi2_data;
436
437/* Raw Ethernet */
438static int hf_cmp_raw_eth_flags;
439static int hf_cmp_raw_eth_flag_reserved;
440
441static int hf_cmp_raw_eth_reserved;
442static int hf_cmp_raw_eth_payload_length;
443static int hf_cmp_raw_eth_preamble;
444static int hf_cmp_raw_eth_sfd;
445static int hf_cmp_raw_eth_mpacket;
446
447/* 10BASE-T1S Symbols */
448static int hf_cmp_10t1s_symb_flags;
449static int hf_cmp_10t1s_symb_flag_decode_err;
450static int hf_cmp_10t1s_symb_flag_miss_beacon;
451static int hf_cmp_10t1s_symb_flag_res;
452static int hf_cmp_10t1s_symb_flag_first_beacon;
453
454static int hf_cmp_10t1s_symb_data_length;
455static int hf_cmp_10t1s_symb_data;
456static int hf_cmp_10t1s_symb_data_symbol;
457
458/* A2B */
459static int hf_cmp_a2b_flags;
460static int hf_cmp_a2b_flag_fin;
461static int hf_cmp_a2b_flag_fault_err;
462static int hf_cmp_a2b_flag_fault_code;
463static int hf_cmp_a2b_flag_fault_nloc;
464static int hf_cmp_a2b_flag_hdcnt_err;
465static int hf_cmp_a2b_flag_dd_err;
466static int hf_cmp_a2b_flag_crc_err;
467static int hf_cmp_a2b_flag_dp_err;
468static int hf_cmp_a2b_flag_pwd_err;
469static int hf_cmp_a2b_flag_becovf_err;
470static int hf_cmp_a2b_flag_srf_err;
471static int hf_cmp_a2b_flag_srfcrc_err;
472static int hf_cmp_a2b_flag_icrc_err;
473static int hf_cmp_a2b_flag_i2c_err;
474
475static int hf_cmp_a2b_reserved;
476static int hf_cmp_a2b_upstream_set;
477static int hf_cmp_a2b_upstream_set_upfmt;
478static int hf_cmp_a2b_upstream_set_ups;
479static int hf_cmp_a2b_upstream_set_upsize;
480static int hf_cmp_a2b_upstream_set_upslots;
481static int hf_cmp_a2b_upstream_set_upoffset;
482
483static int hf_cmp_a2b_downstream_set;
484static int hf_cmp_a2b_downstream_set_dnfmt;
485static int hf_cmp_a2b_downstream_set_dns;
486static int hf_cmp_a2b_downstream_set_dnsize;
487static int hf_cmp_a2b_downstream_set_dnslots;
488static int hf_cmp_a2b_downstream_set_dnoffset;
489
490static int hf_cmp_a2b_general_set;
491static int hf_cmp_a2b_general_set_mstr;
492static int hf_cmp_a2b_general_set_standby;
493static int hf_cmp_a2b_general_set_endsniff;
494static int hf_cmp_a2b_general_set_discvd;
495static int hf_cmp_a2b_general_set_tx2pintl;
496static int hf_cmp_a2b_general_set_rx2pintl;
497static int hf_cmp_a2b_general_set_tdmmode;
498static int hf_cmp_a2b_general_set_tdmss;
499static int hf_cmp_a2b_general_set_bmmen;
500static int hf_cmp_a2b_general_set_bclkrate;
501static int hf_cmp_a2b_general_set_i2srate;
502static int hf_cmp_a2b_general_set_txoffset;
503static int hf_cmp_a2b_general_set_rxoffset;
504static int hf_cmp_a2b_general_set_syncoffset;
505static int hf_cmp_a2b_general_set_rrdiv;
506static int hf_cmp_a2b_general_set_rrsoffset;
507static int hf_cmp_a2b_general_set_reserved;
508static int hf_cmp_a2b_general_set_raw_cap;
509
510static int hf_cmp_a2b_data_length;
511static int hf_cmp_a2b_data;
512
513/* Link State */
514static int hf_cmp_link_state_flags;
515static int hf_cmp_link_state_flag_link_err;
516static int hf_cmp_link_state_flag_reserved;
517
518static int hf_cmp_link_state_flag_reserved_tx;
519
520static int hf_cmp_link_state_interface_status;
521static int hf_cmp_link_state_reserved;
522
523/* Vendor Defined */
524static int hf_cmp_vendor_def_vendor_id;
525static int hf_cmp_vendor_def_vendor_payload_type;
526static int hf_cmp_vendor_def_vendor_payload_data;
527
528/* Control Message Payload Fields */
529/* Data Sink Ready */
530static int hf_cmp_ctrl_msg_device_id;
531
532/* User Event */
533static int hf_cmp_ctrl_msg_event_id;
534
535/* Vendor specific */
536static int hf_cmp_ctrl_msg_vendor_id;
537static int hf_cmp_ctrl_msg_vendor_payload_type;
538
539/* Status Message Payload Fields */
540/* Capture Module Status Message */
541static int hf_cmp_status_msg_cm_uptime_ns;
542static int hf_cmp_status_msg_cm_uptime_s;
543static int hf_cmp_status_msg_gm_identity;
544static int hf_cmp_status_msg_gm_clock_quality;
545static int hf_cmp_status_msg_current_utc_offset;
546static int hf_cmp_status_msg_time_source;
547static int hf_cmp_status_msg_domain_num;
548static int hf_cmp_status_msg_res;
549static int hf_cmp_gptp_flags;
550
551static int hf_cmp_gptp_flags_leap61;
552static int hf_cmp_gptp_flags_leap59;
553static int hf_cmp_gptp_flags_cur_utco_valid;
554static int hf_cmp_gptp_flags_ptp_timescale;
555static int hf_cmp_gptp_flags_time_traceable;
556static int hf_cmp_gptp_flags_freq_traceable;
557static int hf_cmp_gptp_flags_reserved;
558
559static int hf_cmp_status_dev_desc_length;
560static int hf_cmp_status_dev_desc;
561static int hf_cmp_status_sn_length;
562static int hf_cmp_status_sn;
563static int hf_cmp_status_hw_ver_length;
564static int hf_cmp_status_hw_ver;
565static int hf_cmp_status_sw_ver_length;
566static int hf_cmp_status_sw_ver;
567static int hf_cmp_status_vendor_data_length;
568static int hf_cmp_status_vendor_data;
569
570/* Technica Engineering Vendor Data in CM Status Message */
571static int hf_cmp_status_technica_major;
572static int hf_cmp_status_technica_minor;
573static int hf_cmp_status_technica_product_id;
574static int hf_cmp_status_technica_reserved;
575static int hf_cmp_status_technica_meas_size;
576static int hf_cmp_status_technica_meas;
577static int hf_cmp_status_technica_meas_flags;
578static int hf_cmp_status_technica_meas_flag_ovfl;
579static int hf_cmp_status_technica_meas_flag_res;
580static int hf_cmp_status_technica_fill_level;
581static int hf_cmp_status_technica_buffer_size_mbit;
582static int hf_cmp_status_technica_voltage;
583static int hf_cmp_status_technica_temp_chassis;
584static int hf_cmp_status_technica_temp_silicon;
585static int hf_cmp_status_technica_props_size;
586static int hf_cmp_status_technica_props;
587static int hf_cmp_status_technica_prop;
588static int hf_cmp_status_technica_leg_fill_level;
589static int hf_cmp_status_technica_leg_overflow;
590static int hf_cmp_status_technica_leg_buf_s_gbit;
591static int hf_cmp_status_technica_leg_voltage_int;
592static int hf_cmp_status_technica_leg_voltage_frac;
593static int hf_cmp_status_technica_leg_voltage;
594static int hf_cmp_status_technica_leg_temp_chassis;
595static int hf_cmp_status_technica_leg_temp_silicon;
596
597/* Interface Status Message */
598static int hf_cmp_iface_interface;
599static int hf_cmp_iface_iface_id;
600static int hf_cmp_iface_msg_total_rx;
601static int hf_cmp_iface_msg_total_tx;
602static int hf_cmp_iface_msg_dropped_rx;
603static int hf_cmp_iface_msg_dropped_tx;
604static int hf_cmp_iface_errs_total_rx;
605static int hf_cmp_iface_errs_total_tx;
606static int hf_cmp_iface_iface_type;
607static int hf_cmp_iface_iface_status;
608static int hf_cmp_iface_stream_id_cnt;
609static int hf_cmp_iface_reserved;
610
611static int hf_cmp_iface_feat;
612
613static int hf_cmp_iface_feat_can_crr_err;
614static int hf_cmp_iface_feat_can_ack_err;
615static int hf_cmp_iface_feat_can_pas_ack;
616static int hf_cmp_iface_feat_can_act_ack;
617static int hf_cmp_iface_feat_can_ack_del_err;
618static int hf_cmp_iface_feat_can_form_err;
619static int hf_cmp_iface_feat_can_stuff_err;
620static int hf_cmp_iface_feat_can_crc_del_err;
621static int hf_cmp_iface_feat_can_eof_err;
622static int hf_cmp_iface_feat_can_bit_err;
623static int hf_cmp_iface_feat_can_r0;
624static int hf_cmp_iface_feat_can_srr_dom;
625static int hf_cmp_iface_feat_can_gen_err;
626
627static int hf_cmp_iface_feat_canfd_crr_err;
628static int hf_cmp_iface_feat_canfd_ack_err;
629static int hf_cmp_iface_feat_canfd_pas_ack;
630static int hf_cmp_iface_feat_canfd_act_ack;
631static int hf_cmp_iface_feat_canfd_ack_del_err;
632static int hf_cmp_iface_feat_canfd_form_err;
633static int hf_cmp_iface_feat_canfd_stuff_err;
634static int hf_cmp_iface_feat_canfd_crc_del_err;
635static int hf_cmp_iface_feat_canfd_eof_err;
636static int hf_cmp_iface_feat_canfd_bit_err;
637static int hf_cmp_iface_feat_canfd_rsvd;
638static int hf_cmp_iface_feat_canfd_srr_dom;
639static int hf_cmp_iface_feat_canfd_brs;
640static int hf_cmp_iface_feat_canfd_esi;
641static int hf_cmp_iface_feat_canfd_gen_err;
642
643static int hf_cmp_iface_feat_lin_checksum_err;
644static int hf_cmp_iface_feat_lin_coll_err;
645static int hf_cmp_iface_feat_lin_parity_err;
646static int hf_cmp_iface_feat_lin_no_slave_resp_err;
647static int hf_cmp_iface_feat_lin_sync_err;
648static int hf_cmp_iface_feat_lin_framing_err;
649static int hf_cmp_iface_feat_lin_short_dom_err;
650static int hf_cmp_iface_feat_lin_long_dom_err;
651static int hf_cmp_iface_feat_lin_wup;
652
653static int hf_cmp_iface_feat_fr_crc_frame_err;
654static int hf_cmp_iface_feat_fr_crc_header_err;
655static int hf_cmp_iface_feat_fr_nf;
656static int hf_cmp_iface_feat_fr_sf;
657static int hf_cmp_iface_feat_fr_sync;
658static int hf_cmp_iface_feat_fr_wus;
659static int hf_cmp_iface_feat_fr_ppi;
660static int hf_cmp_iface_feat_fr_cas;
661static int hf_cmp_iface_feat_fr_channel;
662
663static int hf_cmp_iface_feat_eth_fcs_err;
664static int hf_cmp_iface_feat_eth_too_short;
665static int hf_cmp_iface_feat_eth_tx_port_down;
666static int hf_cmp_iface_feat_eth_collision;
667static int hf_cmp_iface_feat_eth_too_long;
668static int hf_cmp_iface_feat_eth_phy_err;
669static int hf_cmp_iface_feat_eth_trunc;
670static int hf_cmp_iface_feat_eth_fcs;
671
672static int hf_cmp_iface_feat_10t1s_first_beacon;
673static int hf_cmp_iface_feat_10t1s_mis_beacon;
674static int hf_cmp_iface_feat_10t1s_sym_decode;
675
676static int hf_cmp_iface_feat_link_err;
677
678static int hf_cmp_iface_stream_ids;
679static int hf_cmp_iface_stream_id;
680static int hf_cmp_iface_vendor_data_len;
681static int hf_cmp_iface_vendor_data;
682
683/* Configuration Status Message */
684static int hf_cmp_status_msg_config;
685
686/* Data Lost Event Status Message */
687static int hf_cmp_dataloss_data_sink_port;
688static int hf_cmp_dataloss_device_id;
689static int hf_cmp_dataloss_reserved;
690static int hf_cmp_dataloss_stream_id;
691static int hf_cmp_dataloss_last_ssq_value;
692static int hf_cmp_dataloss_current_ssq_value;
693
694/* Time Sync Lost Event Status Message */
695static int hf_cmp_timeloss_port_nr;
696static int hf_cmp_timeloss_device_id;
697static int hf_cmp_timeloss_error_flags;
698
699static int hf_cmp_timeloss_error_flags_ts;
700static int hf_cmp_timeloss_error_flags_insync;
701static int hf_cmp_timeloss_error_flags_delta;
702static int hf_cmp_timeloss_error_flags_reserved;
703
704/* Vendor Specific */
705static int hf_cmp_status_msg_vendor_specific;
706
707/* Protocol trees */
708static int ett_asam_cmp;
709static int ett_asam_cmp_header;
710static int ett_asam_cmp_timestamp;
711static int ett_asam_cmp_trans_opts;
712static int ett_asam_cmp_common_flags;
713static int ett_asam_cmp_payload;
714static int ett_asam_cmp_payload_flags;
715static int ett_asam_cmp_payload_data;
716static int ett_asam_cmp_lin_pid;
717static int ett_asam_cmp_can_id;
718static int ett_asam_cmp_can_crc;
719static int ett_asam_cmp_digital_sample;
720static int ett_asam_cmp_uart_data;
721static int ett_asam_cmp_analog_sample;
722static int ett_asam_cmp_i2c_data_entry;
723static int ett_asam_cmp_a2b_upstream_settings;
724static int ett_asam_cmp_a2b_downstream_settings;
725static int ett_asam_cmp_a2b_general_settings;
726static int ett_asam_cmp_status_cm_flags;
727static int ett_asam_cmp_status_cm_uptime;
728static int ett_asam_cmp_status_timeloss_flags;
729static int ett_asam_cmp_status_interface;
730static int ett_asam_cmp_status_feature_support;
731static int ett_asam_cmp_status_stream_ids;
732static int ett_asam_cmp_status_technica;
733static int ett_asam_cmp_status_technica_meas;
734static int ett_asam_cmp_status_technica_flags;
735static int ett_asam_cmp_status_technica_props;
736
737/* General */
738#define CMP_HEADER_LEN8 8
739#define CMP_MSG_HEADER_LEN16 16
740#define CMP_MSG_HEADER_LEN_TX24 24
741
742/* CMP Message Type Names */
743#define CMP_MSG_TYPE_CAP_DATA_MSG0x01 0x01
744#define CMP_MSG_TYPE_CTRL_MSG0x02 0x02
745#define CMP_MSG_TYPE_STATUS_MSG0x03 0x03
746#define CMP_MSG_TYPE_TX_DATA_MSG0x04 0x04
747#define CMP_MSG_TYPE_VENDOR0xFF 0xFF
748
749/* CMP Segmentation Flag Values */
750#define CMP_SEG_UNSEGMENTED0x00 0x00
751#define CMP_SEG_FIRST0x01 0x01
752#define CMP_SEG_INTERMEDIARY0x02 0x02
753#define CMP_SEG_LAST0x03 0x03
754
755/* CMP Data Message Payload Type Names */
756#define CMP_DATA_MSG_INVALID0x00 0x00
757#define CMP_DATA_MSG_CAN0x01 0x01
758#define CMP_DATA_MSG_CANFD0x02 0x02
759#define CMP_DATA_MSG_LIN0x03 0x03
760#define CMP_DATA_MSG_FLEXRAY0x04 0x04
761#define CMP_DATA_MSG_DIGITAL0x05 0x05
762#define CMP_DATA_MSG_UART_RS_2320x06 0x06
763#define CMP_DATA_MSG_ANALOG0x07 0x07
764#define CMP_DATA_MSG_ETHERNET0x08 0x08
765#define CMP_DATA_MSG_SPI0x09 0x09
766#define CMP_DATA_MSG_I2C0x0A 0x0A
767#define CMP_DATA_MSG_GIGEVISION0x0B 0x0B
768#define CMP_DATA_MSG_MIPI_CSI20x0C 0x0C
769#define CMP_DATA_MSG_RAW_ETHERNET0x0D 0x0D
770#define CMP_DATA_MSG_10BASE_T1S_SYMBOL0x0E 0x0E
771#define CMP_DATA_MSG_A2B0x0F 0x0F
772#define CMP_DATA_MSG_LINK_STATE0xFE 0xFE
773#define CMP_DATA_MSG_VENDOR_DATA_MSG0xFF 0xFF
774
775/* CMP Digital Trigger Pattern Values */
776#define CMP_T_PATTERN_FALLING0x00 0x00
777#define CMP_T_PATTERN_RISING0x01 0x01
778
779/* CMP UART Data Message DL Values */
780#define CMP_UART_CL_50x00 0x00
781#define CMP_UART_CL_60x01 0x01
782#define CMP_UART_CL_70x02 0x02
783#define CMP_UART_CL_80x03 0x03
784#define CMP_UART_CL_90x04 0x04
785
786/* CMP Analog Data Message DT Values */
787#define CMP_ANALOG_DATA_MSG_DL_160x00 0x00
788#define CMP_ANALOG_DATA_MSG_DL_320x01 0x01
789#define CMP_ANALOG_DATA_MSG_DL_RES10x02 0x02
790#define CMP_ANALOG_DATA_MSG_DL_RES20x03 0x03
791
792/* CMP Control Message Payload Type Names */
793#define CMP_CTRL_MSG_INVALID0x00 0x00
794#define CMP_CTRL_MSG_DSR_CTRL_MSG0x01 0x01
795#define CMP_CTRL_MSG_USER_EVENT_CTRL_MSG0xFE 0xFE
796#define CMP_CTRL_MSG_VENDOR_CTRL_MSG0xFF 0xFF
797
798/* CMP Status Message Payload Type Names */
799#define CMP_STATUS_MSG_INVALID0x00 0x00
800#define CMP_STATUS_MSG_CM_STAT_MSG0x01 0x01
801#define CMP_STATUS_MSG_IF_STAT_MSG0x02 0x02
802#define CMP_STATUS_MSG_CONF_STAT_MSG0x03 0x03
803#define CMP_STATUS_MSG_DLE_STAT_MSG0x04 0x04
804#define CMP_STATUS_MSG_TSLE_STAT_MSG0x05 0x05
805#define CMP_STATUS_MSG_VENDOR_STAT_MSG0xFF 0xFF
806
807/* Interface Status Message Names */
808#define CMP_STATUS_IFACE_DOWN_EN0x00 0x00
809#define CMP_STATUS_IFACE_UP_EN0x01 0x01
810#define CMP_STATUS_IFACE_DOWN_DIS0x02 0x02
811
812static const value_string msg_type_names[] = {
813 {CMP_MSG_TYPE_CAP_DATA_MSG0x01, "Capture Data Message"},
814 {CMP_MSG_TYPE_CTRL_MSG0x02, "Control Message"},
815 {CMP_MSG_TYPE_STATUS_MSG0x03, "Status Message"},
816 {CMP_MSG_TYPE_TX_DATA_MSG0x04, "Transmit Data Message"},
817 {CMP_MSG_TYPE_VENDOR0xFF, "Vendor-defined Message"},
818 {0, NULL((void*)0)}
819};
820
821static const true_false_string timestamp_rel_abs = {
822 "Relative Mode",
823 "Absolute Mode"
824};
825
826static const value_string seg_flag_names[] = {
827 {CMP_SEG_INTERMEDIARY0x02, "Intermediary segment"},
828 {CMP_SEG_FIRST0x01, "First segment"},
829 {CMP_SEG_LAST0x03, "Last segment"},
830 {CMP_SEG_UNSEGMENTED0x00, "Unsegmented"},
831 {0, NULL((void*)0)}
832};
833
834static const true_false_string interface_direction = {
835 "Sending",
836 "Receive"
837};
838
839static const value_string data_msg_type_names[] = {
840 {CMP_DATA_MSG_INVALID0x00, "Invalid"},
841 {CMP_DATA_MSG_CAN0x01, "CAN"},
842 {CMP_DATA_MSG_CANFD0x02, "CAN FD"},
843 {CMP_DATA_MSG_LIN0x03, "LIN"},
844 {CMP_DATA_MSG_FLEXRAY0x04, "FlexRay"},
845 {CMP_DATA_MSG_DIGITAL0x05, "Digital"},
846 {CMP_DATA_MSG_UART_RS_2320x06, "UART/RS-232"},
847 {CMP_DATA_MSG_ANALOG0x07, "Analog"},
848 {CMP_DATA_MSG_ETHERNET0x08, "Ethernet"},
849 {CMP_DATA_MSG_SPI0x09, "SPI"},
850 {CMP_DATA_MSG_I2C0x0A, "I2C"},
851 {CMP_DATA_MSG_GIGEVISION0x0B, "Gigevision"},
852 {CMP_DATA_MSG_MIPI_CSI20x0C, "MIPI CSI-2"},
853 {CMP_DATA_MSG_RAW_ETHERNET0x0D, "Raw Ethernet"},
854 {CMP_DATA_MSG_10BASE_T1S_SYMBOL0x0E, "10BASE-T1S Symbol"},
855 {CMP_DATA_MSG_A2B0x0F, "A2B"},
856 {CMP_DATA_MSG_LINK_STATE0xFE, "Link State"},
857 {CMP_DATA_MSG_VENDOR_DATA_MSG0xFF, "Vendor-specific"},
858 {0, NULL((void*)0)}
859};
860
861static const true_false_string cmp_err_noerr = {
862 "Error",
863 "No Error"
864};
865
866static const true_false_string can_dom_rec = {
867 "Dominant",
868 "Recessive"
869};
870
871static const true_false_string can_rec_dom = {
872 "Recessive",
873 "Dominant"
874};
875
876static const true_false_string can_id_ide = {
877 "29bit ID",
878 "11bit ID"
879};
880
881static const true_false_string can_id_rtr = {
882 "Remote Frame",
883 "Data Frame"
884};
885
886static const true_false_string canfd_act_pas = {
887 "Error active",
888 "Error passive"
889};
890
891static const true_false_string flexray_leading_following = {
892 "Leading",
893 "Following"
894};
895
896static const true_false_string flexray_channel_b_a = {
897 "B",
898 "A"
899};
900
901static const value_string flexray_transmission_operations[] = {
902 {0x00, "Stop Sending"},
903 {0x01, "Send Once"},
904 {0x02, "Send Cyclically"},
905 {0x08, "Configuration"},
906 {0x09, "Start Node"},
907 {0x0a, "Stop Node"},
908 {0x0b, "Abort Node"},
909 {0x00, NULL((void*)0)}
910};
911
912static const value_string digital_trigger_pattern[] = {
913 {0, "Falling edge"},
914 {1, "Rising edge"},
915 {0, NULL((void*)0)}
916};
917
918static const value_string uart_cl_names[] = {
919 {CMP_UART_CL_50x00, "5 Bits"},
920 {CMP_UART_CL_60x01, "6 Bits"},
921 {CMP_UART_CL_70x02, "7 Bits"},
922 {CMP_UART_CL_80x03, "8 Bits"},
923 {CMP_UART_CL_90x04, "9 Bits"},
924 {0, NULL((void*)0)}
925};
926
927static const value_string analog_sample_dt[] = {
928 {CMP_ANALOG_DATA_MSG_DL_160x00, "A_INT16"},
929 {CMP_ANALOG_DATA_MSG_DL_320x01, "A_INT32"},
930 {CMP_ANALOG_DATA_MSG_DL_RES10x02, "Reserved"},
931 {CMP_ANALOG_DATA_MSG_DL_RES20x03, "Reserved"},
932 {0, NULL((void*)0)}
933};
934
935/* Also see packet-tecmp.c */
936#define CMP_ETH_RAW_PREAMBLE0x55 0x55
937#define CMP_ETH_RAW_SFD_ORIG0xD5 0xD5
938#define CMP_ETH_RAW_SFD_SMD_V0x07 0x07
939#define CMP_ETH_RAW_SFD_SMD_R0x19 0x19
940#define CMP_ETH_RAW_SFD_SMD_S00xE6 0xE6
941#define CMP_ETH_RAW_SFD_SMD_S10x4C 0x4C
942#define CMP_ETH_RAW_SFD_SMD_S20x7F 0x7F
943#define CMP_ETH_RAW_SFD_SMD_S30xB3 0xB3
944#define CMP_ETH_RAW_SFD_SMD_C00x61 0x61
945#define CMP_ETH_RAW_SFD_SMD_C10x52 0x52
946#define CMP_ETH_RAW_SFD_SMD_C20x9E 0x9E
947#define CMP_ETH_RAW_SFD_SMD_C30x2A 0x2A
948
949static const value_string eth_raw_sfd[] = {
950 {CMP_ETH_RAW_SFD_ORIG0xD5, "SFD/SMD-E"},
951 {CMP_ETH_RAW_SFD_SMD_V0x07, "SMD-V"},
952 {CMP_ETH_RAW_SFD_SMD_R0x19, "SMD-R"},
953 {CMP_ETH_RAW_SFD_SMD_S00xE6, "SMD-S0"},
954 {CMP_ETH_RAW_SFD_SMD_S10x4C, "SMD-S1"},
955 {CMP_ETH_RAW_SFD_SMD_S20x7F, "SMD-S2"},
956 {CMP_ETH_RAW_SFD_SMD_S30xB3, "SMD-S3"},
957 {CMP_ETH_RAW_SFD_SMD_C00x61, "SMD-C0"},
958 {CMP_ETH_RAW_SFD_SMD_C10x52, "SMD-C1"},
959 {CMP_ETH_RAW_SFD_SMD_C20x9E, "SMD-C2"},
960 {CMP_ETH_RAW_SFD_SMD_C30x2A, "SMD-C3"},
961 {0, NULL((void*)0)}
962};
963
964static const true_false_string i2c_read_write = {
965 "Read",
966 "Write"
967};
968
969static const true_false_string i2c_addr_length = {
970 "10 Bit Address",
971 "7 Bit Address"
972};
973
974static const true_false_string i2c_nack_ack = {
975 "NACK",
976 "ACK"
977};
978
979static const true_false_string i2c_stop_repeated_start = {
980 "Stop",
981 "Repeated-Start"
982};
983
984static const true_false_string i2c_repeated_start_start = {
985 "Repeated-Start",
986 "Start"
987};
988
989static const true_false_string mipi_csi2_ecc_noecc = {
990 "6-bit ECC",
991 "No ECC"
992};
993
994static const true_false_string mipi_csi2_cmcounter_csicounter = {
995 "Counter generated by Capture Module",
996 "Counter extracted from MIPI CSI-2 data"
997};
998
999/*
1000 * Based on what is publicly available:
1001 * https://elixir.bootlin.com/linux/v5.19.17/source/include/media/mipi-csi2.h
1002 * https://www.nxp.com/docs/en/application-note/AN5305.pdf
1003 * https://www.efinixinc.com/docs/mipi-csi2-rx-core-ug-v3.2.pdf
1004 * https://introspect.ca/blog/mipi-cse-and-csi-2/
1005 * https://www.macnica.co.jp/en/business/semiconductor/articles/lattice/142604/
1006 * https://www.design-reuse.com/article/60991-generating-high-speed-csi2-video-by-an-fpga/
1007 * https://www.ti.com/lit/ds/symlink/ds90ub954-q1.pdf
1008 * https://bitsimnow.se/wp-content/uploads/2021/04/Data_Sheet_bitcsi2rx_rH.pdf
1009 */
1010
1011#define MIPI_CSI2_DT_BITS0x3F 0x3F
1012#define MIPI_CSI2_DT_SHORT_START0x00 0x00
1013#define MIPI_CSI2_DT_SHORT_END0x0F 0x0F
1014
1015static const value_string mipi_csi2_data_type_names[] = {
1016 /* 0x00 - 0x07 Sync Short Packets */
1017 {MIPI_CSI2_DT_SHORT_START0x00, "Frame Start Code"},
1018 {0x01, "Frame End Code"},
1019 {0x02, "Line Start Code"},
1020 {0x03, "Line End Code"},
1021 /* 0x08 - 0x0F Generic Short Packets */
1022 /* 0x10 - 0x17 Generic Long Packets */
1023 {0x10, "Null"},
1024 {0x11, "Blanking Data"},
1025 {0x12, "Embedded 8-bit non-Image Data"},
1026 /* 0x18 - 0x1F YUV Data Long Packets */
1027 {0x18, "YUV420 8-bit"},
1028 {0x19, "YUV420 10-bit"},
1029 {0x1A, "Legacy YUV420 8-bit"},
1030 {0x1C, "YUV420 8-bit (CSPS)"},
1031 {0x1D, "YUV420 10-bit (CSPS)"},
1032 {0x1E, "YUV422 8-bit"},
1033 {0x1F, "YUV422 10-bit"},
1034 /* 0x20 - 0x27 RGB Data Long Packets */
1035 {0x20, "RGB444"},
1036 {0x21, "RGB555"},
1037 {0x22, "RGB565"},
1038 {0x23, "RGB666"},
1039 {0x24, "RGB888"},
1040 /* 0x28 - 0x2F RAW Data Long Packets */
1041 {0x26, "RAW24"},
1042 {0x27, "RAW28"},
1043 {0x28, "RAW6"},
1044 {0x29, "RAW7"},
1045 {0x2A, "RAW8"},
1046 {0x2B, "RAW10"},
1047 {0x2C, "RAW12"},
1048 {0x2D, "RAW14"},
1049 {0x2E, "RAW16"},
1050 {0x2F, "RAW20"},
1051 /* 0x30 - 0x37 User Defined Long Packets */
1052 {0x30, "User Defined 8-bit Data Type 1"},
1053 {0x31, "User Defined 8-bit Data Type 2"},
1054 {0x32, "User Defined 8-bit Data Type 3"},
1055 {0x33, "User Defined 8-bit Data Type 4"},
1056 {0x34, "User Defined 8-bit Data Type 5"},
1057 {0x35, "User Defined 8-bit Data Type 6"},
1058 {0x36, "User Defined 8-bit Data Type 7"},
1059 {0x37, "User Defined 8-bit Data Type 8"},
1060 /* 0x38 - 0x3F Reserved */
1061 {0x3E, "SEP (MIPI CSE)"},
1062 {0, NULL((void*)0)}
1063};
1064
1065static const true_false_string eth_10baset1s_firstbeacon_notfirstbeacon = {
1066 "First Beacon",
1067 "Not First Beacon"
1068};
1069
1070/* IEEE 802.3-2022 Table 147-1: 4B/5B Encoding */
1071static const value_string eth_10baset1s_symbol_names[] = {
1072 {0x1F, "SILENCE"}, /* I: 11111 */
1073 {0x18, "SYNC / COMMIT"}, /* J: 11000 */
1074 {0x11, "ESDERR"}, /* K: 10001 */
1075 {0x0D, "ESD / HB"}, /* T: 01101 */
1076 {0x07, "ESDOK / ESDBRS"}, /* R: 00111 */
1077 {0x04, "SSD"}, /* H: 00100 */
1078 {0x08, "BEACON"}, /* N: 01000 */
1079 {0x19, "ESDJAB"}, /* I: 11001 */
1080 {0, NULL((void*)0)}
1081};
1082
1083static const true_false_string a2b_switch_closed_open = {
1084 "Switch completed closing",
1085 "Switch is open or has not finished closing"
1086};
1087
1088static const true_false_string a2b_cable_fault_no_fault = {
1089 "Cable fault detected",
1090 "Cable fault not detected"
1091};
1092
1093static const value_string a2b_fault_code_names[] = {
1094 {0x0, "No fault detected"},
1095 {0x1, "Cable terminal shorted to GND"},
1096 {0x2, "Cable terminal shorted to VBAT"},
1097 {0x3, "Cable terminals shorted together"},
1098 {0x4, "Cable disconnected or open circuit"},
1099 {0x5, "Cable is reverse connected"},
1100 {0x6, "Reserved"},
1101 {0x7, "Undetermined fault"},
1102 {0, NULL((void*)0)}
1103};
1104
1105static const true_false_string a2b_cable_fault_not_localized_localized = {
1106 "Cable fault not localized",
1107 "Cable fault localized"
1108};
1109
1110static const true_false_string a2b_data_decode_error_no_error = {
1111 "Data decoding error detected",
1112 "No data decoding error"
1113};
1114
1115static const true_false_string a2b_crc_error_no_error = {
1116 "CRC error detected",
1117 "No CRC error"
1118};
1119
1120static const true_false_string a2b_data_parity_error_no_error = {
1121 "Data parity error detected",
1122 "No data parity error"
1123};
1124
1125static const true_false_string a2b_downstream_power_switch_error_no_error = {
1126 "Downstream power switch error",
1127 "No power error"
1128};
1129
1130static const true_false_string a2b_bit_error_count_error_no_error = {
1131 "BEC error pending",
1132 "No BEC error pending"
1133};
1134
1135static const true_false_string a2b_srf_miss_error_no_error = {
1136 "SRF miss error detected",
1137 "No SRF miss error"
1138};
1139
1140static const true_false_string a2b_srf_crc_error_no_error = {
1141 "SRF CRC error detected",
1142 "No SRF CRC error"
1143};
1144
1145static const true_false_string a2b_iocrc_error_no_error = {
1146 "Interrupt Frame CRC error detected",
1147 "No error"
1148};
1149
1150static const true_false_string a2b_i2c_transaction_error_no_error = {
1151 "An I2C access error occurred",
1152 "No error"
1153};
1154
1155static const true_false_string a2b_fmt_alternate_normal = {
1156 "Alternate data slot format",
1157 "Normal data slot format"
1158};
1159
1160static const value_string a2b_slot_sizes[] = {
1161 {0x00, "8 bits"},
1162 {0x01, "12 bits"},
1163 {0x02, "16 bits"},
1164 {0x03, "20 bits"},
1165 {0x04, "24 bits"},
1166 {0x05, "28 bits"},
1167 {0x06, "32 bits"},
1168 {0x07, "Reserved"},
1169 {0, NULL((void*)0)}
1170};
1171
1172static const val64_string a2b_tdmmode_values[] = {
1173 {0x00, "TDM2"},
1174 {0x01, "TDM4"},
1175 {0x02, "TDM8"},
1176 {0x03, "TDM12"},
1177 {0x04, "TDM16"},
1178 {0x05, "TDM20"},
1179 {0x06, "TDM24"},
1180 {0x07, "TDM32"},
1181 {0, NULL((void*)0)}
1182};
1183
1184static const true_false_string a2b_tdmss_16_32 = {
1185 "32bit",
1186 "16bit"
1187};
1188
1189static const val64_string a2b_blckrate_values[] = {
1190 {0x00, "BCLK frequency as configured in A2B_I2SGCFG"},
1191 {0x01, "SYNC frequency x 2048"},
1192 {0x02, "SYNC frequency x 4096"},
1193 {0x04, "SFF frequency x 64"},
1194 {0x05, "SFF frequency x 128"},
1195 {0x06, "SFF frequency x 256"},
1196 {0, NULL((void*)0)}
1197};
1198
1199static const val64_string a2b_i2srate_values[] = {
1200 {0x00, "SFF x 1"},
1201 {0x01, "SFF / 2"},
1202 {0x02, "SFF / 4"},
1203 {0x03, "SFF / A2B_I2SRRATE.RRDIV"},
1204 {0x05, "SFF x 2"},
1205 {0x06, "SFF x 4"},
1206 {0, NULL((void*)0)}
1207};
1208
1209static const val64_string a2b_rrdiv_values[] = {
1210 {1, "Superframe frequency (SFF)"},
1211 {2, "SFF / 2"},
1212 {4, "SFF / 4"},
1213 {8, "SFF / 8"},
1214 {12, "SFF / 12"},
1215 {16, "SFF / 16"},
1216 {20, "SFF / 20"},
1217 {24, "SFF / 24"},
1218 {28, "SFF / 28"},
1219 {32, "SFF / 32"},
1220 {0, NULL((void*)0)}
1221};
1222
1223static const val64_string a2b_rrsoffset_values[] = {
1224 {0, "No Offset"},
1225 {1, "1 Superframe Earlier"},
1226 {2, "2 Superframes Earlier"},
1227 {3, "3 Superframes Earlier"},
1228 {0, NULL((void*)0)}
1229};
1230
1231static const true_false_string a2b_raw_capturing = {
1232 "Raw A2B Busline was captured",
1233 "I²S/TDM representation was captured"
1234};
1235
1236static const value_string link_state_names[] = {
1237 {0x00, "Down"},
1238 {0x01, "Up"},
1239 {0x02, "Disabled"},
1240 {0x03, "Testing"},
1241 {0x04, "Unknown"},
1242 {0x05, "Dormant"},
1243 {0x06, "NotPresent"},
1244 {0, NULL((void*)0)}
1245};
1246
1247static const value_string ctrl_msg_type_names[] = {
1248 {CMP_CTRL_MSG_INVALID0x00, "Invalid"},
1249 {CMP_CTRL_MSG_DSR_CTRL_MSG0x01, "Data Sink ready to receive Control Message"},
1250 {CMP_CTRL_MSG_USER_EVENT_CTRL_MSG0xFE, "User Event Message"},
1251 {CMP_CTRL_MSG_VENDOR_CTRL_MSG0xFF, "Vendor-specific Control Message"},
1252 {0, NULL((void*)0)}
1253};
1254
1255static const value_string status_msg_type_names[] = {
1256 {CMP_STATUS_MSG_INVALID0x00, "Invalid"},
1257 {CMP_STATUS_MSG_CM_STAT_MSG0x01, "Capture Module Status"},
1258 {CMP_STATUS_MSG_IF_STAT_MSG0x02, "Interface Status"},
1259 {CMP_STATUS_MSG_CONF_STAT_MSG0x03, "Configuration Status"},
1260 {CMP_STATUS_MSG_DLE_STAT_MSG0x04, "Data Lost Status"},
1261 {CMP_STATUS_MSG_TSLE_STAT_MSG0x05, "Time Sync Lost Status"},
1262 {CMP_STATUS_MSG_VENDOR_STAT_MSG0xFF, "Vendor-specific Status Message"},
1263 {0, NULL((void*)0)}
1264};
1265
1266static const value_string interface_status_names[] = {
1267 {CMP_STATUS_IFACE_DOWN_EN0x00, "Down and enabled"},
1268 {CMP_STATUS_IFACE_UP_EN0x01, "Up and enabled"},
1269 {CMP_STATUS_IFACE_DOWN_DIS0x02, "Down and disabled"},
1270 {0, NULL((void*)0)}
1271};
1272
1273/* As defined by the ASAM Vendor ID registry for POD and CMP */
1274#define CMP_VENDOR_ID_AVL_LIST0x0006 0x0006
1275#define CMP_VENDOR_DSPACE0x000b 0x000b
1276#define CMP_VENDOR_ETAS0x000c 0x000c
1277#define CMP_VENDOR_BOSCH0x0027 0x0027
1278#define CMP_VENDOR_VECTOR0x002d 0x002d
1279#define CMP_VENDOR_CONTINENTAL0x003c 0x003c
1280#define CMP_VENDOR_MK0x003e 0x003e
1281#define CMP_VENDOR_ID_ACCURATE0x004a 0x004a
1282#define CMP_VENDOR_RA0x006c 0x006c
1283#define CMP_VENDOR_X2E0x00ca 0x00ca
1284#define CMP_VENDOR_INTREPIDCS0x00f0 0x00f0
1285#define CMP_VENDOR_ID_BPLUS0x010f 0x010f
1286#define CMP_VENDOR_VIGEM0x012a 0x012a
1287#define CMP_VENDOR_TECHNICA0x019c 0x019c
1288#define CMP_VENDOR_ID_AED_ENG0x0241 0x0241
1289
1290/* As defined by the ASAM Vendor ID registry for POD and CMP */
1291static const value_string vendor_ids[] = {
1292 {CMP_VENDOR_ID_ACCURATE0x004a, "Accurate Technologies Inc."},
1293 {CMP_VENDOR_ID_AED_ENG0x0241, "AED Engineering GmbH"},
1294 {CMP_VENDOR_ID_AVL_LIST0x0006, "AVL List GmbH"},
1295 {CMP_VENDOR_ID_BPLUS0x010f, "b-plus GmbH"},
1296 {CMP_VENDOR_CONTINENTAL0x003c, "Continental AG"},
1297 {CMP_VENDOR_DSPACE0x000b, "dSPACE GmbH"},
1298 {CMP_VENDOR_ETAS0x000c, "ETAS GmbH"},
1299 {CMP_VENDOR_INTREPIDCS0x00f0, "Intrepid Control Systems, Inc."},
1300 {CMP_VENDOR_MK0x003e, "M&K Meß- und Kommunikationstechnik GmbH"},
1301 {CMP_VENDOR_RA0x006c, "RA Consulting GmbH"},
1302 {CMP_VENDOR_BOSCH0x0027, "Robert Bosch GmbH"},
1303 {CMP_VENDOR_TECHNICA0x019c, "Technica Engineering GmbH"},
1304 {CMP_VENDOR_VECTOR0x002d, "Vector Informatik GmbH"},
1305 {CMP_VENDOR_VIGEM0x012a, "ViGEM GmbH"},
1306 {CMP_VENDOR_X2E0x00ca, "X2E GmbH"},
1307 {0, NULL((void*)0)}
1308};
1309
1310static const value_string analog_units[] = {
1311 {0x01, "s"},
1312 {0x02, "m"},
1313 {0x03, "kg"},
1314 {0x04, "A"},
1315 {0x05, "K"},
1316 {0x06, "mol"},
1317 {0x07, "cd"},
1318 {0x08, "Hz"},
1319 {0x09, "rad"},
1320 {0x0a, "sr"},
1321 {0x0b, "N"},
1322 {0x0c, "Pa"},
1323 {0x0d, "J"},
1324 {0x0e, "W"},
1325 {0x0f, "C"},
1326 {0x10, "V"},
1327 {0x11, "F"},
1328 {0x12, "Ω"},
1329 {0x13, "S"},
1330 {0x14, "Wb"},
1331 {0x15, "T"},
1332 {0x16, "H"},
1333 {0x17, "°C"},
1334 {0x18, "lm"},
1335 {0x19, "lx"},
1336 {0x1A, "Bq"},
1337 {0x1B, "Gy"},
1338 {0x1C, "Sv"},
1339 {0x1D, "kat"},
1340 {0x1E, "m/s"},
1341 {0x1F, "m/s2"},
1342 {0x20, "m/s3"},
1343 {0x21, "m/s4"},
1344 {0x22, "rad/s"},
1345 {0x23, "rad/s2"},
1346 {0x24, "Hz/s"},
1347 {0x25, "m3/s"},
1348 {0x26, "m2"},
1349 {0x27, "m3"},
1350 {0x28, "N s"},
1351 {0x29, "N m s"},
1352 {0x2A, "N m"},
1353 {0x2B, "kg/m2"},
1354 {0x2C, "kg/m3"},
1355 {0x2D, "m3/kg"},
1356 {0x2E, "J s"},
1357 {0x2F, "J/kg"},
1358 {0x30, "J/m3"},
1359 {0x31, "N/m"},
1360 {0x32, "W/m2"},
1361 {0x33, "m2/s"},
1362 {0x34, "Pa s"},
1363 {0x35, "kg/s"},
1364 {0x36, "W/(sr m2)"},
1365 {0x37, "Gy/s"},
1366 {0x38, "m/m3"},
1367 {0x39, "W/m3"},
1368 {0x3A, "J/(m2 s)"},
1369 {0x3B, "kg m2"},
1370 {0x3C, "W/sr"},
1371 {0x3D, "mol/m3"},
1372 {0x3E, "m3/mol"},
1373 {0x3F, "J/(mol K)"},
1374 {0x40, "J/mol"},
1375 {0x41, "mol/kg"},
1376 {0x42, "kg/mol"},
1377 {0x45, "C/m3"},
1378 {0x46, "A/m2"},
1379 {0x47, "S/m"},
1380 {0x48, "F/m"},
1381 {0x49, "H/m"},
1382 {0x4A, "V/m"},
1383 {0x4B, "A/m"},
1384 {0x4C, "C/Kg"},
1385 {0x4D, "J/T"},
1386 {0x4E, "lm s"},
1387 {0x4F, "lx s"},
1388 {0x50, "cd/m2"},
1389 {0x51, "lm/W"},
1390 {0x52, "J/K"},
1391 {0x53, "J/(K kg)"},
1392 {0x54, "W/(m K)"},
1393 {0, NULL((void*)0)}
1394};
1395
1396/********* UATs *********/
1397
1398typedef struct _generic_one_id_string {
1399 unsigned id;
1400 char *name;
1401} generic_one_id_string_t;
1402
1403/* Interface UAT */
1404typedef struct _interface_config {
1405 unsigned id;
1406 unsigned bus_id;
1407 char *name;
1408} interface_config_t;
1409
1410/* Devices */
1411#define DATAFILE_ASAM_CMP_DEVICES_IDS"ASAM_CMP_devices" "ASAM_CMP_devices"
1412
1413static GHashTable *data_asam_cmp_devices;
1414static generic_one_id_string_t *asam_cmp_devices;
1415static unsigned asam_cmp_devices_num;
1416
1417UAT_HEX_CB_DEF(asam_cmp_devices, id, generic_one_id_string_t)static void asam_cmp_devices_id_set_cb(void* rec, const char*
buf, unsigned len, const void* u1 __attribute__((unused)), const
void* u2 __attribute__((unused))) { char* tmp_str = g_strndup
(buf,len); ws_hexstrtou32(tmp_str, ((void*)0), &((generic_one_id_string_t
*)rec)->id); (__builtin_object_size ((tmp_str), 0) != ((size_t
) - 1)) ? g_free_sized (tmp_str, __builtin_object_size ((tmp_str
), 0)) : (g_free) (tmp_str); } static void asam_cmp_devices_id_tostr_cb
(void* rec, char** out_ptr, unsigned* out_len, const void* u1
__attribute__((unused)), const void* u2 __attribute__((unused
))) { *out_ptr = wmem_strdup_printf(((void*)0), "%x",((generic_one_id_string_t
*)rec)->id); *out_len = (unsigned)strlen(*out_ptr); }
1418UAT_CSTRING_CB_DEF(asam_cmp_devices, name, generic_one_id_string_t)static void asam_cmp_devices_name_set_cb(void* rec, const char
* buf, unsigned len, const void* u1 __attribute__((unused)), const
void* u2 __attribute__((unused))) { char* new_buf = g_strndup
(buf,len); (__builtin_object_size (((((generic_one_id_string_t
*)rec)->name)), 0) != ((size_t) - 1)) ? g_free_sized ((((generic_one_id_string_t
*)rec)->name), __builtin_object_size (((((generic_one_id_string_t
*)rec)->name)), 0)) : (g_free) ((((generic_one_id_string_t
*)rec)->name)); (((generic_one_id_string_t*)rec)->name)
= new_buf; } static void asam_cmp_devices_name_tostr_cb(void
* rec, char** out_ptr, unsigned* out_len, const void* u1 __attribute__
((unused)), const void* u2 __attribute__((unused))) { if (((generic_one_id_string_t
*)rec)->name ) { *out_ptr = g_strdup_inline ((((generic_one_id_string_t
*)rec)->name)); *out_len = (unsigned)strlen((((generic_one_id_string_t
*)rec)->name)); } else { *out_ptr = g_strdup_inline (""); *
out_len = 0; } }
1419
1420/* Interfaces */
1421#define DATAFILE_ASAM_CMP_IFACE_IDS"ASAM_CMP_interfaces" "ASAM_CMP_interfaces"
1422
1423static GHashTable *data_asam_cmp_interfaces;
1424static interface_config_t *asam_cmp_interfaces;
1425static unsigned asam_cmp_interface_num;
1426
1427UAT_HEX_CB_DEF(asam_cmp_interfaces, id, interface_config_t)static void asam_cmp_interfaces_id_set_cb(void* rec, const char
* buf, unsigned len, const void* u1 __attribute__((unused)), const
void* u2 __attribute__((unused))) { char* tmp_str = g_strndup
(buf,len); ws_hexstrtou32(tmp_str, ((void*)0), &((interface_config_t
*)rec)->id); (__builtin_object_size ((tmp_str), 0) != ((size_t
) - 1)) ? g_free_sized (tmp_str, __builtin_object_size ((tmp_str
), 0)) : (g_free) (tmp_str); } static void asam_cmp_interfaces_id_tostr_cb
(void* rec, char** out_ptr, unsigned* out_len, const void* u1
__attribute__((unused)), const void* u2 __attribute__((unused
))) { *out_ptr = wmem_strdup_printf(((void*)0), "%x",((interface_config_t
*)rec)->id); *out_len = (unsigned)strlen(*out_ptr); }
1428UAT_CSTRING_CB_DEF(asam_cmp_interfaces, name, interface_config_t)static void asam_cmp_interfaces_name_set_cb(void* rec, const char
* buf, unsigned len, const void* u1 __attribute__((unused)), const
void* u2 __attribute__((unused))) { char* new_buf = g_strndup
(buf,len); (__builtin_object_size (((((interface_config_t*)rec
)->name)), 0) != ((size_t) - 1)) ? g_free_sized ((((interface_config_t
*)rec)->name), __builtin_object_size (((((interface_config_t
*)rec)->name)), 0)) : (g_free) ((((interface_config_t*)rec
)->name)); (((interface_config_t*)rec)->name) = new_buf
; } static void asam_cmp_interfaces_name_tostr_cb(void* rec, char
** out_ptr, unsigned* out_len, const void* u1 __attribute__((
unused)), const void* u2 __attribute__((unused))) { if (((interface_config_t
*)rec)->name ) { *out_ptr = g_strdup_inline ((((interface_config_t
*)rec)->name)); *out_len = (unsigned)strlen((((interface_config_t
*)rec)->name)); } else { *out_ptr = g_strdup_inline (""); *
out_len = 0; } }
1429UAT_HEX_CB_DEF(asam_cmp_interfaces, bus_id, interface_config_t)static void asam_cmp_interfaces_bus_id_set_cb(void* rec, const
char* buf, unsigned len, const void* u1 __attribute__((unused
)), const void* u2 __attribute__((unused))) { char* tmp_str =
g_strndup(buf,len); ws_hexstrtou32(tmp_str, ((void*)0), &
((interface_config_t*)rec)->bus_id); (__builtin_object_size
((tmp_str), 0) != ((size_t) - 1)) ? g_free_sized (tmp_str, __builtin_object_size
((tmp_str), 0)) : (g_free) (tmp_str); } static void asam_cmp_interfaces_bus_id_tostr_cb
(void* rec, char** out_ptr, unsigned* out_len, const void* u1
__attribute__((unused)), const void* u2 __attribute__((unused
))) { *out_ptr = wmem_strdup_printf(((void*)0), "%x",((interface_config_t
*)rec)->bus_id); *out_len = (unsigned)strlen(*out_ptr); }
1430
1431/*** expert info items ***/
1432static expert_field ei_asam_cmp_length_mismatch;
1433static expert_field ei_asam_cmp_unsupported_crc_not_zero;
1434static expert_field ei_asam_cmp_too_deep;
1435
1436/* ID -> Name */
1437static void *
1438copy_generic_one_id_string_cb(void *n, const void *o, size_t size _U___attribute__((unused))) {
1439 generic_one_id_string_t *new_rec = (generic_one_id_string_t *)n;
1440 const generic_one_id_string_t *old_rec = (const generic_one_id_string_t *)o;
1441
1442 new_rec->name = g_strdup(old_rec->name)g_strdup_inline (old_rec->name);
1443 new_rec->id = old_rec->id;
1444 return new_rec;
1445}
1446
1447static bool_Bool
1448update_generic_one_identifier_16bit(void *r, char **err) {
1449 generic_one_id_string_t *rec = (generic_one_id_string_t *)r;
1450
1451 if (rec->id > 0xffff) {
1452 *err = ws_strdup_printf("We currently only support 16 bit identifiers (ID: %i Name: %s)", rec->id, rec->name)wmem_strdup_printf(((void*)0), "We currently only support 16 bit identifiers (ID: %i Name: %s)"
, rec->id, rec->name)
;
1453 return false0;
1454 }
1455
1456 if (rec->name == NULL((void*)0) || rec->name[0] == 0) {
1457 *err = g_strdup("Name cannot be empty")g_strdup_inline ("Name cannot be empty");
1458 return false0;
1459 }
1460
1461 return true1;
1462}
1463
1464static void
1465free_generic_one_id_string_cb(void *r) {
1466 generic_one_id_string_t *rec = (generic_one_id_string_t *)r;
1467 /* freeing result of g_strdup */
1468 g_free(rec->name)(__builtin_object_size ((rec->name), 0) != ((size_t) - 1))
? g_free_sized (rec->name, __builtin_object_size ((rec->
name), 0)) : (g_free) (rec->name)
;
1469 rec->name = NULL((void*)0);
1470}
1471
1472static char *
1473ht_lookup_device_name(uint16_t device_id) {
1474 if (data_asam_cmp_devices == NULL((void*)0)) {
1475 return NULL((void*)0);
1476 }
1477
1478 return g_hash_table_lookup(data_asam_cmp_devices, GUINT_TO_POINTER(device_id)((gpointer) (gulong) (device_id)));
1479}
1480
1481/* ID -> ID, Name */
1482static void *
1483copy_interface_config_cb(void *n, const void *o, size_t size _U___attribute__((unused))) {
1484 interface_config_t *new_rec = (interface_config_t *)n;
1485 const interface_config_t *old_rec = (const interface_config_t *)o;
1486
1487 new_rec->id = old_rec->id;
1488 new_rec->name = g_strdup(old_rec->name)g_strdup_inline (old_rec->name);
1489 new_rec->bus_id = old_rec->bus_id;
1490 return new_rec;
1491}
1492
1493static bool_Bool
1494update_interface_config(void *r, char **err) {
1495 interface_config_t *rec = (interface_config_t *)r;
1496
1497 if (rec->id > 0xffffffff) {
1498 *err = ws_strdup_printf("We currently only support 32 bit identifiers (ID: %i Name: %s)", rec->id, rec->name)wmem_strdup_printf(((void*)0), "We currently only support 32 bit identifiers (ID: %i Name: %s)"
, rec->id, rec->name)
;
1499 return false0;
1500 }
1501
1502 if (rec->name == NULL((void*)0) || rec->name[0] == 0) {
1503 *err = g_strdup("Name cannot be empty")g_strdup_inline ("Name cannot be empty");
1504 return false0;
1505 }
1506
1507 if (rec->bus_id > 0xffff) {
1508 *err = ws_strdup_printf("We currently only support 16 bit bus identifiers (ID: %i Name: %s Bus-ID: %i)", rec->id, rec->name, rec->bus_id)wmem_strdup_printf(((void*)0), "We currently only support 16 bit bus identifiers (ID: %i Name: %s Bus-ID: %i)"
, rec->id, rec->name, rec->bus_id)
;
1509 return false0;
1510 }
1511
1512 return true1;
1513}
1514
1515static void
1516free_interface_config_cb(void *r) {
1517 interface_config_t *rec = (interface_config_t *)r;
1518 /* freeing result of g_strdup */
1519 g_free(rec->name)(__builtin_object_size ((rec->name), 0) != ((size_t) - 1))
? g_free_sized (rec->name, __builtin_object_size ((rec->
name), 0)) : (g_free) (rec->name)
;
1520 rec->name = NULL((void*)0);
1521}
1522
1523static interface_config_t *
1524ht_lookup_interface(unsigned int identifier) {
1525 if (data_asam_cmp_interfaces == NULL((void*)0)) {
1526 return NULL((void*)0);
1527 }
1528
1529 return g_hash_table_lookup(data_asam_cmp_interfaces, GUINT_TO_POINTER(identifier)((gpointer) (gulong) (identifier)));
1530}
1531
1532
1533static char *
1534ht_interface_config_to_string(unsigned int identifier) {
1535 interface_config_t *tmp = ht_lookup_interface(identifier);
1536 if (tmp == NULL((void*)0)) {
1537 return NULL((void*)0);
1538 }
1539
1540 return tmp->name;
1541}
1542
1543static uint16_t
1544ht_interface_config_to_bus_id(unsigned int identifier) {
1545 interface_config_t *tmp = ht_lookup_interface(identifier);
1546 if (tmp == NULL((void*)0)) {
1547 /* 0 means basically any or none */
1548 return 0;
1549 }
1550
1551 return (uint16_t)tmp->bus_id;
1552}
1553
1554static void
1555reset_asam_cmp_devices_cb(void) {
1556 /* destroy old hash table, if it exists */
1557 if (data_asam_cmp_devices) {
1558 g_hash_table_destroy(data_asam_cmp_devices);
1559 data_asam_cmp_devices = NULL((void*)0);
1560 }
1561}
1562
1563static void
1564post_update_asam_cmp_devices_cb(void) {
1565 /* destroy old hash table, if it exists */
1566 reset_asam_cmp_devices_cb();
1567
1568 /* create new hash table */
1569 data_asam_cmp_devices = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL((void*)0), NULL((void*)0));
1570
1571 for (unsigned i = 0; i < asam_cmp_devices_num; i++) {
1572 g_hash_table_insert(data_asam_cmp_devices, GUINT_TO_POINTER(asam_cmp_devices[i].id)((gpointer) (gulong) (asam_cmp_devices[i].id)), asam_cmp_devices[i].name);
1573 }
1574}
1575
1576static void
1577reset_interface_config_cb(void) {
1578 /* destroy old hash table, if it exists */
1579 if (data_asam_cmp_interfaces) {
1580 g_hash_table_destroy(data_asam_cmp_interfaces);
1581 data_asam_cmp_interfaces = NULL((void*)0);
1582 }
1583}
1584
1585static void
1586post_update_interface_config_cb(void) {
1587 /* destroy old hash table, if it exists */
1588 reset_interface_config_cb();
1589
1590 /* create new hash table */
1591 data_asam_cmp_interfaces = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL((void*)0), NULL((void*)0));
1592
1593 for (unsigned i = 0; i < asam_cmp_interface_num; i++) {
1594 g_hash_table_insert(data_asam_cmp_interfaces, GUINT_TO_POINTER(asam_cmp_interfaces[i].id)((gpointer) (gulong) (asam_cmp_interfaces[i].id)), &asam_cmp_interfaces[i]);
1595 }
1596}
1597
1598static void
1599add_device_id_text(proto_item *ti, uint16_t device_id) {
1600 const char *descr = ht_lookup_device_name(device_id);
1601
1602 if (descr != NULL((void*)0)) {
1603 proto_item_append_text(ti, " (%s)", descr);
1604 }
1605}
1606
1607static void
1608add_interface_id_text(proto_item *ti, uint32_t interface_id) {
1609 const char *descr = ht_interface_config_to_string(interface_id);
1610
1611 if (descr != NULL((void*)0)) {
1612 proto_item_append_text(ti, " (%s)", descr);
1613 }
1614}
1615
1616static uint32_t
1617dissect_asam_cmp_data_msg_can(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned interface_id, bool_Bool tx) {
1618 uint32_t offset = 0;
1619
1620 static int * const asam_cmp_can_flags_cap[] = {
1621 &hf_cmp_can_flag_reserved,
1622 &hf_cmp_can_flag_srr_dom,
1623 &hf_cmp_can_flag_r0,
1624 &hf_cmp_can_flag_bit_err,
1625 &hf_cmp_can_flag_eof_err,
1626 &hf_cmp_can_flag_crc_del_err,
1627 &hf_cmp_can_flag_stuff_err,
1628 &hf_cmp_can_flag_form_err,
1629 &hf_cmp_can_flag_ack_del_err,
1630 &hf_cmp_can_flag_active_ack_err,
1631 &hf_cmp_can_flag_passive_ack_err,
1632 &hf_cmp_can_flag_ack_err,
1633 &hf_cmp_can_flag_crc_err,
1634 NULL((void*)0)
1635 };
1636
1637 static int * const asam_cmp_can_flags_tx[] = {
1638 &hf_cmp_can_flag_reserved_tx,
1639 &hf_cmp_can_flag_gen_err,
1640 &hf_cmp_can_flag_reserved_2000,
1641 &hf_cmp_can_flag_reserved_1000,
1642 &hf_cmp_can_flag_srr_dom,
1643 &hf_cmp_can_flag_r0,
1644 &hf_cmp_can_flag_bit_err,
1645 &hf_cmp_can_flag_eof_err,
1646 &hf_cmp_can_flag_crc_del_err,
1647 &hf_cmp_can_flag_stuff_err,
1648 &hf_cmp_can_flag_form_err,
1649 &hf_cmp_can_flag_ack_del_err,
1650 &hf_cmp_can_flag_reserved_0008,
1651 &hf_cmp_can_flag_reserved_0004,
1652 &hf_cmp_can_flag_ack_err,
1653 &hf_cmp_can_flag_crc_err,
1654 NULL((void*)0)
1655 };
1656
1657 static int * const asam_cmp_can_id_field_11bit[] = {
1658 &hf_cmp_can_id_ide,
1659 &hf_cmp_can_id_rtr,
1660 &hf_cmp_can_id_err,
1661 &hf_cmp_can_id_11bit,
1662 NULL((void*)0)
1663 };
1664
1665 static int * const asam_cmp_can_id_field_11bit_old[] = {
1666 &hf_cmp_can_id_ide,
1667 &hf_cmp_can_id_rtr,
1668 &hf_cmp_can_id_err,
1669 &hf_cmp_can_id_11bit_old,
1670 NULL((void*)0)
1671 };
1672
1673 static int * const asam_cmp_can_id_field_29bit[] = {
1674 &hf_cmp_can_id_ide,
1675 &hf_cmp_can_id_rtr,
1676 &hf_cmp_can_id_err,
1677 &hf_cmp_can_id_29bit,
1678 NULL((void*)0)
1679 };
1680
1681 static int * const asam_cmp_can_crc_field[] = {
1682 &hf_cmp_can_crc_crc_support,
1683 &hf_cmp_can_crc_res,
1684 &hf_cmp_can_crc_crc,
1685 NULL((void*)0)
1686 };
1687
1688 uint16_t can_flags = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000);
1689 if (tx) {
1690 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_can_flags, ett_asam_cmp_payload_flags, asam_cmp_can_flags_tx, ENC_BIG_ENDIAN0x00000000);
1691 } else {
1692 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_can_flags, ett_asam_cmp_payload_flags, asam_cmp_can_flags_cap, ENC_BIG_ENDIAN0x00000000);
1693 }
1694 offset += 2;
1695
1696 proto_tree_add_item(tree, hf_cmp_can_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1697 offset += 2;
1698
1699 uint32_t can_id_field = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN0x00000000);
1700 bool_Bool can_id_29bit = (can_id_field & CMP_CAN_ID_IDE0x80000000) == CMP_CAN_ID_IDE0x80000000;
1701 uint32_t can_id = 0;
1702 if (can_id_29bit) {
1703 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_can_id, ett_asam_cmp_can_id, asam_cmp_can_id_field_29bit, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1704 can_id = can_id_field & (CMP_CAN_ID_29BIT_MASK0x1fffffff | CMP_CAN_ID_RTR0x40000000 | CMP_CAN_ID_IDE0x80000000);
1705 } else {
1706 if (old_11bit_canid_encoding) {
1707 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_can_id, ett_asam_cmp_can_id, asam_cmp_can_id_field_11bit_old, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1708 can_id = can_id_field & (CMP_CAN_ID_RTR0x40000000 | CMP_CAN_ID_IDE0x80000000 | CMP_CAN_ID_11BIT_MASK_OLD0x000007ff);
1709 } else {
1710 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_can_id, ett_asam_cmp_can_id, asam_cmp_can_id_field_11bit, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1711 can_id = (can_id_field & (CMP_CAN_ID_RTR0x40000000 | CMP_CAN_ID_IDE0x80000000)) + ((can_id_field & CMP_CAN_ID_11BIT_MASK0x1ffc0000) >> CMP_CAN_ID_11BIT_SHIFT18);
1712 }
1713 }
1714 offset += 4;
1715
1716 uint64_t tmp64;
1717 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_cmp_can_crc, ett_asam_cmp_can_crc, asam_cmp_can_crc_field, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04, &tmp64);
1718 if ((tmp64 & CMP_CAN_CRC_CRC_SUPP0x80000000) == 0 && (tmp64 & CMP_CAN_CRC_CRC0x00007fff) != 0) {
1719 proto_tree_add_expert(tree, pinfo, &ei_asam_cmp_unsupported_crc_not_zero, tvb, offset, 4);
1720 }
1721 offset += 4;
1722
1723 uint32_t err_pos = 0;
1724 proto_tree_add_item_ret_uint(tree, hf_cmp_can_err_pos, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &err_pos);
1725 offset += 2;
1726
1727 proto_tree_add_item(tree, hf_cmp_can_dlc, tvb, offset, 1, ENC_NA0x00000000);
1728 offset += 1;
1729
1730 uint32_t msg_payload_type_length;
1731 proto_tree_add_item_ret_uint(tree, hf_cmp_can_data_len, tvb, offset, 1, ENC_NA0x00000000, &msg_payload_type_length);
1732 offset += 1;
1733
1734 if (msg_payload_type_length > 0) {
1735 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, msg_payload_type_length);
1736
1737 if ((can_flags & CMP_CAN_FLAGS_ERRORS0x03ff) != 0) {
1738 can_id = can_id | CAN_ERR_FLAG0x20000000;
1739 }
1740
1741 struct can_info can_info = { .id = can_id, .len = msg_payload_type_length, .fd = CAN_TYPE_CAN_CLASSIC0, .bus_id = ht_interface_config_to_bus_id(interface_id) };
1742 if (!socketcan_call_subdissectors(sub_tvb, pinfo, tree, &can_info, heuristic_first)) {
1743 call_data_dissector(sub_tvb, pinfo, tree);
1744 }
1745
1746 offset += msg_payload_type_length;
1747 }
1748
1749 return offset;
1750}
1751
1752static uint32_t
1753dissect_asam_cmp_data_msg_canfd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned interface_id, bool_Bool tx) {
1754 uint32_t offset = 0;
1755
1756 static int * const asam_cmp_canfd_flags_cap[] = {
1757 &hf_cmp_canfd_flag_reserved,
1758 &hf_cmp_canfd_flag_esi,
1759 &hf_cmp_canfd_flag_brs,
1760 &hf_cmp_canfd_flag_srr_dom,
1761 &hf_cmp_canfd_flag_res,
1762 &hf_cmp_canfd_flag_bit_err,
1763 &hf_cmp_canfd_flag_eof_err,
1764 &hf_cmp_canfd_flag_crc_del_err,
1765 &hf_cmp_canfd_flag_stuff_err,
1766 &hf_cmp_canfd_flag_form_err,
1767 &hf_cmp_canfd_flag_ack_del_err,
1768 &hf_cmp_canfd_flag_active_ack_err,
1769 &hf_cmp_canfd_flag_passive_ack_err,
1770 &hf_cmp_canfd_flag_ack_err,
1771 &hf_cmp_canfd_flag_crc_err,
1772 NULL((void*)0)
1773 };
1774
1775 static int * const asam_cmp_canfd_flags_tx[] = {
1776 &hf_cmp_canfd_flag_reserved_tx,
1777 &hf_cmp_canfd_flag_gen_err,
1778 &hf_cmp_canfd_flag_esi,
1779 &hf_cmp_canfd_flag_brs,
1780 &hf_cmp_canfd_flag_srr_dom,
1781 &hf_cmp_canfd_flag_res,
1782 &hf_cmp_canfd_flag_bit_err,
1783 &hf_cmp_canfd_flag_eof_err,
1784 &hf_cmp_canfd_flag_crc_del_err,
1785 &hf_cmp_canfd_flag_stuff_err,
1786 &hf_cmp_canfd_flag_form_err,
1787 &hf_cmp_canfd_flag_ack_del_err,
1788 &hf_cmp_canfd_flag_reserved_0008,
1789 &hf_cmp_canfd_flag_reserved_0004,
1790 &hf_cmp_canfd_flag_ack_err,
1791 &hf_cmp_canfd_flag_crc_err,
1792 NULL((void*)0)
1793 };
1794
1795 static int * const asam_cmp_canfd_id_field_11bit[] = {
1796 &hf_cmp_canfd_id_ide,
1797 &hf_cmp_canfd_id_rrs,
1798 &hf_cmp_canfd_id_err,
1799 &hf_cmp_canfd_id_11bit,
1800 NULL((void*)0)
1801 };
1802
1803 static int * const asam_cmp_canfd_id_field_11bit_old[] = {
1804 &hf_cmp_canfd_id_ide,
1805 &hf_cmp_canfd_id_rrs,
1806 &hf_cmp_canfd_id_err,
1807 &hf_cmp_canfd_id_11bit_old,
1808 NULL((void*)0)
1809 };
1810
1811 static int * const asam_cmp_canfd_id_field_29bit[] = {
1812 &hf_cmp_canfd_id_ide,
1813 &hf_cmp_canfd_id_rrs,
1814 &hf_cmp_canfd_id_err,
1815 &hf_cmp_canfd_id_29bit,
1816 NULL((void*)0)
1817 };
1818
1819 static int * const asam_cmp_canfd_crc_field_17bit[] = {
1820 &hf_cmp_canfd_crc_crc_support,
1821 &hf_cmp_canfd_crc_sbc_support,
1822 &hf_cmp_canfd_crc_res,
1823 &hf_cmp_canfd_crc_sbc_parity,
1824 &hf_cmp_canfd_crc_sbc,
1825 &hf_cmp_canfd_crc_crc17,
1826 NULL((void*)0)
1827 };
1828
1829 static int * const asam_cmp_canfd_crc_field_21bit[] = {
1830 &hf_cmp_canfd_crc_crc_support,
1831 &hf_cmp_canfd_crc_sbc_support,
1832 &hf_cmp_canfd_crc_res,
1833 &hf_cmp_canfd_crc_sbc_parity,
1834 &hf_cmp_canfd_crc_sbc,
1835 &hf_cmp_canfd_crc_crc21,
1836 NULL((void*)0)
1837 };
1838
1839 uint16_t canfd_flags = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000);
1840 if (tx) {
1841 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_canfd_flags, ett_asam_cmp_payload_flags, asam_cmp_canfd_flags_tx, ENC_BIG_ENDIAN0x00000000);
1842 } else {
1843 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_canfd_flags, ett_asam_cmp_payload_flags, asam_cmp_canfd_flags_cap, ENC_BIG_ENDIAN0x00000000);
1844 }
1845 offset += 2;
1846
1847 proto_tree_add_item(tree, hf_cmp_canfd_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1848 offset += 2;
1849
1850 uint32_t can_id_field = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN0x00000000);
1851 bool_Bool can_id_29bit = (can_id_field & CMP_CANFD_ID_IDE0x80000000) == CMP_CANFD_ID_IDE0x80000000;
1852 uint32_t can_id = 0;
1853 if (can_id_29bit) {
1854 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_canfd_id, ett_asam_cmp_can_id, asam_cmp_canfd_id_field_29bit, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1855 can_id = can_id_field & (CMP_CAN_ID_29BIT_MASK0x1fffffff | CMP_CANFD_ID_IDE0x80000000);
1856 } else {
1857 if (old_11bit_canid_encoding) {
1858 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_canfd_id, ett_asam_cmp_can_id, asam_cmp_canfd_id_field_11bit_old, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1859 can_id = can_id_field & (CMP_CANFD_ID_IDE0x80000000 | CMP_CAN_ID_11BIT_MASK_OLD0x000007ff);
1860 } else {
1861 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_canfd_id, ett_asam_cmp_can_id, asam_cmp_canfd_id_field_11bit, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1862 can_id = (can_id_field & CMP_CANFD_ID_IDE0x80000000) + ((can_id_field & CMP_CAN_ID_11BIT_MASK0x1ffc0000) >> CMP_CAN_ID_11BIT_SHIFT18);
1863 }
1864 }
1865 offset += 4;
1866
1867 /* We peek ahead to find out the DLC. 0..10: 17bit CRC, 11..15: 21bit CRC. */
1868 if (tvb_get_uint8(tvb, offset + 6) <= 10) {
1869 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_canfd_crc, ett_asam_cmp_can_crc, asam_cmp_canfd_crc_field_17bit, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1870 } else {
1871 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_canfd_crc, ett_asam_cmp_can_crc, asam_cmp_canfd_crc_field_21bit, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04);
1872 }
1873 offset += 4;
1874
1875 proto_tree_add_item(tree, hf_cmp_canfd_err_pos, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1876 offset += 2;
1877
1878 proto_tree_add_item(tree, hf_cmp_canfd_dlc, tvb, offset, 1, ENC_NA0x00000000);
1879 offset += 1;
1880
1881 uint32_t msg_payload_type_length;
1882 proto_tree_add_item_ret_uint(tree, hf_cmp_canfd_data_len, tvb, offset, 1, ENC_NA0x00000000, &msg_payload_type_length);
1883 offset += 1;
1884
1885 if (msg_payload_type_length > 0) {
1886 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, msg_payload_type_length);
1887
1888 if ((canfd_flags & CMP_CANFD_FLAGS_ERRORS0x03ff) != 0) {
1889 can_id = can_id | CAN_ERR_FLAG0x20000000;
1890 }
1891
1892 struct can_info can_info = { .id = can_id, .len = msg_payload_type_length, .fd = CAN_TYPE_CAN_FD1, .bus_id = ht_interface_config_to_bus_id(interface_id) };
1893 if (!socketcan_call_subdissectors(sub_tvb, pinfo, tree, &can_info, heuristic_first)) {
1894 call_data_dissector(sub_tvb, pinfo, tree);
1895 }
1896
1897 offset += msg_payload_type_length;
1898 }
1899
1900 return offset;
1901}
1902
1903static uint32_t
1904dissect_asam_cmp_data_msg_lin(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned interface_id, bool_Bool tx) {
1905 uint32_t offset = 0;
1906
1907 lin_info_t lin_info = { 0, 0, 0 };
1908
1909 static int * const asam_cmp_lin_pid[] = {
1910 &hf_cmp_lin_pid_parity,
1911 &hf_cmp_lin_pid_id,
1912 NULL((void*)0)
1913 };
1914
1915 static int * const asam_cmp_lin_flags_cap[] = {
1916 &hf_cmp_lin_flag_reserved,
1917 &hf_cmp_lin_flag_wup,
1918 &hf_cmp_lin_flag_long_dom_err,
1919 &hf_cmp_lin_flag_short_dom_err,
1920 &hf_cmp_lin_flag_framing_err,
1921 &hf_cmp_lin_flag_sync_err,
1922 &hf_cmp_lin_flag_no_slave_res,
1923 &hf_cmp_lin_flag_parity_err,
1924 &hf_cmp_lin_flag_col_err,
1925 &hf_cmp_lin_flag_checksum_err,
1926 NULL((void*)0)
1927 };
1928
1929 static int * const asam_cmp_lin_flags_tx[] = {
1930 &hf_cmp_lin_flag_reserved,
1931 &hf_cmp_lin_flag_wup,
1932 &hf_cmp_lin_flag_long_dom_err,
1933 &hf_cmp_lin_flag_short_dom_err,
1934 &hf_cmp_lin_flag_framing_err,
1935 &hf_cmp_lin_flag_sync_err,
1936 &hf_cmp_lin_flag_reserved_0x0008,
1937 &hf_cmp_lin_flag_parity_err,
1938 &hf_cmp_lin_flag_reserved_0x0002,
1939 &hf_cmp_lin_flag_checksum_err,
1940 NULL((void*)0)
1941 };
1942
1943 if (tx) {
1944 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_lin_flags, ett_asam_cmp_payload_flags, asam_cmp_lin_flags_tx, ENC_BIG_ENDIAN0x00000000);
1945 } else {
1946 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_lin_flags, ett_asam_cmp_payload_flags, asam_cmp_lin_flags_cap, ENC_BIG_ENDIAN0x00000000);
1947 }
1948 offset += 2;
1949
1950 proto_tree_add_item(tree, hf_cmp_lin_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
1951 offset += 2;
1952
1953 lin_info.id = tvb_get_uint8(tvb, offset) & CMP_CANFD_PID_ID_MASK0x3f;
1954 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_lin_pid, ett_asam_cmp_lin_pid, asam_cmp_lin_pid, ENC_BIG_ENDIAN0x00000000);
1955 offset += 1;
1956
1957 proto_tree_add_item(tree, hf_cmp_lin_reserved_2, tvb, offset, 1, ENC_NA0x00000000);
1958 offset += 1;
1959
1960 proto_tree_add_item(tree, hf_cmp_lin_checksum, tvb, offset, 1, ENC_NA0x00000000);
1961 offset += 1;
1962
1963 uint32_t msg_payload_type_length;
1964 proto_tree_add_item_ret_uint(tree, hf_cmp_lin_data_len, tvb, offset, 1, ENC_NA0x00000000, &msg_payload_type_length);
1965 offset += 1;
1966
1967 if (msg_payload_type_length > 0) {
1968 lin_info.bus_id = ht_interface_config_to_bus_id(interface_id);
1969 lin_info.len = (uint16_t)msg_payload_type_length;
1970
1971 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, msg_payload_type_length);
1972 dissect_lin_message(sub_tvb, pinfo, tree, &lin_info);
1973 offset += msg_payload_type_length;
1974 }
1975
1976 return offset;
1977}
1978
1979static uint32_t
1980dissect_asam_cmp_data_msg_flexray(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned interface_id, bool_Bool tx) {
1981 uint32_t offset = 0;
1982
1983 flexray_info_t fr_info = { 0, 0, 0, 0 };
1984 uint32_t tmp;
1985
1986 static int * const asam_cmp_flexray_flags_cap[] = {
1987 &hf_cmp_flexray_flag_reserved,
1988 &hf_cmp_flexray_flag_channel,
1989 &hf_cmp_flexray_flag_reserved_0x0100,
1990 &hf_cmp_flexray_flag_cas,
1991 &hf_cmp_flexray_flag_ppi,
1992 &hf_cmp_flexray_flag_wus,
1993 &hf_cmp_flexray_flag_sync,
1994 &hf_cmp_flexray_flag_sf,
1995 &hf_cmp_flexray_flag_nf,
1996 &hf_cmp_flexray_flag_crc_header_err,
1997 &hf_cmp_flexray_flag_crc_frame_err,
1998 NULL((void*)0)
1999 };
2000
2001 static int * const asam_cmp_flexray_flags_tx[] = {
2002 &hf_cmp_flexray_flag_reserved,
2003 &hf_cmp_flexray_flag_channel,
2004 &hf_cmp_flexray_flag_leading,
2005 &hf_cmp_flexray_flag_cas,
2006 &hf_cmp_flexray_flag_ppi,
2007 &hf_cmp_flexray_flag_wus,
2008 &hf_cmp_flexray_flag_sync,
2009 &hf_cmp_flexray_flag_sf,
2010 &hf_cmp_flexray_flag_nf,
2011 &hf_cmp_flexray_flag_crc_header_err,
2012 &hf_cmp_flexray_flag_crc_frame_err,
2013 NULL((void*)0)
2014 };
2015
2016 uint16_t flags = tvb_get_uint16(tvb, offset, ENC_BIG_ENDIAN0x00000000);
2017 if (tx) {
2018 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_flexray_flags, ett_asam_cmp_payload_flags, asam_cmp_flexray_flags_tx, ENC_BIG_ENDIAN0x00000000);
2019 } else {
2020 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_flexray_flags, ett_asam_cmp_payload_flags, asam_cmp_flexray_flags_cap, ENC_BIG_ENDIAN0x00000000);
2021 }
2022 offset += 2;
2023
2024 proto_tree_add_item(tree, hf_cmp_flexray_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2025 offset += 2;
2026
2027 proto_tree_add_item(tree, hf_cmp_flexray_header_crc, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2028 offset += 2;
2029
2030 proto_tree_add_item_ret_uint(tree, hf_cmp_flexray_frame_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &tmp);
2031 fr_info.id = (uint16_t)tmp;
2032 offset += 2;
2033
2034 proto_tree_add_item_ret_uint(tree, hf_cmp_flexray_cycle, tvb, offset, 1, ENC_NA0x00000000, &tmp);
2035 fr_info.cc = (uint8_t)tmp;
2036 offset += 1;
2037
2038 proto_tree_add_item(tree, hf_cmp_flexray_frame_crc, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
2039 offset += 3;
2040
2041 proto_tree_add_item(tree, hf_cmp_flexray_reserved_2, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2042 offset += 1;
2043
2044 uint32_t msg_payload_type_length;
2045 proto_tree_add_item_ret_uint(tree, hf_cmp_flexray_data_len, tvb, offset, 1, ENC_NA0x00000000, &msg_payload_type_length);
2046 offset += 1;
2047
2048 if (msg_payload_type_length > 0 && (flags & CMP_FLEXRAY_FLAGS_NF0x0004) == 0) {
2049 fr_info.bus_id = ht_interface_config_to_bus_id(interface_id);
2050 fr_info.ch = 0; /* Assuming A! Could this be B? */
2051
2052 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, msg_payload_type_length);
2053 if (!flexray_call_subdissectors(sub_tvb, pinfo, tree, &fr_info, heuristic_first)) {
2054 call_data_dissector(sub_tvb, pinfo, tree);
2055 }
2056 }
2057
2058 offset += msg_payload_type_length;
2059
2060 return offset;
2061}
2062
2063static uint32_t
2064dissect_asam_cmp_data_msg_digital(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2065 uint32_t offset = 0;
2066
2067 static int * const asam_cmp_digital_flags[] = {
2068 &hf_cmp_digital_flag_reserved,
2069 &hf_cmp_digital_flag_sampl_present,
2070 &hf_cmp_digital_flag_trig_present,
2071 NULL((void*)0)
2072 };
2073
2074 uint64_t flags;
2075 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_digital_flags, ett_asam_cmp_payload_flags, asam_cmp_digital_flags, ENC_BIG_ENDIAN0x00000000, &flags);
2076 offset += 2;
2077
2078 proto_tree_add_item(tree, hf_cmp_digital_reserved, tvb, offset, 1, ENC_NA0x00000000);
2079 offset += 1;
2080
2081 uint32_t pin_count;
2082 proto_tree_add_item_ret_uint(tree, hf_cmp_digital_pin_count, tvb, offset, 1, ENC_NA0x00000000, &pin_count);
2083 offset += 1;
2084
2085 if ((flags & CMP_DIGITAL_FLAG_TRIGGER_PRESENT0x0001) == CMP_DIGITAL_FLAG_TRIGGER_PRESENT0x0001) {
2086 proto_tree_add_item(tree, hf_cmp_digital_trig_pattern, tvb, offset, 1, ENC_NA0x00000000);
2087 offset += 1;
2088
2089 proto_tree_add_item(tree, hf_cmp_digital_trig_pin, tvb, offset, 1, ENC_NA0x00000000);
2090 offset += 1;
2091
2092 proto_tree_add_item(tree, hf_cmp_digital_flag_reserved2, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2093 offset += 2;
2094 }
2095
2096 if ((flags & CMP_DIGITAL_FLAG_SAMPLE_PRESENT0x0002) == CMP_DIGITAL_FLAG_SAMPLE_PRESENT0x0002) {
2097 proto_tree_add_item(tree, hf_cmp_digital_sample_interval, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2098 offset += 4;
2099
2100 uint32_t sample_count;
2101 proto_tree_add_item_ret_uint(tree, hf_cmp_digital_sample_count, tvb, offset, 1, ENC_NA0x00000000, &sample_count);
2102 offset += 1;
2103
2104 uint32_t sample_byte_count = (uint32_t)floor((pin_count + 7) / 8);
2105
2106 for (uint32_t i = 0; i < sample_count; i++) {
2107
2108 proto_item *ti = proto_tree_add_item(tree, hf_cmp_digital_sample, tvb, offset, sample_byte_count, ENC_NA0x00000000);
2109 proto_item_append_text(ti, " [%d] ", i);
2110 proto_tree *sample_tree = proto_item_add_subtree(ti, ett_asam_cmp_digital_sample);
2111
2112 /* we are supporting 32 pins for the beginning */
2113 if (4 < sample_byte_count) {
2114 /* skip unsupported pins */
2115 offset += sample_byte_count - 4;
2116 }
2117 if (4 <= sample_byte_count) {
2118 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_31, tvb, offset, 1, ENC_NA0x00000000);
2119 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_30, tvb, offset, 1, ENC_NA0x00000000);
2120 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_29, tvb, offset, 1, ENC_NA0x00000000);
2121 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_28, tvb, offset, 1, ENC_NA0x00000000);
2122 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_27, tvb, offset, 1, ENC_NA0x00000000);
2123 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_26, tvb, offset, 1, ENC_NA0x00000000);
2124 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_25, tvb, offset, 1, ENC_NA0x00000000);
2125 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_24, tvb, offset, 1, ENC_NA0x00000000);
2126 col_append_fstr(pinfo->cinfo, COL_INFO, " 0x%02x", tvb_get_uint8(tvb, offset));
2127 offset += 1;
2128 }
2129
2130 if (3 <= sample_byte_count) {
2131 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_23, tvb, offset, 1, ENC_NA0x00000000);
2132 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_22, tvb, offset, 1, ENC_NA0x00000000);
2133 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_21, tvb, offset, 1, ENC_NA0x00000000);
2134 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_20, tvb, offset, 1, ENC_NA0x00000000);
2135 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_19, tvb, offset, 1, ENC_NA0x00000000);
2136 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_18, tvb, offset, 1, ENC_NA0x00000000);
2137 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_17, tvb, offset, 1, ENC_NA0x00000000);
2138 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_16, tvb, offset, 1, ENC_NA0x00000000);
2139 col_append_fstr(pinfo->cinfo, COL_INFO, " 0x%02x", tvb_get_uint8(tvb, offset));
2140 offset += 1;
2141 }
2142
2143 if (2 <= sample_byte_count) {
2144 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_15, tvb, offset, 1, ENC_NA0x00000000);
2145 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_14, tvb, offset, 1, ENC_NA0x00000000);
2146 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_13, tvb, offset, 1, ENC_NA0x00000000);
2147 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_12, tvb, offset, 1, ENC_NA0x00000000);
2148 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_11, tvb, offset, 1, ENC_NA0x00000000);
2149 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_10, tvb, offset, 1, ENC_NA0x00000000);
2150 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_9, tvb, offset, 1, ENC_NA0x00000000);
2151 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_8, tvb, offset, 1, ENC_NA0x00000000);
2152 col_append_fstr(pinfo->cinfo, COL_INFO, " 0x%02x", tvb_get_uint8(tvb, offset));
2153 offset += 1;
2154 }
2155
2156 if (1 <= sample_byte_count) {
2157 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_7, tvb, offset, 1, ENC_NA0x00000000);
2158 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_6, tvb, offset, 1, ENC_NA0x00000000);
2159 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_5, tvb, offset, 1, ENC_NA0x00000000);
2160 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_4, tvb, offset, 1, ENC_NA0x00000000);
2161 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_3, tvb, offset, 1, ENC_NA0x00000000);
2162 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_2, tvb, offset, 1, ENC_NA0x00000000);
2163 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_1, tvb, offset, 1, ENC_NA0x00000000);
2164 proto_tree_add_item(sample_tree, hf_cmp_digital_sample_pin_0, tvb, offset, 1, ENC_NA0x00000000);
2165 col_append_fstr(pinfo->cinfo, COL_INFO, " 0x%02x", tvb_get_uint8(tvb, offset));
2166 offset += 1;
2167 }
2168 }
2169 }
2170
2171 return offset;
2172}
2173
2174static uint32_t
2175dissect_asam_cmp_data_msg_uart(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
2176 uint32_t offset = 0;
2177
2178 static int * const asam_cmp_uart_flags[] = {
2179 &hf_cmp_uart_flag_reserved,
2180 &hf_cmp_uart_flag_cl,
2181 NULL((void*)0)
2182 };
2183
2184 static int * const asam_cmp_uart_data[] = {
2185 &hf_cmp_uart_data_parity_err,
2186 &hf_cmp_uart_data_break_condition,
2187 &hf_cmp_uart_data_framing_err,
2188 &hf_cmp_uart_data_reserved,
2189 &hf_cmp_uart_data_data,
2190 NULL((void*)0)
2191 };
2192
2193 uint64_t char_len;
2194 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_uart_flags, ett_asam_cmp_payload_flags, asam_cmp_uart_flags, ENC_BIG_ENDIAN0x00000000, &char_len);
2195 char_len = char_len & 0x07;
2196 offset += 2;
2197
2198 proto_tree_add_item(tree, hf_cmp_uart_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2199 offset += 2;
2200
2201 uint32_t msg_payload_type_length;
2202 proto_tree_add_item_ret_uint(tree, hf_cmp_uart_data_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_type_length);
2203 offset += 2;
2204
2205 for (unsigned i = 0; i < msg_payload_type_length; i++) {
2206 uint8_t *buf = NULL((void*)0);
2207 proto_item *ti = proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_uart_data, ett_asam_cmp_uart_data, asam_cmp_uart_data, ENC_BIG_ENDIAN0x00000000);
2208 if (char_len == CMP_UART_CL_70x02 || char_len == CMP_UART_CL_80x03) {
2209 buf = tvb_get_string_enc(pinfo->pool, tvb, offset + 1, 1, ENC_ASCII0x00000000 | ENC_NA0x00000000);
2210
2211 /* sanitizing buffer */
2212 if (buf[0] > 0x00 && buf[0] < 0x20) {
2213 buf[0] = 0x20;
2214 } else {
2215 proto_item_append_text(ti, ": %s", buf);
2216 }
2217 }
2218 offset += 2;
2219 }
2220
2221 return offset;
2222}
2223
2224static uint32_t
2225dissect_asam_cmp_data_msg_analog(tvbuff_t *tvb, proto_tree *tree) {
2226 uint32_t offset = 0;
2227
2228 static int * const asam_cmp_analog_flags[] = {
2229 &hf_cmp_analog_flag_reserved,
2230 &hf_cmp_analog_flag_sample_dt,
2231 NULL((void*)0)
2232 };
2233
2234 uint64_t flags;
2235 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_analog_flags, ett_asam_cmp_payload_flags, asam_cmp_analog_flags, ENC_BIG_ENDIAN0x00000000, &flags);
2236 offset += 2;
2237
2238 proto_tree_add_item(tree, hf_cmp_analog_reserved, tvb, offset, 1, ENC_NA0x00000000);
2239 offset += 1;
2240
2241 unsigned analog_unit;
2242 proto_tree_add_item_ret_uint(tree, hf_cmp_analog_unit, tvb, offset, 1, ENC_NA0x00000000, &analog_unit);
2243 const char *unit_symbol;
2244 unit_symbol = try_val_to_str(analog_unit, analog_units);
2245 offset += 1;
2246
2247 proto_tree_add_item(tree, hf_cmp_analog_sample_interval, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2248 offset += 4;
2249
2250 float sample_offset;
2251 proto_tree_add_item(tree, hf_cmp_analog_sample_offset, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2252 sample_offset = tvb_get_ieee_float(tvb, offset, ENC_BIG_ENDIAN0x00000000);
2253 offset += 4;
2254
2255 float sample_scalar;
2256 proto_tree_add_item(tree, hf_cmp_analog_sample_scalar, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2257 sample_scalar = tvb_get_ieee_float(tvb, offset, ENC_BIG_ENDIAN0x00000000);
2258 offset += 4;
2259
2260 int data_width;
2261 switch (flags & 0x03) {
2262 case 0: /* INT16 */
2263 data_width = 2;
2264 break;
2265 case 1: /* INT32 */
2266 data_width = 4;
2267 break;
2268 default:
2269 data_width = 0;
2270 }
2271
2272 int data_left = tvb_captured_length(tvb) - offset;
2273
2274 while (data_width != 0 && data_left >= data_width) {
2275 switch (flags & 0x03) {
2276 case 0: {
2277 /* INT16 */
2278 double sample_value = ((double)tvb_get_int16(tvb, offset, ENC_BIG_ENDIAN0x00000000) * sample_scalar + sample_offset);
2279 proto_item *ti = proto_tree_add_double(tree, hf_cmp_analog_sample, tvb, offset, 2, sample_value);
2280 if (unit_symbol == NULL((void*)0)) {
2281 proto_item_append_text(ti, " (%.9f)", sample_value);
2282 } else {
2283 proto_item_append_text(ti, "%s (%.9f%s)", unit_symbol, sample_value, unit_symbol);
2284 }
2285 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
2286
2287 proto_tree *sample_tree = proto_item_add_subtree(ti, ett_asam_cmp_analog_sample);
2288 ti = proto_tree_add_item(sample_tree, hf_cmp_analog_sample_raw, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2289 PROTO_ITEM_SET_HIDDEN(ti)proto_item_set_hidden((ti));
2290
2291 data_left -= 2;
2292 offset += 2;
2293 break;
2294 }
2295 case 1: { /* INT32 */
2296 double sample_value = ((double)tvb_get_int32(tvb, offset, ENC_BIG_ENDIAN0x00000000) * sample_scalar + sample_offset);
2297 proto_item *ti = proto_tree_add_double(tree, hf_cmp_analog_sample, tvb, offset, 4, sample_value);
2298 if (unit_symbol == NULL((void*)0)) {
2299 proto_item_append_text(ti, " (%.9f)", sample_value);
2300 } else {
2301 proto_item_append_text(ti, "%s (%.9f%s)", unit_symbol, sample_value, unit_symbol);
2302 }
2303 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
2304
2305 proto_tree *sample_tree = proto_item_add_subtree(ti, ett_asam_cmp_analog_sample);
2306 ti = proto_tree_add_item(sample_tree, hf_cmp_analog_sample_raw, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2307 PROTO_ITEM_SET_HIDDEN(ti)proto_item_set_hidden((ti));
2308
2309 data_left -= 4;
2310 offset += 4;
2311 break;
2312 }
2313 default:
2314 /* Other types are reserved as of now, so we do not know how to parse them. Just ignore. */
2315 break;
2316 }
2317 }
2318
2319 return offset;
2320}
2321
2322static void
2323call_asam_cmp_ethernet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *root_tree) {
2324 /* The Ethernet frame may carry ASAM CMP again; stop before the layer limit */
2325 if (wmem_list_count(pinfo->layers) + 16 >= prefs.gui_max_tree_depth) {
2326 proto_tree_add_expert_remaining(tree, pinfo, &ei_asam_cmp_too_deep, tvb, 0);
2327 return;
2328 }
2329 call_dissector(eth_handle, tvb, pinfo, root_tree);
2330}
2331
2332static uint32_t
2333dissect_asam_cmp_data_msg_ethernet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *root_tree, bool_Bool tx) {
2334 uint32_t offset = 0;
2335
2336 static int * const asam_cmp_ethernet_flags_cap[] = {
2337 &hf_cmp_eth_flag_reserved_cap,
2338 &hf_cmp_eth_flag_fcs_supported,
2339 &hf_cmp_eth_flag_truncated,
2340 &hf_cmp_eth_flag_phy_err,
2341 &hf_cmp_eth_flag_long_err,
2342 &hf_cmp_eth_flag_collision,
2343 &hf_cmp_eth_flag_tx_down,
2344 &hf_cmp_eth_flag_short_err,
2345 &hf_cmp_eth_flag_fcs_err,
2346 NULL((void*)0)
2347 };
2348
2349 static int * const asam_cmp_ethernet_flags_tx[] = {
2350 &hf_cmp_eth_flag_reserved_tx2,
2351 &hf_cmp_eth_flag_fcs_sending,
2352 &hf_cmp_eth_flag_reserved_tx,
2353 NULL((void*)0)
2354 };
2355
2356 if (tx) {
2357 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_eth_flags, ett_asam_cmp_payload_flags, asam_cmp_ethernet_flags_tx, ENC_BIG_ENDIAN0x00000000);
2358 } else {
2359 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_eth_flags, ett_asam_cmp_payload_flags, asam_cmp_ethernet_flags_cap, ENC_BIG_ENDIAN0x00000000);
2360 }
2361 offset += 2;
2362
2363 proto_tree_add_item(tree, hf_cmp_eth_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2364 offset += 2;
2365
2366 uint32_t msg_payload_type_length;
2367 proto_tree_add_item_ret_uint(tree, hf_cmp_eth_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_type_length);
2368 offset += 2;
2369
2370 if (msg_payload_type_length > 0) {
2371 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, (int)msg_payload_type_length);
2372 call_asam_cmp_ethernet(sub_tvb, pinfo, tree, root_tree);
2373 offset += msg_payload_type_length;
2374 }
2375
2376 return offset;
2377}
2378
2379static uint32_t
2380dissect_asam_cmp_data_msg_spi(tvbuff_t *tvb, proto_tree *tree) {
2381 uint32_t offset = 0;
2382
2383 static int * const asam_cmp_spi_flags[] = {
2384 &hf_cmp_spi_flag_reserved,
2385 NULL((void*)0)
2386 };
2387
2388 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_spi_flags, ett_asam_cmp_payload_flags, asam_cmp_spi_flags, ENC_BIG_ENDIAN0x00000000);
2389 offset += 2;
2390
2391 proto_tree_add_item(tree, hf_cmp_spi_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2392 offset += 2;
2393
2394 uint32_t cipo_length;
2395 proto_tree_add_item_ret_uint(tree, hf_cmp_spi_cipo_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &cipo_length);
2396 offset += 2;
2397
2398 if (cipo_length > 0) {
2399 proto_tree_add_item(tree, hf_cmp_spi_cipo, tvb, offset, cipo_length, ENC_NA0x00000000);
2400 offset += cipo_length;
2401 }
2402
2403 uint32_t copi_length;
2404 proto_tree_add_item_ret_uint(tree, hf_cmp_spi_copi_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &copi_length);
2405 offset += 2;
2406
2407 if (copi_length > 0) {
2408 proto_tree_add_item(tree, hf_cmp_spi_copi, tvb, offset, copi_length, ENC_NA0x00000000);
2409 offset += copi_length;
2410 }
2411
2412 return offset;
2413}
2414
2415static uint32_t
2416dissect_asam_cmp_data_msg_i2c(tvbuff_t *tvb, proto_tree *tree) {
2417 uint32_t offset = 0;
2418
2419 static int * const asam_cmp_i2c_flags[] = {
2420 &hf_cmp_i2c_flag_reserved,
2421 &hf_cmp_i2c_flag_start_cond,
2422 &hf_cmp_i2c_flag_stop_cond,
2423 &hf_cmp_i2c_flag_addr_err,
2424 &hf_cmp_i2c_flag_addr_ack,
2425 &hf_cmp_i2c_flag_addr_len,
2426 &hf_cmp_i2c_flag_dir,
2427 NULL((void*)0)
2428 };
2429
2430 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_i2c_flags, ett_asam_cmp_payload_flags, asam_cmp_i2c_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
2431 offset += 2;
2432
2433 proto_tree_add_item(tree, hf_cmp_i2c_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2434 offset += 2;
2435
2436 proto_tree_add_item(tree, hf_cmp_i2c_addr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2437 offset += 2;
2438
2439 uint32_t data_entry_count;
2440 proto_tree_add_item_ret_uint(tree, hf_cmp_i2c_data_entry_count, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &data_entry_count);
2441 offset += 2;
2442
2443 static int * const asam_cmp_i2c_data[] = {
2444 &hf_cmp_i2c_data_control_res,
2445 &hf_cmp_i2c_data_control_ack,
2446 &hf_cmp_i2c_data_byte,
2447 NULL((void*)0)
2448 };
2449
2450 for (uint32_t i = 0; i < data_entry_count; i++) {
2451 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_i2c_data, ett_asam_cmp_i2c_data_entry, asam_cmp_i2c_data, ENC_BIG_ENDIAN0x00000000);
2452 offset += 2;
2453 }
2454
2455 return offset;
2456}
2457
2458static uint32_t
2459dissect_asam_cmp_data_msg_gige_vision(tvbuff_t *tvb, proto_tree *tree) {
2460 uint32_t offset = 0;
2461
2462 static int * const asam_cmp_gige_flags[] = {
2463 &hf_cmp_gige_flag_reserved,
2464 NULL((void*)0)
2465 };
2466
2467 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_gige_flags, ett_asam_cmp_payload_flags, asam_cmp_gige_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
2468 offset += 2;
2469
2470 proto_tree_add_item(tree, hf_cmp_gige_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2471 offset += 2;
2472
2473 uint32_t msg_payload_type_length;
2474 proto_tree_add_item_ret_uint(tree, hf_cmp_gige_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_type_length);
2475 offset += 2;
2476
2477 if (msg_payload_type_length > 0) {
2478 proto_tree_add_item(tree, hf_cmp_gige_payload, tvb, offset, msg_payload_type_length, ENC_NA0x00000000);
2479 offset += msg_payload_type_length;
2480 }
2481
2482 return offset;
2483}
2484
2485static uint32_t
2486dissect_asam_cmp_data_msg_mipi_csi2(tvbuff_t *tvb, proto_tree *tree, bool_Bool tx) {
2487 uint32_t offset = 0;
2488
2489 static int * const asam_cmp_mipi_csi2_flags_cap[] = {
2490 &hf_cmp_mipi_csi2_flag_reserved,
2491 &hf_cmp_mipi_csi2_flag_cs_support,
2492 &hf_cmp_mipi_csi2_flag_line_ctr_src,
2493 &hf_cmp_mipi_csi2_flag_frame_ctr_src,
2494 &hf_cmp_mipi_csi2_flag_ecc_fmt,
2495 &hf_cmp_mipi_csi2_flag_ecc_err_uc,
2496 &hf_cmp_mipi_csi2_flag_ecc_err_c,
2497 &hf_cmp_mipi_csi2_flag_crc_err,
2498 NULL((void*)0)
2499 };
2500
2501 static int * const asam_cmp_mipi_csi2_flags_tx[] = {
2502 &hf_cmp_mipi_csi2_flag_reserved_tx,
2503 NULL((void*)0)
2504 };
2505
2506 if (tx) {
2507 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_mipi_csi2_flags, ett_asam_cmp_payload_flags, asam_cmp_mipi_csi2_flags_tx, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
2508 } else {
2509 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_mipi_csi2_flags, ett_asam_cmp_payload_flags, asam_cmp_mipi_csi2_flags_cap, ENC_BIG_ENDIAN0x00000000, BMT_NO_APPEND0x01);
2510 }
2511 offset += 2;
2512
2513 proto_tree_add_item(tree, hf_cmp_mipi_csi2_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2514 offset += 2;
2515
2516 proto_tree_add_item(tree, hf_cmp_mipi_csi2_frame_counter, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2517 offset += 2;
2518
2519 proto_tree_add_item(tree, hf_cmp_mipi_csi2_line_counter, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2520 offset += 2;
2521
2522 static int * const asam_cmp_mipi_dt[] = {
2523 &hf_cmp_mipi_csi2_dt_res,
2524 &hf_cmp_mipi_csi2_dt_dt,
2525 NULL((void*)0)
2526 };
2527
2528 uint64_t mipi_csi2_dt_flags;
2529 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_cmp_mipi_csi2_dt, ett_asam_cmp_payload_flags, asam_cmp_mipi_dt, ENC_NA0x00000000, BMT_NO_APPEND0x01, &mipi_csi2_dt_flags);
2530 offset += 1;
2531
2532 bool_Bool asam_cmp_mipi_csi_short_packet = (mipi_csi2_dt_flags & MIPI_CSI2_DT_BITS0x3F) <= MIPI_CSI2_DT_SHORT_END0x0F;
2533
2534 static int * const asam_cmp_mipi_vci[] = {
2535 &hf_cmp_mipi_csi2_vci_res,
2536 &hf_cmp_mipi_csi2_vci_vcx,
2537 &hf_cmp_mipi_csi2_vci_vci,
2538 NULL((void*)0)
2539 };
2540
2541 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_mipi_csi2_vci, ett_asam_cmp_payload_flags, asam_cmp_mipi_vci, ENC_NA0x00000000, BMT_NO_APPEND0x01);
2542 offset += 1;
2543
2544 proto_tree_add_item(tree, hf_cmp_mipi_csi2_reserved2, tvb, offset, 1, ENC_NA0x00000000);
2545 offset += 1;
2546
2547 static int * const asam_cmp_mipi_ecc[] = {
2548 &hf_cmp_mipi_csi2_ecc_res,
2549 &hf_cmp_mipi_csi2_ecc_ecc,
2550 NULL((void*)0)
2551 };
2552
2553 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_cmp_mipi_csi2_ecc, ett_asam_cmp_payload_flags, asam_cmp_mipi_ecc, ENC_NA0x00000000, BMT_NO_APPEND0x01);
2554 offset += 1;
2555
2556 proto_tree_add_item(tree, hf_cmp_mipi_csi2_cs, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2557 offset += 2;
2558
2559 if (asam_cmp_mipi_csi_short_packet) {
2560 proto_tree_add_item(tree, hf_cmp_mipi_csi2_short_packet_data, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2561 offset += 2;
2562 } else {
2563 uint32_t word_count;
2564 proto_tree_add_item_ret_uint(tree, hf_cmp_mipi_csi2_wc, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &word_count);
2565 offset += 2;
2566
2567 proto_tree_add_item(tree, hf_cmp_mipi_csi2_data, tvb, offset, word_count, ENC_NA0x00000000);
2568 offset += word_count;
2569 }
2570
2571 return offset;
2572}
2573
2574static uint32_t
2575dissect_asam_cmp_data_msg_raw_ethernet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *root_tree) {
2576 uint32_t offset = 0;
2577
2578 static int * const asam_cmp_raw_ethernet_flags[] = {
2579 &hf_cmp_raw_eth_flag_reserved,
2580 NULL((void*)0)
2581 };
2582
2583 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_eth_flags, ett_asam_cmp_payload_flags, asam_cmp_raw_ethernet_flags, ENC_BIG_ENDIAN0x00000000);
2584 offset += 2;
2585
2586 proto_tree_add_item(tree, hf_cmp_eth_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2587 offset += 2;
2588
2589 uint32_t msg_payload_type_length;
2590 proto_tree_add_item_ret_uint(tree, hf_cmp_eth_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_type_length);
2591 offset += 2;
2592
2593 uint32_t payload_end = offset + msg_payload_type_length;
2594
2595 uint32_t preamble_length = 0;
2596 while ((preamble_length < msg_payload_type_length) && (CMP_ETH_RAW_PREAMBLE0x55 == tvb_get_uint8(tvb, offset + preamble_length))) {
2597 preamble_length += 1;
2598 }
2599
2600 if (preamble_length > 0) {
2601 proto_tree_add_item(tree, hf_cmp_raw_eth_preamble, tvb, offset, preamble_length, ENC_NA0x00000000);
2602 offset += preamble_length;
2603
2604 if (offset < payload_end) {
2605 uint8_t sfd_candidate = tvb_get_uint8(tvb, offset);
2606
2607 if (try_val_to_str(sfd_candidate, eth_raw_sfd) != NULL((void*)0)) {
2608 proto_tree_add_item(tree, hf_cmp_raw_eth_sfd, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2609 offset += 1;
2610
2611 if (offset < payload_end) {
2612 uint32_t bytes_left = msg_payload_type_length - preamble_length - 1;
2613
2614 if (bytes_left > 0) {
2615 if (sfd_candidate == CMP_ETH_RAW_SFD_ORIG0xD5) {
2616 call_asam_cmp_ethernet(tvb_new_subset_length(tvb, offset, bytes_left), pinfo, tree, root_tree);
2617 } else {
2618 proto_tree_add_item(tree, hf_cmp_raw_eth_mpacket, tvb, offset, bytes_left, ENC_NA0x00000000);
2619 }
2620 offset += (int)bytes_left;
2621 }
2622 }
2623 }
2624 }
2625 }
2626
2627 return offset;
2628}
2629
2630static uint32_t
2631dissect_asam_cmp_data_msg_10baset1s_symbols(tvbuff_t *tvb, proto_tree *tree) {
2632 uint32_t offset = 0;
2633
2634 static int * const asam_cmp_10baset1s_flags[] = {
2635 &hf_cmp_10t1s_symb_flag_first_beacon,
2636 &hf_cmp_10t1s_symb_flag_res,
2637 &hf_cmp_10t1s_symb_flag_miss_beacon,
2638 &hf_cmp_10t1s_symb_flag_decode_err,
2639 NULL((void*)0)
2640 };
2641
2642 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_10t1s_symb_flags, ett_asam_cmp_payload_flags, asam_cmp_10baset1s_flags, ENC_BIG_ENDIAN0x00000000);
2643 offset += 2;
2644
2645 uint32_t msg_payload_type_length;
2646 proto_tree_add_item_ret_uint(tree, hf_cmp_10t1s_symb_data_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_type_length);
2647 offset += 2;
2648
2649 proto_item *ti = proto_tree_add_item(tree, hf_cmp_10t1s_symb_data, tvb, offset, msg_payload_type_length, ENC_NA0x00000000);
2650 proto_tree *data_tree = proto_item_add_subtree(ti, ett_asam_cmp_payload_data);
2651 for (uint32_t i = 0; i < msg_payload_type_length; i++) {
2652 proto_tree_add_item(data_tree, hf_cmp_10t1s_symb_data_symbol, tvb, offset, 1, ENC_NA0x00000000);
2653 offset += 1;
2654 }
2655
2656 return offset;
2657}
2658
2659static uint32_t
2660dissect_asam_cmp_data_msg_a2b(tvbuff_t *tvb, proto_tree *tree) {
2661 uint32_t offset = 0;
2662
2663 static int * const asam_cmp_a2b_flags[] = {
2664 &hf_cmp_a2b_flag_i2c_err,
2665 &hf_cmp_a2b_flag_icrc_err,
2666 &hf_cmp_a2b_flag_srfcrc_err,
2667 &hf_cmp_a2b_flag_srf_err,
2668 &hf_cmp_a2b_flag_becovf_err,
2669 &hf_cmp_a2b_flag_pwd_err,
2670 &hf_cmp_a2b_flag_dp_err,
2671 &hf_cmp_a2b_flag_crc_err,
2672 &hf_cmp_a2b_flag_dd_err,
2673 &hf_cmp_a2b_flag_hdcnt_err,
2674 &hf_cmp_a2b_flag_fault_nloc,
2675 &hf_cmp_a2b_flag_fault_code,
2676 &hf_cmp_a2b_flag_fault_err,
2677 &hf_cmp_a2b_flag_fin,
2678 NULL((void*)0)
2679 };
2680
2681 static int * const asam_cmp_a2b_upstream_settings[] = {
2682 &hf_cmp_a2b_upstream_set_upoffset,
2683 &hf_cmp_a2b_upstream_set_upslots,
2684 &hf_cmp_a2b_upstream_set_upsize,
2685 &hf_cmp_a2b_upstream_set_ups,
2686 &hf_cmp_a2b_upstream_set_upfmt,
2687 NULL((void*)0)
2688 };
2689
2690 static int * const asam_cmp_a2b_downstream_settings[] = {
2691 &hf_cmp_a2b_downstream_set_dnoffset,
2692 &hf_cmp_a2b_downstream_set_dnslots,
2693 &hf_cmp_a2b_downstream_set_dnsize,
2694 &hf_cmp_a2b_downstream_set_dns,
2695 &hf_cmp_a2b_downstream_set_dnfmt,
2696 NULL((void*)0)
2697 };
2698
2699 static int * const asam_cmp_a2b_general_settings[] = {
2700 &hf_cmp_a2b_general_set_raw_cap,
2701 &hf_cmp_a2b_general_set_reserved,
2702 &hf_cmp_a2b_general_set_rrsoffset,
2703 &hf_cmp_a2b_general_set_rrdiv,
2704 &hf_cmp_a2b_general_set_syncoffset,
2705 &hf_cmp_a2b_general_set_rxoffset,
2706 &hf_cmp_a2b_general_set_txoffset,
2707 &hf_cmp_a2b_general_set_i2srate,
2708 &hf_cmp_a2b_general_set_bclkrate,
2709 &hf_cmp_a2b_general_set_bmmen,
2710 &hf_cmp_a2b_general_set_tdmss,
2711 &hf_cmp_a2b_general_set_tdmmode,
2712 &hf_cmp_a2b_general_set_rx2pintl,
2713 &hf_cmp_a2b_general_set_tx2pintl,
2714 &hf_cmp_a2b_general_set_discvd,
2715 &hf_cmp_a2b_general_set_endsniff,
2716 &hf_cmp_a2b_general_set_standby,
2717 &hf_cmp_a2b_general_set_mstr,
2718 NULL((void*)0)
2719 };
2720
2721 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_a2b_flags, ett_asam_cmp_payload_flags, asam_cmp_a2b_flags, ENC_BIG_ENDIAN0x00000000);
2722 offset += 2;
2723
2724 proto_tree_add_item(tree, hf_cmp_a2b_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2725 offset += 2;
2726
2727 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_a2b_upstream_set, ett_asam_cmp_a2b_upstream_settings, asam_cmp_a2b_upstream_settings, ENC_BIG_ENDIAN0x00000000);
2728 offset += 2;
2729
2730 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_a2b_downstream_set, ett_asam_cmp_a2b_downstream_settings, asam_cmp_a2b_downstream_settings, ENC_BIG_ENDIAN0x00000000);
2731 offset += 2;
2732
2733 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_a2b_general_set, ett_asam_cmp_a2b_general_settings, asam_cmp_a2b_general_settings, ENC_BIG_ENDIAN0x00000000);
2734 offset += 8;
2735
2736 uint32_t msg_payload_type_length;
2737 proto_tree_add_item_ret_uint(tree, hf_cmp_a2b_data_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_type_length);
2738 offset += 2;
2739
2740 if (msg_payload_type_length > 0) {
2741 proto_tree_add_item(tree, hf_cmp_a2b_data, tvb, offset, msg_payload_type_length, ENC_NA0x00000000);
2742 offset += msg_payload_type_length;
2743 }
2744
2745 return offset;
2746}
2747
2748static uint32_t
2749dissect_asam_cmp_data_msg_link_state(tvbuff_t *tvb, proto_tree *tree, bool_Bool tx) {
2750 uint32_t offset = 0;
2751
2752 static int * const asam_cmp_link_state_flags_cap[] = {
2753 &hf_cmp_link_state_flag_reserved,
2754 &hf_cmp_link_state_flag_link_err,
2755 NULL((void*)0)
2756 };
2757
2758 static int * const asam_cmp_link_state_flags_tx[] = {
2759 &hf_cmp_link_state_flag_reserved_tx,
2760 NULL((void*)0)
2761 };
2762
2763 if (tx) {
2764 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_link_state_flags, ett_asam_cmp_payload_flags, asam_cmp_link_state_flags_tx, ENC_BIG_ENDIAN0x00000000);
2765 } else {
2766 proto_tree_add_bitmask(tree, tvb, offset, hf_cmp_link_state_flags, ett_asam_cmp_payload_flags, asam_cmp_link_state_flags_cap, ENC_BIG_ENDIAN0x00000000);
2767 }
2768 offset += 2;
2769
2770 proto_tree_add_item(tree, hf_cmp_link_state_interface_status, tvb, offset, 1, ENC_NA0x00000000);
2771 offset += 1;
2772
2773 proto_tree_add_item(tree, hf_cmp_link_state_reserved, tvb, offset, 1, ENC_NA0x00000000);
2774 offset += 1;
2775
2776
2777 return offset;
2778}
2779
2780static uint32_t
2781dissect_asam_cmp_data_msg_user_defined(tvbuff_t *tvb, proto_tree *tree) {
2782 uint32_t offset = 0;
2783
2784 proto_tree_add_item(tree, hf_cmp_vendor_def_vendor_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2785 offset += 2;
2786
2787 proto_tree_add_item(tree, hf_cmp_vendor_def_vendor_payload_type, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
2788 offset += 2;
2789
2790 proto_tree_add_item(tree, hf_cmp_vendor_def_vendor_payload_data, tvb, offset, tvb_captured_length_remaining(tvb, offset), ENC_NA0x00000000);
2791 offset += tvb_captured_length_remaining(tvb, offset);
2792
2793 return offset;
2794}
2795
2796static uint32_t
2797dissect_asam_cmp_data_msg_payload(tvbuff_t *payload_tvb, packet_info *pinfo, proto_tree *tree, proto_tree *root_tree, uint32_t msg_payload_type, uint32_t interface_id, bool_Bool tx) {
2798 uint32_t offset = 0;
2799 uint32_t msg_payload_length = tvb_captured_length(payload_tvb);
2800
2801 switch (msg_payload_type) {
2802 case CMP_DATA_MSG_INVALID0x00:
2803 if (msg_payload_length > 0) {
2804 call_data_dissector(payload_tvb, pinfo, tree);
2805 offset += tvb_captured_length(payload_tvb);
2806 }
2807 break;
2808
2809 case CMP_DATA_MSG_CAN0x01:
2810 offset += dissect_asam_cmp_data_msg_can(payload_tvb, pinfo, tree, interface_id, tx);
2811 break;
2812
2813 case CMP_DATA_MSG_CANFD0x02:
2814 offset += dissect_asam_cmp_data_msg_canfd(payload_tvb, pinfo, tree, interface_id, tx);
2815 break;
2816
2817 case CMP_DATA_MSG_LIN0x03:
2818 offset += dissect_asam_cmp_data_msg_lin(payload_tvb, pinfo, tree, interface_id, tx);
2819 break;
2820
2821 case CMP_DATA_MSG_FLEXRAY0x04:
2822 offset += dissect_asam_cmp_data_msg_flexray(payload_tvb, pinfo, tree, interface_id, tx);
2823 break;
2824
2825 case CMP_DATA_MSG_DIGITAL0x05:
2826 offset += dissect_asam_cmp_data_msg_digital(payload_tvb, pinfo, tree);
2827 break;
2828
2829 case CMP_DATA_MSG_UART_RS_2320x06:
2830 offset += dissect_asam_cmp_data_msg_uart(payload_tvb, pinfo, tree);
2831 break;
2832
2833 case CMP_DATA_MSG_ANALOG0x07:
2834 offset += dissect_asam_cmp_data_msg_analog(payload_tvb, tree);
2835 break;
2836
2837 case CMP_DATA_MSG_ETHERNET0x08:
2838 offset += dissect_asam_cmp_data_msg_ethernet(payload_tvb, pinfo, tree, root_tree, tx);
2839 break;
2840
2841 case CMP_DATA_MSG_SPI0x09:
2842 offset += dissect_asam_cmp_data_msg_spi(payload_tvb, tree);
2843 break;
2844
2845 case CMP_DATA_MSG_I2C0x0A:
2846 offset += dissect_asam_cmp_data_msg_i2c(payload_tvb, tree);
2847 break;
2848
2849 case CMP_DATA_MSG_GIGEVISION0x0B:
2850 offset += dissect_asam_cmp_data_msg_gige_vision(payload_tvb, tree);
2851 break;
2852
2853 case CMP_DATA_MSG_MIPI_CSI20x0C:
2854 offset += dissect_asam_cmp_data_msg_mipi_csi2(payload_tvb, tree, tx);
2855 break;
2856
2857 case CMP_DATA_MSG_RAW_ETHERNET0x0D:
2858 offset += dissect_asam_cmp_data_msg_raw_ethernet(payload_tvb, pinfo, tree, root_tree);
2859 break;
2860
2861 case CMP_DATA_MSG_10BASE_T1S_SYMBOL0x0E:
2862 offset += dissect_asam_cmp_data_msg_10baset1s_symbols(payload_tvb, tree);
2863 break;
2864
2865 case CMP_DATA_MSG_A2B0x0F:
2866 offset += dissect_asam_cmp_data_msg_a2b(payload_tvb, tree);
2867 break;
2868
2869 case CMP_DATA_MSG_LINK_STATE0xFE:
2870 offset += dissect_asam_cmp_data_msg_link_state(payload_tvb, tree, tx);
2871 break;
2872
2873 case CMP_DATA_MSG_VENDOR_DATA_MSG0xFF:
2874 offset += dissect_asam_cmp_data_msg_user_defined(payload_tvb, tree);
2875 break;
2876
2877 default:
2878 offset += tvb_captured_length(payload_tvb);
2879 break;
2880 }
2881
2882 return offset;
2883}
2884
2885static void
2886dissect_asam_cmp_data_msg_transmission_options(tvbuff_t *tvb, proto_tree *tree, uint8_t payload_type) {
2887
2888 static int * const trans_opts_default[] = {
2889 &hf_cmp_msg_trans_opts_res,
2890 NULL((void*)0)
2891 };
2892
2893 static int * const trans_opts_lin[] = {
2894 &hf_cmp_msg_trans_opts_lin_wup_dura,
2895 &hf_cmp_msg_trans_opts_lin_res,
2896 NULL((void*)0)
2897 };
2898
2899 static int * const trans_opts_flexray[] = {
2900 &hf_cmp_msg_trans_opts_fr_op,
2901 &hf_cmp_msg_trans_opts_fr_cycle_rep,
2902 &hf_cmp_msg_trans_opts_fr_res,
2903 NULL((void*)0)
2904 };
2905
2906 switch (payload_type) {
2907 case CMP_DATA_MSG_LIN0x03:
2908 proto_tree_add_bitmask(tree, tvb, 0, hf_cmp_msg_trans_opts, ett_asam_cmp_trans_opts, trans_opts_lin, ENC_BIG_ENDIAN0x00000000);
2909 break;
2910
2911 case CMP_DATA_MSG_FLEXRAY0x04:
2912 proto_tree_add_bitmask(tree, tvb, 0, hf_cmp_msg_trans_opts, ett_asam_cmp_trans_opts, trans_opts_flexray, ENC_BIG_ENDIAN0x00000000);
2913 break;
2914
2915 default:
2916 proto_tree_add_bitmask(tree, tvb, 0, hf_cmp_msg_trans_opts, ett_asam_cmp_trans_opts, trans_opts_default, ENC_BIG_ENDIAN0x00000000);
2917 }
2918}
2919
2920static int
2921dissect_asam_cmp_data_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *root_tree, proto_tree *tree, unsigned offset_orig, bool_Bool tx) {
2922 proto_item *ti = NULL((void*)0);
2923 proto_item *ti_msg_header = NULL((void*)0);
2924 proto_item *ti_msg_payload = NULL((void*)0);
2925 proto_tree *asam_cmp_data_msg_header_tree = NULL((void*)0);
2926 proto_tree *asam_cmp_data_msg_payload_tree = NULL((void*)0);
2927 proto_tree *subtree = NULL((void*)0);
2928 unsigned offset = offset_orig;
2929
2930 unsigned msg_payload_type = 0;
2931 unsigned msg_payload_length = 0;
2932 unsigned interface_id = 0;
2933
2934 static int * const asam_cmp_common_flags_cap[] = {
2935 &hf_cmp_common_flag_reserved,
2936 &hf_cmp_common_flag_err_in_payload,
2937 &hf_cmp_common_flag_overflow,
2938 &hf_cmp_common_flag_dir_on_if,
2939 &hf_cmp_common_flag_seg,
2940 &hf_cmp_common_flag_insync,
2941 &hf_cmp_common_flag_recal,
2942 NULL((void*)0)
2943 };
2944
2945 static int * const asam_cmp_common_flags_tx[] = {
2946 &hf_cmp_common_flag_reserved_0xf0,
2947 &hf_cmp_common_flag_seg,
2948 &hf_cmp_common_flag_reserved_0x02,
2949 &hf_cmp_common_flag_relative,
2950 NULL((void*)0)
2951 };
2952
2953 /* Testing for Ethernet Padding */
2954 if ( (!tx && tvb_get_uint8(tvb, offset + 13) == 0) || (tx && tvb_get_uint8(tvb, offset + 21) == 0)) {
2955 return 0;
2956 }
2957
2958 ti_msg_header = proto_tree_add_item(tree, hf_cmp_msg_header, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2959 asam_cmp_data_msg_header_tree = proto_item_add_subtree(ti_msg_header, ett_asam_cmp_header);
2960 proto_item_append_text(ti_msg_header, " %s", "- Data Message");
2961
2962 uint64_t ns = tvb_get_uint64(tvb, offset, ENC_BIG_ENDIAN0x00000000);
2963 nstime_t timestamp = { .secs = (time_t)(ns / 1000000000), .nsecs = (int)(ns % 1000000000) };
2964
2965 ti = proto_tree_add_time(asam_cmp_data_msg_header_tree, hf_cmp_msg_timestamp, tvb, offset, 8, &timestamp);
2966 subtree = proto_item_add_subtree(ti, ett_asam_cmp_timestamp);
2967 proto_tree_add_item(subtree, hf_cmp_msg_timestamp_ns, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2968 offset += 8;
2969
2970 if (tx) {
2971 /* Deadline */
2972 proto_tree_add_item(asam_cmp_data_msg_header_tree, hf_cmp_msg_deadline, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2973 offset += 4;
2974 }
2975
2976 ti = proto_tree_add_item_ret_uint(asam_cmp_data_msg_header_tree, hf_cmp_interface_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &interface_id);
2977 add_interface_id_text(ti, interface_id);
2978 offset += 4;
2979
2980 if (tx) {
2981 /* Transmission Options */
2982 // peek into msg_payload_type
2983 dissect_asam_cmp_data_msg_transmission_options(tvb_new_subset_length(tvb, offset, 4), asam_cmp_data_msg_header_tree, tvb_get_uint8(tvb, offset + 5));
2984 offset += 4;
2985
2986 proto_tree_add_bitmask(asam_cmp_data_msg_header_tree, tvb, offset, hf_cmp_msg_common_flags, ett_asam_cmp_common_flags, asam_cmp_common_flags_tx, ENC_BIG_ENDIAN0x00000000);
2987 offset += 1;
2988 } else {
2989 proto_tree_add_bitmask(asam_cmp_data_msg_header_tree, tvb, offset, hf_cmp_msg_common_flags, ett_asam_cmp_common_flags, asam_cmp_common_flags_cap, ENC_BIG_ENDIAN0x00000000);
2990 offset += 1;
2991 }
2992
2993 proto_tree_add_item_ret_uint(asam_cmp_data_msg_header_tree, hf_cmp_payload_type, tvb, offset, 1, ENC_NA0x00000000, &msg_payload_type);
2994 offset += 1;
2995
2996 proto_tree_add_item_ret_uint(asam_cmp_data_msg_header_tree, hf_cmp_msg_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &msg_payload_length);
2997 offset += 2;
2998
2999 proto_item_set_end(ti_msg_header, tvb, offset);
3000
3001 ti_msg_payload = proto_tree_add_item(tree, hf_cmp_msg_payload, tvb, offset, msg_payload_length, ENC_BIG_ENDIAN0x00000000);
3002 asam_cmp_data_msg_payload_tree = proto_item_add_subtree(ti_msg_payload, ett_asam_cmp_header);
3003 proto_item_append_text(ti_msg_payload, " %s", "- Data Message");
3004
3005 const char *msg_payload_name = try_val_to_str(msg_payload_type, data_msg_type_names);
3006 if (msg_payload_name != NULL((void*)0)) {
3007 col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", msg_payload_name);
3008 proto_item_append_text(ti_msg_payload, " (%s)", msg_payload_name);
3009 }
3010
3011 tvbuff_t *payload_tvb = tvb_new_subset_length(tvb, offset, msg_payload_length);
3012
3013 offset += dissect_asam_cmp_data_msg_payload(payload_tvb, pinfo, asam_cmp_data_msg_payload_tree, root_tree, msg_payload_type, interface_id, tx);
3014
3015 uint8_t header_len = tx ? CMP_MSG_HEADER_LEN_TX24 : CMP_MSG_HEADER_LEN16;
3016 if ((header_len + msg_payload_length) < (offset - offset_orig)) {
3017 proto_tree_add_expert(tree, pinfo, &ei_asam_cmp_length_mismatch, tvb, offset_orig + header_len, msg_payload_length);
3018 proto_item_set_end(ti_msg_payload, tvb, offset);
3019 }
3020
3021 return header_len + msg_payload_length;
3022}
3023
3024static int
3025dissect_asam_cmp_ctrl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset_orig) {
3026
3027 proto_item *ti = NULL((void*)0);
3028 proto_item *ti_msg_header = NULL((void*)0);
3029 proto_item *ti_msg_payload = NULL((void*)0);
3030 proto_tree *asam_cmp_ctrl_msg_header_tree = NULL((void*)0);
3031 proto_tree *asam_cmp_ctrl_msg_payload_tree = NULL((void*)0);
3032 proto_tree *subtree = NULL((void*)0);
3033 unsigned asam_cmp_ctrl_msg_payload_type = 0;
3034 unsigned asam_cmp_ctrl_msg_payload_length = 0;
3035 unsigned offset = offset_orig;
3036
3037 static int * const asam_cmp_common_flags[] = {
3038 &hf_cmp_common_flag_reserved_0xf0,
3039 &hf_cmp_common_flag_seg,
3040 &hf_cmp_common_flag_insync,
3041 &hf_cmp_common_flag_recal,
3042 NULL((void*)0)
3043 };
3044
3045 /* Testing for Ethernet Padding */
3046 if (tvb_get_uint8(tvb, offset + 13) == 0) {
3047 return 0;
3048 }
3049
3050 ti_msg_header = proto_tree_add_item(tree, hf_cmp_msg_header, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
3051 asam_cmp_ctrl_msg_header_tree = proto_item_add_subtree(ti_msg_header, ett_asam_cmp_header);
3052 proto_item_append_text(ti_msg_header, " %s", "- Control Message");
3053
3054 uint64_t ns = tvb_get_uint64(tvb, offset, ENC_BIG_ENDIAN0x00000000);
3055 nstime_t timestamp = { .secs = (time_t)(ns / 1000000000), .nsecs = (int)(ns % 1000000000) };
3056
3057 ti = proto_tree_add_time(asam_cmp_ctrl_msg_header_tree, hf_cmp_msg_timestamp, tvb, offset, 8, &timestamp);
3058
3059 subtree = proto_item_add_subtree(ti, ett_asam_cmp_timestamp);
3060 proto_tree_add_item(subtree, hf_cmp_msg_timestamp_ns, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
3061 offset += 8;
3062
3063 proto_tree_add_item(asam_cmp_ctrl_msg_header_tree, hf_cmp_ctrl_msg_reserved, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3064 offset += 4;
3065
3066 proto_tree_add_bitmask(asam_cmp_ctrl_msg_header_tree, tvb, offset, hf_cmp_msg_common_flags, ett_asam_cmp_common_flags, asam_cmp_common_flags, ENC_BIG_ENDIAN0x00000000);
3067 offset += 1;
3068
3069 proto_tree_add_item_ret_uint(asam_cmp_ctrl_msg_header_tree, hf_cmp_ctrl_msg_payload_type, tvb, offset, 1, ENC_NA0x00000000, &asam_cmp_ctrl_msg_payload_type);
3070 offset += 1;
3071
3072 proto_tree_add_item_ret_uint(asam_cmp_ctrl_msg_header_tree, hf_cmp_msg_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_ctrl_msg_payload_length);
3073 offset += 2;
3074
3075 proto_item_set_end(ti_msg_header, tvb, offset);
3076
3077 ti_msg_payload = proto_tree_add_item(tree, hf_cmp_msg_payload, tvb, offset, asam_cmp_ctrl_msg_payload_length, ENC_BIG_ENDIAN0x00000000);
3078 asam_cmp_ctrl_msg_payload_tree = proto_item_add_subtree(ti_msg_payload, ett_asam_cmp_header);
3079 proto_item_append_text(ti_msg_payload, " %s", "- Control Message");
3080
3081 switch (asam_cmp_ctrl_msg_payload_type) {
3082 case CMP_CTRL_MSG_INVALID0x00:
3083 col_append_str(pinfo->cinfo, COL_INFO, " (Invalid/Padding)");
3084 proto_item_append_text(ti_msg_payload, " %s", "(Invalid/Padding)");
3085 proto_item_set_end(ti_msg_payload, tvb, offset + asam_cmp_ctrl_msg_payload_length);
3086
3087 return tvb_reported_length_remaining(tvb, offset_orig);
3088
3089 case CMP_CTRL_MSG_DSR_CTRL_MSG0x01:
3090 col_append_str(pinfo->cinfo, COL_INFO, " (Data Sink Ready)");
3091 proto_item_append_text(ti_msg_payload, " %s", "(Data Sink Ready)");
3092
3093 proto_tree_add_item(asam_cmp_ctrl_msg_payload_tree, hf_cmp_ctrl_msg_device_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3094 offset += 2;
3095
3096 break;
3097
3098 case CMP_CTRL_MSG_USER_EVENT_CTRL_MSG0xFE:
3099 col_append_str(pinfo->cinfo, COL_INFO, " (User Event)");
3100 proto_item_append_text(ti_msg_payload, " %s", "(User Event)");
3101
3102 proto_tree_add_item(asam_cmp_ctrl_msg_payload_tree, hf_cmp_ctrl_msg_event_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3103 offset += 4;
3104
3105 break;
3106
3107 case CMP_CTRL_MSG_VENDOR_CTRL_MSG0xFF:
3108 col_append_str(pinfo->cinfo, COL_INFO, " (Vendor specific)");
3109 proto_item_append_text(ti_msg_payload, " %s", "(Vendor specific)");
3110
3111 proto_tree_add_item(asam_cmp_ctrl_msg_payload_tree, hf_cmp_ctrl_msg_vendor_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3112 offset += 2;
3113
3114 proto_tree_add_item(asam_cmp_ctrl_msg_payload_tree, hf_cmp_ctrl_msg_vendor_payload_type, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3115 offset += 2;
3116
3117 if (asam_cmp_ctrl_msg_payload_length > 4) {
3118 tvbuff_t *sub_tvb = tvb_new_subset_length(tvb, offset, asam_cmp_ctrl_msg_payload_length - 4);
3119 call_data_dissector(sub_tvb, pinfo, tree);
3120 offset += asam_cmp_ctrl_msg_payload_length - 4;
3121 }
3122 break;
3123
3124 default:
3125 if (asam_cmp_ctrl_msg_payload_length > 0) {
3126 offset += (int)asam_cmp_ctrl_msg_payload_length;
3127 }
3128
3129 proto_item_set_end(ti_msg_payload, tvb, offset);
3130 break;
3131 }
3132
3133 if ((CMP_MSG_HEADER_LEN16 + asam_cmp_ctrl_msg_payload_length) < (offset - offset_orig)) {
3134 proto_tree_add_expert(tree, pinfo, &ei_asam_cmp_length_mismatch, tvb, offset_orig + CMP_MSG_HEADER_LEN16, asam_cmp_ctrl_msg_payload_length);
3135 proto_item_set_end(ti_msg_payload, tvb, offset);
3136 }
3137
3138 return CMP_MSG_HEADER_LEN16 + asam_cmp_ctrl_msg_payload_length;
3139}
3140
3141/* Technica Engineering vendor data in the CM Status Message */
3142static const unit_name_string units_technica_mbit = { " Mbit", NULL((void*)0) };
3143static const unit_name_string units_technica_gbit = { " Gbit", NULL((void*)0) };
3144
3145static const true_false_string tfs_technica_buffer_overflow = {
3146 "Buffer Overflow occurred",
3147 "No Buffer Overflow occurred"
3148};
3149
3150#define CMP_TECHNICA_TEMP_LEGACY_NA(-128) (-128) /* 0x80 */
3151#define CMP_TECHNICA_TEMP_LEGACY_MAX127 127 /* 0x7f: 127 or more */
3152#define CMP_TECHNICA_VD_LEGACY_LEN10 10
3153#define CMP_TECHNICA_VD_MIN_LEN12 12
3154#define CMP_TECHNICA_VD_MEAS_LEN24 24
3155
3156static void
3157dissect_asam_cmp_status_technica_temp_legacy(tvbuff_t *tvb, proto_tree *tree, int hf, unsigned offset) {
3158 int8_t temperature = tvb_get_int8(tvb, offset);
3159
3160 if (temperature == CMP_TECHNICA_TEMP_LEGACY_NA(-128)) {
3161 proto_tree_add_int_format_value(tree, hf, tvb, offset, 1, temperature, "Not Available");
3162 } else {
3163 proto_item *ti = proto_tree_add_item(tree, hf, tvb, offset, 1, ENC_NA0x00000000);
3164 if (temperature == CMP_TECHNICA_TEMP_LEGACY_MAX127) {
3165 proto_item_append_text(ti, " or more");
3166 }
3167 }
3168}
3169
3170static void
3171dissect_asam_cmp_status_technica_float(tvbuff_t *tvb, proto_tree *tree, int hf, unsigned offset) {
3172 proto_item *ti = proto_tree_add_item(tree, hf, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3173
3174 if (isnan(tvb_get_ieee_float(tvb, offset, ENC_BIG_ENDIAN))__builtin_isnan (tvb_get_ieee_float(tvb, offset, 0x00000000))) {
3175 proto_item_append_text(ti, " (Not Available)");
3176 }
3177}
3178
3179/* Returns true, if the vendor data was dissected. */
3180static bool_Bool
3181dissect_asam_cmp_status_vendor_data_technica(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset_orig, unsigned length) {
3182 static int * const meas_flags[] = {
3183 &hf_cmp_status_technica_meas_flag_res,
3184 &hf_cmp_status_technica_meas_flag_ovfl,
3185 NULL((void*)0)
3186 };
3187
3188 unsigned offset = offset_orig;
3189 unsigned end = offset_orig + length;
3190 proto_item *ti;
3191 proto_tree *vd_tree;
3192
3193 if (length != CMP_TECHNICA_VD_LEGACY_LEN10 && length < CMP_TECHNICA_VD_MIN_LEN12) {
3194 return false0;
3195 }
3196
3197 if (length == CMP_TECHNICA_VD_LEGACY_LEN10) {
3198 unsigned volt_int;
3199 unsigned volt_frac;
3200
3201 ti = proto_tree_add_bytes_format_value(tree, hf_cmp_status_vendor_data, tvb, offset, length, NULL((void*)0), "Technica Engineering, Legacy");
3202 vd_tree = proto_item_add_subtree(ti, ett_asam_cmp_status_technica);
3203
3204 ti = proto_tree_add_item(vd_tree, hf_cmp_status_technica_leg_fill_level, tvb, offset, 1, ENC_NA0x00000000);
3205 proto_item_append_text(ti, "%%");
3206 offset += 1;
3207
3208 proto_tree_add_item(vd_tree, hf_cmp_status_technica_leg_overflow, tvb, offset, 1, ENC_NA0x00000000);
3209 offset += 1;
3210
3211 proto_tree_add_item(vd_tree, hf_cmp_status_technica_leg_buf_s_gbit, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3212 offset += 4;
3213
3214 proto_tree_add_item_ret_uint(vd_tree, hf_cmp_status_technica_leg_voltage_int, tvb, offset, 1, ENC_NA0x00000000, &volt_int);
3215 proto_tree_add_item_ret_uint(vd_tree, hf_cmp_status_technica_leg_voltage_frac, tvb, offset + 1, 1, ENC_NA0x00000000, &volt_frac);
3216 ti = proto_tree_add_double(vd_tree, hf_cmp_status_technica_leg_voltage, tvb, offset, 2, (double)volt_int + volt_frac / 100.0);
3217 proto_item_set_generated(ti);
3218 offset += 2;
3219
3220 dissect_asam_cmp_status_technica_temp_legacy(tvb, vd_tree, hf_cmp_status_technica_leg_temp_chassis, offset);
3221 offset += 1;
3222
3223 dissect_asam_cmp_status_technica_temp_legacy(tvb, vd_tree, hf_cmp_status_technica_leg_temp_silicon, offset);
3224 return true1;
3225 }
3226
3227 uint32_t meas_size;
3228 uint32_t props_size;
3229
3230 if (tvb_get_uint8(tvb, offset) != 1) {
3231 /* unknown major version, we do not know the layout */
3232 return false0;
3233 }
3234
3235 ti = proto_tree_add_bytes_format_value(tree, hf_cmp_status_vendor_data, tvb, offset, length, NULL((void*)0), "Technica Engineering");
3236 vd_tree = proto_item_add_subtree(ti, ett_asam_cmp_status_technica);
3237
3238 proto_tree_add_item(vd_tree, hf_cmp_status_technica_major, tvb, offset, 1, ENC_NA0x00000000);
3239 offset += 1;
3240 proto_tree_add_item(vd_tree, hf_cmp_status_technica_minor, tvb, offset, 1, ENC_NA0x00000000);
3241 offset += 1;
3242 proto_tree_add_item(vd_tree, hf_cmp_status_technica_product_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3243 offset += 2;
3244
3245 proto_tree_add_item(vd_tree, hf_cmp_status_technica_reserved, tvb, offset, 2, ENC_NA0x00000000);
3246 offset += 2;
3247
3248 proto_tree_add_item_ret_uint(vd_tree, hf_cmp_status_technica_meas_size, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &meas_size);
3249 offset += 2;
3250
3251 /* measurements data, reserved (2) and properties size (2) must follow */
3252 if (meas_size > end - offset || end - offset - meas_size < 4) {
3253 proto_tree_add_expert(vd_tree, pinfo, &ei_asam_cmp_length_mismatch, tvb, offset, end - offset);
3254 return true1;
3255 }
3256
3257 if (meas_size > 0) {
3258 unsigned meas_end = offset + meas_size;
3259 proto_tree *meas_tree;
3260
3261 ti = proto_tree_add_item(vd_tree, hf_cmp_status_technica_meas, tvb, offset, meas_size, ENC_NA0x00000000);
3262 meas_tree = proto_item_add_subtree(ti, ett_asam_cmp_status_technica_meas);
3263
3264 if (meas_size >= CMP_TECHNICA_VD_MEAS_LEN24) {
3265 proto_tree_add_bitmask(meas_tree, tvb, offset, hf_cmp_status_technica_meas_flags, ett_asam_cmp_status_technica_flags, meas_flags, ENC_NA0x00000000);
3266 offset += 1;
3267
3268 ti = proto_tree_add_item(meas_tree, hf_cmp_status_technica_fill_level, tvb, offset, 1, ENC_NA0x00000000);
3269 proto_item_append_text(ti, "%%");
3270 offset += 1;
3271
3272 proto_tree_add_item(meas_tree, hf_cmp_status_technica_reserved, tvb, offset, 2, ENC_NA0x00000000);
3273 offset += 2;
3274
3275 proto_tree_add_item(meas_tree, hf_cmp_status_technica_buffer_size_mbit, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3276 offset += 4;
3277
3278 dissect_asam_cmp_status_technica_float(tvb, meas_tree, hf_cmp_status_technica_voltage, offset);
3279 offset += 4;
3280
3281 proto_tree_add_item(meas_tree, hf_cmp_status_technica_reserved, tvb, offset, 4, ENC_NA0x00000000);
3282 offset += 4;
3283
3284 dissect_asam_cmp_status_technica_float(tvb, meas_tree, hf_cmp_status_technica_temp_chassis, offset);
3285 offset += 4;
3286
3287 dissect_asam_cmp_status_technica_float(tvb, meas_tree, hf_cmp_status_technica_temp_silicon, offset);
3288 offset += 4;
Value stored to 'offset' is never read
3289 }
3290 /* skip fields we do not know (newer minor versions) or a too short structure */
3291 offset = meas_end;
3292 }
3293
3294 proto_tree_add_item(vd_tree, hf_cmp_status_technica_reserved, tvb, offset, 2, ENC_NA0x00000000);
3295 offset += 2;
3296
3297 proto_tree_add_item_ret_uint(vd_tree, hf_cmp_status_technica_props_size, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &props_size);
3298 offset += 2;
3299
3300 if (props_size > end - offset) {
3301 proto_tree_add_expert(vd_tree, pinfo, &ei_asam_cmp_length_mismatch, tvb, offset, end - offset);
3302 return true1;
3303 }
3304
3305 if (props_size > 0) {
3306 unsigned props_end = offset + props_size;
3307 proto_tree *props_tree;
3308
3309 ti = proto_tree_add_item(vd_tree, hf_cmp_status_technica_props, tvb, offset, props_size, ENC_NA0x00000000);
3310 props_tree = proto_item_add_subtree(ti, ett_asam_cmp_status_technica_props);
3311
3312 while (offset < props_end) {
3313 unsigned nl_offset;
3314 bool_Bool found = tvb_find_uint8_length(tvb, offset, props_end - offset, '\n', &nl_offset);
3315 unsigned line_len = nl_offset - offset;
3316
3317 if (line_len > 0) {
3318 proto_tree_add_item(props_tree, hf_cmp_status_technica_prop, tvb, offset, line_len, ENC_UTF_80x00000002);
3319 }
3320 offset += line_len + (found ? 1 : 0);
3321 }
3322 }
3323
3324 return true1;
3325}
3326
3327static int
3328dissect_asam_cmp_status_interface_support_mask(tvbuff_t *tvb, proto_tree *tree, unsigned offset_orig, uint8_t interface_type) {
3329 unsigned offset = offset_orig;
3330 uint64_t temp = 0;
3331
3332 static int *const can_feature_support[] = {
3333 &hf_cmp_iface_feat_can_gen_err,
3334 &hf_cmp_iface_feat_can_srr_dom,
3335 &hf_cmp_iface_feat_can_r0,
3336 &hf_cmp_iface_feat_can_bit_err,
3337 &hf_cmp_iface_feat_can_eof_err,
3338 &hf_cmp_iface_feat_can_crc_del_err,
3339 &hf_cmp_iface_feat_can_stuff_err,
3340 &hf_cmp_iface_feat_can_form_err,
3341 &hf_cmp_iface_feat_can_ack_del_err,
3342 &hf_cmp_iface_feat_can_act_ack,
3343 &hf_cmp_iface_feat_can_pas_ack,
3344 &hf_cmp_iface_feat_can_ack_err,
3345 &hf_cmp_iface_feat_can_crr_err,
3346 NULL((void*)0)
3347 };
3348
3349 static int *const canfd_feature_support[] = {
3350 &hf_cmp_iface_feat_canfd_gen_err,
3351 &hf_cmp_iface_feat_canfd_esi,
3352 &hf_cmp_iface_feat_canfd_brs,
3353 &hf_cmp_iface_feat_canfd_srr_dom,
3354 &hf_cmp_iface_feat_canfd_rsvd,
3355 &hf_cmp_iface_feat_canfd_bit_err,
3356 &hf_cmp_iface_feat_canfd_eof_err,
3357 &hf_cmp_iface_feat_canfd_crc_del_err,
3358 &hf_cmp_iface_feat_canfd_stuff_err,
3359 &hf_cmp_iface_feat_canfd_form_err,
3360 &hf_cmp_iface_feat_canfd_ack_del_err,
3361 &hf_cmp_iface_feat_canfd_act_ack,
3362 &hf_cmp_iface_feat_canfd_pas_ack,
3363 &hf_cmp_iface_feat_canfd_ack_err,
3364 &hf_cmp_iface_feat_canfd_crr_err,
3365 NULL((void*)0)
3366 };
3367
3368 static int *const lin_feature_support[] = {
3369 &hf_cmp_iface_feat_lin_wup,
3370 &hf_cmp_iface_feat_lin_long_dom_err,
3371 &hf_cmp_iface_feat_lin_short_dom_err,
3372 &hf_cmp_iface_feat_lin_framing_err,
3373 &hf_cmp_iface_feat_lin_sync_err,
3374 &hf_cmp_iface_feat_lin_no_slave_resp_err,
3375 &hf_cmp_iface_feat_lin_parity_err,
3376 &hf_cmp_iface_feat_lin_coll_err,
3377 &hf_cmp_iface_feat_lin_checksum_err,
3378 NULL((void*)0)
3379 };
3380
3381 static int *const flexray_feature_support[] = {
3382 &hf_cmp_iface_feat_fr_channel,
3383 &hf_cmp_iface_feat_fr_cas,
3384 &hf_cmp_iface_feat_fr_ppi,
3385 &hf_cmp_iface_feat_fr_wus,
3386 &hf_cmp_iface_feat_fr_sync,
3387 &hf_cmp_iface_feat_fr_sf,
3388 &hf_cmp_iface_feat_fr_nf,
3389 &hf_cmp_iface_feat_fr_crc_header_err,
3390 &hf_cmp_iface_feat_fr_crc_frame_err,
3391 NULL((void*)0)
3392 };
3393
3394 static int *const eth_feature_support[] = {
3395 &hf_cmp_iface_feat_eth_fcs,
3396 &hf_cmp_iface_feat_eth_trunc,
3397 &hf_cmp_iface_feat_eth_phy_err,
3398 &hf_cmp_iface_feat_eth_too_long,
3399 &hf_cmp_iface_feat_eth_collision,
3400 &hf_cmp_iface_feat_eth_tx_port_down,
3401 &hf_cmp_iface_feat_eth_too_short,
3402 &hf_cmp_iface_feat_eth_fcs_err,
3403 NULL((void*)0)
3404 };
3405
3406 static int *const eth_10baset1s_feature_support[] = {
3407 &hf_cmp_iface_feat_10t1s_first_beacon,
3408 &hf_cmp_iface_feat_10t1s_mis_beacon,
3409 &hf_cmp_iface_feat_10t1s_sym_decode,
3410 NULL((void*)0)
3411 };
3412
3413 static int *const link_state_feature_support[] = {
3414 &hf_cmp_iface_feat_link_err,
3415 NULL((void*)0)
3416 };
3417
3418 switch (interface_type) {
3419 case CMP_DATA_MSG_CAN0x01:
3420 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, can_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3421 break;
3422
3423 case CMP_DATA_MSG_CANFD0x02:
3424 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, canfd_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3425 break;
3426
3427 case CMP_DATA_MSG_LIN0x03:
3428 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, lin_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3429 break;
3430
3431 case CMP_DATA_MSG_FLEXRAY0x04:
3432 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, flexray_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3433 break;
3434
3435 case CMP_DATA_MSG_ETHERNET0x08:
3436 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, eth_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3437 break;
3438
3439 case CMP_DATA_MSG_RAW_ETHERNET0x0D:
3440 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, eth_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3441 break;
3442
3443 case CMP_DATA_MSG_10BASE_T1S_SYMBOL0x0E:
3444 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, eth_10baset1s_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3445 break;
3446
3447 case CMP_DATA_MSG_LINK_STATE0xFE:
3448 proto_tree_add_bitmask_ret_uint64(tree, tvb, offset, hf_cmp_iface_feat, ett_asam_cmp_status_feature_support, link_state_feature_support, ENC_BIG_ENDIAN0x00000000, &temp);
3449 break;
3450
3451 default:
3452 proto_tree_add_item(tree, hf_cmp_iface_feat, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3453 }
3454
3455 offset += 4;
3456
3457 return offset - offset_orig;
3458}
3459
3460static int
3461dissect_asam_cmp_status_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset_orig) {
3462 proto_item *ti = NULL((void*)0);
3463 proto_item *ti_msg_header = NULL((void*)0);
3464 proto_item *ti_msg_payload = NULL((void*)0);
3465 proto_item *ti_interface = NULL((void*)0);
3466 proto_item *ti_stream_ids = NULL((void*)0);
3467 proto_tree *asam_cmp_status_msg_header_tree = NULL((void*)0);
3468 proto_tree *asam_cmp_status_msg_payload_tree = NULL((void*)0);
3469 proto_tree *subtree = NULL((void*)0);
3470 proto_tree *stream_ids_subtree = NULL((void*)0);
3471 unsigned offset = offset_orig;
3472
3473 unsigned asam_cmp_status_msg_payload_type = 0;
3474 unsigned asam_cmp_status_msg_payload_length = 0;
3475 unsigned asam_cmp_status_msg_cm_dev_desc_length = 0;
3476 unsigned asam_cmp_status_msg_cm_sn_length = 0;
3477 unsigned asam_cmp_status_msg_cm_hw_ver_length = 0;
3478 unsigned asam_cmp_status_msg_cm_sw_ver_length = 0;
3479 unsigned asam_cmp_status_msg_vendor_data_length = 0;
3480 unsigned asam_cmp_status_msg_vendor_id = 0;
3481 unsigned asam_cmp_status_msg_iface_stream_id_count = 0;
3482 uint64_t uptime = 0;
3483 const char *descr = NULL((void*)0);
3484
3485 static int * const asam_cmp_common_flags[] = {
3486 &hf_cmp_common_flag_reserved_0xf0,
3487 &hf_cmp_common_flag_seg,
3488 &hf_cmp_common_flag_insync,
3489 &hf_cmp_common_flag_recal,
3490 NULL((void*)0)
3491 };
3492
3493 static int * const asam_cmp_status_cm_flags[] = {
3494 &hf_cmp_gptp_flags_reserved,
3495 &hf_cmp_gptp_flags_freq_traceable,
3496 &hf_cmp_gptp_flags_time_traceable,
3497 &hf_cmp_gptp_flags_ptp_timescale,
3498 &hf_cmp_gptp_flags_cur_utco_valid,
3499 &hf_cmp_gptp_flags_leap59,
3500 &hf_cmp_gptp_flags_leap61,
3501 NULL((void*)0)
3502 };
3503
3504 static int * const asam_cmp_status_timeloss_error_flags[] = {
3505 &hf_cmp_timeloss_error_flags_reserved,
3506 &hf_cmp_timeloss_error_flags_delta,
3507 &hf_cmp_timeloss_error_flags_insync,
3508 &hf_cmp_timeloss_error_flags_ts,
3509 NULL((void*)0)
3510 };
3511
3512 /* Testing for Ethernet Padding */
3513 if (tvb_get_uint8(tvb, offset + 13) == 0) {
3514 return 0;
3515 }
3516
3517 ti_msg_header = proto_tree_add_item(tree, hf_cmp_msg_header, tvb, offset, 16, ENC_BIG_ENDIAN0x00000000);
3518 asam_cmp_status_msg_header_tree = proto_item_add_subtree(ti_msg_header, ett_asam_cmp_header);
3519 proto_item_append_text(ti_msg_header, " %s", "- Status Message");
3520
3521 uint64_t ns = tvb_get_uint64(tvb, offset, ENC_BIG_ENDIAN0x00000000);
3522 nstime_t timestamp = { .secs = (time_t)(ns / 1000000000), .nsecs = (int)(ns % 1000000000) };
3523
3524 ti = proto_tree_add_time(asam_cmp_status_msg_header_tree, hf_cmp_msg_timestamp, tvb, offset, 8, &timestamp);
3525 subtree = proto_item_add_subtree(ti, ett_asam_cmp_timestamp);
3526 proto_tree_add_item(subtree, hf_cmp_msg_timestamp_ns, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
3527 offset += 8;
3528
3529 proto_tree_add_item(asam_cmp_status_msg_header_tree, hf_cmp_msg_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3530 offset += 2;
3531
3532 proto_tree_add_item_ret_uint(asam_cmp_status_msg_header_tree, hf_cmp_msg_vendor_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_vendor_id);
3533 offset += 2;
3534
3535 proto_tree_add_bitmask(asam_cmp_status_msg_header_tree, tvb, offset, hf_cmp_msg_common_flags, ett_asam_cmp_common_flags, asam_cmp_common_flags, ENC_BIG_ENDIAN0x00000000);
3536 offset += 1;
3537
3538 proto_tree_add_item_ret_uint(asam_cmp_status_msg_header_tree, hf_cmp_status_msg_payload_type, tvb, offset, 1, ENC_NA0x00000000, &asam_cmp_status_msg_payload_type);
3539 offset += 1;
3540
3541 proto_tree_add_item_ret_uint(asam_cmp_status_msg_header_tree, hf_cmp_msg_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_payload_length);
3542 offset += 2;
3543
3544 proto_item_set_end(ti_msg_header, tvb, offset);
3545
3546 ti_msg_payload = proto_tree_add_item(tree, hf_cmp_msg_payload, tvb, offset, asam_cmp_status_msg_payload_length, ENC_BIG_ENDIAN0x00000000);
3547 asam_cmp_status_msg_payload_tree = proto_item_add_subtree(ti_msg_payload, ett_asam_cmp_header);
3548 proto_item_append_text(ti_msg_payload, " %s", "- Status Message");
3549
3550 switch (asam_cmp_status_msg_payload_type) {
3551 case CMP_STATUS_MSG_INVALID0x00:
3552 col_append_str(pinfo->cinfo, COL_INFO, " (Invalid/Padding)");
3553 proto_item_append_text(ti_msg_payload, " %s", "(Invalid/Padding)");
3554 proto_item_set_end(ti_msg_payload, tvb, offset + asam_cmp_status_msg_payload_length);
3555
3556 return tvb_reported_length_remaining(tvb, offset_orig);
3557
3558 case CMP_STATUS_MSG_CM_STAT_MSG0x01:
3559 col_append_str(pinfo->cinfo, COL_INFO, " (CM)");
3560 proto_item_append_text(ti_msg_payload, " %s", "(CM)");
3561
3562 ti = proto_tree_add_item_ret_uint64(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_cm_uptime_ns, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000, &uptime);
3563
3564 subtree = proto_item_add_subtree(ti, ett_asam_cmp_status_cm_uptime);
3565 proto_tree_add_uint64(subtree, hf_cmp_status_msg_cm_uptime_s, tvb, offset, 8, uptime / 1000000000);
3566 offset += 8;
3567
3568 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_gm_identity, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
3569 offset += 8;
3570
3571 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_gm_clock_quality, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3572 offset += 4;
3573
3574 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_current_utc_offset, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3575 offset += 2;
3576
3577 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_time_source, tvb, offset, 1, ENC_NA0x00000000);
3578 offset += 1;
3579
3580 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_domain_num, tvb, offset, 1, ENC_NA0x00000000);
3581 offset += 1;
3582
3583 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_res, tvb, offset, 1, ENC_NA0x00000000);
3584 offset += 1;
3585
3586 proto_tree_add_bitmask(asam_cmp_status_msg_payload_tree, tvb, offset, hf_cmp_gptp_flags, ett_asam_cmp_status_cm_flags, asam_cmp_status_cm_flags, ENC_BIG_ENDIAN0x00000000);
3587 offset += 1;
3588
3589 proto_tree_add_item_ret_uint(asam_cmp_status_msg_payload_tree, hf_cmp_status_dev_desc_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_cm_dev_desc_length);
3590 offset += 2;
3591
3592 if (asam_cmp_status_msg_cm_dev_desc_length > 0) {
3593 asam_cmp_status_msg_cm_dev_desc_length += (asam_cmp_status_msg_cm_dev_desc_length % 2); /* padding to 16bit */
3594 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_dev_desc, tvb, offset, asam_cmp_status_msg_cm_dev_desc_length, ENC_UTF_80x00000002);
3595 offset += (int)asam_cmp_status_msg_cm_dev_desc_length;
3596 }
3597
3598 proto_tree_add_item_ret_uint(asam_cmp_status_msg_payload_tree, hf_cmp_status_sn_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_cm_sn_length);
3599 offset += 2;
3600
3601 if (asam_cmp_status_msg_cm_sn_length > 0) {
3602 asam_cmp_status_msg_cm_sn_length += (asam_cmp_status_msg_cm_sn_length % 2); /* padding to 16bit */
3603 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_sn, tvb, offset, asam_cmp_status_msg_cm_sn_length, ENC_UTF_80x00000002);
3604 offset += (int)asam_cmp_status_msg_cm_sn_length;
3605 }
3606
3607 proto_tree_add_item_ret_uint(asam_cmp_status_msg_payload_tree, hf_cmp_status_hw_ver_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_cm_hw_ver_length);
3608 offset += 2;
3609
3610 if (asam_cmp_status_msg_cm_hw_ver_length > 0) {
3611 asam_cmp_status_msg_cm_hw_ver_length += (asam_cmp_status_msg_cm_hw_ver_length % 2); /* padding to 16bit */
3612 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_hw_ver, tvb, offset, asam_cmp_status_msg_cm_hw_ver_length, ENC_UTF_80x00000002);
3613 offset += (int)asam_cmp_status_msg_cm_hw_ver_length;
3614 }
3615
3616 proto_tree_add_item_ret_uint(asam_cmp_status_msg_payload_tree, hf_cmp_status_sw_ver_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_cm_sw_ver_length);
3617 offset += 2;
3618
3619 if (asam_cmp_status_msg_cm_sw_ver_length > 0) {
3620 asam_cmp_status_msg_cm_sw_ver_length += (asam_cmp_status_msg_cm_sw_ver_length % 2); /* padding to 16bit */
3621 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_sw_ver, tvb, offset, asam_cmp_status_msg_cm_sw_ver_length, ENC_UTF_80x00000002);
3622 offset += (int)asam_cmp_status_msg_cm_sw_ver_length;
3623 }
3624
3625 proto_tree_add_item_ret_uint(asam_cmp_status_msg_payload_tree, hf_cmp_status_vendor_data_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_vendor_data_length);
3626 offset += 2;
3627
3628 if (asam_cmp_status_msg_vendor_data_length > 0) {
3629 if (asam_cmp_status_msg_vendor_id != CMP_VENDOR_TECHNICA0x019c ||
3630 offset + asam_cmp_status_msg_vendor_data_length > tvb_captured_length(tvb) ||
3631 !dissect_asam_cmp_status_vendor_data_technica(tvb, pinfo, asam_cmp_status_msg_payload_tree, offset, asam_cmp_status_msg_vendor_data_length)) {
3632 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_vendor_data, tvb, offset, asam_cmp_status_msg_vendor_data_length, ENC_NA0x00000000);
3633 }
3634 offset += (int)asam_cmp_status_msg_vendor_data_length;
3635 }
3636 break;
3637
3638 case CMP_STATUS_MSG_IF_STAT_MSG0x02:
3639 col_append_str(pinfo->cinfo, COL_INFO, " (Interface)");
3640 proto_item_append_text(ti_msg_payload, " %s", "(Interface)");
3641
3642 /* each entry is 40 bytes, header is 16 bytes */
3643 while (tvb_reported_length_remaining(tvb, offset) >= 40 && offset - offset_orig + 40 <= 16 + asam_cmp_status_msg_payload_length) {
3644 uint32_t ifaceid;
3645 uint32_t ifacetype;
3646
3647 ti_interface = proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_iface_interface, tvb, offset, 34, ENC_NA0x00000000);
3648 subtree = proto_item_add_subtree(ti_interface, ett_asam_cmp_status_interface);
3649
3650 ti = proto_tree_add_item_ret_uint(subtree, hf_cmp_iface_iface_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &ifaceid);
3651 descr = ht_interface_config_to_string(ifaceid);
3652 if (descr != NULL((void*)0)) {
3653 proto_item_append_text(ti, " (%s)", descr);
3654 }
3655 offset += 4;
3656
3657 proto_tree_add_item(subtree, hf_cmp_iface_msg_total_rx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3658 offset += 4;
3659
3660 proto_tree_add_item(subtree, hf_cmp_iface_msg_total_tx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3661 offset += 4;
3662
3663 proto_tree_add_item(subtree, hf_cmp_iface_msg_dropped_rx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3664 offset += 4;
3665
3666 proto_tree_add_item(subtree, hf_cmp_iface_msg_dropped_tx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3667 offset += 4;
3668
3669 proto_tree_add_item(subtree, hf_cmp_iface_errs_total_rx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3670 offset += 4;
3671
3672 proto_tree_add_item(subtree, hf_cmp_iface_errs_total_tx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3673 offset += 4;
3674
3675 proto_tree_add_item_ret_uint(subtree, hf_cmp_iface_iface_type, tvb, offset, 1, ENC_NA0x00000000, &ifacetype);
3676 offset += 1;
3677
3678 if (descr != NULL((void*)0)) {
3679 proto_item_append_text(ti_interface, " %s, Type: %s", descr, val_to_str(pinfo->pool, ifacetype, data_msg_type_names, "Unknown (0x%x)"));
3680 } else {
3681 proto_item_append_text(ti_interface, " 0x%x, Type: %s", ifaceid, val_to_str(pinfo->pool, ifacetype, data_msg_type_names, "Unknown (0x%x)"));
3682 }
3683
3684 proto_tree_add_item(subtree, hf_cmp_iface_iface_status, tvb, offset, 1, ENC_NA0x00000000);
3685 offset += 1;
3686
3687 proto_tree_add_item(subtree, hf_cmp_iface_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3688 offset += 2;
3689
3690 offset += dissect_asam_cmp_status_interface_support_mask(tvb, subtree, offset, (uint8_t)ifacetype);
3691
3692 proto_tree_add_item_ret_uint(subtree, hf_cmp_iface_stream_id_cnt, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_iface_stream_id_count);
3693 offset += 2;
3694
3695 if (asam_cmp_status_msg_iface_stream_id_count > 0) {
3696 ti_stream_ids = proto_tree_add_item(subtree, hf_cmp_iface_stream_ids, tvb, offset, asam_cmp_status_msg_iface_stream_id_count, ENC_NA0x00000000);
3697 stream_ids_subtree = proto_item_add_subtree(ti_stream_ids, ett_asam_cmp_status_stream_ids);
3698
3699 for (unsigned i = 0; i < asam_cmp_status_msg_iface_stream_id_count; i++) {
3700 proto_tree_add_item(stream_ids_subtree, hf_cmp_iface_stream_id, tvb, offset, 1, ENC_NA0x00000000);
3701 offset += 1;
3702 }
3703 offset += (asam_cmp_status_msg_iface_stream_id_count % 2); /* padding to 16bit */
3704 }
3705
3706 proto_tree_add_item_ret_uint(subtree, hf_cmp_iface_vendor_data_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_status_msg_vendor_data_length);
3707 offset += 2;
3708
3709 if (asam_cmp_status_msg_vendor_data_length > 0) {
3710 proto_tree_add_item(subtree, hf_cmp_iface_vendor_data, tvb, offset, asam_cmp_status_msg_vendor_data_length, ENC_NA0x00000000);
3711 offset += (int)asam_cmp_status_msg_vendor_data_length;
3712 }
3713
3714 proto_item_set_end(ti_interface, tvb, offset);
3715 }
3716 break;
3717
3718 case CMP_STATUS_MSG_CONF_STAT_MSG0x03:
3719 col_append_str(pinfo->cinfo, COL_INFO, " (Configuration)");
3720 proto_item_append_text(ti_msg_payload, " %s", "(Configuration)");
3721
3722 if (asam_cmp_status_msg_payload_length > 0) {
3723 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_config, tvb, offset, asam_cmp_status_msg_payload_length, ENC_NA0x00000000);
3724 offset += (int)asam_cmp_status_msg_payload_length;
3725 }
3726 break;
3727
3728 case CMP_STATUS_MSG_DLE_STAT_MSG0x04:
3729 col_append_str(pinfo->cinfo, COL_INFO, " (Data Lost Event)");
3730 proto_item_append_text(ti_msg_payload, " %s", "(Data Lost Event)");
3731
3732 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_dataloss_data_sink_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3733 offset += 2;
3734
3735 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_dataloss_device_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3736 offset += 2;
3737
3738 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_dataloss_reserved, tvb, offset, 1, ENC_NA0x00000000);
3739 offset += 1;
3740
3741 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_dataloss_stream_id, tvb, offset, 1, ENC_NA0x00000000);
3742 offset += 1;
3743
3744 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_dataloss_last_ssq_value, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3745 offset += 2;
3746
3747 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_dataloss_current_ssq_value, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3748 offset += 2;
3749 break;
3750
3751 case CMP_STATUS_MSG_TSLE_STAT_MSG0x05:
3752 col_append_str(pinfo->cinfo, COL_INFO, " (Time Sync Lost Event)");
3753 proto_item_append_text(ti_msg_payload, " %s", "(Time Sync Lost Event)");
3754
3755 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_timeloss_port_nr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3756 offset += 2;
3757
3758 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_timeloss_device_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3759 offset += 2;
3760
3761 proto_tree_add_bitmask(asam_cmp_status_msg_payload_tree, tvb, offset, hf_cmp_timeloss_error_flags, ett_asam_cmp_status_timeloss_flags, asam_cmp_status_timeloss_error_flags, ENC_BIG_ENDIAN0x00000000);
3762 offset += 1;
3763 break;
3764
3765 case CMP_STATUS_MSG_VENDOR_STAT_MSG0xFF:
3766 col_append_str(pinfo->cinfo, COL_INFO, " (Vendor specific)");
3767 proto_item_append_text(ti_msg_payload, " %s", "(Vendor specific)");
3768
3769 if (asam_cmp_status_msg_payload_length > 0) {
3770 proto_tree_add_item(asam_cmp_status_msg_payload_tree, hf_cmp_status_msg_vendor_specific, tvb, offset, asam_cmp_status_msg_payload_length, ENC_NA0x00000000);
3771 offset += (int)asam_cmp_status_msg_payload_length;
3772 }
3773 break;
3774
3775 default:
3776 if (asam_cmp_status_msg_payload_length > 0) {
3777 offset += (int)asam_cmp_status_msg_payload_length;
3778 }
3779
3780 proto_item_set_end(ti_msg_payload, tvb, offset);
3781 break;
3782 }
3783
3784 if ((CMP_MSG_HEADER_LEN16 + asam_cmp_status_msg_payload_length) < (offset - offset_orig)) {
3785 proto_tree_add_expert(tree, pinfo, &ei_asam_cmp_length_mismatch, tvb, offset_orig + CMP_MSG_HEADER_LEN16, asam_cmp_status_msg_payload_length);
3786 proto_item_set_end(ti_msg_payload, tvb, offset);
3787 }
3788
3789 return CMP_MSG_HEADER_LEN16 + asam_cmp_status_msg_payload_length;
3790}
3791
3792static int
3793dissect_asam_cmp_vendor_msg(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, unsigned offset_orig) {
3794 proto_item *ti = NULL((void*)0);
3795 proto_item *ti_msg_header = NULL((void*)0);
3796 proto_item *ti_msg_payload = NULL((void*)0);
3797 proto_tree *asam_cmp_vendor_msg_header_tree = NULL((void*)0);
3798 proto_tree *subtree = NULL((void*)0);
3799 unsigned asam_cmp_vendor_msg_payload_type = 0;
3800 unsigned asam_cmp_vendor_msg_payload_length = 0;
3801 unsigned offset = offset_orig;
3802
3803 static int * const asam_cmp_common_flags[] = {
3804 &hf_cmp_common_flag_reserved_0xf0,
3805 &hf_cmp_common_flag_seg,
3806 &hf_cmp_common_flag_insync,
3807 &hf_cmp_common_flag_recal,
3808 NULL((void*)0)
3809 };
3810
3811 ti_msg_header = proto_tree_add_item(tree, hf_cmp_msg_header, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
3812 asam_cmp_vendor_msg_header_tree = proto_item_add_subtree(ti_msg_header, ett_asam_cmp_header);
3813 proto_item_append_text(ti_msg_header, " %s", "- Vendor-Defined Message");
3814
3815 uint64_t ns = tvb_get_uint64(tvb, offset, ENC_BIG_ENDIAN0x00000000);
3816 nstime_t timestamp = { .secs = (time_t)(ns / 1000000000), .nsecs = (int)(ns % 1000000000) };
3817
3818 ti = proto_tree_add_time(asam_cmp_vendor_msg_header_tree, hf_cmp_msg_timestamp, tvb, offset, 8, &timestamp);
3819
3820 subtree = proto_item_add_subtree(ti, ett_asam_cmp_timestamp);
3821 proto_tree_add_item(subtree, hf_cmp_msg_timestamp_ns, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
3822 offset += 8;
3823
3824 proto_tree_add_item(asam_cmp_vendor_msg_header_tree, hf_cmp_msg_reserved, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3825 offset += 2;
3826
3827 proto_tree_add_item(asam_cmp_vendor_msg_header_tree, hf_cmp_msg_vendor_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3828 offset += 2;
3829
3830 proto_tree_add_bitmask(asam_cmp_vendor_msg_header_tree, tvb, offset, hf_cmp_msg_common_flags, ett_asam_cmp_common_flags, asam_cmp_common_flags, ENC_BIG_ENDIAN0x00000000);
3831 offset += 1;
3832
3833 proto_tree_add_item_ret_uint(asam_cmp_vendor_msg_header_tree, hf_cmp_vendor_msg_payload_type, tvb, offset, 1, ENC_NA0x00000000, &asam_cmp_vendor_msg_payload_type);
3834 offset += 1;
3835
3836 proto_tree_add_item_ret_uint(asam_cmp_vendor_msg_header_tree, hf_cmp_msg_payload_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &asam_cmp_vendor_msg_payload_length);
3837 offset += 2;
3838
3839 proto_item_set_end(ti_msg_header, tvb, offset);
3840
3841 ti_msg_payload = proto_tree_add_item(tree, hf_cmp_msg_payload, tvb, offset, asam_cmp_vendor_msg_payload_length, ENC_BIG_ENDIAN0x00000000);
3842 proto_item_append_text(ti_msg_payload, " %s", "- Vendor-Defined Message");
3843
3844 if (asam_cmp_vendor_msg_payload_length > 0) {
3845 offset += (int)asam_cmp_vendor_msg_payload_length;
3846 proto_item_set_end(ti_msg_payload, tvb, offset);
3847 }
3848
3849 return CMP_MSG_HEADER_LEN16 + asam_cmp_vendor_msg_payload_length;
3850}
3851
3852static int
3853dissect_asam_cmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused))) {
3854 proto_item *ti_root = NULL((void*)0);
3855 proto_item *ti_header = NULL((void*)0);
3856 proto_item *ti = NULL((void*)0);
3857 proto_tree *asam_cmp_tree = NULL((void*)0);
3858 proto_tree *asam_cmp_header_tree = NULL((void*)0);
3859 unsigned msg_type = 0;
3860 unsigned device_id = 0;
3861 unsigned offset = 0;
3862
3863 col_clear(pinfo->cinfo, COL_INFO);
3864 col_set_str(pinfo->cinfo, COL_INFO, "ASAM-CMP");
3865 col_set_str(pinfo->cinfo, COL_PROTOCOL, "ASAM-CMP");
3866
3867 ti_root = proto_tree_add_item(tree, proto_asam_cmp, tvb, 0, -1, ENC_NA0x00000000);
3868 asam_cmp_tree = proto_item_add_subtree(ti_root, ett_asam_cmp);
3869
3870 ti_header = proto_tree_add_item(asam_cmp_tree, hf_cmp_header, tvb, offset, CMP_HEADER_LEN8, ENC_BIG_ENDIAN0x00000000);
3871 asam_cmp_header_tree = proto_item_add_subtree(ti_header, ett_asam_cmp_header);
3872
3873 proto_tree_add_item(asam_cmp_header_tree, hf_cmp_version, tvb, offset, 1, ENC_NA0x00000000);
3874 offset += 1;
3875
3876 proto_tree_add_item(asam_cmp_header_tree, hf_cmp_header_res, tvb, offset, 1, ENC_NA0x00000000);
3877 offset += 1;
3878
3879 ti = proto_tree_add_item_ret_uint(asam_cmp_header_tree, hf_cmp_device_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &device_id);
3880 add_device_id_text(ti, (uint16_t)device_id);
3881 offset += 2;
3882
3883 proto_tree_add_item_ret_uint(asam_cmp_header_tree, hf_cmp_msg_type, tvb, offset, 1, ENC_NA0x00000000, &msg_type);
3884 offset += 1;
3885
3886 proto_tree_add_item(asam_cmp_header_tree, hf_cmp_stream_id, tvb, offset, 1, ENC_NA0x00000000);
3887 offset += 1;
3888
3889 proto_tree_add_item(asam_cmp_header_tree, hf_cmp_stream_seq_ctr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3890 offset += 2;
3891
3892 proto_item_append_text(ti_root, ", Device: 0x%04x, Type: %s", (uint16_t)device_id, val_to_str(pinfo->pool, msg_type, msg_type_names, "Unknown (0x%x)"));
3893
3894 while (tvb_reported_length_remaining(tvb, offset) >= 16) {
3895 unsigned bytes_parsed = 0;
3896
3897 switch (msg_type) {
3898 case CMP_MSG_TYPE_CAP_DATA_MSG0x01:
3899 col_append_str(pinfo->cinfo, COL_INFO, ", Data Msg (Capturing)");
3900 bytes_parsed += dissect_asam_cmp_data_msg(tvb, pinfo, tree, asam_cmp_tree, offset, false0);
3901 break;
3902 case CMP_MSG_TYPE_CTRL_MSG0x02:
3903 col_append_str(pinfo->cinfo, COL_INFO, ", Control Msg");
3904 bytes_parsed = dissect_asam_cmp_ctrl_msg(tvb, pinfo, asam_cmp_tree, offset);
3905 break;
3906 case CMP_MSG_TYPE_STATUS_MSG0x03:
3907 col_append_str(pinfo->cinfo, COL_INFO, ", Status Msg");
3908 bytes_parsed = dissect_asam_cmp_status_msg(tvb, pinfo, asam_cmp_tree, offset);
3909 break;
3910 case CMP_MSG_TYPE_TX_DATA_MSG0x04:
3911 col_append_str(pinfo->cinfo, COL_INFO, ", Data Msg (Transmit)");
3912 bytes_parsed += dissect_asam_cmp_data_msg(tvb, pinfo, tree, asam_cmp_tree, offset, true1);
3913 break;
3914 case CMP_MSG_TYPE_VENDOR0xFF:
3915 col_append_str(pinfo->cinfo, COL_INFO, ", Vendor Msg");
3916 bytes_parsed = dissect_asam_cmp_vendor_msg(tvb, pinfo, asam_cmp_tree, offset);
3917 break;
3918 default:
3919 proto_item_set_end(ti_root, tvb, offset);
3920 return offset;
3921 }
3922
3923 offset += bytes_parsed;
3924
3925 /* Bytes are not being parsed, if detected as Ethernet padding, so we need to bail out. */
3926 if (bytes_parsed == 0) {
3927 proto_item_set_end(ti_root, tvb, offset);
3928 return offset;
3929 }
3930
3931 }
3932
3933 proto_item_set_end(ti_root, tvb, offset);
3934 return offset;
3935}
3936
3937void
3938proto_register_asam_cmp(void) {
3939 module_t *asam_cmp_module = NULL((void*)0);
3940 expert_module_t *expert_module_asam_cmp;
3941 uat_t *asam_cmp_deviceid_uat = NULL((void*)0);
3942 uat_t *asam_cmp_interfaceid_uat = NULL((void*)0);
3943
3944 static hf_register_info hf[] = {
3945 /* Header */
3946 { &hf_cmp_header, { "ASAM CMP Header", "asam-cmp.hdr", FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3947
3948 { &hf_cmp_version, { "Version", "asam-cmp.hdr.version", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3949 { &hf_cmp_header_res, { "Reserved", "asam-cmp.hdr.res", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3950 { &hf_cmp_device_id, { "Device ID", "asam-cmp.hdr.device_id", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3951 { &hf_cmp_msg_type, { "Message Type", "asam-cmp.hdr.msg_type", FT_UINT8, BASE_HEX, VALS(msg_type_names)((0 ? (const struct _value_string*)0 : ((msg_type_names)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3952 { &hf_cmp_stream_id, { "Stream ID", "asam-cmp.hdr.stream_id", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3953 { &hf_cmp_stream_seq_ctr, { "Stream Sequence Counter", "asam-cmp.hdr.stream_seq_cnt", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3954
3955 /* Message Header*/
3956 { &hf_cmp_msg_header, { "ASAM CMP Msg Header", "asam-cmp.msg_hdr", FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3957
3958 { &hf_cmp_msg_timestamp, { "Timestamp", "asam-cmp.msg_hdr.timestamp", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3959 { &hf_cmp_msg_timestamp_ns, { "Timestamp (ns)", "asam-cmp.msg_hdr.timestamp_ns", FT_UINT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3960 { &hf_cmp_msg_deadline, { "Deadline", "asam-cmp.msg_hdr.deadline", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_nanoseconds)((0 ? (const struct unit_name_string*)0 : ((&units_nanoseconds
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3961 { &hf_cmp_msg_reserved, { "Reserved", "asam-cmp.msg_hdr.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3962
3963 { &hf_cmp_msg_trans_opts, { "Transmission Options", "asam-cmp.msg_hdr.trans_opts", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3964 { &hf_cmp_msg_trans_opts_res, { "Reserved", "asam-cmp.msg_hdr.trans_opts.res", FT_UINT32, BASE_HEX, NULL((void*)0), 0xFFFFFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3965 { &hf_cmp_msg_trans_opts_lin_wup_dura, { "Wake Up Duration", "asam-cmp.msg_hdr.trans_opts.lin.wup_duration", FT_UINT32, BASE_DEC, NULL((void*)0), 0xFFFF0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3966 { &hf_cmp_msg_trans_opts_lin_res, { "Reserved", "asam-cmp.msg_hdr.trans_opts.lin.reserved", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3967 { &hf_cmp_msg_trans_opts_fr_op, { "Operation", "asam-cmp.msg_hdr.trans_opts.flexray.operation", FT_UINT32, BASE_HEX, VALS(flexray_transmission_operations)((0 ? (const struct _value_string*)0 : ((flexray_transmission_operations
))))
, 0xFF000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
3968 { &hf_cmp_msg_trans_opts_fr_cycle_rep, { "Cycle Repetition", "asam-cmp.msg_hdr.trans_opts.flexray.cycle_repetition", FT_UINT32, BASE_DEC, NULL((void*)0), 0x00FF0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3969 { &hf_cmp_msg_trans_opts_fr_res, { "Reserved", "asam-cmp.msg_hdr.trans_opts.flexray.reserved", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0000FFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3970
3971 { &hf_cmp_msg_common_flags, { "Common Flags", "asam-cmp.msg_hdr.common_flags", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3972 { &hf_cmp_common_flag_recal, { "Timestamp recalculated", "asam-cmp.msg_hdr.recalculated", FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3973 { &hf_cmp_common_flag_relative, { "Relative", "asam-cmp.msg_hdr.timestamp_relative", FT_BOOLEAN, 8, TFS(&timestamp_rel_abs)((0 ? (const struct true_false_string*)0 : ((&timestamp_rel_abs
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
3974 { &hf_cmp_common_flag_insync, { "Synchronized", "asam-cmp.msg_hdr.sync", FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3975 { &hf_cmp_common_flag_reserved_0x02, { "Reserved", "asam-cmp.msg_hdr.res3", FT_UINT8, BASE_HEX, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3976 { &hf_cmp_common_flag_seg, { "Segmentation", "asam-cmp.msg_hdr.seg", FT_UINT8, BASE_HEX, VALS(seg_flag_names)((0 ? (const struct _value_string*)0 : ((seg_flag_names)))), 0x0C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3977 { &hf_cmp_common_flag_dir_on_if, { "Direction", "asam-cmp.msg_hdr.dir_on_if", FT_BOOLEAN, 8, TFS(&interface_direction)((0 ? (const struct true_false_string*)0 : ((&interface_direction
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3978 { &hf_cmp_common_flag_overflow, { "Overflow", "asam-cmp.msg_hdr.overflow", FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3979 { &hf_cmp_common_flag_err_in_payload, { "Error in payload", "asam-cmp.msg_hdr.error_in_payload", FT_BOOLEAN, 8, NULL((void*)0), 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3980 { &hf_cmp_common_flag_reserved, { "Reserved", "asam-cmp.msg_hdr.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3981 { &hf_cmp_common_flag_reserved_0xf0, { "Reserved", "asam-cmp.msg_hdr.res2", FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
3982
3983 { &hf_cmp_msg_vendor_id, { "Vendor ID", "asam-cmp.msg_hdr.vendor_id", FT_UINT16, BASE_HEX, VALS(vendor_ids)((0 ? (const struct _value_string*)0 : ((vendor_ids)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3984 { &hf_cmp_msg_payload_length, { "Payload Length", "asam-cmp.msg_hdr.payload_length", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3985 { &hf_cmp_msg_payload, { "Payload", "asam-cmp.msg_payload", FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3986
3987 /* Data Message Header */
3988 { &hf_cmp_interface_id, { "Interface ID", "asam-cmp.msg_hdr.interface_id", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3989 { &hf_cmp_payload_type, { "Payload Type", "asam-cmp.msg_hdr.payload_type", FT_UINT8, BASE_HEX, VALS(data_msg_type_names)((0 ? (const struct _value_string*)0 : ((data_msg_type_names)
)))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3990
3991 /* Additional Control Message Header */
3992 { &hf_cmp_ctrl_msg_reserved, { "Reserved", "asam-cmp.msg_hdr.reserved", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3993 { &hf_cmp_ctrl_msg_payload_type, { "Payload Type", "asam-cmp.msg_hdr.payload_type", FT_UINT8, BASE_HEX, VALS(ctrl_msg_type_names)((0 ? (const struct _value_string*)0 : ((ctrl_msg_type_names)
)))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3994
3995 /* Additional Status Message Header */
3996 { &hf_cmp_status_msg_payload_type, { "Payload Type", "asam-cmp.msg_hdr.payload_type", FT_UINT8, BASE_HEX, VALS(status_msg_type_names)((0 ? (const struct _value_string*)0 : ((status_msg_type_names
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
3997
3998 /* Additional Vendor Message Header */
3999 { &hf_cmp_vendor_msg_payload_type, { "Payload Type", "asam-cmp.msg_hdr.payload_type", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4000
4001 /* Data Message Payloads */
4002 /* CAN Data */
4003 { &hf_cmp_can_flags, { "Flags", "asam-cmp.msg.can.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4004 { &hf_cmp_can_flag_crc_err, { "CRC Error", "asam-cmp.msg.can.flags.crc_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4005 { &hf_cmp_can_flag_ack_err, { "ACK Error", "asam-cmp.msg.can.flags.ack_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4006 { &hf_cmp_can_flag_passive_ack_err, { "Passive ACK Error", "asam-cmp.msg.can.flags.passive_ack_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4007 { &hf_cmp_can_flag_reserved_0004, { "Reserved", "asam-cmp.msg.can.flags.reserved_0x0004", FT_BOOLEAN, 16, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4008 { &hf_cmp_can_flag_active_ack_err, { "Active ACK Error", "asam-cmp.msg.can.flags.active_ack_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4009 { &hf_cmp_can_flag_reserved_0008, { "Reserved", "asam-cmp.msg.can.flags.reserved_0x0008", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4010 { &hf_cmp_can_flag_ack_del_err, { "ACK DEL Error", "asam-cmp.msg.can.flags.ack_del_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4011 { &hf_cmp_can_flag_form_err, { "Form Error", "asam-cmp.msg.can.flags.form_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4012 { &hf_cmp_can_flag_stuff_err, { "Stuff Error", "asam-cmp.msg.can.flags.stuff_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4013 { &hf_cmp_can_flag_crc_del_err, { "CRC DEL Error", "asam-cmp.msg.can.flags.crc_del_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4014 { &hf_cmp_can_flag_eof_err, { "EOF Error", "asam-cmp.msg.can.flags.eof_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4015 { &hf_cmp_can_flag_bit_err, { "Bit Error", "asam-cmp.msg.can.flags.bit_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4016 { &hf_cmp_can_flag_r0, { "R0", "asam-cmp.msg.can.flags.r0", FT_BOOLEAN, 16, TFS(&can_rec_dom)((0 ? (const struct true_false_string*)0 : ((&can_rec_dom
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4017 { &hf_cmp_can_flag_srr_dom, { "Substitute Remote Request (SRR)", "asam-cmp.msg.can.flags.srr", FT_BOOLEAN, 16, TFS(&can_dom_rec)((0 ? (const struct true_false_string*)0 : ((&can_dom_rec
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4018 { &hf_cmp_can_flag_reserved, { "Reserved", "asam-cmp.msg.can.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xF000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4019 { &hf_cmp_can_flag_reserved_1000, { "Reserved", "asam-cmp.msg.can.flags.reserved_0x1000", FT_UINT16, BASE_HEX, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4020 { &hf_cmp_can_flag_reserved_2000, { "Reserved", "asam-cmp.msg.can.flags.reserved_0x2000", FT_UINT16, BASE_HEX, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4021 { &hf_cmp_can_flag_gen_err, { "Generic Error", "asam-cmp.msg.can.flags.gen_err", FT_UINT16, BASE_HEX, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4022 { &hf_cmp_can_flag_reserved_tx, { "Reserved", "asam-cmp.msg.can.flags.reserved_tx", FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4023
4024 { &hf_cmp_can_reserved, { "Reserved", "asam-cmp.msg.can.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4025
4026 { &hf_cmp_can_id, { "ID", "asam-cmp.msg.can.id_field", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4027 { &hf_cmp_can_id_11bit, { "ID (11bit)", "asam-cmp.msg.can.id_11bit", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_ID_11BIT_MASK0x1ffc0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4028 { &hf_cmp_can_id_11bit_old, { "ID (11bit)", "asam-cmp.msg.can.id_11bit", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_ID_11BIT_MASK_OLD0x000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4029 { &hf_cmp_can_id_29bit, { "ID (29bit)", "asam-cmp.msg.can.id_29bit", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_ID_29BIT_MASK0x1fffffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4030 { &hf_cmp_can_id_err, { "ID_ERR", "asam-cmp.msg.can.id_err", FT_BOOLEAN, 32, TFS(&tfs_invalid_valid)((0 ? (const struct true_false_string*)0 : ((&tfs_invalid_valid
))))
, CMP_CAN_ID_ERR0x20000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4031 { &hf_cmp_can_id_rtr, { "RTR", "asam-cmp.msg.can.rtr", FT_BOOLEAN, 32, TFS(&can_id_rtr)((0 ? (const struct true_false_string*)0 : ((&can_id_rtr)
)))
, CMP_CAN_ID_RTR0x40000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4032 { &hf_cmp_can_id_ide, { "IDE", "asam-cmp.msg.can.ide", FT_BOOLEAN, 32, TFS(&can_id_ide)((0 ? (const struct true_false_string*)0 : ((&can_id_ide)
)))
, CMP_CAN_ID_IDE0x80000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4033
4034 { &hf_cmp_can_crc, { "CRC", "asam-cmp.msg.can.crc_field", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4035 { &hf_cmp_can_crc_crc, { "CRC", "asam-cmp.msg.can.crc", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_CRC_CRC0x00007fff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4036 { &hf_cmp_can_crc_res, { "Reserved", "asam-cmp.msg.can.crc_res", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_CRC_RES0x7fff8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4037 { &hf_cmp_can_crc_crc_support, { "CRC Supported", "asam-cmp.msg.can.crc_support", FT_BOOLEAN, 32, NULL((void*)0), CMP_CAN_CRC_CRC_SUPP0x80000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4038
4039 { &hf_cmp_can_err_pos, { "Error Position", "asam-cmp.msg.can.err_pos", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4040 { &hf_cmp_can_dlc, { "DLC", "asam-cmp.msg.can.dlc", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4041 { &hf_cmp_can_data_len, { "Data length", "asam-cmp.msg.can.data_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4042
4043 /* CAN-FD Data */
4044 { &hf_cmp_canfd_flags, { "Flags", "asam-cmp.msg.canfd.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4045 { &hf_cmp_canfd_flag_crc_err, { "CRC Error", "asam-cmp.msg.canfd.flags.crc_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4046 { &hf_cmp_canfd_flag_ack_err, { "ACK Error", "asam-cmp.msg.canfd.flags.ack_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4047 { &hf_cmp_canfd_flag_passive_ack_err, { "Passive ACK Error", "asam-cmp.msg.canfd.flags.passive_ack_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4048 { &hf_cmp_canfd_flag_reserved_0004, { "Reserved", "asam-cmp.msg.canfd.flags.reserved_0x0004", FT_BOOLEAN, 16, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4049 { &hf_cmp_canfd_flag_active_ack_err, { "Active ACK Error", "asam-cmp.msg.canfd.flags.active_ack_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4050 { &hf_cmp_canfd_flag_reserved_0008, { "Reserved", "asam-cmp.msg.canfd.flags.reserved_0x0008", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4051 { &hf_cmp_canfd_flag_ack_del_err, { "ACK DEL Error", "asam-cmp.msg.canfd.flags.ack_del_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4052 { &hf_cmp_canfd_flag_form_err, { "Form Error", "asam-cmp.msg.canfd.flags.form_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4053 { &hf_cmp_canfd_flag_stuff_err, { "Stuff Error", "asam-cmp.msg.canfd.flags.stuff_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4054 { &hf_cmp_canfd_flag_crc_del_err, { "CRC DEL Error", "asam-cmp.msg.canfd.flags.crc_del_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4055 { &hf_cmp_canfd_flag_eof_err, { "EOF Error", "asam-cmp.msg.canfd.flags.eof_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4056 { &hf_cmp_canfd_flag_bit_err, { "Bit Error", "asam-cmp.msg.canfd.flags.bit_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4057 { &hf_cmp_canfd_flag_res, { "Reserved Bit", "asam-cmp.msg.canfd.flags.res", FT_BOOLEAN, 16, TFS(&can_rec_dom)((0 ? (const struct true_false_string*)0 : ((&can_rec_dom
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4058 { &hf_cmp_canfd_flag_srr_dom, { "Substitute Remote Request (SRR)", "asam-cmp.msg.canfd.flags.srr", FT_BOOLEAN, 16, TFS(&can_dom_rec)((0 ? (const struct true_false_string*)0 : ((&can_dom_rec
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4059 { &hf_cmp_canfd_flag_brs, { "BRS", "asam-cmp.msg.canfd.flags.brs", FT_BOOLEAN, 16, NULL((void*)0), 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4060 { &hf_cmp_canfd_flag_esi, { "ESI", "asam-cmp.msg.canfd.flags.esi", FT_BOOLEAN, 16, TFS(&canfd_act_pas)((0 ? (const struct true_false_string*)0 : ((&canfd_act_pas
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4061 { &hf_cmp_canfd_flag_reserved, { "Reserved", "asam-cmp.msg.canfd.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xC000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4062
4063 { &hf_cmp_canfd_flag_gen_err, { "Generic Error", "asam-cmp.msg.canfd.flags.gen_err", FT_UINT16, BASE_HEX, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4064 { &hf_cmp_canfd_flag_reserved_tx, { "Reserved", "asam-cmp.msg.canfd.flags.reserved_tx", FT_UINT16, BASE_HEX, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4065
4066 { &hf_cmp_canfd_reserved, { "Reserved", "asam-cmp.msg.canfd.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4067
4068 { &hf_cmp_canfd_id, { "ID", "asam-cmp.msg.canfd.id_field", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4069 { &hf_cmp_canfd_id_11bit, { "ID (11bit)", "asam-cmp.msg.canfd.id_11bit", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_ID_11BIT_MASK0x1ffc0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4070 { &hf_cmp_canfd_id_11bit_old, { "ID (11bit)", "asam-cmp.msg.canfd.id_11bit", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_ID_11BIT_MASK_OLD0x000007ff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4071 { &hf_cmp_canfd_id_29bit, { "ID (29bit)", "asam-cmp.msg.canfd.id_29bit", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CAN_ID_29BIT_MASK0x1fffffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4072 { &hf_cmp_canfd_id_err, { "ID_ERR", "asam-cmp.msg.canfd.id_err", FT_BOOLEAN, 32, TFS(&tfs_invalid_valid)((0 ? (const struct true_false_string*)0 : ((&tfs_invalid_valid
))))
, CMP_CANFD_ID_ERR0x20000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4073 { &hf_cmp_canfd_id_rrs, { "RRS", "asam-cmp.msg.canfd.rrs", FT_BOOLEAN, 32, NULL((void*)0), CMP_CANFD_ID_RRS0x40000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4074 { &hf_cmp_canfd_id_ide, { "IDE", "asam-cmp.msg.canfd.ide", FT_BOOLEAN, 32, NULL((void*)0), CMP_CANFD_ID_IDE0x80000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4075
4076 { &hf_cmp_canfd_crc, { "CRC SBC", "asam-cmp.msg.canfd.crc_field", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4077 { &hf_cmp_canfd_crc_crc17, { "CRC (17bit)", "asam-cmp.msg.canfd.crc17", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CANFD_CRC_CRC170x0001ffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4078 { &hf_cmp_canfd_crc_crc21, { "CRC (21bit)", "asam-cmp.msg.canfd.crc21", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CANFD_CRC_CRC210x001fffff, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4079 { &hf_cmp_canfd_crc_sbc, { "SBC", "asam-cmp.msg.canfd.sbc", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CANFD_CRC_SBC0x00e00000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4080 { &hf_cmp_canfd_crc_sbc_parity, { "SBC Parity", "asam-cmp.msg.canfd.sbc_parity", FT_BOOLEAN, 32, NULL((void*)0), CMP_CANFD_CRC_SBC_PARITY0x01000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4081 { &hf_cmp_canfd_crc_res, { "Reserved", "asam-cmp.msg.canfd.crc_res", FT_UINT32, BASE_HEX_DEC, NULL((void*)0), CMP_CANFD_CRC_RES0x3e000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4082 { &hf_cmp_canfd_crc_sbc_support, { "SBC Supported", "asam-cmp.msg.canfd.sbc_support", FT_BOOLEAN, 32, NULL((void*)0), CMP_CANFD_CRC_SBC_SUPP0x40000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4083 { &hf_cmp_canfd_crc_crc_support, { "CRC Supported", "asam-cmp.msg.canfd.crc_support", FT_BOOLEAN, 32, NULL((void*)0), CMP_CANFD_CRC_CRC_SUPP0x80000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4084
4085 { &hf_cmp_canfd_err_pos, { "Error Position", "asam-cmp.msg.canfd.err_pos", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4086 { &hf_cmp_canfd_dlc, { "DLC", "asam-cmp.msg.canfd.dlc", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4087 { &hf_cmp_canfd_data_len, { "Data length", "asam-cmp.msg.canfd.data_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4088
4089 /* LIN */
4090 { &hf_cmp_lin_flags, { "Flags", "asam-cmp.msg.lin.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4091 { &hf_cmp_lin_flag_checksum_err, { "Checksum Error", "asam-cmp.msg.lin.flags.checksum_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4092 { &hf_cmp_lin_flag_col_err, { "Collision Error", "asam-cmp.msg.lin.flags.col_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4093 { &hf_cmp_lin_flag_reserved_0x0002, { "Reserved", "asam-cmp.msg.lin.flags.reserved_0x0002", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4094 { &hf_cmp_lin_flag_parity_err, { "Parity Error", "asam-cmp.msg.lin.flags.parity_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4095 { &hf_cmp_lin_flag_no_slave_res, { "No Slave Response", "asam-cmp.msg.lin.flags.no_slave_response", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4096 { &hf_cmp_lin_flag_reserved_0x0008, { "Reserved", "asam-cmp.msg.lin.flags.reserved_0x0008", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4097 { &hf_cmp_lin_flag_sync_err, { "Sync Error", "asam-cmp.msg.lin.flags.sync_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4098 { &hf_cmp_lin_flag_framing_err, { "Framing Error", "asam-cmp.msg.lin.flags.framing_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4099 { &hf_cmp_lin_flag_short_dom_err, { "Short Dominant Error", "asam-cmp.msg.lin.flags.short_dom_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4100 { &hf_cmp_lin_flag_long_dom_err, { "Long Dominant Error", "asam-cmp.msg.lin.flags.long_dom_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4101 { &hf_cmp_lin_flag_wup, { "Wake Up Request Detection (WUP)", "asam-cmp.msg.lin.flags.wup", FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4102 { &hf_cmp_lin_flag_reserved, { "Reserved", "asam-cmp.msg.lin.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4103
4104 { &hf_cmp_lin_reserved, { "Reserved", "asam-cmp.msg.lin.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4105 { &hf_cmp_lin_pid, { "PID", "asam-cmp.msg.lin.pid", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4106 { &hf_cmp_lin_pid_id, { "ID", "asam-cmp.msg.lin.pid.id", FT_UINT8, BASE_HEX, NULL((void*)0), CMP_CANFD_PID_ID_MASK0x3f, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4107 { &hf_cmp_lin_pid_parity, { "Parity", "asam-cmp.msg.lin.pid.parity", FT_UINT8, BASE_HEX, NULL((void*)0), CMP_CANFD_PID_PARITY_MASK0xc0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4108 { &hf_cmp_lin_reserved_2, { "Reserved", "asam-cmp.msg.lin.res_2", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4109 { &hf_cmp_lin_checksum, { "Checksum", "asam-cmp.msg.lin.checksum", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4110 { &hf_cmp_lin_data_len, { "Data length", "asam-cmp.msg.lin.data_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4111
4112 /* FlexRay */
4113 { &hf_cmp_flexray_flags, { "Flags", "asam-cmp.msg.flexray.flags.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4114 { &hf_cmp_flexray_flag_crc_frame_err, { "Frame CRC Error", "asam-cmp.msg.flexray.flags.crc_frame_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4115 { &hf_cmp_flexray_flag_crc_header_err, { "Header CRC Error", "asam-cmp.msg.flexray.flags.crc_header_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4116 { &hf_cmp_flexray_flag_nf, { "Null Frame", "asam-cmp.msg.flexray.flags.nf", FT_BOOLEAN, 16, NULL((void*)0), CMP_FLEXRAY_FLAGS_NF0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4117 { &hf_cmp_flexray_flag_sf, { "Startup Frame", "asam-cmp.msg.flexray.flags.sf", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4118 { &hf_cmp_flexray_flag_sync, { "Sync Frame", "asam-cmp.msg.flexray.flags.sync", FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4119 { &hf_cmp_flexray_flag_wus, { "Wake Up Symbol", "asam-cmp.msg.flexray.flags.wus", FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4120 { &hf_cmp_flexray_flag_ppi, { "Preamble Indicator", "asam-cmp.msg.flexray.flags.ppi", FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4121 { &hf_cmp_flexray_flag_cas, { "Collision avoidance Symbol (CAS)", "asam-cmp.msg.flexray.flags.cas", FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4122 { &hf_cmp_flexray_flag_leading, { "Leading", "asam-cmp.msg.flexray.flags.leading", FT_BOOLEAN, 16, TFS(&flexray_leading_following)((0 ? (const struct true_false_string*)0 : ((&flexray_leading_following
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4123 { &hf_cmp_flexray_flag_reserved_0x0100, { "Reserved", "asam-cmp.msg.flexray.flags.reserved_0x0100", FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4124 { &hf_cmp_flexray_flag_channel, { "Channel", "asam-cmp.msg.flexray.flags.channel", FT_BOOLEAN, 16, TFS(&flexray_channel_b_a)((0 ? (const struct true_false_string*)0 : ((&flexray_channel_b_a
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4125 { &hf_cmp_flexray_flag_reserved, { "Reserved", "asam-cmp.msg.flexray.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFC00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4126
4127 { &hf_cmp_flexray_reserved, { "Reserved", "asam-cmp.msg.flexray.flags.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4128 { &hf_cmp_flexray_header_crc, { "Header CRC", "asam-cmp.msg.flexray.flags.header_crc", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4129 { &hf_cmp_flexray_frame_id, { "Frame ID", "asam-cmp.msg.flexray.flags.frame_id", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4130 { &hf_cmp_flexray_cycle, { "Cycle", "asam-cmp.msg.flexray.flags.cycle", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4131 { &hf_cmp_flexray_frame_crc, { "Frame CRC", "asam-cmp.msg.flexray.flags.frame_crc", FT_UINT24, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4132 { &hf_cmp_flexray_reserved_2, { "Reserved", "asam-cmp.msg.flexray.flags.res_2", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4133 { &hf_cmp_flexray_data_len, { "Data length", "asam-cmp.msg.flexray.flags.data_len", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4134
4135 /* Digital */
4136 { &hf_cmp_digital_flags, { "Flags", "asam-cmp.msg.digital.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4137 { &hf_cmp_digital_flag_trig_present, { "Trigger Information Present", "asam-cmp.msg.digital.flags.trigger_present", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4138 { &hf_cmp_digital_flag_sampl_present, { "Sampling Information Present", "asam-cmp.msg.digital.flags.sampling_present", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4139 { &hf_cmp_digital_flag_reserved, { "Reserved", "asam-cmp.msg.digital.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4140
4141 { &hf_cmp_digital_reserved, { "Reserved", "asam-cmp.msg.digital.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4142 { &hf_cmp_digital_pin_count, { "Pin Count", "asam-cmp.msg.digital.pin_count", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4143
4144 { &hf_cmp_digital_trig_pattern, { "Trigger Pattern", "asam-cmp.msg.digital.trigger.pattern", FT_UINT8, BASE_DEC, VALS(digital_trigger_pattern)((0 ? (const struct _value_string*)0 : ((digital_trigger_pattern
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4145 { &hf_cmp_digital_trig_pin, { "Trigger Pin", "asam-cmp.msg.digital.trigger.pin", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4146 { &hf_cmp_digital_flag_reserved2, { "Reserved", "asam-cmp.msg.digital.trigger.reserved2", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0 , NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4147
4148 { &hf_cmp_digital_sample_interval, { "Sample Interval", "asam-cmp.msg.digital.sample.interval", FT_FLOAT, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4149 { &hf_cmp_digital_sample_count, { "Sample Count", "asam-cmp.msg.digital.sample.count", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4150 { &hf_cmp_digital_sample, { "Sample", "asam-cmp.msg.digital.sample", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4151
4152 { &hf_cmp_digital_sample_pin_0, { "GPIO 0", "asam-cmp.msg.digital.sample.pin_0", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4153 { &hf_cmp_digital_sample_pin_1, { "GPIO 1", "asam-cmp.msg.digital.sample.pin_1", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4154 { &hf_cmp_digital_sample_pin_2, { "GPIO 2", "asam-cmp.msg.digital.sample.pin_2", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4155 { &hf_cmp_digital_sample_pin_3, { "GPIO 3", "asam-cmp.msg.digital.sample.pin_3", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4156 { &hf_cmp_digital_sample_pin_4, { "GPIO 4", "asam-cmp.msg.digital.sample.pin_4", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4157 { &hf_cmp_digital_sample_pin_5, { "GPIO 5", "asam-cmp.msg.digital.sample.pin_5", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4158 { &hf_cmp_digital_sample_pin_6, { "GPIO 6", "asam-cmp.msg.digital.sample.pin_6", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4159 { &hf_cmp_digital_sample_pin_7, { "GPIO 7", "asam-cmp.msg.digital.sample.pin_7", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4160
4161 { &hf_cmp_digital_sample_pin_8, { "GPIO 8", "asam-cmp.msg.digital.sample.pin_8", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4162 { &hf_cmp_digital_sample_pin_9, { "GPIO 9", "asam-cmp.msg.digital.sample.pin_9", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4163 { &hf_cmp_digital_sample_pin_10, { "GPIO 10", "asam-cmp.msg.digital.sample.pin_10", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4164 { &hf_cmp_digital_sample_pin_11, { "GPIO 11", "asam-cmp.msg.digital.sample.pin_11", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4165 { &hf_cmp_digital_sample_pin_12, { "GPIO 12", "asam-cmp.msg.digital.sample.pin_12", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4166 { &hf_cmp_digital_sample_pin_13, { "GPIO 13", "asam-cmp.msg.digital.sample.pin_13", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4167 { &hf_cmp_digital_sample_pin_14, { "GPIO 14", "asam-cmp.msg.digital.sample.pin_14", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4168 { &hf_cmp_digital_sample_pin_15, { "GPIO 15", "asam-cmp.msg.digital.sample.pin_15", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4169
4170 { &hf_cmp_digital_sample_pin_16, { "GPIO 16", "asam-cmp.msg.digital.sample.pin_16", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4171 { &hf_cmp_digital_sample_pin_17, { "GPIO 17", "asam-cmp.msg.digital.sample.pin_17", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4172 { &hf_cmp_digital_sample_pin_18, { "GPIO 18", "asam-cmp.msg.digital.sample.pin_18", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4173 { &hf_cmp_digital_sample_pin_19, { "GPIO 19", "asam-cmp.msg.digital.sample.pin_19", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4174 { &hf_cmp_digital_sample_pin_20, { "GPIO 20", "asam-cmp.msg.digital.sample.pin_20", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4175 { &hf_cmp_digital_sample_pin_21, { "GPIO 21", "asam-cmp.msg.digital.sample.pin_21", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4176 { &hf_cmp_digital_sample_pin_22, { "GPIO 22", "asam-cmp.msg.digital.sample.pin_22", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4177 { &hf_cmp_digital_sample_pin_23, { "GPIO 23", "asam-cmp.msg.digital.sample.pin_23", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4178
4179 { &hf_cmp_digital_sample_pin_24, { "GPIO 24", "asam-cmp.msg.digital.sample.pin_24", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4180 { &hf_cmp_digital_sample_pin_25, { "GPIO 25", "asam-cmp.msg.digital.sample.pin_25", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4181 { &hf_cmp_digital_sample_pin_26, { "GPIO 26", "asam-cmp.msg.digital.sample.pin_26", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4182 { &hf_cmp_digital_sample_pin_27, { "GPIO 27", "asam-cmp.msg.digital.sample.pin_27", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4183 { &hf_cmp_digital_sample_pin_28, { "GPIO 28", "asam-cmp.msg.digital.sample.pin_28", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4184 { &hf_cmp_digital_sample_pin_29, { "GPIO 29", "asam-cmp.msg.digital.sample.pin_29", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4185 { &hf_cmp_digital_sample_pin_30, { "GPIO 30", "asam-cmp.msg.digital.sample.pin_30", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x40, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4186 { &hf_cmp_digital_sample_pin_31, { "GPIO 31", "asam-cmp.msg.digital.sample.pin_31", FT_BOOLEAN, 8, TFS(&tfs_high_low)((0 ? (const struct true_false_string*)0 : ((&tfs_high_low
))))
, 0x80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4187
4188 /* UART/RS-232 */
4189 { &hf_cmp_uart_flags, { "Flags", "asam-cmp.msg.uart.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4190 { &hf_cmp_uart_flag_cl, { "CL", "asam-cmp.msg.uart.flags.cl", FT_UINT16, BASE_HEX, VALS(uart_cl_names)((0 ? (const struct _value_string*)0 : ((uart_cl_names)))), 0x0007, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4191 { &hf_cmp_uart_flag_reserved, { "Reserved", "asam-cmp.msg.uart.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4192
4193 { &hf_cmp_uart_reserved, { "Reserved", "asam-cmp.msg.uart.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4194 { &hf_cmp_uart_data_len, { "Data entry count", "asam-cmp.msg.uart.data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4195 { &hf_cmp_uart_data, { "Data", "asam-cmp.msg.uart.data", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4196 { &hf_cmp_uart_data_data, { "Data", "asam-cmp.msg.uart.data.data", FT_UINT16, BASE_HEX, NULL((void*)0), CMP_UART_DATA_DATA_MASK0x01FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4197 { &hf_cmp_uart_data_reserved, { "Reserved", "asam-cmp.msg.uart.data.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0x1E00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4198 { &hf_cmp_uart_data_framing_err, { "Framing Error", "asam-cmp.msg.uart.flags.framing_err", FT_BOOLEAN, 16, NULL((void*)0), 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4199 { &hf_cmp_uart_data_break_condition, { "Break Condition", "asam-cmp.msg.uart.flags.break_condition", FT_BOOLEAN, 16, NULL((void*)0), 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4200 { &hf_cmp_uart_data_parity_err, { "Parity Error", "asam-cmp.msg.uart.data.parity_err", FT_BOOLEAN, 16, NULL((void*)0), 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4201
4202 /* Analog */
4203 { &hf_cmp_analog_flags, { "Flags", "asam-cmp.msg.analog.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4204 { &hf_cmp_analog_flag_sample_dt, { "Sample Datatype", "asam-cmp.msg.analog.flags.sample_dt", FT_UINT16, BASE_HEX, VALS(analog_sample_dt)((0 ? (const struct _value_string*)0 : ((analog_sample_dt)))), 0x0003, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4205 { &hf_cmp_analog_flag_reserved, { "Reserved", "asam-cmp.msg.analog.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xfffc, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4206
4207 { &hf_cmp_analog_reserved, { "Reserved", "asam-cmp.msg.analog.reserved", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4208 { &hf_cmp_analog_unit, { "Unit", "asam-cmp.msg.analog.unit", FT_UINT8, BASE_HEX, VALS(analog_units)((0 ? (const struct _value_string*)0 : ((analog_units)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4209 { &hf_cmp_analog_sample_interval, { "Sample Interval", "asam-cmp.msg.analog.sample_interval", FT_FLOAT, BASE_NONE|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4210 { &hf_cmp_analog_sample_offset, { "Sample Offset", "asam-cmp.msg.analog.sample_offset", FT_FLOAT, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4211 { &hf_cmp_analog_sample_scalar, { "Sample Scalar", "asam-cmp.msg.analog.sample_scalar", FT_FLOAT, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4212 { &hf_cmp_analog_sample, { "Sample", "asam-cmp.msg.analog.sample", FT_DOUBLE, BASE_EXP, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4213 { &hf_cmp_analog_sample_raw, { "Sample Raw", "asam-cmp.msg.analog.sample_raw", FT_INT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4214
4215 /* Ethernet */
4216 { &hf_cmp_eth_flags, { "Flags", "asam-cmp.msg.eth.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
4217 { &hf_cmp_eth_flag_fcs_err, { "FCS Error", "asam-cmp.msg.eth.flags.crc_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4218 { &hf_cmp_eth_flag_short_err, { "Short Frame Error", "asam-cmp.msg.eth.flags.short_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4219 { &hf_cmp_eth_flag_tx_down, { "TX Port Down", "asam-cmp.msg.eth.flags.tx_down", FT_BOOLEAN, 16, NULL((void*)0), 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4220 { &hf_cmp_eth_flag_collision, { "Collision detected", "asam-cmp.msg.eth.flags.collision", FT_BOOLEAN, 16, NULL((void*)0), 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4221 { &hf_cmp_eth_flag_long_err, { "Long Frame Error", "asam-cmp.msg.eth.flags.long_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4222 { &hf_cmp_eth_flag_phy_err, { "PHY Error", "asam-cmp.msg.eth.flags.phy_err", FT_BOOLEAN, 16, NULL((void*)0), 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4223 { &hf_cmp_eth_flag_truncated, { "Frame truncated", "asam-cmp.msg.eth.flags.truncated", FT_BOOLEAN, 16, NULL((void*)0), 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4224 { &hf_cmp_eth_flag_fcs_supported, { "FCS supported", "asam-cmp.msg.eth.flags.fcs_supported", FT_BOOLEAN, 16, NULL((void*)0), 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4225 { &hf_cmp_eth_flag_reserved_cap, { "Reserved", "asam-cmp.msg.eth.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4226
4227 { &hf_cmp_eth_flag_reserved_tx, { "Reserved", "asam-cmp.msg.eth.flags.reserved_tx", FT_UINT16, BASE_HEX, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4228 { &hf_cmp_eth_flag_fcs_sending, { "FCS sending", "asam-cmp.msg.eth.flags.fcs_sending", FT_BOOLEAN, 16, NULL((void*)0), 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4229 { &hf_cmp_eth_flag_reserved_tx2, { "Reserved", "asam-cmp.msg.eth.flags.reserved_tx2", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4230
4231 { &hf_cmp_eth_reserved, { "Reserved", "asam-cmp.msg.eth.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4232 { &hf_cmp_eth_payload_length, { "Data length", "asam-cmp.msg.eth.data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4233
4234 /* SPI */
4235 { &hf_cmp_spi_flags, { "Flags", "asam-cmp.msg.spi.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4236 { &hf_cmp_spi_flag_reserved, { "Reserved", "asam-cmp.msg.spi.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4237
4238 { &hf_cmp_spi_reserved, { "Reserved", "asam-cmp.msg.spi.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4239 { &hf_cmp_spi_cipo_length, { "Controller In Peripheral Out Length", "asam-cmp.msg.spi.cipo_length", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4240 { &hf_cmp_spi_cipo, { "Controller In Peripheral Out (CIPO)", "asam-cmp.msg.spi.cipo", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4241 { &hf_cmp_spi_copi_length, { "Controller Out Peripheral In Length", "asam-cmp.msg.spi.copi_length", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4242 { &hf_cmp_spi_copi, { "Controller Out Peripheral In (COPI)", "asam-cmp.msg.spi.copi", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4243
4244 /* I2C */
4245 { &hf_cmp_i2c_flags, { "Flags", "asam-cmp.msg.i2c.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4246 { &hf_cmp_i2c_flag_dir, { "Direction", "asam-cmp.msg.i2c.flags.dir", FT_BOOLEAN, 16, TFS(&i2c_read_write)((0 ? (const struct true_false_string*)0 : ((&i2c_read_write
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4247 { &hf_cmp_i2c_flag_addr_len, { "Address Length", "asam-cmp.msg.i2c.flags.addr_len", FT_BOOLEAN, 16, TFS(&i2c_addr_length)((0 ? (const struct true_false_string*)0 : ((&i2c_addr_length
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4248 { &hf_cmp_i2c_flag_addr_ack, { "Address Ack", "asam-cmp.msg.i2c.flags.addr_ack", FT_BOOLEAN, 16, TFS(&i2c_nack_ack)((0 ? (const struct true_false_string*)0 : ((&i2c_nack_ack
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4249 { &hf_cmp_i2c_flag_addr_err, { "Ack Error", "asam-cmp.msg.i2c.flags.ack_err", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4250 { &hf_cmp_i2c_flag_stop_cond, { "Stop Condition", "asam-cmp.msg.i2c.flags.stop_cond", FT_BOOLEAN, 16, TFS(&i2c_stop_repeated_start)((0 ? (const struct true_false_string*)0 : ((&i2c_stop_repeated_start
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4251 { &hf_cmp_i2c_flag_start_cond, { "Start Condition", "asam-cmp.msg.i2c.flags.start_cond", FT_BOOLEAN, 16, TFS(&i2c_repeated_start_start)((0 ? (const struct true_false_string*)0 : ((&i2c_repeated_start_start
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4252 { &hf_cmp_i2c_flag_reserved, { "Reserved", "asam-cmp.msg.i2c.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4253
4254 { &hf_cmp_i2c_reserved, { "Reserved", "asam-cmp.msg.i2c.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4255 { &hf_cmp_i2c_addr, { "Address", "asam-cmp.msg.i2c.addr", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4256 { &hf_cmp_i2c_data_entry_count, { "Data Entry Count", "asam-cmp.msg.i2c.data_entry_count", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4257 { &hf_cmp_i2c_data, { "Data Entry", "asam-cmp.msg.i2c.data_entry", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4258 { &hf_cmp_i2c_data_byte, { "Data Byte", "asam-cmp.msg.i2c.data_entry.data", FT_UINT16, BASE_HEX, NULL((void*)0), 0x00FF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4259 { &hf_cmp_i2c_data_control_ack, { "Ack", "asam-cmp.msg.i2c.data_entry.control.ack", FT_BOOLEAN, 16, TFS(&i2c_nack_ack)((0 ? (const struct true_false_string*)0 : ((&i2c_nack_ack
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4260 { &hf_cmp_i2c_data_control_res, { "Reserved", "asam-cmp.msg.i2c.data_entry.control.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFE00, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4261
4262 /* GigE Vision */
4263 { &hf_cmp_gige_flags, { "Flags", "asam-cmp.msg.gige.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4264 { &hf_cmp_gige_flag_reserved, { "Reserved", "asam-cmp.msg.gige.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4265
4266 { &hf_cmp_gige_reserved, { "Reserved", "asam-cmp.msg.gige.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4267 { &hf_cmp_gige_payload_length, { "Data length", "asam-cmp.msg.gige.data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4268 { &hf_cmp_gige_payload, { "Data", "asam-cmp.msg.gige.data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4269
4270 /* MIPI CSI-2 */
4271 { &hf_cmp_mipi_csi2_flags, { "Flags", "asam-cmp.msg.mipi_csi2.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4272 { &hf_cmp_mipi_csi2_flag_crc_err, { "CRC Error", "asam-cmp.msg.mipi_csi2.flags.crc_err", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4273 { &hf_cmp_mipi_csi2_flag_ecc_err_c, { "Correctable ECC Error", "asam-cmp.msg.mipi_csi2.flags.ecc_err_c", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4274 { &hf_cmp_mipi_csi2_flag_ecc_err_uc, { "Uncorrectable ECC Error", "asam-cmp.msg.mipi_csi2.flags.ecc_err_uc", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4275 { &hf_cmp_mipi_csi2_flag_ecc_fmt, { "ECC Format", "asam-cmp.msg.mipi_csi2.flags.ecc_fmt", FT_BOOLEAN, 16, TFS(&mipi_csi2_ecc_noecc)((0 ? (const struct true_false_string*)0 : ((&mipi_csi2_ecc_noecc
))))
, 0x0008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4276 { &hf_cmp_mipi_csi2_flag_frame_ctr_src, { "Frame Counter Source", "asam-cmp.msg.mipi_csi2.flags.frame_counter_source", FT_BOOLEAN, 16, TFS(&mipi_csi2_cmcounter_csicounter)((0 ? (const struct true_false_string*)0 : ((&mipi_csi2_cmcounter_csicounter
))))
, 0x0010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4277 { &hf_cmp_mipi_csi2_flag_line_ctr_src, { "Line Counter Source", "asam-cmp.msg.mipi_csi2.flags.line_counter_source", FT_BOOLEAN, 16, TFS(&mipi_csi2_cmcounter_csicounter)((0 ? (const struct true_false_string*)0 : ((&mipi_csi2_cmcounter_csicounter
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4278 { &hf_cmp_mipi_csi2_flag_cs_support, { "Checksum Support", "asam-cmp.msg.mipi_csi2.flags.checksum_support", FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4279 { &hf_cmp_mipi_csi2_flag_reserved, { "Reserved", "asam-cmp.msg.mipi_csi2.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFF80, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4280
4281 { &hf_cmp_mipi_csi2_flag_reserved_tx, { "Reserved", "asam-cmp.msg.mipi_csi2.flags.reserved_tx", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4282
4283 { &hf_cmp_mipi_csi2_reserved, { "Reserved", "asam-cmp.msg.mipi_csi2.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4284 { &hf_cmp_mipi_csi2_frame_counter, { "Frame Counter", "asam-cmp.msg.mipi_csi2.frame_counter", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4285 { &hf_cmp_mipi_csi2_line_counter, { "Line Counter", "asam-cmp.msg.mipi_csi2.line_counter", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4286 { &hf_cmp_mipi_csi2_dt, { "Data Type", "asam-cmp.msg.mipi_csi2.data_type", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4287 { &hf_cmp_mipi_csi2_dt_res, { "Reserved", "asam-cmp.msg.mipi_csi2.data_type.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4288 { &hf_cmp_mipi_csi2_dt_dt, { "Data Type", "asam-cmp.msg.mipi_csi2.data_type.data_type", FT_UINT8, BASE_HEX, VALS(mipi_csi2_data_type_names)((0 ? (const struct _value_string*)0 : ((mipi_csi2_data_type_names
))))
, MIPI_CSI2_DT_BITS0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4289 { &hf_cmp_mipi_csi2_vci, { "Virtual Channel Identifier", "asam-cmp.msg.mipi_csi2.vci", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4290 { &hf_cmp_mipi_csi2_vci_res, { "Reserved", "asam-cmp.msg.mipi_csi2.vci.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0xF0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4291 { &hf_cmp_mipi_csi2_vci_vcx, { "Virtual Channel Exctension", "asam-cmp.msg.mipi_csi2.vci.vcx", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4292 { &hf_cmp_mipi_csi2_vci_vci, { "Virtual Channel Identifier", "asam-cmp.msg.mipi_csi2.vci.vci", FT_UINT8, BASE_HEX, NULL((void*)0), 0x03, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4293 { &hf_cmp_mipi_csi2_reserved2, { "Reserved", "asam-cmp.msg.mipi_csi2.res2", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4294 { &hf_cmp_mipi_csi2_ecc, { "ECC", "asam-cmp.msg.mipi_csi2.ecc", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4295 { &hf_cmp_mipi_csi2_ecc_res, { "Reserved", "asam-cmp.msg.mipi_csi2.ecc.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4296 { &hf_cmp_mipi_csi2_ecc_ecc, { "ECC", "asam-cmp.msg.mipi_csi2.ecc.ecc", FT_UINT8, BASE_HEX, NULL((void*)0), 0x3F, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4297 { &hf_cmp_mipi_csi2_cs, { "Checksum", "asam-cmp.msg.mipi_csi2.checksum", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4298 { &hf_cmp_mipi_csi2_wc, { "Word Count", "asam-cmp.msg.mipi_csi2.word_count", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4299 { &hf_cmp_mipi_csi2_short_packet_data, { "Short Packet Data Field", "asam-cmp.msg.mipi_csi2.short_packet_data_field", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4300 { &hf_cmp_mipi_csi2_data, { "Data", "asam-cmp.msg.mipi_csi2.data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4301
4302 /* Ethernet Raw */
4303 { &hf_cmp_raw_eth_flags, { "Flags", "asam-cmp.msg.raw_eth.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4304 { &hf_cmp_raw_eth_flag_reserved, { "Reserved", "asam-cmp.msg.raw_eth.flags.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0xFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4305
4306 { &hf_cmp_raw_eth_reserved, { "Reserved", "asam-cmp.msg.raw_eth.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4307 { &hf_cmp_raw_eth_payload_length, { "Data length", "asam-cmp.msg.raw_eth.data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4308 { &hf_cmp_raw_eth_preamble, { "Preamble", "asam-cmp.msg.raw_eth.preamble", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4309 { &hf_cmp_raw_eth_sfd, { "SFD", "asam-cmp.msg.raw_eth.sfd", FT_UINT8, BASE_HEX, VALS(eth_raw_sfd)((0 ? (const struct _value_string*)0 : ((eth_raw_sfd)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4310 { &hf_cmp_raw_eth_mpacket, { "mPacket", "asam-cmp.msg.raw_eth.mpacket", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4311
4312 /* 10BASE-T1S Symbols */
4313 { &hf_cmp_10t1s_symb_flags, { "Flags", "asam-cmp.msg.10baset1s_symbols.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4314 { &hf_cmp_10t1s_symb_flag_decode_err, { "Decode Error", "asam-cmp.msg.10baset1s_symbols.flags.decode_error", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4315 { &hf_cmp_10t1s_symb_flag_miss_beacon, { "Missing Beacon Error", "asam-cmp.msg.10baset1s_symbols.flags.missing_beacon", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4316 { &hf_cmp_10t1s_symb_flag_res, { "Reserved", "asam-cmp.msg.10baset1s_symbols.flags.reserved", FT_BOOLEAN, 16, NULL((void*)0), 0x7FFC, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4317 { &hf_cmp_10t1s_symb_flag_first_beacon, { "First Beacon", "asam-cmp.msg.10baset1s_symbols.flags.first_beacon", FT_BOOLEAN, 16, TFS(&eth_10baset1s_firstbeacon_notfirstbeacon)((0 ? (const struct true_false_string*)0 : ((&eth_10baset1s_firstbeacon_notfirstbeacon
))))
, 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4318
4319 { &hf_cmp_10t1s_symb_data_length, { "Data length", "asam-cmp.msg.10baset1s_symbols.data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4320 { &hf_cmp_10t1s_symb_data, { "Data", "asam-cmp.msg.10baset1s_symbols.data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4321 { &hf_cmp_10t1s_symb_data_symbol, { "Symbol", "asam-cmp.msg.10baset1s_symbols.data.symbol", FT_UINT8, BASE_HEX, VALS(eth_10baset1s_symbol_names)((0 ? (const struct _value_string*)0 : ((eth_10baset1s_symbol_names
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4322
4323 /* A2B */
4324 { &hf_cmp_a2b_flags, { "Flags", "asam-cmp.msg.a2b.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4325 { &hf_cmp_a2b_flag_fin, { "Switch Activation Finished", "asam-cmp.msg.a2b.flags.fin", FT_BOOLEAN, 16, TFS(&a2b_switch_closed_open)((0 ? (const struct true_false_string*)0 : ((&a2b_switch_closed_open
))))
, 00001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4326 { &hf_cmp_a2b_flag_fault_err, { "Cable Fault (FAULT)", "asam-cmp.msg.a2b.flags.fault_err", FT_BOOLEAN, 16, TFS(&a2b_cable_fault_no_fault)((0 ? (const struct true_false_string*)0 : ((&a2b_cable_fault_no_fault
))))
, 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4327 { &hf_cmp_a2b_flag_fault_code, { "Cable Fault Code (FAULT_CODE)", "asam-cmp.msg.a2b.flags.fault_code", FT_UINT16, BASE_DEC, VALS(a2b_fault_code_names)((0 ? (const struct _value_string*)0 : ((a2b_fault_code_names
))))
, 0x001c, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4328 { &hf_cmp_a2b_flag_fault_nloc, { "Cable Fault Not Localized (FAULT_NLOC)", "asam-cmp.msg.a2b.flags.fault_nloc", FT_BOOLEAN, 16, TFS(&a2b_cable_fault_not_localized_localized)((0 ? (const struct true_false_string*)0 : ((&a2b_cable_fault_not_localized_localized
))))
, 0x0020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4329 { &hf_cmp_a2b_flag_hdcnt_err, { "Header Count Error (HDCNTERR)", "asam-cmp.msg.a2b.flags.hdcnt_err", FT_BOOLEAN, 16, TFS(&tfs_enabled_disabled)((0 ? (const struct true_false_string*)0 : ((&tfs_enabled_disabled
))))
, 0x0040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4330 { &hf_cmp_a2b_flag_dd_err, { "Data Decoding Error (DDERR)", "asam-cmp.msg.a2b.flags.dd_err", FT_BOOLEAN, 16, TFS(&a2b_data_decode_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_data_decode_error_no_error
))))
, 0x0080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4331 { &hf_cmp_a2b_flag_crc_err, { "CRC Error (CRCERR)", "asam-cmp.msg.a2b.flags.crc_err", FT_BOOLEAN, 16, TFS(&a2b_crc_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_crc_error_no_error
))))
, 0x0100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4332 { &hf_cmp_a2b_flag_dp_err, { "Data Parity Error (DPERR)", "asam-cmp.msg.a2b.flags.dp_err", FT_BOOLEAN, 16, TFS(&a2b_data_parity_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_data_parity_error_no_error
))))
, 0x0200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4333 { &hf_cmp_a2b_flag_pwd_err, { "Downstream Power Switch Error (PWRERR)", "asam-cmp.msg.a2b.flags.pwr_err", FT_BOOLEAN, 16, TFS(&a2b_downstream_power_switch_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_downstream_power_switch_error_no_error
))))
, 0x0400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4334 { &hf_cmp_a2b_flag_becovf_err, { "Bit Error Count Error (BECOVFERR)", "asam-cmp.msg.a2b.flags.becovf_err", FT_BOOLEAN, 16, TFS(&a2b_bit_error_count_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_bit_error_count_error_no_error
))))
, 0x0800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4335 { &hf_cmp_a2b_flag_srf_err, { "SRF Miss Error (SRFERR)", "asam-cmp.msg.a2b.flags.srf_err", FT_BOOLEAN, 16, TFS(&a2b_srf_miss_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_srf_miss_error_no_error
))))
, 0x1000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4336 { &hf_cmp_a2b_flag_srfcrc_err, { "SRF CRC Error (SRFCRCERR Subordinate Node Only)", "asam-cmp.msg.a2b.flags.srfcrc_err", FT_BOOLEAN, 16, TFS(&a2b_srf_crc_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_srf_crc_error_no_error
))))
, 0x2000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4337 { &hf_cmp_a2b_flag_icrc_err, { "Interrupt Frame CRC Error (ICRCERR)", "asam-cmp.msg.a2b.flags.icrc_err", FT_BOOLEAN, 16, TFS(&a2b_iocrc_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_iocrc_error_no_error
))))
, 0x4000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4338 { &hf_cmp_a2b_flag_i2c_err, { "I2C Transaction Error (I2CERR)", "asam-cmp.msg.a2b.flags.i2c_err", FT_BOOLEAN, 16, TFS(&a2b_i2c_transaction_error_no_error)((0 ? (const struct true_false_string*)0 : ((&a2b_i2c_transaction_error_no_error
))))
, 0x8000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4339
4340 { &hf_cmp_a2b_reserved, { "Reserved", "asam-cmp.msg.a2b.reserved", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4341 { &hf_cmp_a2b_upstream_set, { "Upstream Settings", "asam-cmp.msg.a2b.upstream_settings", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4342 { &hf_cmp_a2b_upstream_set_upfmt, { "Upstream Format", "asam-cmp.msg.a2b.upstream_settings.upfmt", FT_BOOLEAN, 16, TFS(&a2b_fmt_alternate_normal)((0 ? (const struct true_false_string*)0 : ((&a2b_fmt_alternate_normal
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4343 { &hf_cmp_a2b_upstream_set_ups, { "Upstream Slots Enabled", "asam-cmp.msg.a2b.upstream_settings.ups", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4344 { &hf_cmp_a2b_upstream_set_upsize, { "Upstream Slot Size", "asam-cmp.msg.a2b.upstream_settings.upsize", FT_UINT16, BASE_HEX, VALS(a2b_slot_sizes)((0 ? (const struct _value_string*)0 : ((a2b_slot_sizes)))), 0x001C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4345 { &hf_cmp_a2b_upstream_set_upslots, { "Number of Upstream Slots", "asam-cmp.msg.a2b.upstream_settings.upslots", FT_UINT16, BASE_DEC, NULL((void*)0), 0x07E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4346 { &hf_cmp_a2b_upstream_set_upoffset, { "Upstream Channel Offset", "asam-cmp.msg.a2b.upstream_settings.upoffset", FT_UINT16, BASE_DEC, NULL((void*)0), 0xF800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4347
4348 { &hf_cmp_a2b_downstream_set, { "Downstream Settings", "asam-cmp.msg.a2b.downstream_settings", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4349 { &hf_cmp_a2b_downstream_set_dnfmt, { "Downstream Format", "asam-cmp.msg.a2b.downstream_settings.dnfmt", FT_BOOLEAN, 16, TFS(&a2b_fmt_alternate_normal)((0 ? (const struct true_false_string*)0 : ((&a2b_fmt_alternate_normal
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4350 { &hf_cmp_a2b_downstream_set_dns, { "Downstream Slots Enabled", "asam-cmp.msg.a2b.downstream_settings.dns", FT_BOOLEAN, 16, NULL((void*)0), 0x0002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4351 { &hf_cmp_a2b_downstream_set_dnsize, { "Downstream Slot Size", "asam-cmp.msg.a2b.downstream_settings.dnsize", FT_UINT16, BASE_HEX, VALS(a2b_slot_sizes)((0 ? (const struct _value_string*)0 : ((a2b_slot_sizes)))), 0x001C, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4352 { &hf_cmp_a2b_downstream_set_dnslots, { "Number of Downstream Slots", "asam-cmp.msg.a2b.downstream_settings.dnslots", FT_UINT16, BASE_DEC, NULL((void*)0), 0x07E0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4353 { &hf_cmp_a2b_downstream_set_dnoffset, { "Downstream Channel Offset", "asam-cmp.msg.a2b.downstream_settings.dnoffset", FT_UINT16, BASE_DEC, NULL((void*)0), 0xF800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4354
4355 { &hf_cmp_a2b_general_set, { "General Settings", "asam-cmp.msg.a2b.general_settings", FT_UINT64, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4356 { &hf_cmp_a2b_general_set_mstr, { "Main Node Enable", "asam-cmp.msg.a2b.general_settings.mstr", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4357 { &hf_cmp_a2b_general_set_standby, { "Standby Mode Enable", "asam-cmp.msg.a2b.general_settings.standby", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4358 { &hf_cmp_a2b_general_set_endsniff, { "Bus Monitor Node Data Output Enable", "asam-cmp.msg.a2b.general_settings.endsniff", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4359 { &hf_cmp_a2b_general_set_discvd, { "Node Discovered", "asam-cmp.msg.a2b.general_settings.discvd", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4360 { &hf_cmp_a2b_general_set_tx2pintl, { "TX 2 Pin Interleave", "asam-cmp.msg.a2b.general_settings.tx2pintl", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4361 { &hf_cmp_a2b_general_set_rx2pintl, { "RX 2 Pin Interleave", "asam-cmp.msg.a2b.general_settings.rx2pintl", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4362 { &hf_cmp_a2b_general_set_tdmmode, { "TDM Mode", "asam-cmp.msg.a2b.general_settings.tdmmode", FT_UINT64, BASE_HEX|BASE_VAL64_STRING0x00000400, VALS64(a2b_tdmmode_values)((0 ? (const struct _val64_string*)0 : ((a2b_tdmmode_values))
))
, 0x00000000000001C0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4363 { &hf_cmp_a2b_general_set_tdmss, { "TDM Channel Size", "asam-cmp.msg.a2b.general_settings.tdmss", FT_BOOLEAN, 64, TFS(&a2b_tdmss_16_32)((0 ? (const struct true_false_string*)0 : ((&a2b_tdmss_16_32
))))
, 0x0000000000000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4364 { &hf_cmp_a2b_general_set_bmmen, { "Bus Monitor Mode Enable", "asam-cmp.msg.a2b.general_settings.bmmen", FT_BOOLEAN, 64, NULL((void*)0), 0x0000000000000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4365 { &hf_cmp_a2b_general_set_bclkrate, { "BCLK Frequency Select", "asam-cmp.msg.a2b.general_settings.bclkrate", FT_UINT64, BASE_HEX|BASE_VAL64_STRING0x00000400, VALS64(a2b_blckrate_values)((0 ? (const struct _val64_string*)0 : ((a2b_blckrate_values)
)))
, 0x0000000000003800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4366 { &hf_cmp_a2b_general_set_i2srate, { "I2S Rate Select", "asam-cmp.msg.a2b.general_settings.i2srate", FT_UINT64, BASE_HEX|BASE_VAL64_STRING0x00000400, VALS64(a2b_i2srate_values)((0 ? (const struct _val64_string*)0 : ((a2b_i2srate_values))
))
, 0x000000000001C000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4367 { &hf_cmp_a2b_general_set_txoffset, { "TX Offset", "asam-cmp.msg.a2b.general_settings.txoffset", FT_UINT64, BASE_HEX, NULL((void*)0), 0x00000000007E0000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4368 { &hf_cmp_a2b_general_set_rxoffset, { "RX Offset", "asam-cmp.msg.a2b.general_settings.rxoffset", FT_UINT64, BASE_HEX, NULL((void*)0), 0x000000001F800000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4369 { &hf_cmp_a2b_general_set_syncoffset, { "SYNC Offset", "asam-cmp.msg.a2b.general_settings.syncoffset", FT_UINT64, BASE_HEX, NULL((void*)0), 0x0000001FE0000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4370 { &hf_cmp_a2b_general_set_rrdiv, { "Reduced Rate Divide Select", "asam-cmp.msg.a2b.general_settings.rrdiv", FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(a2b_rrdiv_values)((0 ? (const struct _val64_string*)0 : ((a2b_rrdiv_values)))), 0x000007E000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4371 { &hf_cmp_a2b_general_set_rrsoffset, { "Reduced Rate SYNC Offset Select", "asam-cmp.msg.a2b.general_settings.rrsoffset", FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(a2b_rrsoffset_values)((0 ? (const struct _val64_string*)0 : ((a2b_rrsoffset_values
))))
, 0x0000180000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4372 { &hf_cmp_a2b_general_set_reserved, { "Reserved", "asam-cmp.msg.a2b.general_settings.reserved", FT_UINT64, BASE_HEX, NULL((void*)0), 0x7FFFE00000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4373 { &hf_cmp_a2b_general_set_raw_cap, { "Raw Capturing", "asam-cmp.msg.a2b.general_settings.raw_capturing", FT_BOOLEAN, 64, TFS(&a2b_raw_capturing)((0 ? (const struct true_false_string*)0 : ((&a2b_raw_capturing
))))
, 0x8000000000000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}},
4374
4375 { &hf_cmp_a2b_data_length, { "Data Length", "asam-cmp.msg.a2b.data_length", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4376 { &hf_cmp_a2b_data, { "Data", "asam-cmp.msg.a2b.data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4377
4378 /* Link State */
4379 { &hf_cmp_link_state_flags, { "Flags", "asam-cmp.msg.link_state.flags", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4380 { &hf_cmp_link_state_flag_link_err, { "Link Error", "asam-cmp.msg.link_state.flags.link_err", FT_BOOLEAN, 16, TFS(&cmp_err_noerr)((0 ? (const struct true_false_string*)0 : ((&cmp_err_noerr
))))
, 0x0001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4381 { &hf_cmp_link_state_flag_reserved, { "Reserved", "asam-cmp.msg.link_state.flags.reserved", FT_BOOLEAN, 16, NULL((void*)0), 0xFFFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4382
4383 { &hf_cmp_link_state_flag_reserved_tx, { "Reserved", "asam-cmp.msg.link_state.flags.reserved_tx", FT_BOOLEAN, 16, NULL((void*)0), 0xFFFF, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4384
4385 { &hf_cmp_link_state_interface_status, { "Interface Status", "asam-cmp.msg.link_state.interface_status", FT_UINT8, BASE_HEX, VALS(link_state_names)((0 ? (const struct _value_string*)0 : ((link_state_names)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)} },
4386 { &hf_cmp_link_state_reserved, { "Reserved", "asam-cmp.msg.link_state.reserved", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4387
4388 /* User-Defined */
4389 { &hf_cmp_vendor_def_vendor_id, { "Vendor ID", "asam-cmp.msg.vendor_def.vendor_id", FT_UINT16, BASE_HEX, VALS(vendor_ids)((0 ? (const struct _value_string*)0 : ((vendor_ids)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4390 { &hf_cmp_vendor_def_vendor_payload_type, { "Vendor Payload Type", "asam-cmp.msg.vendor_def.payload_type", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4391 { &hf_cmp_vendor_def_vendor_payload_data, { "Vendor Payload", "asam-cmp.msg.vendor_def.payload", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4392
4393 /* Control Message Payloads */
4394 /* Data Sink Ready */
4395 { &hf_cmp_ctrl_msg_device_id, { "Device ID", "asam-cmp.msg.dsr.device_id", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4396
4397 /* User Event */
4398 { &hf_cmp_ctrl_msg_event_id, { "Event ID", "asam-cmp.msg.ue.event_id", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4399
4400 /* Vendor specific */
4401 { &hf_cmp_ctrl_msg_vendor_id, { "Vendor ID", "asam-cmp.msg.vs.vendor_id", FT_UINT16, BASE_HEX, VALS(vendor_ids)((0 ? (const struct _value_string*)0 : ((vendor_ids)))), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4402 { &hf_cmp_ctrl_msg_vendor_payload_type, { "Payload Type", "asam-cmp.msg.vs.payload_type", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4403
4404 /* Status Message Payloads */
4405 /* Capture Module Status Message */
4406 { &hf_cmp_status_msg_cm_uptime_ns, { "Uptime (ns)", "asam-cmp.msg.cm.uptime_ns", FT_UINT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4407 { &hf_cmp_status_msg_cm_uptime_s, { "Uptime (s)", "asam-cmp.msg.cm.uptime_s", FT_UINT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4408 { &hf_cmp_status_msg_gm_identity, { "gPTP grandmasterIdentity", "asam-cmp.msg.cm.gm_identity", FT_UINT64, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4409 { &hf_cmp_status_msg_gm_clock_quality, { "gPTP grandmasterClockQuality", "asam-cmp.msg.cm.gm_clock_quality", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4410 { &hf_cmp_status_msg_current_utc_offset, { "gPTP currentUtcOffset", "asam-cmp.msg.cm.current_utc_offset", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4411 { &hf_cmp_status_msg_time_source, { "gPTP timeSource", "asam-cmp.msg.cm.time_source", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4412 { &hf_cmp_status_msg_domain_num, { "gPTP domainNumber", "asam-cmp.msg.cm.domain_number", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4413 { &hf_cmp_status_msg_res, { "Reserved", "asam-cmp.msg.cm.res", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4414 { &hf_cmp_gptp_flags, { "gPTP Flags", "asam-cmp.msg.cm.gptp_flags", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4415
4416 { &hf_cmp_gptp_flags_leap61, { "Leap61", "asam-cmp.msg.cm.gptp_flags.leap61", FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4417 { &hf_cmp_gptp_flags_leap59, { "Leap59", "asam-cmp.msg.cm.gptp_flags.leap59", FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4418 { &hf_cmp_gptp_flags_cur_utco_valid, { "Current UTC Offset Valid", "asam-cmp.msg.cm.gptp_flags.current_utco_valid", FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4419 { &hf_cmp_gptp_flags_ptp_timescale, { "PTP Timescale", "asam-cmp.msg.cm.gptp_flags.ptp_timescale", FT_BOOLEAN, 8, NULL((void*)0), 0x08, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4420 { &hf_cmp_gptp_flags_time_traceable, { "Time Traceable", "asam-cmp.msg.cm.gptp_flags.time_traceable", FT_BOOLEAN, 8, NULL((void*)0), 0x10, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4421 { &hf_cmp_gptp_flags_freq_traceable, { "Frequency Traceable", "asam-cmp.msg.cm.gptp_flags.freq_traceable", FT_BOOLEAN, 8, NULL((void*)0), 0x20, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4422 { &hf_cmp_gptp_flags_reserved, { "Reserved", "asam-cmp.msg.cm.gptp_flags.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0xC0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4423
4424 { &hf_cmp_status_dev_desc_length, { "Length of Device Description", "asam-cmp.msg.cm.dev_desc_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4425 { &hf_cmp_status_dev_desc, { "Device Description", "asam-cmp.msg.cm.dev_desc", FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4426 { &hf_cmp_status_sn_length, { "Length of Serial Number", "asam-cmp.msg.cm.sn_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4427 { &hf_cmp_status_sn, { "Serial Number (SN)", "asam-cmp.msg.cm.sn", FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4428 { &hf_cmp_status_hw_ver_length, { "Length of Hardware Version", "asam-cmp.msg.cm.hw_ver_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4429 { &hf_cmp_status_hw_ver, { "HW version", "asam-cmp.msg.cm.hw_ver", FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4430 { &hf_cmp_status_sw_ver_length, { "Length of Software Version", "asam-cmp.msg.cm.sw_ver_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4431 { &hf_cmp_status_sw_ver, { "SW version", "asam-cmp.msg.cm.sw_ver", FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4432 { &hf_cmp_status_vendor_data_length, { "Length of Vendor Data", "asam-cmp.msg.cm.vendor_data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4433 { &hf_cmp_status_vendor_data, { "Vendor Data", "asam-cmp.msg.cm.vendor_data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4434
4435 /* Technica Engineering Vendor Data */
4436 { &hf_cmp_status_technica_major, { "Major Version", "asam-cmp.msg.cm.vendor_data.technica.major", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4437 { &hf_cmp_status_technica_minor, { "Minor Version", "asam-cmp.msg.cm.vendor_data.technica.minor", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4438 { &hf_cmp_status_technica_product_id, { "Product Identifier", "asam-cmp.msg.cm.vendor_data.technica.product_id", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4439 { &hf_cmp_status_technica_reserved, { "Reserved", "asam-cmp.msg.cm.vendor_data.technica.reserved", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4440 { &hf_cmp_status_technica_meas_size, { "Measurements Size", "asam-cmp.msg.cm.vendor_data.technica.meas_size", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4441 { &hf_cmp_status_technica_meas, { "Measurements Data", "asam-cmp.msg.cm.vendor_data.technica.meas", FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4442 { &hf_cmp_status_technica_meas_flags, { "Flags", "asam-cmp.msg.cm.vendor_data.technica.flags", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4443 { &hf_cmp_status_technica_meas_flag_res, { "Reserved", "asam-cmp.msg.cm.vendor_data.technica.flags.reserved", FT_UINT8, BASE_HEX, NULL((void*)0), 0xFE, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4444 { &hf_cmp_status_technica_meas_flag_ovfl, { "Buffer Overflow", "asam-cmp.msg.cm.vendor_data.technica.flags.overflow", FT_BOOLEAN, 8, TFS(&tfs_technica_buffer_overflow)((0 ? (const struct true_false_string*)0 : ((&tfs_technica_buffer_overflow
))))
, 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4445 { &hf_cmp_status_technica_fill_level, { "Buffer Fill Level", "asam-cmp.msg.cm.vendor_data.technica.fill_level", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4446 { &hf_cmp_status_technica_buffer_size_mbit, { "Buffer Size", "asam-cmp.msg.cm.vendor_data.technica.buffer_size", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_technica_mbit)((0 ? (const struct unit_name_string*)0 : ((&units_technica_mbit
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4447 { &hf_cmp_status_technica_voltage, { "Voltage", "asam-cmp.msg.cm.vendor_data.technica.voltage", FT_FLOAT, BASE_NONE|BASE_UNIT_STRING0x00001000, UNS(&units_volt)((0 ? (const struct unit_name_string*)0 : ((&units_volt))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4448 { &hf_cmp_status_technica_temp_chassis, { "Chassis Temperature", "asam-cmp.msg.cm.vendor_data.technica.temp_chassis", FT_FLOAT, BASE_NONE|BASE_UNIT_STRING0x00001000, UNS(&units_degree_celsius)((0 ? (const struct unit_name_string*)0 : ((&units_degree_celsius
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4449 { &hf_cmp_status_technica_temp_silicon, { "Silicon Temperature", "asam-cmp.msg.cm.vendor_data.technica.temp_silicon", FT_FLOAT, BASE_NONE|BASE_UNIT_STRING0x00001000, UNS(&units_degree_celsius)((0 ? (const struct unit_name_string*)0 : ((&units_degree_celsius
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4450 { &hf_cmp_status_technica_props_size, { "Properties Size", "asam-cmp.msg.cm.vendor_data.technica.props_size", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4451 { &hf_cmp_status_technica_props, { "Properties Data", "asam-cmp.msg.cm.vendor_data.technica.props", FT_NONE, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4452 { &hf_cmp_status_technica_prop, { "Property", "asam-cmp.msg.cm.vendor_data.technica.prop", FT_STRING, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4453 { &hf_cmp_status_technica_leg_fill_level, { "Buffer Fill Level", "asam-cmp.msg.cm.vendor_data.technica_legacy.fill_level", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4454 { &hf_cmp_status_technica_leg_overflow, { "Buffer Overflow", "asam-cmp.msg.cm.vendor_data.technica_legacy.overflow", FT_BOOLEAN, BASE_NONE, TFS(&tfs_technica_buffer_overflow)((0 ? (const struct true_false_string*)0 : ((&tfs_technica_buffer_overflow
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4455 { &hf_cmp_status_technica_leg_buf_s_gbit, { "Buffer Size", "asam-cmp.msg.cm.vendor_data.technica_legacy.buffer_size", FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_technica_gbit)((0 ? (const struct unit_name_string*)0 : ((&units_technica_gbit
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4456 { &hf_cmp_status_technica_leg_voltage_int, { "Voltage Integer Part", "asam-cmp.msg.cm.vendor_data.technica_legacy.voltage_int", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4457 { &hf_cmp_status_technica_leg_voltage_frac, { "Voltage Fractional Part", "asam-cmp.msg.cm.vendor_data.technica_legacy.voltage_frac", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4458 { &hf_cmp_status_technica_leg_voltage, { "Voltage", "asam-cmp.msg.cm.vendor_data.technica_legacy.voltage", FT_DOUBLE, BASE_NONE|BASE_UNIT_STRING0x00001000, UNS(&units_volt)((0 ? (const struct unit_name_string*)0 : ((&units_volt))
))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4459 { &hf_cmp_status_technica_leg_temp_chassis, { "Chassis Temperature", "asam-cmp.msg.cm.vendor_data.technica_legacy.temp_chassis", FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_degree_celsius)((0 ? (const struct unit_name_string*)0 : ((&units_degree_celsius
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4460 { &hf_cmp_status_technica_leg_temp_silicon, { "Silicon Temperature", "asam-cmp.msg.cm.vendor_data.technica_legacy.temp_silicon", FT_INT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_degree_celsius)((0 ? (const struct unit_name_string*)0 : ((&units_degree_celsius
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4461
4462 /* Interface Status Message */
4463 { &hf_cmp_iface_interface, { "Interface", "asam-cmp.msg.iface", FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4464 { &hf_cmp_iface_iface_id, { "Interface ID", "asam-cmp.msg.iface.iface_id", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4465 { &hf_cmp_iface_msg_total_rx, { "Messages Total RX", "asam-cmp.msg.iface.msg_total_rx", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4466 { &hf_cmp_iface_msg_total_tx, { "Messages Total TX", "asam-cmp.msg.iface.msg_total_tx", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4467 { &hf_cmp_iface_msg_dropped_rx, { "Messages Dropped RX", "asam-cmp.msg.iface.msg_drop_rx", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4468 { &hf_cmp_iface_msg_dropped_tx, { "Messages Dropped TX", "asam-cmp.msg.iface.msg_drop_tx", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4469 { &hf_cmp_iface_errs_total_rx, { "Errors Total RX", "asam-cmp.msg.iface.errors_total_rx", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4470 { &hf_cmp_iface_errs_total_tx, { "Errors Total TX", "asam-cmp.msg.iface.errors_total_tx", FT_UINT32, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4471 { &hf_cmp_iface_iface_type, { "Interface Type", "asam-cmp.msg.iface.interface_type", FT_UINT8, BASE_HEX, VALS(data_msg_type_names)((0 ? (const struct _value_string*)0 : ((data_msg_type_names)
)))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4472 { &hf_cmp_iface_iface_status, { "Interface Status", "asam-cmp.msg.iface.interface_status", FT_UINT8, BASE_HEX, VALS(interface_status_names)((0 ? (const struct _value_string*)0 : ((interface_status_names
))))
, 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4473 { &hf_cmp_iface_stream_id_cnt, { "Stream ID count", "asam-cmp.msg.iface.stream_id_count", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4474 { &hf_cmp_iface_reserved, { "Reserved", "asam-cmp.msg.iface.res", FT_UINT16, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4475
4476 /* TODO: Update to CMP 1.1!!! */
4477 { &hf_cmp_iface_feat, { "Feature Support Bitmask", "asam-cmp.msg.iface.feat_supp", FT_UINT32, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4478
4479 { &hf_cmp_iface_feat_can_crr_err, { "CRC Error Supported", "asam-cmp.msg.iface.feat_supp.can.crc_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4480 { &hf_cmp_iface_feat_can_ack_err, { "Ack Error Supported", "asam-cmp.msg.iface.feat_supp.can.ack_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4481 { &hf_cmp_iface_feat_can_pas_ack, { "Passive Ack Supported", "asam-cmp.msg.iface.feat_supp.can.pas_ack", FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4482 { &hf_cmp_iface_feat_can_act_ack, { "Active Ack Supported", "asam-cmp.msg.iface.feat_supp.can.act_ack", FT_BOOLEAN, 32, NULL((void*)0), 0x00000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4483 { &hf_cmp_iface_feat_can_ack_del_err, { "Ack Del Error Supported", "asam-cmp.msg.iface.feat_supp.can.ack_del_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4484 { &hf_cmp_iface_feat_can_form_err, { "Form Error Supported", "asam-cmp.msg.iface.feat_supp.can.form_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4485 { &hf_cmp_iface_feat_can_stuff_err, { "Stuff Error Supported", "asam-cmp.msg.iface.feat_supp.can.stuff_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4486 { &hf_cmp_iface_feat_can_crc_del_err, { "CRC Del Error Supported", "asam-cmp.msg.iface.feat_supp.can.crc_del_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4487 { &hf_cmp_iface_feat_can_eof_err, { "EOF Error Supported", "asam-cmp.msg.iface.feat_supp.can.eof_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4488 { &hf_cmp_iface_feat_can_bit_err, { "Bit Error Supported", "asam-cmp.msg.iface.feat_supp.can.bit_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4489 { &hf_cmp_iface_feat_can_r0, { "R0 Supported", "asam-cmp.msg.iface.feat_supp.can.r0", FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4490 { &hf_cmp_iface_feat_can_srr_dom, { "SRR Dom Supported", "asam-cmp.msg.iface.feat_supp.can.srr_dom", FT_BOOLEAN, 32, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4491 { &hf_cmp_iface_feat_can_gen_err, { "Generic Error Supported", "asam-cmp.msg.iface.feat_supp.can.gen_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00004000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4492
4493 { &hf_cmp_iface_feat_canfd_crr_err, { "CRC Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.crc_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4494 { &hf_cmp_iface_feat_canfd_ack_err, { "Ack Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.ack_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4495 { &hf_cmp_iface_feat_canfd_pas_ack, { "Passive Ack Supported", "asam-cmp.msg.iface.feat_supp.canfd.pas_ack", FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4496 { &hf_cmp_iface_feat_canfd_act_ack, { "Active Ack Supported", "asam-cmp.msg.iface.feat_supp.canfd.act_ack", FT_BOOLEAN, 32, NULL((void*)0), 0x00000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4497 { &hf_cmp_iface_feat_canfd_ack_del_err, { "Ack Del Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.ack_del_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4498 { &hf_cmp_iface_feat_canfd_form_err, { "Form Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.form_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4499 { &hf_cmp_iface_feat_canfd_stuff_err, { "Stuff Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.stuff_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4500 { &hf_cmp_iface_feat_canfd_crc_del_err, { "CRC Del Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.crc_del_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4501 { &hf_cmp_iface_feat_canfd_eof_err, { "EOF Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.eof_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4502 { &hf_cmp_iface_feat_canfd_bit_err, { "Bit Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.bit_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4503 { &hf_cmp_iface_feat_canfd_rsvd, { "RRSV Supported", "asam-cmp.msg.iface.feat_supp.canfd.rsvd", FT_BOOLEAN, 32, NULL((void*)0), 0x00000400, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4504 { &hf_cmp_iface_feat_canfd_srr_dom, { "SRR Dom Supported", "asam-cmp.msg.iface.feat_supp.canfd.srr_dom", FT_BOOLEAN, 32, NULL((void*)0), 0x00000800, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4505 { &hf_cmp_iface_feat_canfd_brs, { "BRS Supported", "asam-cmp.msg.iface.feat_supp.canfd.brs", FT_BOOLEAN, 32, NULL((void*)0), 0x00001000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4506 { &hf_cmp_iface_feat_canfd_esi, { "ESI Supported", "asam-cmp.msg.iface.feat_supp.canfd.esi", FT_BOOLEAN, 32, NULL((void*)0), 0x00002000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4507 { &hf_cmp_iface_feat_canfd_gen_err, { "Generic Error Supported", "asam-cmp.msg.iface.feat_supp.canfd.gen_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00004000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4508
4509 { &hf_cmp_iface_feat_lin_checksum_err, { "Checksum Error Supported", "asam-cmp.msg.iface.feat_supp.lin.checksum_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4510 { &hf_cmp_iface_feat_lin_coll_err, { "Collision Error Supported", "asam-cmp.msg.iface.feat_supp.lin.coll_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4511 { &hf_cmp_iface_feat_lin_parity_err, { "Parity Error Supported", "asam-cmp.msg.iface.feat_supp.lin.parity_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4512 { &hf_cmp_iface_feat_lin_no_slave_resp_err, { "No Slave Response Error Supported", "asam-cmp.msg.iface.feat_supp.lin.no_slave_resp_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4513 { &hf_cmp_iface_feat_lin_sync_err, { "Sync Error Supported", "asam-cmp.msg.iface.feat_supp.lin.sync_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4514 { &hf_cmp_iface_feat_lin_framing_err, { "Framing Error Supported", "asam-cmp.msg.iface.feat_supp.lin.framing_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4515 { &hf_cmp_iface_feat_lin_short_dom_err, { "Short Dom Error Supported", "asam-cmp.msg.iface.feat_supp.lin.short_dom_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4516 { &hf_cmp_iface_feat_lin_long_dom_err, { "Long Dom Error Supported", "asam-cmp.msg.iface.feat_supp.lin.long_dom_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4517 { &hf_cmp_iface_feat_lin_wup, { "WUP Supported", "asam-cmp.msg.iface.feat_supp.lin.wup", FT_BOOLEAN, 32, NULL((void*)0), 0x00000100, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4518
4519 { &hf_cmp_iface_feat_fr_crc_frame_err, { "CRC Frame Error Supported", "asam-cmp.msg.iface.feat_supp.fr.crc_frame_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4520 { &hf_cmp_iface_feat_fr_crc_header_err, { "CRC Header Error Supported", "asam-cmp.msg.iface.feat_supp.fr.crc_header_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4521 { &hf_cmp_iface_feat_fr_nf, { "Null Frame Supported", "asam-cmp.msg.iface.feat_supp.fr.nf", FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4522 { &hf_cmp_iface_feat_fr_sf, { "Startup Frame Supported", "asam-cmp.msg.iface.feat_supp.fr.sf", FT_BOOLEAN, 32, NULL((void*)0), 0x00000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4523 { &hf_cmp_iface_feat_fr_sync, { "Sync Supported", "asam-cmp.msg.iface.feat_supp.fr.sync", FT_BOOLEAN, 32, NULL((void*)0), 0x00000010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4524 { &hf_cmp_iface_feat_fr_wus, { "Wake Up Symbol Supported", "asam-cmp.msg.iface.feat_supp.fr.wus", FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4525 { &hf_cmp_iface_feat_fr_ppi, { "Preamble Indicator Supported", "asam-cmp.msg.iface.feat_supp.fr.ppi", FT_BOOLEAN, 32, NULL((void*)0), 0x00000040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4526 { &hf_cmp_iface_feat_fr_cas, { "Collision Avoidance Symbol Supported", "asam-cmp.msg.iface.feat_supp.fr.cas", FT_BOOLEAN, 32, NULL((void*)0), 0x00000080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4527 { &hf_cmp_iface_feat_fr_channel, { "Channel Supported", "asam-cmp.msg.iface.feat_supp.fr.channel", FT_BOOLEAN, 32, NULL((void*)0), 0x00000200, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4528
4529 { &hf_cmp_iface_feat_eth_fcs_err, { "FCS Error Supported", "asam-cmp.msg.iface.feat_supp.eth.fcs_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4530 { &hf_cmp_iface_feat_eth_too_short, { "Frame too short Supported", "asam-cmp.msg.iface.feat_supp.eth.frame_too_short", FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4531 { &hf_cmp_iface_feat_eth_tx_port_down, { "TX Port Down Supported", "asam-cmp.msg.iface.feat_supp.eth.tx_port_down", FT_BOOLEAN, 32, NULL((void*)0), 0x00000004, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4532 { &hf_cmp_iface_feat_eth_collision, { "Collision Supported", "asam-cmp.msg.iface.feat_supp.eth.collision", FT_BOOLEAN, 32, NULL((void*)0), 0x00000008, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4533 { &hf_cmp_iface_feat_eth_too_long, { "Frame too long Supported", "asam-cmp.msg.iface.feat_supp.eth.frame_too_long", FT_BOOLEAN, 32, NULL((void*)0), 0x00000010, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4534 { &hf_cmp_iface_feat_eth_phy_err, { "PHY Error Supported", "asam-cmp.msg.iface.feat_supp.eth.phy_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000020, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4535 { &hf_cmp_iface_feat_eth_trunc, { "Truncated Frames Supported", "asam-cmp.msg.iface.feat_supp.eth.truncated_frames", FT_BOOLEAN, 32, NULL((void*)0), 0x00000040, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4536 { &hf_cmp_iface_feat_eth_fcs, { "FCS Supported", "asam-cmp.msg.iface.feat_supp.eth.fcs", FT_BOOLEAN, 32, NULL((void*)0), 0x00000080, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4537
4538 { &hf_cmp_iface_feat_10t1s_sym_decode, { "Decode Error Supported", "asam-cmp.msg.iface.feat_supp.10baset1s_symbols.decode_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4539 { &hf_cmp_iface_feat_10t1s_mis_beacon, { "Missing Beacon Error Supported", "asam-cmp.msg.iface.feat_supp.10baset1s_symbols.missing_beacon_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000002, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4540 { &hf_cmp_iface_feat_10t1s_first_beacon, { "First Beacon Supported", "asam-cmp.msg.iface.feat_supp.10baset1s_symbols.first_beacon", FT_BOOLEAN, 32, NULL((void*)0), 0x80000000, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4541
4542 { &hf_cmp_iface_feat_link_err, { "Link Error Supported", "asam-cmp.msg.iface.feat_supp.link_state.link_err", FT_BOOLEAN, 32, NULL((void*)0), 0x00000001, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4543
4544 { &hf_cmp_iface_stream_ids, { "Stream IDs", "asam-cmp.msg.iface.stream_ids", FT_PROTOCOL, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4545 { &hf_cmp_iface_stream_id, { "Stream ID", "asam-cmp.msg.iface.stream_id", FT_UINT8, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4546 { &hf_cmp_iface_vendor_data_len, { "Vendor Data Length", "asam-cmp.msg.iface.vendor_data_len", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4547 { &hf_cmp_iface_vendor_data, { "Vendor Data", "asam-cmp.msg.iface.vendor_data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4548
4549 /* Configuration Status Message */
4550 { &hf_cmp_status_msg_config, { "Data", "asam-cmp.msg.config.data", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4551
4552 /* Data Lost Event Status Message */
4553 { &hf_cmp_dataloss_data_sink_port, { "Data Sink Port", "asam-cmp.msg.dataloss.data_sink_port", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4554 { &hf_cmp_dataloss_device_id, { "Device ID", "asam-cmp.msg.dataloss.device_id", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4555 { &hf_cmp_dataloss_reserved, { "Reserved", "asam-cmp.msg.dataloss.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4556 { &hf_cmp_dataloss_stream_id, { "Stream ID", "asam-cmp.msg.dataloss.stream_id", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4557 { &hf_cmp_dataloss_last_ssq_value, { "Last Stream Sequence Counter Value", "asam-cmp.msg.dataloss.last_ssqc", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4558 { &hf_cmp_dataloss_current_ssq_value, { "Current Stream Sequence Counter Value", "asam-cmp.msg.dataloss.current_ssqc", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4559
4560 /* Time Sync Lost Event Status Message */
4561 { &hf_cmp_timeloss_port_nr, { "Port Number", "asam-cmp.msg.timesyncloss.port_nr", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4562 { &hf_cmp_timeloss_device_id, { "Device ID", "asam-cmp.msg.timesyncloss.device_id", FT_UINT16, BASE_DEC, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4563 { &hf_cmp_timeloss_error_flags, { "Time Sync Loss Error Flags", "asam-cmp.msg.timesyncloss.err_flags", FT_UINT8, BASE_HEX, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4564
4565 { &hf_cmp_timeloss_error_flags_ts, { "Was Time Synced before", "asam-cmp.msg.timesyncloss.err_flags.ts", FT_BOOLEAN, 8, NULL((void*)0), 0x01, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4566 { &hf_cmp_timeloss_error_flags_insync, { "Original CMP Message had at least one INSYNC=0", "asam-cmp.msg.timesyncloss.err_flags.insync", FT_BOOLEAN, 8, NULL((void*)0), 0x02, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4567 { &hf_cmp_timeloss_error_flags_delta, { "Configured Time Delta was exceeded", "asam-cmp.msg.timesyncloss.err_flags.delta", FT_BOOLEAN, 8, NULL((void*)0), 0x04, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4568 { &hf_cmp_timeloss_error_flags_reserved, { "Reserved", "asam-cmp.msg.timesyncloss.err_flags.res", FT_UINT8, BASE_HEX, NULL((void*)0), 0xF8, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4569
4570 /* Vendor Specific Status Message */
4571 { &hf_cmp_status_msg_vendor_specific, { "Vendor Specific", "asam-cmp.msg.vendor_specific", FT_BYTES, BASE_NONE, NULL((void*)0), 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
4572 };
4573
4574 static int *ett[] = {
4575 &ett_asam_cmp,
4576 &ett_asam_cmp_header,
4577 &ett_asam_cmp_timestamp,
4578 &ett_asam_cmp_common_flags,
4579 &ett_asam_cmp_trans_opts,
4580 &ett_asam_cmp_payload,
4581 &ett_asam_cmp_payload_flags,
4582 &ett_asam_cmp_payload_data,
4583 &ett_asam_cmp_lin_pid,
4584 &ett_asam_cmp_can_id,
4585 &ett_asam_cmp_can_crc,
4586 &ett_asam_cmp_digital_sample,
4587 &ett_asam_cmp_uart_data,
4588 &ett_asam_cmp_analog_sample,
4589 &ett_asam_cmp_i2c_data_entry,
4590 &ett_asam_cmp_a2b_upstream_settings,
4591 &ett_asam_cmp_a2b_downstream_settings,
4592 &ett_asam_cmp_a2b_general_settings,
4593 &ett_asam_cmp_status_cm_flags,
4594 &ett_asam_cmp_status_cm_uptime,
4595 &ett_asam_cmp_status_timeloss_flags,
4596 &ett_asam_cmp_status_interface,
4597 &ett_asam_cmp_status_feature_support,
4598 &ett_asam_cmp_status_stream_ids,
4599 &ett_asam_cmp_status_technica,
4600 &ett_asam_cmp_status_technica_meas,
4601 &ett_asam_cmp_status_technica_flags,
4602 &ett_asam_cmp_status_technica_props
4603 };
4604
4605 static ei_register_info ei[] = {
4606 { &ei_asam_cmp_length_mismatch, {"asam-cmp.expert.length_mismatch", PI_MALFORMED0x07000000, PI_WARN0x00600000, "Malformed message, length mismatch!", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
} },
4607 { &ei_asam_cmp_unsupported_crc_not_zero, {"asam-cmp.export.deactivated_crc_not_zero", PI_MALFORMED0x07000000, PI_WARN0x00600000, "Unsupported CRC is not zero!", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
} },
4608 { &ei_asam_cmp_too_deep, {"asam-cmp.expert.too_deep", PI_UNDECODED0x05000000, PI_WARN0x00600000, "Ethernet frame nested too deep, not dissected", EXPFILL0, ((void*)0), 0, ((void*)0), {0, {((void*)0), ((void*)0), FT_NONE
, BASE_NONE, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE
, -1, ((void*)0)}}
} },
4609 };
4610
4611 /* UATs for user_data fields */
4612 static uat_field_t asam_cmp_device_id_uat_fields[] = {
4613 UAT_FLD_HEX(asam_cmp_devices, id, "Device ID", "Device ID (hex uint16 without leading 0x)"){"id", "Device ID", PT_TXTMOD_STRING,{uat_fld_chk_num_hex,asam_cmp_devices_id_set_cb
,asam_cmp_devices_id_tostr_cb},{0,0,0},0,"Device ID (hex uint16 without leading 0x)"
,((void*)0)}
,
4614 UAT_FLD_CSTRING(asam_cmp_devices, name, "Device Name", "Device Name (string)"){"name", "Device Name", PT_TXTMOD_STRING,{uat_fld_chk_str,asam_cmp_devices_name_set_cb
,asam_cmp_devices_name_tostr_cb},{0,0,0},0,"Device Name (string)"
,((void*)0)}
,
4615 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
4616 };
4617
4618 static uat_field_t asam_cmp_interface_id_uat_fields[] = {
4619 UAT_FLD_HEX(asam_cmp_interfaces, id, "Interface ID", "Interface ID (hex uint32 without leading 0x)"){"id", "Interface ID", PT_TXTMOD_STRING,{uat_fld_chk_num_hex,
asam_cmp_interfaces_id_set_cb,asam_cmp_interfaces_id_tostr_cb
},{0,0,0},0,"Interface ID (hex uint32 without leading 0x)",((
void*)0)}
,
4620 UAT_FLD_CSTRING(asam_cmp_interfaces, name, "Interface Name", "Interface Name (string)"){"name", "Interface Name", PT_TXTMOD_STRING,{uat_fld_chk_str,
asam_cmp_interfaces_name_set_cb,asam_cmp_interfaces_name_tostr_cb
},{0,0,0},0,"Interface Name (string)",((void*)0)}
,
4621 UAT_FLD_HEX(asam_cmp_interfaces, bus_id, "Bus ID", "Bus ID of the Interface (hex uint16 without leading 0x)"){"bus_id", "Bus ID", PT_TXTMOD_STRING,{uat_fld_chk_num_hex,asam_cmp_interfaces_bus_id_set_cb
,asam_cmp_interfaces_bus_id_tostr_cb},{0,0,0},0,"Bus ID of the Interface (hex uint16 without leading 0x)"
,((void*)0)}
,
4622 UAT_END_FIELDS{((void*)0),((void*)0),PT_TXTMOD_NONE,{0,0,0},{0,0,0},0,0,((void
*)0)}
4623 };
4624
4625 proto_asam_cmp = proto_register_protocol("ASAM Capture Module Protocol", "ASAM CMP", "asam-cmp");
4626 proto_register_field_array(proto_asam_cmp, hf, array_length(hf)(sizeof (hf) / sizeof (hf)[0]));
4627 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
4628 asam_cmp_module = prefs_register_protocol(proto_asam_cmp, NULL((void*)0));
4629
4630 expert_module_asam_cmp = expert_register_protocol(proto_asam_cmp);
4631 expert_register_field_array(expert_module_asam_cmp, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
4632
4633 /* Configuration Items */
4634 asam_cmp_deviceid_uat = uat_new("ASAM CMP Devices",
4635 sizeof(generic_one_id_string_t), /* record size */
4636 DATAFILE_ASAM_CMP_DEVICES_IDS"ASAM_CMP_devices", /* filename */
4637 true1, /* from profile */
4638 (void**)&asam_cmp_devices, /* data_ptr */
4639 &asam_cmp_devices_num, /* numitems_ptr */
4640 UAT_AFFECTS_DISSECTION0x00000001, /* but not fields */
4641 NULL((void*)0), /* help */
4642 copy_generic_one_id_string_cb, /* copy callback */
4643 update_generic_one_identifier_16bit, /* update callback */
4644 free_generic_one_id_string_cb, /* free callback */
4645 post_update_asam_cmp_devices_cb, /* post update callback */
4646 reset_asam_cmp_devices_cb, /* reset callback */
4647 asam_cmp_device_id_uat_fields /* UAT field definitions */
4648 );
4649
4650 prefs_register_uat_preference(asam_cmp_module, "_udf_asam_cmp_devices", "Devices",
4651 "A table to define names of Devices.", asam_cmp_deviceid_uat);
4652
4653 asam_cmp_interfaceid_uat = uat_new("ASAM CMP Interfaces",
4654 sizeof(interface_config_t), /* record size */
4655 DATAFILE_ASAM_CMP_IFACE_IDS"ASAM_CMP_interfaces", /* filename */
4656 true1, /* from profile */
4657 (void**)&asam_cmp_interfaces, /* data_ptr */
4658 &asam_cmp_interface_num, /* numitems_ptr */
4659 UAT_AFFECTS_DISSECTION0x00000001, /* but not fields */
4660 NULL((void*)0), /* help */
4661 copy_interface_config_cb, /* copy callback */
4662 update_interface_config, /* update callback */
4663 free_interface_config_cb, /* free callback */
4664 post_update_interface_config_cb, /* post update callback */
4665 reset_interface_config_cb, /* reset callback */
4666 asam_cmp_interface_id_uat_fields /* UAT field definitions */
4667 );
4668
4669 prefs_register_uat_preference(asam_cmp_module, "_udf_asam_cmp_interfaces", "Interfaces",
4670 "A table to define names and mappings of Interfaces.", asam_cmp_interfaceid_uat);
4671
4672 prefs_register_bool_preference(asam_cmp_module, "try_heuristic_first",
4673 "Try heuristic sub-dissectors first",
4674 "Try to decode a packet using an heuristic sub-dissector"
4675 " before using a sub-dissector registered to \"decode as\"",
4676 &heuristic_first);
4677
4678 prefs_register_bool_preference(asam_cmp_module, "use_old_canid_11bit_format",
4679 "Use old encoding of 11bit CAN/CAN-FD IDs",
4680 "Use the old encoding of 11bit CAN/CAN-FD IDs",
4681 &old_11bit_canid_encoding);
4682}
4683
4684void
4685proto_reg_handoff_asam_cmp(void) {
4686 dissector_handle_t asam_cmp_handle;
4687
4688 asam_cmp_handle = register_dissector("asam-cmp", dissect_asam_cmp, proto_asam_cmp);
4689 eth_handle = find_dissector("eth_maybefcs");
4690
4691 dissector_add_for_decode_as("ethertype", asam_cmp_handle);
4692 dissector_add_for_decode_as_with_preference("udp.port", asam_cmp_handle);
4693}
4694
4695 /*
4696 * Editor modelines
4697 *
4698 * Local Variables:
4699 * c-basic-offset: 4
4700 * tab-width: 8
4701 * indent-tabs-mode: nil
4702 * End:
4703 *
4704 * ex: set shiftwidth=4 tabstop=8 expandtab:
4705 * :indentSize=4:tabSize=8:noTabs=true:
4706 */