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