Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-ieee17221.c
blob280d6b018fa5babe51267b44605cbd217ba5525e
1 /* packet-ieee17221.c
2 * Dissector for IEEE P1722.1
3 * Copyright 2011-2013, Thomas Bottom <tom.bottom@labxtechnologies.com>
4 * Chris Pane <chris.pane@labxtechnologies.com>
5 * Chris Wulff <chris.wulff@labxtechnologies.com>
7 * Copyright 2011, Andy Lucas <andy@xmos.com>
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
13 * SPDX-License-Identifier: GPL-2.0-or-later
17 /* DEV NOTES
18 * This file uses 3 space indentation
21 #include "config.h"
23 #include <epan/packet.h>
24 #include <wsutil/array.h>
26 void proto_register_17221(void);
27 void proto_reg_handoff_17221(void);
29 static dissector_handle_t avb17221_handle;
31 /* 17221 Offsets */
32 #define P1722_HEADER_OFFSET 12
34 /* 1722.1 ADP Offsets */
35 #define ADP_CD_OFFSET 0
36 #define ADP_VERSION_OFFSET 1
37 #define ADP_VALID_TIME_OFFSET 2
38 #define ADP_CD_LENGTH_OFFSET 3
39 #define ADP_ENTITY_ID_OFFSET 4
40 #define ADP_ENTITY_MODEL_ID_OFFSET P1722_HEADER_OFFSET+0
41 #define ADP_ENTITY_CAP_OFFSET P1722_HEADER_OFFSET+8
42 #define ADP_TALKER_STREAM_SRCS_OFFSET P1722_HEADER_OFFSET+12
43 #define ADP_TALKER_CAP_OFFSET P1722_HEADER_OFFSET+14
44 #define ADP_LISTENER_STREAM_SINKS_OFFSET P1722_HEADER_OFFSET+16
45 #define ADP_LISTENER_CAP_OFFSET P1722_HEADER_OFFSET+18
46 #define ADP_CONTROLLER_CAP_OFFSET P1722_HEADER_OFFSET+20
47 #define ADP_AVAIL_INDEX_OFFSET P1722_HEADER_OFFSET+24
48 #define ADP_AS_GM_ID_OFFSET P1722_HEADER_OFFSET+28
49 #define ADP_GPTP_DOMAIN_NUMBER_OFFSET P1722_HEADER_OFFSET+36
50 #define ADP_IDENTIFY_CONTROL_INDEX P1722_HEADER_OFFSET+40
51 #define ADP_INTERFACE_INDEX P1722_HEADER_OFFSET+42
52 #define ADP_ASSOC_ID_OFFSET P1722_HEADER_OFFSET+44
54 /* Bit Field Masks */
56 #define ADP_MSG_TYPE_MASK 0x0f
57 #define ADP_VALID_TIME_MASK 0xf8
58 #define ADP_CD_LENGTH_MASK 0x07ff
60 /* message_type */
62 #define ADP_ENTITY_AVAILABLE_MESSAGE 0x00
63 #define ADP_ENTITY_DEPARTING_MESSAGE 0x01
64 #define ADP_ENTITY_DISCOVER_MESSAGE 0x02
66 /* entity_capabilities_flags */
67 #define ADP_EFU_MODE_BITMASK 0x00000001
68 #define ADP_ADDRESS_ACCESS_BITMASK 0x00000002
69 #define ADP_GATEWAY_ENTITY_BITMASK 0x00000004
70 #define ADP_AEM_SUPPORTED_BITMASK 0x00000008
71 #define ADP_LEGACY_AVC_BITMASK 0x00000010
72 #define ADP_ASSOC_ID_SUPPORT_BITMASK 0x00000020
73 #define ADP_ASSOC_ID_VALID_BITMASK 0x00000040
74 #define ADP_VENDOR_UNIQUE_BITMASK 0x00000080
75 #define ADP_CLASS_A_SUPPORTED_BITMASK 0x00000100
76 #define ADP_CLASS_B_SUPPORTED_BITMASK 0x00000200
77 #define ADP_AS_SUPPORTED_BITMASK 0x00000400
79 /* talker capabilities flags */
80 #define ADP_TALK_IMPLEMENTED_BITMASK 0x0001
81 #define ADP_TALK_OTHER_SRC_BITMASK 0x0200
82 #define ADP_TALK_CONTROL_SRC_BITMASK 0x0400
83 #define ADP_TALK_MEDIA_CLK_SRC_BITMASK 0x0800
84 #define ADP_TALK_SMPTE_SRC_BITMASK 0x1000
86 #define ADP_TALK_MIDI_SRC_BITMASK 0x2000
87 #define ADP_TALK_AUDIO_SRC_BITMASK 0x4000
88 #define ADP_TALK_VIDEO_SRC_BITMASK 0x8000
90 /* listener capabilities flags */
91 #define ADP_LIST_IMPLEMENTED_BITMASK 0x0001
92 #define ADP_LIST_OTHER_SINK_BITMASK 0x0200
93 #define ADP_LIST_CONTROL_SINK_BITMASK 0x0400
94 #define ADP_LIST_MEDIA_CLK_SINK_BITMASK 0x0800
95 #define ADP_LIST_SMPTE_SINK_BITMASK 0x1000
96 #define ADP_LIST_MIDI_SINK_BITMASK 0x2000
97 #define ADP_LIST_AUDIO_SINK_BITMASK 0x4000
98 #define ADP_LIST_VIDEO_SINK_BITMASK 0x8000
100 /* Controller capabilities flags */
101 #define ADP_CONT_IMPLEMENTED_BITMASK 0x0001
102 #define ADP_CONT_LAYER3_PROXY_BITMASK 0x0002
104 /* Default audio formats fields */
105 #define ADP_DEF_AUDIO_SAMPLE_RATES_MASK 0xFC
106 #define ADP_DEF_AUDIO_MAX_CHANS_MASK 0x03FC
107 #define ADP_DEF_AUDIO_SAF_MASK 0x0002
108 #define ADP_DEF_AUDIO_FLOAT_MASK 0x0001
110 /* Default sample rates flags */
111 #define ADP_SAMP_RATE_44K1_BITMASK 0x01<<2
112 #define ADP_SAMP_RATE_48K_BITMASK 0x02<<2
113 #define ADP_SAMP_RATE_88K2_BITMASK 0x04<<2
114 #define ADP_SAMP_RATE_96K_BITMASK 0x08<<2
115 #define ADP_SAMP_RATE_176K4_BITMASK 0x10<<2
116 #define ADP_SAMP_RATE_192K_BITMASK 0x20<<2
118 /* channel_formats flags */
120 #define ADP_CHAN_FORMAT_MONO (0x00000001)
121 #define ADP_CHAN_FORMAT_2CH (0x00000002)
122 #define ADP_CHAN_FORMAT_3CH (0x00000004)
123 #define ADP_CHAN_FORMAT_4CH (0x00000008)
124 #define ADP_CHAN_FORMAT_5CH (0x00000010)
125 #define ADP_CHAN_FORMAT_6CH (0x00000020)
126 #define ADP_CHAN_FORMAT_7CH (0x00000040)
127 #define ADP_CHAN_FORMAT_8CH (0x00000080)
128 #define ADP_CHAN_FORMAT_10CH (0x00000100)
129 #define ADP_CHAN_FORMAT_12CH (0x00000200)
130 #define ADP_CHAN_FORMAT_14CH (0x00000400)
131 #define ADP_CHAN_FORMAT_16CH (0x00000800)
132 #define ADP_CHAN_FORMAT_18CH (0x00001000)
133 #define ADP_CHAN_FORMAT_20CH (0x00002000)
134 #define ADP_CHAN_FORMAT_22CH (0x00004000)
135 #define ADP_CHAN_FORMAT_24CH (0x00008000)
137 /******************************************************************************/
138 /* 1722.1 ACMP Offsets */
139 #define ACMP_CD_OFFSET 0
140 #define ACMP_VERSION_OFFSET 1
141 #define ACMP_STATUS_FIELD_OFFSET 2
142 #define ACMP_CD_LENGTH_OFFSET 2
143 #define ACMP_STREAM_ID_OFFSET 4
144 #define ACMP_CONTROLLER_GUID_OFFSET 12
145 #define ACMP_TALKER_GUID_OFFSET 20
146 #define ACMP_LISTENER_GUID_OFFSET 28
147 #define ACMP_TALKER_UNIQUE_ID_OFFSET 36
148 #define ACMP_LISTENER_UNIQUE_ID_OFFSET 38
149 #define ACMP_DEST_MAC_OFFSET 40
150 #define ACMP_CONNECTION_COUNT_OFFSET 46
151 #define ACMP_SEQUENCE_ID_OFFSET 48
152 #define ACMP_FLAGS_OFFSET 50
153 #define ACMP_VLAN_ID_OFFSET 52
155 /* Bit Field Masks */
157 #define ACMP_MSG_TYPE_MASK 0x0F
158 #define ACMP_STATUS_FIELD_MASK 0xF8
159 #define ACMP_CD_LENGTH_MASK 0x07FF
161 /* message_type */
163 #define ACMP_CONNECT_TX_COMMAND 0
164 #define ACMP_CONNECT_TX_RESPONSE 1
165 #define ACMP_DISCONNECT_TX_COMMAND 2
166 #define ACMP_DISCONNECT_TX_RESPONSE 3
167 #define ACMP_GET_TX_STATE_COMMAND 4
168 #define ACMP_GET_TX_STATE_RESPONSE 5
169 #define ACMP_CONNECT_RX_COMMAND 6
170 #define ACMP_CONNECT_RX_RESPONSE 7
171 #define ACMP_DISCONNECT_RX_COMMAND 8
172 #define ACMP_DISCONNECT_RX_RESPONSE 9
173 #define ACMP_GET_RX_STATE_COMMAND 10
174 #define ACMP_GET_RX_STATE_RESPONSE 11
175 #define ACMP_GET_TX_CONNECTION_COMMAND 12
176 #define ACMP_GET_TX_CONNECTION_RESPONSE 13
178 /* status_field */
180 #define ACMP_STATUS_SUCCESS 0
181 #define ACMP_STATUS_LISTENER_UNKNOWN_ID 1
182 #define ACMP_STATUS_TALKER_UNKNOWN_ID 2
183 #define ACMP_STATUS_TALKER_DEST_MAC_FAIL 3
184 #define ACMP_STATUS_TALKER_NO_STREAM_INDEX 4
185 #define ACMP_STATUS_TALKER_NO_BANDWIDTH 5
186 #define ACMP_STATUS_TALKER_EXCLUSIVE 6
187 #define ACMP_STATUS_LISTENER_TALKER_TIMEOUT 7
188 #define ACMP_STATUS_LISTENER_EXCLUSIVE 8
189 #define ACMP_STATUS_STATE_UNAVAILABLE 9
190 #define ACMP_STATUS_NOT_CONNECTED 10
191 #define ACMP_STATUS_NO_SUCH_CONNECTION 11
192 #define ACMP_STATUS_COULD_NOT_SEND_MESSAGE 12
193 #define ACMP_STATUS_DEFAULT_SET_DIFFERENT 15
194 #define ACMP_STATUS_NOT_SUPPORTED 31
196 /* ACMP flags */
197 #define ACMP_FLAG_CLASS_B_BITMASK 0x0001
198 #define ACMP_FLAG_FAST_CONNECT_BITMASK 0x0002
199 #define ACMP_FLAG_SAVED_STATE_BITMASK 0x0004
200 #define ACMP_FLAG_STREAMING_WAIT_BITMASK 0x0008
201 #define ACMP_FLAG_SUPPORTS_ENCRYPTED_BITMASK 0x0010
202 #define ACMP_FLAG_ENCRYPTED_PDU_BITMASK 0x0020
203 #define ACMP_FLAG_TALKER_FAILED_BITMASK 0x0040
205 /******************************************************************************/
206 /* AECP Common Offsets */
207 #define AECP_OFFSET_VERSION 1
208 #define AECP_OFFSET_CD_LENGTH 2
209 #define AECP_OFFSET_TARGET_GUID 4
210 #define AECP_OFFSET_CONTROLLER_GUID 12
211 #define AECP_OFFSET_SEQUENCE_ID 20
212 #define AECP_OFFSET_U_FLAG 22
213 #define AECP_OFFSET_COMMAND_TYPE 22
215 #define AECP_OFFSET_STATUS_CODE 2
217 /* AECP Address Access Command Specific Offsets */
218 #define AECP_AA_OFFSET_COUNT 22
219 #define AECP_AA_OFFSET_TLVS_START 24
221 /* AECP AEM Command Specific Offsets */
222 /* Note that these values include the 12 byte common header */
224 /* ACQUIRE_ENTITY */
225 #define AECP_OFFSET_ACQUIRE_ENTITY_FLAGS 24
226 #define AECP_OFFSET_ACQUIRE_ENTITY_OWNER_GUID 28
227 #define AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_TYPE 36
228 #define AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_INDEX 38
230 /* LOCK_ENTITY */
231 #define AECP_OFFSET_LOCK_ENTITY_FLAGS 24
232 #define AECP_OFFSET_LOCK_ENTITY_LOCKED_GUID 28
234 /* READ/WRITE_DESCRIPTOR */
235 #define AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX 24
236 #define AECP_OFFSET_DESCRIPTOR_DESCRIPTOR 28
237 #define AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_TYPE 28
238 #define AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_INDEX 30
240 /* GET/SET_CONFIGURATION */
241 #define AECP_OFFSET_CONFIGURATION_CONFIGURATION_INDEX 26
243 /* GET/SET_STREAM_FORMAT */
244 #define AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_TYPE 24
245 #define AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_INDEX 26
246 #define AECP_OFFSET_STREAM_FORMAT_STREAM_FORMAT 28
248 /* GET/SET_VIDEO_FORMAT */
249 #define AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_TYPE 24
250 #define AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_INDEX 26
251 #define AECP_OFFSET_VIDEO_FORMAT_FORMAT_SPECIFIC 28
252 #define AECP_OFFSET_VIDEO_FORMAT_ASPECT_RATIO 32
253 #define AECP_OFFSET_VIDEO_FORMAT_COLOR_SPACE 34
254 #define AECP_OFFSET_VIDEO_FORMAT_FRAME_SIZE 36
256 /* GET/SET_SENSOR_FORMAT */
257 #define AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_TYPE 24
258 #define AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_INDEX 26
259 #define AECP_OFFSET_SENSOR_FORMAT_SENSOR_FORMAT 28
261 /* GET/SET_STREAM_INFO */
262 #define AECP_OFFSET_STREAM_INFO_DESCRIPTOR_TYPE 24
263 #define AECP_OFFSET_STREAM_INFO_DESCRIPTOR_INDEX 26
264 #define AECP_OFFSET_STREAM_INFO_FLAGS 28
265 #define AECP_OFFSET_STREAM_INFO_STREAM_FORMAT 32
266 #define AECP_OFFSET_STREAM_INFO_STREAM_ID 40
267 #define AECP_OFFSET_STREAM_INFO_MSRP_ACCUMULATED_LATENCY 48
268 #define AECP_OFFSET_STREAM_INFO_STREAM_DEST_MAC 52
269 #define AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_CODE 58
270 #define AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_BRIDGE_ID 60
271 /** #define AECP_OFFSET_STREAM_INFO_STREAM_VLAN_ID 68 **/
273 /* GET/SET_NAME */
274 #define AECP_OFFSET_NAME_DESCRIPTOR_TYPE 24
275 #define AECP_OFFSET_NAME_DESCRIPTOR_INDEX 26
276 #define AECP_OFFSET_NAME_NAME_INDEX 28
277 #define AECP_OFFSET_NAME_CONFIGURATION_INDEX 30
278 #define AECP_OFFSET_NAME_NAME 32
280 /* GET/SET_ASSOCIATION_ID */
281 #define AECP_OFFSET_ASSOCIATION_ID_ASSOCIATION_ID 24
283 /* GET/SET_SAMPLING_RATE */
284 #define AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_TYPE 24
285 #define AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_INDEX 26
286 #define AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE 28
288 /* GET/SET_CLOCK_SOURCE */
289 #define AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_TYPE 24
290 #define AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_INDEX 26
291 #define AECP_OFFSET_CLOCK_SOURCE_CLOCK_SOURCE_INDEX 28
293 /* GET/SET_CONTROL, GET/SET_MIXER */
294 #define AECP_OFFSET_CONTROL_DESCRIPTOR_TYPE 24
295 #define AECP_OFFSET_CONTROL_DESCRIPTOR_INDEX 26
296 #define AECP_OFFSET_CONTROL_VALUES 28
298 /* INCREMENT/DECREMENT_CONTROL */
299 #define AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_TYPE 24
300 #define AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_INDEX 26
301 #define AECP_OFFSET_INCDEC_CONTROL_INDEX_COUNT 28
302 #define AECP_OFFSET_INCDEC_CONTROL_INDEX_LIST 32
304 /* GET/SET_SIGNAL_SELECTOR */
305 #define AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_TYPE 24
306 #define AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_INDEX 26
307 #define AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_TYPE 28
308 #define AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_INDEX 30
309 #define AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_OUTPUT 32
311 /* GET/SET_MATRIX */
312 #define AECP_OFFSET_MATRIX_DESCRIPTOR_TYPE 24
313 #define AECP_OFFSET_MATRIX_DESCRIPTOR_INDEX 26
314 #define AECP_OFFSET_MATRIX_MATRIX_COLUMN 28
315 #define AECP_OFFSET_MATRIX_MATRIX_ROW 30
316 #define AECP_OFFSET_MATRIX_REGION_WIDTH 32
317 #define AECP_OFFSET_MATRIX_REGION_HEIGHT 34
318 #define AECP_OFFSET_MATRIX_REP 36
319 #define AECP_OFFSET_MATRIX_DIRECTION 36
320 #define AECP_OFFSET_MATRIX_VALUE_COUNT 36
321 #define AECP_OFFSET_MATRIX_ITEM_OFFSET 38
322 #define AECP_OFFSET_MATRIX_VALUES 40
324 /* START/STOP_STREAMING */
325 #define AECP_OFFSET_STREAMING_DESCRIPTOR_TYPE 24
326 #define AECP_OFFSET_STREAMING_DESCRIPTOR_INDEX 26
328 /* REGISTER/DEREGISTER_UNSOLICITED_NOTIFICATION */
329 /* No additional fields */
331 /* IDENTIFY_NOTIFICATION */
332 #define AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_TYPE 24
333 #define AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_INDEX 26
335 /* GET_AVB_INFO */
336 #define AECP_OFFSET_AVB_INFO_DESCRIPTOR_TYPE 24
337 #define AECP_OFFSET_AVB_INFO_DESCRIPTOR_INDEX 26
338 #define AECP_OFFSET_AVB_INFO_AS_GRANDMASTER_ID 28
339 #define AECP_OFFSET_AVB_INFO_PROPAGATION_DELAY 36
340 #define AECP_OFFSET_AVB_INFO_AS_DOMAIN_NUMBER 40
341 #define AECP_OFFSET_AVB_INFO_FLAGS 41
342 #define AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS_COUNT 42
343 #define AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS 44
345 /* GET_AS_PATH */
346 #define AECP_OFFSET_AS_PATH_DESCRIPTOR_INDEX 24
347 #define AECP_OFFSET_AS_PATH_COUNT 26
348 #define AECP_OFFSET_AS_PATH_PATH_SEQUENCE 28
350 /* GET_COUNTERS */
351 #define AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE 24
352 #define AECP_OFFSET_COUNTERS_DESCRIPTOR_INDEX 26
353 #define AECP_OFFSET_COUNTERS_VALID 28
354 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_UP 32
355 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_DOWN 36
356 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_TX 40
357 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_RX 44
358 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_RX_CRC_ERROR 48
359 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_GPTP_GM_CHANGED 52
360 #define AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_LOCKED 32
361 #define AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_UNLOCKED 36
362 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_LOCKED 32
363 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_UNLOCKED 36
364 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_STREAM_RESET 40
365 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_SEQ_NUM_MISMATCH 44
366 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_RESET 48
367 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_UNCERTAIN 52
368 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_VALID 56
369 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_NOT_VALID 60
370 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_UNSUPPORTED_FORMAT 64
371 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_LATE_TIMESTAMP 68
372 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_EARLY_TIMESTAMP 72
373 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_TX 76
374 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_RX 80
375 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_8 128
376 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_7 132
377 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_6 136
378 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_5 140
379 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_4 144
380 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_3 148
381 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_2 152
382 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_1 156
384 /* GET_AUDIO_MAP, GET_VIDEO_MAP, GET_SENSOR_MAP */
385 #define AECP_OFFSET_MAP_DESCRIPTOR_TYPE 24
386 #define AECP_OFFSET_MAP_DESCRIPTOR_INDEX 26
387 #define AECP_OFFSET_MAP_MAP_INDEX 28
388 #define AECP_OFFSET_MAP_NUMBER_OF_MAPS 30
389 #define AECP_OFFSET_MAP_NUMBER_OF_MAPPINGS 32
390 #define AECP_OFFSET_MAP_MAPPINGS 36
392 /* ADD/REMOVE_AUDIO_MAPPINGS, ADD/REMOVE_VIDEO_MAPPINGS, ADD/REMOVE_SENSOR_MAPPINGS */
393 #define AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_TYPE 24
394 #define AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_INDEX 26
395 #define AECP_OFFSET_ADDREM_MAP_NUMBER_OF_MAPPINGS 28
396 #define AECP_OFFSET_ADDREM_MAP_MAPPINGS 32
398 /* START_OPERATION */
399 #define AECP_OFFSET_START_OPERATION_DESCRIPTOR_TYPE 24
400 #define AECP_OFFSET_START_OPERATION_DESCRIPTOR_INDEX 26
401 #define AECP_OFFSET_START_OPERATION_OPERATION_ID 28
402 #define AECP_OFFSET_START_OPERATION_OPERATION_TYPE 30
403 #define AECP_OFFSET_START_OPERATION_VALUES 32
405 /* ABORT_OPERATION */
406 #define AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_TYPE 24
407 #define AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_INDEX 26
408 #define AECP_OFFSET_ABORT_OPERATION_OPERATION_ID 28
410 /* OPERATION_STATUS */
411 #define AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_TYPE 24
412 #define AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_INDEX 26
413 #define AECP_OFFSET_OPERATION_STATUS_OPERATION_ID 28
414 #define AECP_OFFSET_OPERATION_STATUS_PERCENT_COMPLETE 30
416 /* AUTH_ADD/DELETE_KEY, AUTH_GET_KEY */
417 #define AECP_OFFSET_AUTH_KEY_KEY_EUI 24
418 #define AECP_OFFSET_AUTH_KEY_KEY_TYPE 32
419 #define AECP_OFFSET_AUTH_KEY_KEY_LENGTH 32
420 #define AECP_OFFSET_AUTH_KEY_KEY 36
422 /* AUTH_GET_KEY_LIST */
423 #define AECP_OFFSET_AUTH_GET_KEY_LIST_KEYCHAIN_ID 24
424 #define AECP_OFFSET_AUTH_GET_KEY_LIST_NUMBER_OF_KEYS 24
426 /* AUTH_ADD_KEY_TO_KEYCHAIN, AUTH_DELETE_KEY_FROM_KEYCHAIN */
427 #define AECP_OFFSET_AUTH_KEYCHAIN_KEYCHAIN_ID 24
428 #define AECP_OFFSET_AUTH_KEYCHAIN_KEY_EUI 28
430 /* AUTH_GET_KEYCHAIN_LIST */
431 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_KEYCHAIN_ID 24
432 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_LIST_INDEX 26
433 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_LISTS 28
434 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_KEYS 30
435 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_KEY_EUIS 32
437 /* AUTH_GET_IDENTITY */
438 #define AECP_OFFSET_AUTH_GET_IDENTITY_KEY_GUID 24
439 #define AECP_OFFSET_AUTH_GET_IDENTITY_SIGNATURE 32
441 /* AUTH_ADD/DELETE_TOKEN */
442 #define AECP_OFFSET_AUTH_TOKEN_TOKEN_LENGTH 24
443 #define AECP_OFFSET_AUTH_TOKEN_AUTHENTICATION_TOKEN 28
445 /* AUTHENTICATE/DEAUTHENTICATE */
446 #define AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_TYPE 24
447 #define AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_INDEX 26
448 #define AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH 28
449 #define AECP_OFFSET_AUTHENTICATE_AUTH_TOKEN 32
451 /* ENABLE/DISABLE_TRANSPORT_SECURITY */
452 #define AECP_OFFSET_TRANSPORT_SECURITY_KEY_EUI 24
454 /* ENABLE/DISABLE_STREAM_ENCRYPTION */
455 #define AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_TYPE 24
456 #define AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_INDEX 26
457 #define AECP_OFFSET_STREAM_ENCRYPTION_KEY_EUI 28
459 /* Set/Get Stream Backup */
460 #define AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_TYPE 24
461 #define AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_INDEX 26
462 #define AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_0 28
463 #define AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_0 36
464 #define AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_1 40
465 #define AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_1 48
466 #define AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_2 52
467 #define AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_2 60
468 #define AECP_OFFSET_STREAM_BACKEDUP_TALKER_ENTITY_ID 64
469 #define AECP_OFFSET_STREAM_BACKEDUP_TALKER_UNIQUE_ID 72
471 /* aecp_message_type */
472 /* 1722.1 draft 2011-11-14 table 9.1 */
473 #define AECP_AEM_COMMAND_MESSAGE 0
474 #define AECP_AEM_RESPONSE_MESSAGE 1
475 #define AECP_ADDRESS_ACCESS_COMMAND_MESSAGE 2
476 #define AECP_ADDRESS_ACCESS_RESPONSE_MESSAGE 3
477 #define AECP_AVC_COMMAND_MESSAGE 4
478 #define AECP_AVC_RESPONSE_MESSAGE 5
479 #define AECP_VENDOR_UNIQUE_COMMAND_MESSAGE 6
480 #define AECP_VENDOR_UNIQUE_RESPONSE_MESSAGE 7
481 #define AECP_EXTENDED_COMMAND_MESSAGE 14
482 #define AECP_EXTENDED_RESPONSE_MESSAGE 15
484 /* aecp status field */
485 /* 1722.1 draft 2011-11-14 table 9.2 */
486 #define AECP_STATUS_SUCCESS 0
487 #define AECP_STATUS_NOT_IMPLEMENTED 1
489 /* AECP Address Type */
490 /* 1722.1 draft 2011-11-14 sec 7.4.35.1 table 7.82 */
491 #define AECP_ADDRESS_MAC 0x0000
492 #define AECP_ADDRESS_IPV4 0x0001
493 #define AECP_ADDRESS_IPV6 0x0002
495 /* AECP Direction Field Values */
496 /* 1722.1 draft 2011-11-14 table 7.78 */
497 #define AECP_DIRECTION_HORIZONTAL 0
498 #define AECP_DIRECTION_VERTICAL 1
500 /* AECP Keychain Type Values */
501 /* 1722.1 draft 2011-11-14 table 7.80 */
502 #define AECP_KEYCHAIN_NONE 0x0
503 #define AECP_KEYCHAIN_MANUFACTURER 0x1
504 #define AECP_KEYCHAIN_PRODUCT 0x2
505 #define AECP_KEYCHAIN_ENTITY 0x3
506 #define AECP_KEYCHAIN_USER 0x4
508 /* AECP Command Codes */
509 /* IEEE 1722.1 draft D21 Table 7.126 */
510 #define AECP_COMMAND_ACQUIRE_ENTITY 0x0000
511 #define AECP_COMMAND_LOCK_ENTITY 0x0001
512 #define AECP_COMMAND_ENTITY_AVAILABLE 0x0002
513 #define AECP_COMMAND_CONTROLLER_AVAILABLE 0x0003
514 #define AECP_COMMAND_READ_DESCRIPTOR 0x0004
515 #define AECP_COMMAND_WRITE_DESCRIPTOR 0x0005
516 #define AECP_COMMAND_SET_CONFIGURATION 0x0006
517 #define AECP_COMMAND_GET_CONFIGURATION 0x0007
518 #define AECP_COMMAND_SET_STREAM_FORMAT 0x0008
519 #define AECP_COMMAND_GET_STREAM_FORMAT 0x0009
520 #define AECP_COMMAND_SET_VIDEO_FORMAT 0x000a
521 #define AECP_COMMAND_GET_VIDEO_FORMAT 0x000b
522 #define AECP_COMMAND_SET_SENSOR_FORMAT 0x000c
523 #define AECP_COMMAND_GET_SENSOR_FORMAT 0x000d
524 #define AECP_COMMAND_SET_STREAM_INFO 0x000e
525 #define AECP_COMMAND_GET_STREAM_INFO 0x000f
526 #define AECP_COMMAND_SET_NAME 0x0010
527 #define AECP_COMMAND_GET_NAME 0x0011
528 #define AECP_COMMAND_SET_ASSOCIATION_ID 0x0012
529 #define AECP_COMMAND_GET_ASSOCIATION_ID 0x0013
530 #define AECP_COMMAND_SET_SAMPLING_RATE 0x0014
531 #define AECP_COMMAND_GET_SAMPLING_RATE 0x0015
532 #define AECP_COMMAND_SET_CLOCK_SOURCE 0x0016
533 #define AECP_COMMAND_GET_CLOCK_SOURCE 0x0017
534 #define AECP_COMMAND_SET_CONTROL_VALUE 0x0018
535 #define AECP_COMMAND_GET_CONTROL_VALUE 0x0019
536 #define AECP_COMMAND_INCREMENT_CONTROL 0x001a
537 #define AECP_COMMAND_DECREMENT_CONTROL 0x001b
538 #define AECP_COMMAND_SET_SIGNAL_SELECTOR 0x001c
539 #define AECP_COMMAND_GET_SIGNAL_SELECTOR 0x001d
540 #define AECP_COMMAND_SET_MIXER 0x001e
541 #define AECP_COMMAND_GET_MIXER 0x001f
542 #define AECP_COMMAND_SET_MATRIX 0x0020
543 #define AECP_COMMAND_GET_MATRIX 0x0021
544 #define AECP_COMMAND_START_STREAMING 0x0022
545 #define AECP_COMMAND_STOP_STREAMING 0x0023
546 #define AECP_COMMAND_REGISTER_UNSOL_NOTIFICATION 0x0024
547 #define AECP_COMMAND_DEREGISTER_UNSOL_NOTIFICATION 0x0025
548 #define AECP_COMMAND_IDENTIFY_NOTIFICATION 0x0026
549 #define AECP_COMMAND_GET_AVB_INFO 0x0027
550 #define AECP_COMMAND_GET_AS_PATH 0x0028
551 #define AECP_COMMAND_GET_COUNTERS 0x0029
552 #define AECP_COMMAND_REBOOT 0x002a
553 #define AECP_COMMAND_GET_AUDIO_MAP 0x002b
554 #define AECP_COMMAND_ADD_AUDIO_MAPPINGS 0x002c
555 #define AECP_COMMAND_REMOVE_AUDIO_MAPPINGS 0x002d
556 #define AECP_COMMAND_GET_VIDEO_MAP 0x002e
557 #define AECP_COMMAND_ADD_VIDEO_MAPPINGS 0x002f
558 #define AECP_COMMAND_REMOVE_VIDEO_MAPPINGS 0x0030
559 #define AECP_COMMAND_GET_SENSOR_MAP 0x0031
560 #define AECP_COMMAND_ADD_SENSOR_MAPPINGS 0x0032
561 #define AECP_COMMAND_REMOVE_SENSOR_MAPPINGS 0x0033
562 #define AECP_COMMAND_START_OPERATION 0x0034
563 #define AECP_COMMAND_ABORT_OPERATION 0x0035
564 #define AECP_COMMAND_OPERATION_STATUS 0x0036
565 #define AECP_COMMAND_AUTH_ADD_KEY 0x0037
566 #define AECP_COMMAND_AUTH_DELETE_KEY 0x0038
567 #define AECP_COMMAND_AUTH_GET_KEY_LIST 0x0039
568 #define AECP_COMMAND_AUTH_GET_KEY 0x003a
569 #define AECP_COMMAND_AUTH_ADD_KEY_TO_CHAIN 0x003b
570 #define AECP_COMMAND_AUTH_DELETE_KEY_FROM_CHAIN 0x003c
571 #define AECP_COMMAND_AUTH_GET_KEYCHAIN_LIST 0x003d
572 #define AECP_COMMAND_AUTH_GET_IDENTITY 0x003e
573 #define AECP_COMMAND_AUTH_ADD_TOKEN 0x003f
574 #define AECP_COMMAND_AUTH_DELETE_TOKEN 0x0040
575 #define AECP_COMMAND_AUTHENTICATE 0x0041
576 #define AECP_COMMAND_DEAUTHENTICATE 0x0042
577 #define AECP_COMMAND_ENABLE_TRANSPORT_SECURITY 0x0043
578 #define AECP_COMMAND_DISABLE_TRANSPORT_SECURITY 0x0044
579 #define AECP_COMMAND_ENABLE_STREAM_ENCRYPTION 0x0045
580 #define AECP_COMMAND_DISABLE_STREAM_ENCRYPTION 0x0046
581 #define AECP_COMMAND_SET_STREAM_BACKUP 0x0049
582 #define AECP_COMMAND_GET_STREAM_BACKUP 0x004a
583 /* 0x002e - 0x7ffe RESERVED for future use */
584 #define AECP_COMMAND_EXPANSION 0x7fff /* reserved */
586 /* AEM common format packet STATUS field values */
587 /* IEEE 1722.1 draft D21 Table 7.127 */
588 #define AEM_STATUS_SUCCESS 0
589 #define AEM_STATUS_NOT_IMPLEMENTED 1
590 #define AEM_STATUS_NO_SUCH_DESCRIPTOR 2
591 #define AEM_STATUS_ENTITY_LOCKED 3
592 #define AEM_STATUS_ENTITY_ACQUIRED 4
593 #define AEM_STATUS_NOT_AUTHENTICATED 5
594 #define AEM_STATUS_AUTHENTICATION_DISABLED 6
595 #define AEM_STATUS_BAD_ARGUMENTS 7
596 #define AEM_STATUS_NO_RESOURCES 8
597 #define AEM_STATUS_IN_PROGRESS 9
598 #define AEM_STATUS_ENTITY_MISBEHAVING 10
599 #define AEM_STATUS_NOT_SUPPORTED 11
600 #define AEM_STATUS_STREAM_IS_RUNNING 12
601 /* 10 - 31 RESERVED */
603 /* AEM descriptor indices */
604 /* IEEE 1722.1 draft D21 TABLE 7.1 */
605 #define AEM_DESCRIPTOR_ENTITY 0x0000
606 #define AEM_DESCRIPTOR_CONFIGURATION 0x0001
607 #define AEM_DESCRIPTOR_AUDIO_UNIT 0x0002
608 #define AEM_DESCRIPTOR_VIDEO_UNIT 0x0003
609 #define AEM_DESCRIPTOR_SENSOR_UNIT 0x0004
610 #define AEM_DESCRIPTOR_STREAM_INPUT 0x0005
611 #define AEM_DESCRIPTOR_STREAM_OUTPUT 0x0006
612 #define AEM_DESCRIPTOR_JACK_INPUT 0x0007
613 #define AEM_DESCRIPTOR_JACK_OUTPUT 0x0008
614 #define AEM_DESCRIPTOR_AVB_INTERFACE 0x0009
615 #define AEM_DESCRIPTOR_CLOCK_SOURCE 0x000a
616 #define AEM_DESCRIPTOR_MEMORY_OBJECT 0x000b
617 #define AEM_DESCRIPTOR_LOCALE 0x000c
618 #define AEM_DESCRIPTOR_STRINGS 0x000d
619 #define AEM_DESCRIPTOR_STREAM_PORT_INPUT 0x000e
620 #define AEM_DESCRIPTOR_STREAM_PORT_OUTPUT 0x000f
621 #define AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT 0x0010
622 #define AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT 0x0011
623 #define AEM_DESCRIPTOR_INTERNAL_PORT_INPUT 0x0012
624 #define AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT 0x0013
625 #define AEM_DESCRIPTOR_AUDIO_CLUSTER 0x0014
626 #define AEM_DESCRIPTOR_VIDEO_CLUSTER 0x0015
627 #define AEM_DESCRIPTOR_SENSOR_CLUSTER 0x0016
628 #define AEM_DESCRIPTOR_AUDIO_MAP 0x0017
629 #define AEM_DESCRIPTOR_VIDEO_MAP 0x0018
630 #define AEM_DESCRIPTOR_SENSOR_MAP 0x0019
631 #define AEM_DESCRIPTOR_CONTROL 0x001a
632 #define AEM_DESCRIPTOR_SIGNAL_SELECTOR 0x001b
633 #define AEM_DESCRIPTOR_MIXER 0x001c
634 #define AEM_DESCRIPTOR_MATRIX 0x001d
635 #define AEM_DESCRIPTOR_MATRIX_SIGNAL 0x001e
636 #define AEM_DESCRIPTOR_SIGNAL_SPLITTER 0x001f
637 #define AEM_DESCRIPTOR_SIGNAL_COMBINER 0x0020
638 #define AEM_DESCRIPTOR_SIGNAL_DEMULTIPLEXER 0x0021
639 #define AEM_DESCRIPTOR_SIGNAL_MULTIPLEXER 0x0022
640 #define AEM_DESCRIPTOR_SIGNAL_TRANSCODER 0x0023
641 #define AEM_DESCRIPTOR_CLOCK_DOMAIN 0x0024
642 #define AEM_DESCRIPTOR_CONTROL_BLOCK 0x0025
643 #define AEM_DESCRIPTOR_INVALID 0xFFFF
645 /* AEM JACK TYPES */
646 /* IEEE 1722.1 draft D21 TABLE 7.12 */
647 #define AEM_JACKTYPE_SPEAKER 0x0000
648 #define AEM_JACKTYPE_HEADPHONE 0x0001
649 #define AEM_JACKTYPE_ANALOG_MICROPHONE 0x0002
650 #define AEM_JACKTYPE_SPDIF 0x0003
651 #define AEM_JACKTYPE_ADAT 0x0004
652 #define AEM_JACKTYPE_TDIF 0x0005
653 #define AEM_JACKTYPE_MADI 0x0006
654 #define AEM_JACKTYPE_UNBALANCED_ANALOG 0x0007
655 #define AEM_JACKTYPE_BALANCED_ANALOG 0x0008
656 #define AEM_JACKTYPE_DIGITAL 0x0009
657 #define AEM_JACKTYPE_MIDI 0x000a
658 #define AEM_JACKTYPE_AES_EBU 0x000b
659 #define AEM_JACKTYPE_COMPOSITE_VIDEO 0x000c
660 #define AEM_JACKTYPE_S_VHS_VIDEO 0x000d
661 #define AEM_JACKTYPE_COMPONENT_VIDEO 0x000e
662 #define AEM_JACKTYPE_DVI 0x000f
663 #define AEM_JACKTYPE_HDMI 0x0010
664 #define AEM_JACKTYPE_UDI 0x0011
665 #define AEM_JACKTYPE_DISPLAYPORT 0x0012
666 #define AEM_JACKTYPE_ANTENNA 0x0013
667 #define AEM_JACKTYPE_ANALOG_TUNER 0x0014
668 #define AEM_JACKTYPE_ETHERNET 0x0015
669 #define AEM_JACKTYPE_WIFI 0x0016
670 #define AEM_JACKTYPE_USB 0x0017
671 #define AEM_JACKTYPE_PCI 0x0018
672 #define AEM_JACKTYPE_PCI_E 0x0019
673 #define AEM_JACKTYPE_SCSI 0x001a
674 #define AEM_JACKTYPE_ATA 0x001b
675 #define AEM_JACKTYPE_IMAGER 0x001c
676 #define AEM_JACKTYPE_IR 0x001d
677 #define AEM_JACKTYPE_THUNDERBOLT 0x001e
678 #define AEM_JACKTYPE_SATA 0x001f
679 #define AEM_JACKTYPE_SMPTE_LTC 0x0020
680 #define AEM_JACKTYPE_DIGITAL_MICROPHONE 0x0021
682 /* CONTROL TYPES */
683 /* IEEE 1722.1 draft D21 TABLE 7.94 */
684 #define AEM_CONTROL_ENABLE 0x90e0f00000000000
685 #define AEM_CONTROL_IDENTIFY 0x90e0f00000000001
686 #define AEM_CONTROL_MUTE 0x90e0f00000000002
687 #define AEM_CONTROL_INVERT 0x90e0f00000000003
688 #define AEM_CONTROL_GAIN 0x90e0f00000000004
689 #define AEM_CONTROL_ATTENUATE 0x90e0f00000000005
690 #define AEM_CONTROL_DELAY 0x90e0f00000000006
691 #define AEM_CONTROL_SRC_MODE 0x90e0f00000000007
692 #define AEM_CONTROL_SNAPSHOT 0x90e0f00000000008
693 #define AEM_CONTROL_POW_LINE_FREQ 0x90e0f00000000009
694 #define AEM_CONTROL_POWER_STATUS 0x90e0f0000000000a
695 #define AEM_CONTROL_FAN_STATUS 0x90e0f0000000000b
696 #define AEM_CONTROL_TEMPERATURE 0x90e0f0000000000c
697 #define AEM_CONTROL_ALTITUDE 0x90e0f0000000000d
698 #define AEM_CONTROL_ABSOLUTE_HUMIDITY 0x90e0f0000000000e
699 #define AEM_CONTROL_RELATIVE_HUMIDITY 0x90e0f0000000000f
700 #define AEM_CONTROL_ORIENTATION 0x90e0f00000000010
701 #define AEM_CONTROL_VELOCITY 0x90e0f00000000011
702 #define AEM_CONTROL_ACCELERATION 0x90e0f00000000012
703 #define AEM_CONTROL_FILTER_RESPONSE 0x90e0f00000000013
704 /* 0x90e0f00000000014 - 0x90e0f0000000ffff reserved */
705 #define AEM_CONTROL_PANPOT 0x90e0f00000010000
706 #define AEM_CONTROL_PHANTOM 0x90e0f00000010001
707 #define AEM_CONTROL_AUDIO_SCALE 0x90e0f00000010002
708 #define AEM_CONTROL_AUDIO_METERS 0x90e0f00000010003
709 #define AEM_CONTROL_AUDIO_SPECTRUM 0x90e0f00000010004
710 /* 0x90e0f00000010005 - 0x90e0f0000001ffff reserved */
711 #define AEM_CONTROL_SCANNING_MODE 0x90e0f00000020000
712 #define AEM_CONTROL_AUTO_EXP_MODE 0x90e0f00000020001
713 #define AEM_CONTROL_AUTO_EXP_PRIO 0x90e0f00000020002
714 #define AEM_CONTROL_EXP_TIME 0x90e0f00000020003
715 #define AEM_CONTROL_FOCUS 0x90e0f00000020004
716 #define AEM_CONTROL_FOCUS_AUTO 0x90e0f00000020005
717 #define AEM_CONTROL_IRIS 0x90e0f00000020006
718 #define AEM_CONTROL_ZOOM 0x90e0f00000020007
719 #define AEM_CONTROL_PRIVACY 0x90e0f00000020008
720 #define AEM_CONTROL_BACKLIGHT 0x90e0f00000020009
721 #define AEM_CONTROL_BRIGHTNESS 0x90e0f0000002000a
722 #define AEM_CONTROL_CONTRAST 0x90e0f0000002000b
723 #define AEM_CONTROL_HUE 0x90e0f0000002000c
724 #define AEM_CONTROL_SATURATION 0x90e0f0000002000d
725 #define AEM_CONTROL_SHARPNESS 0x90e0f0000002000e
726 #define AEM_CONTROL_GAMMA 0x90e0f0000002000f
727 #define AEM_CONTROL_WHITE_BAL_TEMP 0x90e0f00000020010
728 #define AEM_CONTROL_WHITE_BAL_TEMP_AUTO 0x90e0f00000020011
729 #define AEM_CONTROL_WHITE_BAL_COMP 0x90e0f00000020012
730 #define AEM_CONTROL_WHITE_BAL_COMP_AUTO 0x90e0f00000020013
731 #define AEM_CONTROL_DIGITAL_ZOOM 0x90e0f00000020014
732 /* 0x90e0f00000020015 - 0x90e0f0000002ffff reserved */
733 #define AEM_CONTROL_MEDIA_PLAYLIST 0x90e0f00000030000
734 #define AEM_CONTROL_MEDIA_PLAYLIST_NAME 0x90e0f00000030001
735 #define AEM_CONTROL_MEDIA_DISK 0x90e0f00000030002
736 #define AEM_CONTROL_MEDIA_DISK_NAME 0x90e0f00000030003
737 #define AEM_CONTROL_MEDIA_TRACK 0x90e0f00000030004
738 #define AEM_CONTROL_MEDIA_TRACK_NAME 0x90e0f00000030005
739 #define AEM_CONTROL_MEDIA_SPEED 0x90e0f00000030006
740 #define AEM_CONTROL_MEDIA_SAMPLE_POSITION 0x90e0f00000030007
741 #define AEM_CONTROL_MEDIA_PLAYBACK_TRANSPORT 0x90e0f00000030008
742 #define AEM_CONTROL_MEDIA_RECORD_TRANSPORT 0x90e0f00000030009
743 /* 0x90e0f0000003000a - 0x90e0f0000003ffff reserved */
744 #define AEM_CONTROL_FREQUENCY 0x90e0f00000040000
745 #define AEM_CONTROL_MODULATION 0x90e0f00000040001
746 #define AEM_CONTROL_POLARIZATION 0x90e0f00000040002
747 /* 0x90e0f00000040003 - 0x90e0f0ffffffffff reserved */
749 /* AEM Control Value Types */
750 /* IEEE 1722.1 draft D21 TABLE 7.106 */
751 #define AEM_CONTROL_LINEAR_INT8 0x0000
752 #define AEM_CONTROL_LINEAR_UINT8 0x0001
753 #define AEM_CONTROL_LINEAR_INT16 0x0002
754 #define AEM_CONTROL_LINEAR_UINT16 0x0003
755 #define AEM_CONTROL_LINEAR_INT32 0x0004
756 #define AEM_CONTROL_LINEAR_UINT32 0x0005
757 #define AEM_CONTROL_LINEAR_INT64 0x0006
758 #define AEM_CONTROL_LINEAR_UINT64 0x0007
759 #define AEM_CONTROL_LINEAR_FLOAT 0x0008
760 #define AEM_CONTROL_LINEAR_DOUBLE 0x0009
761 #define AEM_CONTROL_SELECTOR_INT8 0x000a
762 #define AEM_CONTROL_SELECTOR_UINT8 0x000b
763 #define AEM_CONTROL_SELECTOR_INT16 0x000c
764 #define AEM_CONTROL_SELECTOR_UINT16 0x000d
765 #define AEM_CONTROL_SELECTOR_INT32 0x000e
766 #define AEM_CONTROL_SELECTOR_UINT32 0x000f
767 #define AEM_CONTROL_SELECTOR_INT64 0x0010
768 #define AEM_CONTROL_SELECTOR_UINT64 0x0011
769 #define AEM_CONTROL_SELECTOR_FLOAT 0x0012
770 #define AEM_CONTROL_SELECTOR_DOUBLE 0x0013
771 #define AEM_CONTROL_SELECTOR_STRING 0x0014
772 #define AEM_CONTROL_ARRAY_INT8 0x0015
773 #define AEM_CONTROL_ARRAY_UINT8 0x0016
774 #define AEM_CONTROL_ARRAY_INT16 0x0017
775 #define AEM_CONTROL_ARRAY_UINT16 0x0018
776 #define AEM_CONTROL_ARRAY_INT32 0x0019
777 #define AEM_CONTROL_ARRAY_UINT32 0x001a
778 #define AEM_CONTROL_ARRAY_INT64 0x001b
779 #define AEM_CONTROL_ARRAY_UINT64 0x001c
780 #define AEM_CONTROL_ARRAY_FLOAT 0x001d
781 #define AEM_CONTROL_ARRAY_DOUBLE 0x001e
782 #define AEM_CONTROL_UTF8 0x001f
783 #define AEM_CONTROL_BODE_PLOT 0x0020
784 #define AEM_CONTROL_SMPTE_TIME 0x0021
785 #define AEM_CONTROL_SAMPLE_RATE 0x0022
786 #define AEM_CONTROL_GPTP_TIME 0x0023
787 /* 0x0024-0x3ffd RESERVED Reserved for future use. */
788 #define AEM_CONTROL_VENDOR 0x3ffe
789 /* 0x3fff EXPANSION Reserved for future expansion. */
791 /* AEM CLOCK_SOURCE Types */
792 /* IEEE 1722.1 draft D21 TABLE 7.17 */
793 #define AEM_CLOCK_INTERNAL 0x0000
794 #define AEM_CLOCK_EXTERNAL 0x0001
795 #define AEM_CLOCK_INPUT_STREAM 0x0002
796 #define AEM_CLOCK_MEDIA_CLOCK_STREAM 0x0003
797 /* 0x0004-0xfffe RESERVED Reserved for future use. */
798 /* 0xffff EXPANSION Reserved for future expansion. */
800 /* AEM Stream Format Definitions */
801 /* IEEE 1722.1 draft D21 TABLE 7.65 */
802 #define IEC_61883_IIDC_SUBTYPE 0x00
803 #define MMA_SUBTYPE 0x01
804 #define AVTP_AUDIO_SUBTYPE 0x02
805 #define AVTP_VIDEO_SUBTYPE 0x03
806 #define AVTP_CONTROL_SUBTYPE 0x04
807 /* 0x05-0x7e RESERVED Reserved for future protocols. */
808 #define EXPERIMENTAL_SUBTYPE 0x7f
811 /* AEM Descriptor Offsets */
812 /* IEEE 1722.1 draft D21 sections 7.2.1 - 7.2.33 */
813 #define AEM_OFFSET_DESCRIPTOR_TYPE 0
814 #define AEM_OFFSET_DESCRIPTOR_ID 2
816 #define ENTITY_OFFSET_ENTITY_GUID 4
817 #define ENTITY_OFFSET_ENTITY_MODEL_ID 12
818 #define ENTITY_OFFSET_ENTITY_CAPABILITIES 20
819 #define ENTITY_OFFSET_TALKER_STREAM_SOURCES 24
820 #define ENTITY_OFFSET_TALKER_CAPABILITIES 26
821 #define ENTITY_OFFSET_LISTENER_STREAM_SINKS 28
822 #define ENTITY_OFFSET_LISTENER_CAPABILITIES 30
823 #define ENTITY_OFFSET_CONTROLLER_CAPABILITIES 32
824 #define ENTITY_OFFSET_AVAILABLE_INDEX 36
825 #define ENTITY_OFFSET_ASSOCIATION_ID 40
826 #define ENTITY_OFFSET_ENTITY_NAME 48
827 #define ENTITY_OFFSET_VENDOR_NAME_STRING 112
828 #define ENTITY_OFFSET_MODEL_NAME_STRING 114
829 #define ENTITY_OFFSET_FIRMWARE_VERSION 116
830 #define ENTITY_OFFSET_GROUP_NAME 180
831 #define ENTITY_OFFSET_SERIAL_NUMBER 244
832 #define ENTITY_OFFSET_CONFIGURATIONS_COUNT 308
833 #define ENTITY_OFFSET_CURRENT_CONFIGURATION 310
835 #define CONFIGURATION_OFFSET_OBJECT_NAME 4
836 #define CONFIGURATION_OFFSET_LOCALIZED_DESCRIPTION 68
837 #define CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_COUNT 70
838 #define CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_OFFSET 72
839 #define CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS 74
841 #define AUDIO_UNIT_OFFSET_OBJECT_NAME 4
842 #define AUDIO_UNIT_OFFSET_LOCALIZED_DESCRIPTION 68
843 #define AUDIO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX 70
844 #define AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 72
845 #define AUDIO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT 74
846 #define AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 76
847 #define AUDIO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT 78
848 #define AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 80
849 #define AUDIO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT 82
850 #define AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 84
851 #define AUDIO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 86
852 #define AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 88
853 #define AUDIO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT 90
854 #define AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 92
855 #define AUDIO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT 94
856 #define AUDIO_UNIT_OFFSET_NUMBER_OF_CONTROLS 96
857 #define AUDIO_UNIT_OFFSET_BASE_CONTROL 98
858 #define AUDIO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS 100
859 #define AUDIO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR 102
860 #define AUDIO_UNIT_OFFSET_NUMBER_MIXERS 104
861 #define AUDIO_UNIT_OFFSET_BASE_MIXER 106
862 #define AUDIO_UNIT_OFFSET_NUMBER_MATRICES 108
863 #define AUDIO_UNIT_OFFSET_BASE_MATRIX 110
864 #define AUDIO_UNIT_OFFSET_NUMBER_SPLITTERS 112
865 #define AUDIO_UNIT_OFFSET_BASE_SPLITTER 114
866 #define AUDIO_UNIT_OFFSET_NUMBER_COMBINERS 116
867 #define AUDIO_UNIT_OFFSET_BASE_COMBINER 118
868 #define AUDIO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS 120
869 #define AUDIO_UNIT_OFFSET_BASE_DEMULTIPLEXER 122
870 #define AUDIO_UNIT_OFFSET_NUMBER_MULTIPLEXERS 124
871 #define AUDIO_UNIT_OFFSET_BASE_MULTIPLEXER 126
872 #define AUDIO_UNIT_OFFSET_NUMBER_TRANSCODERS 128
873 #define AUDIO_UNIT_OFFSET_BASE_TRANSCODER 130
874 #define AUDIO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS 132
875 #define AUDIO_UNIT_OFFSET_BASE_CONTROL_BLOCK 134
876 #define AUDIO_UNIT_OFFSET_CURRENT_SAMPLE_RATE 136
877 #define AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET 140
878 #define AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT 142
880 #define VIDEO_UNIT_OFFSET_OBJECT_NAME 4
881 #define VIDEO_UNIT_OFFSET_LOCALIZED_DESCRIPTION 68
882 #define VIDEO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX 70
883 #define VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 72
884 #define VIDEO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT 74
885 #define VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 76
886 #define VIDEO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT 78
887 #define VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 80
888 #define VIDEO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT 82
889 #define VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 84
890 #define VIDEO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 86
891 #define VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 88
892 #define VIDEO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT 90
893 #define VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 92
894 #define VIDEO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT 94
895 #define VIDEO_UNIT_OFFSET_NUMBER_OF_CONTROLS 96
896 #define VIDEO_UNIT_OFFSET_BASE_CONTROL 98
897 #define VIDEO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS 100
898 #define VIDEO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR 102
899 #define VIDEO_UNIT_OFFSET_NUMBER_MIXERS 104
900 #define VIDEO_UNIT_OFFSET_BASE_MIXER 106
901 #define VIDEO_UNIT_OFFSET_NUMBER_MATRICES 108
902 #define VIDEO_UNIT_OFFSET_BASE_MATRIX 110
903 #define VIDEO_UNIT_OFFSET_NUMBER_SPLITTERS 112
904 #define VIDEO_UNIT_OFFSET_BASE_SPLITTER 114
905 #define VIDEO_UNIT_OFFSET_NUMBER_COMBINERS 116
906 #define VIDEO_UNIT_OFFSET_BASE_COMBINER 118
907 #define VIDEO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS 120
908 #define VIDEO_UNIT_OFFSET_BASE_DEMULTIPLEXER 122
909 #define VIDEO_UNIT_OFFSET_NUMBER_MULTIPLEXERS 124
910 #define VIDEO_UNIT_OFFSET_BASE_MULTIPLEXER 126
911 #define VIDEO_UNIT_OFFSET_NUMBER_TRANSCODERS 128
912 #define VIDEO_UNIT_OFFSET_BASE_TRANSCODER 130
913 #define VIDEO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS 132
914 #define VIDEO_UNIT_OFFSET_BASE_CONTROL_BLOCK 134
916 #define SENSOR_UNIT_OFFSET_OBJECT_NAME 4
917 #define SENSOR_UNIT_OFFSET_LOCALIZED_DESCRIPTION 68
918 #define SENSOR_UNIT_OFFSET_CLOCK_DOMAIN_INDEX 70
919 #define SENSOR_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 72
920 #define SENSOR_UNIT_OFFSET_BASE_STREAM_INPUT_PORT 74
921 #define SENSOR_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 76
922 #define SENSOR_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT 78
923 #define SENSOR_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 80
924 #define SENSOR_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT 82
925 #define SENSOR_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 84
926 #define SENSOR_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 86
927 #define SENSOR_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 88
928 #define SENSOR_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT 90
929 #define SENSOR_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 92
930 #define SENSOR_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT 94
931 #define SENSOR_UNIT_OFFSET_NUMBER_OF_CONTROLS 96
932 #define SENSOR_UNIT_OFFSET_BASE_CONTROL 98
933 #define SENSOR_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS 100
934 #define SENSOR_UNIT_OFFSET_BASE_SIGNAL_SELECTOR 102
935 #define SENSOR_UNIT_OFFSET_NUMBER_MIXERS 104
936 #define SENSOR_UNIT_OFFSET_BASE_MIXER 106
937 #define SENSOR_UNIT_OFFSET_NUMBER_MATRICES 108
938 #define SENSOR_UNIT_OFFSET_BASE_MATRIX 110
939 #define SENSOR_UNIT_OFFSET_NUMBER_SPLITTERS 112
940 #define SENSOR_UNIT_OFFSET_BASE_SPLITTER 114
941 #define SENSOR_UNIT_OFFSET_NUMBER_COMBINERS 116
942 #define SENSOR_UNIT_OFFSET_BASE_COMBINER 118
943 #define SENSOR_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS 120
944 #define SENSOR_UNIT_OFFSET_BASE_DEMULTIPLEXER 122
945 #define SENSOR_UNIT_OFFSET_NUMBER_MULTIPLEXERS 124
946 #define SENSOR_UNIT_OFFSET_BASE_MULTIPLEXER 126
947 #define SENSOR_UNIT_OFFSET_NUMBER_TRANSCODERS 128
948 #define SENSOR_UNIT_OFFSET_BASE_TRANSCODER 130
949 #define SENSOR_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS 132
950 #define SENSOR_UNIT_OFFSET_BASE_CONTROL_BLOCK 134
952 #define STREAM_OFFSET_OBJECT_NAME 4
953 #define STREAM_OFFSET_LOCALIZED_DESCRIPTION 68
954 #define STREAM_OFFSET_CLOCK_DOMAIN_INDEX 70
955 #define STREAM_OFFSET_STREAM_FLAGS 72
956 #define STREAM_OFFSET_CURRENT_FORMAT 74
957 #define STREAM_OFFSET_FORMATS_OFFSET 82
958 #define STREAM_OFFSET_NUMBER_OF_FORMATS 84
959 #define STREAM_OFFSET_BACKUP_TALKER_GUID_0 86
960 #define STREAM_OFFSET_BACKUP_TALKER_UNIQUE_0 94
961 #define STREAM_OFFSET_BACKUP_TALKER_GUID_1 96
962 #define STREAM_OFFSET_BACKUP_TALKER_UNIQUE_1 104
963 #define STREAM_OFFSET_BACKUP_TALKER_GUID_2 106
964 #define STREAM_OFFSET_BACKUP_TALKER_UNIQUE_2 114
965 #define STREAM_OFFSET_BACKEDUP_TALKER_GUID 116
966 #define STREAM_OFFSET_BACKEDUP_TALKER_UNIQUE_ID 124
967 #define STREAM_OFFSET_AVB_INTERFACE_ID 126
968 #define STREAM_OFFSET_BUFFER_LENGTH 128
970 #define JACK_OFFSET_OBJECT_NAME 4
971 #define JACK_OFFSET_LOCALIZED_DESCRIPTION 68
972 #define JACK_OFFSET_JACK_FLAGS 70
973 #define JACK_OFFSET_JACK_TYPE 72
974 #define JACK_OFFSET_JACK_NUMBER_OF_CONTROLS 74
975 #define JACK_OFFSET_JACK_BASE_CONTROL 76
977 #define AVB_INTERFACE_OFFSET_OBJECT_NAME 4
978 #define AVB_INTERFACE_OFFSET_LOCALIZED_DESCRIPTION 68
979 #define AVB_INTERFACE_OFFSET_MAC_ADDRESS 70
980 #define AVB_INTERFACE_OFFSET_INTERFACE_FLAGS 76
981 #define AVB_INTERFACE_OFFSET_CLOCK_IDENTITY 78
982 #define AVB_INTERFACE_OFFSET_PRIORITY1 86
983 #define AVB_INTERFACE_OFFSET_CLOCK_CLASS 87
984 #define AVB_INTERFACE_OFFSET_OFFSET_SCALED_LOG_VARIANCE 88
985 #define AVB_INTERFACE_OFFSET_CLOCK_ACCURACY 90
986 #define AVB_INTERFACE_OFFSET_PRIORITY2 91
987 #define AVB_INTERFACE_OFFSET_DOMAIN_NUMBER 92
988 #define AVB_INTERFACE_OFFSET_LOG_SYNC_INTERVAL 93
990 #define CLOCK_SOURCE_OFFSET_OBJECT_NAME 4
991 #define CLOCK_SOURCE_OFFSET_LOCALIZED_DESCRIPTION 68
992 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_FLAGS 70
993 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_TYPE 72
994 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_IDENTIFIER 74
995 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_TYPE 82
996 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_INDEX 84
998 #define MEMORY_OBJECT_OFFSET_OBJECT_NAME 4
999 #define MEMORY_OBJECT_OFFSET_LOCALIZED_DESCRIPTION 68
1000 #define MEMORY_OBJECT_OFFSET_MEMORY_OBJECT_TYPE 70
1001 #define MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_TYPE 72
1002 #define MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_INDEX 74
1003 #define MEMORY_OBJECT_OFFSET_START_ADDRESS 76
1004 #define MEMORY_OBJECT_OFFSET_LENGTH 84
1006 #define LOCALE_OFFSET_LOCALE_IDENTIFIER 4
1007 #define LOCALE_OFFSET_NUMBER_OF_STRINGS 68
1008 #define LOCALE_OFFSET_BASE_STRINGS 70
1010 #define STRINGS_OFFSET_STRING0 4
1012 #define STREAM_PORT_OFFSET_CLOCK_DOMAIN_INDEX 4
1013 #define STREAM_PORT_OFFSET_PORT_FLAGS 6
1014 #define STREAM_PORT_OFFSET_NUMBER_OF_CONTROLS 8
1015 #define STREAM_PORT_OFFSET_BASE_CONTROL 10
1016 #define STREAM_PORT_OFFSET_NUMBER_OF_CLUSTERS 12
1017 #define STREAM_PORT_OFFSET_BASE_CLUSTER 14
1018 #define STREAM_PORT_OFFSET_NUMBER_AUDIO_MAPS 16
1019 #define STREAM_PORT_OFFSET_BASE_AUDIO_MAP 18
1021 #define EXTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX 4
1022 #define EXTERNAL_PORT_OFFSET_PORT_FLAGS 6
1023 #define EXTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS 8
1024 #define EXTERNAL_PORT_OFFSET_BASE_CONTROL 10
1025 #define EXTERNAL_PORT_OFFSET_SIGNAL_TYPE 12
1026 #define EXTERNAL_PORT_OFFSET_SIGNAL_INDEX 14
1027 #define EXTERNAL_PORT_OFFSET_SIGNAL_OUTPUT 16
1028 #define EXTERNAL_PORT_OFFSET_BLOCK_LATENCY 18
1029 #define EXTERNAL_PORT_OFFSET_JACK_INDEX 22
1031 #define INTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX 4
1032 #define INTERNAL_PORT_OFFSET_PORT_FLAGS 6
1033 #define INTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS 8
1034 #define INTERNAL_PORT_OFFSET_BASE_CONTROL 10
1035 #define INTERNAL_PORT_OFFSET_SIGNAL_TYPE 12
1036 #define INTERNAL_PORT_OFFSET_SIGNAL_INDEX 14
1037 #define INTERNAL_PORT_OFFSET_SIGNAL_OUTPUT 16
1038 #define INTERNAL_PORT_OFFSET_BLOCK_LATENCY 18
1039 #define INTERNAL_PORT_OFFSET_INTERNAL_INDEX 22
1041 #define AUDIO_CLUSTER_OFFSET_OBJECT_NAME 4
1042 #define AUDIO_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION 68
1043 #define AUDIO_CLUSTER_OFFSET_SIGNAL_TYPE 70
1044 #define AUDIO_CLUSTER_OFFSET_SIGNAL_ID 72
1045 #define AUDIO_CLUSTER_OFFSET_SIGNAL_OUTPUT 74
1046 #define AUDIO_CLUSTER_OFFSET_PATH_LATENCY 76
1047 #define AUDIO_CLUSTER_OFFSET_BLOCK_LATENCY 80
1048 #define AUDIO_CLUSTER_OFFSET_CHANNEL_COUNT 84
1049 #define AUDIO_CLUSTER_OFFSET_FORMAT 86
1051 #define VIDEO_CLUSTER_OFFSET_OBJECT_NAME 4
1052 #define VIDEO_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION 68
1053 #define VIDEO_CLUSTER_OFFSET_SIGNAL_TYPE 70
1054 #define VIDEO_CLUSTER_OFFSET_SIGNAL_ID 72
1055 #define VIDEO_CLUSTER_OFFSET_SIGNAL_OUTPUT 74
1056 #define VIDEO_CLUSTER_OFFSET_PATH_LATENCY 76
1057 #define VIDEO_CLUSTER_OFFSET_BLOCK_LATENCY 80
1058 #define VIDEO_CLUSTER_OFFSET_FORMAT 84
1059 #define VIDEO_CLUSTER_OFFSET_CURRENT_FORMAT_SPECIFIC 85
1060 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_FORMAT_SPECIFICS_OFFSET 89
1061 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_FORMAT_SPECIFICS_COUNT 91
1062 #define VIDEO_CLUSTER_OFFSET_CURRENT_SAMPLING_RATE 93
1063 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_OFFSET 97
1064 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_COUNT 99
1065 #define VIDEO_CLUSTER_OFFSET_CURRENT_ASPECT_RATIO 101
1066 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_ASPECT_RATIOS_OFFSET 103
1067 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_ASPECT_RATIOS_COUNT 105
1068 #define VIDEO_CLUSTER_OFFSET_CURRENT_SIZE 107
1069 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SIZES_OFFSET 111
1070 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SIZES_COUNT 113
1071 #define VIDEO_CLUSTER_OFFSET_CURRENT_COLOR_SPACE 115
1072 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_COLOR_SPACES_OFFSET 117
1073 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_COLOR_SPACES_COUNT 119
1075 #define SENSOR_CLUSTER_OFFSET_OBJECT_NAME 4
1076 #define SENSOR_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION 68
1077 #define SENSOR_CLUSTER_OFFSET_SIGNAL_TYPE 70
1078 #define SENSOR_CLUSTER_OFFSET_SIGNAL_ID 72
1079 #define SENSOR_CLUSTER_OFFSET_SIGNAL_OUTPUT 74
1080 #define SENSOR_CLUSTER_OFFSET_PATH_LATENCY 76
1081 #define SENSOR_CLUSTER_OFFSET_BLOCK_LATENCY 80
1082 #define SENSOR_CLUSTER_OFFSET_CURRENT_FORMAT 84
1083 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_FORMATS_OFFSET 92
1084 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_FORMATS_COUNT 94
1085 #define SENSOR_CLUSTER_OFFSET_CURRENT_SAMPLING_RATE 96
1086 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_OFFSET 100
1087 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_COUNT 102
1089 #define AUDIO_MAP_OFFSET_MAPPINGS_OFFSET 4
1090 #define AUDIO_MAP_OFFSET_NUMBER_OF_MAPPINGS 6
1092 #define VIDEO_MAP_OFFSET_MAPPINGS_OFFSET 4
1093 #define VIDEO_MAP_OFFSET_NUMBER_OF_MAPPINGS 6
1095 #define SENSOR_MAP_OFFSET_MAPPINGS_OFFSET 4
1096 #define SENSOR_MAP_OFFSET_NUMBER_OF_MAPPINGS 6
1098 #define CONTROL_OFFSET_OBJECT_NAME 4
1099 #define CONTROL_OFFSET_LOCALIZED_DESCRIPTION 68
1100 #define CONTROL_OFFSET_BLOCK_LATENCY 70
1101 #define CONTROL_OFFSET_CONTROL_LATENCY 74
1102 #define CONTROL_OFFSET_CONTROL_DOMAIN 78
1103 #define CONTROL_OFFSET_CONTROL_VALUE_TYPE 80
1104 #define CONTROL_OFFSET_CONTROL_TYPE 82
1105 #define CONTROL_OFFSET_RESET_TIME 90
1106 #define CONTROL_OFFSET_VALUES_OFFSET 94
1107 #define CONTROL_OFFSET_NUMBER_OF_VALUES 96
1108 #define CONTROL_OFFSET_SIGNAL_TYPE 98
1109 #define CONTROL_OFFSET_SIGNAL_INDEX 100
1110 #define CONTROL_OFFSET_SIGNAL_OUTPUT 102
1112 #define SIGNAL_SELECTOR_OFFSET_OBJECT_NAME 4
1113 #define SIGNAL_SELECTOR_OFFSET_LOCALIZED_DESCRIPTION 68
1114 #define SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY 70
1115 #define SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY 74
1116 #define SIGNAL_SELECTOR_OFFSET_CONTROL_DOMAIN 78
1117 #define SIGNAL_SELECTOR_OFFSET_SOURCES_OFFSET 80
1118 #define SIGNAL_SELECTOR_OFFSET_NUMBER_OF_SOURCES 82
1119 #define SIGNAL_SELECTOR_OFFSET_CURRENT_SIGNAL_TYPE 84
1120 #define SIGNAL_SELECTOR_OFFSET_CURRENT_SIGNAL_INDEX 86
1121 #define SIGNAL_SELECTOR_OFFSET_CURRENT_SIGNAL_OUTPUT 88
1122 #define SIGNAL_SELECTOR_OFFSET_DEFAULT_SOURCE_TYPE 90
1123 #define SIGNAL_SELECTOR_OFFSET_DEFAULT_SOURCE_INDEX 92
1124 #define SIGNAL_SELECTOR_OFFSET_DEFAULT_SIGNAL_OUTPUT 94
1126 #define MIXER_OFFSET_OBJECT_NAME 4
1127 #define MIXER_OFFSET_LOCALIZED_DESCRIPTION 68
1128 #define MIXER_OFFSET_BLOCK_LATENCY 70
1129 #define MIXER_OFFSET_CONTROL_LATENCY 74
1130 #define MIXER_OFFSET_CONTROL_DOMAIN 78
1131 #define MIXER_OFFSET_CONTROL_VALUE_TYPE 80
1132 #define MIXER_OFFSET_SOURCES_OFFSET 82
1133 #define MIXER_OFFSET_NUMBER_OF_SOURCES 84
1134 #define MIXER_OFFSET_VALUE_OFFSET 86
1136 #define MATRIX_OFFSET_OBJECT_NAME 4
1137 #define MATRIX_OFFSET_LOCALIZED_DESCRIPTION 68
1138 #define MATRIX_OFFSET_BLOCK_LATENCY 70
1139 #define MATRIX_OFFSET_CONTROL_LATENCY 74
1140 #define MATRIX_OFFSET_CONTROL_DOMAIN 78
1141 #define MATRIX_OFFSET_CONTROL_VALUE_TYPE 80
1142 #define MATRIX_OFFSET_CONTROL_TYPE 82
1143 #define MATRIX_OFFSET_WIDTH 90
1144 #define MATRIX_OFFSET_HEIGHT 92
1145 #define MATRIX_OFFSET_VALUES_OFFSET 94
1146 #define MATRIX_OFFSET_NUMBER_OF_VALUES 96
1147 #define MATRIX_OFFSET_NUMBER_OF_SOURCES 98
1148 #define MATRIX_OFFSET_BASE_SOURCE 100
1150 #define MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT 4
1151 #define MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET 6
1153 #define SIGNAL_SPLITTER_OFFSET_OBJECT_NAME 4
1154 #define SIGNAL_SPLITTER_OFFSET_LOCALIZED_DESCRIPTION 68
1155 #define SIGNAL_SPLITTER_OFFSET_BLOCK_LATENCY 70
1156 #define SIGNAL_SPLITTER_OFFSET_CONTROL_LATENCY 74
1157 #define SIGNAL_SPLITTER_OFFSET_CONTROL_DOMAIN 78
1158 #define SIGNAL_SPLITTER_OFFSET_SIGNAL_TYPE 80
1159 #define SIGNAL_SPLITTER_OFFSET_SIGNAL_INDEX 82
1160 #define SIGNAL_SPLITTER_OFFSET_SIGNAL_OUTPUT 84
1161 #define SIGNAL_SPLITTER_OFFSET_NUMBER_OF_OUTPUTS 86
1162 #define SIGNAL_SPLITTER_OFFSET_SPLITTER_MAP_COUNT 88
1163 #define SIGNAL_SPLITTER_OFFSET_SPLITTER_MAP_OFFSET 90
1165 #define SIGNAL_COMBINER_OFFSET_OBJECT_NAME 4
1166 #define SIGNAL_COMBINER_OFFSET_LOCALIZED_DESCRIPTION 68
1167 #define SIGNAL_COMBINER_OFFSET_BLOCK_LATENCY 70
1168 #define SIGNAL_COMBINER_OFFSET_CONTROL_LATENCY 74
1169 #define SIGNAL_COMBINER_OFFSET_CONTROL_DOMAIN 78
1170 #define SIGNAL_COMBINER_OFFSET_COMBINER_MAP_COUNT 80
1171 #define SIGNAL_COMBINER_OFFSET_COMBINER_MAP_OFFSET 82
1172 #define SIGNAL_COMBINER_OFFSET_SOURCES_OFFSET 84
1173 #define SIGNAL_COMBINER_OFFSET_NUMBER_OF_SOURCES 86
1175 #define SIGNAL_DEMULTIPLEXER_OFFSET_OBJECT_NAME 4
1176 #define SIGNAL_DEMULTIPLEXER_OFFSET_LOCALIZED_DESCRIPTION 68
1177 #define SIGNAL_DEMULTIPLEXER_OFFSET_BLOCK_LATENCY 70
1178 #define SIGNAL_DEMULTIPLEXER_OFFSET_CONTROL_LATENCY 74
1179 #define SIGNAL_DEMULTIPLEXER_OFFSET_CONTROL_DOMAIN 78
1180 #define SIGNAL_DEMULTIPLEXER_OFFSET_SIGNAL_TYPE 80
1181 #define SIGNAL_DEMULTIPLEXER_OFFSET_SIGNAL_INDEX 82
1182 #define SIGNAL_DEMULTIPLEXER_OFFSET_SIGNAL_OUTPUT 84
1183 #define SIGNAL_DEMULTIPLEXER_OFFSET_NUMBER_OF_OUTPUTS 86
1184 #define SIGNAL_DEMULTIPLEXER_OFFSET_DEMULTIPLEXER_MAP_COUNT 88
1185 #define SIGNAL_DEMULTIPLEXER_OFFSET_DEMULTIPLEXER_MAP_OFFSET 90
1187 #define SIGNAL_MULTIPLEXER_OFFSET_OBJECT_NAME 4
1188 #define SIGNAL_MULTIPLEXER_OFFSET_LOCALIZED_DESCRIPTION 68
1189 #define SIGNAL_MULTIPLEXER_OFFSET_BLOCK_LATENCY 70
1190 #define SIGNAL_MULTIPLEXER_OFFSET_CONTROL_LATENCY 74
1191 #define SIGNAL_MULTIPLEXER_OFFSET_CONTROL_DOMAIN 78
1192 #define SIGNAL_MULTIPLEXER_OFFSET_MULTIPLEXER_MAP_COUNT 80
1193 #define SIGNAL_MULTIPLEXER_OFFSET_MULTIPLEXER_MAP_OFFSET 82
1194 #define SIGNAL_MULTIPLEXER_OFFSET_SOURCES_OFFSET 84
1195 #define SIGNAL_MULTIPLEXER_OFFSET_NUMBER_OF_SOURCES 86
1197 #define SIGNAL_TRANSCODER_OFFSET_OBJECT_NAME 4
1198 #define SIGNAL_TRANSCODER_OFFSET_LOCALIZED_DESCRIPTION 68
1199 #define SIGNAL_TRANSCODER_OFFSET_BLOCK_LATENCY 70
1200 #define SIGNAL_TRANSCODER_OFFSET_CONTROL_LATENCY 74
1201 #define SIGNAL_TRANSCODER_OFFSET_CONTROL_DOMAIN 78
1202 #define SIGNAL_TRANSCODER_OFFSET_CONTROL_VALUE_TYPE 80
1203 #define SIGNAL_TRANSCODER_OFFSET_VALUES_OFFSET 82
1204 #define SIGNAL_TRANSCODER_OFFSET_NUMBER_OF_VALUES 84
1205 #define SIGNAL_TRANSCODER_OFFSET_SIGNAL_TYPE 86
1206 #define SIGNAL_TRANSCODER_OFFSET_SIGNAL_INDEX 88
1207 #define SIGNAL_TRANSCODER_OFFSET_SIGNAL_OUTPUT 90
1209 #define CLOCK_DOMAIN_OFFSET_OBJECT_NAME 4
1210 #define CLOCK_DOMAIN_OFFSET_LOCALIZED_DESCRIPTION 68
1211 #define CLOCK_DOMAIN_OFFSET_CLOCK_SOURCE_INDEX 70
1212 #define CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_OFFSET 72
1213 #define CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_COUNT 74
1215 #define CONTROL_BLOCK_OFFSET_OBJECT_NAME 4
1216 #define CONTROL_BLOCK_OFFSET_LOCALIZED_DESCRIPTION 68
1217 #define CONTROL_BLOCK_OFFSET_NUMBER_OF_CONTROLS 70
1218 #define CONTROL_BLOCK_OFFSET_BASE_CONTROL 72
1219 #define CONTROL_BLOCK_OFFSET_FINAL_CONTROL_INDEX 74
1222 /* AEM Stream Format Offsets */
1223 /* IEEE 1722.1 draft D21 section 7.3.2 */
1224 #define AEM_OFFSET_SF_SUBTYPE 0
1226 #define AEM_OFFSET_SF_VERSION 0
1228 /* IIDC */
1229 #define AEM_OFFSET_SF 1
1230 #define AEM_OFFSET_IIDC_FORMAT 5
1231 #define AEM_OFFSET_IIDC_MODE 6
1232 #define AEM_OFFSET_IIDC_RATE 7
1234 /* 61883 */
1235 #define AEM_OFFSET_FMT 1
1237 /* 61883-6 */
1238 #define AEM_OFFSET_FDF_EVT 2
1239 #define AEM_OFFSET_FDF_SFC 2
1240 #define AEM_OFFSET_DBS 3
1241 #define AEM_OFFSET_B 4
1242 #define AEM_OFFSET_NB 4
1244 /* 61883-6 AM824 */
1245 #define AEM_OFFSET_LABEL_IEC_60958_CNT 5
1246 #define AEM_OFFSET_LABEL_MBLA_CNT 6
1247 #define AEM_OFFSET_LABEL_MIDI_CNT 7
1248 #define AEM_OFFSET_LABEL_SMPTE_CNT 7
1250 /* 61883-8 */
1251 #define AEM_OFFSET_VIDEO_MODE 5
1252 #define AEM_OFFSET_COMPRESS_MODE 6
1253 #define AEM_OFFSET_COLOR_SPACE 7
1255 /* AECP Vendor Unique Command Specific Offsets */
1256 #define AECP_VUC_OFFSET_PROTOCOL_ID 22
1258 /* AECP Video Cluster Format Offsets */
1259 /* IEEE 1722.1 draft D21 section 7.3.7 */
1260 #if 0 /* TODO: These are all different in D21 */
1261 #define AEM_OFFSET_MFD_TYPE 3
1262 #define AEM_OFFSET_DIV 4
1263 #define AEM_OFFSET_INTERLACE 4
1264 #define AEM_OFFSET_CHANNELS 4
1265 #define AEM_OFFSET_COLOR_FORMAT 4
1266 #define AEM_OFFSET_BPP 5
1267 #define AEM_OFFSET_ASPECT_X 6
1268 #define AEM_OFFSET_ASPECT_Y 7
1269 #define AEM_OFFSET_FRAME_RATE 8
1270 #define AEM_OFFSET_COMP1 9
1271 #define AEM_OFFSET_COMP2 10
1272 #define AEM_OFFSET_COMP3 10
1273 #define AEM_OFFSET_COMP4 11
1274 #define AEM_OFFSET_SVMF_WIDTH 12
1275 #define AEM_OFFSET_SVMF_HEIGHT 14
1277 #define AEM_OFFSET_CS_EUI64 8
1278 #endif
1280 /* Bitmasks */
1281 #define AECP_STATUS_CODE_MASK 0xf8
1282 #define AECP_TOKEN_LENGTH_MASK 0x07ff
1283 #define AECP_KEY_PART_MASK 0x78
1284 #define AECP_CONTINUED_MASK 0x80
1285 #define AECP_CD_LENGTH_MASK 0x07ff
1286 #define AECP_COMMAND_TYPE_MASK 0x7fff
1287 #define AECP_KEYCHAIN_ID_MASK 0xe0
1288 #define AECP_KEYTYPE_MASK 0x1c
1289 #define AECP_KEY_COUNT_MASK 0x0fff
1290 #define AECP_KEY_LENGTH_MASK 0x07ff
1291 #define AECP_KEY_NUMBER_MASK 0x04ff
1292 #define AECP_MATRIX_DIRECTION_MASK 0x70
1293 #define AECP_MATRIX_REP_MASK 0x80
1294 #define AECP_MATRIX_VALUE_COUNT_MASK 0x0fff
1295 #define AECP_MSG_TYPE_MASK 0x0f
1296 #define AECP_PERSISTENT_FLAG_MASK 0x00000001
1297 #define AECP_RELEASE_FLAG_MASK 0x80000000
1298 #define AECP_SIGNATURE_ID_MASK 0x0fff
1299 #define AECP_SIGNATURE_INFO_MASK 0x00f0
1300 #define AECP_SIGNATURE_LENGTH_MASK 0x3ff
1301 #define AECP_UNLOCK_FLAG_MASK 0x01
1302 #define AECP_U_FLAG_MASK 0x80
1303 #define AECP_MSRP_MAPPINGS_COUNT_MASK 0x00
1304 #define AECP_AS_CAPABLE_FLAG_MASK 0x01
1305 #define AECP_GPTP_ENABLED_FLAG_MASK 0x02
1306 #define AECP_SRP_ENABLED_FLAG_MASK 0x04
1309 /* AECP Sampling Rate masks */
1310 #define AECP_SAMPLING_RATE_PULL_MASK 0xE0000000
1311 #define AECP_SAMPLING_RATE_BASE_FREQ_MASK 0x1FFFFFFF
1313 /* Stream Flags (7.130) */
1314 #define AECP_STREAM_VLAN_ID_VALID_FLAG_MASK 0x02000000
1315 #define AECP_CONNECTED_FLAG_MASK 0x04000000
1316 #define AECP_MSRP_FAILURE_VALID_FLAG_MASK 0x08000000
1317 #define AECP_DEST_MAC_VALID_FLAG_MASK 0x10000000
1318 #define AECP_MSRP_ACC_LAT_VALID_FLAG_MASK 0x20000000
1319 #define AECP_STREAM_ID_VALID_FLAG_MASK 0x40000000
1320 #define AECP_STREAM_FORMAT_VALID_FLAG_MASK 0x80000000
1322 /* key permission flag masks */
1323 #define AECP_PRIVATE_KEY_READ_FLAG_MASK 0x80000000
1324 #define AECP_PRIVATE_KEY_WRITE_FLAG_MASK 0x40000000
1325 #define AECP_PUBLIC_KEY_WRITE_FLAG_MASK 0x20000000
1326 #define AECP_CONNECTION_FLAG_MASK 0x10000000
1327 #define AECP_CONTROL_ADMIN_FLAG_MASK 0x08000000
1328 #define AECP_MEM_OBJ_ADMIN_FLAG_MASK 0x04000000
1329 #define AECP_MEM_OBJ_SETTINGS_FLAG_MASK 0x02000000
1330 #define AECP_CONTROL_USER_L1_FLAG_MASK 0x00000008
1331 #define AECP_CONTROL_USER_L2_FLAG_MASK 0x00000004
1332 #define AECP_CONTROL_USER_L3_FLAG_MASK 0x00000002
1333 #define AECP_CONTROL_USER_L4_FLAG_MASK 0x00000001
1335 /* 7.133-139 counters_valid flag masks */
1336 #define AECP_COUNTERS_VALID_LINK_UP 0x00000001
1337 #define AECP_COUNTERS_VALID_LINK_DOWN 0x00000002
1338 #define AECP_COUNTERS_VALID_PACKETS_TX 0x00000004
1339 #define AECP_COUNTERS_VALID_PACKETS_RX 0x00000008
1340 #define AECP_COUNTERS_VALID_RX_CRC_ERROR 0x00000010
1341 #define AECP_COUNTERS_VALID_GPTP_GM_CHANGED 0x00000020
1343 #define AECP_COUNTERS_VALID_CLOCK_DOMAIN_LOCKED 0x00000001
1344 #define AECP_COUNTERS_VALID_CLOCK_DOMAIN_UNLOCKED 0x00000002
1346 #define AECP_COUNTERS_VALID_MEDIA_LOCKED 0x00000001
1347 #define AECP_COUNTERS_VALID_MEDIA_UNLOCKED 0x00000002
1348 #define AECP_COUNTERS_VALID_STREAM_RESET 0x00000004
1349 #define AECP_COUNTERS_VALID_SEQ_NUM_MISMATCH 0x00000008
1350 #define AECP_COUNTERS_VALID_MEDIA_RESET 0x00000010
1351 #define AECP_COUNTERS_VALID_TIMESTAMP_UNCERTAIN 0x00000020
1352 #define AECP_COUNTERS_VALID_TIMESTAMP_VALID 0x00000040
1353 #define AECP_COUNTERS_VALID_TIMESTAMP_NOT_VALID 0x00000080
1354 #define AECP_COUNTERS_VALID_UNSUPPORTED_FORMAT 0x00000100
1355 #define AECP_COUNTERS_VALID_LATE_TIMESTAMP 0x00000200
1356 #define AECP_COUNTERS_VALID_EARLY_TIMESTAMP 0x00000400
1357 #define AECP_COUNTERS_VALID_STREAM_PACKETS_RX 0x00000800
1358 #define AECP_COUNTERS_VALID_STREAM_PACKETS_TX 0x00001000
1360 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_8 0x01000000
1361 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_7 0x02000000
1362 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_6 0x04000000
1363 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_5 0x08000000
1364 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_4 0x10000000
1365 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_3 0x20000000
1366 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_2 0x40000000
1367 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_1 0x80000000
1369 #define AEM_CLOCK_SYNC_SOURCE_FLAG_MASK 0x0001
1370 #define AEM_ASYNC_SAMPLE_RATE_CONV_FLAG_MASK 0x0002
1371 #define AEM_SYNC_SAMPLE_RATE_CONV_FLAG_MASK 0x0004
1373 #define AEM_BASE_FREQUENCY_MASK 0x1fffffff
1374 #define AEM_CAPTIVE_FLAG_MASK 0x0002
1375 #define AEM_CLASS_A_FLAG_MASK 0x0002
1376 #define AEM_CLASS_B_FLAG_MASK 0x0004
1378 #define AEM_MASK_B 0x80
1379 #define AEM_MASK_BPP 0x3F
1380 #define AEM_MASK_CHANNELS 0x3C
1381 #define AEM_MASK_COLOR_FORMAT 0x03C0
1382 #define AEM_MASK_COMP1 0x0F80
1383 #define AEM_MASK_COMP2 0x7C
1384 #define AEM_MASK_COMP3 0x03E0
1385 #define AEM_MASK_COMP4 0x1F
1386 #define AEM_MASK_DIV 0x80
1387 #define AEM_MASK_FDF_EVT 0xF8
1388 #define AEM_MASK_FDF_SFC 0x07
1389 #define AEM_MASK_FMT 0x3F
1390 #define AEM_MASK_INTERLACE 0x40
1391 #define AEM_MASK_LABEL_MIDI_CNT 0xF0
1392 #define AEM_MASK_LABEL_SMPTE_CNT 0x0F
1393 #define AEM_MASK_NB 0x40
1394 #define AEM_MASK_OUI24 0xFFFFFF00
1395 #define AEM_MASK_SF 0x80
1396 #define AEM_MASK_SF_SUBTYPE 0x7F
1397 #define AEM_MASK_SF_VERSION 0x80
1398 #define AEM_PULL_FIELD_MASK 0xe0
1401 #define MFD_TYPE_VIDEO 0x00
1402 #define MFD_TYPE_TRANSPORT_STRM 0x01
1403 #define MFD_TYPE_MIDI 0x02
1404 #define MFD_TYPE_TIME_CODE 0x03
1405 #define MFD_TYPE_CONTROL_PROTO 0x04
1407 #define COLOR_FORMAT_MONO 0x0
1408 #define COLOR_FORMAT_RGB 0x1
1409 #define COLOR_FORMAT_RGBA 0x2
1410 #define COLOR_FORMAT_BGRA 0x3
1411 #define COLOR_FORMAT_CMYK 0x4
1412 #define COLOR_FORMAT_HSL 0x5
1413 #define COLOR_FORMAT_YUV 0x6
1414 #define COLOR_FORMAT_YCBCR 0x7
1415 #define COLOR_FORMAT_YPBPR 0x08
1417 #define OUI24_STANDARD_MEDIA_FORMAT 0x90e0f0
1419 #define MEMORY_OBJECT_TYPE_FIRMWARE_IMAGE 0x0000
1420 #define MEMORY_OBJECT_TYPE_VENDOR_SPECIFIC 0x0001
1421 #define MEMORY_OBJECT_TYPE_CRASH_DUMP 0x0002
1422 #define MEMORY_OBJECT_TYPE_LOG_OBJECT 0x0003
1423 #define MEMORY_OBJECT_TYPE_AUTOSTART_SETTINGS 0x0004
1424 #define MEMORY_OBJECT_TYPE_SNAPSHOT_SETTINGS 0x0005
1426 #define KEY_TYPE_NONE 0
1427 #define KEY_TYPE_SHA256 1
1428 #define KEY_TYPE_AES128 2
1429 #define KEY_TYPE_AES256 3
1430 #define KEY_TYPE_RSA1024_PUBLIC 4
1431 #define KEY_TYPE_RSA1024_PRIVATE 5
1432 #define KEY_TYPE_X509 6
1434 static const value_string aecp_key_type_type_vals [] = {
1435 {KEY_TYPE_NONE, "NO_KEY"},
1436 {KEY_TYPE_SHA256, "SHA256"},
1437 {KEY_TYPE_AES128, "AES128"},
1438 {KEY_TYPE_AES256, "AES256"},
1439 {KEY_TYPE_RSA1024_PUBLIC, "RSA1024_PUBLIC"},
1440 {KEY_TYPE_RSA1024_PRIVATE, "RSA1024_PRIVATE"},
1441 {KEY_TYPE_X509, "RSA1024_X509"},
1442 {0, NULL}
1445 static const value_string aem_memory_object_type_vals [] = {
1446 {MEMORY_OBJECT_TYPE_FIRMWARE_IMAGE, "FIRMWARE_IMAGE"},
1447 {MEMORY_OBJECT_TYPE_VENDOR_SPECIFIC, "VENDOR_SPECIFIC"},
1448 {MEMORY_OBJECT_TYPE_CRASH_DUMP, "CRASH_DUMP"},
1449 {MEMORY_OBJECT_TYPE_LOG_OBJECT, "LOG_OBJECT"},
1450 {MEMORY_OBJECT_TYPE_AUTOSTART_SETTINGS, "AUTOSTART_SETTINGS"},
1451 {MEMORY_OBJECT_TYPE_SNAPSHOT_SETTINGS, "SNAPSHOT_SETTINGS"},
1452 {0, NULL}
1455 #if 0
1456 static const value_string aem_stream_format_subtype_vals [] = {
1457 {IEC_61883_IIDC_SUBTYPE, "IEC_61883_IIDC_SUBTYPE"},
1458 {MMA_SUBTYPE, "MMA_SUBTYPE"},
1459 {AVTP_AUDIO_SUBTYPE, "AVTP_AUDIO_SUBTYPE"},
1460 {AVTP_VIDEO_SUBTYPE, "AVTP_VIDEO_SUBTYPE"},
1461 {EXPERIMENTAL_SUBTYPE, "EXPERIMENTAL_SUBTYPE"},
1462 {0, NULL}
1465 static const value_string aem_color_format_type_vals [] = {
1466 {COLOR_FORMAT_MONO, "Monochrome"},
1467 {COLOR_FORMAT_RGB, "RGB"},
1468 {COLOR_FORMAT_RGBA, "RGBA"},
1469 {COLOR_FORMAT_BGRA, "BGRA"},
1470 {COLOR_FORMAT_CMYK, "CMYK"},
1471 {COLOR_FORMAT_HSL, "HSL"},
1472 {COLOR_FORMAT_YUV, "YUV"},
1473 {COLOR_FORMAT_YCBCR, "YCbCr"},
1474 {COLOR_FORMAT_YPBPR, "YPbPr"},
1475 {0, NULL}
1478 static const value_string aem_mfd_type_vals [] = {
1479 {MFD_TYPE_VIDEO, "VIDEO"},
1480 {MFD_TYPE_TRANSPORT_STRM, "TRANSPORT_STREAM"},
1481 {MFD_TYPE_MIDI, "MIDI"},
1482 {MFD_TYPE_TIME_CODE, "TIME_CODE"},
1483 {MFD_TYPE_CONTROL_PROTO, "CONTROL_PROTOCOL"},
1484 {0, NULL}
1486 #endif
1488 static const value_string aem_clock_source_type_vals [] = {
1489 {AEM_CLOCK_INTERNAL , "INTERNAL"},
1490 {AEM_CLOCK_EXTERNAL , "EXTERNAL"},
1491 {AEM_CLOCK_INPUT_STREAM , "INPUT STREAM"},
1492 {AEM_CLOCK_MEDIA_CLOCK_STREAM, "MEDIA CLOCK STREAM"},
1493 {0, NULL}
1496 /* frequency multipliers from table 7.6 pull field values */
1497 static const value_string aem_frequency_multiplier_type_vals [] = {
1498 {0, "1.0"},
1499 {1, "1/1.001"},
1500 {2, "1.001"},
1501 {3, "24/25"},
1502 {4, "25/24"},
1503 {0, NULL}
1506 static const value_string aem_control_value_type_vals [] = {
1507 {AEM_CONTROL_LINEAR_INT8 ,"CONTROL_LINEAR_INT8"},
1508 {AEM_CONTROL_LINEAR_UINT8 ,"CONTROL_LINEAR_UINT8"},
1509 {AEM_CONTROL_LINEAR_INT16 ,"CONTROL_LINEAR_INT16"},
1510 {AEM_CONTROL_LINEAR_UINT16 ,"CONTROL_LINEAR_UINT16"},
1511 {AEM_CONTROL_LINEAR_INT32 ,"CONTROL_LINEAR_INT32"},
1512 {AEM_CONTROL_LINEAR_UINT32 ,"CONTROL_LINEAR_UINT32"},
1513 {AEM_CONTROL_LINEAR_INT64 ,"CONTROL_LINEAR_INT64"},
1514 {AEM_CONTROL_LINEAR_UINT64 ,"CONTROL_LINEAR_UINT64"},
1515 {AEM_CONTROL_LINEAR_FLOAT ,"CONTROL_LINEAR_FLOAT"},
1516 {AEM_CONTROL_LINEAR_DOUBLE ,"CONTROL_LINEAR_DOUBLE"},
1517 {AEM_CONTROL_SELECTOR_INT8 ,"CONTROL_SELECTOR_INT8"},
1518 {AEM_CONTROL_SELECTOR_UINT8 ,"CONTROL_SELECTOR_UINT8"},
1519 {AEM_CONTROL_SELECTOR_INT16 ,"CONTROL_SELECTOR_INT16"},
1520 {AEM_CONTROL_SELECTOR_UINT16 ,"CONTROL_SELECTOR_UINT16"},
1521 {AEM_CONTROL_SELECTOR_INT32 ,"CONTROL_SELECTOR_INT32"},
1522 {AEM_CONTROL_SELECTOR_UINT32 ,"CONTROL_SELECTOR_UINT32"},
1523 {AEM_CONTROL_SELECTOR_INT64 ,"CONTROL_SELECTOR_INT64"},
1524 {AEM_CONTROL_SELECTOR_UINT64 ,"CONTROL_SELECTOR_UINT64"},
1525 {AEM_CONTROL_SELECTOR_FLOAT ,"CONTROL_SELECTOR_FLOAT"},
1526 {AEM_CONTROL_SELECTOR_DOUBLE ,"CONTROL_SELECTOR_DOUBLE"},
1527 {AEM_CONTROL_UTF8 ,"CONTROL_UTF8"},
1528 {AEM_CONTROL_BODE_PLOT ,"CONTROL_BODE_PLOT"},
1529 {AEM_CONTROL_ARRAY_INT8 ,"CONTROL_ARRAY_INT8"},
1530 {AEM_CONTROL_ARRAY_UINT8 ,"CONTROL_ARRAY_UINT8"},
1531 {AEM_CONTROL_ARRAY_INT16 ,"CONTROL_ARRAY_INT16"},
1532 {AEM_CONTROL_ARRAY_UINT16 ,"CONTROL_ARRAY_UINT16"},
1533 {AEM_CONTROL_ARRAY_INT32 ,"CONTROL_ARRAY_INT32"},
1534 {AEM_CONTROL_ARRAY_UINT32 ,"CONTROL_ARRAY_UINT32"},
1535 {AEM_CONTROL_ARRAY_INT64 ,"CONTROL_ARRAY_INT64"},
1536 {AEM_CONTROL_ARRAY_UINT64 ,"CONTROL_ARRAY_UINT64"},
1537 {AEM_CONTROL_ARRAY_FLOAT ,"CONTROL_ARRAY_FLOAT"},
1538 {AEM_CONTROL_ARRAY_DOUBLE ,"CONTROL_ARRAY_DOUBLE"},
1539 {AEM_CONTROL_VENDOR ,"CONTROL_CONTROL_VENDOR"},
1540 {0 , NULL}
1543 static const value_string aem_jack_type_vals [] = {
1544 {AEM_JACKTYPE_SPEAKER ,"SPEAKER" },
1545 {AEM_JACKTYPE_HEADPHONE ,"HEADPHONE" },
1546 {AEM_JACKTYPE_ANALOG_MICROPHONE ,"ANALOG_MICROPHONE" },
1547 {AEM_JACKTYPE_SPDIF ,"SPDIF" },
1548 {AEM_JACKTYPE_ADAT ,"ADAT" },
1549 {AEM_JACKTYPE_TDIF ,"TDIF" },
1550 {AEM_JACKTYPE_MADI ,"MADI" },
1551 {AEM_JACKTYPE_UNBALANCED_ANALOG ,"UNBALANCED_ANALOG" },
1552 {AEM_JACKTYPE_BALANCED_ANALOG ,"BALANCED_ANALOG" },
1553 {AEM_JACKTYPE_DIGITAL ,"DIGITAL" },
1554 {AEM_JACKTYPE_MIDI ,"MIDI" },
1555 {AEM_JACKTYPE_AES_EBU ,"AES_EBU" },
1556 {AEM_JACKTYPE_COMPOSITE_VIDEO ,"COMPOSITE_VIDEO" },
1557 {AEM_JACKTYPE_S_VHS_VIDEO ,"S_VHS_VIDEO" },
1558 {AEM_JACKTYPE_COMPONENT_VIDEO ,"COMPONENT_VIDEO" },
1559 {AEM_JACKTYPE_DVI ,"DVI" },
1560 {AEM_JACKTYPE_HDMI ,"HDMI" },
1561 {AEM_JACKTYPE_UDI ,"UDI" },
1562 {AEM_JACKTYPE_DISPLAYPORT ,"DISPLAYPORT" },
1563 {AEM_JACKTYPE_ANTENNA ,"ANTENNA" },
1564 {AEM_JACKTYPE_ANALOG_TUNER ,"ANALOG_TUNER" },
1565 {AEM_JACKTYPE_ETHERNET ,"ETHERNET" },
1566 {AEM_JACKTYPE_WIFI ,"WIFI" },
1567 {AEM_JACKTYPE_USB ,"USB" },
1568 {AEM_JACKTYPE_PCI ,"PCI" },
1569 {AEM_JACKTYPE_PCI_E ,"PDI_E" },
1570 {AEM_JACKTYPE_SCSI ,"SCSI" },
1571 {AEM_JACKTYPE_ATA ,"ATA" },
1572 {AEM_JACKTYPE_IMAGER ,"IMAGER" },
1573 {AEM_JACKTYPE_IR ,"IR" },
1574 {AEM_JACKTYPE_THUNDERBOLT ,"THUNDERBOLT" },
1575 {AEM_JACKTYPE_SATA ,"SATA" },
1576 {AEM_JACKTYPE_SMPTE_LTC ,"SMPTE_LTC" },
1577 {AEM_JACKTYPE_DIGITAL_MICROPHONE ,"DIGITAL_MICROPHONE" },
1578 {0, NULL }
1581 /* value_string uses a 32 bit integer id, control uses 64.
1582 * TODO - make custom formatter for hf_aem_control_type
1583 static const value_string aem_control_type_vals [] = {
1584 {AEM_CONTROL_ENABLE , "ENABLE"},
1585 {AEM_CONTROL_DELAY , "DELAY"},
1586 {AEM_CONTROL_POW_LINE_FREQ , "POW_LINE_FREQ"},
1587 {AEM_CONTROL_ROLLPITCHYAW_ABS , "ROLLPITCHYAW_ABS"},
1588 {AEM_CONTROL_ROLLPITCHYAW_REL , "ROLLPITCHYAW_REL"},
1589 {AEM_CONTROL_SURGESWAYHEAVE_ABS , "SURGESWAYHEAVE_ABS"},
1590 {AEM_CONTROL_SURGESWAYHEAVE_REL , "SURGESWAYHEAVE_REL"},
1591 {AEM_CONTROL_IDENTIFY , "IDENTIFY"},
1592 {AEM_CONTROL_POWER_STATUS , "POWER_STATUS"},
1593 {AEM_CONTROL_FAN_STATUS , "FAN_STATUS"},
1594 {AEN_CONTROL_TEMPERATURE , "TEMPERATURE"},
1595 {AEM_CONTROL_TEMPERATURE_SENSOR , "TEMPERATURE_SENSOR"},
1596 {AEM_CONTROL_ALTITUDE , "ALTITUDE"},
1597 {AEM_CONTROL_HUMIDITY , "HUMIDITY"},
1598 {AEM_CONTROL_MUTE , "MUTE"},
1599 {AEM_CONTROL_VOLUME , "VOLUME"},
1600 {AEM_CONTROL_INVERT , "INVERT"},
1601 {AEM_CONTROL_PANPOT , "PANPOT"},
1602 {AEM_CONTROL_ISOLATE , "ISOLATE"},
1603 {AEM_CONTROL_POSITION , "POSITION"},
1604 {AEM_CONTROL_PHANTOM , "PHANTOM"},
1605 {AEM_CONTROL_AUDIO_SCALE , "AUDIO_SCALE"},
1606 {AEM_CONTROL_AUDIO_METERS , "AUDIO_METERS"},
1607 {AEM_CONTROL_AUDIO_SPECTRUM , "AUDIO_SPECTRUM"},
1608 {AEM_CONTROL_FILTER_RESPONSE , "FILTER_RESPONSE"},
1609 {AEM_CONTROL_SCANNING_MODE , "SCANNING_MODE"},
1610 {AEM_CONTROL_AUTO_EXP_MODE , "AUTO_EXP_MODE"},
1611 {AEM_CONTROL_AUTO_EXP_PRIO , "AUTO_EXP_PRIO"},
1612 {AEM_CONTROL_EXP_TIME_ABS , "EXP_TIME_ABS"},
1613 {AEM_CONTROL_EXP_TIME_REL , "EXP_TIME_REL"},
1614 {AEM_CONTROL_FOCUS_ABS , "FOCUS_ABS"},
1615 {AEM_CONTROL_FOCUS_REL , "FOCUS_REL"},
1616 {AEM_CONTROL_FOCUS_AUTO , "FOCUS_AUTO"},
1617 {AEM_CONTROL_IRIS_ABS , "IRIS_ABS"},
1618 {AEM_CONTROL_IRIS_REL , "IRIS_REL"},
1619 {AEM_CONTROL_ZOOM_ABS , "ZOOM_ABS"},
1620 {AEM_CONTROL_ZOOM_REL , "ZOOM_REL"},
1621 {AEM_CONTROL_PRIVACY , "PRIVACY"},
1622 {AEM_CONTROL_BACKLIGHT , "BACKLIGHT"},
1623 {AEM_CONTROL_BRIGHTNESS , "BRIGHTNESS"},
1624 {AEM_CONTROL_CONTRAST , "CONTRAST"},
1625 {AEM_CONTROL_GAIN , "GAIN"},
1626 {AEM_CONTROL_HUE , "HUE"},
1627 {AEM_CONTROL_SATURATION , "SATURATION"},
1628 {AEM_CONTROL_SHARPNESS , "SHARPNESS"},
1629 {AEM_CONTROL_GAMMA , "GAMMA"},
1630 {AEM_CONTROL_WHITE_BAL_TEMP , "WHITE_BAL_TEMP"},
1631 {AEM_CONTROL_WHITE_BAL_TENP_AUTO , "WHITE_BAL_TEMP_AUTO"},
1632 {AEM_CONTROL_WHITE_BAL_COMP , "WHITE_BAL_COMP"},
1633 {AEM_CONTROL_WHITE_BAL_COMP_AUTO , "WHITE_BAL_COMP_AUTO"},
1634 {AEM_CONTROL_DIGITAL_ZOOM , "DIGITAL_ZOOM"},
1635 {0 , NULL}
1639 #if 0
1640 static const value_string aecp_address_type_vals [] = {
1641 {AECP_ADDRESS_MAC , "MAC"},
1642 {AECP_ADDRESS_IPV4 , "IPV4"},
1643 {AECP_ADDRESS_IPV6 , "IPV6"},
1644 {0 , NULL}
1646 #endif
1648 static const value_string aecp_keychain_id_type_vals [] = {
1649 {AECP_KEYCHAIN_NONE , "NONE"},
1650 {AECP_KEYCHAIN_MANUFACTURER , "MANUFACTURER"},
1651 {AECP_KEYCHAIN_PRODUCT , "PRODUCT"},
1652 {AECP_KEYCHAIN_ENTITY , "ENTITY"},
1653 {AECP_KEYCHAIN_USER , "USER"},
1654 {0 , NULL}
1657 static const value_string aecp_direction_type_vals [] = {
1658 {AECP_DIRECTION_HORIZONTAL , "HORIZONTAL"},
1659 {AECP_DIRECTION_VERTICAL , "VERTICAL"},
1660 {0 , NULL}
1663 static const value_string aem_descriptor_type_vals[] = {
1664 {AEM_DESCRIPTOR_ENTITY , "ENTITY"},
1665 {AEM_DESCRIPTOR_CONFIGURATION , "CONFIGURATION"},
1666 {AEM_DESCRIPTOR_AUDIO_UNIT , "AUDIO_UNIT"},
1667 {AEM_DESCRIPTOR_VIDEO_UNIT , "VIDEO_UNIT"},
1668 {AEM_DESCRIPTOR_SENSOR_UNIT , "SENSOR_UNIT"},
1669 {AEM_DESCRIPTOR_STREAM_INPUT , "STREAM_INPUT"},
1670 {AEM_DESCRIPTOR_STREAM_OUTPUT , "STREAM_OUTPUT"},
1671 {AEM_DESCRIPTOR_JACK_INPUT , "JACK_INPUT"},
1672 {AEM_DESCRIPTOR_JACK_OUTPUT, "JACK_OUTPUT"},
1673 {AEM_DESCRIPTOR_STREAM_PORT_INPUT , "STREAM_PORT_INPUT"},
1674 {AEM_DESCRIPTOR_STREAM_PORT_OUTPUT , "STREAM_PORT_OUTPUT"},
1675 {AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT , "EXTERNAL_PORT_INPUT"},
1676 {AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT, "EXTERNAL_PORT_OUTPUT"},
1677 {AEM_DESCRIPTOR_INTERNAL_PORT_INPUT , "INTERNAL_PORT_INPUT"},
1678 {AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT, "INTERNAL_PORT_OUTPUT"},
1679 {AEM_DESCRIPTOR_AVB_INTERFACE , "AVB_INTERFACE"},
1680 {AEM_DESCRIPTOR_CLOCK_SOURCE , "CLOCK_SOURCE"},
1681 {AEM_DESCRIPTOR_AUDIO_CLUSTER , "AUDIO_CLUSTER"},
1682 {AEM_DESCRIPTOR_VIDEO_CLUSTER , "VIDEO_CLUSTER"},
1683 {AEM_DESCRIPTOR_SENSOR_CLUSTER , "SENSOR_CLUSTER"},
1684 {AEM_DESCRIPTOR_AUDIO_MAP , "AUDIO_MAP"},
1685 {AEM_DESCRIPTOR_VIDEO_MAP , "VIDEO_MAP"},
1686 {AEM_DESCRIPTOR_SENSOR_MAP , "SENSOR_MAP"},
1687 {AEM_DESCRIPTOR_CONTROL , "CONTROL"},
1688 {AEM_DESCRIPTOR_SIGNAL_SELECTOR , "SIGNAL_SELECTOR"},
1689 {AEM_DESCRIPTOR_MIXER , "MIXER"},
1690 {AEM_DESCRIPTOR_MATRIX , "MATRIX"},
1691 {AEM_DESCRIPTOR_LOCALE , "LOCALE"},
1692 {AEM_DESCRIPTOR_STRINGS , "STRINGS"},
1693 {AEM_DESCRIPTOR_MATRIX_SIGNAL , "MATRIX_SIGNAL"},
1694 {AEM_DESCRIPTOR_MEMORY_OBJECT , "MEMORY_OBJECT"},
1695 {AEM_DESCRIPTOR_SIGNAL_SPLITTER , "SIGNAL_SPLITTER"},
1696 {AEM_DESCRIPTOR_SIGNAL_COMBINER , "SIGNAL_COMBINER"},
1697 {AEM_DESCRIPTOR_SIGNAL_DEMULTIPLEXER, "SIGNAL_DEMULTIPLEXER"},
1698 {AEM_DESCRIPTOR_SIGNAL_MULTIPLEXER , "SIGNAL_MULTIPLEXER"},
1699 {AEM_DESCRIPTOR_SIGNAL_TRANSCODER , "SIGNAL_TRANSCODER"},
1700 {AEM_DESCRIPTOR_CLOCK_DOMAIN , "CLOCK_DOMAIN"},
1701 {AEM_DESCRIPTOR_CONTROL_BLOCK , "CONTROL_BLOCK"},
1702 {0 , NULL}
1705 static const value_string aem_status_type_vals[] = {
1706 {AEM_STATUS_SUCCESS , "SUCCESS"},
1707 {AEM_STATUS_NOT_IMPLEMENTED , "NOT_IMPLEMENTED"},
1708 {AEM_STATUS_NO_SUCH_DESCRIPTOR , "NO_SUCH_DESCRIPTOR"},
1709 {AEM_STATUS_ENTITY_LOCKED , "ENTITY_LOCKED"},
1710 {AEM_STATUS_ENTITY_ACQUIRED , "ENTITY_ACQUIRED"},
1711 {AEM_STATUS_NOT_AUTHENTICATED , "NOT_AUTHENTICATED"},
1712 {AEM_STATUS_AUTHENTICATION_DISABLED, "AUTHENTICATION_DISABLED"},
1713 {AEM_STATUS_BAD_ARGUMENTS , "BAD_ARGUMENTS"},
1714 {AEM_STATUS_NO_RESOURCES , "NO_RESOURCES"},
1715 {AEM_STATUS_IN_PROGRESS , "IN_PROGRESS"},
1716 {AEM_STATUS_ENTITY_MISBEHAVING , "ENTITY_MISBEHAVING"},
1717 {AEM_STATUS_NOT_SUPPORTED , "NOT_SUPPORTED"},
1718 {AEM_STATUS_STREAM_IS_RUNNING , "STREAM_IS_RUNNING"},
1719 {0 , NULL}
1722 static const value_string aecp_message_type_vals[] = {
1723 {AECP_AEM_COMMAND_MESSAGE, "AEM_COMMAND"},
1724 {AECP_AEM_RESPONSE_MESSAGE, "AEM_RESPONSE"},
1725 {AECP_ADDRESS_ACCESS_COMMAND_MESSAGE, "ADDRESS_ACCESS_COMMAND"},
1726 {AECP_ADDRESS_ACCESS_RESPONSE_MESSAGE, "ADDRESS_ACCESS_RESPONSE"},
1727 {AECP_AVC_COMMAND_MESSAGE, "AVC_COMMAND"},
1728 {AECP_AVC_RESPONSE_MESSAGE, "AVC_RESPONSE"},
1729 {AECP_VENDOR_UNIQUE_COMMAND_MESSAGE, "VENDOR_UNIQUE_COMMAND"},
1730 {AECP_VENDOR_UNIQUE_RESPONSE_MESSAGE, "VENDOR_UNIQUE_RESPONSE"},
1731 {AECP_EXTENDED_COMMAND_MESSAGE, "EXTENDED_COMMAND"},
1732 {AECP_EXTENDED_RESPONSE_MESSAGE, "EXTENDED_RESPONSE"},
1733 {0, NULL }
1736 static const value_string aecp_command_type_vals[] = {
1737 {AECP_COMMAND_ACQUIRE_ENTITY , "ACQUIRE_ENTITY"},
1738 {AECP_COMMAND_LOCK_ENTITY , "LOCK_ENTITY"},
1739 {AECP_COMMAND_ENTITY_AVAILABLE , "ENTITY_AVAILABLE"},
1740 {AECP_COMMAND_CONTROLLER_AVAILABLE , "CONTROLLER_AVAILABLE"},
1741 {AECP_COMMAND_READ_DESCRIPTOR , "READ_DESCRIPTOR"},
1742 {AECP_COMMAND_WRITE_DESCRIPTOR , "WRITE_DESCRIPTOR"},
1743 {AECP_COMMAND_SET_CONFIGURATION , "SET_CONFIGURATION"},
1744 {AECP_COMMAND_GET_CONFIGURATION , "GET_CONFIGURATION"},
1745 {AECP_COMMAND_SET_STREAM_FORMAT , "SET_STREAM_FORMAT"},
1746 {AECP_COMMAND_GET_STREAM_FORMAT , "GET_STREAM_FORMAT"},
1747 {AECP_COMMAND_SET_VIDEO_FORMAT , "SET_VIDEO_FORMAT"},
1748 {AECP_COMMAND_GET_VIDEO_FORMAT , "GET_VIDEO_FORMAT"},
1749 {AECP_COMMAND_SET_SENSOR_FORMAT , "SET_SENSOR_FORMAT"},
1750 {AECP_COMMAND_GET_SENSOR_FORMAT , "GET_SENSOR_FORMAT"},
1751 {AECP_COMMAND_SET_STREAM_INFO , "SET_STREAM_INFO"},
1752 {AECP_COMMAND_GET_STREAM_INFO , "GET_STREAM_INFO"},
1753 {AECP_COMMAND_SET_NAME , "SET_NAME"},
1754 {AECP_COMMAND_GET_NAME , "GET_NAME"},
1755 {AECP_COMMAND_SET_ASSOCIATION_ID , "SET_ASSOCIATION_ID"},
1756 {AECP_COMMAND_GET_ASSOCIATION_ID , "GET_ASSOCIATION_ID"},
1757 {AECP_COMMAND_SET_SAMPLING_RATE , "SET_SAMPLING_RATE"},
1758 {AECP_COMMAND_GET_SAMPLING_RATE , "GET_SAMPLING_RATE"},
1759 {AECP_COMMAND_SET_CLOCK_SOURCE , "SET_CLOCK_SOURCE"},
1760 {AECP_COMMAND_GET_CLOCK_SOURCE , "GET_CLOCK_SOURCE"},
1761 {AECP_COMMAND_SET_CONTROL_VALUE , "SET_CONTROL_VALUE"},
1762 {AECP_COMMAND_GET_CONTROL_VALUE , "GET_CONTROL_VALUE"},
1763 {AECP_COMMAND_INCREMENT_CONTROL , "INCREMENT_CONTROL"},
1764 {AECP_COMMAND_DECREMENT_CONTROL , "DECREMENT_CONTROL"},
1765 {AECP_COMMAND_SET_SIGNAL_SELECTOR , "SET_SIGNAL_SELECTOR"},
1766 {AECP_COMMAND_GET_SIGNAL_SELECTOR , "GET_SIGNAL_SELECTOR"},
1767 {AECP_COMMAND_SET_MIXER , "SET_MIXER"},
1768 {AECP_COMMAND_GET_MIXER , "GET_MIXER"},
1769 {AECP_COMMAND_SET_MATRIX , "SET_MATRIX"},
1770 {AECP_COMMAND_GET_MATRIX , "GET_MATRIX"},
1771 {AECP_COMMAND_START_STREAMING , "START_STREAMING"},
1772 {AECP_COMMAND_STOP_STREAMING , "STOP_STREAMING"},
1773 {AECP_COMMAND_REGISTER_UNSOL_NOTIFICATION , "REGISTER_UNSOL_NOTIFICATION"},
1774 {AECP_COMMAND_DEREGISTER_UNSOL_NOTIFICATION , "DEREGISTER_UNSOL_NOTIFICATION"},
1775 {AECP_COMMAND_IDENTIFY_NOTIFICATION , "IDENTIFY_NOTIFICATION"},
1776 {AECP_COMMAND_GET_AVB_INFO , "GET_AVB_INFO"},
1777 {AECP_COMMAND_GET_AS_PATH , "GET_AS_PATH"},
1778 {AECP_COMMAND_GET_COUNTERS , "GET_COUNTERS"},
1779 {AECP_COMMAND_REBOOT , "REBOOT"},
1780 {AECP_COMMAND_GET_AUDIO_MAP , "GET_AUDIO_MAP"},
1781 {AECP_COMMAND_ADD_AUDIO_MAPPINGS , "ADD_AUDIO_MAPPINGS"},
1782 {AECP_COMMAND_REMOVE_AUDIO_MAPPINGS , "REMOVE_AUDIO_MAPPINGS"},
1783 {AECP_COMMAND_GET_VIDEO_MAP , "GET_VIDEO_MAP"},
1784 {AECP_COMMAND_ADD_VIDEO_MAPPINGS , "ADD_VIDEO_MAPPINGS"},
1785 {AECP_COMMAND_REMOVE_VIDEO_MAPPINGS , "REMOVE_VIDEO_MAPPINGS"},
1786 {AECP_COMMAND_GET_SENSOR_MAP , "GET_SENSOR_MAP"},
1787 {AECP_COMMAND_ADD_SENSOR_MAPPINGS , "ADD_SENSOR_MAPPINGS"},
1788 {AECP_COMMAND_REMOVE_SENSOR_MAPPINGS , "REMOVE_SENSOR_MAPPINGS"},
1789 {AECP_COMMAND_START_OPERATION , "START_OPERATION"},
1790 {AECP_COMMAND_ABORT_OPERATION , "ABORT_OPERATION"},
1791 {AECP_COMMAND_OPERATION_STATUS , "OPERATION_STATUS"},
1792 {AECP_COMMAND_AUTH_ADD_KEY , "AUTH_ADD_KEY"},
1793 {AECP_COMMAND_AUTH_DELETE_KEY , "AUTH_DELETE_KEY"},
1794 {AECP_COMMAND_AUTH_GET_KEY_LIST , "AUTH_GET_KEY_LIST"},
1795 {AECP_COMMAND_AUTH_GET_KEY , "AUTH_GET_KEY"},
1796 {AECP_COMMAND_AUTH_ADD_KEY_TO_CHAIN , "AUTH_ADD_KEY_TO_CHAIN"},
1797 {AECP_COMMAND_AUTH_DELETE_KEY_FROM_CHAIN , "AUTH_DELETE_KEY_FROM_CHAIN"},
1798 {AECP_COMMAND_AUTH_GET_KEYCHAIN_LIST , "AUTH_GET_KEYCHAIN_LIST"},
1799 {AECP_COMMAND_AUTH_GET_IDENTITY , "AUTH_GET_IDENTITY"},
1800 {AECP_COMMAND_AUTH_ADD_TOKEN , "AUTH_ADD_TOKEN"},
1801 {AECP_COMMAND_AUTH_DELETE_TOKEN , "AUTH_DELETE_TOKEN"},
1802 {AECP_COMMAND_AUTHENTICATE , "AUTHENTICATE"},
1803 {AECP_COMMAND_DEAUTHENTICATE , "DEAUTHENTICATE"},
1804 {AECP_COMMAND_ENABLE_TRANSPORT_SECURITY , "ENABLE_TRANSPORT_SECURITY"},
1805 {AECP_COMMAND_DISABLE_TRANSPORT_SECURITY , "DISABLE_TRANSPORT_SECURITY"},
1806 {AECP_COMMAND_ENABLE_STREAM_ENCRYPTION , "ENABLE_STREAM_ENCRYPTION"},
1807 {AECP_COMMAND_DISABLE_STREAM_ENCRYPTION , "DISABLE_STREAM_ENCRYPTION"},
1808 {AECP_COMMAND_SET_STREAM_BACKUP , "SET_STREAM_BACKUP"},
1809 {AECP_COMMAND_GET_STREAM_BACKUP , "GET_STREAM_BACKUP"},
1810 {0 , NULL}
1814 static const value_string adp_message_type_vals[] = {
1815 {ADP_ENTITY_AVAILABLE_MESSAGE, "ENTITY_AVAILABLE"},
1816 {ADP_ENTITY_DEPARTING_MESSAGE, "ENTITY_DEPARTING"},
1817 {ADP_ENTITY_DISCOVER_MESSAGE, "ENTITY_DISCOVER"},
1818 {0, NULL }
1821 static const value_string acmp_message_type_vals[] = {
1822 {ACMP_CONNECT_TX_COMMAND, "CONNECT_TX_COMMAND"},
1823 {ACMP_CONNECT_TX_RESPONSE, "CONNECT_TX_RESPONSE"},
1824 {ACMP_DISCONNECT_TX_COMMAND, "DISCONNECT_TX_COMMAND"},
1825 {ACMP_DISCONNECT_TX_RESPONSE, "DISCONNECT_TX_RESPONSE"},
1826 {ACMP_GET_TX_STATE_COMMAND, "GET_TX_STATE_COMMAND"},
1827 {ACMP_GET_TX_STATE_RESPONSE, "GET_TX_STATE_RESPONSE"},
1828 {ACMP_CONNECT_RX_COMMAND, "CONNECT_RX_COMMAND"},
1829 {ACMP_CONNECT_RX_RESPONSE, "CONNECT_RX_RESPONSE"},
1830 {ACMP_DISCONNECT_RX_COMMAND, "DISCONNECT_RX_COMMAND"},
1831 {ACMP_DISCONNECT_RX_RESPONSE, "DISCONNECT_RX_RESPONSE"},
1832 {ACMP_GET_RX_STATE_COMMAND, "GET_RX_STATE_COMMAND"},
1833 {ACMP_GET_RX_STATE_RESPONSE, "GET_RX_STATE_RESPONSE"},
1834 {ACMP_GET_TX_CONNECTION_COMMAND, "GET_TX_CONNECTION_COMMAND"},
1835 {ACMP_GET_TX_CONNECTION_RESPONSE, "GET_TX_CONNECTION_RESPONSE"},
1836 {0, NULL }
1839 static const value_string acmp_status_field_vals[] = {
1840 {ACMP_STATUS_SUCCESS, "SUCCESS"},
1841 {ACMP_STATUS_LISTENER_UNKNOWN_ID, "LISTENER_UNKNOWN_ID"},
1842 {ACMP_STATUS_TALKER_UNKNOWN_ID, "TALKER_UNKNOWN_ID"},
1843 {ACMP_STATUS_TALKER_DEST_MAC_FAIL, "TALKER_DEST_MAC_FAIL"},
1844 {ACMP_STATUS_TALKER_NO_STREAM_INDEX, "TALKER_NO_STREAM_INDEX"},
1845 {ACMP_STATUS_TALKER_NO_BANDWIDTH, "TALKER_NO_BANDWIDTH"},
1846 {ACMP_STATUS_TALKER_EXCLUSIVE, "TALKER_EXCLUSIVE"},
1847 {ACMP_STATUS_LISTENER_TALKER_TIMEOUT, "LISTENER_TALKER_TIMEOUT"},
1848 {ACMP_STATUS_LISTENER_EXCLUSIVE, "LISTENER_EXCLUSIVE"},
1849 {ACMP_STATUS_STATE_UNAVAILABLE, "STATE_UNAVAILABLE"},
1850 {ACMP_STATUS_NOT_CONNECTED, "NOT_CONNECTED"},
1851 {ACMP_STATUS_NO_SUCH_CONNECTION, "NO_SUCH_CONNECTION"},
1852 {ACMP_STATUS_COULD_NOT_SEND_MESSAGE, "COULD_NOT_SEND_MESSAGE"},
1853 {ACMP_STATUS_DEFAULT_SET_DIFFERENT, "DEFAULT_SET_DIFFERENT"},
1854 {ACMP_STATUS_NOT_SUPPORTED, "NOT_SUPPORTED"},
1855 {0, NULL }
1858 static const value_string aecp_sampling_rate_pull_field_vals[] = {
1859 {0, "Multiply by 1.0"},
1860 {1, "Multiply by 1/1.001"},
1861 {2, "Multiply by 1.001"},
1862 {3, "Multiply by 24/25"},
1863 {4, "Multiply by 25/24"},
1864 {0, NULL }
1868 /**********************************************************/
1869 /* Initialize the protocol and registered fields */
1870 /**********************************************************/
1871 static int proto_17221;
1873 /* AVDECC Discovery Protocol Data Unit (ADPDU) */
1874 static int hf_adp_message_type;
1875 static int hf_adp_valid_time;
1876 static int hf_adp_cd_length;
1877 static int hf_adp_entity_id;
1878 static int hf_adp_entity_model_id;
1879 static int hf_adp_entity_cap;
1880 static int hf_adp_talker_stream_srcs;
1881 static int hf_adp_talker_cap;
1882 static int hf_adp_listener_stream_sinks;
1883 static int hf_adp_listener_cap;
1884 static int hf_adp_controller_cap;
1885 static int hf_adp_avail_index;
1886 static int hf_adp_gptp_gm_id;
1887 /* static int hf_adp_def_aud_format; */
1888 /* static int hf_adp_def_vid_format; */
1889 static int hf_adp_assoc_id;
1890 /* static int hf_adp_entity_type; */
1892 /* Entity Capabilities Flags */
1893 static int hf_adp_entity_cap_efu_mode;
1894 static int hf_adp_entity_cap_address_access_supported;
1895 static int hf_adp_entity_cap_gateway_entity;
1896 static int hf_adp_entity_cap_aem_supported;
1897 static int hf_adp_entity_cap_legacy_avc;
1898 static int hf_adp_entity_cap_assoc_id_support;
1899 static int hf_adp_entity_cap_assoc_id_valid;
1900 static int hf_adp_entity_cap_vendor_unique;
1901 static int hf_adp_entity_cap_class_a_supported;
1902 static int hf_adp_entity_cap_class_b_supported;
1903 static int hf_adp_entity_cap_gptp_supported;
1905 /* Talker Capabilities Flags */
1906 static int hf_adp_talk_cap_implement;
1907 static int hf_adp_talk_cap_other_src;
1908 static int hf_adp_talk_cap_control_src;
1909 static int hf_adp_talk_cap_media_clk_src;
1910 static int hf_adp_talk_cap_smpte_src;
1911 static int hf_adp_talk_cap_midi_src;
1912 static int hf_adp_talk_cap_audio_src;
1913 static int hf_adp_talk_cap_video_src;
1915 /* Listener Capabilities Flags */
1916 static int hf_adp_list_cap_implement;
1917 static int hf_adp_list_cap_other_sink;
1918 static int hf_adp_list_cap_control_sink;
1919 static int hf_adp_list_cap_media_clk_sink;
1920 static int hf_adp_list_cap_smpte_sink;
1921 static int hf_adp_list_cap_midi_sink;
1922 static int hf_adp_list_cap_audio_sink;
1923 static int hf_adp_list_cap_video_sink;
1925 /* Controller Capabilities Flags */
1926 static int hf_adp_cont_cap_implement;
1927 static int hf_adp_cont_cap_layer3_proxy;
1929 #if 0
1930 /* Default Audio Format */
1931 static int hf_adp_def_aud_sample_rates;
1932 static int hf_adp_def_aud_max_chan;
1933 static int hf_adp_def_aud_saf_flag;
1934 static int hf_adp_def_aud_float_flag;
1935 static int hf_adp_def_aud_chan_formats;
1937 /* Default Audio Sample Rates */
1938 static int hf_adp_samp_rate_44k1;
1939 static int hf_adp_samp_rate_48k;
1940 static int hf_adp_samp_rate_88k2;
1941 static int hf_adp_samp_rate_96k;
1942 static int hf_adp_samp_rate_176k4;
1943 static int hf_adp_samp_rate_192k;
1945 /* Audio Channel Formats */
1946 static int hf_adp_chan_format_mono;
1947 static int hf_adp_chan_format_2ch;
1948 static int hf_adp_chan_format_3ch;
1949 static int hf_adp_chan_format_4ch;
1950 static int hf_adp_chan_format_5ch;
1951 static int hf_adp_chan_format_6ch;
1952 static int hf_adp_chan_format_7ch;
1953 static int hf_adp_chan_format_8ch;
1954 static int hf_adp_chan_format_10ch;
1955 static int hf_adp_chan_format_12ch;
1956 static int hf_adp_chan_format_14ch;
1957 static int hf_adp_chan_format_16ch;
1958 static int hf_adp_chan_format_18ch;
1959 static int hf_adp_chan_format_20ch;
1960 static int hf_adp_chan_format_22ch;
1961 static int hf_adp_chan_format_24ch;
1962 #endif
1964 /* AECP Vendor Unique Protocol Dissector table */
1965 static dissector_table_t vendor_unique_protocol_dissector_table;
1967 /* ***************************************************************** */
1968 /* AVDECC Enumeration and Control Protocol Data Unit (AECPDU) */
1969 /* ***************************************************************** */
1971 static int hf_aecp_aa_count;
1972 static int hf_aecp_aa_tlv_mode;
1973 static int hf_aecp_aa_tlv_length;
1974 static int hf_aecp_aa_tlv_address;
1976 /* static int hf_aecp_address_type; */
1977 static int hf_aecp_association_id;
1978 static int hf_aecp_as_path_count;
1979 static int hf_aecp_as_path_sequences;
1980 static int ett_aecp_get_as_path_sequences;
1981 static int hf_aecp_get_as_info_clock_id;
1982 static int hf_aecp_auth_token;
1983 static int hf_aecp_avb_interface_gptp_gm_changed_valid;
1984 static int hf_aecp_avb_interface_gptp_gm_changed;
1985 static int hf_aecp_avb_interface_link_up_valid;
1986 static int hf_aecp_avb_interface_link_up;
1987 static int hf_aecp_avb_interface_link_down_valid;
1988 static int hf_aecp_avb_interface_link_down;
1989 static int hf_aecp_avb_interface_packets_tx_valid;
1990 static int hf_aecp_avb_interface_packets_tx;
1991 static int hf_aecp_avb_interface_packets_rx_valid;
1992 static int hf_aecp_avb_interface_packets_rx;
1993 static int hf_aecp_avb_interface_rx_crc_error_valid;
1994 static int hf_aecp_avb_interface_rx_crc_error;
1995 static int hf_aecp_cd_length;
1996 static int hf_aecp_clock_domain_locked_valid;
1997 static int hf_aecp_clock_domain_locked;
1998 static int hf_aecp_clock_domain_unlocked_valid;
1999 static int hf_aecp_clock_domain_unlocked;
2000 static int hf_aecp_clock_source_id;
2001 static int hf_aecp_command_type;
2002 static int hf_aecp_configuration;
2003 static int hf_aecp_configuration_index;
2004 static int hf_aecp_connected_flag;
2005 /* static int hf_aecp_continued_flag; */
2006 /* static int hf_aecp_control_admin_flag; */
2007 /* static int hf_aecp_control_user_l1; */
2008 /* static int hf_aecp_control_user_l2; */
2009 /* static int hf_aecp_control_user_l3; */
2010 /* static int hf_aecp_control_user_l4; */
2011 static int hf_aecp_controller_guid;
2012 /* static int hf_aecp_count; */
2013 static int hf_aecp_descriptor_index;
2014 static int hf_aecp_descriptor_type;
2015 /* static int hf_aecp_descriptors; */
2016 static int hf_aecp_dest_mac_valid_flag;
2017 static int hf_aecp_entity_specific1;
2018 static int hf_aecp_entity_specific1_valid;
2019 static int hf_aecp_entity_specific2;
2020 static int hf_aecp_entity_specific2_valid;
2021 static int hf_aecp_entity_specific3;
2022 static int hf_aecp_entity_specific3_valid;
2023 static int hf_aecp_entity_specific4;
2024 static int hf_aecp_entity_specific4_valid;
2025 static int hf_aecp_entity_specific5;
2026 static int hf_aecp_entity_specific5_valid;
2027 static int hf_aecp_entity_specific6;
2028 static int hf_aecp_entity_specific6_valid;
2029 static int hf_aecp_entity_specific7;
2030 static int hf_aecp_entity_specific7_valid;
2031 static int hf_aecp_entity_specific8;
2032 static int hf_aecp_entity_specific8_valid;
2033 static int hf_aecp_flags_32;
2034 /* static int hf_aecp_ipv4_address; */
2035 /* static int hf_aecp_ipv6_address; */
2036 static int hf_aecp_key;
2037 static int hf_aecp_key_eui;
2038 static int hf_aecp_key_length;
2039 /* static int hf_aecp_key_number; */
2040 /* static int hf_aecp_key_part; */
2041 static int hf_aecp_keychain_id;
2042 static int hf_aecp_keychain_id_small;
2043 static int hf_aecp_keychain_list_index;
2044 static int hf_aecp_keychain_number_of_keys;
2045 static int hf_aecp_keychain_number_of_lists;
2046 static int hf_aecp_key_signature;
2047 static int hf_aecp_key_type;
2048 static int hf_aecp_locked_guid;
2049 static int hf_aecp_mac_address;
2050 static int hf_aecp_map_index;
2051 /* static int hf_aecp_matrix_affected_item_count; */
2052 static int hf_aecp_matrix_column;
2053 static int hf_aecp_matrix_direction;
2054 static int hf_aecp_matrix_item_offset;
2055 static int hf_aecp_matrix_region_height;
2056 static int hf_aecp_matrix_region_width;
2057 static int hf_aecp_matrix_rep;
2058 static int hf_aecp_matrix_row;
2059 static int hf_aecp_matrix_value_count;
2060 /* static int hf_aecp_media_format; */
2061 /* static int hf_aecp_mem_obj_admin_flag; */
2062 /* static int hf_aecp_mem_obj_settings_flag; */
2063 static int hf_aecp_message_type;
2064 static int hf_aecp_msrp_acc_lat_valid_flag;
2065 static int hf_aecp_msrp_accumulated_latency;
2066 static int hf_aecp_msrp_failure_bridge_id;
2067 static int hf_aecp_msrp_failure_code;
2068 static int hf_aecp_msrp_failure_valid_flag;
2069 /* static int hf_aecp_stream_vlan_id; */
2070 static int hf_aecp_name;
2071 static int hf_aecp_name_index;
2072 static int hf_aecp_number_of_maps;
2073 static int hf_aecp_operation_id;
2074 static int hf_aecp_operation_type;
2075 static int hf_aecp_owner_guid;
2076 static int hf_aecp_percent_complete;
2077 static int hf_aecp_persistent_flag;
2078 /* static int hf_aecp_private_key_read_flag; */
2079 /* static int hf_aecp_private_key_write_flag; */
2080 /* static int hf_aecp_public_key_write_flag; */
2081 /* static int hf_aecp_query_id; */
2082 /* static int hf_aecp_query_limit; */
2083 /* static int hf_aecp_query_period; */
2084 /* static int hf_aecp_query_type; */
2085 static int hf_aecp_release_flag;
2086 static int hf_aecp_sampling_rate_base_frequency;
2087 static int hf_aecp_sampling_rate_pull;
2088 static int hf_aecp_sequence_id;
2089 static int hf_aecp_signal_index;
2090 static int hf_aecp_signal_type;
2091 static int hf_aecp_signal_output;
2092 static int hf_aecp_stream_format;
2093 static int hf_aecp_stream_format_valid_flag;
2094 static int hf_aecp_stream_id_valid_flag;
2095 static int hf_aecp_stream_input_early_timestamp_valid;
2096 static int hf_aecp_stream_input_early_timestamp;
2097 static int hf_aecp_stream_input_late_timestamp_valid;
2098 static int hf_aecp_stream_input_late_timestamp;
2099 static int hf_aecp_stream_input_media_locked_valid;
2100 static int hf_aecp_stream_input_media_locked;
2101 static int hf_aecp_stream_input_media_unlocked_valid;
2102 static int hf_aecp_stream_input_media_unlocked;
2103 static int hf_aecp_stream_input_media_reset_valid;
2104 static int hf_aecp_stream_input_media_reset;
2105 static int hf_aecp_stream_input_packets_rx_valid;
2106 static int hf_aecp_stream_input_packets_rx;
2107 static int hf_aecp_stream_input_packets_tx_valid;
2108 static int hf_aecp_stream_input_packets_tx;
2109 static int hf_aecp_stream_input_seq_num_mismatch_valid;
2110 static int hf_aecp_stream_input_seq_num_mismatch;
2111 static int hf_aecp_stream_input_stream_reset_valid;
2112 static int hf_aecp_stream_input_stream_reset;
2113 static int hf_aecp_stream_input_timestamp_uncertain_valid;
2114 static int hf_aecp_stream_input_timestamp_uncertain;
2115 static int hf_aecp_stream_input_timestamp_valid_valid;
2116 static int hf_aecp_stream_input_timestamp_valid;
2117 static int hf_aecp_stream_input_timestamp_not_valid_valid;
2118 static int hf_aecp_stream_input_timestamp_not_valid;
2119 static int hf_aecp_stream_input_unsupported_format_valid;
2120 static int hf_aecp_stream_input_unsupported_format;
2121 static int hf_aecp_stream_vlan_id_valid_flag;
2122 static int hf_aecp_target_guid;
2123 static int hf_aecp_token_length;
2124 static int hf_aecp_u_flag;
2125 static int hf_aecp_unlock_flag;
2126 /* static int hf_aecp_values; */
2127 /* static int hf_aecp_values_count; */
2128 static int hf_aecp_vendor_unique_protocol_id;
2129 static int hf_aecp_video_format;
2130 static int hf_aecp_status_code;
2131 static int hf_aecp_backup_talker_entity_id_0;
2132 static int hf_aecp_backup_talker_entity_id_1;
2133 static int hf_aecp_backup_talker_entity_id_2;
2134 static int hf_aecp_backup_talker_unique_id_0;
2135 static int hf_aecp_backup_talker_unique_id_1;
2136 static int hf_aecp_backup_talker_unique_id_2;
2137 static int hf_aecp_backedup_talker_entity_id;
2138 static int hf_aecp_backedup_talker_unique_id;
2139 static int hf_aecp_avb_info_ptp_grandmaster_id;
2140 static int hf_aecp_avb_info_propegation_delay;
2141 static int hf_aecp_avb_info_gptp_domain_number;
2142 /* static int hf_aecp_avb_info_flags; */
2143 static int hf_aecp_as_capable_flag;
2144 static int hf_aecp_gptp_enabled_flag;
2145 static int hf_aecp_srp_enabled_flag;
2146 static int hf_aecp_avb_info_msrp_mappings_count;
2147 static int hf_aecp_avb_info_msrp_mappings;
2148 static int hf_aecp_avb_info_msrp_mapping_traffic_class;
2149 static int hf_aecp_avb_info_msrp_mapping_priority;
2151 static int hf_aecp_get_avb_info_msrp_vlan_id;
2153 /* ***************************************************************** */
2154 /* AVDECC Entity Model (AEM) */
2155 /* ***************************************************************** */
2156 static int hf_aem_am824_label;
2157 /* static int hf_aem_aspect_x; */
2158 /* static int hf_aem_aspect_y; */
2159 /* static int hf_aem_audio_channels; */
2160 static int hf_aem_avb_interface_id;
2161 static int hf_aem_buffer_length;
2162 static int hf_aem_b_flag;
2163 static int hf_aem_backedup_talker_guid;
2164 static int hf_aem_backedup_talker_unique;
2165 static int hf_aem_backup_talker_guid_0;
2166 static int hf_aem_backup_talker_guid_1;
2167 static int hf_aem_backup_talker_guid_2;
2168 static int hf_aem_backup_talker_unique_0;
2169 static int hf_aem_backup_talker_unique_1;
2170 static int hf_aem_backup_talker_unique_2;
2171 static int hf_aem_base_audio_map;
2172 static int hf_aem_base_cluster;
2173 static int hf_aem_base_control;
2174 static int hf_aem_base_control_block;
2175 /* static int hf_aem_base_destination; */
2176 static int hf_aem_base_external_input_port;
2177 static int hf_aem_base_external_output_port;
2178 static int hf_aem_base_frequency;
2179 static int hf_aem_base_internal_input_port;
2180 static int hf_aem_base_internal_output_port;
2181 static int hf_aem_base_matrix;
2182 static int hf_aem_base_mixer;
2183 static int hf_aem_base_signal_selector;
2184 /* static int hf_aem_base_source; */
2185 static int hf_aem_number_splitters;
2186 static int hf_aem_base_splitter;
2187 static int hf_aem_number_combiners;
2188 static int hf_aem_base_combiner;
2189 static int hf_aem_number_demultiplexers;
2190 static int hf_aem_base_demultiplexer;
2191 static int hf_aem_number_multiplexers;
2192 static int hf_aem_base_multiplexer;
2193 static int hf_aem_number_transcoders;
2194 static int hf_aem_base_transcoder;
2195 static int hf_aem_base_stream_input_port;
2196 static int hf_aem_base_stream_output_port;
2197 static int hf_aem_base_strings;
2198 static int hf_aem_binary_blob;
2199 static int hf_aem_blob_size;
2200 static int hf_aem_block_latency;
2201 static int hf_aem_reset_time;
2202 /* static int hf_aem_bpp; */
2203 static int hf_aem_channel_count;
2204 /* static int hf_aem_channels; */
2205 static int hf_aem_clock_source_flags;
2206 static int hf_aem_clock_source_id;
2207 static int hf_aem_clock_domain_id;
2208 static int hf_aem_clock_sources_offset;
2209 static int hf_aem_clock_source_index;
2210 static int hf_aem_clock_sources_count;
2211 static int hf_aem_clock_sources;
2212 static int hf_aem_clock_sources_array;
2213 static int hf_aem_clock_source_location_id;
2214 static int hf_aem_clock_source_location_type;
2215 static int hf_aem_clock_source_name;
2216 static int hf_aem_clock_source_name_string;
2217 static int hf_aem_clock_source_type;
2218 /* static int hf_aem_cluster_name; */
2219 /* static int hf_aem_cluster_name_string; */
2220 /* static int hf_aem_color_format; */
2221 static int hf_aem_color_space;
2222 /* static int hf_aem_comp1; */
2223 /* static int hf_aem_comp2; */
2224 /* static int hf_aem_comp3; */
2225 /* static int hf_aem_comp4; */
2226 static int hf_aem_compress_mode;
2227 static int hf_aem_configuration_name;
2228 static int hf_aem_configuration_name_string;
2229 static int hf_aem_configurations_count;
2230 static int hf_aem_control_domain;
2231 static int hf_aem_control_latency;
2232 /* static int hf_aem_control_location_id; */
2233 /* static int hf_aem_control_location_type; */
2234 static int hf_aem_control_type;
2235 static int hf_aem_control_value_type;
2236 static int hf_aem_count;
2237 /* static int hf_aem_cs_eui64; */
2238 static int hf_aem_ctrl_double;
2239 static int hf_aem_ctrl_float;
2240 static int hf_aem_ctrl_int16;
2241 static int hf_aem_ctrl_int32;
2242 static int hf_aem_ctrl_int64;
2243 static int hf_aem_ctrl_int8;
2244 static int hf_aem_ctrl_uint16;
2245 static int hf_aem_ctrl_uint32;
2246 static int hf_aem_ctrl_uint64;
2247 static int hf_aem_ctrl_uint8;
2248 static int hf_aem_ctrl_vals;
2249 static int hf_aem_current_configuration;
2250 static int hf_aem_current_sample_rate;
2251 /* static int hf_aem_current_signal_id; */
2252 /* static int hf_aem_current_signal_type; */
2253 static int hf_aem_dbs;
2254 /* static int hf_aem_default_signal_id; */
2255 /* static int hf_aem_default_signal_type; */
2256 static int hf_aem_descriptor_counts_count;
2257 static int hf_aem_descriptor_counts_offset;
2258 /* static int hf_aem_div; */
2259 static int hf_aem_entity_id;
2260 static int hf_aem_entity_model_id;
2261 static int hf_aem_entity_name;
2262 static int hf_aem_fdf_evt;
2263 static int hf_aem_fdf_sfc;
2264 static int hf_aem_firmware_version;
2265 static int hf_aem_flags_async_sample_rate_conv;
2266 static int hf_aem_flags_captive;
2267 static int hf_aem_flags_class_a;
2268 static int hf_aem_flags_class_b;
2269 static int hf_aem_flags_clock_sync_source;
2270 static int hf_aem_flags_sync_sample_rate_conv;
2271 static int hf_aem_fmt;
2272 /* static int hf_aem_formats_count; */
2273 static int hf_aem_formats_offset;
2274 /* static int hf_aem_frame_rate; */
2275 static int hf_aem_frequency;
2276 static int hf_aem_group_name;
2277 static int hf_aem_guid;
2278 /* static int hf_aem_height; */
2279 static int hf_aem_iidc_format;
2280 static int hf_aem_iidc_mode;
2281 static int hf_aem_iidc_rate;
2282 static int hf_aem_interface_name;
2283 static int hf_aem_interface_name_string;
2284 /* static int hf_aem_interlace; */
2285 /* static int hf_aem_internal_id; */
2286 static int hf_aem_jack_flags;
2287 static int hf_aem_jack_id;
2288 static int hf_aem_jack_name;
2289 static int hf_aem_jack_name_string;
2290 static int hf_aem_jack_type;
2291 static int hf_aem_label_iec_60958_cnt;
2292 static int hf_aem_label_mbla_cnt;
2293 static int hf_aem_label_midi_cnt;
2294 static int hf_aem_label_smpte_cnt;
2295 static int hf_aem_length;
2296 static int hf_aem_locale_identifier;
2297 static int hf_aem_mapping_cluster_offset;
2298 static int hf_aem_mapping_cluster_channel;
2299 static int hf_aem_mapping_stream_channel;
2300 static int hf_aem_mapping_stream_index;
2301 static int hf_aem_mappings;
2302 static int hf_aem_mappings_offset;
2303 static int hf_aem_memory_object_type;
2304 /* static int hf_aem_mf_height; */
2305 /* static int hf_aem_mf_width; */
2306 /* static int hf_aem_mfd_type; */
2307 static int hf_aem_model_name_string;
2308 static int hf_aem_avb_interface_flags;
2309 static int hf_aem_avb_clock_identity;
2310 static int hf_aem_avb_priority1;
2311 static int hf_aem_avb_clock_class;
2312 static int hf_aem_avb_offset_scaled_log_variance;
2313 static int hf_aem_avb_clock_accuracy;
2314 static int hf_aem_avb_priority2;
2315 static int hf_aem_avb_domain_number;
2316 static int hf_aem_avb_log_sync_interval;
2317 /* static int hf_aem_avb_propagation_delay; */
2318 static int hf_aem_nb_flag;
2319 static int hf_aem_number_audio_maps;
2320 /* static int hf_aem_number_destinations; */
2321 static int hf_aem_number_matrices;
2322 static int hf_aem_number_mixers;
2323 static int hf_aem_number_of_clusters;
2324 static int hf_aem_number_of_controls;
2325 static int hf_aem_number_control_blocks;
2326 static int hf_aem_number_of_external_input_ports;
2327 static int hf_aem_number_of_external_output_ports;
2328 static int hf_aem_number_of_formats;
2329 static int hf_aem_number_of_internal_input_ports;
2330 static int hf_aem_number_of_internal_output_ports;
2331 static int hf_aem_number_of_mappings;
2332 /* static int hf_aem_number_of_sources; */
2333 static int hf_aem_number_of_stream_input_ports;
2334 static int hf_aem_number_of_stream_output_ports;
2335 static int hf_aem_number_of_strings;
2336 static int hf_aem_number_of_values;
2337 static int hf_aem_number_signal_selectors;
2338 static int hf_aem_object_name;
2339 static int hf_aem_localized_description;
2340 /* static int hf_aem_oui24; */
2341 static int hf_aem_path_latency;
2342 static int hf_aem_port_flags;
2343 static int hf_aem_pull_field;
2344 static int hf_aem_sample_rates;
2345 static int hf_aem_sample_rates_count;
2346 static int hf_aem_sample_rates_offset;
2347 static int hf_aem_serial_number;
2348 static int hf_aem_sf;
2349 static int hf_aem_sf_version;
2350 static int hf_aem_sf_subtype;
2351 static int hf_aem_signal_index;
2352 static int hf_aem_signal_output;
2353 static int hf_aem_signal_type;
2354 static int hf_aem_signals_count;
2355 static int hf_aem_signals_offset;
2356 static int hf_aem_sources;
2357 /* static int hf_aem_sources_offset; */
2358 static int hf_aem_start_address;
2359 /* static int hf_aem_stream_channels; */
2360 static int hf_aem_stream_flags;
2361 static int hf_aem_stream_format;
2362 static int hf_aem_stream_formats;
2363 /* static int hf_aem_stream_id; */
2364 static int hf_aem_stream_name;
2365 static int hf_aem_stream_name_string;
2366 static int hf_aem_string;
2367 static int hf_aem_string_ref;
2368 static int hf_aem_target_descriptor_id;
2369 static int hf_aem_target_descriptor_type;
2370 static int hf_aem_unit;
2371 static int hf_aem_unknown_descriptor;
2372 /* static int hf_aem_value_offset; */
2373 static int hf_aem_values_offset;
2374 static int hf_aem_vendor_name_string;
2375 static int hf_aem_video_mode;
2376 /* static int hf_aem_width; */
2378 /****************************************************************** */
2379 /* AVDECC Connection Management Protocol Data Unit (ACMPDU) */
2380 /* **************************************************************** */
2381 static int hf_acmp_message_type;
2382 static int hf_acmp_status_field;
2383 static int hf_acmp_cd_length;
2384 static int hf_acmp_stream_id;
2385 static int hf_acmp_controller_guid;
2386 static int hf_acmp_talker_guid;
2387 static int hf_acmp_listener_guid;
2388 static int hf_acmp_talker_unique_id;
2389 static int hf_acmp_listener_unique_id;
2390 static int hf_acmp_stream_dest_mac;
2391 static int hf_acmp_connection_count;
2392 static int hf_acmp_sequence_id;
2393 static int hf_acmp_flags;
2394 static int hf_acmp_vlan_id;
2396 /* ACMP Flags (8.2.1.17) */
2397 static int hf_acmp_flags_class_b;
2398 static int hf_acmp_flags_fast_connect;
2399 static int hf_acmp_flags_saved_state;
2400 static int hf_acmp_flags_streaming_wait;
2401 static int hf_acmp_flags_supports_encrypted;
2402 static int hf_acmp_flags_encrypted_pdu;
2403 static int hf_acmp_flags_talker_failed;
2405 /* Initialize the subtree pointers */
2406 static int ett_17221;
2407 /* ADP */
2408 static int ett_adp_ent_cap;
2409 static int ett_adp_talk_cap;
2410 static int ett_adp_list_cap;
2411 static int ett_adp_cont_cap;
2412 /* static int ett_adp_aud_format; */
2413 static int ett_adp_samp_rates;
2414 static int ett_adp_chan_format;
2415 /* ACMP */
2416 static int ett_acmp_flags;
2417 /* AEM */
2418 static int ett_aem_descriptor;
2419 static int ett_aem_desc_counts;
2420 static int ett_aem_sample_rates;
2421 static int ett_aem_stream_flags;
2422 static int ett_aem_clock_sources;
2423 static int ett_aem_stream_formats;
2424 static int ett_aem_jack_flags;
2425 static int ett_aem_port_flags;
2426 static int ett_aecp_get_avb_info_msrp_mappings;
2427 static int ett_aem_clock_source_flags;
2428 static int ett_aem_mappings;
2429 static int ett_aem_ctrl_vals;
2430 static int ett_aem_sources;
2431 /* static int ett_aem_media_format; */
2432 static int ett_aem_stream_format;
2434 static int ett_aecp_descriptors;
2435 static int ett_aecp_flags_32;
2437 typedef struct {
2438 int hf;
2439 uint16_t size;
2440 } ctrl_ref_vals;
2442 /* convenience function */
2443 static inline ctrl_ref_vals
2444 get_ctrl_ref_vals(uint16_t ctrl_val_type)
2446 ctrl_ref_vals ret;
2448 switch(ctrl_val_type) {
2449 case AEM_CONTROL_LINEAR_INT8:
2450 case AEM_CONTROL_SELECTOR_INT8:
2451 case AEM_CONTROL_ARRAY_INT8:
2452 ret.hf = hf_aem_ctrl_int8;
2453 ret.size = 1;
2454 break;
2455 case AEM_CONTROL_LINEAR_UINT8:
2456 case AEM_CONTROL_SELECTOR_UINT8:
2457 case AEM_CONTROL_ARRAY_UINT8:
2458 ret.hf = hf_aem_ctrl_uint8;
2459 ret.size = 1;
2460 break;
2461 case AEM_CONTROL_LINEAR_INT16:
2462 case AEM_CONTROL_SELECTOR_INT16:
2463 case AEM_CONTROL_ARRAY_INT16:
2464 ret.hf = hf_aem_ctrl_int16;
2465 ret.size = 2;
2466 break;
2467 case AEM_CONTROL_LINEAR_UINT16:
2468 case AEM_CONTROL_SELECTOR_UINT16:
2469 case AEM_CONTROL_ARRAY_UINT16:
2470 ret.hf = hf_aem_ctrl_uint16;
2471 ret.size = 2;
2472 break;
2473 case AEM_CONTROL_LINEAR_INT32:
2474 case AEM_CONTROL_SELECTOR_INT32:
2475 case AEM_CONTROL_ARRAY_INT32:
2476 ret.hf = hf_aem_ctrl_int32;
2477 ret.size = 4;
2478 break;
2479 case AEM_CONTROL_LINEAR_UINT32:
2480 case AEM_CONTROL_SELECTOR_UINT32:
2481 case AEM_CONTROL_ARRAY_UINT32:
2482 ret.hf = hf_aem_ctrl_uint32;
2483 ret.size = 4;
2484 break;
2485 case AEM_CONTROL_LINEAR_FLOAT:
2486 case AEM_CONTROL_SELECTOR_FLOAT:
2487 case AEM_CONTROL_ARRAY_FLOAT:
2488 ret.hf = hf_aem_ctrl_float;
2489 ret.size = 4;
2490 break;
2491 case AEM_CONTROL_LINEAR_INT64:
2492 case AEM_CONTROL_SELECTOR_INT64:
2493 case AEM_CONTROL_ARRAY_INT64:
2494 ret.hf = hf_aem_ctrl_int64;
2495 ret.size = 8;
2496 break;
2497 case AEM_CONTROL_LINEAR_UINT64:
2498 case AEM_CONTROL_SELECTOR_UINT64:
2499 case AEM_CONTROL_ARRAY_UINT64:
2500 ret.hf = hf_aem_ctrl_uint64;
2501 ret.size = 8;
2502 break;
2503 case AEM_CONTROL_LINEAR_DOUBLE:
2504 case AEM_CONTROL_SELECTOR_DOUBLE:
2505 case AEM_CONTROL_ARRAY_DOUBLE:
2506 ret.hf = hf_aem_ctrl_double;
2507 ret.size = 8;
2508 break;
2509 case AEM_CONTROL_BODE_PLOT:
2510 ret.hf = -1;
2511 ret.size = 12;
2512 break;
2513 default:
2514 ret.size = 0;
2515 ret.hf = -1;
2516 break;
2518 return ret;
2521 static void
2522 dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree)
2524 proto_item *stream_tree;
2525 proto_item *stream_ti;
2526 uint8_t version;
2527 uint8_t subtype;
2528 uint8_t sf;
2529 uint8_t fmt;
2530 uint8_t fdf_evt;
2532 /* subtree */
2533 stream_ti = proto_tree_add_item(tree, hf_aem_stream_format, tvb,
2534 0, 8, ENC_NA);
2535 stream_tree = proto_item_add_subtree(stream_ti, ett_aem_stream_format);
2537 /* get version */
2538 version = tvb_get_uint8(tvb, 0) & AEM_MASK_SF_VERSION;
2540 /* add the version to the tree */
2541 proto_tree_add_item(stream_tree, hf_aem_sf_version, tvb,
2542 AEM_OFFSET_SF_VERSION, 1, ENC_BIG_ENDIAN);
2544 if (version == 0) { /* stream format version 0 */
2546 subtype = tvb_get_uint8(tvb, AEM_OFFSET_SF_SUBTYPE) & AEM_MASK_SF_SUBTYPE;
2548 proto_tree_add_item(stream_tree, hf_aem_sf_subtype, tvb,
2549 AEM_OFFSET_SF_SUBTYPE, 1, ENC_BIG_ENDIAN);
2551 switch(subtype) {
2552 case IEC_61883_IIDC_SUBTYPE:
2553 /* get sf */
2554 sf = tvb_get_uint8(tvb, 1) & AEM_MASK_SF;
2555 proto_tree_add_item(stream_tree, hf_aem_sf, tvb,
2556 AEM_OFFSET_SF, 1, ENC_BIG_ENDIAN);
2558 if (sf == 0) { /* IIDC Stream Format */
2559 proto_tree_add_item(stream_tree, hf_aem_iidc_format, tvb,
2560 AEM_OFFSET_IIDC_FORMAT, 1, ENC_BIG_ENDIAN);
2561 proto_tree_add_item(stream_tree, hf_aem_iidc_mode, tvb,
2562 AEM_OFFSET_IIDC_MODE, 1, ENC_BIG_ENDIAN);
2563 proto_tree_add_item(stream_tree, hf_aem_iidc_rate, tvb,
2564 AEM_OFFSET_IIDC_RATE, 1, ENC_BIG_ENDIAN);
2566 } else { /* 61883 Stream Format */
2567 proto_tree_add_item(stream_tree, hf_aem_fmt, tvb,
2568 AEM_OFFSET_FMT, 1, ENC_BIG_ENDIAN);
2569 fmt = tvb_get_uint8(tvb, AEM_OFFSET_FMT) & 0x7F;
2570 if (fmt == 0x20) { /* 61883-6 Stream Format */
2571 proto_tree_add_item(stream_tree, hf_aem_fdf_evt, tvb,
2572 AEM_OFFSET_FDF_EVT, 1, ENC_BIG_ENDIAN);
2573 proto_tree_add_item(stream_tree, hf_aem_fdf_sfc, tvb,
2574 AEM_OFFSET_FDF_SFC, 1, ENC_BIG_ENDIAN);
2575 proto_tree_add_item(stream_tree, hf_aem_dbs, tvb,
2576 AEM_OFFSET_DBS, 1, ENC_BIG_ENDIAN);
2578 fdf_evt = tvb_get_uint8(tvb, AEM_OFFSET_FDF_EVT) & AEM_MASK_FDF_EVT;
2580 proto_tree_add_item(stream_tree, hf_aem_b_flag, tvb,
2581 AEM_OFFSET_B, 1, ENC_BIG_ENDIAN);
2582 proto_tree_add_item(stream_tree, hf_aem_nb_flag, tvb,
2583 AEM_OFFSET_NB, 1, ENC_BIG_ENDIAN);
2585 if (fdf_evt == 0x00) { /* 61883-6 AM824 Stream Format */
2586 proto_tree_add_item(stream_tree, hf_aem_label_iec_60958_cnt, tvb,
2587 AEM_OFFSET_LABEL_IEC_60958_CNT, 1, ENC_BIG_ENDIAN);
2588 proto_tree_add_item(stream_tree, hf_aem_label_mbla_cnt, tvb,
2589 AEM_OFFSET_LABEL_MBLA_CNT, 1, ENC_BIG_ENDIAN);
2590 proto_tree_add_item(stream_tree, hf_aem_label_midi_cnt, tvb,
2591 AEM_OFFSET_LABEL_MIDI_CNT, 1, ENC_BIG_ENDIAN);
2592 proto_tree_add_item(stream_tree, hf_aem_label_smpte_cnt, tvb,
2593 AEM_OFFSET_LABEL_SMPTE_CNT, 1, ENC_BIG_ENDIAN);
2595 } else if (fmt == 0x01) { /* 61883-8 Stream Format */
2596 proto_tree_add_item(stream_tree, hf_aem_video_mode, tvb,
2597 AEM_OFFSET_VIDEO_MODE, 1, ENC_BIG_ENDIAN);
2598 proto_tree_add_item(stream_tree, hf_aem_compress_mode, tvb,
2599 AEM_OFFSET_COMPRESS_MODE, 1, ENC_BIG_ENDIAN);
2600 proto_tree_add_item(stream_tree, hf_aem_color_space, tvb,
2601 AEM_OFFSET_COLOR_SPACE, 1, ENC_BIG_ENDIAN);
2604 break;
2605 case MMA_SUBTYPE:
2606 /* Defined by the MMA */
2607 break;
2608 case AVTP_AUDIO_SUBTYPE:
2609 /* Defined by the AVTP */
2610 break;
2611 case AVTP_VIDEO_SUBTYPE:
2612 /* Defined by the AVTP */
2613 break;
2614 case EXPERIMENTAL_SUBTYPE:
2615 /* used for experimental formats for development purposes only */
2616 break;
2617 default:
2618 /* unknown or unimplemented subtype */
2619 /* possibly a weather baloon, or swamp gas */
2620 break;
2625 static void
2626 dissect_17221_video_format(tvbuff_t *tvb, proto_tree *tree)
2628 /* TODO */
2629 proto_tree_add_item(tree, hf_aecp_video_format, tvb,
2630 0, 4, ENC_NA);
2633 static void
2634 dissect_17221_video_aspect_ratio(tvbuff_t *tvb, proto_tree *tree)
2636 /* TODO */
2637 proto_tree_add_item(tree, hf_aecp_video_format, tvb,
2638 0, 2, ENC_NA);
2641 static void
2642 dissect_17221_video_frame_size(tvbuff_t *tvb, proto_tree *tree)
2644 /* TODO */
2645 proto_tree_add_item(tree, hf_aecp_video_format, tvb,
2646 0, 4, ENC_NA);
2649 static void
2650 dissect_17221_sensor_format(tvbuff_t *tvb, proto_tree *tree)
2652 /* TODO */
2653 proto_tree_add_item(tree, hf_aecp_video_format, tvb,
2654 0, 8, ENC_NA);
2657 #if 0 /* old, prior to D21. Fix for D21 video format */
2658 static void
2659 dissect_17221_media_format(tvbuff_t *tvb, proto_tree *tree)
2661 proto_item *media_tree;
2662 proto_item *media_ti;
2663 uint32_t oui24;
2664 uint8_t mfd_type;
2666 /* grab the oui24 and mfd_type */
2667 oui24 = tvb_get_ntoh24(tvb, 0);
2668 mfd_type = tvb_get_uint8(tvb, 3);
2670 /* subtree */
2671 media_ti = proto_tree_add_item(tree, hf_aecp_media_format, tvb,
2672 0, 16, ENC_NA);
2673 media_tree = proto_item_add_subtree(media_ti, ett_aem_media_format);
2675 /* standard media formats */
2676 if (oui24 == OUI24_STANDARD_MEDIA_FORMAT) {
2677 /* Standard Media Format Fields */
2678 proto_tree_add_item(media_tree, hf_aem_oui24, tvb,
2679 0, 3, ENC_BIG_ENDIAN);
2680 proto_tree_add_item(media_tree, hf_aem_mfd_type, tvb,
2681 AEM_OFFSET_MFD_TYPE, 1, ENC_BIG_ENDIAN);
2683 /* break down the standard media format types */
2684 switch(mfd_type) {
2685 case MFD_TYPE_VIDEO:
2686 proto_tree_add_item(media_tree, hf_aem_div, tvb,
2687 AEM_OFFSET_DIV, 1, ENC_BIG_ENDIAN);
2688 proto_tree_add_item(media_tree, hf_aem_interlace, tvb,
2689 AEM_OFFSET_INTERLACE, 2, ENC_BIG_ENDIAN);
2690 proto_tree_add_item(media_tree, hf_aem_channels, tvb,
2691 AEM_OFFSET_CHANNELS, 1, ENC_BIG_ENDIAN);
2692 proto_tree_add_item(media_tree, hf_aem_color_format, tvb,
2693 AEM_OFFSET_COLOR_FORMAT, 2, ENC_BIG_ENDIAN);
2694 proto_tree_add_item(media_tree, hf_aem_bpp, tvb,
2695 AEM_OFFSET_BPP, 1, ENC_BIG_ENDIAN);
2696 proto_tree_add_item(media_tree, hf_aem_aspect_x, tvb,
2697 AEM_OFFSET_ASPECT_X, 1, ENC_BIG_ENDIAN);
2698 proto_tree_add_item(media_tree, hf_aem_aspect_y, tvb,
2699 AEM_OFFSET_ASPECT_Y, 1 ,ENC_BIG_ENDIAN);
2700 proto_tree_add_item(media_tree, hf_aem_frame_rate, tvb,
2701 AEM_OFFSET_FRAME_RATE, 1, ENC_BIG_ENDIAN);
2702 proto_tree_add_item(media_tree, hf_aem_comp1, tvb,
2703 AEM_OFFSET_COMP1, 2, ENC_BIG_ENDIAN);
2704 proto_tree_add_item(media_tree, hf_aem_comp2, tvb,
2705 AEM_OFFSET_COMP2, 1, ENC_BIG_ENDIAN);
2706 proto_tree_add_item(media_tree, hf_aem_comp3, tvb,
2707 AEM_OFFSET_COMP3, 2, ENC_BIG_ENDIAN);
2708 proto_tree_add_item(media_tree, hf_aem_comp4, tvb,
2709 AEM_OFFSET_COMP4, 1, ENC_BIG_ENDIAN);
2710 proto_tree_add_item(media_tree, hf_aem_mf_width, tvb,
2711 AEM_OFFSET_SVMF_WIDTH, 2, ENC_BIG_ENDIAN);
2712 proto_tree_add_item(media_tree, hf_aem_mf_height, tvb,
2713 AEM_OFFSET_SVMF_HEIGHT, 2, ENC_BIG_ENDIAN);
2714 break;
2715 case MFD_TYPE_TRANSPORT_STRM:
2716 break;
2717 case MFD_TYPE_MIDI:
2718 break;
2719 case MFD_TYPE_TIME_CODE:
2720 break;
2721 case MFD_TYPE_CONTROL_PROTO:
2722 proto_tree_add_item(media_tree, hf_aem_cs_eui64, tvb,
2723 AEM_OFFSET_CS_EUI64, 8, ENC_BIG_ENDIAN);
2724 break;
2725 default:
2726 /* unsupported MFD type */
2727 break;
2729 } else { /* vendor specific media formats */
2731 /* these are not the media formats you are looking for */
2735 #endif
2737 /* TODO following updates in Draft 18 and the pending Draft 19 this section will require major overhaul */
2738 static void
2739 dissect_17221_ctrl_val(tvbuff_t *tvb, proto_tree *tree, uint16_t num_ctrl_vals, uint16_t ctrl_val_type,
2740 uint16_t ctrl_offset)
2742 proto_item *ctrl_item;
2743 proto_item *ctrl_subtree;
2744 int i;
2745 uint32_t bin_blob_size;
2746 ctrl_ref_vals ref;
2748 /* set up control values tree */
2749 ctrl_item = proto_tree_add_item(tree, hf_aem_ctrl_vals, tvb,
2750 0, 0, ENC_NA);
2751 ctrl_subtree = proto_item_add_subtree(ctrl_item, ett_aem_ctrl_vals);
2753 /* ctrl_val_type's are dissected below in this if/else block */
2754 /* for now only a few value types are in use, if I have time to come
2755 back to it I will add more fields to this but for now when viewing
2756 control_values you will need a copy of the spec handy to figure
2757 out what you are looking at, the get_ctrl_ref_vals function above
2758 will ideally be eliminated and this section will be a lot cleaner
2759 if/when that happens */
2761 ref = get_ctrl_ref_vals(ctrl_val_type);
2763 /* LINEAR TYPES */
2764 if (ctrl_val_type < 0xa) {
2765 for(i = 0; i < num_ctrl_vals; ++i) {
2766 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2767 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2768 ctrl_offset += ref.size;
2769 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2770 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2771 ctrl_offset += ref.size;
2772 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2773 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2774 ctrl_offset += ref.size;
2775 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2776 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2777 ctrl_offset += ref.size;
2778 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2779 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2780 ctrl_offset += ref.size;
2781 proto_tree_add_item(ctrl_subtree, hf_aem_unit, tvb,
2782 ctrl_offset, 2, ENC_BIG_ENDIAN);
2783 ctrl_offset += 2;
2784 proto_tree_add_item(ctrl_subtree, hf_aem_string_ref, tvb,
2785 ctrl_offset, 2, ENC_BIG_ENDIAN);
2786 ctrl_offset += 2;
2789 /* SELECTOR TYPES */
2790 } else if (ctrl_val_type > 0x9 && ctrl_val_type < 0x14) {
2791 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2792 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2793 ctrl_offset += 2;
2794 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2795 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2796 ctrl_offset += 2;
2797 for(i = 0; i < num_ctrl_vals; ++i) {
2798 proto_tree_add_item(ctrl_subtree, ref.hf, tvb,
2799 ctrl_offset, ref.size, ENC_BIG_ENDIAN);
2800 ctrl_offset += 2;
2802 proto_tree_add_item(ctrl_subtree, hf_aem_unit, tvb,
2803 ctrl_offset, 2, ENC_BIG_ENDIAN);
2805 /* UTF8 STRING TYPE */
2806 } else if (ctrl_val_type == 0x14) {
2807 proto_tree_add_item(ctrl_subtree, hf_aem_string, tvb,
2808 ctrl_offset, -1, ENC_ASCII);
2810 /* BODE_PLOT TYPE */
2811 } else if (ctrl_val_type == 0x15) {
2812 for(i = 0; i < 12 + (num_ctrl_vals * 3); ++i) {
2813 proto_tree_add_item(ctrl_subtree, hf_aem_ctrl_float, tvb,
2814 ctrl_offset, 4, ENC_BIG_ENDIAN);
2815 ctrl_offset += 4;
2818 /* ARRAY TYPES */
2819 } else if (ctrl_val_type > 0x15 && ctrl_val_type < 0x1f) {
2820 /* VENDOR CONTROL TYPE */
2821 } else if (ctrl_val_type == 0xfffe) {
2822 proto_tree_add_item(ctrl_subtree, hf_aem_guid, tvb,
2823 ctrl_offset, 8, ENC_BIG_ENDIAN);
2824 ctrl_offset += 8;
2825 bin_blob_size = tvb_get_ntohl(tvb, ctrl_offset);
2826 proto_tree_add_item(ctrl_subtree, hf_aem_blob_size, tvb,
2827 ctrl_offset, 4, ENC_BIG_ENDIAN);
2828 ctrl_offset += 4;
2829 proto_tree_add_item(ctrl_subtree, hf_aem_binary_blob, tvb,
2830 ctrl_offset, bin_blob_size, ENC_NA);
2834 /* dissect descriptors from the AVDECC Entity Model (AEM) */
2835 /* this dissector is not registered */
2836 static void
2837 dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree)
2839 uint16_t desc_type;
2840 uint16_t ctrl_val_type;
2841 uint16_t num_ctrl_vals;
2842 tvbuff_t *next_tvb;
2843 int i;
2845 /* Mr. Subtree and Mr. Counter will be used as the loop limit and
2846 * subtree object for arrays in the descriptors, rather than declaring
2847 * a separate variable for each possible case in the switch which uses
2848 * arrays.
2850 proto_item *mr_subtree;
2851 proto_item *mr_item;
2852 uint32_t mr_offset;
2853 uint16_t mr_counter;
2855 float frequency;
2856 int freq_mult;
2857 int base_freq;
2859 proto_item *aem_tree;
2860 /* used in creation of descriptor subtree */
2861 proto_item *desc_ti;
2864 /* get the type of this descriptor */
2865 desc_type = tvb_get_ntohs(tvb, 0);
2867 /* Load the descriptor type and id fields, add subtree */
2868 desc_ti = proto_tree_add_item(tree, hf_aecp_descriptor_type, tvb,
2869 AEM_OFFSET_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
2870 aem_tree = proto_item_add_subtree(desc_ti, ett_aem_descriptor);
2872 proto_tree_add_item(aem_tree, hf_aecp_descriptor_index, tvb,
2873 AEM_OFFSET_DESCRIPTOR_ID, 2, ENC_BIG_ENDIAN);
2875 /* Dissect descriptors based on type. Where possible multiple cases *
2876 * will fall through to the same code */
2877 switch(desc_type) {
2878 case AEM_DESCRIPTOR_ENTITY:
2879 proto_tree_add_item(aem_tree, hf_aem_entity_id, tvb,
2880 ENTITY_OFFSET_ENTITY_GUID, 8, ENC_BIG_ENDIAN);
2881 proto_tree_add_item(aem_tree, hf_aem_entity_model_id, tvb,
2882 ENTITY_OFFSET_ENTITY_MODEL_ID, 8, ENC_BIG_ENDIAN);
2884 proto_tree_add_item(aem_tree, hf_adp_entity_cap, tvb,
2885 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2886 proto_tree_add_item(aem_tree, hf_adp_entity_cap_efu_mode, tvb,
2887 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2888 proto_tree_add_item(aem_tree, hf_adp_entity_cap_address_access_supported, tvb,
2889 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2890 proto_tree_add_item(aem_tree, hf_adp_entity_cap_gateway_entity, tvb,
2891 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2892 proto_tree_add_item(aem_tree, hf_adp_entity_cap_aem_supported, tvb,
2893 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2894 proto_tree_add_item(aem_tree, hf_adp_entity_cap_legacy_avc, tvb,
2895 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2896 proto_tree_add_item(aem_tree, hf_adp_entity_cap_assoc_id_support, tvb,
2897 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2898 proto_tree_add_item(aem_tree, hf_adp_entity_cap_assoc_id_valid, tvb,
2899 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2900 proto_tree_add_item(aem_tree, hf_adp_entity_cap_vendor_unique, tvb,
2901 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2902 proto_tree_add_item(aem_tree, hf_adp_entity_cap_class_a_supported, tvb,
2903 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2904 proto_tree_add_item(aem_tree, hf_adp_entity_cap_class_b_supported, tvb,
2905 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2906 proto_tree_add_item(aem_tree, hf_adp_entity_cap_gptp_supported, tvb,
2907 ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2909 proto_tree_add_item(aem_tree, hf_adp_talker_stream_srcs, tvb,
2910 ENTITY_OFFSET_TALKER_STREAM_SOURCES, 2, ENC_BIG_ENDIAN);
2912 proto_tree_add_item(aem_tree, hf_adp_talker_cap, tvb,
2913 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2914 proto_tree_add_item(aem_tree, hf_adp_talk_cap_implement, tvb,
2915 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2916 proto_tree_add_item(aem_tree, hf_adp_talk_cap_other_src, tvb,
2917 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2918 proto_tree_add_item(aem_tree, hf_adp_talk_cap_control_src, tvb,
2919 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2920 proto_tree_add_item(aem_tree, hf_adp_talk_cap_media_clk_src, tvb,
2921 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2922 proto_tree_add_item(aem_tree, hf_adp_talk_cap_smpte_src, tvb,
2923 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2924 proto_tree_add_item(aem_tree, hf_adp_talk_cap_midi_src, tvb,
2925 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2926 proto_tree_add_item(aem_tree, hf_adp_talk_cap_audio_src, tvb,
2927 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2928 proto_tree_add_item(aem_tree, hf_adp_talk_cap_video_src, tvb,
2929 ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2931 proto_tree_add_item(aem_tree, hf_adp_listener_stream_sinks, tvb,
2932 ENTITY_OFFSET_LISTENER_STREAM_SINKS, 2, ENC_BIG_ENDIAN);
2934 proto_tree_add_item(aem_tree, hf_adp_listener_cap, tvb,
2935 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2936 proto_tree_add_item(aem_tree, hf_adp_list_cap_implement, tvb,
2937 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2938 proto_tree_add_item(aem_tree, hf_adp_list_cap_other_sink, tvb,
2939 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2940 proto_tree_add_item(aem_tree, hf_adp_list_cap_control_sink, tvb,
2941 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2942 proto_tree_add_item(aem_tree, hf_adp_list_cap_media_clk_sink, tvb,
2943 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2944 proto_tree_add_item(aem_tree, hf_adp_list_cap_smpte_sink, tvb,
2945 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2946 proto_tree_add_item(aem_tree, hf_adp_list_cap_midi_sink, tvb,
2947 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2948 proto_tree_add_item(aem_tree, hf_adp_list_cap_audio_sink, tvb,
2949 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2950 proto_tree_add_item(aem_tree, hf_adp_list_cap_video_sink, tvb,
2951 ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN);
2953 proto_tree_add_item(aem_tree, hf_adp_controller_cap, tvb,
2954 ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2955 proto_tree_add_item(aem_tree, hf_adp_cont_cap_implement, tvb,
2956 ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2957 proto_tree_add_item(aem_tree, hf_adp_cont_cap_layer3_proxy, tvb,
2958 ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN);
2960 proto_tree_add_item(aem_tree, hf_adp_avail_index, tvb,
2961 ENTITY_OFFSET_AVAILABLE_INDEX, 4, ENC_BIG_ENDIAN);
2962 proto_tree_add_item(aem_tree, hf_aecp_association_id, tvb,
2963 ENTITY_OFFSET_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN);
2964 proto_tree_add_item(aem_tree, hf_aem_entity_name, tvb,
2965 ENTITY_OFFSET_ENTITY_NAME, 64, ENC_ASCII);
2966 proto_tree_add_item(aem_tree, hf_aem_vendor_name_string, tvb,
2967 ENTITY_OFFSET_VENDOR_NAME_STRING, 2, ENC_BIG_ENDIAN);
2968 proto_tree_add_item(aem_tree, hf_aem_model_name_string, tvb,
2969 ENTITY_OFFSET_MODEL_NAME_STRING, 2, ENC_BIG_ENDIAN);
2970 proto_tree_add_item(aem_tree, hf_aem_firmware_version, tvb,
2971 ENTITY_OFFSET_FIRMWARE_VERSION, 64, ENC_ASCII);
2972 proto_tree_add_item(aem_tree, hf_aem_group_name, tvb,
2973 ENTITY_OFFSET_GROUP_NAME, 64, ENC_ASCII);
2974 proto_tree_add_item(aem_tree, hf_aem_serial_number, tvb,
2975 ENTITY_OFFSET_SERIAL_NUMBER, 64, ENC_ASCII);
2976 proto_tree_add_item(aem_tree, hf_aem_configurations_count, tvb,
2977 ENTITY_OFFSET_CONFIGURATIONS_COUNT, 2, ENC_BIG_ENDIAN);
2978 proto_tree_add_item(aem_tree, hf_aem_current_configuration, tvb,
2979 ENTITY_OFFSET_CURRENT_CONFIGURATION, 2, ENC_BIG_ENDIAN);
2980 break;
2981 case AEM_DESCRIPTOR_CONFIGURATION:
2982 proto_tree_add_item(aem_tree, hf_aem_configuration_name, tvb,
2983 CONFIGURATION_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
2984 proto_tree_add_item(aem_tree, hf_aem_configuration_name_string, tvb,
2985 CONFIGURATION_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
2986 proto_tree_add_item(aem_tree, hf_aem_descriptor_counts_count, tvb,
2987 CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_COUNT, 2, ENC_BIG_ENDIAN);
2989 /* set up subtree, counter, and offset for sample rates array */
2990 mr_item = proto_tree_add_item(aem_tree, hf_aem_descriptor_counts_offset, tvb,
2991 CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_OFFSET, 2, ENC_BIG_ENDIAN);
2992 mr_counter = tvb_get_ntohs(tvb, CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_COUNT);
2993 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_desc_counts);
2994 mr_offset = CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS;
2996 for(i = 0; i < mr_counter; ++i)
2998 proto_tree_add_item(mr_subtree, hf_aecp_descriptor_type, tvb, mr_offset, 2, ENC_BIG_ENDIAN);
2999 mr_offset += 2;
3000 proto_tree_add_item(mr_subtree, hf_aem_count, tvb, mr_offset, 2, ENC_BIG_ENDIAN);
3001 mr_offset += 2;
3003 break;
3004 case AEM_DESCRIPTOR_AUDIO_UNIT:
3005 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3006 AUDIO_UNIT_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3007 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3008 AUDIO_UNIT_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3010 /* D20 clock domain */
3011 proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb,
3012 AUDIO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN);
3014 proto_tree_add_item(aem_tree, hf_aem_number_of_stream_input_ports, tvb,
3015 AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS, 2, ENC_BIG_ENDIAN);
3016 proto_tree_add_item(aem_tree, hf_aem_base_stream_input_port, tvb,
3017 AUDIO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT, 2, ENC_BIG_ENDIAN);
3018 proto_tree_add_item(aem_tree, hf_aem_number_of_stream_output_ports, tvb,
3019 AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN);
3020 proto_tree_add_item(aem_tree, hf_aem_base_stream_output_port, tvb,
3021 AUDIO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT, 2, ENC_BIG_ENDIAN);
3022 proto_tree_add_item(aem_tree, hf_aem_number_of_external_input_ports, tvb,
3023 AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN);
3024 proto_tree_add_item(aem_tree, hf_aem_base_external_input_port, tvb,
3025 AUDIO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN);
3026 proto_tree_add_item(aem_tree, hf_aem_number_of_external_output_ports, tvb,
3027 AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN);
3028 proto_tree_add_item(aem_tree, hf_aem_base_external_output_port, tvb,
3029 AUDIO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN);
3030 proto_tree_add_item(aem_tree, hf_aem_number_of_internal_input_ports, tvb,
3031 AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN);
3032 proto_tree_add_item(aem_tree, hf_aem_base_internal_input_port, tvb,
3033 AUDIO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN);
3034 proto_tree_add_item(aem_tree, hf_aem_number_of_internal_output_ports, tvb,
3035 AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN);
3036 proto_tree_add_item(aem_tree, hf_aem_base_internal_output_port, tvb,
3037 AUDIO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN);
3038 proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb,
3039 AUDIO_UNIT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN);
3040 proto_tree_add_item(aem_tree, hf_aem_base_control, tvb,
3041 AUDIO_UNIT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN);
3042 proto_tree_add_item(aem_tree, hf_aem_number_signal_selectors, tvb,
3043 AUDIO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS, 2, ENC_BIG_ENDIAN);
3044 proto_tree_add_item(aem_tree, hf_aem_base_signal_selector, tvb,
3045 AUDIO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR, 2, ENC_BIG_ENDIAN);
3046 proto_tree_add_item(aem_tree, hf_aem_number_mixers, tvb,
3047 AUDIO_UNIT_OFFSET_NUMBER_MIXERS, 2, ENC_BIG_ENDIAN);
3048 proto_tree_add_item(aem_tree, hf_aem_base_mixer, tvb,
3049 AUDIO_UNIT_OFFSET_BASE_MIXER, 2, ENC_BIG_ENDIAN);
3050 proto_tree_add_item(aem_tree, hf_aem_number_matrices, tvb,
3051 AUDIO_UNIT_OFFSET_NUMBER_MATRICES, 2, ENC_BIG_ENDIAN);
3052 proto_tree_add_item(aem_tree, hf_aem_base_matrix, tvb,
3053 AUDIO_UNIT_OFFSET_BASE_MATRIX, 2, ENC_BIG_ENDIAN);
3054 proto_tree_add_item(aem_tree, hf_aem_number_splitters, tvb,
3055 AUDIO_UNIT_OFFSET_NUMBER_SPLITTERS, 2, ENC_BIG_ENDIAN);
3056 proto_tree_add_item(aem_tree, hf_aem_base_splitter, tvb,
3057 AUDIO_UNIT_OFFSET_BASE_SPLITTER, 2, ENC_BIG_ENDIAN);
3058 proto_tree_add_item(aem_tree, hf_aem_number_combiners, tvb,
3059 AUDIO_UNIT_OFFSET_NUMBER_COMBINERS, 2, ENC_BIG_ENDIAN);
3060 proto_tree_add_item(aem_tree, hf_aem_base_combiner, tvb,
3061 AUDIO_UNIT_OFFSET_BASE_COMBINER, 2, ENC_BIG_ENDIAN);
3062 proto_tree_add_item(aem_tree, hf_aem_number_demultiplexers, tvb,
3063 AUDIO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS, 2, ENC_BIG_ENDIAN);
3064 proto_tree_add_item(aem_tree, hf_aem_base_demultiplexer, tvb,
3065 AUDIO_UNIT_OFFSET_BASE_DEMULTIPLEXER, 2, ENC_BIG_ENDIAN);
3066 proto_tree_add_item(aem_tree, hf_aem_number_multiplexers, tvb,
3067 AUDIO_UNIT_OFFSET_NUMBER_MULTIPLEXERS, 2, ENC_BIG_ENDIAN);
3068 proto_tree_add_item(aem_tree, hf_aem_base_multiplexer, tvb,
3069 AUDIO_UNIT_OFFSET_BASE_MULTIPLEXER, 2, ENC_BIG_ENDIAN);
3070 proto_tree_add_item(aem_tree, hf_aem_number_transcoders, tvb,
3071 AUDIO_UNIT_OFFSET_NUMBER_TRANSCODERS, 2, ENC_BIG_ENDIAN);
3072 proto_tree_add_item(aem_tree, hf_aem_base_transcoder, tvb,
3073 AUDIO_UNIT_OFFSET_BASE_TRANSCODER, 2, ENC_BIG_ENDIAN);
3076 proto_tree_add_item(aem_tree, hf_aem_number_control_blocks, tvb,
3077 AUDIO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS, 2, ENC_BIG_ENDIAN);
3078 proto_tree_add_item(aem_tree, hf_aem_base_control_block, tvb,
3079 AUDIO_UNIT_OFFSET_BASE_CONTROL_BLOCK, 2, ENC_BIG_ENDIAN);
3082 proto_tree_add_item(aem_tree, hf_aem_current_sample_rate, tvb,
3083 AUDIO_UNIT_OFFSET_CURRENT_SAMPLE_RATE, 4, ENC_BIG_ENDIAN);
3085 proto_tree_add_item(aem_tree, hf_aem_sample_rates_offset, tvb,
3086 AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET, 2, ENC_BIG_ENDIAN);
3087 proto_tree_add_item(aem_tree, hf_aem_sample_rates_count, tvb,
3088 AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT, 2, ENC_BIG_ENDIAN);
3090 /* set up subtree, counter, and offset for sample rates array */
3091 mr_offset = tvb_get_ntohs(tvb, AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET);
3092 mr_counter = tvb_get_ntohs(tvb, AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT);
3093 mr_item = proto_tree_add_item(aem_tree, hf_aem_sample_rates, tvb,
3094 mr_offset, mr_counter * 4, ENC_NA);
3095 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sample_rates);
3097 /* loop to get the array values */
3098 for(i = 0; i < mr_counter; ++i) {
3099 proto_tree_add_item(mr_subtree, hf_aem_pull_field, tvb,
3100 mr_offset, 1, ENC_BIG_ENDIAN);
3101 proto_tree_add_item(mr_subtree, hf_aem_base_frequency, tvb,
3102 mr_offset, 4, ENC_BIG_ENDIAN);
3103 base_freq = tvb_get_ntohl(tvb, mr_offset);
3104 freq_mult = base_freq;
3106 freq_mult &= 0xe0000000;
3107 freq_mult = freq_mult >> 29;
3108 base_freq &= 0x1fffffff;
3109 /* replace this with something not horrible */
3110 frequency = freq_mult == 0 ? 1 :
3111 freq_mult == 1 ? 1 / (float)1.001 :
3112 freq_mult == 2 ? (float)1.001 :
3113 freq_mult == 3 ? 24 / 25 :
3114 freq_mult == 4 ? 54 / 24 : 0;
3116 frequency *= base_freq;
3117 proto_tree_add_float(mr_subtree, hf_aem_frequency, tvb, mr_offset, 4, frequency);
3119 mr_offset += 4;
3121 break;
3122 case AEM_DESCRIPTOR_VIDEO_UNIT:
3123 case AEM_DESCRIPTOR_SENSOR_UNIT:
3124 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3125 VIDEO_UNIT_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3126 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3127 VIDEO_UNIT_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3129 /* D20 clock domain */
3130 proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb,
3131 AUDIO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN);
3133 proto_tree_add_item(aem_tree, hf_aem_number_of_stream_input_ports, tvb,
3134 VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS, 2, ENC_BIG_ENDIAN);
3135 proto_tree_add_item(aem_tree, hf_aem_base_stream_input_port, tvb,
3136 VIDEO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT, 2, ENC_BIG_ENDIAN);
3137 proto_tree_add_item(aem_tree, hf_aem_number_of_stream_output_ports, tvb,
3138 VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN);
3139 proto_tree_add_item(aem_tree, hf_aem_base_stream_output_port, tvb,
3140 VIDEO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT, 2, ENC_BIG_ENDIAN);
3141 proto_tree_add_item(aem_tree, hf_aem_number_of_external_input_ports, tvb,
3142 VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN);
3143 proto_tree_add_item(aem_tree, hf_aem_base_external_input_port, tvb,
3144 VIDEO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN);
3145 proto_tree_add_item(aem_tree, hf_aem_number_of_external_output_ports, tvb,
3146 VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN);
3147 proto_tree_add_item(aem_tree, hf_aem_base_external_output_port, tvb,
3148 VIDEO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN);
3149 proto_tree_add_item(aem_tree, hf_aem_number_of_internal_input_ports, tvb,
3150 VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN);
3151 proto_tree_add_item(aem_tree, hf_aem_base_internal_input_port, tvb,
3152 VIDEO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN);
3153 proto_tree_add_item(aem_tree, hf_aem_number_of_internal_output_ports, tvb,
3154 VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN);
3155 proto_tree_add_item(aem_tree, hf_aem_base_internal_output_port, tvb,
3156 VIDEO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN);
3157 proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb,
3158 VIDEO_UNIT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN);
3159 proto_tree_add_item(aem_tree, hf_aem_base_control, tvb,
3160 VIDEO_UNIT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN);
3161 proto_tree_add_item(aem_tree, hf_aem_number_signal_selectors, tvb,
3162 VIDEO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS, 2, ENC_BIG_ENDIAN);
3163 proto_tree_add_item(aem_tree, hf_aem_base_signal_selector, tvb,
3164 VIDEO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR, 2, ENC_BIG_ENDIAN);
3165 proto_tree_add_item(aem_tree, hf_aem_number_mixers, tvb,
3166 VIDEO_UNIT_OFFSET_NUMBER_MIXERS, 2, ENC_BIG_ENDIAN);
3167 proto_tree_add_item(aem_tree, hf_aem_base_mixer, tvb,
3168 VIDEO_UNIT_OFFSET_BASE_MIXER, 2, ENC_BIG_ENDIAN);
3169 proto_tree_add_item(aem_tree, hf_aem_number_matrices, tvb,
3170 VIDEO_UNIT_OFFSET_NUMBER_MATRICES, 2, ENC_BIG_ENDIAN);
3171 proto_tree_add_item(aem_tree, hf_aem_base_matrix, tvb,
3172 VIDEO_UNIT_OFFSET_BASE_MATRIX, 2, ENC_BIG_ENDIAN);
3173 proto_tree_add_item(aem_tree, hf_aem_number_splitters, tvb,
3174 VIDEO_UNIT_OFFSET_NUMBER_SPLITTERS, 2, ENC_BIG_ENDIAN);
3175 proto_tree_add_item(aem_tree, hf_aem_base_splitter, tvb,
3176 VIDEO_UNIT_OFFSET_BASE_SPLITTER, 2, ENC_BIG_ENDIAN);
3177 proto_tree_add_item(aem_tree, hf_aem_number_combiners, tvb,
3178 VIDEO_UNIT_OFFSET_NUMBER_COMBINERS, 2, ENC_BIG_ENDIAN);
3179 proto_tree_add_item(aem_tree, hf_aem_base_combiner, tvb,
3180 VIDEO_UNIT_OFFSET_BASE_COMBINER, 2, ENC_BIG_ENDIAN);
3181 proto_tree_add_item(aem_tree, hf_aem_number_demultiplexers, tvb,
3182 VIDEO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS, 2, ENC_BIG_ENDIAN);
3183 proto_tree_add_item(aem_tree, hf_aem_base_demultiplexer, tvb,
3184 VIDEO_UNIT_OFFSET_BASE_DEMULTIPLEXER, 2, ENC_BIG_ENDIAN);
3185 proto_tree_add_item(aem_tree, hf_aem_number_multiplexers, tvb,
3186 VIDEO_UNIT_OFFSET_NUMBER_MULTIPLEXERS, 2, ENC_BIG_ENDIAN);
3187 proto_tree_add_item(aem_tree, hf_aem_base_multiplexer, tvb,
3188 VIDEO_UNIT_OFFSET_BASE_MULTIPLEXER, 2, ENC_BIG_ENDIAN);
3189 proto_tree_add_item(aem_tree, hf_aem_number_transcoders, tvb,
3190 VIDEO_UNIT_OFFSET_NUMBER_TRANSCODERS, 2, ENC_BIG_ENDIAN);
3191 proto_tree_add_item(aem_tree, hf_aem_base_transcoder, tvb,
3192 VIDEO_UNIT_OFFSET_BASE_TRANSCODER, 2, ENC_BIG_ENDIAN);
3195 proto_tree_add_item(aem_tree, hf_aem_number_control_blocks, tvb,
3196 VIDEO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS, 2, ENC_BIG_ENDIAN);
3197 proto_tree_add_item(aem_tree, hf_aem_base_control_block, tvb,
3198 VIDEO_UNIT_OFFSET_BASE_CONTROL_BLOCK, 2, ENC_BIG_ENDIAN);
3199 break;
3200 case AEM_DESCRIPTOR_STREAM_INPUT:
3201 case AEM_DESCRIPTOR_STREAM_OUTPUT:
3202 proto_tree_add_item(aem_tree, hf_aem_stream_name, tvb,
3203 STREAM_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3204 proto_tree_add_item(aem_tree, hf_aem_stream_name_string, tvb,
3205 STREAM_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3207 /* D20 clock domain */
3208 proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb,
3209 STREAM_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN);
3211 /* set up a flags subtree */
3212 mr_item = proto_tree_add_item(aem_tree, hf_aem_stream_flags, tvb,
3213 STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN);
3214 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_stream_flags);
3215 /* add flags to new subtree */
3216 proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb,
3217 STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN);
3218 proto_tree_add_item(mr_subtree, hf_aem_flags_class_a, tvb,
3219 STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN);
3220 proto_tree_add_item(mr_subtree, hf_aem_flags_class_b, tvb,
3221 STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN);
3222 /* done adding flags, continue with fields */
3223 /* stream format dissection */
3224 next_tvb = tvb_new_subset_length(tvb, STREAM_OFFSET_CURRENT_FORMAT, 8);
3225 dissect_17221_stream_format(next_tvb, aem_tree);
3227 proto_tree_add_item(aem_tree, hf_aem_formats_offset, tvb,
3228 STREAM_OFFSET_FORMATS_OFFSET, 2, ENC_BIG_ENDIAN);
3229 proto_tree_add_item(aem_tree, hf_aem_number_of_formats, tvb,
3230 STREAM_OFFSET_NUMBER_OF_FORMATS, 2, ENC_BIG_ENDIAN);
3231 proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_0, tvb,
3232 STREAM_OFFSET_BACKUP_TALKER_GUID_0, 8, ENC_BIG_ENDIAN);
3233 proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_0, tvb,
3234 STREAM_OFFSET_BACKUP_TALKER_UNIQUE_0, 2, ENC_BIG_ENDIAN);
3235 proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_1, tvb,
3236 STREAM_OFFSET_BACKUP_TALKER_GUID_1, 8, ENC_BIG_ENDIAN);
3237 proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_1, tvb,
3238 STREAM_OFFSET_BACKUP_TALKER_UNIQUE_1, 2, ENC_BIG_ENDIAN);
3239 proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_2, tvb,
3240 STREAM_OFFSET_BACKUP_TALKER_GUID_2, 8, ENC_BIG_ENDIAN);
3241 proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_2, tvb,
3242 STREAM_OFFSET_BACKUP_TALKER_UNIQUE_2, 2, ENC_BIG_ENDIAN);
3243 proto_tree_add_item(aem_tree, hf_aem_backedup_talker_guid, tvb,
3244 STREAM_OFFSET_BACKEDUP_TALKER_GUID, 8, ENC_BIG_ENDIAN);
3245 proto_tree_add_item(aem_tree, hf_aem_backedup_talker_unique, tvb,
3246 STREAM_OFFSET_BACKEDUP_TALKER_UNIQUE_ID, 2, ENC_BIG_ENDIAN);
3247 proto_tree_add_item(aem_tree, hf_aem_avb_interface_id, tvb,
3248 STREAM_OFFSET_AVB_INTERFACE_ID, 2, ENC_BIG_ENDIAN);
3250 proto_tree_add_item(aem_tree, hf_aem_buffer_length, tvb,
3251 STREAM_OFFSET_BUFFER_LENGTH, 2, ENC_BIG_ENDIAN);
3253 mr_offset = tvb_get_ntohs(tvb, STREAM_OFFSET_FORMATS_OFFSET);
3254 mr_counter = tvb_get_ntohs(tvb, STREAM_OFFSET_NUMBER_OF_FORMATS);
3256 /* set up subtree, counter, and offset for formats array */
3257 mr_item = proto_tree_add_item(aem_tree, hf_aem_stream_formats, tvb,
3258 mr_offset, mr_counter * 8, ENC_NA);
3259 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_stream_formats);
3261 for(i = 0; i < mr_counter; ++i) {
3262 next_tvb = tvb_new_subset_length(tvb, mr_offset, 8);
3263 dissect_17221_stream_format(next_tvb, mr_subtree);
3264 mr_offset += 8;
3266 break;
3267 case AEM_DESCRIPTOR_JACK_INPUT:
3268 case AEM_DESCRIPTOR_JACK_OUTPUT:
3269 proto_tree_add_item(aem_tree, hf_aem_jack_name, tvb,
3270 JACK_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3271 proto_tree_add_item(aem_tree, hf_aem_jack_name_string, tvb,
3272 JACK_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3274 /* set up jack flags subtree */
3275 mr_item = proto_tree_add_item(aem_tree, hf_aem_jack_flags, tvb,
3276 JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN);
3277 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_jack_flags);
3278 proto_tree_add_item(mr_subtree, hf_aem_flags_captive, tvb,
3279 JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN);
3280 proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb,
3281 JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN);
3282 /* end jack flags subtree */
3284 proto_tree_add_item(aem_tree, hf_aem_jack_type, tvb,
3285 JACK_OFFSET_JACK_TYPE, 2, ENC_BIG_ENDIAN);
3287 proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb,
3288 JACK_OFFSET_JACK_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN);
3289 proto_tree_add_item(aem_tree, hf_aem_base_control, tvb,
3290 JACK_OFFSET_JACK_BASE_CONTROL, 2, ENC_BIG_ENDIAN);
3291 break;
3292 case AEM_DESCRIPTOR_STREAM_PORT_INPUT:
3293 case AEM_DESCRIPTOR_STREAM_PORT_OUTPUT:
3294 /* D20 clock domain */
3295 proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb,
3296 STREAM_PORT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN);
3298 /* set up port_flags subtree */
3299 mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb,
3300 STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3301 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_port_flags);
3302 proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb,
3303 STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3304 proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb,
3305 STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3306 proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb,
3307 STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3308 /* end port_flags subtree */
3310 proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb,
3311 STREAM_PORT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN);
3312 proto_tree_add_item(aem_tree, hf_aem_base_control, tvb,
3313 STREAM_PORT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN);
3314 proto_tree_add_item(aem_tree, hf_aem_number_of_clusters, tvb,
3315 STREAM_PORT_OFFSET_NUMBER_OF_CLUSTERS, 2, ENC_BIG_ENDIAN);
3316 proto_tree_add_item(aem_tree, hf_aem_base_cluster, tvb,
3317 STREAM_PORT_OFFSET_BASE_CLUSTER, 2, ENC_BIG_ENDIAN);
3318 proto_tree_add_item(aem_tree, hf_aem_number_audio_maps, tvb,
3319 STREAM_PORT_OFFSET_NUMBER_AUDIO_MAPS, 2, ENC_BIG_ENDIAN);
3320 proto_tree_add_item(aem_tree, hf_aem_base_audio_map, tvb,
3321 STREAM_PORT_OFFSET_BASE_AUDIO_MAP, 2, ENC_BIG_ENDIAN);
3322 break;
3323 case AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT:
3324 case AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT:
3325 proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb,
3326 EXTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN);
3328 /* set up port_flags subtree */
3329 mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb,
3330 EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3331 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_port_flags);
3332 proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb,
3333 EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3334 proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb,
3335 EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3336 proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb,
3337 EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3338 /* end port_flags subtree */
3340 proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb,
3341 EXTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN);
3342 proto_tree_add_item(aem_tree, hf_aem_base_control, tvb,
3343 EXTERNAL_PORT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN);
3344 proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb,
3345 EXTERNAL_PORT_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN);
3346 proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb,
3347 EXTERNAL_PORT_OFFSET_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN);
3348 proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb,
3349 EXTERNAL_PORT_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN);
3350 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3351 EXTERNAL_PORT_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3352 proto_tree_add_item(aem_tree, hf_aem_jack_id, tvb,
3353 EXTERNAL_PORT_OFFSET_JACK_INDEX, 2, ENC_BIG_ENDIAN);
3354 break;
3355 case AEM_DESCRIPTOR_INTERNAL_PORT_INPUT:
3356 case AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT:
3357 proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb,
3358 INTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN);
3360 /* set up port_flags subtree */
3361 mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb,
3362 INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3363 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_port_flags);
3364 proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb,
3365 INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3366 proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb,
3367 INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3368 proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb,
3369 INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN);
3370 /* end port_flags subtree */
3372 proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb,
3373 INTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN);
3374 proto_tree_add_item(aem_tree, hf_aem_base_control, tvb,
3375 INTERNAL_PORT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN);
3376 proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb,
3377 INTERNAL_PORT_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN);
3378 proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb,
3379 INTERNAL_PORT_OFFSET_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN);
3380 proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb,
3381 INTERNAL_PORT_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN);
3382 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3383 INTERNAL_PORT_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3384 proto_tree_add_item(aem_tree, hf_aem_jack_id, tvb,
3385 INTERNAL_PORT_OFFSET_INTERNAL_INDEX, 2, ENC_BIG_ENDIAN);
3386 break;
3387 case AEM_DESCRIPTOR_AVB_INTERFACE:
3388 proto_tree_add_item(aem_tree, hf_aem_interface_name, tvb,
3389 AVB_INTERFACE_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3390 proto_tree_add_item(aem_tree, hf_aem_interface_name_string, tvb,
3391 AVB_INTERFACE_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3393 proto_tree_add_item(aem_tree, hf_aecp_mac_address, tvb,
3394 AVB_INTERFACE_OFFSET_MAC_ADDRESS, 6, ENC_NA);
3396 proto_tree_add_item(aem_tree, hf_aem_avb_interface_flags, tvb,
3397 AVB_INTERFACE_OFFSET_INTERFACE_FLAGS, 2, ENC_BIG_ENDIAN);
3398 proto_tree_add_item(aem_tree, hf_aem_avb_clock_identity, tvb,
3399 AVB_INTERFACE_OFFSET_CLOCK_IDENTITY, 8, ENC_BIG_ENDIAN);
3400 proto_tree_add_item(aem_tree, hf_aem_avb_priority1, tvb,
3401 AVB_INTERFACE_OFFSET_PRIORITY1, 1, ENC_BIG_ENDIAN);
3402 proto_tree_add_item(aem_tree, hf_aem_avb_clock_class, tvb,
3403 AVB_INTERFACE_OFFSET_CLOCK_CLASS, 1, ENC_BIG_ENDIAN);
3404 proto_tree_add_item(aem_tree, hf_aem_avb_offset_scaled_log_variance, tvb,
3405 AVB_INTERFACE_OFFSET_OFFSET_SCALED_LOG_VARIANCE, 2, ENC_BIG_ENDIAN);
3406 proto_tree_add_item(aem_tree, hf_aem_avb_clock_accuracy, tvb,
3407 AVB_INTERFACE_OFFSET_CLOCK_ACCURACY, 1, ENC_BIG_ENDIAN);
3408 proto_tree_add_item(aem_tree, hf_aem_avb_priority2, tvb,
3409 AVB_INTERFACE_OFFSET_PRIORITY2, 1, ENC_BIG_ENDIAN);
3410 proto_tree_add_item(aem_tree, hf_aem_avb_domain_number, tvb,
3411 AVB_INTERFACE_OFFSET_DOMAIN_NUMBER, 1, ENC_BIG_ENDIAN);
3412 proto_tree_add_item(aem_tree, hf_aem_avb_log_sync_interval, tvb,
3413 AVB_INTERFACE_OFFSET_LOG_SYNC_INTERVAL, 1, ENC_BIG_ENDIAN);
3414 break;
3415 case AEM_DESCRIPTOR_CLOCK_SOURCE:
3416 proto_tree_add_item(aem_tree, hf_aem_clock_source_name, tvb,
3417 CLOCK_SOURCE_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3418 proto_tree_add_item(aem_tree, hf_aem_clock_source_name_string, tvb,
3419 CLOCK_SOURCE_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3420 /* set up clock_source_flags subtree */
3421 /*mr_item = */proto_tree_add_item(aem_tree, hf_aem_clock_source_flags, tvb,
3422 CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_FLAGS, 2, ENC_BIG_ENDIAN);
3423 /* mr_subtree = proto_item_add_subtree(mr_item, ett_aem_clock_source_flags);*/
3424 /* all flags reserved */
3425 /* end clock_source_flags subtree */
3426 proto_tree_add_item(aem_tree, hf_aem_clock_source_type, tvb,
3427 CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_TYPE, 2, ENC_BIG_ENDIAN);
3428 proto_tree_add_item(aem_tree, hf_aecp_clock_source_id, tvb,
3429 CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_IDENTIFIER, 8, ENC_BIG_ENDIAN);
3430 proto_tree_add_item(aem_tree, hf_aem_clock_source_location_type, tvb,
3431 CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_TYPE, 2, ENC_BIG_ENDIAN);
3432 proto_tree_add_item(aem_tree, hf_aem_clock_source_location_id, tvb,
3433 CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_INDEX, 2, ENC_BIG_ENDIAN);
3434 break;
3435 case AEM_DESCRIPTOR_AUDIO_MAP:
3436 proto_tree_add_item(aem_tree, hf_aem_mappings_offset, tvb,
3437 AUDIO_MAP_OFFSET_MAPPINGS_OFFSET, 2, ENC_BIG_ENDIAN);
3438 proto_tree_add_item(aem_tree, hf_aem_number_of_mappings, tvb,
3439 AUDIO_MAP_OFFSET_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN);
3441 /* prepare mappings subtree */
3442 mr_item = proto_tree_add_item(aem_tree, hf_aem_mappings, tvb,
3443 0, 0, ENC_NA);
3444 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_mappings);
3445 mr_offset = tvb_get_ntohs(tvb, AUDIO_MAP_OFFSET_MAPPINGS_OFFSET);
3446 mr_counter = tvb_get_ntohs(tvb, AUDIO_MAP_OFFSET_NUMBER_OF_MAPPINGS);
3447 proto_item_set_len(mr_item, mr_counter * 8);
3449 for(i = 0; i < mr_counter; i++) {
3450 proto_tree_add_item(mr_subtree, hf_aem_mapping_stream_index, tvb,
3451 mr_offset, 2, ENC_BIG_ENDIAN);
3452 mr_offset += 2;
3453 proto_tree_add_item(mr_subtree, hf_aem_mapping_stream_channel, tvb,
3454 mr_offset, 2, ENC_BIG_ENDIAN);
3455 mr_offset += 2;
3456 proto_tree_add_item(mr_subtree, hf_aem_mapping_cluster_offset, tvb,
3457 mr_offset, 2, ENC_BIG_ENDIAN);
3458 mr_offset += 2;
3459 proto_tree_add_item(mr_subtree, hf_aem_mapping_cluster_channel, tvb,
3460 mr_offset, 2, ENC_BIG_ENDIAN);
3461 mr_offset += 2;
3463 break;
3464 case AEM_DESCRIPTOR_AUDIO_CLUSTER:
3465 proto_tree_add_item(aem_tree, hf_aem_configuration_name, tvb,
3466 AUDIO_CLUSTER_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3467 proto_tree_add_item(aem_tree, hf_aem_configuration_name_string, tvb,
3468 AUDIO_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3470 proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb,
3471 AUDIO_CLUSTER_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN);
3472 proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb,
3473 AUDIO_CLUSTER_OFFSET_SIGNAL_ID, 2, ENC_BIG_ENDIAN);
3474 proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb,
3475 AUDIO_CLUSTER_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN);
3477 proto_tree_add_item(aem_tree, hf_aem_path_latency, tvb,
3478 AUDIO_CLUSTER_OFFSET_PATH_LATENCY, 4, ENC_BIG_ENDIAN);
3479 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3480 AUDIO_CLUSTER_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3482 proto_tree_add_item(aem_tree, hf_aem_channel_count, tvb,
3483 AUDIO_CLUSTER_OFFSET_CHANNEL_COUNT, 2, ENC_BIG_ENDIAN);
3485 proto_tree_add_item(aem_tree, hf_aem_am824_label, tvb,
3486 AUDIO_CLUSTER_OFFSET_FORMAT, 1, ENC_BIG_ENDIAN);
3488 break;
3489 case AEM_DESCRIPTOR_CONTROL:
3490 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3491 CONTROL_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3492 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3493 CONTROL_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3495 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3496 CONTROL_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3497 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3498 CONTROL_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3499 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3500 CONTROL_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN);
3501 proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb,
3502 CONTROL_OFFSET_CONTROL_VALUE_TYPE, 2, ENC_BIG_ENDIAN);
3503 proto_tree_add_item(aem_tree, hf_aem_control_type, tvb,
3504 CONTROL_OFFSET_CONTROL_TYPE, 8, ENC_BIG_ENDIAN);
3506 proto_tree_add_item(aem_tree, hf_aem_reset_time, tvb,
3507 CONTROL_OFFSET_RESET_TIME, 4, ENC_BIG_ENDIAN);
3509 proto_tree_add_item(aem_tree, hf_aem_values_offset, tvb,
3510 CONTROL_OFFSET_VALUES_OFFSET, 2, ENC_BIG_ENDIAN);
3511 proto_tree_add_item(aem_tree, hf_aem_number_of_values, tvb,
3512 CONTROL_OFFSET_NUMBER_OF_VALUES, 2, ENC_BIG_ENDIAN);
3513 proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb,
3514 CONTROL_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN);
3515 proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb,
3516 CONTROL_OFFSET_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN);
3517 proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb,
3518 CONTROL_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN);
3520 ctrl_val_type = tvb_get_ntohs(tvb, CONTROL_OFFSET_CONTROL_VALUE_TYPE);
3521 num_ctrl_vals = tvb_get_ntohs(tvb, CONTROL_OFFSET_NUMBER_OF_VALUES);
3522 mr_offset = tvb_get_ntohs(tvb, CONTROL_OFFSET_VALUES_OFFSET);
3523 dissect_17221_ctrl_val(tvb, aem_tree, num_ctrl_vals, ctrl_val_type,
3524 mr_offset);
3526 break;
3527 case AEM_DESCRIPTOR_SIGNAL_SELECTOR:
3528 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3529 SIGNAL_SELECTOR_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3530 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3531 SIGNAL_SELECTOR_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3533 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3534 SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3535 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3536 SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3537 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3538 SIGNAL_SELECTOR_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN);
3540 #if 0
3541 proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb,
3542 AEM_OFFSET_CONTROL_LOCATION_TYPE_SIGS, 2, ENC_BIG_ENDIAN);
3543 proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb,
3544 AEM_OFFSET_CONTROL_LOCATION_ID_SIGS, 2, ENC_BIG_ENDIAN);
3545 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3546 AEM_OFFSET_CONTROL_DOMAIN_SIGS, 2, ENC_BIG_ENDIAN);
3547 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3548 AEM_OFFSET_CONTROL_NAME_SIGS, 64, ENC_ASCII);
3549 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3550 AEM_OFFSET_CONTROL_NAME_STRING_SIGS, 2, ENC_BIG_ENDIAN);
3551 proto_tree_add_item(aem_tree, hf_aem_sources_offset, tvb,
3552 AEM_OFFSET_SOURCES_OFFSET_SIGS, 2, ENC_BIG_ENDIAN);
3553 proto_tree_add_item(aem_tree, hf_aem_number_of_sources, tvb,
3554 AEM_OFFSET_NUMBER_OF_SOURCES_SIGS, 2, ENC_BIG_ENDIAN);
3555 proto_tree_add_item(aem_tree, hf_aem_current_signal_type, tvb,
3556 AEM_OFFSET_CURRENT_SOURCE_TYPE_SIGS, 2, ENC_BIG_ENDIAN);
3557 proto_tree_add_item(aem_tree, hf_aem_current_signal_index, tvb,
3558 AEM_OFFSET_CURRENT_SOURCE_ID_SIGS, 2, ENC_BIG_ENDIAN);
3559 proto_tree_add_item(aem_tree, hf_aem_default_signal_type, tvb,
3560 AEM_OFFSET_DEFAULT_SOURCE_TYPE_SIGS, 2, ENC_BIG_ENDIAN);
3561 proto_tree_add_item(aem_tree, hf_aem_default_signal_index, tvb,
3562 AEM_OFFSET_DEFAULT_SOURCE_ID_SIGS, 2, ENC_BIG_ENDIAN);
3563 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3564 SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3565 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3566 SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3568 /* set up sources subtree */
3569 mr_item = proto_tree_add_item(aem_tree, hf_aem_sources, tvb,
3570 0, 0, ENC_NA);
3571 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sources);
3572 mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_SOURCES_SIGS);
3573 mr_offset = SIGNAL_SELECTOR_OFFSET_SOURCES;
3574 proto_item_set_len(mr_item, mr_counter * 4);
3576 for(i = 0; i < mr_counter; ++i) {
3577 proto_tree_add_item(mr_subtree, hf_aem_signal_type, tvb,
3578 mr_offset, 2, ENC_BIG_ENDIAN);
3579 mr_offset += 2;
3580 proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb,
3581 mr_offset, 2, ENC_BIG_ENDIAN);
3582 mr_offset += 2;
3584 #endif
3585 break;
3586 case AEM_DESCRIPTOR_MIXER:
3587 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3588 MIXER_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3589 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3590 MIXER_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3592 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3593 MIXER_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3594 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3595 MIXER_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3596 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3597 MIXER_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN);
3599 #if 0
3600 proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb,
3601 AEM_OFFSET_CONTROL_LOCATION_TYPE_MXR, 2, ENC_BIG_ENDIAN);
3602 proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb,
3603 AEM_OFFSET_CONTROL_LOCATION_ID_MXR, 2, ENC_BIG_ENDIAN);
3604 proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb,
3605 AEM_OFFSET_CONTROL_VALUE_TYPE_MXR, 2, ENC_BIG_ENDIAN);
3606 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3607 AEM_OFFSET_CONTROL_DOMAIN_MXR, 2 ,ENC_BIG_ENDIAN);
3608 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3609 AEM_OFFSET_CONTROL_NAME_MXR, 64, ENC_ASCII);
3610 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3611 AEM_OFFSET_CONTROL_NAME_STRING_MXR, 2, ENC_BIG_ENDIAN);
3612 proto_tree_add_item(aem_tree, hf_aem_sources_offset, tvb,
3613 AEM_OFFSET_SOURCES_OFFSET_MXR, 2, ENC_BIG_ENDIAN);
3614 proto_tree_add_item(aem_tree, hf_aem_number_of_sources, tvb,
3615 AEM_OFFSET_NUMBER_OF_SOURCES_MXR, 2, ENC_BIG_ENDIAN);
3616 proto_tree_add_item(aem_tree, hf_aem_value_offset, tvb,
3617 AEM_OFFSET_VALUE_OFFSET_MXR, 2, ENC_BIG_ENDIAN);
3618 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3619 MIXER_OFFSET_BLOCK_LATENCY, 2, ENC_BIG_ENDIAN);
3620 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3621 MIXER_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3623 /* set up subtree for sources */
3624 mr_item = proto_tree_add_item(aem_tree, hf_aem_sources, tvb,
3625 0, 0, ENC_NA);
3626 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sources);
3627 mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_SOURCES_MXR);
3628 mr_offset = MIXER_OFFSET_SOURCES;
3629 proto_item_set_len(mr_item, mr_counter * 4);
3631 for(i = 0; i < mr_counter; ++i) {
3632 proto_tree_add_item(mr_subtree, hf_aem_signal_type, tvb,
3633 mr_offset, 2, ENC_BIG_ENDIAN);
3634 mr_offset += 2;
3635 proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb,
3636 mr_offset, 2, ENC_BIG_ENDIAN);
3637 mr_offset += 2;
3640 /* end sources subtree */
3642 ctrl_val_type = tvb_get_ntohs(tvb, AEM_OFFSET_CONTROL_VALUE_TYPE_MXR);
3643 num_ctrl_vals = 1;
3644 dissect_17221_ctrl_val(tvb, aem_tree, num_ctrl_vals, ctrl_val_type,
3645 MIXER_OFFSET_SOURCES + (tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_SOURCES_MXR) * 4));
3646 #endif
3647 break;
3648 case AEM_DESCRIPTOR_MATRIX:
3649 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3650 MATRIX_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3651 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3652 MATRIX_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3654 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3655 MATRIX_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3656 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3657 MATRIX_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3658 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3659 MATRIX_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN);
3662 proto_tree_add_item(aem_tree, hf_aem_control_type, tvb,
3663 AEM_OFFSET_CONTROL_TYPE_MTRX, 8, ENC_BIG_ENDIAN);
3664 proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb,
3665 AEM_OFFSET_CONTROL_LOCATION_TYPE_MTRX, 2, ENC_BIG_ENDIAN);
3666 proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb,
3667 AEM_OFFSET_CONTROL_LOCATION_ID_MTRX, 2, ENC_BIG_ENDIAN);
3668 proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb,
3669 AEM_OFFSET_CONTROL_VALUE_TYPE_MTRX, 2, ENC_BIG_ENDIAN);
3670 proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb,
3671 AEM_OFFSET_CONTROL_DOMAIN_MTRX, 2 ,ENC_BIG_ENDIAN);
3672 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3673 AEM_OFFSET_CONTROL_NAME_MTRX, 64, ENC_ASCII);
3674 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3675 AEM_OFFSET_CONTROL_NAME_STRING_MTRX, 2, ENC_BIG_ENDIAN);
3676 proto_tree_add_item(aem_tree, hf_aem_width, tvb,
3677 AEM_OFFSET_WIDTH_MTRX, 2, ENC_BIG_ENDIAN);
3678 proto_tree_add_item(aem_tree, hf_aem_height, tvb,
3679 AEM_OFFSET_HEIGHT_MTRX, 2, ENC_BIG_ENDIAN);
3680 proto_tree_add_item(aem_tree, hf_aem_values_offset, tvb,
3681 AEM_OFFSET_VALUES_OFFSET_MTRX, 2, ENC_BIG_ENDIAN);
3682 proto_tree_add_item(aem_tree, hf_aem_number_of_values, tvb,
3683 AEM_OFFSET_NUMBER_OF_VALUES_MTRX, 2, ENC_BIG_ENDIAN);
3685 proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb,
3686 MATRIX_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN);
3687 proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb,
3688 MATRIX_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN);
3689 proto_tree_add_item(aem_tree, hf_aem_number_of_sources, tvb,
3690 MATRIX_OFFSET_NUMBER_SOURCES, 2, ENC_BIG_ENDIAN);
3691 proto_tree_add_item(aem_tree, hf_aem_base_source, tvb,
3692 MATRIX_OFFSET_BASE_SOURCE, 2, ENC_BIG_ENDIAN);
3693 proto_tree_add_item(aem_tree, hf_aem_number_destinations, tvb,
3694 MATRIX_OFFSET_NUMBER_DESTINATIONS, 2, ENC_BIG_ENDIAN);
3695 proto_tree_add_item(aem_tree, hf_aem_base_destination, tvb,
3696 MATRIX_OFFSET_BASE_DESTINATION, 2, ENC_BIG_ENDIAN);
3698 ctrl_val_type = tvb_get_ntohs(tvb, AEM_OFFSET_CONTROL_VALUE_TYPE_MTRX);
3699 num_ctrl_vals = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_VALUES_MTRX);
3700 dissect_17221_ctrl_val(tvb, aem_tree, num_ctrl_vals, ctrl_val_type,
3701 MATRIX_OFFSET_VALUE_DETAILS);
3703 break;
3704 case AEM_DESCRIPTOR_LOCALE:
3705 proto_tree_add_item(aem_tree, hf_aem_locale_identifier, tvb,
3706 LOCALE_OFFSET_LOCALE_IDENTIFIER, 64, ENC_ASCII);
3707 proto_tree_add_item(aem_tree, hf_aem_number_of_strings, tvb,
3708 LOCALE_OFFSET_NUMBER_OF_STRINGS, 2, ENC_BIG_ENDIAN);
3709 proto_tree_add_item(aem_tree, hf_aem_base_strings, tvb,
3710 LOCALE_OFFSET_BASE_STRINGS, 2, ENC_BIG_ENDIAN);
3711 break;
3712 case AEM_DESCRIPTOR_STRINGS:
3713 mr_offset = STRINGS_OFFSET_STRING0;
3714 for(i = 0; i < 7; ++i) {
3715 proto_tree_add_item(aem_tree, hf_aem_string, tvb,
3716 mr_offset, 64, ENC_ASCII);
3717 mr_offset += 64;
3719 break;
3720 case AEM_DESCRIPTOR_MATRIX_SIGNAL:
3721 proto_tree_add_item(aem_tree, hf_aem_signals_count, tvb,
3722 MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT, 2, ENC_BIG_ENDIAN);
3723 proto_tree_add_item(aem_tree, hf_aem_signals_offset, tvb,
3724 MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET, 2, ENC_BIG_ENDIAN);
3725 /* set up subtree for signals */
3726 mr_item = proto_tree_add_item(aem_tree, hf_aem_sources, tvb,
3727 0, 0, ENC_NA);
3728 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sources);
3729 mr_counter = tvb_get_ntohs(tvb, MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT);
3730 mr_offset = MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET;
3731 proto_item_set_len(mr_item, mr_counter * 4);
3733 for(i = 0; i < mr_counter; ++i)
3735 proto_tree_add_item(mr_subtree, hf_aem_signal_type, tvb,
3736 mr_offset, 2, ENC_BIG_ENDIAN);
3737 mr_offset += 2;
3738 proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb,
3739 mr_offset, 2, ENC_BIG_ENDIAN);
3740 mr_offset += 2;
3742 break;
3743 case AEM_DESCRIPTOR_MEMORY_OBJECT:
3744 proto_tree_add_item(aem_tree, hf_aem_memory_object_type, tvb,
3745 MEMORY_OBJECT_OFFSET_MEMORY_OBJECT_TYPE, 2, ENC_BIG_ENDIAN);
3746 proto_tree_add_item(aem_tree, hf_aem_target_descriptor_type, tvb,
3747 MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3748 proto_tree_add_item(aem_tree, hf_aem_target_descriptor_id, tvb,
3749 MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3750 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3751 MEMORY_OBJECT_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3752 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3753 MEMORY_OBJECT_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3754 proto_tree_add_item(aem_tree, hf_aem_start_address, tvb,
3755 MEMORY_OBJECT_OFFSET_START_ADDRESS, 8, ENC_BIG_ENDIAN);
3756 proto_tree_add_item(aem_tree, hf_aem_length, tvb,
3757 MEMORY_OBJECT_OFFSET_LENGTH, 8, ENC_BIG_ENDIAN);
3758 break;
3759 case AEM_DESCRIPTOR_CLOCK_DOMAIN:
3760 proto_tree_add_item(aem_tree, hf_aem_object_name, tvb,
3761 CLOCK_DOMAIN_OFFSET_OBJECT_NAME, 64, ENC_ASCII);
3762 proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb,
3763 CLOCK_DOMAIN_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN);
3764 proto_tree_add_item(aem_tree, hf_aem_clock_source_index, tvb,
3765 CLOCK_DOMAIN_OFFSET_CLOCK_SOURCE_INDEX, 2, ENC_BIG_ENDIAN);
3766 proto_tree_add_item(aem_tree, hf_aem_clock_sources_offset, tvb,
3767 CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_OFFSET, 2, ENC_BIG_ENDIAN);
3768 proto_tree_add_item(aem_tree, hf_aem_clock_sources_count, tvb,
3769 CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_COUNT, 2, ENC_BIG_ENDIAN);
3771 /* set up a clock sources subtree */
3772 mr_counter = tvb_get_ntohs(tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_COUNT);
3773 mr_offset = tvb_get_ntohs(tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_OFFSET);
3774 mr_item = proto_tree_add_item(aem_tree, hf_aem_clock_sources_array, tvb,
3775 mr_offset, mr_counter * 2, ENC_NA);
3776 mr_subtree = proto_item_add_subtree(mr_item, ett_aem_clock_sources);
3777 /* add clocks to new subtree */
3778 for(i = 0; i < mr_counter; ++i)
3780 proto_tree_add_item(mr_subtree, hf_aem_clock_sources, tvb,
3781 mr_offset, 2, ENC_BIG_ENDIAN);
3782 mr_offset += 2;
3784 break;
3786 default:
3787 proto_tree_add_item(aem_tree, hf_aem_unknown_descriptor, tvb,
3788 4, tvb_captured_length(tvb) - 4, ENC_NA);
3789 break;
3793 /* dissect enumeration and control packets */
3794 static void
3795 dissect_17221_aecp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *aecp_tree)
3797 uint16_t c_type;
3798 /*uint16_t addr_type;*/
3799 /*uint16_t ctrl_data_len;*/
3800 uint16_t mess_status;
3801 uint16_t mess_type;
3802 uint16_t mr_counter;
3803 uint32_t mr_offset;
3804 proto_item *mr_subtree;
3805 proto_item *mr_item;
3806 int i;
3807 uint64_t vendor_unique_protocol_id;
3808 char *vendor_unique_protocol_id_string;
3809 /* next tvb for use in subdissection */
3810 tvbuff_t *next_tvb;
3811 proto_tree *flags_tree;
3812 proto_item *flags_ti;
3815 /* AECP Common Format Fields */
3816 proto_tree_add_item(aecp_tree, hf_aecp_message_type, tvb,
3817 AECP_OFFSET_VERSION, 1, ENC_BIG_ENDIAN);
3818 proto_tree_add_item(aecp_tree, hf_aecp_status_code, tvb,
3819 AECP_OFFSET_STATUS_CODE, 1, ENC_BIG_ENDIAN);
3820 proto_tree_add_item(aecp_tree, hf_aecp_cd_length, tvb,
3821 AECP_OFFSET_CD_LENGTH, 2, ENC_BIG_ENDIAN);
3822 proto_tree_add_item(aecp_tree, hf_aecp_target_guid, tvb,
3823 AECP_OFFSET_TARGET_GUID, 8, ENC_BIG_ENDIAN);
3824 proto_tree_add_item(aecp_tree, hf_aecp_controller_guid, tvb,
3825 AECP_OFFSET_CONTROLLER_GUID, 8, ENC_BIG_ENDIAN);
3826 proto_tree_add_item(aecp_tree, hf_aecp_sequence_id, tvb,
3827 AECP_OFFSET_SEQUENCE_ID, 2, ENC_BIG_ENDIAN);
3829 /* get the message type */
3830 mess_type = tvb_get_ntohs(tvb, 0) & AECP_MSG_TYPE_MASK;
3832 if ((mess_type == AECP_AEM_COMMAND_MESSAGE) || (mess_type == AECP_AEM_RESPONSE_MESSAGE))
3834 proto_tree_add_item(aecp_tree, hf_aecp_u_flag, tvb,
3835 AECP_OFFSET_U_FLAG, 1, ENC_BIG_ENDIAN);
3836 proto_tree_add_item(aecp_tree, hf_aecp_command_type, tvb,
3837 AECP_OFFSET_COMMAND_TYPE, 2, ENC_BIG_ENDIAN);
3839 /* get the command type for detailed dissection */
3840 c_type = tvb_get_ntohs(tvb, AECP_OFFSET_COMMAND_TYPE) & AECP_COMMAND_TYPE_MASK;
3842 /* get the control data length field - number of octets following target_guid */
3843 /*ctrl_data_len = tvb_get_ntohs(tvb, AECP_OFFSET_CD_LENGTH) & AECP_CD_LENGTH_MASK;*/
3846 /* get the status */
3847 mess_status = tvb_get_ntohs(tvb, 2) & 0xF800;
3849 /* break dissection down by command type */
3850 /* fields are added in the order they are listed by 1722.1 */
3851 switch(c_type) {
3852 case AECP_COMMAND_ACQUIRE_ENTITY:
3853 /* set up the flags subtree */
3854 flags_ti = proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb,
3855 AECP_OFFSET_ACQUIRE_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN);
3856 flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags);
3857 proto_tree_add_item(flags_tree, hf_aecp_persistent_flag, tvb,
3858 AECP_OFFSET_ACQUIRE_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN);
3859 proto_tree_add_item(aecp_tree, hf_aecp_release_flag, tvb,
3860 AECP_OFFSET_ACQUIRE_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN);
3861 /* end flags subtree */
3863 proto_tree_add_item(aecp_tree, hf_aecp_owner_guid, tvb,
3864 AECP_OFFSET_ACQUIRE_ENTITY_OWNER_GUID, 8, ENC_BIG_ENDIAN);
3865 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
3866 AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3867 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
3868 AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3869 break;
3870 case AECP_COMMAND_LOCK_ENTITY:
3871 proto_tree_add_item(aecp_tree, hf_aecp_unlock_flag, tvb,
3872 AECP_OFFSET_LOCK_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN);
3873 proto_tree_add_item(aecp_tree, hf_aecp_locked_guid, tvb,
3874 AECP_OFFSET_LOCK_ENTITY_LOCKED_GUID, 8, ENC_BIG_ENDIAN);
3875 break;
3876 case AECP_COMMAND_READ_DESCRIPTOR:
3877 proto_tree_add_item(aecp_tree, hf_aecp_configuration, tvb,
3878 AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN);
3880 if ((mess_type == AECP_AEM_COMMAND_MESSAGE)||(mess_status != 0))
3882 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
3883 AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3884 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
3885 AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3887 else
3889 next_tvb = tvb_new_subset_remaining(tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR);
3890 dissect_17221_aem(next_tvb, pinfo, aecp_tree);
3892 break;
3893 case AECP_COMMAND_WRITE_DESCRIPTOR:
3894 proto_tree_add_item(aecp_tree, hf_aecp_configuration, tvb,
3895 AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN);
3897 /* on command descriptor is value to write
3898 * on response descriptor is command value if successful
3899 * or old value if unsuccessful */
3900 next_tvb = tvb_new_subset_remaining(tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR);
3901 dissect_17221_aem(next_tvb, pinfo, aecp_tree);
3902 break;
3903 case AECP_COMMAND_SET_CONFIGURATION:
3904 case AECP_COMMAND_GET_CONFIGURATION:
3905 proto_tree_add_item(aecp_tree, hf_aecp_configuration,
3906 tvb, AECP_OFFSET_CONFIGURATION_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN);
3907 break;
3908 case AECP_COMMAND_SET_STREAM_FORMAT:
3909 case AECP_COMMAND_GET_STREAM_FORMAT:
3910 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
3911 AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3912 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
3913 AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3915 if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_STREAM_FORMAT))
3917 next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_STREAM_FORMAT_STREAM_FORMAT, 8);
3918 dissect_17221_stream_format(next_tvb, aecp_tree);
3920 break;
3921 case AECP_COMMAND_SET_VIDEO_FORMAT:
3922 case AECP_COMMAND_GET_VIDEO_FORMAT:
3923 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
3924 AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3925 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
3926 AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3928 if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_VIDEO_FORMAT))
3930 next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_VIDEO_FORMAT_FORMAT_SPECIFIC, 4);
3931 dissect_17221_video_format(next_tvb, aecp_tree);
3933 next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_VIDEO_FORMAT_ASPECT_RATIO, 2);
3934 dissect_17221_video_aspect_ratio(next_tvb, aecp_tree);
3936 proto_tree_add_item(aecp_tree, hf_aem_color_space, tvb,
3937 AECP_OFFSET_VIDEO_FORMAT_COLOR_SPACE, 2, ENC_BIG_ENDIAN);
3939 next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_VIDEO_FORMAT_FRAME_SIZE, 4);
3940 dissect_17221_video_frame_size(next_tvb, aecp_tree);
3942 break;
3943 case AECP_COMMAND_SET_SENSOR_FORMAT:
3944 case AECP_COMMAND_GET_SENSOR_FORMAT:
3945 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
3946 AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3947 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
3948 AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3950 if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_SENSOR_FORMAT))
3952 next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_SENSOR_FORMAT_SENSOR_FORMAT, 8);
3953 dissect_17221_sensor_format(next_tvb, aecp_tree);
3955 break;
3956 case AECP_COMMAND_SET_STREAM_INFO:
3957 case AECP_COMMAND_GET_STREAM_INFO:
3958 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
3959 AECP_OFFSET_STREAM_INFO_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
3960 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
3961 AECP_OFFSET_STREAM_INFO_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
3962 if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_STREAM_INFO)) {
3963 proto_tree_add_item(aecp_tree, hf_acmp_flags_class_b, tvb,
3964 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3965 proto_tree_add_item(aecp_tree, hf_acmp_flags_fast_connect, tvb,
3966 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3967 proto_tree_add_item(aecp_tree, hf_acmp_flags_saved_state, tvb,
3968 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3969 proto_tree_add_item(aecp_tree, hf_acmp_flags_streaming_wait, tvb,
3970 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3971 proto_tree_add_item(aecp_tree, hf_acmp_flags_supports_encrypted, tvb,
3972 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3973 proto_tree_add_item(aecp_tree, hf_acmp_flags_encrypted_pdu, tvb,
3974 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3975 proto_tree_add_item(aecp_tree, hf_acmp_flags_talker_failed, tvb,
3976 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3978 proto_tree_add_item(aecp_tree, hf_aecp_stream_vlan_id_valid_flag, tvb,
3979 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3980 proto_tree_add_item(aecp_tree, hf_aecp_connected_flag, tvb,
3981 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3982 proto_tree_add_item(aecp_tree, hf_aecp_msrp_failure_valid_flag, tvb,
3983 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3984 proto_tree_add_item(aecp_tree, hf_aecp_dest_mac_valid_flag, tvb,
3985 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3986 proto_tree_add_item(aecp_tree, hf_aecp_msrp_acc_lat_valid_flag, tvb,
3987 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3988 proto_tree_add_item(aecp_tree, hf_aecp_stream_id_valid_flag, tvb,
3989 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3990 proto_tree_add_item(aecp_tree, hf_aecp_stream_format_valid_flag, tvb,
3991 AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN);
3993 proto_tree_add_item(aecp_tree, hf_aecp_stream_format, tvb,
3994 AECP_OFFSET_STREAM_INFO_STREAM_FORMAT, 8, ENC_BIG_ENDIAN);
3995 proto_tree_add_item(aecp_tree, hf_acmp_stream_id, tvb,
3996 AECP_OFFSET_STREAM_INFO_STREAM_ID, 8, ENC_BIG_ENDIAN);
3998 proto_tree_add_item(aecp_tree, hf_aecp_msrp_accumulated_latency, tvb,
3999 AECP_OFFSET_STREAM_INFO_MSRP_ACCUMULATED_LATENCY, 4, ENC_BIG_ENDIAN);
4000 proto_tree_add_item(aecp_tree, hf_acmp_stream_dest_mac, tvb,
4001 AECP_OFFSET_STREAM_INFO_STREAM_DEST_MAC, 6, ENC_NA);
4002 proto_tree_add_item(aecp_tree, hf_aecp_msrp_failure_code, tvb,
4003 AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_CODE, 1, ENC_BIG_ENDIAN);
4004 proto_tree_add_item(aecp_tree, hf_aecp_msrp_failure_bridge_id, tvb,
4005 AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_BRIDGE_ID, 8, ENC_NA);
4007 break;
4008 case AECP_COMMAND_SET_NAME:
4009 case AECP_COMMAND_GET_NAME:
4010 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4011 AECP_OFFSET_NAME_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4012 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4013 AECP_OFFSET_NAME_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4014 proto_tree_add_item(aecp_tree, hf_aecp_name_index, tvb,
4015 AECP_OFFSET_NAME_NAME_INDEX, 2, ENC_BIG_ENDIAN);
4016 proto_tree_add_item(aecp_tree, hf_aecp_configuration_index, tvb,
4017 AECP_OFFSET_NAME_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN);
4019 if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_NAME)) {
4020 proto_tree_add_item(aecp_tree, hf_aecp_name, tvb,
4021 AECP_OFFSET_NAME_NAME, 64, ENC_ASCII);
4023 break;
4024 case AECP_COMMAND_SET_ASSOCIATION_ID:
4025 case AECP_COMMAND_GET_ASSOCIATION_ID:
4026 proto_tree_add_item(aecp_tree, hf_aecp_association_id, tvb,
4027 AECP_OFFSET_ASSOCIATION_ID_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN);
4028 break;
4029 case AECP_COMMAND_SET_SAMPLING_RATE:
4030 case AECP_COMMAND_GET_SAMPLING_RATE:
4031 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4032 AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4033 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4034 AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4035 if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_SAMPLING_RATE)) {
4036 proto_tree_add_item(aecp_tree,hf_aecp_sampling_rate_pull , tvb,
4037 AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE, 1, ENC_BIG_ENDIAN);
4038 proto_tree_add_item(aecp_tree, hf_aecp_sampling_rate_base_frequency, tvb,
4039 AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE, 4, ENC_BIG_ENDIAN);
4041 break;
4042 case AECP_COMMAND_SET_CLOCK_SOURCE:
4043 case AECP_COMMAND_GET_CLOCK_SOURCE:
4044 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4045 AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4046 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4047 AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4048 if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_CLOCK_SOURCE)) {
4049 proto_tree_add_item(aecp_tree, hf_aem_clock_source_id, tvb,
4050 AECP_OFFSET_CLOCK_SOURCE_CLOCK_SOURCE_INDEX, 2, ENC_BIG_ENDIAN);
4052 break;
4053 case AECP_COMMAND_SET_CONTROL_VALUE:
4054 case AECP_COMMAND_GET_CONTROL_VALUE:
4055 case AECP_COMMAND_SET_MIXER:
4056 case AECP_COMMAND_GET_MIXER:
4057 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4058 AECP_OFFSET_CONTROL_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4059 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4060 AECP_OFFSET_CONTROL_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4061 /* TODO: dissect control/mixer values */
4062 break;
4063 case AECP_COMMAND_INCREMENT_CONTROL:
4064 case AECP_COMMAND_DECREMENT_CONTROL:
4065 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4066 AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4067 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4068 AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4069 /* TODO: dissect control index list (message) or values (response) */
4070 break;
4071 case AECP_COMMAND_SET_SIGNAL_SELECTOR:
4072 case AECP_COMMAND_GET_SIGNAL_SELECTOR:
4073 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4074 AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4075 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4076 AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4077 if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_SIGNAL_SELECTOR)) {
4078 proto_tree_add_item(aecp_tree, hf_aecp_signal_type, tvb,
4079 AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN);
4080 proto_tree_add_item(aecp_tree, hf_aecp_signal_index, tvb,
4081 AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN);
4082 proto_tree_add_item(aecp_tree, hf_aecp_signal_output, tvb,
4083 AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN);
4085 break;
4086 case AECP_COMMAND_GET_MATRIX:
4087 case AECP_COMMAND_SET_MATRIX:
4088 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4089 AECP_OFFSET_MATRIX_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4090 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4091 AECP_OFFSET_MATRIX_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4092 proto_tree_add_item(aecp_tree, hf_aecp_matrix_column, tvb,
4093 AECP_OFFSET_MATRIX_MATRIX_COLUMN, 2, ENC_BIG_ENDIAN);
4094 proto_tree_add_item(aecp_tree, hf_aecp_matrix_row, tvb,
4095 AECP_OFFSET_MATRIX_MATRIX_ROW, 2, ENC_BIG_ENDIAN);
4096 proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_width, tvb,
4097 AECP_OFFSET_MATRIX_REGION_WIDTH, 2, ENC_BIG_ENDIAN);
4098 proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_height, tvb, AECP_OFFSET_MATRIX_REGION_HEIGHT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_rep, tvb,
4099 AECP_OFFSET_MATRIX_REP, 1, ENC_BIG_ENDIAN);
4100 proto_tree_add_item(aecp_tree, hf_aecp_matrix_direction, tvb,
4101 AECP_OFFSET_MATRIX_DIRECTION, 1, ENC_BIG_ENDIAN);
4102 proto_tree_add_item(aecp_tree, hf_aecp_matrix_value_count, tvb,
4103 AECP_OFFSET_MATRIX_VALUE_COUNT, 2, ENC_BIG_ENDIAN);
4104 proto_tree_add_item(aecp_tree, hf_aecp_matrix_item_offset, tvb,
4105 AECP_OFFSET_MATRIX_ITEM_OFFSET, 2, ENC_BIG_ENDIAN);
4107 if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_GET_MATRIX)) {
4108 /* TODO: dissect matrix values */
4110 break;
4111 case AECP_COMMAND_START_STREAMING:
4112 case AECP_COMMAND_STOP_STREAMING:
4113 case AECP_COMMAND_REBOOT:
4114 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4115 AECP_OFFSET_STREAMING_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4116 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4117 AECP_OFFSET_STREAMING_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4118 break;
4119 case AECP_COMMAND_REGISTER_UNSOL_NOTIFICATION:
4120 case AECP_COMMAND_DEREGISTER_UNSOL_NOTIFICATION:
4121 /* No additional fields in these command types */
4122 break;
4123 case AECP_COMMAND_IDENTIFY_NOTIFICATION:
4124 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4125 AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4126 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4127 AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4128 break;
4129 case AECP_COMMAND_GET_AVB_INFO:
4130 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4131 AECP_OFFSET_AVB_INFO_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4132 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4133 AECP_OFFSET_AVB_INFO_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4134 if (mess_type == AECP_AEM_RESPONSE_MESSAGE) {
4135 proto_tree_add_item(aecp_tree, hf_aecp_avb_info_ptp_grandmaster_id, tvb,
4136 AECP_OFFSET_AVB_INFO_AS_GRANDMASTER_ID, 8, ENC_BIG_ENDIAN);
4137 proto_tree_add_item(aecp_tree, hf_aecp_avb_info_propegation_delay, tvb,
4138 AECP_OFFSET_AVB_INFO_PROPAGATION_DELAY, 4, ENC_BIG_ENDIAN);
4139 proto_tree_add_item(aecp_tree, hf_aecp_avb_info_gptp_domain_number, tvb,
4140 AECP_OFFSET_AVB_INFO_AS_DOMAIN_NUMBER, 1, ENC_BIG_ENDIAN);
4141 proto_tree_add_item(aecp_tree, hf_aecp_as_capable_flag, tvb,
4142 AECP_OFFSET_AVB_INFO_FLAGS, 1, ENC_BIG_ENDIAN);
4143 proto_tree_add_item(aecp_tree, hf_aecp_gptp_enabled_flag, tvb,
4144 AECP_OFFSET_AVB_INFO_FLAGS, 1, ENC_BIG_ENDIAN);
4145 proto_tree_add_item(aecp_tree, hf_aecp_srp_enabled_flag, tvb,
4146 AECP_OFFSET_AVB_INFO_FLAGS, 1, ENC_BIG_ENDIAN);
4147 proto_tree_add_item(aecp_tree, hf_aecp_avb_info_msrp_mappings_count, tvb,
4148 AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS_COUNT, 2, ENC_BIG_ENDIAN);
4150 /* prepare msrp mappings subtree */
4151 mr_item = proto_tree_add_item(aecp_tree, hf_aecp_avb_info_msrp_mappings, tvb,
4152 0, 0, ENC_NA);
4153 mr_subtree = proto_item_add_subtree(mr_item, ett_aecp_get_avb_info_msrp_mappings);
4154 mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS_COUNT);
4156 mr_offset = AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS;
4157 for (i = 0; i < mr_counter; i++) {
4158 proto_tree_add_item(mr_subtree, hf_aecp_avb_info_msrp_mapping_traffic_class, tvb,
4159 mr_offset, 1, ENC_BIG_ENDIAN);
4160 mr_offset += 1;
4161 proto_tree_add_item(mr_subtree, hf_aecp_avb_info_msrp_mapping_priority, tvb,
4162 mr_offset, 1, ENC_BIG_ENDIAN);
4163 mr_offset += 1;
4164 proto_tree_add_item(mr_subtree, hf_aecp_get_avb_info_msrp_vlan_id, tvb,
4165 mr_offset, 2, ENC_BIG_ENDIAN);
4166 mr_offset += 2;
4169 break;
4170 case AECP_COMMAND_GET_AS_PATH:
4171 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4172 AECP_OFFSET_AS_PATH_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4173 if (mess_type == AECP_AEM_RESPONSE_MESSAGE) {
4174 proto_tree_add_item(aecp_tree, hf_aecp_as_path_count, tvb,
4175 AECP_OFFSET_AS_PATH_COUNT, 2, ENC_BIG_ENDIAN);
4176 mr_item = proto_tree_add_item(aecp_tree, hf_aecp_as_path_sequences, tvb,
4177 0, 0, ENC_NA);
4178 mr_subtree = proto_item_add_subtree(mr_item, ett_aecp_get_as_path_sequences);
4179 mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AS_PATH_COUNT);
4180 mr_offset = AECP_OFFSET_AS_PATH_PATH_SEQUENCE;
4181 for (i = 0; i < mr_counter; i++) {
4182 proto_tree_add_item(mr_subtree, hf_aecp_get_as_info_clock_id, tvb,
4183 mr_offset, 8, ENC_BIG_ENDIAN);
4184 mr_offset += 8;
4187 break;
4188 case AECP_COMMAND_GET_COUNTERS:
4189 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4190 AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4191 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4192 AECP_OFFSET_COUNTERS_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4193 if (mess_type == AECP_AEM_RESPONSE_MESSAGE) {
4195 /*flags_ti = */ proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb,
4196 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4197 /*flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags);*/
4199 /* begin counters_valid flags field */
4200 switch (tvb_get_ntohs(tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE)) {
4201 case AEM_DESCRIPTOR_ENTITY:
4202 break;
4203 case AEM_DESCRIPTOR_AVB_INTERFACE:
4204 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_up_valid, tvb,
4205 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4206 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_down_valid, tvb,
4207 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4208 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_tx_valid, tvb,
4209 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4210 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_rx_valid, tvb,
4211 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4212 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_rx_crc_error_valid, tvb,
4213 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4214 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_gptp_gm_changed_valid, tvb,
4215 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4216 break;
4217 case AEM_DESCRIPTOR_CLOCK_DOMAIN:
4218 proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_locked_valid, tvb,
4219 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4220 proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_unlocked_valid, tvb,
4221 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4222 break;
4223 case AEM_DESCRIPTOR_STREAM_INPUT:
4224 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_locked_valid, tvb,
4225 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4226 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_unlocked_valid, tvb,
4227 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4228 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_stream_reset_valid, tvb,
4229 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4230 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_seq_num_mismatch_valid, tvb,
4231 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4232 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_reset_valid, tvb,
4233 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4234 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_uncertain_valid, tvb,
4235 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4236 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_valid_valid, tvb,
4237 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4238 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_not_valid_valid, tvb,
4239 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4240 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_unsupported_format_valid, tvb,
4241 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4242 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_late_timestamp_valid, tvb,
4243 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4244 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_early_timestamp_valid, tvb,
4245 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4246 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_tx_valid, tvb,
4247 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4248 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_rx_valid, tvb,
4249 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4250 break;
4251 default:
4252 break;
4255 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific1_valid, tvb,
4256 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4257 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific2_valid, tvb,
4258 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4259 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific3_valid, tvb,
4260 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4261 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific4_valid, tvb,
4262 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4263 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific5_valid, tvb,
4264 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4265 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific6_valid, tvb,
4266 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4267 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific7_valid, tvb,
4268 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4269 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific8_valid, tvb,
4270 AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN);
4273 /* end counters_valid flags field */
4276 switch (tvb_get_ntohs(tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE)) {
4277 case AEM_DESCRIPTOR_ENTITY:
4278 break;
4279 case AEM_DESCRIPTOR_AVB_INTERFACE:
4280 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_up, tvb,
4281 AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_UP, 4, ENC_BIG_ENDIAN);
4282 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_down, tvb,
4283 AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_DOWN, 4, ENC_BIG_ENDIAN);
4284 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_tx, tvb,
4285 AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_TX, 4, ENC_BIG_ENDIAN);
4286 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_rx, tvb,
4287 AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_RX, 4, ENC_BIG_ENDIAN);
4288 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_rx_crc_error, tvb,
4289 AECP_OFFSET_COUNTERS_AVB_INTERFACE_RX_CRC_ERROR, 4, ENC_BIG_ENDIAN);
4290 proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_gptp_gm_changed, tvb,
4291 AECP_OFFSET_COUNTERS_AVB_INTERFACE_GPTP_GM_CHANGED, 4, ENC_BIG_ENDIAN);
4292 break;
4293 case AEM_DESCRIPTOR_CLOCK_DOMAIN:
4294 proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_locked, tvb,
4295 AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_LOCKED, 4, ENC_BIG_ENDIAN);
4296 proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_unlocked, tvb,
4297 AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_UNLOCKED, 4, ENC_BIG_ENDIAN);
4298 break;
4299 case AEM_DESCRIPTOR_STREAM_INPUT:
4300 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_locked, tvb,
4301 AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_LOCKED, 4, ENC_BIG_ENDIAN);
4302 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_unlocked, tvb,
4303 AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_UNLOCKED, 4, ENC_BIG_ENDIAN);
4304 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_stream_reset, tvb,
4305 AECP_OFFSET_COUNTERS_STREAM_INPUT_STREAM_RESET, 4, ENC_BIG_ENDIAN);
4306 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_seq_num_mismatch, tvb,
4307 AECP_OFFSET_COUNTERS_STREAM_INPUT_SEQ_NUM_MISMATCH, 4, ENC_BIG_ENDIAN);
4308 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_reset, tvb,
4309 AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_RESET, 4, ENC_BIG_ENDIAN);
4310 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_uncertain, tvb,
4311 AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_UNCERTAIN, 4, ENC_BIG_ENDIAN);
4312 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_valid, tvb,
4313 AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_VALID, 4, ENC_BIG_ENDIAN);
4314 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_not_valid, tvb,
4315 AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_NOT_VALID, 4, ENC_BIG_ENDIAN);
4316 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_unsupported_format, tvb,
4317 AECP_OFFSET_COUNTERS_STREAM_INPUT_UNSUPPORTED_FORMAT, 4, ENC_BIG_ENDIAN);
4318 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_late_timestamp, tvb,
4319 AECP_OFFSET_COUNTERS_STREAM_INPUT_LATE_TIMESTAMP, 4, ENC_BIG_ENDIAN);
4320 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_early_timestamp, tvb,
4321 AECP_OFFSET_COUNTERS_STREAM_INPUT_EARLY_TIMESTAMP, 4, ENC_BIG_ENDIAN);
4322 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_tx, tvb,
4323 AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_TX, 4, ENC_BIG_ENDIAN);
4324 proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_rx, tvb,
4325 AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_RX, 4, ENC_BIG_ENDIAN);
4326 break;
4327 default:
4328 break;
4331 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific1, tvb,
4332 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_1, 4, ENC_BIG_ENDIAN);
4333 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific2, tvb,
4334 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_2, 4, ENC_BIG_ENDIAN);
4335 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific3, tvb,
4336 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_3, 4, ENC_BIG_ENDIAN);
4337 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific4, tvb,
4338 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_4, 4, ENC_BIG_ENDIAN);
4339 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific5, tvb,
4340 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_5, 4, ENC_BIG_ENDIAN);
4341 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific6, tvb,
4342 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_6, 4, ENC_BIG_ENDIAN);
4343 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific7, tvb,
4344 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_7, 4, ENC_BIG_ENDIAN);
4345 proto_tree_add_item(aecp_tree, hf_aecp_entity_specific8, tvb,
4346 AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_8, 4, ENC_BIG_ENDIAN);
4349 break;
4350 case AECP_COMMAND_GET_AUDIO_MAP:
4351 case AECP_COMMAND_GET_VIDEO_MAP:
4352 case AECP_COMMAND_GET_SENSOR_MAP:
4353 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4354 AECP_OFFSET_MAP_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4355 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4356 AECP_OFFSET_MAP_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4357 proto_tree_add_item(aecp_tree, hf_aecp_map_index, tvb,
4358 AECP_OFFSET_MAP_MAP_INDEX, 2, ENC_BIG_ENDIAN);
4359 if (mess_type == AECP_AEM_RESPONSE_MESSAGE) {
4360 proto_tree_add_item(aecp_tree, hf_aecp_number_of_maps, tvb,
4361 AECP_OFFSET_MAP_NUMBER_OF_MAPS, 2, ENC_BIG_ENDIAN);
4362 proto_tree_add_item(aecp_tree, hf_aecp_number_of_maps, tvb,
4363 AECP_OFFSET_MAP_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN);
4364 /* TODO: dissect mappings */
4366 break;
4367 case AECP_COMMAND_ADD_AUDIO_MAPPINGS:
4368 case AECP_COMMAND_REMOVE_AUDIO_MAPPINGS:
4369 case AECP_COMMAND_ADD_VIDEO_MAPPINGS:
4370 case AECP_COMMAND_REMOVE_VIDEO_MAPPINGS:
4371 case AECP_COMMAND_ADD_SENSOR_MAPPINGS:
4372 case AECP_COMMAND_REMOVE_SENSOR_MAPPINGS:
4373 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4374 AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4375 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4376 AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4377 proto_tree_add_item(aecp_tree, hf_aecp_number_of_maps, tvb,
4378 AECP_OFFSET_ADDREM_MAP_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN);
4379 /* TODO: dissect mappings */
4380 break;
4381 case AECP_COMMAND_START_OPERATION:
4382 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4383 AECP_OFFSET_START_OPERATION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4384 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4385 AECP_OFFSET_START_OPERATION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4386 proto_tree_add_item(aecp_tree, hf_aecp_operation_id, tvb,
4387 AECP_OFFSET_START_OPERATION_OPERATION_ID, 2, ENC_BIG_ENDIAN);
4388 proto_tree_add_item(aecp_tree, hf_aecp_operation_type, tvb,
4389 AECP_OFFSET_START_OPERATION_OPERATION_TYPE, 2, ENC_BIG_ENDIAN);
4390 /* TODO: add values support when operation types are defined */
4391 break;
4392 case AECP_COMMAND_ABORT_OPERATION:
4393 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4394 AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4395 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4396 AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4397 proto_tree_add_item(aecp_tree, hf_aecp_operation_id, tvb,
4398 AECP_OFFSET_ABORT_OPERATION_OPERATION_ID, 2, ENC_BIG_ENDIAN);
4399 break;
4400 case AECP_COMMAND_OPERATION_STATUS:
4401 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4402 AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4403 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4404 AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4405 proto_tree_add_item(aecp_tree, hf_aecp_operation_id, tvb,
4406 AECP_OFFSET_OPERATION_STATUS_OPERATION_ID, 2, ENC_BIG_ENDIAN);
4407 proto_tree_add_item(aecp_tree, hf_aecp_percent_complete, tvb,
4408 AECP_OFFSET_OPERATION_STATUS_PERCENT_COMPLETE, 2, ENC_BIG_ENDIAN);
4409 break;
4410 case AECP_COMMAND_AUTH_ADD_KEY:
4411 case AECP_COMMAND_AUTH_DELETE_KEY:
4412 case AECP_COMMAND_AUTH_GET_KEY:
4413 proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb,
4414 AECP_OFFSET_AUTH_KEY_KEY_EUI, 8, ENC_BIG_ENDIAN);
4415 proto_tree_add_item(aecp_tree, hf_aecp_key_type, tvb,
4416 AECP_OFFSET_AUTH_KEY_KEY_TYPE, 1, ENC_BIG_ENDIAN);
4417 proto_tree_add_item(aecp_tree, hf_aecp_key_length, tvb,
4418 AECP_OFFSET_AUTH_KEY_KEY_LENGTH, 2, ENC_BIG_ENDIAN);
4420 if (((mess_type == AECP_AEM_RESPONSE_MESSAGE) && (c_type == AECP_COMMAND_AUTH_GET_KEY)) ||
4421 ((mess_type == AECP_AEM_COMMAND_MESSAGE) && (c_type == AECP_COMMAND_AUTH_ADD_KEY))) {
4423 mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AUTH_KEY_KEY_LENGTH) & AECP_KEY_LENGTH_MASK;
4424 proto_tree_add_item(aecp_tree, hf_aecp_key, tvb,
4425 AECP_OFFSET_AUTH_KEY_KEY, mr_counter, ENC_NA);
4427 break;
4428 case AECP_COMMAND_AUTH_GET_KEY_LIST:
4429 proto_tree_add_item(aecp_tree, hf_aecp_keychain_id_small, tvb,
4430 AECP_OFFSET_AUTH_GET_KEY_LIST_KEYCHAIN_ID, 1, ENC_BIG_ENDIAN);
4431 if (mess_type == AECP_AEM_RESPONSE_MESSAGE) {
4432 proto_tree_add_item(aecp_tree, hf_aecp_keychain_id_small, tvb,
4433 AECP_OFFSET_AUTH_GET_KEY_LIST_NUMBER_OF_KEYS, 1, ENC_BIG_ENDIAN);
4435 break;
4436 case AECP_COMMAND_AUTH_ADD_KEY_TO_CHAIN:
4437 case AECP_COMMAND_AUTH_DELETE_KEY_FROM_CHAIN:
4438 proto_tree_add_item(aecp_tree, hf_aecp_keychain_id, tvb,
4439 AECP_OFFSET_AUTH_KEYCHAIN_KEYCHAIN_ID, 2, ENC_BIG_ENDIAN);
4440 proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb,
4441 AECP_OFFSET_AUTH_KEYCHAIN_KEY_EUI, 8, ENC_BIG_ENDIAN);
4442 break;
4443 case AECP_COMMAND_AUTH_GET_KEYCHAIN_LIST:
4444 proto_tree_add_item(aecp_tree, hf_aecp_keychain_id, tvb,
4445 AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_KEYCHAIN_ID, 2, ENC_BIG_ENDIAN);
4446 proto_tree_add_item(aecp_tree, hf_aecp_keychain_list_index, tvb,
4447 AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_LIST_INDEX, 2, ENC_BIG_ENDIAN);
4448 if (mess_type == AECP_AEM_RESPONSE_MESSAGE) {
4449 proto_tree_add_item(aecp_tree, hf_aecp_keychain_number_of_lists, tvb,
4450 AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_LISTS, 2, ENC_BIG_ENDIAN);
4451 proto_tree_add_item(aecp_tree, hf_aecp_keychain_number_of_keys, tvb,
4452 AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_KEYS, 2, ENC_BIG_ENDIAN);
4453 /* TODO: dissect key euis */
4455 break;
4456 case AECP_COMMAND_AUTH_GET_IDENTITY:
4457 proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb,
4458 AECP_OFFSET_AUTH_GET_IDENTITY_KEY_GUID, 8, ENC_BIG_ENDIAN);
4459 proto_tree_add_item(aecp_tree, hf_aecp_key_signature, tvb,
4460 AECP_OFFSET_AUTH_GET_IDENTITY_SIGNATURE, 28, ENC_NA);
4461 break;
4462 case AECP_COMMAND_AUTH_ADD_TOKEN:
4463 if (mess_type == AECP_AEM_COMMAND_MESSAGE) {
4464 uint32_t token_length = tvb_get_ntohl(tvb, AECP_OFFSET_AUTH_TOKEN_TOKEN_LENGTH);
4465 proto_tree_add_item(aecp_tree, hf_aecp_key_length, tvb,
4466 AECP_OFFSET_AUTH_TOKEN_TOKEN_LENGTH, 2, ENC_BIG_ENDIAN);
4467 proto_tree_add_item(aecp_tree, hf_aecp_key_signature, tvb,
4468 AECP_OFFSET_AUTH_TOKEN_AUTHENTICATION_TOKEN, token_length, ENC_NA);
4470 break;
4471 case AECP_COMMAND_AUTH_DELETE_TOKEN:
4472 /* No command specific fields */
4473 break;
4474 case AECP_COMMAND_AUTHENTICATE:
4475 case AECP_COMMAND_DEAUTHENTICATE:
4476 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4477 AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4478 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4479 AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4480 proto_tree_add_item(aecp_tree, hf_aecp_token_length, tvb,
4481 AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH, 2, ENC_BIG_ENDIAN);
4483 mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH)
4484 & AECP_TOKEN_LENGTH_MASK;
4485 proto_tree_add_item(aecp_tree, hf_aecp_auth_token, tvb,
4486 AECP_OFFSET_AUTHENTICATE_AUTH_TOKEN, mr_counter, ENC_NA);
4487 break;
4488 case AECP_COMMAND_ENABLE_TRANSPORT_SECURITY:
4489 proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb,
4490 AECP_OFFSET_TRANSPORT_SECURITY_KEY_EUI, 8, ENC_BIG_ENDIAN);
4491 break;
4492 case AECP_COMMAND_DISABLE_TRANSPORT_SECURITY:
4493 /* No command specific fields */
4494 break;
4495 case AECP_COMMAND_ENABLE_STREAM_ENCRYPTION:
4496 case AECP_COMMAND_DISABLE_STREAM_ENCRYPTION:
4497 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4498 AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4499 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4500 AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4501 if (c_type == AECP_COMMAND_ENABLE_STREAM_ENCRYPTION) {
4502 proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb,
4503 AECP_OFFSET_STREAM_ENCRYPTION_KEY_EUI, 8, ENC_BIG_ENDIAN);
4505 break;
4507 case AECP_COMMAND_SET_STREAM_BACKUP:
4508 case AECP_COMMAND_GET_STREAM_BACKUP:
4509 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb,
4510 AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN);
4511 proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb,
4512 AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN);
4513 proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_entity_id_0, tvb,
4514 AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_0, 8, ENC_BIG_ENDIAN);
4515 proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_unique_id_0, tvb,
4516 AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_0, 2, ENC_BIG_ENDIAN);
4517 proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_entity_id_1, tvb,
4518 AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_1, 8, ENC_BIG_ENDIAN);
4519 proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_unique_id_1, tvb,
4520 AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_1, 2, ENC_BIG_ENDIAN);
4521 proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_entity_id_2, tvb,
4522 AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_2, 8, ENC_BIG_ENDIAN);
4523 proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_unique_id_2, tvb,
4524 AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_2, 2, ENC_BIG_ENDIAN);
4525 proto_tree_add_item(aecp_tree, hf_aecp_backedup_talker_entity_id, tvb,
4526 AECP_OFFSET_STREAM_BACKEDUP_TALKER_ENTITY_ID, 8, ENC_BIG_ENDIAN);
4527 proto_tree_add_item(aecp_tree, hf_aecp_backedup_talker_unique_id, tvb,
4528 AECP_OFFSET_STREAM_BACKEDUP_TALKER_UNIQUE_ID, 2, ENC_BIG_ENDIAN);
4529 break;
4530 /* * * * AEM COMMON FORMAT PACKETS * * * */
4531 case AECP_COMMAND_CONTROLLER_AVAILABLE:
4532 break;
4533 default:
4534 /* the command type is not one of the valid spec values */
4535 break;
4537 } /* AECP AEM Command */
4538 else if ((mess_type == AECP_ADDRESS_ACCESS_COMMAND_MESSAGE) || (mess_type == AECP_ADDRESS_ACCESS_RESPONSE_MESSAGE))
4540 proto_tree_add_item(aecp_tree, hf_aecp_aa_count, tvb,
4541 AECP_AA_OFFSET_COUNT, 2, ENC_BIG_ENDIAN);
4542 proto_tree_add_item(aecp_tree, hf_aecp_aa_tlv_mode, tvb,
4543 AECP_AA_OFFSET_TLVS_START, 1, ENC_BIG_ENDIAN);
4544 proto_tree_add_item(aecp_tree, hf_aecp_aa_tlv_length, tvb,
4545 AECP_AA_OFFSET_TLVS_START, 2, ENC_BIG_ENDIAN);
4546 proto_tree_add_item(aecp_tree, hf_aecp_aa_tlv_address, tvb,
4547 AECP_AA_OFFSET_TLVS_START+2, 8, ENC_BIG_ENDIAN);
4548 } /* AECP Vendor Unique Command/Response */
4549 else if ((mess_type == AECP_VENDOR_UNIQUE_COMMAND_MESSAGE) || (mess_type == AECP_VENDOR_UNIQUE_RESPONSE_MESSAGE))
4551 proto_tree_add_item(aecp_tree, hf_aecp_vendor_unique_protocol_id, tvb,
4552 AECP_VUC_OFFSET_PROTOCOL_ID, 6, ENC_BIG_ENDIAN);
4554 /* attempt to dissect the payload specific data */
4555 next_tvb = tvb_new_subset_remaining(tvb, AECP_VUC_OFFSET_PROTOCOL_ID);
4556 vendor_unique_protocol_id = tvb_get_uint48(tvb, AECP_VUC_OFFSET_PROTOCOL_ID, ENC_BIG_ENDIAN);
4557 vendor_unique_protocol_id_string = wmem_strdup_printf(pinfo->pool, "%012" PRIx64, vendor_unique_protocol_id);
4558 dissector_try_string_with_data(vendor_unique_protocol_dissector_table, vendor_unique_protocol_id_string, next_tvb, pinfo, aecp_tree, true, NULL);
4562 static void
4563 dissect_17221_adp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *adp_tree)
4565 proto_item *ent_cap_ti;
4566 proto_item *talk_cap_ti;
4567 proto_item *list_cap_ti;
4568 proto_item *cont_cap_ti;
4570 proto_tree *ent_cap_flags_tree;
4571 proto_tree *talk_cap_flags_tree;
4572 proto_tree *list_cap_flags_tree;
4573 proto_tree *cont_cap_flags_tree;
4576 proto_tree_add_item(adp_tree, hf_adp_message_type, tvb, ADP_VERSION_OFFSET, 1, ENC_BIG_ENDIAN);
4577 proto_tree_add_item(adp_tree, hf_adp_valid_time, tvb, ADP_VALID_TIME_OFFSET, 1, ENC_BIG_ENDIAN);
4578 proto_tree_add_item(adp_tree, hf_adp_cd_length, tvb, ADP_CD_LENGTH_OFFSET, 1, ENC_BIG_ENDIAN);
4579 proto_tree_add_item(adp_tree, hf_adp_entity_id, tvb, ADP_ENTITY_ID_OFFSET, 8, ENC_BIG_ENDIAN);
4580 proto_tree_add_item(adp_tree, hf_adp_entity_model_id, tvb, ADP_ENTITY_MODEL_ID_OFFSET, 8, ENC_BIG_ENDIAN);
4582 /* Subtree for entity_capabilities field */
4583 ent_cap_ti = proto_tree_add_item(adp_tree, hf_adp_entity_cap, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4584 ent_cap_flags_tree = proto_item_add_subtree(ent_cap_ti, ett_adp_ent_cap);
4586 proto_tree_add_item(ent_cap_flags_tree,
4587 hf_adp_entity_cap_efu_mode, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4588 proto_tree_add_item(ent_cap_flags_tree,
4589 hf_adp_entity_cap_address_access_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4590 proto_tree_add_item(ent_cap_flags_tree,
4591 hf_adp_entity_cap_gateway_entity, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4592 proto_tree_add_item(ent_cap_flags_tree,
4593 hf_adp_entity_cap_aem_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4594 proto_tree_add_item(ent_cap_flags_tree,
4595 hf_adp_entity_cap_legacy_avc, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4596 proto_tree_add_item(ent_cap_flags_tree,
4597 hf_adp_entity_cap_assoc_id_support, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4598 proto_tree_add_item(ent_cap_flags_tree,
4599 hf_adp_entity_cap_assoc_id_valid, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4600 proto_tree_add_item(ent_cap_flags_tree,
4601 hf_adp_entity_cap_vendor_unique, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4602 proto_tree_add_item(ent_cap_flags_tree,
4603 hf_adp_entity_cap_class_a_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4604 proto_tree_add_item(ent_cap_flags_tree,
4605 hf_adp_entity_cap_class_b_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4606 proto_tree_add_item(ent_cap_flags_tree,
4607 hf_adp_entity_cap_gptp_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4609 proto_tree_add_item(adp_tree, hf_adp_talker_stream_srcs, tvb, ADP_TALKER_STREAM_SRCS_OFFSET, 2, ENC_BIG_ENDIAN);
4611 talk_cap_ti = proto_tree_add_item(adp_tree, hf_adp_talker_cap, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4612 talk_cap_flags_tree = proto_item_add_subtree(talk_cap_ti, ett_adp_talk_cap);
4614 proto_tree_add_item(talk_cap_flags_tree,
4615 hf_adp_talk_cap_implement, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4616 proto_tree_add_item(talk_cap_flags_tree,
4617 hf_adp_talk_cap_other_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4618 proto_tree_add_item(talk_cap_flags_tree,
4619 hf_adp_talk_cap_control_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4620 proto_tree_add_item(talk_cap_flags_tree,
4621 hf_adp_talk_cap_media_clk_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4622 proto_tree_add_item(talk_cap_flags_tree,
4623 hf_adp_talk_cap_smpte_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4624 proto_tree_add_item(talk_cap_flags_tree,
4625 hf_adp_talk_cap_midi_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4626 proto_tree_add_item(talk_cap_flags_tree,
4627 hf_adp_talk_cap_audio_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4628 proto_tree_add_item(talk_cap_flags_tree,
4629 hf_adp_talk_cap_video_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4631 proto_tree_add_item(adp_tree, hf_adp_listener_stream_sinks,
4632 tvb, ADP_LISTENER_STREAM_SINKS_OFFSET, 2, ENC_BIG_ENDIAN);
4634 list_cap_ti = proto_tree_add_item(adp_tree, hf_adp_listener_cap, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4635 list_cap_flags_tree = proto_item_add_subtree(list_cap_ti, ett_adp_list_cap);
4637 proto_tree_add_item(list_cap_flags_tree,
4638 hf_adp_list_cap_implement, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4639 proto_tree_add_item(list_cap_flags_tree,
4640 hf_adp_list_cap_other_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4641 proto_tree_add_item(list_cap_flags_tree,
4642 hf_adp_list_cap_control_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4643 proto_tree_add_item(list_cap_flags_tree,
4644 hf_adp_list_cap_media_clk_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4645 proto_tree_add_item(list_cap_flags_tree,
4646 hf_adp_list_cap_smpte_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4647 proto_tree_add_item(list_cap_flags_tree,
4648 hf_adp_list_cap_midi_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4649 proto_tree_add_item(list_cap_flags_tree,
4650 hf_adp_list_cap_audio_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4651 proto_tree_add_item(list_cap_flags_tree,
4652 hf_adp_list_cap_video_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN);
4654 cont_cap_ti = proto_tree_add_item(adp_tree, hf_adp_controller_cap, tvb, ADP_CONTROLLER_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4655 cont_cap_flags_tree = proto_item_add_subtree(cont_cap_ti, ett_adp_cont_cap);
4657 proto_tree_add_item(cont_cap_flags_tree,
4658 hf_adp_cont_cap_implement, tvb, ADP_CONTROLLER_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4659 proto_tree_add_item(cont_cap_flags_tree,
4660 hf_adp_cont_cap_layer3_proxy, tvb, ADP_CONTROLLER_CAP_OFFSET, 4, ENC_BIG_ENDIAN);
4662 proto_tree_add_item(adp_tree, hf_adp_avail_index, tvb, ADP_AVAIL_INDEX_OFFSET, 4, ENC_BIG_ENDIAN);
4663 proto_tree_add_item(adp_tree, hf_adp_gptp_gm_id, tvb, ADP_AS_GM_ID_OFFSET, 8, ENC_BIG_ENDIAN);
4665 proto_tree_add_item(adp_tree, hf_adp_assoc_id, tvb, ADP_ASSOC_ID_OFFSET, 8, ENC_BIG_ENDIAN);
4668 static void
4669 dissect_17221_acmp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *acmp_tree)
4671 proto_item *flags_ti;
4672 proto_tree *flags_tree;
4674 proto_tree_add_item(acmp_tree, hf_acmp_message_type, tvb, ACMP_VERSION_OFFSET, 1, ENC_BIG_ENDIAN);
4675 proto_tree_add_item(acmp_tree, hf_acmp_status_field, tvb, ACMP_STATUS_FIELD_OFFSET, 1, ENC_BIG_ENDIAN);
4676 proto_tree_add_item(acmp_tree, hf_acmp_cd_length, tvb, ACMP_CD_LENGTH_OFFSET, 2, ENC_BIG_ENDIAN);
4677 proto_tree_add_item(acmp_tree, hf_acmp_stream_id, tvb, ACMP_STREAM_ID_OFFSET, 8, ENC_BIG_ENDIAN);
4678 proto_tree_add_item(acmp_tree, hf_acmp_controller_guid, tvb, ACMP_CONTROLLER_GUID_OFFSET, 8, ENC_BIG_ENDIAN);
4679 proto_tree_add_item(acmp_tree, hf_acmp_talker_guid, tvb, ACMP_TALKER_GUID_OFFSET, 8, ENC_BIG_ENDIAN);
4680 proto_tree_add_item(acmp_tree, hf_acmp_listener_guid, tvb, ACMP_LISTENER_GUID_OFFSET, 8, ENC_BIG_ENDIAN);
4681 proto_tree_add_item(acmp_tree, hf_acmp_talker_unique_id, tvb, ACMP_TALKER_UNIQUE_ID_OFFSET, 2, ENC_BIG_ENDIAN);
4682 proto_tree_add_item(acmp_tree, hf_acmp_listener_unique_id, tvb, ACMP_LISTENER_UNIQUE_ID_OFFSET, 2, ENC_BIG_ENDIAN);
4683 proto_tree_add_item(acmp_tree, hf_acmp_stream_dest_mac, tvb, ACMP_DEST_MAC_OFFSET, 6, ENC_NA);
4684 proto_tree_add_item(acmp_tree, hf_acmp_connection_count, tvb, ACMP_CONNECTION_COUNT_OFFSET, 2, ENC_BIG_ENDIAN);
4685 proto_tree_add_item(acmp_tree, hf_acmp_sequence_id, tvb, ACMP_SEQUENCE_ID_OFFSET, 2, ENC_BIG_ENDIAN);
4687 flags_ti = proto_tree_add_item(acmp_tree, hf_acmp_flags, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4688 flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags);
4690 proto_tree_add_item(flags_tree, hf_acmp_flags_class_b, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4691 proto_tree_add_item(flags_tree, hf_acmp_flags_fast_connect, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4692 proto_tree_add_item(flags_tree, hf_acmp_flags_saved_state, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4693 proto_tree_add_item(flags_tree, hf_acmp_flags_streaming_wait, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4694 proto_tree_add_item(flags_tree, hf_acmp_flags_supports_encrypted, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4695 proto_tree_add_item(flags_tree, hf_acmp_flags_encrypted_pdu, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4696 proto_tree_add_item(flags_tree, hf_acmp_flags_talker_failed, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN);
4698 proto_tree_add_item(acmp_tree, hf_acmp_vlan_id, tvb, ACMP_VLAN_ID_OFFSET, 2, ENC_BIG_ENDIAN);
4701 static int
4702 dissect_17221(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
4704 uint8_t subtype = 0;
4705 proto_item *ieee17221_item;
4706 proto_tree *ieee17221_tree;
4707 subtype = tvb_get_uint8(tvb, 0);
4708 subtype &= 0x7F;
4710 /* Make entries in Protocol column and Info column on summary display */
4711 col_set_str(pinfo->cinfo, COL_PROTOCOL, "IEEE1722-1");
4713 ieee17221_item = proto_tree_add_item(tree, proto_17221, tvb, 0, -1, ENC_NA);
4714 ieee17221_tree = proto_item_add_subtree(ieee17221_item, ett_17221);
4716 switch (subtype)
4718 case 0x7A:
4720 col_set_str(pinfo->cinfo, COL_INFO, "AVDECC Discovery Protocol");
4721 if (tree)
4722 dissect_17221_adp(tvb, pinfo, ieee17221_tree);
4723 break;
4725 case 0x7B:
4727 col_set_str(pinfo->cinfo, COL_INFO, "AVDECC Enumeration and Control Protocol");
4728 if (tree)
4729 dissect_17221_aecp(tvb, pinfo, ieee17221_tree);
4730 break;
4732 case 0x7C:
4734 col_set_str(pinfo->cinfo, COL_INFO, "AVDECC Connection Management Protocol");
4735 if (tree)
4736 dissect_17221_acmp(tvb, pinfo, ieee17221_tree);
4737 break;
4739 default:
4741 /* Shouldn't get here */
4742 col_set_str(pinfo->cinfo, COL_INFO, "1722.1 Unknown");
4743 return 0;
4747 return tvb_captured_length(tvb);
4750 /* Register the protocol with Wireshark */
4751 void
4752 proto_register_17221(void)
4754 static hf_register_info hf[] = {
4755 { &hf_adp_message_type,
4756 { "Message Type", "ieee17221.message_type",
4757 FT_UINT8, BASE_DEC, VALS(adp_message_type_vals), ADP_MSG_TYPE_MASK, NULL, HFILL }
4759 { &hf_adp_valid_time,
4760 { "Valid Time", "ieee17221.valid_time",
4761 FT_UINT8, BASE_DEC, NULL, ADP_VALID_TIME_MASK, NULL, HFILL }
4763 { &hf_adp_cd_length,
4764 { "Control Data Length", "ieee17221.control_data_length",
4765 FT_UINT16, BASE_DEC, NULL, ADP_CD_LENGTH_MASK, NULL, HFILL }
4767 { &hf_adp_entity_id,
4768 { "Entity ID", "ieee17221.entity_id",
4769 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
4771 { &hf_adp_entity_model_id,
4772 { "Entity Model ID", "ieee17221.entity_model_id",
4773 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
4775 { &hf_adp_entity_cap,
4776 { "Entity Capabilities", "ieee17221.entity_capabilities",
4777 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
4779 /* Entity Capability Flags Begin */
4780 { &hf_adp_entity_cap_efu_mode,
4781 { "EFU_MODE", "ieee17221.entity_capabilities.efu_mode",
4782 FT_BOOLEAN, 32, NULL, ADP_EFU_MODE_BITMASK, NULL, HFILL }
4784 { &hf_adp_entity_cap_address_access_supported,
4785 { "ADDRESS_ACCESS", "ieee17221.entity_capabilities.address_access",
4786 FT_BOOLEAN, 32, NULL, ADP_ADDRESS_ACCESS_BITMASK, NULL, HFILL }
4788 { &hf_adp_entity_cap_gateway_entity,
4789 { "GATEWAY_ENTITY", "ieee17221.entity_capabilities.gateway_entity",
4790 FT_BOOLEAN, 32, NULL, ADP_GATEWAY_ENTITY_BITMASK, NULL, HFILL }
4792 { &hf_adp_entity_cap_aem_supported,
4793 { "AEM", "ieee17221.entity_capabilities.aem_supported",
4794 FT_BOOLEAN, 32, NULL, ADP_AEM_SUPPORTED_BITMASK, NULL, HFILL }
4796 { &hf_adp_entity_cap_legacy_avc,
4797 { "LEGACY_AVC", "ieee17221.entity_capabilities.legacy_avc",
4798 FT_BOOLEAN, 32, NULL, ADP_LEGACY_AVC_BITMASK, NULL, HFILL }
4800 { &hf_adp_entity_cap_assoc_id_support,
4801 { "ASSOCIATION_ID_SUPPORTED", "ieee17221.entity_capabilities.association_id_supported",
4802 FT_BOOLEAN, 32, NULL, ADP_ASSOC_ID_SUPPORT_BITMASK, NULL, HFILL }
4804 { &hf_adp_entity_cap_assoc_id_valid,
4805 { "ASSOCIATION_ID_VALID", "ieee17221.entity_capabilities.association_id_valid",
4806 FT_BOOLEAN, 32, NULL, ADP_ASSOC_ID_VALID_BITMASK, NULL, HFILL }
4808 { &hf_adp_entity_cap_vendor_unique,
4809 { "VENDOR_UNIQUE", "ieee17221.entity_capabilities.vendor_unique",
4810 FT_BOOLEAN, 32, NULL, ADP_VENDOR_UNIQUE_BITMASK, NULL, HFILL }
4812 { &hf_adp_entity_cap_class_a_supported,
4813 { "CLASS_A", "ieee17221.entity_capabilities.class_a",
4814 FT_BOOLEAN, 32, NULL, ADP_CLASS_A_SUPPORTED_BITMASK, NULL, HFILL }
4816 { &hf_adp_entity_cap_class_b_supported,
4817 { "CLASS_B", "ieee17221.entity_capabilities.class_b",
4818 FT_BOOLEAN, 32, NULL, ADP_CLASS_B_SUPPORTED_BITMASK, NULL, HFILL }
4820 { &hf_adp_entity_cap_gptp_supported,
4821 { "gPTP Supported", "ieee17221.entity_capabilities.gptp_supported",
4822 FT_BOOLEAN, 32, NULL, ADP_AS_SUPPORTED_BITMASK, NULL, HFILL }
4824 /* Entity Capability Flags End */
4825 { &hf_adp_talker_stream_srcs,
4826 { "Talker Stream Sources", "ieee17221.talker_stream_sources",
4827 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
4829 { &hf_adp_talker_cap,
4830 { "Talker Capabilities", "ieee17221.talker_capabilities",
4831 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
4833 /* Talker Capability Flags Begin */
4834 { &hf_adp_talk_cap_implement,
4835 { "IMPLEMENTED", "ieee17221.talker_capabilities.implemented",
4836 FT_BOOLEAN, 16, NULL, ADP_TALK_IMPLEMENTED_BITMASK, NULL, HFILL }
4838 { &hf_adp_talk_cap_other_src,
4839 { "OTHER_SOURCE", "ieee17221.talker_capabilities.other_source",
4840 FT_BOOLEAN, 16, NULL, ADP_TALK_OTHER_SRC_BITMASK, NULL, HFILL }
4842 { &hf_adp_talk_cap_control_src,
4843 { "CONTROL_SOURCE", "ieee17221.talker_capabilities.control_source",
4844 FT_BOOLEAN, 16, NULL, ADP_TALK_CONTROL_SRC_BITMASK, NULL, HFILL }
4846 { &hf_adp_talk_cap_media_clk_src,
4847 { "MEDIA_CLOCK_SOURCE", "ieee17221.talker_capabilities.media_clock_source",
4848 FT_BOOLEAN, 16, NULL, ADP_TALK_MEDIA_CLK_SRC_BITMASK, NULL, HFILL }
4850 { &hf_adp_talk_cap_smpte_src,
4851 { "SMPTE_SOURCE", "ieee17221.talker_capabilities.smpte_source",
4852 FT_BOOLEAN, 16, NULL, ADP_TALK_SMPTE_SRC_BITMASK, NULL, HFILL }
4854 { &hf_adp_talk_cap_midi_src,
4855 { "MIDI_SOURCE", "ieee17221.talker_capabilities.midi_source",
4856 FT_BOOLEAN, 16, NULL, ADP_TALK_MIDI_SRC_BITMASK, NULL, HFILL }
4858 { &hf_adp_talk_cap_audio_src,
4859 { "AUDIO_SOURCE", "ieee17221.talker_capabilities.audio_source",
4860 FT_BOOLEAN, 16, NULL, ADP_TALK_AUDIO_SRC_BITMASK, NULL, HFILL }
4862 { &hf_adp_talk_cap_video_src,
4863 { "VIDEO_SOURCE", "ieee17221.talker_capabilities.video_source",
4864 FT_BOOLEAN, 16, NULL, ADP_TALK_VIDEO_SRC_BITMASK, NULL, HFILL }
4866 /* Talker Capability Flags End */
4867 { &hf_adp_listener_stream_sinks,
4868 { "Listener Stream Sinks", "ieee17221.listener_stream_sinks",
4869 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
4871 { &hf_adp_listener_cap,
4872 { "Listener Capabilities", "ieee17221.listener_capabilities",
4873 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
4875 /* Listener Capability Flags Begin */
4876 { &hf_adp_list_cap_implement,
4877 { "IMPLEMENTED", "ieee17221.listener_capabilities.implemented",
4878 FT_BOOLEAN, 16, NULL, ADP_LIST_IMPLEMENTED_BITMASK, NULL, HFILL }
4880 { &hf_adp_list_cap_other_sink,
4881 { "OTHER_SINK", "ieee17221.listener_capabilities.other_source",
4882 FT_BOOLEAN, 16, NULL, ADP_LIST_OTHER_SINK_BITMASK, NULL, HFILL }
4884 { &hf_adp_list_cap_control_sink,
4885 { "CONTROL_SINK", "ieee17221.listener_capabilities.control_source",
4886 FT_BOOLEAN, 16, NULL, ADP_LIST_CONTROL_SINK_BITMASK, NULL, HFILL }
4888 { &hf_adp_list_cap_media_clk_sink,
4889 { "MEDIA_CLOCK_SINK", "ieee17221.listener_capabilities.media_clock_source",
4890 FT_BOOLEAN, 16, NULL, ADP_LIST_MEDIA_CLK_SINK_BITMASK, NULL, HFILL }
4892 { &hf_adp_list_cap_smpte_sink,
4893 { "SMPTE_SINK", "ieee17221.listener_capabilities.smpte_source",
4894 FT_BOOLEAN, 16, NULL, ADP_LIST_SMPTE_SINK_BITMASK, NULL, HFILL }
4896 { &hf_adp_list_cap_midi_sink,
4897 { "MIDI_SINK", "ieee17221.listener_capabilities.midi_source",
4898 FT_BOOLEAN, 16, NULL, ADP_LIST_MIDI_SINK_BITMASK, NULL, HFILL }
4900 { &hf_adp_list_cap_audio_sink,
4901 { "AUDIO_SINK", "ieee17221.listener_capabilities.audio_source",
4902 FT_BOOLEAN, 16, NULL, ADP_LIST_AUDIO_SINK_BITMASK, NULL, HFILL }
4904 { &hf_adp_list_cap_video_sink,
4905 { "VIDEO_SINK", "ieee17221.listener_capabilities.video_source",
4906 FT_BOOLEAN, 16, NULL, ADP_LIST_VIDEO_SINK_BITMASK, NULL, HFILL }
4908 /* Listener Capability Flags End */
4909 { &hf_adp_controller_cap,
4910 { "Controller Capabilities", "ieee17221.controller_capabilities",
4911 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
4913 /* Controller Capability Flags Begin */
4914 { &hf_adp_cont_cap_implement,
4915 { "IMPLEMENTED", "ieee17221.controller_capabilities.implemented",
4916 FT_BOOLEAN, 16, NULL, ADP_CONT_IMPLEMENTED_BITMASK, NULL, HFILL }
4918 { &hf_adp_cont_cap_layer3_proxy,
4919 { "LAYER3_PROXY", "ieee17221.controller_capabilities.layer3_proxy",
4920 FT_BOOLEAN, 16, NULL, ADP_CONT_LAYER3_PROXY_BITMASK, NULL, HFILL }
4922 /* Controller Capability Flags End */
4923 { &hf_adp_avail_index,
4924 { "Available Index", "ieee17221.available_index",
4925 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
4927 { &hf_adp_gptp_gm_id,
4928 { "gPTP Grandmaster ID", "ieee17221.gptp_grandmaster_id",
4929 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
4931 #if 0
4932 { &hf_adp_def_aud_format,
4933 { "Default Audio Format", "ieee17221.default_audio_format",
4934 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
4936 #endif
4937 #if 0
4938 /* Default Audio Formats Fields Begin */
4939 { &hf_adp_def_aud_sample_rates,
4940 { "Sample Rates", "ieee17221.default_audio_format.sample_rates",
4941 FT_UINT8, BASE_HEX, NULL, ADP_DEF_AUDIO_SAMPLE_RATES_MASK, NULL, HFILL }
4943 /* Sample rates Begin */
4944 { &hf_adp_samp_rate_44k1,
4945 { "44.1kHz", "ieee17221.default_audio_format.sample_rates.44k1",
4946 FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_44K1_BITMASK, NULL, HFILL }
4948 { &hf_adp_samp_rate_48k,
4949 { "48kHz", "ieee17221.default_audio_format.sample_rates.48k",
4950 FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_48K_BITMASK, NULL, HFILL }
4952 { &hf_adp_samp_rate_88k2,
4953 { "88.2kHz", "ieee17221.default_audio_format.sample_rates.88k2",
4954 FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_88K2_BITMASK, NULL, HFILL }
4956 { &hf_adp_samp_rate_96k,
4957 { "96kHz", "ieee17221.default_audio_format.sample_rates.96k",
4958 FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_96K_BITMASK, NULL, HFILL }
4960 { &hf_adp_samp_rate_176k4,
4961 { "176.4kHz", "ieee17221.default_audio_format.sample_rates.176k4",
4962 FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_176K4_BITMASK, NULL, HFILL }
4964 { &hf_adp_samp_rate_192k,
4965 { "192kHz", "ieee17221.default_audio_format.sample_rates.192k",
4966 FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_192K_BITMASK, NULL, HFILL }
4968 /* Sample rates End */
4969 { &hf_adp_def_aud_max_chan,
4970 { "Max Channels", "ieee17221.default_audio_format.max_channels",
4971 FT_UINT16, BASE_DEC, NULL, ADP_DEF_AUDIO_MAX_CHANS_MASK, NULL, HFILL }
4973 { &hf_adp_def_aud_saf_flag,
4974 { "saf", "ieee17221.default_audio_format.saf",
4975 FT_BOOLEAN, 16, NULL, ADP_DEF_AUDIO_SAF_MASK, NULL, HFILL }
4977 { &hf_adp_def_aud_float_flag,
4978 { "float", "ieee17221.default_audio_format.float",
4979 FT_BOOLEAN, 16, NULL, ADP_DEF_AUDIO_FLOAT_MASK, NULL, HFILL }
4981 { &hf_adp_def_aud_chan_formats,
4982 { "Channel Formats", "ieee17221.default_audio_format.channel_formats",
4983 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
4985 /* Channel Formats Fields Start */
4986 { &hf_adp_chan_format_mono,
4987 { "MONO", "ieee17221.default_audio_format.channel_formats.mono",
4988 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_MONO, NULL, HFILL }
4990 { &hf_adp_chan_format_2ch,
4991 { "2_CH", "ieee17221.default_audio_format.channel_formats.2_ch",
4992 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_2CH, NULL, HFILL }
4994 { &hf_adp_chan_format_3ch,
4995 { "3_CH", "ieee17221.default_audio_format.channel_formats.3_ch",
4996 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_3CH, NULL, HFILL }
4998 { &hf_adp_chan_format_4ch,
4999 { "4_CH", "ieee17221.default_audio_format.channel_formats.4_ch",
5000 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_4CH, NULL, HFILL }
5002 { &hf_adp_chan_format_5ch,
5003 { "5_CH", "ieee17221.default_audio_format.channel_formats.5_ch",
5004 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_5CH, NULL, HFILL }
5006 { &hf_adp_chan_format_6ch,
5007 { "6_CH", "ieee17221.default_audio_format.channel_formats.6_ch",
5008 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_6CH, NULL, HFILL }
5010 { &hf_adp_chan_format_7ch,
5011 { "7_CH", "ieee17221.default_audio_format.channel_formats.7_ch",
5012 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_7CH, NULL, HFILL }
5014 { &hf_adp_chan_format_8ch,
5015 { "8_CH", "ieee17221.default_audio_format.channel_formats.8_ch",
5016 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_8CH, NULL, HFILL }
5018 { &hf_adp_chan_format_10ch,
5019 { "10_CH", "ieee17221.default_audio_format.channel_formats.10_ch",
5020 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_10CH, NULL, HFILL }
5022 { &hf_adp_chan_format_12ch,
5023 { "12_CH", "ieee17221.default_audio_format.channel_formats.12_ch",
5024 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_12CH, NULL, HFILL }
5026 { &hf_adp_chan_format_14ch,
5027 { "14_CH", "ieee17221.default_audio_format.channel_formats.14_ch",
5028 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_14CH, NULL, HFILL }
5030 { &hf_adp_chan_format_16ch,
5031 { "16_CH", "ieee17221.default_audio_format.channel_formats.16_ch",
5032 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_16CH, NULL, HFILL }
5034 { &hf_adp_chan_format_18ch,
5035 { "18_CH", "ieee17221.default_audio_format.channel_formats.18_ch",
5036 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_18CH, NULL, HFILL }
5038 { &hf_adp_chan_format_20ch,
5039 { "20_CH", "ieee17221.default_audio_format.channel_formats.20_ch",
5040 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_20CH, NULL, HFILL }
5042 { &hf_adp_chan_format_22ch,
5043 { "22_CH", "ieee17221.default_audio_format.channel_formats.22_ch",
5044 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_22CH, NULL, HFILL }
5046 { &hf_adp_chan_format_24ch,
5047 { "24_CH", "ieee17221.default_audio_format.channel_formats.24_ch",
5048 FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_24CH, NULL, HFILL }
5050 #endif
5051 /* Channel Formats Fields End */
5052 /* Default Audio Formats Fields End */
5053 #if 0
5054 { &hf_adp_def_vid_format,
5055 { "Default Video Format", "ieee17221.default_video_format",
5056 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
5058 #endif
5059 { &hf_adp_assoc_id,
5060 { "Association ID", "ieee17221.association_id",
5061 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5063 #if 0
5064 { &hf_adp_entity_type,
5065 { "Entity Type", "ieee17221.entity_type",
5066 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
5068 #endif
5069 /*******************************************************************/
5070 { &hf_acmp_message_type,
5071 { "Message Type", "ieee17221.message_type",
5072 FT_UINT8, BASE_DEC, VALS(acmp_message_type_vals), ACMP_MSG_TYPE_MASK, NULL, HFILL }
5074 { &hf_acmp_status_field,
5075 { "Status Field", "ieee17221.status_field",
5076 FT_UINT8, BASE_DEC, VALS(acmp_status_field_vals), ACMP_STATUS_FIELD_MASK, NULL, HFILL }
5078 { &hf_acmp_cd_length,
5079 { "Control Data Length", "ieee17221.control_data_length",
5080 FT_UINT16, BASE_DEC, NULL, ACMP_CD_LENGTH_MASK, NULL, HFILL }
5082 { &hf_acmp_stream_id,
5083 { "Stream ID", "ieee17221.stream_id",
5084 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5086 { &hf_acmp_controller_guid,
5087 { "Controller GUID", "ieee17221.controller_guid",
5088 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5090 { &hf_acmp_talker_guid,
5091 { "Talker GUID", "ieee17221.talker_guid",
5092 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5094 { &hf_acmp_listener_guid,
5095 { "Listener GUID", "ieee17221.listener_guid",
5096 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5098 { &hf_acmp_talker_unique_id,
5099 { "Talker Unique ID", "ieee17221.talker_unique_id",
5100 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5102 { &hf_acmp_listener_unique_id,
5103 { "Listener Unique ID", "ieee17221.listener_unique_id",
5104 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5106 { &hf_acmp_stream_dest_mac,
5107 { "Destination MAC address", "ieee17221.dest_mac",
5108 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
5110 { &hf_acmp_connection_count,
5111 { "Connection Count", "ieee17221.connection_count",
5112 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5114 { &hf_acmp_sequence_id,
5115 { "Sequence ID", "ieee17221.sequence_id",
5116 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5118 { &hf_acmp_flags,
5119 { "Flags", "ieee17221.flags",
5120 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5122 /* ACMP Flags Begin */
5123 { &hf_acmp_flags_class_b,
5124 { "CLASS_B", "ieee17221.flags.class_b",
5125 FT_BOOLEAN, 16, NULL, ACMP_FLAG_CLASS_B_BITMASK, NULL, HFILL }
5127 { &hf_acmp_flags_fast_connect,
5128 { "FAST_CONNECT", "ieee17221.flags.fast_connect",
5129 FT_BOOLEAN, 16, NULL, ACMP_FLAG_FAST_CONNECT_BITMASK, NULL, HFILL }
5131 { &hf_acmp_flags_saved_state,
5132 { "SAVED_STATE", "ieee17221.flags.saved_state",
5133 FT_BOOLEAN, 16, NULL, ACMP_FLAG_SAVED_STATE_BITMASK, NULL, HFILL }
5135 { &hf_acmp_flags_streaming_wait,
5136 { "STREAMING_WAIT", "ieee17221.flags.streaming_wait",
5137 FT_BOOLEAN, 16, NULL, ACMP_FLAG_STREAMING_WAIT_BITMASK, NULL, HFILL }
5139 { &hf_acmp_flags_supports_encrypted,
5140 { "SUPPORTS_ENCRYPTED", "ieee17221.flags.supports_encrypted",
5141 FT_BOOLEAN, 16, NULL, ACMP_FLAG_SUPPORTS_ENCRYPTED_BITMASK, NULL, HFILL }
5143 { &hf_acmp_flags_encrypted_pdu,
5144 { "ENCRYPTED_PDU", "ieee17221.flags.encrypted_pdu",
5145 FT_BOOLEAN, 16, NULL, ACMP_FLAG_ENCRYPTED_PDU_BITMASK, NULL, HFILL }
5147 { &hf_acmp_flags_talker_failed,
5148 { "TALKER_FAILED", "ieee17221.flags.talker_failed",
5149 FT_BOOLEAN, 16, NULL, ACMP_FLAG_TALKER_FAILED_BITMASK, NULL, HFILL }
5151 /* ACMP Flags End */
5152 { &hf_acmp_vlan_id,
5153 { "Stream VLAN Id", "ieee17221.vlan_id",
5154 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5156 /******* AECP ******/
5157 /* COMMON FIELDS */
5158 { &hf_aecp_message_type,
5159 { "Message Type", "ieee17221.message_type",
5160 FT_UINT8, BASE_DEC, VALS(aecp_message_type_vals), AECP_MSG_TYPE_MASK, NULL, HFILL }
5162 { &hf_aecp_cd_length,
5163 { "Control Data Length", "ieee17221.control_data_length",
5164 FT_UINT16, BASE_DEC, NULL, AECP_CD_LENGTH_MASK, NULL, HFILL }
5166 { &hf_aecp_target_guid,
5167 { "Target GUID", "ieee17221.target_guid",
5168 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5170 { &hf_aecp_controller_guid,
5171 { "Controller GUID", "ieee17221.controller_guid",
5172 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5174 { &hf_aecp_sequence_id,
5175 { "Sequence ID", "ieee17221.sequence_id",
5176 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5178 { &hf_aecp_u_flag,
5179 { "U Flag", "ieee17221.u_flag",
5180 FT_BOOLEAN, 8, NULL, AECP_U_FLAG_MASK, NULL, HFILL }
5182 { &hf_aecp_command_type,
5183 { "Command Type", "ieee17221.command_type",
5184 FT_UINT16, BASE_HEX, VALS(aecp_command_type_vals), AECP_COMMAND_TYPE_MASK, NULL, HFILL }
5186 /* Address Access Fields */
5187 { &hf_aecp_aa_count,
5188 { "Count", "ieee17221.count",
5189 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5191 { &hf_aecp_aa_tlv_mode,
5192 { "Tlv Mode", "ieee17221.tlv_mode",
5193 FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL }
5195 { &hf_aecp_aa_tlv_length,
5196 { "Tlv Length", "ieee17221.tlv_length",
5197 FT_UINT16, BASE_DEC, NULL, 0x0FFF, NULL, HFILL }
5199 { &hf_aecp_aa_tlv_address,
5200 { "Tlv Address", "ieee17221.tlv_address",
5201 FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL }
5204 /* SLIGHTLY LESS COMMON FIELDS */
5205 { &hf_aecp_descriptor_type,
5206 { "Descriptor Type", "ieee17221.descriptor_type",
5207 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
5209 { &hf_aecp_descriptor_index,
5210 {"Descriptor Index", "ieee17221.descriptor_index",
5211 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5214 /* AECP Commands and Responses 1722.1 Sec 7.4 */
5215 /* LOCK_ENTITY */
5216 { &hf_aecp_unlock_flag,
5217 { "UNLOCK Flag", "ieee17221.flags.unlock",
5218 FT_BOOLEAN, 8, NULL, AECP_UNLOCK_FLAG_MASK, NULL, HFILL }
5220 { &hf_aecp_locked_guid,
5221 { "Locked GUID", "ieee17221.locked_guid",
5222 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL}
5225 /* READ_DESCRIPTOR */
5226 { &hf_aecp_configuration,
5227 { "Configuration", "ieee17221.configuration",
5228 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5231 /* WRITE_DESCRIPTOR */
5233 /* ACQUIRE_ENTITY */
5234 { &hf_aecp_persistent_flag,
5235 { "Persistent Flag", "ieee17221.flags.persistent",
5236 FT_BOOLEAN, 32, NULL, AECP_PERSISTENT_FLAG_MASK, NULL, HFILL }
5238 { &hf_aecp_release_flag,
5239 { "Release Flag", "ieee17221.flags.release",
5240 FT_BOOLEAN, 32, NULL, AECP_RELEASE_FLAG_MASK, NULL, HFILL }
5242 { &hf_aecp_owner_guid,
5243 { "Owner GUID", "ieee17221.owner_guid",
5244 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5247 /* CONTROLLER_AVAILABLE */
5249 /* SET_CLOCK_SOURCE / GET_CLOCK_SOURCE */
5250 { &hf_aecp_clock_source_id,
5251 { "Clock Source ID", "ieee17221.clock_source_id64",
5252 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5255 /* SET_STREAM_FORMAT */
5256 { &hf_aecp_stream_format,
5257 {"Stream Format", "ieee17221.stream_format64",
5258 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5260 /* GET_STREAM_FORMAT */
5262 /* SET_CONFIGURATION / GET_CONFIGURATION */
5264 /* SET_CONTROL_VALUE / GET_CONTROL_VALUE */
5266 /* SET_SIGNAL_SELECTOR / GET_SIGNAL_SELECTOR */
5267 { &hf_aecp_signal_type,
5268 {"Signal Type", "ieee17221.signal_type",
5269 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5271 { &hf_aecp_signal_index,
5272 {"Signal Index", "ieee17221.signal_index",
5273 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5275 { &hf_aecp_signal_output,
5276 {"Signal Output", "ieee17221.signal_output",
5277 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5280 /* SET_MIXER / GET_MIXER */
5282 /* SET_MATRIX / GET_MATRIX */
5283 { &hf_aecp_matrix_column,
5284 {"Matrix Column", "ieee17221.matrix_column",
5285 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5287 { &hf_aecp_matrix_row,
5288 {"Matrix Row", "ieee17221.matrix_row",
5289 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5291 { &hf_aecp_matrix_region_width,
5292 {"Region Width", "ieee17221.matrix_region_width",
5293 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5295 { &hf_aecp_matrix_region_height,
5296 {"Region Height", "ieee17221.matrix_region_height",
5297 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5299 { &hf_aecp_matrix_rep,
5300 {"Rep", "ieee17221.matrix_rep",
5301 FT_BOOLEAN, 8, NULL, AECP_MATRIX_REP_MASK, NULL, HFILL }
5303 { &hf_aecp_matrix_direction,
5304 {"Direction", "ieee17221.matrix_direction",
5305 FT_UINT8, BASE_DEC, VALS(aecp_direction_type_vals), AECP_MATRIX_DIRECTION_MASK, NULL, HFILL }
5307 { &hf_aecp_matrix_value_count,
5308 {"Value Count", "ieee17221.matrix_value_count",
5309 FT_UINT16, BASE_DEC, NULL, AECP_MATRIX_VALUE_COUNT_MASK, NULL, HFILL }
5311 { &hf_aecp_matrix_item_offset,
5312 {"Item Offset", "ieee17221.matrix_item_offset",
5313 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5315 #if 0
5316 { &hf_aecp_matrix_affected_item_count,
5317 {"Affected Item Count", "ieee17221.matrix_affected_item_count",
5318 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5320 #endif
5322 /* START_STREAMING */
5324 /* STOP_STREAMING */
5326 /* GET_AVB_INFO */
5327 { &hf_aecp_avb_info_ptp_grandmaster_id,
5328 {"gPTP Grandmaster ID", "ieee17221.avb_info_gptp_grandmaster_id",
5329 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5331 { &hf_aecp_avb_info_propegation_delay,
5332 {"Propagation Delay", "ieee17221.avb_info_propagation_delay",
5333 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5335 { &hf_aecp_avb_info_gptp_domain_number,
5336 {"gPTP Domain Number", "ieee17221.avb_info_gptp_domain_number",
5337 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
5339 #if 0
5340 { &hf_aecp_avb_info_flags,
5341 {"Flags", "ieee17221.avbinfo_flags",
5342 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
5344 #endif
5346 { &hf_aecp_as_capable_flag,
5347 { "AS Capable Flag", "ieee17221.as_capable_flag",
5348 FT_BOOLEAN, 8, NULL, AECP_AS_CAPABLE_FLAG_MASK, NULL, HFILL }
5351 { &hf_aecp_gptp_enabled_flag,
5352 { "gPTP Enabled Flag", "ieee17221.gptp_enabled_flag",
5353 FT_BOOLEAN, 8, NULL, AECP_GPTP_ENABLED_FLAG_MASK, NULL, HFILL }
5356 { &hf_aecp_srp_enabled_flag,
5357 { "SRP Enabled Flag", "ieee17221.srp_enabled_flag",
5358 FT_BOOLEAN, 8, NULL, AECP_SRP_ENABLED_FLAG_MASK, NULL, HFILL }
5361 { &hf_aecp_avb_info_msrp_mappings_count,
5362 {"MSRP Mappings Count", "ieee17221.msrp_mappings_count",
5363 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5366 { &hf_aecp_avb_info_msrp_mappings,
5367 {"MSRP Mappings", "ieee17221.msrp_mappings",
5368 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
5371 { &hf_aecp_avb_info_msrp_mapping_traffic_class,
5372 {"MSRP Mapping Traffic Class", "ieee17221.msrp_mapping_traffic_class",
5373 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
5375 { &hf_aecp_avb_info_msrp_mapping_priority,
5376 {"MSRP Mapping Priority", "ieee17221.msrp_mapping_priority",
5377 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
5379 { &hf_aecp_get_avb_info_msrp_vlan_id,
5380 {"MSRP VLAN ID", "ieee17221.msrp_vlan_id",
5381 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5384 { &hf_aecp_map_index,
5385 {"Map Index", "ieee17221.map_index",
5386 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5388 { &hf_aecp_number_of_maps,
5389 {"Number of Maps", "ieee17221.number_of_maps",
5390 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5393 /* GET_STREAM_INFO */
5394 { &hf_aecp_msrp_accumulated_latency,
5395 {"MSRP Accumulated Latency", "ieee17221.msrp_accumulated_latency",
5396 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5398 { &hf_aecp_msrp_failure_code,
5399 {"MSRP Failure Code", "ieee17221.msrp_failure_code",
5400 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5402 { &hf_aecp_msrp_failure_bridge_id,
5403 {"MSRP Failure Bridge ID", "ieee17221.msrp_failure_bridge_id",
5404 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5406 #if 0
5407 { &hf_aecp_stream_vlan_id,
5408 {"Stream VLAN ID", "ieee17221.stream_vlan_id",
5409 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5411 #endif
5412 { &hf_aecp_stream_vlan_id_valid_flag,
5413 {"Stream VLAN ID Valid Flag", "ieee17221.flags.stream_vlan_id_valid",
5414 FT_BOOLEAN, 32, NULL, AECP_STREAM_VLAN_ID_VALID_FLAG_MASK, NULL, HFILL }
5416 { &hf_aecp_connected_flag,
5417 {"Connected Flag", "ieee17221.flags.connected",
5418 FT_BOOLEAN, 32, NULL, AECP_CONNECTED_FLAG_MASK, NULL, HFILL }
5420 { &hf_aecp_msrp_failure_valid_flag,
5421 {"MSRP Failure Valid Flag", "ieee17221.flags.msrp_failure_valid",
5422 FT_BOOLEAN, 32, NULL, AECP_MSRP_FAILURE_VALID_FLAG_MASK, NULL, HFILL }
5424 { &hf_aecp_dest_mac_valid_flag,
5425 {"Dest MAC Valid Flag", "ieee17221.flags.dest_mac_valid",
5426 FT_BOOLEAN, 32, NULL, AECP_DEST_MAC_VALID_FLAG_MASK, NULL, HFILL }
5428 { &hf_aecp_msrp_acc_lat_valid_flag,
5429 {"MSRP Accumulated Latency Field Valid Flag", "ieee17221.flags.msrp_acc_lat_valid",
5430 FT_BOOLEAN, 32, NULL, AECP_MSRP_ACC_LAT_VALID_FLAG_MASK, NULL, HFILL }
5432 { &hf_aecp_stream_id_valid_flag,
5433 {"Stream ID Valid Flag", "ieee17221.flags.stream_id_valid",
5434 FT_BOOLEAN, 32, NULL, AECP_STREAM_ID_VALID_FLAG_MASK, NULL, HFILL }
5436 { &hf_aecp_stream_format_valid_flag,
5437 {"Stream Format Valid Flag", "ieee17221.flags.stream_format_valid",
5438 FT_BOOLEAN, 32, NULL, AECP_STREAM_FORMAT_VALID_FLAG_MASK, NULL, HFILL }
5441 /* SET_NAME / GET_NAME */
5442 { &hf_aecp_name_index,
5443 {"Name Index", "ieee17221.name_index",
5444 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5446 { &hf_aecp_configuration_index,
5447 {"Configuration Index", "ieee17221.configuration_index",
5448 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5451 { &hf_aecp_name,
5452 {"Name", "ieee17221.name",
5453 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
5456 /* SET_ASSOCIATION_ID / GET_ASSOCIATION_ID */
5457 { &hf_aecp_association_id,
5458 {"Association ID", "ieee17221.association_id",
5459 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5462 /* GET_AS_PATH */
5463 { &hf_aecp_as_path_count,
5464 {"Count", "ieee17221.as_path_count",
5465 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5468 { &hf_aecp_as_path_sequences,
5469 {"Path Sequence", "ieee17221.as_path_sequences",
5470 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
5473 { &hf_aecp_get_as_info_clock_id,
5474 { "ClockId", "ieee17221.get_as_info_clock_id",
5475 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5478 /* AUTH_ADD_KEY */
5479 { &hf_aecp_keychain_id,
5480 {"Keychain ID", "ieee17221.keychain_id",
5481 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5483 { &hf_aecp_keychain_id_small,
5484 {"Keychain ID", "ieee17221.keychain_id_small",
5485 FT_UINT8, BASE_HEX, VALS(aecp_keychain_id_type_vals), AECP_KEYCHAIN_ID_MASK, NULL, HFILL }
5487 { &hf_aecp_key_type,
5488 {"Key Type", "ieee17221.key_type",
5489 FT_UINT8, BASE_HEX, VALS(aecp_key_type_type_vals), AECP_KEYTYPE_MASK, NULL, HFILL }
5491 { &hf_aecp_key_signature,
5492 {"Key Signature", "ieee17221.key_signature",
5493 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5495 #if 0
5496 { &hf_aecp_key_number,
5497 {"Key ID", "ieee17221.key_id",
5498 FT_UINT16, BASE_HEX, NULL, AECP_KEY_NUMBER_MASK, NULL, HFILL }
5500 { &hf_aecp_continued_flag,
5501 {"Continued", "ieee17221.continued",
5502 FT_BOOLEAN, 8, NULL, AECP_CONTINUED_MASK, NULL, HFILL }
5504 { &hf_aecp_key_part,
5505 {"Key Part", "ieee17221.key_part",
5506 FT_UINT8, BASE_DEC, NULL, AECP_KEY_PART_MASK, NULL, HFILL }
5508 #endif
5510 { &hf_aecp_key_length,
5511 {"Key Length", "ieee17221.key_length",
5512 FT_UINT16, BASE_DEC, NULL, AECP_KEY_LENGTH_MASK, NULL, HFILL }
5514 #if 0
5515 { &hf_aecp_private_key_read_flag,
5516 {"Private Key Read Flag", "ieee17221.flags.private_key_read",
5517 FT_BOOLEAN, 32, NULL, AECP_PRIVATE_KEY_READ_FLAG_MASK, NULL, HFILL }
5519 { &hf_aecp_private_key_write_flag,
5520 {"Private Key Write Flag", "ieee17221.flags.private_key_write",
5521 FT_BOOLEAN, 32, NULL, AECP_PRIVATE_KEY_WRITE_FLAG_MASK, NULL, HFILL }
5523 { &hf_aecp_public_key_write_flag,
5524 {"Public Key Write Flag", "ieee17221.flags.public_key_write",
5525 FT_BOOLEAN, 32, NULL, AECP_PUBLIC_KEY_WRITE_FLAG_MASK, NULL, HFILL }
5527 { &hf_aecp_control_admin_flag,
5528 {"Control Admin Flag", "ieee17221.flags.control_admin",
5529 FT_BOOLEAN, 32, NULL, AECP_CONTROL_ADMIN_FLAG_MASK, NULL, HFILL }
5531 { &hf_aecp_mem_obj_admin_flag,
5532 {"Memory Object Admin", "ieee17221.mem_obj_admin",
5533 FT_BOOLEAN, 32, NULL, AECP_MEM_OBJ_ADMIN_FLAG_MASK, NULL, HFILL }
5535 { &hf_aecp_mem_obj_settings_flag,
5536 {"Memory Object Settings", "ieee17221.mem_obj_settings",
5537 FT_BOOLEAN, 32, NULL, AECP_MEM_OBJ_SETTINGS_FLAG_MASK, NULL, HFILL }
5539 { &hf_aecp_control_user_l1,
5540 {"Control User L1 flag", "ieee17221.flags.control_user_l1",
5541 FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L1_FLAG_MASK, NULL, HFILL }
5543 { &hf_aecp_control_user_l2,
5544 {"Control User L2 flag", "ieee17221.flags.control_user_l2",
5545 FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L2_FLAG_MASK, NULL, HFILL }
5547 { &hf_aecp_control_user_l3,
5548 {"Control User L3 flag", "ieee17221.flags.control_user_l3",
5549 FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L3_FLAG_MASK, NULL, HFILL }
5551 { &hf_aecp_control_user_l4,
5552 {"Control User L4 flag", "ieee17221.flags.control_user_l4",
5553 FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L4_FLAG_MASK, NULL, HFILL }
5555 #endif
5557 { &hf_aecp_keychain_list_index,
5558 {"Keychain List Index", "ieee17221.keychain_list_index",
5559 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5561 { &hf_aecp_keychain_number_of_keys,
5562 {"Keychain Number of Keys", "ieee17221.keychain_number_of_keys",
5563 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5565 { &hf_aecp_keychain_number_of_lists,
5566 {"Keychain Number of Lists", "ieee17221.keychain_number_of_lists",
5567 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5570 { &hf_aecp_key_eui,
5571 {"Key EUI", "ieee17221.key_eui",
5572 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5574 { &hf_aecp_token_length,
5575 {"Token Length", "ieee17221.token_length",
5576 FT_UINT16, BASE_DEC, NULL, AECP_TOKEN_LENGTH_MASK, NULL, HFILL }
5578 { &hf_aecp_key,
5579 {"Key", "ieee17221.key",
5580 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5582 { &hf_aecp_auth_token,
5583 {"Auth Token", "ieee17221.auth_token",
5584 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5586 { &hf_aecp_flags_32,
5587 {"Flags", "ieee17221.flags",
5588 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL }
5591 /* AUTH_GET_KEY */
5592 /* AUTHENTICATE */
5593 /* GET_COUNTERS */
5595 /* Counter valid bits */
5596 { &hf_aecp_avb_interface_link_up_valid,
5597 {"Link Up Valid", "ieee17221.flags.link_up_valid",
5598 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LINK_UP, NULL, HFILL }
5600 { &hf_aecp_avb_interface_link_down_valid,
5601 {"Link Down Valid", "ieee17221.flags.link_down_valid",
5602 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LINK_DOWN, NULL, HFILL }
5604 { &hf_aecp_avb_interface_packets_tx_valid,
5605 {"Packets TX Valid", "ieee17221.flags.packets_tx_valid",
5606 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_TX, NULL, HFILL }
5608 { &hf_aecp_avb_interface_packets_rx_valid,
5609 {"Packets RX Valid", "ieee17221.flags.packets_rx_valid",
5610 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_RX, NULL, HFILL }
5612 { &hf_aecp_avb_interface_rx_crc_error_valid,
5613 {"RX CRC Error Valid", "ieee17221.flags.rx_crc_error_valid",
5614 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_RX_CRC_ERROR, NULL, HFILL }
5616 { &hf_aecp_avb_interface_gptp_gm_changed_valid,
5617 {"GPTP GM Changed Valid", "ieee17221.flags.gptp_gm_changed_valid",
5618 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_GPTP_GM_CHANGED, NULL, HFILL }
5621 { &hf_aecp_clock_domain_unlocked_valid,
5622 {"Clock Domain Unlocked Valid", "ieee17221.flags.clock_domain_unlocked_valid",
5623 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_CLOCK_DOMAIN_UNLOCKED, NULL, HFILL }
5625 { &hf_aecp_clock_domain_locked_valid,
5626 {"Clock_Domain Locked Valid", "ieee17221.flags.clock_domain_locked_valid",
5627 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_CLOCK_DOMAIN_LOCKED, NULL, HFILL }
5630 { &hf_aecp_stream_input_media_unlocked_valid,
5631 {"Media Unlocked Valid", "ieee17221.flags.media_unlocked_valid",
5632 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_UNLOCKED, NULL, HFILL }
5634 { &hf_aecp_stream_input_media_locked_valid,
5635 {"Media Locked Valid", "ieee17221.flags.media_locked_valid",
5636 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_LOCKED, NULL, HFILL }
5638 { &hf_aecp_stream_input_stream_reset_valid,
5639 {"Stream Reset Valid", "ieee17221.flags.stream_reset_valid",
5640 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_STREAM_RESET, NULL, HFILL }
5642 { &hf_aecp_stream_input_seq_num_mismatch_valid,
5643 {"Seq Num Mismatch Valid", "ieee17221.flags.seq_num_mismatch_valid",
5644 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_SEQ_NUM_MISMATCH, NULL, HFILL }
5646 { &hf_aecp_stream_input_media_reset_valid,
5647 {"Media Reset Valid", "ieee17221.flags.media_reset_valid",
5648 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_RESET, NULL, HFILL }
5650 { &hf_aecp_stream_input_timestamp_uncertain_valid,
5651 {"Timestamp Uncertain Valid", "ieee17221.flags.timestamp_uncertain_valid",
5652 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_UNCERTAIN, NULL, HFILL }
5654 { &hf_aecp_stream_input_timestamp_valid_valid,
5655 {"Timestamp Valid Valid", "ieee17221.flags.timestamp_valid_valid",
5656 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_VALID, NULL, HFILL }
5658 { &hf_aecp_stream_input_timestamp_not_valid_valid,
5659 {"Timestamp Not Valid Valid", "ieee17221.flags.timestamp_not_valid_valid",
5660 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_NOT_VALID, NULL, HFILL }
5662 { &hf_aecp_stream_input_unsupported_format_valid,
5663 {"Unsupported Format Valid", "ieee17221.flags.unsupported_format_valid",
5664 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_UNSUPPORTED_FORMAT, NULL, HFILL }
5666 { &hf_aecp_stream_input_late_timestamp_valid,
5667 {"Late Timestamp Valid", "ieee17221.flags.late_timestamp_valid",
5668 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LATE_TIMESTAMP, NULL, HFILL }
5670 { &hf_aecp_stream_input_early_timestamp_valid,
5671 {"Early Timestamp Valid", "ieee17221.flags.early_timestamp_valid",
5672 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_EARLY_TIMESTAMP, NULL, HFILL }
5674 { &hf_aecp_stream_input_packets_tx_valid,
5675 {"Stream Packets TX Valid", "ieee17221.flags.stream_packets_tx_valid",
5676 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_STREAM_PACKETS_TX, NULL, HFILL }
5678 { &hf_aecp_stream_input_packets_rx_valid,
5679 {"Stream Packets RX Valid", "ieee17221.flags.stream_packets_rx_valid",
5680 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_STREAM_PACKETS_RX, NULL, HFILL }
5683 { &hf_aecp_entity_specific1_valid,
5684 {"Entity Specific 1", "ieee17221.flags.entity_specific1_valid",
5685 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_1, NULL, HFILL }
5687 { &hf_aecp_entity_specific2_valid,
5688 {"Entity Specific 2", "ieee17221.flags.entity_specific2_valid",
5689 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_2, NULL, HFILL }
5691 { &hf_aecp_entity_specific3_valid,
5692 {"Entity Specific 3", "ieee17221.flags.entity_specific3_valid",
5693 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_3, NULL, HFILL }
5695 { &hf_aecp_entity_specific4_valid,
5696 {"Entity Specific 4", "ieee17221.flags.entity_specific4_valid",
5697 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_4, NULL, HFILL }
5699 { &hf_aecp_entity_specific5_valid,
5700 {"Entity Specific 5", "ieee17221.flags.entity_specific5_valid",
5701 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_5, NULL, HFILL }
5703 { &hf_aecp_entity_specific6_valid,
5704 {"Entity Specific 6", "ieee17221.flags.entity_specific6_valid",
5705 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_6, NULL, HFILL }
5707 { &hf_aecp_entity_specific7_valid,
5708 {"Entity Specific 7", "ieee17221.flags.entity_specific7_valid",
5709 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_7, NULL, HFILL }
5711 { &hf_aecp_entity_specific8_valid,
5712 {"Entity Specific 8", "ieee17221.flags.entity_specific8_valid",
5713 FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_8, NULL, HFILL }
5716 /* Counters */
5717 { &hf_aecp_avb_interface_link_up,
5718 {"Link Up", "ieee17221.link_up",
5719 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5721 { &hf_aecp_avb_interface_link_down,
5722 {"Link Down", "ieee17221.link_down",
5723 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5725 { &hf_aecp_avb_interface_packets_tx,
5726 {"Frames TX", "ieee17221.frames_tx",
5727 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5729 { &hf_aecp_avb_interface_packets_rx,
5730 {"Frames RX", "ieee17221.frames_rx",
5731 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5733 { &hf_aecp_avb_interface_rx_crc_error,
5734 {"RX CRC Error", "ieee17221.rx_crc_error",
5735 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5737 { &hf_aecp_avb_interface_gptp_gm_changed,
5738 {"GPTP GM Changed", "ieee17221.gptp_gm_changed",
5739 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5742 { &hf_aecp_clock_domain_unlocked,
5743 {"Clock Domain Unlocked", "ieee17221.clock_domain_unlocked",
5744 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5746 { &hf_aecp_clock_domain_locked,
5747 {"Clock_Domain Locked", "ieee17221.clock_domain_locked",
5748 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5751 { &hf_aecp_stream_input_media_unlocked,
5752 {"Media Unlocked", "ieee17221.media_unlocked",
5753 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5755 { &hf_aecp_stream_input_media_locked,
5756 {"Media Locked", "ieee17221.media_locked",
5757 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5759 { &hf_aecp_stream_input_stream_reset,
5760 {"Stream Reset", "ieee17221.stream_reset",
5761 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5763 { &hf_aecp_stream_input_seq_num_mismatch,
5764 {"Seq Num Mismatch", "ieee17221.seq_num_mismatch",
5765 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5767 { &hf_aecp_stream_input_media_reset,
5768 {"Media Reset", "ieee17221.media_reset",
5769 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5771 { &hf_aecp_stream_input_timestamp_uncertain,
5772 {"Timestamp Uncertain", "ieee17221.timestamp_uncertain",
5773 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5775 { &hf_aecp_stream_input_timestamp_valid,
5776 {"Timestamp Valid", "ieee17221.timestamp",
5777 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5779 { &hf_aecp_stream_input_timestamp_not_valid,
5780 {"Timestamp Not Valid", "ieee17221.timestamp_not",
5781 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5783 { &hf_aecp_stream_input_unsupported_format,
5784 {"Unsupported Format", "ieee17221.unsupported_format",
5785 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5787 { &hf_aecp_stream_input_late_timestamp,
5788 {"Late Timestamp", "ieee17221.late_timestamp",
5789 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5791 { &hf_aecp_stream_input_early_timestamp,
5792 {"Early Timestamp", "ieee17221.early_timestamp",
5793 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5795 { &hf_aecp_stream_input_packets_tx,
5796 {"Stream Packets TX", "ieee17221.stream_packets_tx",
5797 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5799 { &hf_aecp_stream_input_packets_rx,
5800 {"Stream Packets RX", "ieee17221.stream_packets_rx",
5801 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5804 { &hf_aecp_entity_specific1,
5805 {"Entity Specific 1", "ieee17221.entity_specific1",
5806 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5808 { &hf_aecp_entity_specific2,
5809 {"Entity Specific 2", "ieee17221.entity_specific2",
5810 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5812 { &hf_aecp_entity_specific3,
5813 {"Entity Specific 3", "ieee17221.entity_specific3",
5814 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5816 { &hf_aecp_entity_specific4,
5817 {"Entity Specific 4", "ieee17221.entity_specific4",
5818 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5820 { &hf_aecp_entity_specific5,
5821 {"Entity Specific 5", "ieee17221.entity_specific5",
5822 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5824 { &hf_aecp_entity_specific6,
5825 {"Entity Specific 6", "ieee17221.entity_specific6",
5826 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5828 { &hf_aecp_entity_specific7,
5829 {"Entity Specific 7", "ieee17221.entity_specific7",
5830 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5832 { &hf_aecp_entity_specific8,
5833 {"Entity Specific 8", "ieee17221.entity_specific8",
5834 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
5837 /* REBOOT */
5839 /* SET_MEDIA_FORMAT / GET_MEDIA_FORMAT */
5840 #if 0
5841 { &hf_aecp_media_format,
5842 {"Media Format", "ieee17221.media_format",
5843 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5845 #endif
5847 { &hf_aecp_video_format,
5848 {"Video Format", "ieee17221.video_format",
5849 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5852 { &hf_aecp_sampling_rate_pull,
5853 { "Sampling Rate Pull Value", "ieee17221.sampling_rate_pull",
5854 FT_UINT32, BASE_HEX, VALS(aecp_sampling_rate_pull_field_vals), AECP_SAMPLING_RATE_PULL_MASK, NULL, HFILL }
5857 { &hf_aecp_sampling_rate_base_frequency,
5858 {"Sampling Rate Base Frequency", "ieee17221.sampling_rate_base_frequency",
5859 FT_UINT32, BASE_DEC, NULL, AECP_SAMPLING_RATE_BASE_FREQ_MASK, NULL, HFILL }
5862 /* REGISTER_STATE_NOTIFICATION */
5863 #if 0
5864 { &hf_aecp_address_type,
5865 {"Address Type", "ieee17221.address_type",
5866 FT_UINT16, BASE_HEX, VALS(aecp_address_type_vals), 0x00, NULL, HFILL }
5868 #endif
5869 { &hf_aecp_mac_address,
5870 { "MAC address", "ieee17221.mac_address",
5871 FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL }
5873 #if 0
5874 { &hf_aecp_ipv4_address,
5875 {"IPV4 Address", "ieee17221.ipv4_address",
5876 FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }
5878 { &hf_aecp_ipv6_address,
5879 {"IPv6 Address", "ieee17221.ipv6_address",
5880 FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL }
5882 #endif
5884 /* DEREGISTER_STATE_NOTIFICATION */
5886 /* REGISTER_QUERY_NOTIFICATION / DEREGISTER_QUERY_NOTIFICATION */
5887 #if 0
5888 { &hf_aecp_query_period,
5889 {"Query Period (ms)", "ieee17221.query_period",
5890 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5892 { &hf_aecp_query_limit,
5893 {"Query Limit", "ieee17221.query_limit",
5894 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5896 { &hf_aecp_query_type,
5897 {"Query Type", "ieee17221.query_type",
5898 FT_UINT16, BASE_HEX, VALS(aecp_command_type_vals), 0x00, NULL, HFILL }
5900 { &hf_aecp_query_id,
5901 {"Query ID", "ieee17221.query_id",
5902 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5904 #endif
5906 /* IDENTIFY_NOTIFICATION */
5908 /* STATE_CHANGE_NOTIFICATION */
5909 #if 0
5910 { &hf_aecp_count,
5911 {"Count", "ieee17221.count",
5912 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5914 { &hf_aecp_descriptors,
5915 {"Descriptors Array", "ieee17221.descriptors",
5916 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
5919 /* INCREMENT_CONTROL_VALUE / DECREMENT_CONTROL_VALUE */
5920 { &hf_aecp_values_count,
5921 {"Values Count", "ieee17221.values_count",
5922 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5924 #endif
5926 /* START_OPERATION */
5927 { &hf_aecp_operation_id,
5928 {"Operation ID", "ieee17221.operation_id",
5929 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5931 { &hf_aecp_operation_type,
5932 {"Operation Type", "ieee17221.operation_type",
5933 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
5934 },/* draft spec says this is defined by control_type field *
5935 * start_operation does not include a control type field *
5936 * There is an operation type table 7.83 that has not *
5937 * yet been defined. control_type may be part of a *
5938 * descriptor; will check */
5940 /* ABORT_OPERATION */
5942 /* OPERATION_STATUS */
5943 { &hf_aecp_percent_complete,
5944 {"Percent Complete", "ieee17221.percent_complete",
5945 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5948 /* AUTH_GET_KEY_COUNT */
5950 /* * AVDECC ENTITY MODEL DESCRIPTOR FIELDS * */
5952 /* ENTITY */
5953 /* hf_aecp_descriptor_type */
5954 /* hf_aecp_descriptor_index */
5955 { &hf_aem_entity_id,
5956 {"Entity ID", "ieee17221.entity_id",
5957 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5959 { &hf_aem_entity_model_id,
5960 {"Entity Model ID", "ieee17221.entity_model_id",
5961 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
5963 /* hf_adp_entity_cap
5964 * hf_adp_entity_cap_avdecc_ip
5965 * hf_adp_entity_cap_zero_conf
5966 * hf_adp_entity_cap_gateway_entity
5967 * hf_adp_entity_cap_avdecc_control
5968 * hf_adp_entity_cap_legacy_avc
5969 * hf_adp_entity_cap_assoc_id_support
5970 * hf_adp_entity_cap_assoc_id_valid
5972 /* hf_adp_talker_stream_srcs */
5973 /* hf_adp_talker_cap & flags */
5974 /* hf_adp_listener_stream_sinks */
5975 /* hf_adp_listener_cap & flags */
5976 /* hf_adp_controller_cap & flags */
5977 /* hf_adp_avail_index */
5978 /* where appropriate use adp values */
5979 { &hf_aem_entity_name,
5980 {"Entity Name", "ieee17221.entity_name",
5981 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
5983 { &hf_aem_vendor_name_string,
5984 {"Vendor Name String (ptr)", "ieee17221.vendor_name_string",
5985 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5987 { &hf_aem_model_name_string,
5988 {"Model Name String (ptr)", "ieee17221.model_name_string",
5989 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
5991 { &hf_aem_firmware_version,
5992 {"Firmware Version", "ieee17221.firmware_version",
5993 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
5995 { &hf_aem_group_name,
5996 {"Group Name", "ieee17221.group_name",
5997 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
5999 { &hf_aem_serial_number,
6000 {"Serial Number", "ieee17221.serial_number",
6001 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6003 { &hf_aem_configurations_count,
6004 {"Configurations Count", "ieee17221.configurations_count",
6005 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6007 { &hf_aem_current_configuration,
6008 {"Current Configuration", "ieee17221.current_configuration",
6009 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6012 /* CONFIGURATION */
6013 { &hf_aem_configuration_name,
6014 {"Object Name", "ieee17221.configuration_name",
6015 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6017 { &hf_aem_configuration_name_string,
6018 {"Localized Description", "ieee17221.configuration_name_string",
6019 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6021 { &hf_aem_descriptor_counts_count,
6022 {"Descriptor Counts Count", "ieee17221.descriptor_counts_count",
6023 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6025 { &hf_aem_descriptor_counts_offset,
6026 {"Descriptor Counts Offset", "ieee17221.descriptor_counts_offset",
6027 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6029 { &hf_aem_count,
6030 {"Count", "ieee17221.count",
6031 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6034 /* AUDIO */
6035 { &hf_aem_number_of_stream_input_ports,
6036 {"Number Of Stream Input Ports", "ieee17221.number_of_stream_input_ports",
6037 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6039 { &hf_aem_base_stream_input_port,
6040 {"Base Stream Input Port", "ieee17221.base_stream_input_port",
6041 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6043 { &hf_aem_number_of_stream_output_ports,
6044 {"Number Of Stream Output Ports", "ieee17221.number_of_stream_output_ports",
6045 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6047 { &hf_aem_base_stream_output_port,
6048 {"Base Stream Output Port", "ieee17221.base_stream_output_port",
6049 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6051 { &hf_aem_number_of_external_input_ports,
6052 {"Number Of External Input Ports", "ieee17221.number_of_external_input_ports",
6053 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6055 { &hf_aem_base_external_input_port,
6056 {"Base External Input Port", "ieee17221.base_external_input_port",
6057 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6059 { &hf_aem_number_of_external_output_ports,
6060 {"Number Of External Output Ports", "ieee17221.number_of_external_output_ports",
6061 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6063 { &hf_aem_base_external_output_port,
6064 {"Base External Output Port", "ieee17221.base_external_output_port",
6065 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6067 { &hf_aem_number_of_internal_input_ports,
6068 {"Number Of Internal Input Ports", "ieee17221.number_of_internal_input_ports",
6069 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6071 { &hf_aem_base_internal_input_port,
6072 {"Base Internal Input Port", "ieee17221.base_internal_input_port",
6073 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6075 { &hf_aem_number_of_internal_output_ports,
6076 {"Number Of Internal Output Ports", "ieee17221.number_of_internal_output_ports",
6077 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6079 { &hf_aem_base_internal_output_port,
6080 {"Base Internal Output Port", "ieee17221.base_internal_output_port",
6081 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6083 { &hf_aem_clock_source_id,
6084 {"Clock Source ID", "ieee17221.clock_source_id",
6085 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6087 { &hf_aem_clock_domain_id,
6088 {"Clock Domain ID", "ieee17221.clock_domain_id",
6089 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6091 { &hf_aem_clock_sources_offset,
6092 {"Clock Sources Offset", "ieee17221.clock_sources_offset",
6093 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6095 { &hf_aem_clock_source_index,
6096 {"Clock Source Index", "ieee17221.clock_source_index",
6097 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6099 { &hf_aem_clock_sources_count,
6100 {"Clock Sources Count", "ieee17221.clock_sources_count",
6101 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6103 { &hf_aem_clock_sources,
6104 {"Clock Sources", "ieee17221.clock_sources",
6105 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6107 { &hf_aem_clock_sources_array,
6108 {"Clock Sources Array", "ieee17221.clock_sources_array",
6109 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6111 { &hf_aem_number_of_controls,
6112 {"Number Of Controls", "ieee17221.number_of_controls",
6113 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6115 { &hf_aem_base_control,
6116 {"Base Control", "ieee17221.base_control",
6117 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6119 { &hf_aem_number_control_blocks,
6120 {"Number Of Control Blocks", "ieee17221.number_of_control_blocks",
6121 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6123 { &hf_aem_base_control_block,
6124 {"Base Control Block", "ieee17221.base_control_block",
6125 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6127 { &hf_aem_object_name,
6128 {"Object Name", "ieee17221.object_name",
6129 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6131 { &hf_aem_localized_description,
6132 {"Localized Description", "ieee17221.localized_description",
6133 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6135 { &hf_aem_current_sample_rate,
6136 {"Current Sample Rate", "ieee17221.current_sample_rate",
6137 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6139 { &hf_aem_number_signal_selectors,
6140 {"Number of Signal Selectors", "ieee17221.num_signal_selectors",
6141 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6143 { &hf_aem_base_signal_selector,
6144 {"Base Signal Selector", "ieee17221.base_signal_selector",
6145 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6147 { &hf_aem_number_mixers,
6148 {"Number of Mixers", "ieee17221.num_mixers",
6149 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6151 { &hf_aem_base_mixer,
6152 {"Base Mixer", "ieee17221.base_mixer",
6153 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6155 { &hf_aem_number_matrices,
6156 {"Number of Matrices", "ieee17221.num_matrices",
6157 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6159 { &hf_aem_base_matrix,
6160 {"Base Matrix", "ieee17221.base_matrix",
6161 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6163 { &hf_aem_number_splitters,
6164 {"Number of Splitters", "ieee17221.num_splitters",
6165 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6167 { &hf_aem_base_splitter,
6168 {"Base Splitter", "ieee17221.base_splitter",
6169 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6171 { &hf_aem_number_combiners,
6172 {"Number of Combiners", "ieee17221.num_combiners",
6173 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6175 { &hf_aem_base_combiner,
6176 {"Base Combiner", "ieee17221.base_combiner",
6177 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6179 { &hf_aem_number_demultiplexers,
6180 {"Number of Demultiplexers", "ieee17221.num_demultiplexer",
6181 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6183 { &hf_aem_base_demultiplexer,
6184 {"Base Demultiplexer", "ieee17221.base_demultiplexer",
6185 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6187 { &hf_aem_number_multiplexers,
6188 {"Number of Multiplexers", "ieee17221.num_multiplexers",
6189 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6191 { &hf_aem_base_multiplexer,
6192 {"Base Multiplexer", "ieee17221.base_multiplexer",
6193 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6195 { &hf_aem_number_transcoders,
6196 {"Number of Transcoders", "ieee17221.num_transcoders",
6197 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6199 { &hf_aem_base_transcoder,
6200 {"Base Transcoder", "ieee17221.base_transcoder",
6201 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6203 /* sample rate is 3 bit pull field multiplier and 29 bit base freq in Hz */
6204 { &hf_aem_sample_rates_offset,
6205 {"Sample Rates Offset", "ieee17221.sample_rates_offset",
6206 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6208 { &hf_aem_sample_rates_count,
6209 {"Sample Rates Count", "ieee17221.sample_rates_count",
6210 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6212 { &hf_aem_sample_rates,
6213 {"Sample Rates", "ieee17221.sample_rates",
6214 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6217 { &hf_aem_base_frequency,
6218 {"Base Frequency", "ieee17221.base_frequency",
6219 FT_UINT32, BASE_DEC, NULL, AEM_BASE_FREQUENCY_MASK, NULL, HFILL }
6221 { &hf_aem_pull_field,
6222 {"Pull Field (frequency multiplier)", "ieee17221.pull_field",
6223 FT_UINT8, BASE_HEX, VALS(aem_frequency_multiplier_type_vals), AEM_PULL_FIELD_MASK, NULL, HFILL }
6226 /* VIDEO */
6228 /* SENSOR */
6230 /* STREAM_INPUT */
6231 /* STREAM_OUTPUT */
6232 { &hf_aem_stream_name,
6233 {"Object Name", "ieee17221.stream_name",
6234 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6236 { &hf_aem_stream_name_string,
6237 {"Localized Description", "ieee17221.stream_name_string",
6238 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6240 { &hf_aem_stream_flags,
6241 {"Stream Flags", "ieee17221.stream_flags",
6242 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6244 { &hf_aem_flags_clock_sync_source,
6245 {"Clock Sync Source Flag", "ieee17221.flags.clock_sync_source",
6246 FT_BOOLEAN, 16, NULL, AEM_CLOCK_SYNC_SOURCE_FLAG_MASK, NULL, HFILL }
6248 { &hf_aem_flags_class_a,
6249 {"Class A Flag", "ieee17221.flags.class_a",
6250 FT_BOOLEAN, 16, NULL, AEM_CLASS_A_FLAG_MASK, NULL, HFILL }
6252 { &hf_aem_flags_class_b,
6253 {"Class B Flag", "ieee17221.flags.class_b",
6254 FT_BOOLEAN, 16, NULL, AEM_CLASS_B_FLAG_MASK, NULL, HFILL }
6256 #if 0
6257 { &hf_aem_stream_channels,
6258 {"Stream Channels", "ieee17221.stream_channels",
6259 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6261 #endif
6262 { &hf_aem_formats_offset,
6263 {"Formats Offset", "ieee17221.formats_offset",
6264 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6266 { &hf_aem_number_of_formats,
6267 {"Number Of Formats", "ieee17221.number_of_formats",
6268 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6270 { &hf_aem_backup_talker_guid_0,
6271 {"Primary Backup Talker GUID", "ieee17221.backup_talker_guid_0",
6272 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6274 { &hf_aem_backup_talker_unique_0,
6275 {"Primary Backup Talker Unique ID", "ieee17221.backup_talker_unique_0",
6276 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6278 { &hf_aem_backup_talker_guid_1,
6279 {"Secondary Backup Talker GUID", "ieee17221.backup_talker_guid_1",
6280 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6282 { &hf_aem_backup_talker_unique_1,
6283 {"Secondary Backup Talker Unique ID", "ieee17221.backup_talker_unique_1",
6284 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6286 { &hf_aem_backup_talker_guid_2,
6287 {"Tertiary Backup Talker GUID", "ieee17221.backup_talker_guid_2",
6288 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6290 { &hf_aem_backup_talker_unique_2,
6291 {"Tertiary Backup Talker Unique ID", "ieee17221.backup_talker_unique_2",
6292 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6294 { &hf_aem_backedup_talker_guid,
6295 {"Backedup Talker GUID", "ieee17221.backedup_talker_guid",
6296 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6298 { &hf_aem_backedup_talker_unique,
6299 {"Backedup Talker Unique ID", "ieee17221.backedup_talker_unique",
6300 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6302 { &hf_aem_avb_interface_id,
6303 {"AVB Interface ID", "ieee17221.avb_interface_id",
6304 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6306 { &hf_aem_buffer_length,
6307 {"Buffer Length", "ieee17221.buffer_length",
6308 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6311 /* array head. uses ett_aem_stream_formats */
6312 { &hf_aem_stream_formats,
6313 {"Stream Formats Array", "ieee17221.stream_formats",
6314 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6317 /* EXTERNAL_JACK_INPUT */
6318 /* EXTERNAL_JACK_OUTPUT*/
6319 { &hf_aem_jack_name,
6320 {"Object Name", "ieee17221.jack_name",
6321 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6323 { &hf_aem_jack_name_string,
6324 {"Localized Description", "ieee17221.jack_name_string",
6325 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6327 { &hf_aem_interface_name,
6328 {"Interface Name", "ieee17221.interface_name",
6329 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6331 { &hf_aem_interface_name_string,
6332 {"Interface Name String", "ieee17221.interface_name_string",
6333 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6335 { &hf_aem_jack_flags,
6336 {"Jack Flags", "ieee17221.jack_flags",
6337 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6339 { &hf_aem_flags_captive,
6340 {"Captive Flag", "ieee17221.flags.captive",
6341 FT_BOOLEAN, 16, NULL, AEM_CAPTIVE_FLAG_MASK, NULL, HFILL }
6343 { &hf_aem_jack_type,
6344 {"Jack Type", "ieee17221.jack_type",
6345 FT_UINT16, BASE_HEX, VALS(aem_jack_type_vals), 0x00, NULL, HFILL }
6347 /* AUDIO_PORT_INPUT */
6348 /* AUDIO_PORT_OUTPUT */
6349 { &hf_aem_port_flags,
6350 {"Port Flags", "ieee17221.port_flags",
6351 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6353 { &hf_aem_flags_async_sample_rate_conv,
6354 {"Asynchronous Sample Rate Converter Flag", "ieee17221.flags.async_sample_rate_conv",
6355 FT_BOOLEAN, 16, NULL, AEM_ASYNC_SAMPLE_RATE_CONV_FLAG_MASK, NULL, HFILL }
6357 { &hf_aem_flags_sync_sample_rate_conv,
6358 {"Synchronous Sample Rate Converter Flag", "ieee17221.flags.sync_sample_rate_conv",
6359 FT_BOOLEAN, 16, NULL, AEM_SYNC_SAMPLE_RATE_CONV_FLAG_MASK, NULL, HFILL }
6361 #if 0
6362 { &hf_aem_audio_channels,
6363 {"Audio Channels", "ieee17221.audio_channels",
6364 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6366 #endif
6367 { &hf_aem_number_of_clusters,
6368 {"Number of Clusters", "ieee17221.number_of_clusters",
6369 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6371 { &hf_aem_base_cluster,
6372 {"Base Cluster", "ieee17221.base_cluster",
6373 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6375 { &hf_aem_base_audio_map,
6376 {"Base Audio Map", "ieee17221.base_audio_map",
6377 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6379 { &hf_aem_number_audio_maps,
6380 {"Number of Audio Maps", "ieee17221.num_audio_maps",
6381 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6383 /* VIDEO_PORT_INPUT */
6384 /* VIDEO_PORT_OUTPUT */
6385 #if 0
6386 { &hf_aem_stream_id,
6387 {"Stream Descriptor ID", "ieee17221.stream_descriptor_id",
6388 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6390 { &hf_aem_formats_count,
6391 {"Formats Count", "ieee17221.formats_count",
6392 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6394 #endif
6396 /* EXTERNAL_PORT_INPUT */
6397 /* EXTERNAL_PORT_OUTPUT */
6398 { &hf_aem_jack_id,
6399 {"Jack ID", "ieee17221.jack_id",
6400 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6402 /* SENSOR_PORT_INPUT */
6403 /* SENSOR_PORT_OUTPUT */
6404 /* INTERNAL_PORT_INPUT */
6405 /* INTERNAL_PORT_OUTPUT */
6406 #if 0
6407 { &hf_aem_internal_id,
6408 {"Internal ID", "ieee17221.internal_id",
6409 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6411 #endif
6412 /* AVB_INTERFACE */
6413 { &hf_aem_avb_interface_flags,
6414 {"Interface Flags", "ieee17221.interface_flags",
6415 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6417 { &hf_aem_avb_clock_identity,
6418 {"Clock Identity", "ieee17221.clock_identity",
6419 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6421 { &hf_aem_avb_priority1,
6422 {"Priority1", "ieee17221.priority1",
6423 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6425 { &hf_aem_avb_clock_class,
6426 {"Clock Class", "ieee17221.clock_class",
6427 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6429 { &hf_aem_avb_offset_scaled_log_variance,
6430 {"Scaled Log Variance", "ieee17221.offset_scaled_log_variance",
6431 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6433 { &hf_aem_avb_clock_accuracy,
6434 {"Clock Accuracy", "ieee17221.clock_accuracy",
6435 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6437 { &hf_aem_avb_priority2,
6438 {"Priority2", "ieee17221.priority2",
6439 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6441 { &hf_aem_avb_domain_number,
6442 {"Domain Number", "ieee17221.domain_number",
6443 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6445 { &hf_aem_avb_log_sync_interval,
6446 {"Log sync Interval", "ieee17221.log_sync_interval",
6447 FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6449 #if 0
6450 { &hf_aem_avb_propagation_delay,
6451 {"Propagation Delay", "ieee17221.propagation_delay",
6452 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6454 #endif
6456 /* CLOCK_SOURCE */
6457 { &hf_aem_clock_source_name,
6458 {"Object Name", "ieee17221.clock_source_name",
6459 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6461 { &hf_aem_clock_source_name_string,
6462 {"Localized Description", "ieee17221.clock_source_name_string",
6463 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6465 { &hf_aem_clock_source_flags,
6466 {"Clock Source Flags", "ieee17221.clock_source_flags",
6467 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6468 }, /* no flags currently defined */
6469 { &hf_aem_clock_source_type,
6470 {"Clock Source Type", "ieee17221.clock_source_type",
6471 FT_UINT16, BASE_HEX, VALS(aem_clock_source_type_vals), 0x00, NULL, HFILL }
6473 { &hf_aem_clock_source_location_type,
6474 {"Clock Source Location Type", "ieee17221.clock_source_location_type",
6475 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
6477 { &hf_aem_clock_source_location_id,
6478 {"Clock Source Location ID", "ieee17221.clock_source_location_id",
6479 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6481 /* AUDIO_MAP */
6482 { &hf_aem_mappings_offset,
6483 {"Mappings Offset", "ieee17221.mappings_offset",
6484 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6486 { &hf_aem_number_of_mappings,
6487 {"Number of Mappings", "ieee17221.number_of_mappings",
6488 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6490 { &hf_aem_mappings,
6491 {"Mappings", "ieee17221.mappings",
6492 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6494 { &hf_aem_mapping_stream_index,
6495 {"Mapping Stream Index", "ieee17221.mapping_stream_index",
6496 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6498 { &hf_aem_mapping_stream_channel,
6499 {"Mapping Stream Channel", "ieee17221.mapping_stream_channel",
6500 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6502 { &hf_aem_mapping_cluster_offset,
6503 {"Mapping Cluster Offset", "ieee17221.mapping_cluster_offset",
6504 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6506 { &hf_aem_mapping_cluster_channel,
6507 {"Mapping Cluster Channel", "ieee17221.mapping_cluster_channel",
6508 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6510 /* AUDIO_CLUSTER */
6511 { &hf_aem_channel_count,
6512 {"Channel Count", "ieee17221.channel_count",
6513 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6515 { &hf_aem_path_latency,
6516 {"Path Latency", "ieee17221.path_latency",
6517 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6519 { &hf_aem_am824_label,
6520 {"AM824 Label", "ieee17221.am824_label",
6521 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6523 #if 0
6524 { &hf_aem_cluster_name,
6525 {"Cluster Name", "ieee17221.cluster_name",
6526 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6528 { &hf_aem_cluster_name_string,
6529 {"Cluster Name String", "ieee17221.cluster_name_string",
6530 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6532 #endif
6534 /* CONTROL */
6535 { &hf_aem_control_type,
6536 {"Control Type", "ieee17221.control_type",
6537 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6539 #if 0
6540 { &hf_aem_control_location_type,
6541 {"Control Location Type", "ieee17221.control_location_type",
6542 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
6544 { &hf_aem_control_location_id,
6545 {"Control Location ID", "ieee17221.control_location_id",
6546 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6548 #endif
6549 { &hf_aem_control_value_type,
6550 {"Control Value Type", "ieee17221.control_value_type",
6551 FT_UINT16, BASE_HEX, VALS(aem_control_value_type_vals), 0x00, NULL, HFILL }
6553 { &hf_aem_control_domain,
6554 {"Control Domain", "ieee17221.control_domain",
6555 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6557 { &hf_aem_values_offset,
6558 {"Values Offset", "ieee17221.values_offset",
6559 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6561 { &hf_aem_number_of_values,
6562 {"Number Of Values", "ieee17221.number_of_values",
6563 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6565 { &hf_aem_control_latency,
6566 {"Control Latency", "ieee17221.control_latency",
6567 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6570 /* SIGNAL_SELECTOR */
6571 #if 0
6572 { &hf_aem_sources_offset,
6573 {"Sources Offset", "ieee17221.sources_offset",
6574 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6576 { &hf_aem_current_signal_type,
6577 {"Current Signal Type", "ieee17221.current_signal_type",
6578 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
6580 { &hf_aem_current_signal_id,
6581 {"Current Signal ID", "ieee17221.current_signal_id",
6582 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6584 { &hf_aem_default_signal_type,
6585 {"Default Signal Type", "ieee17221.default_signal_type",
6586 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
6588 { &hf_aem_default_signal_id,
6589 {"Default Signal ID", "ieee17221.default_signal_id",
6590 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6592 #endif
6593 { &hf_aem_block_latency,
6594 {"Block Latency", "ieee17221.block_latency",
6595 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6597 { &hf_aem_reset_time,
6598 {"Reset Time", "ieee17221.reset_time",
6599 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6601 { &hf_aem_signal_type,
6602 {"Signal Type", "ieee17221.signal_type",
6603 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
6605 { &hf_aem_signal_index,
6606 {"Signal Index", "ieee17221.signal_index",
6607 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6609 { &hf_aem_signal_output,
6610 {"Signal Output", "ieee17221.signal_output",
6611 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6614 /* MIXER */
6615 #if 0
6616 { &hf_aem_number_of_sources,
6617 {"Number of Sources", "ieee17221.number_of_sources",
6618 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6620 { &hf_aem_value_offset,
6621 {"Value Offset", "ieee17221.value_offset",
6622 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6625 /* MATRIX */
6626 { &hf_aem_width,
6627 {"Width", "ieee17221.width",
6628 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6630 { &hf_aem_height,
6631 {"Height", "ieee17221.height",
6632 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6634 { &hf_aem_base_source,
6635 {"Base Source", "ieee17221.base_source",
6636 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6638 { &hf_aem_number_destinations,
6639 {"Number of Destinations", "ieee17221.num_destinations",
6640 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6642 { &hf_aem_base_destination,
6643 {"Base Destination", "ieee17221.base_destination",
6644 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6646 #endif
6648 /* LOCALE */
6649 { &hf_aem_locale_identifier,
6650 {"Locale Identifier", "ieee17221.locale_identifier",
6651 FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }
6653 { &hf_aem_number_of_strings,
6654 {"Number of Strings", "ieee17221.number_of_strings",
6655 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6657 { &hf_aem_base_strings,
6658 {"Base Strings", "ieee17221.base_strings",
6659 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6662 /* STRINGS */
6663 { &hf_aem_string,
6664 {"String", "ieee17221.string",
6665 FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }
6668 /* MATRIX SIGNAL */
6669 { &hf_aem_signals_count,
6670 {"Signals Count", "ieee17221.signals_count",
6671 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6673 { &hf_aem_signals_offset,
6674 {"Signals Offset", "ieee17221.signals_offset",
6675 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6678 /* MEMORY OBJECT */
6679 { &hf_aem_memory_object_type,
6680 {"Memory Object Type", "ieee17221.memory_object_type",
6681 FT_UINT16, BASE_HEX, VALS(aem_memory_object_type_vals), 0x00, NULL, HFILL }
6683 { &hf_aem_target_descriptor_type,
6684 {"Target Descriptor Type", "ieee17221.target_descriptor_type",
6685 FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL }
6687 { &hf_aem_target_descriptor_id,
6688 {"Target Descriptor ID", "ieee17221.target_descriptor_id",
6689 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6691 { &hf_aem_start_address,
6692 {"Start Address", "ieee17221.start_address",
6693 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6695 { &hf_aem_length,
6696 {"Length", "ieee17221.length",
6697 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6701 /* CONTROL VALUE TYPES */
6702 { &hf_aem_ctrl_int8,
6703 {"Control INT8", "ieee17221.ctrl_int8",
6704 FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6706 { &hf_aem_ctrl_uint8,
6707 {"Control UINT8", "ieee17221.ctrl_uint8",
6708 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6710 { &hf_aem_ctrl_int16,
6711 {"Control INT16", "ieee17221.ctrl_int16",
6712 FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6714 { &hf_aem_ctrl_uint16,
6715 {"Control UINT16", "ieee17221.ctrl_uint16",
6716 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6718 { &hf_aem_ctrl_int32,
6719 {"Control INT32", "ieee17221.ctrl_int32",
6720 FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6722 { &hf_aem_ctrl_uint32,
6723 {"Control UINT32", "ieee17221.ctrl_uint32",
6724 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6726 { &hf_aem_ctrl_int64,
6727 {"Control INT64", "ieee17221.ctrl_int64",
6728 FT_INT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6730 { &hf_aem_ctrl_uint64,
6731 {"Control UINT64", "ieee17221.ctrl_uint64",
6732 FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL }
6734 { &hf_aem_ctrl_float,
6735 {"Control FLOAT", "ieee17221.ctrl_float",
6736 FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }
6738 { &hf_aem_ctrl_double,
6739 {"Control DOUBLE", "ieee17221.ctrl_double",
6740 FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6742 { &hf_aem_ctrl_vals,
6743 {"Control Values", "ieee17221.ctrl_vals",
6744 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6746 { &hf_aem_unit,
6747 {"Control Value Units", "ieee17221.units",
6748 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6750 { &hf_aem_string_ref,
6751 {"String Reference", "ieee17221.string_ref",
6752 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6754 { &hf_aem_guid,
6755 {"GUID", "ieee17221.guid",
6756 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6758 { &hf_aem_blob_size,
6759 {"Blob Size", "ieee17221.blob_size",
6760 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
6762 { &hf_aem_binary_blob,
6763 {"Binary Blob", "ieee17221.binary_blob",
6764 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6766 { &hf_aem_sources,
6767 {"Sources", "ieee17221.sources",
6768 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6770 { &hf_aem_unknown_descriptor,
6771 {"Unknown or Malformed Descriptor", "ieee17221.unknown_descriptor",
6772 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6774 { &hf_aem_frequency,
6775 {"Frequency", "ieee17221.frequency",
6776 FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL }
6779 /* AEM MEDIA FORMAT FIELDS */
6780 /* Standard media formats are defined by always having the 24 most significant bits
6781 * of the EUI64 set to 0x90e0f0
6783 #if 0
6784 { &hf_aem_oui24,
6785 {"OUI-24", "ieee17221.oui24",
6786 FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL }
6788 { &hf_aem_mfd_type,
6789 {"MFD Type", "ieee17221.mfd_type",
6790 FT_UINT8, BASE_HEX, VALS(aem_mfd_type_vals), 0x00, NULL, HFILL }
6792 { &hf_aem_div,
6793 {"Div Flag", "ieee17221.div",
6794 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
6796 { &hf_aem_interlace,
6797 {"Interlace Flag", "ieee17221.interlace",
6798 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL }
6800 { &hf_aem_channels,
6801 {"Video Channel Count", "ieee17221.channels",
6802 FT_UINT8, BASE_DEC, NULL, AEM_MASK_CHANNELS, NULL, HFILL }
6804 { &hf_aem_color_format,
6805 {"Color Format", "ieee17221.color_format",
6806 FT_UINT16, BASE_HEX, VALS(aem_color_format_type_vals), AEM_MASK_COLOR_FORMAT, NULL, HFILL }
6808 { &hf_aem_bpp,
6809 {"Bits Per Pixel", "ieee17221.bpp",
6810 FT_UINT8, BASE_DEC, NULL, AEM_MASK_BPP, NULL, HFILL }
6812 { &hf_aem_aspect_x,
6813 {"Aspect X", "ieee17221.aspect_x",
6814 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6816 { &hf_aem_aspect_y,
6817 {"Aspect Y", "ieee17221.aspect_y",
6818 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6820 { &hf_aem_frame_rate,
6821 {"Frame Rate", "ieee17221.frame_rate",
6822 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6824 { &hf_aem_comp1,
6825 {"Comp 1", "ieee17221.comp1",
6826 FT_UINT16, BASE_DEC, NULL, AEM_MASK_COMP1, NULL, HFILL }
6828 { &hf_aem_comp2,
6829 {"Comp 2", "ieee17221.comp2",
6830 FT_UINT8, BASE_DEC, NULL, AEM_MASK_COMP2, NULL, HFILL }
6832 { &hf_aem_comp3,
6833 {"Comp 3", "ieee17221.comp3",
6834 FT_UINT16, BASE_DEC, NULL, AEM_MASK_COMP3, NULL, HFILL }
6836 { &hf_aem_comp4,
6837 {"Comp 4", "ieee17221.comp4",
6838 FT_UINT8, BASE_DEC, NULL, AEM_MASK_COMP4, NULL, HFILL }
6840 { &hf_aem_mf_width,
6841 {"Width", "ieee17221.width",
6842 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6844 { &hf_aem_mf_height,
6845 {"Height", "ieee17221.height",
6846 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6848 { &hf_aem_cs_eui64,
6849 {"CS EUI64", "ieee17221.cs_eui64",
6850 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6852 #endif
6853 /* BEGIN STREAM FORMAT (SF) FIELDS */
6854 { &hf_aem_stream_format,
6855 {"Stream Format", "ieee17221.stream_format",
6856 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL }
6858 { &hf_aem_sf_version,
6859 {"Version", "ieee17221.sf_version",
6860 FT_UINT8, BASE_HEX, NULL, AEM_MASK_SF_VERSION, NULL, HFILL }
6862 { &hf_aem_sf_subtype,
6863 {"Subtype", "ieee17221.sf_subtype",
6864 FT_UINT8, BASE_HEX, NULL, AEM_MASK_SF_SUBTYPE, NULL, HFILL }
6867 { &hf_aem_sf,
6868 {"SF", "ieee17221.sf",
6869 FT_BOOLEAN, 8, NULL, AEM_MASK_SF, NULL, HFILL }
6871 { &hf_aem_iidc_format,
6872 {"IIDC Format", "ieee17221.iidc_format",
6873 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6875 { &hf_aem_iidc_mode,
6876 {"IIDC Mode", "ieee17221.iidc_mode",
6877 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6879 { &hf_aem_iidc_rate,
6880 {"IIDC Rate", "ieee17221.iidc_rate",
6881 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6883 { &hf_aem_fmt,
6884 {"FMT", "ieee17221.fmt",
6885 FT_UINT8, BASE_HEX, NULL, AEM_MASK_FMT, NULL, HFILL }
6887 { &hf_aem_fdf_evt,
6888 {"FDF EVT", "ieee17221.fdf_evt",
6889 FT_UINT8, BASE_HEX, NULL, AEM_MASK_FDF_EVT, NULL, HFILL }
6891 { &hf_aem_fdf_sfc,
6892 {"FDF SFC", "ieee17221.fdf_sfc",
6893 FT_UINT8, BASE_HEX, NULL, AEM_MASK_FDF_SFC, NULL, HFILL }
6895 { &hf_aem_dbs,
6896 {"DBS", "ieee17221.dbs",
6897 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6899 { &hf_aem_b_flag,
6900 {"Blocking Flag", "ieee17221.flags.b",
6901 FT_BOOLEAN, 8, NULL, AEM_MASK_B, NULL, HFILL }
6903 { &hf_aem_nb_flag,
6904 {"NonBlocking Flag", "ieee17221.flags.nb",
6905 FT_BOOLEAN, 8, NULL, AEM_MASK_NB, NULL, HFILL }
6907 { &hf_aem_label_iec_60958_cnt,
6908 {"Label IEC 60958 Count", "ieee17221.label_iec_60958_cnt",
6909 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6911 { &hf_aem_label_mbla_cnt,
6912 {"Label Multi-Bit Linear Audio Count", "ieee17221.label_mbla_cnt",
6913 FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
6915 { &hf_aem_label_midi_cnt,
6916 {"Label Midi Slot Count", "ieee17221.label_midi_cnt",
6917 FT_UINT8, BASE_DEC, NULL, AEM_MASK_LABEL_MIDI_CNT, NULL, HFILL }
6919 { &hf_aem_label_smpte_cnt,
6920 {"Label SMPTE Slot Count", "ieee17221.label_smpte_cnt",
6921 FT_UINT8, BASE_DEC, NULL, AEM_MASK_LABEL_SMPTE_CNT, NULL, HFILL }
6923 { &hf_aem_video_mode,
6924 {"Video Mode", "ieee17221.video_mode",
6925 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6927 { &hf_aem_compress_mode,
6928 {"Compress Mode", "ieee17221.compress_mode",
6929 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
6931 { &hf_aem_color_space,
6932 {"Color Space", "ieee17221.color_space",
6933 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL }
6935 #if 0
6936 { &hf_aecp_values,
6937 {"Values", "ieee17221.values",
6938 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }
6940 #endif
6941 { &hf_aecp_status_code,
6942 {"Status", "ieee17221.status",
6943 FT_UINT8, BASE_HEX, VALS(aem_status_type_vals), AECP_STATUS_CODE_MASK, NULL, HFILL }
6945 /* END STREAM FORMAT (SF) FIELDS */
6947 /* SET/GET_STREAM_BACKUP */
6948 { &hf_aecp_backup_talker_entity_id_0,
6949 {"Backup Talker Entity ID 0", "ieee17221.backup_talker_entity_id_0",
6950 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6952 { &hf_aecp_backup_talker_unique_id_0,
6953 {"Backup Talker Unique ID 0", "ieee17221.backup_talker_unique_id_0",
6954 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6956 { &hf_aecp_backup_talker_entity_id_1,
6957 {"Backup Talker Entity ID 1", "ieee17221.backup_talker_entity_id_1",
6958 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6960 { &hf_aecp_backup_talker_unique_id_1,
6961 {"Backup Talker Unique ID 1", "ieee17221.backup_talker_unique_id_1",
6962 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6964 { &hf_aecp_backup_talker_entity_id_2,
6965 {"Backup Talker Entity ID 2", "ieee17221.backup_talker_entity_id_2",
6966 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6968 { &hf_aecp_backup_talker_unique_id_2,
6969 {"Backup Talker Unique ID 2", "ieee17221.backup_talker_unique_id_2",
6970 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6972 { &hf_aecp_backedup_talker_entity_id,
6973 {"Backed up Talker Entity ID", "ieee17221.backedup_talker_entity_id",
6974 FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL }
6976 { &hf_aecp_backedup_talker_unique_id,
6977 {"Backedup Talker Unique ID", "ieee17221.backedup_talker_unique_id",
6978 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
6980 { &hf_aecp_vendor_unique_protocol_id,
6981 {"Vendor Unique Protocol ID", "ieee17221.protocol_id",
6982 FT_UINT48, BASE_HEX, NULL, 0x0, NULL, HFILL }
6986 /* Setup protocol subtree array */
6987 static int *ett[] = {
6988 &ett_17221,
6989 &ett_adp_ent_cap,
6990 &ett_adp_talk_cap,
6991 &ett_adp_list_cap,
6992 &ett_adp_cont_cap,
6993 /* &ett_adp_aud_format, */
6994 &ett_adp_samp_rates,
6995 &ett_adp_chan_format,
6996 &ett_acmp_flags,
6997 &ett_aem_desc_counts,
6998 &ett_aem_descriptor,
6999 &ett_aem_sample_rates,
7000 &ett_aem_stream_flags,
7001 &ett_aem_clock_sources,
7002 &ett_aem_stream_formats,
7003 &ett_aem_jack_flags,
7004 &ett_aem_port_flags,
7005 &ett_aecp_get_avb_info_msrp_mappings,
7006 &ett_aecp_get_as_path_sequences,
7007 &ett_aem_clock_source_flags,
7008 &ett_aem_mappings,
7009 &ett_aem_ctrl_vals,
7010 &ett_aem_sources,
7011 /* &ett_aem_media_format, */
7012 &ett_aecp_descriptors,
7013 &ett_aecp_flags_32,
7014 &ett_aem_stream_format,
7017 /* Register the protocol name and description */
7018 proto_17221 = proto_register_protocol("IEEE 1722.1 Protocol", "IEEE1722.1", "ieee17221");
7019 avb17221_handle = register_dissector("ieee17221", dissect_17221, proto_17221);
7021 /* Required function calls to register the header fields and subtrees used */
7022 proto_register_field_array(proto_17221, hf, array_length(hf));
7023 proto_register_subtree_array(ett, array_length(ett));
7025 /* Register the custom handler for vendor specific messages */
7026 vendor_unique_protocol_dissector_table = register_dissector_table("ieee17221.protocol_id", "Vendor Unique Protocol ID", proto_17221, FT_STRING, STRING_CASE_SENSITIVE);
7029 void
7030 proto_reg_handoff_17221(void)
7032 dissector_add_uint("ieee1722.subtype", 0xFA, avb17221_handle);
7033 dissector_add_uint("ieee1722.subtype", 0xFB, avb17221_handle);
7034 dissector_add_uint("ieee1722.subtype", 0xFC, avb17221_handle);
7038 * Editor modelines - https://www.wireshark.org/tools/modelines.html
7040 * Local variables:
7041 * c-basic-offset: 3
7042 * tab-width: 8
7043 * indent-tabs-mode: nil
7044 * End:
7046 * vi: set shiftwidth=3 tabstop=8 expandtab:
7047 * :indentSize=3:tabSize=8:noTabs=true: