/* packet-ieee17221.c * Dissector for IEEE P1722.1 * Copyright 2011-2013, Thomas Bottom * Chris Pane * Chris Wulff * * Copyright 2011, Andy Lucas * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later * */ /* DEV NOTES * This file uses 3 space indentation */ #include "config.h" #include void proto_register_17221(void); void proto_reg_handoff_17221(void); static dissector_handle_t avb17221_handle; /* 17221 Offsets */ #define P1722_HEADER_OFFSET 12 /* 1722.1 ADP Offsets */ #define ADP_CD_OFFSET 0 #define ADP_VERSION_OFFSET 1 #define ADP_VALID_TIME_OFFSET 2 #define ADP_CD_LENGTH_OFFSET 3 #define ADP_ENTITY_ID_OFFSET 4 #define ADP_ENTITY_MODEL_ID_OFFSET P1722_HEADER_OFFSET+0 #define ADP_ENTITY_CAP_OFFSET P1722_HEADER_OFFSET+8 #define ADP_TALKER_STREAM_SRCS_OFFSET P1722_HEADER_OFFSET+12 #define ADP_TALKER_CAP_OFFSET P1722_HEADER_OFFSET+14 #define ADP_LISTENER_STREAM_SINKS_OFFSET P1722_HEADER_OFFSET+16 #define ADP_LISTENER_CAP_OFFSET P1722_HEADER_OFFSET+18 #define ADP_CONTROLLER_CAP_OFFSET P1722_HEADER_OFFSET+20 #define ADP_AVAIL_INDEX_OFFSET P1722_HEADER_OFFSET+24 #define ADP_AS_GM_ID_OFFSET P1722_HEADER_OFFSET+28 #define ADP_GPTP_DOMAIN_NUMBER_OFFSET P1722_HEADER_OFFSET+36 #define ADP_IDENTIFY_CONTROL_INDEX P1722_HEADER_OFFSET+40 #define ADP_INTERFACE_INDEX P1722_HEADER_OFFSET+42 #define ADP_ASSOC_ID_OFFSET P1722_HEADER_OFFSET+44 /* Bit Field Masks */ #define ADP_MSG_TYPE_MASK 0x0f #define ADP_VALID_TIME_MASK 0xf8 #define ADP_CD_LENGTH_MASK 0x07ff /* message_type */ #define ADP_ENTITY_AVAILABLE_MESSAGE 0x00 #define ADP_ENTITY_DEPARTING_MESSAGE 0x01 #define ADP_ENTITY_DISCOVER_MESSAGE 0x02 /* entity_capabilities_flags */ #define ADP_EFU_MODE_BITMASK 0x00000001 #define ADP_ADDRESS_ACCESS_BITMASK 0x00000002 #define ADP_GATEWAY_ENTITY_BITMASK 0x00000004 #define ADP_AEM_SUPPORTED_BITMASK 0x00000008 #define ADP_LEGACY_AVC_BITMASK 0x00000010 #define ADP_ASSOC_ID_SUPPORT_BITMASK 0x00000020 #define ADP_ASSOC_ID_VALID_BITMASK 0x00000040 #define ADP_VENDOR_UNIQUE_BITMASK 0x00000080 #define ADP_CLASS_A_SUPPORTED_BITMASK 0x00000100 #define ADP_CLASS_B_SUPPORTED_BITMASK 0x00000200 #define ADP_AS_SUPPORTED_BITMASK 0x00000400 /* talker capabilities flags */ #define ADP_TALK_IMPLEMENTED_BITMASK 0x0001 #define ADP_TALK_OTHER_SRC_BITMASK 0x0200 #define ADP_TALK_CONTROL_SRC_BITMASK 0x0400 #define ADP_TALK_MEDIA_CLK_SRC_BITMASK 0x0800 #define ADP_TALK_SMPTE_SRC_BITMASK 0x1000 #define ADP_TALK_MIDI_SRC_BITMASK 0x2000 #define ADP_TALK_AUDIO_SRC_BITMASK 0x4000 #define ADP_TALK_VIDEO_SRC_BITMASK 0x8000 /* listener capabilities flags */ #define ADP_LIST_IMPLEMENTED_BITMASK 0x0001 #define ADP_LIST_OTHER_SINK_BITMASK 0x0200 #define ADP_LIST_CONTROL_SINK_BITMASK 0x0400 #define ADP_LIST_MEDIA_CLK_SINK_BITMASK 0x0800 #define ADP_LIST_SMPTE_SINK_BITMASK 0x1000 #define ADP_LIST_MIDI_SINK_BITMASK 0x2000 #define ADP_LIST_AUDIO_SINK_BITMASK 0x4000 #define ADP_LIST_VIDEO_SINK_BITMASK 0x8000 /* Controller capabilities flags */ #define ADP_CONT_IMPLEMENTED_BITMASK 0x0001 #define ADP_CONT_LAYER3_PROXY_BITMASK 0x0002 /* Default audio formats fields */ #define ADP_DEF_AUDIO_SAMPLE_RATES_MASK 0xFC #define ADP_DEF_AUDIO_MAX_CHANS_MASK 0x03FC #define ADP_DEF_AUDIO_SAF_MASK 0x0002 #define ADP_DEF_AUDIO_FLOAT_MASK 0x0001 /* Default sample rates flags */ #define ADP_SAMP_RATE_44K1_BITMASK 0x01<<2 #define ADP_SAMP_RATE_48K_BITMASK 0x02<<2 #define ADP_SAMP_RATE_88K2_BITMASK 0x04<<2 #define ADP_SAMP_RATE_96K_BITMASK 0x08<<2 #define ADP_SAMP_RATE_176K4_BITMASK 0x10<<2 #define ADP_SAMP_RATE_192K_BITMASK 0x20<<2 /* channel_formats flags */ #define ADP_CHAN_FORMAT_MONO (0x00000001) #define ADP_CHAN_FORMAT_2CH (0x00000002) #define ADP_CHAN_FORMAT_3CH (0x00000004) #define ADP_CHAN_FORMAT_4CH (0x00000008) #define ADP_CHAN_FORMAT_5CH (0x00000010) #define ADP_CHAN_FORMAT_6CH (0x00000020) #define ADP_CHAN_FORMAT_7CH (0x00000040) #define ADP_CHAN_FORMAT_8CH (0x00000080) #define ADP_CHAN_FORMAT_10CH (0x00000100) #define ADP_CHAN_FORMAT_12CH (0x00000200) #define ADP_CHAN_FORMAT_14CH (0x00000400) #define ADP_CHAN_FORMAT_16CH (0x00000800) #define ADP_CHAN_FORMAT_18CH (0x00001000) #define ADP_CHAN_FORMAT_20CH (0x00002000) #define ADP_CHAN_FORMAT_22CH (0x00004000) #define ADP_CHAN_FORMAT_24CH (0x00008000) /******************************************************************************/ /* 1722.1 ACMP Offsets */ #define ACMP_CD_OFFSET 0 #define ACMP_VERSION_OFFSET 1 #define ACMP_STATUS_FIELD_OFFSET 2 #define ACMP_CD_LENGTH_OFFSET 2 #define ACMP_STREAM_ID_OFFSET 4 #define ACMP_CONTROLLER_GUID_OFFSET 12 #define ACMP_TALKER_GUID_OFFSET 20 #define ACMP_LISTENER_GUID_OFFSET 28 #define ACMP_TALKER_UNIQUE_ID_OFFSET 36 #define ACMP_LISTENER_UNIQUE_ID_OFFSET 38 #define ACMP_DEST_MAC_OFFSET 40 #define ACMP_CONNECTION_COUNT_OFFSET 46 #define ACMP_SEQUENCE_ID_OFFSET 48 #define ACMP_FLAGS_OFFSET 50 #define ACMP_VLAN_ID_OFFSET 52 /* Bit Field Masks */ #define ACMP_MSG_TYPE_MASK 0x0F #define ACMP_STATUS_FIELD_MASK 0xF8 #define ACMP_CD_LENGTH_MASK 0x07FF /* message_type */ #define ACMP_CONNECT_TX_COMMAND 0 #define ACMP_CONNECT_TX_RESPONSE 1 #define ACMP_DISCONNECT_TX_COMMAND 2 #define ACMP_DISCONNECT_TX_RESPONSE 3 #define ACMP_GET_TX_STATE_COMMAND 4 #define ACMP_GET_TX_STATE_RESPONSE 5 #define ACMP_CONNECT_RX_COMMAND 6 #define ACMP_CONNECT_RX_RESPONSE 7 #define ACMP_DISCONNECT_RX_COMMAND 8 #define ACMP_DISCONNECT_RX_RESPONSE 9 #define ACMP_GET_RX_STATE_COMMAND 10 #define ACMP_GET_RX_STATE_RESPONSE 11 #define ACMP_GET_TX_CONNECTION_COMMAND 12 #define ACMP_GET_TX_CONNECTION_RESPONSE 13 /* status_field */ #define ACMP_STATUS_SUCCESS 0 #define ACMP_STATUS_LISTENER_UNKNOWN_ID 1 #define ACMP_STATUS_TALKER_UNKNOWN_ID 2 #define ACMP_STATUS_TALKER_DEST_MAC_FAIL 3 #define ACMP_STATUS_TALKER_NO_STREAM_INDEX 4 #define ACMP_STATUS_TALKER_NO_BANDWIDTH 5 #define ACMP_STATUS_TALKER_EXCLUSIVE 6 #define ACMP_STATUS_LISTENER_TALKER_TIMEOUT 7 #define ACMP_STATUS_LISTENER_EXCLUSIVE 8 #define ACMP_STATUS_STATE_UNAVAILABLE 9 #define ACMP_STATUS_NOT_CONNECTED 10 #define ACMP_STATUS_NO_SUCH_CONNECTION 11 #define ACMP_STATUS_COULD_NOT_SEND_MESSAGE 12 #define ACMP_STATUS_DEFAULT_SET_DIFFERENT 15 #define ACMP_STATUS_NOT_SUPPORTED 31 /* ACMP flags */ #define ACMP_FLAG_CLASS_B_BITMASK 0x0001 #define ACMP_FLAG_FAST_CONNECT_BITMASK 0x0002 #define ACMP_FLAG_SAVED_STATE_BITMASK 0x0004 #define ACMP_FLAG_STREAMING_WAIT_BITMASK 0x0008 #define ACMP_FLAG_SUPPORTS_ENCRYPTED_BITMASK 0x0010 #define ACMP_FLAG_ENCRYPTED_PDU_BITMASK 0x0020 #define ACMP_FLAG_TALKER_FAILED_BITMASK 0x0040 /******************************************************************************/ /* AECP Common Offsets */ #define AECP_OFFSET_VERSION 1 #define AECP_OFFSET_CD_LENGTH 2 #define AECP_OFFSET_TARGET_GUID 4 #define AECP_OFFSET_CONTROLLER_GUID 12 #define AECP_OFFSET_SEQUENCE_ID 20 #define AECP_OFFSET_U_FLAG 22 #define AECP_OFFSET_COMMAND_TYPE 22 #define AECP_OFFSET_STATUS_CODE 2 /* AECP Address Access Command Specific Offsets */ #define AECP_AA_OFFSET_COUNT 22 #define AECP_AA_OFFSET_TLVS_START 24 /* AECP AEM Command Specific Offsets */ /* Note that these values include the 12 byte common header */ /* ACQUIRE_ENTITY */ #define AECP_OFFSET_ACQUIRE_ENTITY_FLAGS 24 #define AECP_OFFSET_ACQUIRE_ENTITY_OWNER_GUID 28 #define AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_TYPE 36 #define AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_INDEX 38 /* LOCK_ENTITY */ #define AECP_OFFSET_LOCK_ENTITY_FLAGS 24 #define AECP_OFFSET_LOCK_ENTITY_LOCKED_GUID 28 /* READ/WRITE_DESCRIPTOR */ #define AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX 24 #define AECP_OFFSET_DESCRIPTOR_DESCRIPTOR 28 #define AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_TYPE 28 #define AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_INDEX 30 /* GET/SET_CONFIGURATION */ #define AECP_OFFSET_CONFIGURATION_CONFIGURATION_INDEX 26 /* GET/SET_STREAM_FORMAT */ #define AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_STREAM_FORMAT_STREAM_FORMAT 28 /* GET/SET_VIDEO_FORMAT */ #define AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_VIDEO_FORMAT_FORMAT_SPECIFIC 28 #define AECP_OFFSET_VIDEO_FORMAT_ASPECT_RATIO 32 #define AECP_OFFSET_VIDEO_FORMAT_COLOR_SPACE 34 #define AECP_OFFSET_VIDEO_FORMAT_FRAME_SIZE 36 /* GET/SET_SENSOR_FORMAT */ #define AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_SENSOR_FORMAT_SENSOR_FORMAT 28 /* GET/SET_STREAM_INFO */ #define AECP_OFFSET_STREAM_INFO_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_STREAM_INFO_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_STREAM_INFO_FLAGS 28 #define AECP_OFFSET_STREAM_INFO_STREAM_FORMAT 32 #define AECP_OFFSET_STREAM_INFO_STREAM_ID 40 #define AECP_OFFSET_STREAM_INFO_MSRP_ACCUMULATED_LATENCY 48 #define AECP_OFFSET_STREAM_INFO_STREAM_DEST_MAC 52 #define AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_CODE 58 #define AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_BRIDGE_ID 60 /** #define AECP_OFFSET_STREAM_INFO_STREAM_VLAN_ID 68 **/ /* GET/SET_NAME */ #define AECP_OFFSET_NAME_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_NAME_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_NAME_NAME_INDEX 28 #define AECP_OFFSET_NAME_CONFIGURATION_INDEX 30 #define AECP_OFFSET_NAME_NAME 32 /* GET/SET_ASSOCIATION_ID */ #define AECP_OFFSET_ASSOCIATION_ID_ASSOCIATION_ID 24 /* GET/SET_SAMPLING_RATE */ #define AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE 28 /* GET/SET_CLOCK_SOURCE */ #define AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_CLOCK_SOURCE_CLOCK_SOURCE_INDEX 28 /* GET/SET_CONTROL, GET/SET_MIXER */ #define AECP_OFFSET_CONTROL_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_CONTROL_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_CONTROL_VALUES 28 /* INCREMENT/DECREMENT_CONTROL */ #define AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_INCDEC_CONTROL_INDEX_COUNT 28 #define AECP_OFFSET_INCDEC_CONTROL_INDEX_LIST 32 /* GET/SET_SIGNAL_SELECTOR */ #define AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_TYPE 28 #define AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_INDEX 30 #define AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_OUTPUT 32 /* GET/SET_MATRIX */ #define AECP_OFFSET_MATRIX_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_MATRIX_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_MATRIX_MATRIX_COLUMN 28 #define AECP_OFFSET_MATRIX_MATRIX_ROW 30 #define AECP_OFFSET_MATRIX_REGION_WIDTH 32 #define AECP_OFFSET_MATRIX_REGION_HEIGHT 34 #define AECP_OFFSET_MATRIX_REP 36 #define AECP_OFFSET_MATRIX_DIRECTION 36 #define AECP_OFFSET_MATRIX_VALUE_COUNT 36 #define AECP_OFFSET_MATRIX_ITEM_OFFSET 38 #define AECP_OFFSET_MATRIX_VALUES 40 /* START/STOP_STREAMING */ #define AECP_OFFSET_STREAMING_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_STREAMING_DESCRIPTOR_INDEX 26 /* REGISTER/DEREGISTER_UNSOLICITED_NOTIFICATION */ /* No additional fields */ /* IDENTIFY_NOTIFICATION */ #define AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_INDEX 26 /* GET_AVB_INFO */ #define AECP_OFFSET_AVB_INFO_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_AVB_INFO_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_AVB_INFO_AS_GRANDMASTER_ID 28 #define AECP_OFFSET_AVB_INFO_PROPAGATION_DELAY 36 #define AECP_OFFSET_AVB_INFO_AS_DOMAIN_NUMBER 40 #define AECP_OFFSET_AVB_INFO_FLAGS 41 #define AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS_COUNT 42 #define AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS 44 /* GET_AS_PATH */ #define AECP_OFFSET_AS_PATH_DESCRIPTOR_INDEX 24 #define AECP_OFFSET_AS_PATH_COUNT 26 #define AECP_OFFSET_AS_PATH_PATH_SEQUENCE 28 /* GET_COUNTERS */ #define AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_COUNTERS_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_COUNTERS_VALID 28 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_UP 32 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_DOWN 36 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_TX 40 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_RX 44 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_RX_CRC_ERROR 48 #define AECP_OFFSET_COUNTERS_AVB_INTERFACE_GPTP_GM_CHANGED 52 #define AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_LOCKED 32 #define AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_UNLOCKED 36 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_LOCKED 32 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_UNLOCKED 36 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_STREAM_RESET 40 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_SEQ_NUM_MISMATCH 44 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_RESET 48 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_UNCERTAIN 52 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_VALID 56 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_NOT_VALID 60 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_UNSUPPORTED_FORMAT 64 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_LATE_TIMESTAMP 68 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_EARLY_TIMESTAMP 72 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_TX 76 #define AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_RX 80 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_8 128 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_7 132 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_6 136 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_5 140 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_4 144 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_3 148 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_2 152 #define AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_1 156 /* GET_AUDIO_MAP, GET_VIDEO_MAP, GET_SENSOR_MAP */ #define AECP_OFFSET_MAP_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_MAP_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_MAP_MAP_INDEX 28 #define AECP_OFFSET_MAP_NUMBER_OF_MAPS 30 #define AECP_OFFSET_MAP_NUMBER_OF_MAPPINGS 32 #define AECP_OFFSET_MAP_MAPPINGS 36 /* ADD/REMOVE_AUDIO_MAPPINGS, ADD/REMOVE_VIDEO_MAPPINGS, ADD/REMOVE_SENSOR_MAPPINGS */ #define AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_ADDREM_MAP_NUMBER_OF_MAPPINGS 28 #define AECP_OFFSET_ADDREM_MAP_MAPPINGS 32 /* START_OPERATION */ #define AECP_OFFSET_START_OPERATION_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_START_OPERATION_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_START_OPERATION_OPERATION_ID 28 #define AECP_OFFSET_START_OPERATION_OPERATION_TYPE 30 #define AECP_OFFSET_START_OPERATION_VALUES 32 /* ABORT_OPERATION */ #define AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_ABORT_OPERATION_OPERATION_ID 28 /* OPERATION_STATUS */ #define AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_OPERATION_STATUS_OPERATION_ID 28 #define AECP_OFFSET_OPERATION_STATUS_PERCENT_COMPLETE 30 /* AUTH_ADD/DELETE_KEY, AUTH_GET_KEY */ #define AECP_OFFSET_AUTH_KEY_KEY_EUI 24 #define AECP_OFFSET_AUTH_KEY_KEY_TYPE 32 #define AECP_OFFSET_AUTH_KEY_KEY_LENGTH 32 #define AECP_OFFSET_AUTH_KEY_KEY 36 /* AUTH_GET_KEY_LIST */ #define AECP_OFFSET_AUTH_GET_KEY_LIST_KEYCHAIN_ID 24 #define AECP_OFFSET_AUTH_GET_KEY_LIST_NUMBER_OF_KEYS 24 /* AUTH_ADD_KEY_TO_KEYCHAIN, AUTH_DELETE_KEY_FROM_KEYCHAIN */ #define AECP_OFFSET_AUTH_KEYCHAIN_KEYCHAIN_ID 24 #define AECP_OFFSET_AUTH_KEYCHAIN_KEY_EUI 28 /* AUTH_GET_KEYCHAIN_LIST */ #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_KEYCHAIN_ID 24 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_LIST_INDEX 26 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_LISTS 28 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_KEYS 30 #define AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_KEY_EUIS 32 /* AUTH_GET_IDENTITY */ #define AECP_OFFSET_AUTH_GET_IDENTITY_KEY_GUID 24 #define AECP_OFFSET_AUTH_GET_IDENTITY_SIGNATURE 32 /* AUTH_ADD/DELETE_TOKEN */ #define AECP_OFFSET_AUTH_TOKEN_TOKEN_LENGTH 24 #define AECP_OFFSET_AUTH_TOKEN_AUTHENTICATION_TOKEN 28 /* AUTHENTICATE/DEAUTHENTICATE */ #define AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH 28 #define AECP_OFFSET_AUTHENTICATE_AUTH_TOKEN 32 /* ENABLE/DISABLE_TRANSPORT_SECURITY */ #define AECP_OFFSET_TRANSPORT_SECURITY_KEY_EUI 24 /* ENABLE/DISABLE_STREAM_ENCRYPTION */ #define AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_STREAM_ENCRYPTION_KEY_EUI 28 /* Set/Get Stream Backup */ #define AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_TYPE 24 #define AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_INDEX 26 #define AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_0 28 #define AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_0 36 #define AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_1 40 #define AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_1 48 #define AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_2 52 #define AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_2 60 #define AECP_OFFSET_STREAM_BACKEDUP_TALKER_ENTITY_ID 64 #define AECP_OFFSET_STREAM_BACKEDUP_TALKER_UNIQUE_ID 72 /* aecp_message_type */ /* 1722.1 draft 2011-11-14 table 9.1 */ #define AECP_AEM_COMMAND_MESSAGE 0 #define AECP_AEM_RESPONSE_MESSAGE 1 #define AECP_ADDRESS_ACCESS_COMMAND_MESSAGE 2 #define AECP_ADDRESS_ACCESS_RESPONSE_MESSAGE 3 #define AECP_AVC_COMMAND_MESSAGE 4 #define AECP_AVC_RESPONSE_MESSAGE 5 #define AECP_VENDOR_UNIQUE_COMMAND_MESSAGE 6 #define AECP_VENDOR_UNIQUE_RESPONSE_MESSAGE 7 #define AECP_EXTENDED_COMMAND_MESSAGE 14 #define AECP_EXTENDED_RESPONSE_MESSAGE 15 /* aecp status field */ /* 1722.1 draft 2011-11-14 table 9.2 */ #define AECP_STATUS_SUCCESS 0 #define AECP_STATUS_NOT_IMPLEMENTED 1 /* AECP Address Type */ /* 1722.1 draft 2011-11-14 sec 7.4.35.1 table 7.82 */ #define AECP_ADDRESS_MAC 0x0000 #define AECP_ADDRESS_IPV4 0x0001 #define AECP_ADDRESS_IPV6 0x0002 /* AECP Direction Field Values */ /* 1722.1 draft 2011-11-14 table 7.78 */ #define AECP_DIRECTION_HORIZONTAL 0 #define AECP_DIRECTION_VERTICAL 1 /* AECP Keychain Type Values */ /* 1722.1 draft 2011-11-14 table 7.80 */ #define AECP_KEYCHAIN_NONE 0x0 #define AECP_KEYCHAIN_MANUFACTURER 0x1 #define AECP_KEYCHAIN_PRODUCT 0x2 #define AECP_KEYCHAIN_ENTITY 0x3 #define AECP_KEYCHAIN_USER 0x4 /* AECP Command Codes */ /* IEEE 1722.1 draft D21 Table 7.126 */ #define AECP_COMMAND_ACQUIRE_ENTITY 0x0000 #define AECP_COMMAND_LOCK_ENTITY 0x0001 #define AECP_COMMAND_ENTITY_AVAILABLE 0x0002 #define AECP_COMMAND_CONTROLLER_AVAILABLE 0x0003 #define AECP_COMMAND_READ_DESCRIPTOR 0x0004 #define AECP_COMMAND_WRITE_DESCRIPTOR 0x0005 #define AECP_COMMAND_SET_CONFIGURATION 0x0006 #define AECP_COMMAND_GET_CONFIGURATION 0x0007 #define AECP_COMMAND_SET_STREAM_FORMAT 0x0008 #define AECP_COMMAND_GET_STREAM_FORMAT 0x0009 #define AECP_COMMAND_SET_VIDEO_FORMAT 0x000a #define AECP_COMMAND_GET_VIDEO_FORMAT 0x000b #define AECP_COMMAND_SET_SENSOR_FORMAT 0x000c #define AECP_COMMAND_GET_SENSOR_FORMAT 0x000d #define AECP_COMMAND_SET_STREAM_INFO 0x000e #define AECP_COMMAND_GET_STREAM_INFO 0x000f #define AECP_COMMAND_SET_NAME 0x0010 #define AECP_COMMAND_GET_NAME 0x0011 #define AECP_COMMAND_SET_ASSOCIATION_ID 0x0012 #define AECP_COMMAND_GET_ASSOCIATION_ID 0x0013 #define AECP_COMMAND_SET_SAMPLING_RATE 0x0014 #define AECP_COMMAND_GET_SAMPLING_RATE 0x0015 #define AECP_COMMAND_SET_CLOCK_SOURCE 0x0016 #define AECP_COMMAND_GET_CLOCK_SOURCE 0x0017 #define AECP_COMMAND_SET_CONTROL_VALUE 0x0018 #define AECP_COMMAND_GET_CONTROL_VALUE 0x0019 #define AECP_COMMAND_INCREMENT_CONTROL 0x001a #define AECP_COMMAND_DECREMENT_CONTROL 0x001b #define AECP_COMMAND_SET_SIGNAL_SELECTOR 0x001c #define AECP_COMMAND_GET_SIGNAL_SELECTOR 0x001d #define AECP_COMMAND_SET_MIXER 0x001e #define AECP_COMMAND_GET_MIXER 0x001f #define AECP_COMMAND_SET_MATRIX 0x0020 #define AECP_COMMAND_GET_MATRIX 0x0021 #define AECP_COMMAND_START_STREAMING 0x0022 #define AECP_COMMAND_STOP_STREAMING 0x0023 #define AECP_COMMAND_REGISTER_UNSOL_NOTIFICATION 0x0024 #define AECP_COMMAND_DEREGISTER_UNSOL_NOTIFICATION 0x0025 #define AECP_COMMAND_IDENTIFY_NOTIFICATION 0x0026 #define AECP_COMMAND_GET_AVB_INFO 0x0027 #define AECP_COMMAND_GET_AS_PATH 0x0028 #define AECP_COMMAND_GET_COUNTERS 0x0029 #define AECP_COMMAND_REBOOT 0x002a #define AECP_COMMAND_GET_AUDIO_MAP 0x002b #define AECP_COMMAND_ADD_AUDIO_MAPPINGS 0x002c #define AECP_COMMAND_REMOVE_AUDIO_MAPPINGS 0x002d #define AECP_COMMAND_GET_VIDEO_MAP 0x002e #define AECP_COMMAND_ADD_VIDEO_MAPPINGS 0x002f #define AECP_COMMAND_REMOVE_VIDEO_MAPPINGS 0x0030 #define AECP_COMMAND_GET_SENSOR_MAP 0x0031 #define AECP_COMMAND_ADD_SENSOR_MAPPINGS 0x0032 #define AECP_COMMAND_REMOVE_SENSOR_MAPPINGS 0x0033 #define AECP_COMMAND_START_OPERATION 0x0034 #define AECP_COMMAND_ABORT_OPERATION 0x0035 #define AECP_COMMAND_OPERATION_STATUS 0x0036 #define AECP_COMMAND_AUTH_ADD_KEY 0x0037 #define AECP_COMMAND_AUTH_DELETE_KEY 0x0038 #define AECP_COMMAND_AUTH_GET_KEY_LIST 0x0039 #define AECP_COMMAND_AUTH_GET_KEY 0x003a #define AECP_COMMAND_AUTH_ADD_KEY_TO_CHAIN 0x003b #define AECP_COMMAND_AUTH_DELETE_KEY_FROM_CHAIN 0x003c #define AECP_COMMAND_AUTH_GET_KEYCHAIN_LIST 0x003d #define AECP_COMMAND_AUTH_GET_IDENTITY 0x003e #define AECP_COMMAND_AUTH_ADD_TOKEN 0x003f #define AECP_COMMAND_AUTH_DELETE_TOKEN 0x0040 #define AECP_COMMAND_AUTHENTICATE 0x0041 #define AECP_COMMAND_DEAUTHENTICATE 0x0042 #define AECP_COMMAND_ENABLE_TRANSPORT_SECURITY 0x0043 #define AECP_COMMAND_DISABLE_TRANSPORT_SECURITY 0x0044 #define AECP_COMMAND_ENABLE_STREAM_ENCRYPTION 0x0045 #define AECP_COMMAND_DISABLE_STREAM_ENCRYPTION 0x0046 #define AECP_COMMAND_SET_STREAM_BACKUP 0x0049 #define AECP_COMMAND_GET_STREAM_BACKUP 0x004a /* 0x002e - 0x7ffe RESERVED for future use */ #define AECP_COMMAND_EXPANSION 0x7fff /* reserved */ /* AEM common format packet STATUS field values */ /* IEEE 1722.1 draft D21 Table 7.127 */ #define AEM_STATUS_SUCCESS 0 #define AEM_STATUS_NOT_IMPLEMENTED 1 #define AEM_STATUS_NO_SUCH_DESCRIPTOR 2 #define AEM_STATUS_ENTITY_LOCKED 3 #define AEM_STATUS_ENTITY_ACQUIRED 4 #define AEM_STATUS_NOT_AUTHENTICATED 5 #define AEM_STATUS_AUTHENTICATION_DISABLED 6 #define AEM_STATUS_BAD_ARGUMENTS 7 #define AEM_STATUS_NO_RESOURCES 8 #define AEM_STATUS_IN_PROGRESS 9 #define AEM_STATUS_ENTITY_MISBEHAVING 10 #define AEM_STATUS_NOT_SUPPORTED 11 #define AEM_STATUS_STREAM_IS_RUNNING 12 /* 10 - 31 RESERVED */ /* AEM descriptor indices */ /* IEEE 1722.1 draft D21 TABLE 7.1 */ #define AEM_DESCRIPTOR_ENTITY 0x0000 #define AEM_DESCRIPTOR_CONFIGURATION 0x0001 #define AEM_DESCRIPTOR_AUDIO_UNIT 0x0002 #define AEM_DESCRIPTOR_VIDEO_UNIT 0x0003 #define AEM_DESCRIPTOR_SENSOR_UNIT 0x0004 #define AEM_DESCRIPTOR_STREAM_INPUT 0x0005 #define AEM_DESCRIPTOR_STREAM_OUTPUT 0x0006 #define AEM_DESCRIPTOR_JACK_INPUT 0x0007 #define AEM_DESCRIPTOR_JACK_OUTPUT 0x0008 #define AEM_DESCRIPTOR_AVB_INTERFACE 0x0009 #define AEM_DESCRIPTOR_CLOCK_SOURCE 0x000a #define AEM_DESCRIPTOR_MEMORY_OBJECT 0x000b #define AEM_DESCRIPTOR_LOCALE 0x000c #define AEM_DESCRIPTOR_STRINGS 0x000d #define AEM_DESCRIPTOR_STREAM_PORT_INPUT 0x000e #define AEM_DESCRIPTOR_STREAM_PORT_OUTPUT 0x000f #define AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT 0x0010 #define AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT 0x0011 #define AEM_DESCRIPTOR_INTERNAL_PORT_INPUT 0x0012 #define AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT 0x0013 #define AEM_DESCRIPTOR_AUDIO_CLUSTER 0x0014 #define AEM_DESCRIPTOR_VIDEO_CLUSTER 0x0015 #define AEM_DESCRIPTOR_SENSOR_CLUSTER 0x0016 #define AEM_DESCRIPTOR_AUDIO_MAP 0x0017 #define AEM_DESCRIPTOR_VIDEO_MAP 0x0018 #define AEM_DESCRIPTOR_SENSOR_MAP 0x0019 #define AEM_DESCRIPTOR_CONTROL 0x001a #define AEM_DESCRIPTOR_SIGNAL_SELECTOR 0x001b #define AEM_DESCRIPTOR_MIXER 0x001c #define AEM_DESCRIPTOR_MATRIX 0x001d #define AEM_DESCRIPTOR_MATRIX_SIGNAL 0x001e #define AEM_DESCRIPTOR_SIGNAL_SPLITTER 0x001f #define AEM_DESCRIPTOR_SIGNAL_COMBINER 0x0020 #define AEM_DESCRIPTOR_SIGNAL_DEMULTIPLEXER 0x0021 #define AEM_DESCRIPTOR_SIGNAL_MULTIPLEXER 0x0022 #define AEM_DESCRIPTOR_SIGNAL_TRANSCODER 0x0023 #define AEM_DESCRIPTOR_CLOCK_DOMAIN 0x0024 #define AEM_DESCRIPTOR_CONTROL_BLOCK 0x0025 #define AEM_DESCRIPTOR_INVALID 0xFFFF /* AEM JACK TYPES */ /* IEEE 1722.1 draft D21 TABLE 7.12 */ #define AEM_JACKTYPE_SPEAKER 0x0000 #define AEM_JACKTYPE_HEADPHONE 0x0001 #define AEM_JACKTYPE_ANALOG_MICROPHONE 0x0002 #define AEM_JACKTYPE_SPDIF 0x0003 #define AEM_JACKTYPE_ADAT 0x0004 #define AEM_JACKTYPE_TDIF 0x0005 #define AEM_JACKTYPE_MADI 0x0006 #define AEM_JACKTYPE_UNBALANCED_ANALOG 0x0007 #define AEM_JACKTYPE_BALANCED_ANALOG 0x0008 #define AEM_JACKTYPE_DIGITAL 0x0009 #define AEM_JACKTYPE_MIDI 0x000a #define AEM_JACKTYPE_AES_EBU 0x000b #define AEM_JACKTYPE_COMPOSITE_VIDEO 0x000c #define AEM_JACKTYPE_S_VHS_VIDEO 0x000d #define AEM_JACKTYPE_COMPONENT_VIDEO 0x000e #define AEM_JACKTYPE_DVI 0x000f #define AEM_JACKTYPE_HDMI 0x0010 #define AEM_JACKTYPE_UDI 0x0011 #define AEM_JACKTYPE_DISPLAYPORT 0x0012 #define AEM_JACKTYPE_ANTENNA 0x0013 #define AEM_JACKTYPE_ANALOG_TUNER 0x0014 #define AEM_JACKTYPE_ETHERNET 0x0015 #define AEM_JACKTYPE_WIFI 0x0016 #define AEM_JACKTYPE_USB 0x0017 #define AEM_JACKTYPE_PCI 0x0018 #define AEM_JACKTYPE_PCI_E 0x0019 #define AEM_JACKTYPE_SCSI 0x001a #define AEM_JACKTYPE_ATA 0x001b #define AEM_JACKTYPE_IMAGER 0x001c #define AEM_JACKTYPE_IR 0x001d #define AEM_JACKTYPE_THUNDERBOLT 0x001e #define AEM_JACKTYPE_SATA 0x001f #define AEM_JACKTYPE_SMPTE_LTC 0x0020 #define AEM_JACKTYPE_DIGITAL_MICROPHONE 0x0021 /* CONTROL TYPES */ /* IEEE 1722.1 draft D21 TABLE 7.94 */ #define AEM_CONTROL_ENABLE 0x90e0f00000000000 #define AEM_CONTROL_IDENTIFY 0x90e0f00000000001 #define AEM_CONTROL_MUTE 0x90e0f00000000002 #define AEM_CONTROL_INVERT 0x90e0f00000000003 #define AEM_CONTROL_GAIN 0x90e0f00000000004 #define AEM_CONTROL_ATTENUATE 0x90e0f00000000005 #define AEM_CONTROL_DELAY 0x90e0f00000000006 #define AEM_CONTROL_SRC_MODE 0x90e0f00000000007 #define AEM_CONTROL_SNAPSHOT 0x90e0f00000000008 #define AEM_CONTROL_POW_LINE_FREQ 0x90e0f00000000009 #define AEM_CONTROL_POWER_STATUS 0x90e0f0000000000a #define AEM_CONTROL_FAN_STATUS 0x90e0f0000000000b #define AEM_CONTROL_TEMPERATURE 0x90e0f0000000000c #define AEM_CONTROL_ALTITUDE 0x90e0f0000000000d #define AEM_CONTROL_ABSOLUTE_HUMIDITY 0x90e0f0000000000e #define AEM_CONTROL_RELATIVE_HUMIDITY 0x90e0f0000000000f #define AEM_CONTROL_ORIENTATION 0x90e0f00000000010 #define AEM_CONTROL_VELOCITY 0x90e0f00000000011 #define AEM_CONTROL_ACCELERATION 0x90e0f00000000012 #define AEM_CONTROL_FILTER_RESPONSE 0x90e0f00000000013 /* 0x90e0f00000000014 - 0x90e0f0000000ffff reserved */ #define AEM_CONTROL_PANPOT 0x90e0f00000010000 #define AEM_CONTROL_PHANTOM 0x90e0f00000010001 #define AEM_CONTROL_AUDIO_SCALE 0x90e0f00000010002 #define AEM_CONTROL_AUDIO_METERS 0x90e0f00000010003 #define AEM_CONTROL_AUDIO_SPECTRUM 0x90e0f00000010004 /* 0x90e0f00000010005 - 0x90e0f0000001ffff reserved */ #define AEM_CONTROL_SCANNING_MODE 0x90e0f00000020000 #define AEM_CONTROL_AUTO_EXP_MODE 0x90e0f00000020001 #define AEM_CONTROL_AUTO_EXP_PRIO 0x90e0f00000020002 #define AEM_CONTROL_EXP_TIME 0x90e0f00000020003 #define AEM_CONTROL_FOCUS 0x90e0f00000020004 #define AEM_CONTROL_FOCUS_AUTO 0x90e0f00000020005 #define AEM_CONTROL_IRIS 0x90e0f00000020006 #define AEM_CONTROL_ZOOM 0x90e0f00000020007 #define AEM_CONTROL_PRIVACY 0x90e0f00000020008 #define AEM_CONTROL_BACKLIGHT 0x90e0f00000020009 #define AEM_CONTROL_BRIGHTNESS 0x90e0f0000002000a #define AEM_CONTROL_CONTRAST 0x90e0f0000002000b #define AEM_CONTROL_HUE 0x90e0f0000002000c #define AEM_CONTROL_SATURATION 0x90e0f0000002000d #define AEM_CONTROL_SHARPNESS 0x90e0f0000002000e #define AEM_CONTROL_GAMMA 0x90e0f0000002000f #define AEM_CONTROL_WHITE_BAL_TEMP 0x90e0f00000020010 #define AEM_CONTROL_WHITE_BAL_TEMP_AUTO 0x90e0f00000020011 #define AEM_CONTROL_WHITE_BAL_COMP 0x90e0f00000020012 #define AEM_CONTROL_WHITE_BAL_COMP_AUTO 0x90e0f00000020013 #define AEM_CONTROL_DIGITAL_ZOOM 0x90e0f00000020014 /* 0x90e0f00000020015 - 0x90e0f0000002ffff reserved */ #define AEM_CONTROL_MEDIA_PLAYLIST 0x90e0f00000030000 #define AEM_CONTROL_MEDIA_PLAYLIST_NAME 0x90e0f00000030001 #define AEM_CONTROL_MEDIA_DISK 0x90e0f00000030002 #define AEM_CONTROL_MEDIA_DISK_NAME 0x90e0f00000030003 #define AEM_CONTROL_MEDIA_TRACK 0x90e0f00000030004 #define AEM_CONTROL_MEDIA_TRACK_NAME 0x90e0f00000030005 #define AEM_CONTROL_MEDIA_SPEED 0x90e0f00000030006 #define AEM_CONTROL_MEDIA_SAMPLE_POSITION 0x90e0f00000030007 #define AEM_CONTROL_MEDIA_PLAYBACK_TRANSPORT 0x90e0f00000030008 #define AEM_CONTROL_MEDIA_RECORD_TRANSPORT 0x90e0f00000030009 /* 0x90e0f0000003000a - 0x90e0f0000003ffff reserved */ #define AEM_CONTROL_FREQUENCY 0x90e0f00000040000 #define AEM_CONTROL_MODULATION 0x90e0f00000040001 #define AEM_CONTROL_POLARIZATION 0x90e0f00000040002 /* 0x90e0f00000040003 - 0x90e0f0ffffffffff reserved */ /* AEM Control Value Types */ /* IEEE 1722.1 draft D21 TABLE 7.106 */ #define AEM_CONTROL_LINEAR_INT8 0x0000 #define AEM_CONTROL_LINEAR_UINT8 0x0001 #define AEM_CONTROL_LINEAR_INT16 0x0002 #define AEM_CONTROL_LINEAR_UINT16 0x0003 #define AEM_CONTROL_LINEAR_INT32 0x0004 #define AEM_CONTROL_LINEAR_UINT32 0x0005 #define AEM_CONTROL_LINEAR_INT64 0x0006 #define AEM_CONTROL_LINEAR_UINT64 0x0007 #define AEM_CONTROL_LINEAR_FLOAT 0x0008 #define AEM_CONTROL_LINEAR_DOUBLE 0x0009 #define AEM_CONTROL_SELECTOR_INT8 0x000a #define AEM_CONTROL_SELECTOR_UINT8 0x000b #define AEM_CONTROL_SELECTOR_INT16 0x000c #define AEM_CONTROL_SELECTOR_UINT16 0x000d #define AEM_CONTROL_SELECTOR_INT32 0x000e #define AEM_CONTROL_SELECTOR_UINT32 0x000f #define AEM_CONTROL_SELECTOR_INT64 0x0010 #define AEM_CONTROL_SELECTOR_UINT64 0x0011 #define AEM_CONTROL_SELECTOR_FLOAT 0x0012 #define AEM_CONTROL_SELECTOR_DOUBLE 0x0013 #define AEM_CONTROL_SELECTOR_STRING 0x0014 #define AEM_CONTROL_ARRAY_INT8 0x0015 #define AEM_CONTROL_ARRAY_UINT8 0x0016 #define AEM_CONTROL_ARRAY_INT16 0x0017 #define AEM_CONTROL_ARRAY_UINT16 0x0018 #define AEM_CONTROL_ARRAY_INT32 0x0019 #define AEM_CONTROL_ARRAY_UINT32 0x001a #define AEM_CONTROL_ARRAY_INT64 0x001b #define AEM_CONTROL_ARRAY_UINT64 0x001c #define AEM_CONTROL_ARRAY_FLOAT 0x001d #define AEM_CONTROL_ARRAY_DOUBLE 0x001e #define AEM_CONTROL_UTF8 0x001f #define AEM_CONTROL_BODE_PLOT 0x0020 #define AEM_CONTROL_SMPTE_TIME 0x0021 #define AEM_CONTROL_SAMPLE_RATE 0x0022 #define AEM_CONTROL_GPTP_TIME 0x0023 /* 0x0024-0x3ffd RESERVED Reserved for future use. */ #define AEM_CONTROL_VENDOR 0x3ffe /* 0x3fff EXPANSION Reserved for future expansion. */ /* AEM CLOCK_SOURCE Types */ /* IEEE 1722.1 draft D21 TABLE 7.17 */ #define AEM_CLOCK_INTERNAL 0x0000 #define AEM_CLOCK_EXTERNAL 0x0001 #define AEM_CLOCK_INPUT_STREAM 0x0002 #define AEM_CLOCK_MEDIA_CLOCK_STREAM 0x0003 /* 0x0004-0xfffe RESERVED Reserved for future use. */ /* 0xffff EXPANSION Reserved for future expansion. */ /* AEM Stream Format Definitions */ /* IEEE 1722.1 draft D21 TABLE 7.65 */ #define IEC_61883_IIDC_SUBTYPE 0x00 #define MMA_SUBTYPE 0x01 #define AVTP_AUDIO_SUBTYPE 0x02 #define AVTP_VIDEO_SUBTYPE 0x03 #define AVTP_CONTROL_SUBTYPE 0x04 /* 0x05-0x7e RESERVED Reserved for future protocols. */ #define EXPERIMENTAL_SUBTYPE 0x7f /* AEM Descriptor Offsets */ /* IEEE 1722.1 draft D21 sections 7.2.1 - 7.2.33 */ #define AEM_OFFSET_DESCRIPTOR_TYPE 0 #define AEM_OFFSET_DESCRIPTOR_ID 2 #define ENTITY_OFFSET_ENTITY_GUID 4 #define ENTITY_OFFSET_ENTITY_MODEL_ID 12 #define ENTITY_OFFSET_ENTITY_CAPABILITIES 20 #define ENTITY_OFFSET_TALKER_STREAM_SOURCES 24 #define ENTITY_OFFSET_TALKER_CAPABILITIES 26 #define ENTITY_OFFSET_LISTENER_STREAM_SINKS 28 #define ENTITY_OFFSET_LISTENER_CAPABILITIES 30 #define ENTITY_OFFSET_CONTROLLER_CAPABILITIES 32 #define ENTITY_OFFSET_AVAILABLE_INDEX 36 #define ENTITY_OFFSET_ASSOCIATION_ID 40 #define ENTITY_OFFSET_ENTITY_NAME 48 #define ENTITY_OFFSET_VENDOR_NAME_STRING 112 #define ENTITY_OFFSET_MODEL_NAME_STRING 114 #define ENTITY_OFFSET_FIRMWARE_VERSION 116 #define ENTITY_OFFSET_GROUP_NAME 180 #define ENTITY_OFFSET_SERIAL_NUMBER 244 #define ENTITY_OFFSET_CONFIGURATIONS_COUNT 308 #define ENTITY_OFFSET_CURRENT_CONFIGURATION 310 #define CONFIGURATION_OFFSET_OBJECT_NAME 4 #define CONFIGURATION_OFFSET_LOCALIZED_DESCRIPTION 68 #define CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_COUNT 70 #define CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_OFFSET 72 #define CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS 74 #define AUDIO_UNIT_OFFSET_OBJECT_NAME 4 #define AUDIO_UNIT_OFFSET_LOCALIZED_DESCRIPTION 68 #define AUDIO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX 70 #define AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 72 #define AUDIO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT 74 #define AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 76 #define AUDIO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT 78 #define AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 80 #define AUDIO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT 82 #define AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 84 #define AUDIO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 86 #define AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 88 #define AUDIO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT 90 #define AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 92 #define AUDIO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT 94 #define AUDIO_UNIT_OFFSET_NUMBER_OF_CONTROLS 96 #define AUDIO_UNIT_OFFSET_BASE_CONTROL 98 #define AUDIO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS 100 #define AUDIO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR 102 #define AUDIO_UNIT_OFFSET_NUMBER_MIXERS 104 #define AUDIO_UNIT_OFFSET_BASE_MIXER 106 #define AUDIO_UNIT_OFFSET_NUMBER_MATRICES 108 #define AUDIO_UNIT_OFFSET_BASE_MATRIX 110 #define AUDIO_UNIT_OFFSET_NUMBER_SPLITTERS 112 #define AUDIO_UNIT_OFFSET_BASE_SPLITTER 114 #define AUDIO_UNIT_OFFSET_NUMBER_COMBINERS 116 #define AUDIO_UNIT_OFFSET_BASE_COMBINER 118 #define AUDIO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS 120 #define AUDIO_UNIT_OFFSET_BASE_DEMULTIPLEXER 122 #define AUDIO_UNIT_OFFSET_NUMBER_MULTIPLEXERS 124 #define AUDIO_UNIT_OFFSET_BASE_MULTIPLEXER 126 #define AUDIO_UNIT_OFFSET_NUMBER_TRANSCODERS 128 #define AUDIO_UNIT_OFFSET_BASE_TRANSCODER 130 #define AUDIO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS 132 #define AUDIO_UNIT_OFFSET_BASE_CONTROL_BLOCK 134 #define AUDIO_UNIT_OFFSET_CURRENT_SAMPLE_RATE 136 #define AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET 140 #define AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT 142 #define VIDEO_UNIT_OFFSET_OBJECT_NAME 4 #define VIDEO_UNIT_OFFSET_LOCALIZED_DESCRIPTION 68 #define VIDEO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX 70 #define VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 72 #define VIDEO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT 74 #define VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 76 #define VIDEO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT 78 #define VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 80 #define VIDEO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT 82 #define VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 84 #define VIDEO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 86 #define VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 88 #define VIDEO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT 90 #define VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 92 #define VIDEO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT 94 #define VIDEO_UNIT_OFFSET_NUMBER_OF_CONTROLS 96 #define VIDEO_UNIT_OFFSET_BASE_CONTROL 98 #define VIDEO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS 100 #define VIDEO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR 102 #define VIDEO_UNIT_OFFSET_NUMBER_MIXERS 104 #define VIDEO_UNIT_OFFSET_BASE_MIXER 106 #define VIDEO_UNIT_OFFSET_NUMBER_MATRICES 108 #define VIDEO_UNIT_OFFSET_BASE_MATRIX 110 #define VIDEO_UNIT_OFFSET_NUMBER_SPLITTERS 112 #define VIDEO_UNIT_OFFSET_BASE_SPLITTER 114 #define VIDEO_UNIT_OFFSET_NUMBER_COMBINERS 116 #define VIDEO_UNIT_OFFSET_BASE_COMBINER 118 #define VIDEO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS 120 #define VIDEO_UNIT_OFFSET_BASE_DEMULTIPLEXER 122 #define VIDEO_UNIT_OFFSET_NUMBER_MULTIPLEXERS 124 #define VIDEO_UNIT_OFFSET_BASE_MULTIPLEXER 126 #define VIDEO_UNIT_OFFSET_NUMBER_TRANSCODERS 128 #define VIDEO_UNIT_OFFSET_BASE_TRANSCODER 130 #define VIDEO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS 132 #define VIDEO_UNIT_OFFSET_BASE_CONTROL_BLOCK 134 #define SENSOR_UNIT_OFFSET_OBJECT_NAME 4 #define SENSOR_UNIT_OFFSET_LOCALIZED_DESCRIPTION 68 #define SENSOR_UNIT_OFFSET_CLOCK_DOMAIN_INDEX 70 #define SENSOR_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 72 #define SENSOR_UNIT_OFFSET_BASE_STREAM_INPUT_PORT 74 #define SENSOR_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 76 #define SENSOR_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT 78 #define SENSOR_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 80 #define SENSOR_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT 82 #define SENSOR_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 84 #define SENSOR_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 86 #define SENSOR_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 88 #define SENSOR_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT 90 #define SENSOR_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 92 #define SENSOR_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT 94 #define SENSOR_UNIT_OFFSET_NUMBER_OF_CONTROLS 96 #define SENSOR_UNIT_OFFSET_BASE_CONTROL 98 #define SENSOR_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS 100 #define SENSOR_UNIT_OFFSET_BASE_SIGNAL_SELECTOR 102 #define SENSOR_UNIT_OFFSET_NUMBER_MIXERS 104 #define SENSOR_UNIT_OFFSET_BASE_MIXER 106 #define SENSOR_UNIT_OFFSET_NUMBER_MATRICES 108 #define SENSOR_UNIT_OFFSET_BASE_MATRIX 110 #define SENSOR_UNIT_OFFSET_NUMBER_SPLITTERS 112 #define SENSOR_UNIT_OFFSET_BASE_SPLITTER 114 #define SENSOR_UNIT_OFFSET_NUMBER_COMBINERS 116 #define SENSOR_UNIT_OFFSET_BASE_COMBINER 118 #define SENSOR_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS 120 #define SENSOR_UNIT_OFFSET_BASE_DEMULTIPLEXER 122 #define SENSOR_UNIT_OFFSET_NUMBER_MULTIPLEXERS 124 #define SENSOR_UNIT_OFFSET_BASE_MULTIPLEXER 126 #define SENSOR_UNIT_OFFSET_NUMBER_TRANSCODERS 128 #define SENSOR_UNIT_OFFSET_BASE_TRANSCODER 130 #define SENSOR_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS 132 #define SENSOR_UNIT_OFFSET_BASE_CONTROL_BLOCK 134 #define STREAM_OFFSET_OBJECT_NAME 4 #define STREAM_OFFSET_LOCALIZED_DESCRIPTION 68 #define STREAM_OFFSET_CLOCK_DOMAIN_INDEX 70 #define STREAM_OFFSET_STREAM_FLAGS 72 #define STREAM_OFFSET_CURRENT_FORMAT 74 #define STREAM_OFFSET_FORMATS_OFFSET 82 #define STREAM_OFFSET_NUMBER_OF_FORMATS 84 #define STREAM_OFFSET_BACKUP_TALKER_GUID_0 86 #define STREAM_OFFSET_BACKUP_TALKER_UNIQUE_0 94 #define STREAM_OFFSET_BACKUP_TALKER_GUID_1 96 #define STREAM_OFFSET_BACKUP_TALKER_UNIQUE_1 104 #define STREAM_OFFSET_BACKUP_TALKER_GUID_2 106 #define STREAM_OFFSET_BACKUP_TALKER_UNIQUE_2 114 #define STREAM_OFFSET_BACKEDUP_TALKER_GUID 116 #define STREAM_OFFSET_BACKEDUP_TALKER_UNIQUE_ID 124 #define STREAM_OFFSET_AVB_INTERFACE_ID 126 #define STREAM_OFFSET_BUFFER_LENGTH 128 #define JACK_OFFSET_OBJECT_NAME 4 #define JACK_OFFSET_LOCALIZED_DESCRIPTION 68 #define JACK_OFFSET_JACK_FLAGS 70 #define JACK_OFFSET_JACK_TYPE 72 #define JACK_OFFSET_JACK_NUMBER_OF_CONTROLS 74 #define JACK_OFFSET_JACK_BASE_CONTROL 76 #define AVB_INTERFACE_OFFSET_OBJECT_NAME 4 #define AVB_INTERFACE_OFFSET_LOCALIZED_DESCRIPTION 68 #define AVB_INTERFACE_OFFSET_MAC_ADDRESS 70 #define AVB_INTERFACE_OFFSET_INTERFACE_FLAGS 76 #define AVB_INTERFACE_OFFSET_CLOCK_IDENTITY 78 #define AVB_INTERFACE_OFFSET_PRIORITY1 86 #define AVB_INTERFACE_OFFSET_CLOCK_CLASS 87 #define AVB_INTERFACE_OFFSET_OFFSET_SCALED_LOG_VARIANCE 88 #define AVB_INTERFACE_OFFSET_CLOCK_ACCURACY 90 #define AVB_INTERFACE_OFFSET_PRIORITY2 91 #define AVB_INTERFACE_OFFSET_DOMAIN_NUMBER 92 #define AVB_INTERFACE_OFFSET_LOG_SYNC_INTERVAL 93 #define CLOCK_SOURCE_OFFSET_OBJECT_NAME 4 #define CLOCK_SOURCE_OFFSET_LOCALIZED_DESCRIPTION 68 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_FLAGS 70 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_TYPE 72 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_IDENTIFIER 74 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_TYPE 82 #define CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_INDEX 84 #define MEMORY_OBJECT_OFFSET_OBJECT_NAME 4 #define MEMORY_OBJECT_OFFSET_LOCALIZED_DESCRIPTION 68 #define MEMORY_OBJECT_OFFSET_MEMORY_OBJECT_TYPE 70 #define MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_TYPE 72 #define MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_INDEX 74 #define MEMORY_OBJECT_OFFSET_START_ADDRESS 76 #define MEMORY_OBJECT_OFFSET_LENGTH 84 #define LOCALE_OFFSET_LOCALE_IDENTIFIER 4 #define LOCALE_OFFSET_NUMBER_OF_STRINGS 68 #define LOCALE_OFFSET_BASE_STRINGS 70 #define STRINGS_OFFSET_STRING0 4 #define STREAM_PORT_OFFSET_CLOCK_DOMAIN_INDEX 4 #define STREAM_PORT_OFFSET_PORT_FLAGS 6 #define STREAM_PORT_OFFSET_NUMBER_OF_CONTROLS 8 #define STREAM_PORT_OFFSET_BASE_CONTROL 10 #define STREAM_PORT_OFFSET_NUMBER_OF_CLUSTERS 12 #define STREAM_PORT_OFFSET_BASE_CLUSTER 14 #define STREAM_PORT_OFFSET_NUMBER_AUDIO_MAPS 16 #define STREAM_PORT_OFFSET_BASE_AUDIO_MAP 18 #define EXTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX 4 #define EXTERNAL_PORT_OFFSET_PORT_FLAGS 6 #define EXTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS 8 #define EXTERNAL_PORT_OFFSET_BASE_CONTROL 10 #define EXTERNAL_PORT_OFFSET_SIGNAL_TYPE 12 #define EXTERNAL_PORT_OFFSET_SIGNAL_INDEX 14 #define EXTERNAL_PORT_OFFSET_SIGNAL_OUTPUT 16 #define EXTERNAL_PORT_OFFSET_BLOCK_LATENCY 18 #define EXTERNAL_PORT_OFFSET_JACK_INDEX 22 #define INTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX 4 #define INTERNAL_PORT_OFFSET_PORT_FLAGS 6 #define INTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS 8 #define INTERNAL_PORT_OFFSET_BASE_CONTROL 10 #define INTERNAL_PORT_OFFSET_SIGNAL_TYPE 12 #define INTERNAL_PORT_OFFSET_SIGNAL_INDEX 14 #define INTERNAL_PORT_OFFSET_SIGNAL_OUTPUT 16 #define INTERNAL_PORT_OFFSET_BLOCK_LATENCY 18 #define INTERNAL_PORT_OFFSET_INTERNAL_INDEX 22 #define AUDIO_CLUSTER_OFFSET_OBJECT_NAME 4 #define AUDIO_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION 68 #define AUDIO_CLUSTER_OFFSET_SIGNAL_TYPE 70 #define AUDIO_CLUSTER_OFFSET_SIGNAL_ID 72 #define AUDIO_CLUSTER_OFFSET_SIGNAL_OUTPUT 74 #define AUDIO_CLUSTER_OFFSET_PATH_LATENCY 76 #define AUDIO_CLUSTER_OFFSET_BLOCK_LATENCY 80 #define AUDIO_CLUSTER_OFFSET_CHANNEL_COUNT 84 #define AUDIO_CLUSTER_OFFSET_FORMAT 86 #define VIDEO_CLUSTER_OFFSET_OBJECT_NAME 4 #define VIDEO_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION 68 #define VIDEO_CLUSTER_OFFSET_SIGNAL_TYPE 70 #define VIDEO_CLUSTER_OFFSET_SIGNAL_ID 72 #define VIDEO_CLUSTER_OFFSET_SIGNAL_OUTPUT 74 #define VIDEO_CLUSTER_OFFSET_PATH_LATENCY 76 #define VIDEO_CLUSTER_OFFSET_BLOCK_LATENCY 80 #define VIDEO_CLUSTER_OFFSET_FORMAT 84 #define VIDEO_CLUSTER_OFFSET_CURRENT_FORMAT_SPECIFIC 85 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_FORMAT_SPECIFICS_OFFSET 89 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_FORMAT_SPECIFICS_COUNT 91 #define VIDEO_CLUSTER_OFFSET_CURRENT_SAMPLING_RATE 93 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_OFFSET 97 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_COUNT 99 #define VIDEO_CLUSTER_OFFSET_CURRENT_ASPECT_RATIO 101 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_ASPECT_RATIOS_OFFSET 103 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_ASPECT_RATIOS_COUNT 105 #define VIDEO_CLUSTER_OFFSET_CURRENT_SIZE 107 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SIZES_OFFSET 111 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_SIZES_COUNT 113 #define VIDEO_CLUSTER_OFFSET_CURRENT_COLOR_SPACE 115 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_COLOR_SPACES_OFFSET 117 #define VIDEO_CLUSTER_OFFSET_SUPPORTED_COLOR_SPACES_COUNT 119 #define SENSOR_CLUSTER_OFFSET_OBJECT_NAME 4 #define SENSOR_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION 68 #define SENSOR_CLUSTER_OFFSET_SIGNAL_TYPE 70 #define SENSOR_CLUSTER_OFFSET_SIGNAL_ID 72 #define SENSOR_CLUSTER_OFFSET_SIGNAL_OUTPUT 74 #define SENSOR_CLUSTER_OFFSET_PATH_LATENCY 76 #define SENSOR_CLUSTER_OFFSET_BLOCK_LATENCY 80 #define SENSOR_CLUSTER_OFFSET_CURRENT_FORMAT 84 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_FORMATS_OFFSET 92 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_FORMATS_COUNT 94 #define SENSOR_CLUSTER_OFFSET_CURRENT_SAMPLING_RATE 96 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_OFFSET 100 #define SENSOR_CLUSTER_OFFSET_SUPPORTED_SAMPLING_RATES_COUNT 102 #define AUDIO_MAP_OFFSET_MAPPINGS_OFFSET 4 #define AUDIO_MAP_OFFSET_NUMBER_OF_MAPPINGS 6 #define VIDEO_MAP_OFFSET_MAPPINGS_OFFSET 4 #define VIDEO_MAP_OFFSET_NUMBER_OF_MAPPINGS 6 #define SENSOR_MAP_OFFSET_MAPPINGS_OFFSET 4 #define SENSOR_MAP_OFFSET_NUMBER_OF_MAPPINGS 6 #define CONTROL_OFFSET_OBJECT_NAME 4 #define CONTROL_OFFSET_LOCALIZED_DESCRIPTION 68 #define CONTROL_OFFSET_BLOCK_LATENCY 70 #define CONTROL_OFFSET_CONTROL_LATENCY 74 #define CONTROL_OFFSET_CONTROL_DOMAIN 78 #define CONTROL_OFFSET_CONTROL_VALUE_TYPE 80 #define CONTROL_OFFSET_CONTROL_TYPE 82 #define CONTROL_OFFSET_RESET_TIME 90 #define CONTROL_OFFSET_VALUES_OFFSET 94 #define CONTROL_OFFSET_NUMBER_OF_VALUES 96 #define CONTROL_OFFSET_SIGNAL_TYPE 98 #define CONTROL_OFFSET_SIGNAL_INDEX 100 #define CONTROL_OFFSET_SIGNAL_OUTPUT 102 #define SIGNAL_SELECTOR_OFFSET_OBJECT_NAME 4 #define SIGNAL_SELECTOR_OFFSET_LOCALIZED_DESCRIPTION 68 #define SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY 70 #define SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY 74 #define SIGNAL_SELECTOR_OFFSET_CONTROL_DOMAIN 78 #define SIGNAL_SELECTOR_OFFSET_SOURCES_OFFSET 80 #define SIGNAL_SELECTOR_OFFSET_NUMBER_OF_SOURCES 82 #define SIGNAL_SELECTOR_OFFSET_CURRENT_SIGNAL_TYPE 84 #define SIGNAL_SELECTOR_OFFSET_CURRENT_SIGNAL_INDEX 86 #define SIGNAL_SELECTOR_OFFSET_CURRENT_SIGNAL_OUTPUT 88 #define SIGNAL_SELECTOR_OFFSET_DEFAULT_SOURCE_TYPE 90 #define SIGNAL_SELECTOR_OFFSET_DEFAULT_SOURCE_INDEX 92 #define SIGNAL_SELECTOR_OFFSET_DEFAULT_SIGNAL_OUTPUT 94 #define MIXER_OFFSET_OBJECT_NAME 4 #define MIXER_OFFSET_LOCALIZED_DESCRIPTION 68 #define MIXER_OFFSET_BLOCK_LATENCY 70 #define MIXER_OFFSET_CONTROL_LATENCY 74 #define MIXER_OFFSET_CONTROL_DOMAIN 78 #define MIXER_OFFSET_CONTROL_VALUE_TYPE 80 #define MIXER_OFFSET_SOURCES_OFFSET 82 #define MIXER_OFFSET_NUMBER_OF_SOURCES 84 #define MIXER_OFFSET_VALUE_OFFSET 86 #define MATRIX_OFFSET_OBJECT_NAME 4 #define MATRIX_OFFSET_LOCALIZED_DESCRIPTION 68 #define MATRIX_OFFSET_BLOCK_LATENCY 70 #define MATRIX_OFFSET_CONTROL_LATENCY 74 #define MATRIX_OFFSET_CONTROL_DOMAIN 78 #define MATRIX_OFFSET_CONTROL_VALUE_TYPE 80 #define MATRIX_OFFSET_CONTROL_TYPE 82 #define MATRIX_OFFSET_WIDTH 90 #define MATRIX_OFFSET_HEIGHT 92 #define MATRIX_OFFSET_VALUES_OFFSET 94 #define MATRIX_OFFSET_NUMBER_OF_VALUES 96 #define MATRIX_OFFSET_NUMBER_OF_SOURCES 98 #define MATRIX_OFFSET_BASE_SOURCE 100 #define MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT 4 #define MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET 6 #define SIGNAL_SPLITTER_OFFSET_OBJECT_NAME 4 #define SIGNAL_SPLITTER_OFFSET_LOCALIZED_DESCRIPTION 68 #define SIGNAL_SPLITTER_OFFSET_BLOCK_LATENCY 70 #define SIGNAL_SPLITTER_OFFSET_CONTROL_LATENCY 74 #define SIGNAL_SPLITTER_OFFSET_CONTROL_DOMAIN 78 #define SIGNAL_SPLITTER_OFFSET_SIGNAL_TYPE 80 #define SIGNAL_SPLITTER_OFFSET_SIGNAL_INDEX 82 #define SIGNAL_SPLITTER_OFFSET_SIGNAL_OUTPUT 84 #define SIGNAL_SPLITTER_OFFSET_NUMBER_OF_OUTPUTS 86 #define SIGNAL_SPLITTER_OFFSET_SPLITTER_MAP_COUNT 88 #define SIGNAL_SPLITTER_OFFSET_SPLITTER_MAP_OFFSET 90 #define SIGNAL_COMBINER_OFFSET_OBJECT_NAME 4 #define SIGNAL_COMBINER_OFFSET_LOCALIZED_DESCRIPTION 68 #define SIGNAL_COMBINER_OFFSET_BLOCK_LATENCY 70 #define SIGNAL_COMBINER_OFFSET_CONTROL_LATENCY 74 #define SIGNAL_COMBINER_OFFSET_CONTROL_DOMAIN 78 #define SIGNAL_COMBINER_OFFSET_COMBINER_MAP_COUNT 80 #define SIGNAL_COMBINER_OFFSET_COMBINER_MAP_OFFSET 82 #define SIGNAL_COMBINER_OFFSET_SOURCES_OFFSET 84 #define SIGNAL_COMBINER_OFFSET_NUMBER_OF_SOURCES 86 #define SIGNAL_DEMULTIPLEXER_OFFSET_OBJECT_NAME 4 #define SIGNAL_DEMULTIPLEXER_OFFSET_LOCALIZED_DESCRIPTION 68 #define SIGNAL_DEMULTIPLEXER_OFFSET_BLOCK_LATENCY 70 #define SIGNAL_DEMULTIPLEXER_OFFSET_CONTROL_LATENCY 74 #define SIGNAL_DEMULTIPLEXER_OFFSET_CONTROL_DOMAIN 78 #define SIGNAL_DEMULTIPLEXER_OFFSET_SIGNAL_TYPE 80 #define SIGNAL_DEMULTIPLEXER_OFFSET_SIGNAL_INDEX 82 #define SIGNAL_DEMULTIPLEXER_OFFSET_SIGNAL_OUTPUT 84 #define SIGNAL_DEMULTIPLEXER_OFFSET_NUMBER_OF_OUTPUTS 86 #define SIGNAL_DEMULTIPLEXER_OFFSET_DEMULTIPLEXER_MAP_COUNT 88 #define SIGNAL_DEMULTIPLEXER_OFFSET_DEMULTIPLEXER_MAP_OFFSET 90 #define SIGNAL_MULTIPLEXER_OFFSET_OBJECT_NAME 4 #define SIGNAL_MULTIPLEXER_OFFSET_LOCALIZED_DESCRIPTION 68 #define SIGNAL_MULTIPLEXER_OFFSET_BLOCK_LATENCY 70 #define SIGNAL_MULTIPLEXER_OFFSET_CONTROL_LATENCY 74 #define SIGNAL_MULTIPLEXER_OFFSET_CONTROL_DOMAIN 78 #define SIGNAL_MULTIPLEXER_OFFSET_MULTIPLEXER_MAP_COUNT 80 #define SIGNAL_MULTIPLEXER_OFFSET_MULTIPLEXER_MAP_OFFSET 82 #define SIGNAL_MULTIPLEXER_OFFSET_SOURCES_OFFSET 84 #define SIGNAL_MULTIPLEXER_OFFSET_NUMBER_OF_SOURCES 86 #define SIGNAL_TRANSCODER_OFFSET_OBJECT_NAME 4 #define SIGNAL_TRANSCODER_OFFSET_LOCALIZED_DESCRIPTION 68 #define SIGNAL_TRANSCODER_OFFSET_BLOCK_LATENCY 70 #define SIGNAL_TRANSCODER_OFFSET_CONTROL_LATENCY 74 #define SIGNAL_TRANSCODER_OFFSET_CONTROL_DOMAIN 78 #define SIGNAL_TRANSCODER_OFFSET_CONTROL_VALUE_TYPE 80 #define SIGNAL_TRANSCODER_OFFSET_VALUES_OFFSET 82 #define SIGNAL_TRANSCODER_OFFSET_NUMBER_OF_VALUES 84 #define SIGNAL_TRANSCODER_OFFSET_SIGNAL_TYPE 86 #define SIGNAL_TRANSCODER_OFFSET_SIGNAL_INDEX 88 #define SIGNAL_TRANSCODER_OFFSET_SIGNAL_OUTPUT 90 #define CLOCK_DOMAIN_OFFSET_OBJECT_NAME 4 #define CLOCK_DOMAIN_OFFSET_LOCALIZED_DESCRIPTION 68 #define CLOCK_DOMAIN_OFFSET_CLOCK_SOURCE_INDEX 70 #define CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_OFFSET 72 #define CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_COUNT 74 #define CONTROL_BLOCK_OFFSET_OBJECT_NAME 4 #define CONTROL_BLOCK_OFFSET_LOCALIZED_DESCRIPTION 68 #define CONTROL_BLOCK_OFFSET_NUMBER_OF_CONTROLS 70 #define CONTROL_BLOCK_OFFSET_BASE_CONTROL 72 #define CONTROL_BLOCK_OFFSET_FINAL_CONTROL_INDEX 74 /* AEM Stream Format Offsets */ /* IEEE 1722.1 draft D21 section 7.3.2 */ #define AEM_OFFSET_SF_SUBTYPE 0 #define AEM_OFFSET_SF_VERSION 0 /* IIDC */ #define AEM_OFFSET_SF 1 #define AEM_OFFSET_IIDC_FORMAT 5 #define AEM_OFFSET_IIDC_MODE 6 #define AEM_OFFSET_IIDC_RATE 7 /* 61883 */ #define AEM_OFFSET_FMT 1 /* 61883-6 */ #define AEM_OFFSET_FDF_EVT 2 #define AEM_OFFSET_FDF_SFC 2 #define AEM_OFFSET_DBS 3 #define AEM_OFFSET_B 4 #define AEM_OFFSET_NB 4 /* 61883-6 AM824 */ #define AEM_OFFSET_LABEL_IEC_60958_CNT 5 #define AEM_OFFSET_LABEL_MBLA_CNT 6 #define AEM_OFFSET_LABEL_MIDI_CNT 7 #define AEM_OFFSET_LABEL_SMPTE_CNT 7 /* 61883-8 */ #define AEM_OFFSET_VIDEO_MODE 5 #define AEM_OFFSET_COMPRESS_MODE 6 #define AEM_OFFSET_COLOR_SPACE 7 /* AECP Vendor Unique Command Specific Offsets */ #define AECP_VUC_OFFSET_PROTOCOL_ID 22 /* AECP Video Cluster Format Offsets */ /* IEEE 1722.1 draft D21 section 7.3.7 */ #if 0 /* TODO: These are all different in D21 */ #define AEM_OFFSET_MFD_TYPE 3 #define AEM_OFFSET_DIV 4 #define AEM_OFFSET_INTERLACE 4 #define AEM_OFFSET_CHANNELS 4 #define AEM_OFFSET_COLOR_FORMAT 4 #define AEM_OFFSET_BPP 5 #define AEM_OFFSET_ASPECT_X 6 #define AEM_OFFSET_ASPECT_Y 7 #define AEM_OFFSET_FRAME_RATE 8 #define AEM_OFFSET_COMP1 9 #define AEM_OFFSET_COMP2 10 #define AEM_OFFSET_COMP3 10 #define AEM_OFFSET_COMP4 11 #define AEM_OFFSET_SVMF_WIDTH 12 #define AEM_OFFSET_SVMF_HEIGHT 14 #define AEM_OFFSET_CS_EUI64 8 #endif /* Bitmasks */ #define AECP_STATUS_CODE_MASK 0xf8 #define AECP_TOKEN_LENGTH_MASK 0x07ff #define AECP_KEY_PART_MASK 0x78 #define AECP_CONTINUED_MASK 0x80 #define AECP_CD_LENGTH_MASK 0x07ff #define AECP_COMMAND_TYPE_MASK 0x7fff #define AECP_KEYCHAIN_ID_MASK 0xe0 #define AECP_KEYTYPE_MASK 0x1c #define AECP_KEY_COUNT_MASK 0x0fff #define AECP_KEY_LENGTH_MASK 0x07ff #define AECP_KEY_NUMBER_MASK 0x04ff #define AECP_MATRIX_DIRECTION_MASK 0x70 #define AECP_MATRIX_REP_MASK 0x80 #define AECP_MATRIX_VALUE_COUNT_MASK 0x0fff #define AECP_MSG_TYPE_MASK 0x0f #define AECP_PERSISTENT_FLAG_MASK 0x00000001 #define AECP_RELEASE_FLAG_MASK 0x80000000 #define AECP_SIGNATURE_ID_MASK 0x0fff #define AECP_SIGNATURE_INFO_MASK 0x00f0 #define AECP_SIGNATURE_LENGTH_MASK 0x3ff #define AECP_UNLOCK_FLAG_MASK 0x00000001 #define AECP_U_FLAG_MASK 0x80 #define AECP_MSRP_MAPPINGS_COUNT_MASK 0x00 #define AECP_AS_CAPABLE_FLAG_MASK 0x01 #define AECP_GPTP_ENABLED_FLAG_MASK 0x02 #define AECP_SRP_ENABLED_FLAG_MASK 0x04 /* AECP Sampling Rate masks */ #define AECP_SAMPLING_RATE_PULL_MASK 0xE0000000 #define AECP_SAMPLING_RATE_BASE_FREQ_MASK 0x1FFFFFFF /* Stream Flags (7.130) */ #define AECP_STREAM_VLAN_ID_VALID_FLAG_MASK 0x02000000 #define AECP_CONNECTED_FLAG_MASK 0x04000000 #define AECP_MSRP_FAILURE_VALID_FLAG_MASK 0x08000000 #define AECP_DEST_MAC_VALID_FLAG_MASK 0x10000000 #define AECP_MSRP_ACC_LAT_VALID_FLAG_MASK 0x20000000 #define AECP_STREAM_ID_VALID_FLAG_MASK 0x40000000 #define AECP_STREAM_FORMAT_VALID_FLAG_MASK 0x80000000 /* key permission flag masks */ #define AECP_PRIVATE_KEY_READ_FLAG_MASK 0x80000000 #define AECP_PRIVATE_KEY_WRITE_FLAG_MASK 0x40000000 #define AECP_PUBLIC_KEY_WRITE_FLAG_MASK 0x20000000 #define AECP_CONNECTION_FLAG_MASK 0x10000000 #define AECP_CONTROL_ADMIN_FLAG_MASK 0x08000000 #define AECP_MEM_OBJ_ADMIN_FLAG_MASK 0x04000000 #define AECP_MEM_OBJ_SETTINGS_FLAG_MASK 0x02000000 #define AECP_CONTROL_USER_L1_FLAG_MASK 0x00000008 #define AECP_CONTROL_USER_L2_FLAG_MASK 0x00000004 #define AECP_CONTROL_USER_L3_FLAG_MASK 0x00000002 #define AECP_CONTROL_USER_L4_FLAG_MASK 0x00000001 /* 7.133-139 counters_valid flag masks */ #define AECP_COUNTERS_VALID_LINK_UP 0x00000001 #define AECP_COUNTERS_VALID_LINK_DOWN 0x00000002 #define AECP_COUNTERS_VALID_PACKETS_TX 0x00000004 #define AECP_COUNTERS_VALID_PACKETS_RX 0x00000008 #define AECP_COUNTERS_VALID_RX_CRC_ERROR 0x00000010 #define AECP_COUNTERS_VALID_GPTP_GM_CHANGED 0x00000020 #define AECP_COUNTERS_VALID_CLOCK_DOMAIN_LOCKED 0x00000001 #define AECP_COUNTERS_VALID_CLOCK_DOMAIN_UNLOCKED 0x00000002 #define AECP_COUNTERS_VALID_MEDIA_LOCKED 0x00000001 #define AECP_COUNTERS_VALID_MEDIA_UNLOCKED 0x00000002 #define AECP_COUNTERS_VALID_STREAM_RESET 0x00000004 #define AECP_COUNTERS_VALID_SEQ_NUM_MISMATCH 0x00000008 #define AECP_COUNTERS_VALID_MEDIA_RESET 0x00000010 #define AECP_COUNTERS_VALID_TIMESTAMP_UNCERTAIN 0x00000020 #define AECP_COUNTERS_VALID_TIMESTAMP_VALID 0x00000040 #define AECP_COUNTERS_VALID_TIMESTAMP_NOT_VALID 0x00000080 #define AECP_COUNTERS_VALID_UNSUPPORTED_FORMAT 0x00000100 #define AECP_COUNTERS_VALID_LATE_TIMESTAMP 0x00000200 #define AECP_COUNTERS_VALID_EARLY_TIMESTAMP 0x00000400 #define AECP_COUNTERS_VALID_STREAM_PACKETS_RX 0x00000800 #define AECP_COUNTERS_VALID_STREAM_PACKETS_TX 0x00001000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_8 0x01000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_7 0x02000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_6 0x04000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_5 0x08000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_4 0x10000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_3 0x20000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_2 0x40000000 #define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_1 0x80000000 #define AEM_CLOCK_SYNC_SOURCE_FLAG_MASK 0x00000001 #define AEM_ASYNC_SAMPLE_RATE_CONV_FLAG_MASK 0x00000002 #define AEM_SYNC_SAMPLE_RATE_CONV_FLAG_MASK 0x00000004 #define AEM_BASE_FREQUENCY_MASK 0x1fffffff #define AEM_CAPTIVE_FLAG_MASK 0x00000002 #define AEM_CLASS_A_FLAG_MASK 0x00000002 #define AEM_CLASS_B_FLAG_MASK 0x00000004 #define AEM_MASK_B 0x80 #define AEM_MASK_BPP 0x3F #define AEM_MASK_CHANNELS 0x3C #define AEM_MASK_COLOR_FORMAT 0x03C0 #define AEM_MASK_COMP1 0x0F80 #define AEM_MASK_COMP2 0x7C #define AEM_MASK_COMP3 0x03E0 #define AEM_MASK_COMP4 0x1F #define AEM_MASK_DIV 0x80 #define AEM_MASK_FDF_EVT 0xF8 #define AEM_MASK_FDF_SFC 0x07 #define AEM_MASK_FMT 0x3F #define AEM_MASK_INTERLACE 0x40 #define AEM_MASK_LABEL_MIDI_CNT 0xF0 #define AEM_MASK_LABEL_SMPTE_CNT 0x0F #define AEM_MASK_NB 0x40 #define AEM_MASK_OUI24 0xFFFFFF00 #define AEM_MASK_SF 0x80 #define AEM_MASK_SF_SUBTYPE 0x7F #define AEM_MASK_SF_VERSION 0x80 #define AEM_PULL_FIELD_MASK 0xe0 #define MFD_TYPE_VIDEO 0x00 #define MFD_TYPE_TRANSPORT_STRM 0x01 #define MFD_TYPE_MIDI 0x02 #define MFD_TYPE_TIME_CODE 0x03 #define MFD_TYPE_CONTROL_PROTO 0x04 #define COLOR_FORMAT_MONO 0x0 #define COLOR_FORMAT_RGB 0x1 #define COLOR_FORMAT_RGBA 0x2 #define COLOR_FORMAT_BGRA 0x3 #define COLOR_FORMAT_CMYK 0x4 #define COLOR_FORMAT_HSL 0x5 #define COLOR_FORMAT_YUV 0x6 #define COLOR_FORMAT_YCBCR 0x7 #define COLOR_FORMAT_YPBPR 0x08 #define OUI24_STANDARD_MEDIA_FORMAT 0x90e0f0 #define MEMORY_OBJECT_TYPE_FIRMWARE_IMAGE 0x0000 #define MEMORY_OBJECT_TYPE_VENDOR_SPECIFIC 0x0001 #define MEMORY_OBJECT_TYPE_CRASH_DUMP 0x0002 #define MEMORY_OBJECT_TYPE_LOG_OBJECT 0x0003 #define MEMORY_OBJECT_TYPE_AUTOSTART_SETTINGS 0x0004 #define MEMORY_OBJECT_TYPE_SNAPSHOT_SETTINGS 0x0005 #define KEY_TYPE_NONE 0 #define KEY_TYPE_SHA256 1 #define KEY_TYPE_AES128 2 #define KEY_TYPE_AES256 3 #define KEY_TYPE_RSA1024_PUBLIC 4 #define KEY_TYPE_RSA1024_PRIVATE 5 #define KEY_TYPE_X509 6 static const value_string aecp_key_type_type_vals [] = { {KEY_TYPE_NONE, "NO_KEY"}, {KEY_TYPE_SHA256, "SHA256"}, {KEY_TYPE_AES128, "AES128"}, {KEY_TYPE_AES256, "AES256"}, {KEY_TYPE_RSA1024_PUBLIC, "RSA1024_PUBLIC"}, {KEY_TYPE_RSA1024_PRIVATE, "RSA1024_PRIVATE"}, {KEY_TYPE_X509, "RSA1024_X509"}, {0, NULL} }; static const value_string aem_memory_object_type_vals [] = { {MEMORY_OBJECT_TYPE_FIRMWARE_IMAGE, "FIRMWARE_IMAGE"}, {MEMORY_OBJECT_TYPE_VENDOR_SPECIFIC, "VENDOR_SPECIFIC"}, {MEMORY_OBJECT_TYPE_CRASH_DUMP, "CRASH_DUMP"}, {MEMORY_OBJECT_TYPE_LOG_OBJECT, "LOG_OBJECT"}, {MEMORY_OBJECT_TYPE_AUTOSTART_SETTINGS, "AUTOSTART_SETTINGS"}, {MEMORY_OBJECT_TYPE_SNAPSHOT_SETTINGS, "SNAPSHOT_SETTINGS"}, {0, NULL} }; #if 0 static const value_string aem_stream_format_subtype_vals [] = { {IEC_61883_IIDC_SUBTYPE, "IEC_61883_IIDC_SUBTYPE"}, {MMA_SUBTYPE, "MMA_SUBTYPE"}, {AVTP_AUDIO_SUBTYPE, "AVTP_AUDIO_SUBTYPE"}, {AVTP_VIDEO_SUBTYPE, "AVTP_VIDEO_SUBTYPE"}, {EXPERIMENTAL_SUBTYPE, "EXPERIMENTAL_SUBTYPE"}, {0, NULL} }; static const value_string aem_color_format_type_vals [] = { {COLOR_FORMAT_MONO, "Monochrome"}, {COLOR_FORMAT_RGB, "RGB"}, {COLOR_FORMAT_RGBA, "RGBA"}, {COLOR_FORMAT_BGRA, "BGRA"}, {COLOR_FORMAT_CMYK, "CMYK"}, {COLOR_FORMAT_HSL, "HSL"}, {COLOR_FORMAT_YUV, "YUV"}, {COLOR_FORMAT_YCBCR, "YCbCr"}, {COLOR_FORMAT_YPBPR, "YPbPr"}, {0, NULL} }; static const value_string aem_mfd_type_vals [] = { {MFD_TYPE_VIDEO, "VIDEO"}, {MFD_TYPE_TRANSPORT_STRM, "TRANSPORT_STREAM"}, {MFD_TYPE_MIDI, "MIDI"}, {MFD_TYPE_TIME_CODE, "TIME_CODE"}, {MFD_TYPE_CONTROL_PROTO, "CONTROL_PROTOCOL"}, {0, NULL} }; #endif static const value_string aem_clock_source_type_vals [] = { {AEM_CLOCK_INTERNAL , "INTERNAL"}, {AEM_CLOCK_EXTERNAL , "EXTERNAL"}, {AEM_CLOCK_INPUT_STREAM , "INPUT STREAM"}, {AEM_CLOCK_MEDIA_CLOCK_STREAM, "MEDIA CLOCK STREAM"}, {0, NULL} }; /* frequency multipliers from table 7.6 pull field values */ static const value_string aem_frequency_multiplier_type_vals [] = { {0, "1.0"}, {1, "1/1.001"}, {2, "1.001"}, {3, "24/25"}, {4, "25/24"}, {0, NULL} }; static const value_string aem_control_value_type_vals [] = { {AEM_CONTROL_LINEAR_INT8 ,"CONTROL_LINEAR_INT8"}, {AEM_CONTROL_LINEAR_UINT8 ,"CONTROL_LINEAR_UINT8"}, {AEM_CONTROL_LINEAR_INT16 ,"CONTROL_LINEAR_INT16"}, {AEM_CONTROL_LINEAR_UINT16 ,"CONTROL_LINEAR_UINT16"}, {AEM_CONTROL_LINEAR_INT32 ,"CONTROL_LINEAR_INT32"}, {AEM_CONTROL_LINEAR_UINT32 ,"CONTROL_LINEAR_UINT32"}, {AEM_CONTROL_LINEAR_INT64 ,"CONTROL_LINEAR_INT64"}, {AEM_CONTROL_LINEAR_UINT64 ,"CONTROL_LINEAR_UINT64"}, {AEM_CONTROL_LINEAR_FLOAT ,"CONTROL_LINEAR_FLOAT"}, {AEM_CONTROL_LINEAR_DOUBLE ,"CONTROL_LINEAR_DOUBLE"}, {AEM_CONTROL_SELECTOR_INT8 ,"CONTROL_SELECTOR_INT8"}, {AEM_CONTROL_SELECTOR_UINT8 ,"CONTROL_SELECTOR_UINT8"}, {AEM_CONTROL_SELECTOR_INT16 ,"CONTROL_SELECTOR_INT16"}, {AEM_CONTROL_SELECTOR_UINT16 ,"CONTROL_SELECTOR_UINT16"}, {AEM_CONTROL_SELECTOR_INT32 ,"CONTROL_SELECTOR_INT32"}, {AEM_CONTROL_SELECTOR_UINT32 ,"CONTROL_SELECTOR_UINT32"}, {AEM_CONTROL_SELECTOR_INT64 ,"CONTROL_SELECTOR_INT64"}, {AEM_CONTROL_SELECTOR_UINT64 ,"CONTROL_SELECTOR_UINT64"}, {AEM_CONTROL_SELECTOR_FLOAT ,"CONTROL_SELECTOR_FLOAT"}, {AEM_CONTROL_SELECTOR_DOUBLE ,"CONTROL_SELECTOR_DOUBLE"}, {AEM_CONTROL_UTF8 ,"CONTROL_UTF8"}, {AEM_CONTROL_BODE_PLOT ,"CONTROL_BODE_PLOT"}, {AEM_CONTROL_ARRAY_INT8 ,"CONTROL_ARRAY_INT8"}, {AEM_CONTROL_ARRAY_UINT8 ,"CONTROL_ARRAY_UINT8"}, {AEM_CONTROL_ARRAY_INT16 ,"CONTROL_ARRAY_INT16"}, {AEM_CONTROL_ARRAY_UINT16 ,"CONTROL_ARRAY_UINT16"}, {AEM_CONTROL_ARRAY_INT32 ,"CONTROL_ARRAY_INT32"}, {AEM_CONTROL_ARRAY_UINT32 ,"CONTROL_ARRAY_UINT32"}, {AEM_CONTROL_ARRAY_INT64 ,"CONTROL_ARRAY_INT64"}, {AEM_CONTROL_ARRAY_UINT64 ,"CONTROL_ARRAY_UINT64"}, {AEM_CONTROL_ARRAY_FLOAT ,"CONTROL_ARRAY_FLOAT"}, {AEM_CONTROL_ARRAY_DOUBLE ,"CONTROL_ARRAY_DOUBLE"}, {AEM_CONTROL_VENDOR ,"CONTROL_CONTROL_VENDOR"}, {0 , NULL} }; static const value_string aem_jack_type_vals [] = { {AEM_JACKTYPE_SPEAKER ,"SPEAKER" }, {AEM_JACKTYPE_HEADPHONE ,"HEADPHONE" }, {AEM_JACKTYPE_ANALOG_MICROPHONE ,"ANALOG_MICROPHONE" }, {AEM_JACKTYPE_SPDIF ,"SPDIF" }, {AEM_JACKTYPE_ADAT ,"ADAT" }, {AEM_JACKTYPE_TDIF ,"TDIF" }, {AEM_JACKTYPE_MADI ,"MADI" }, {AEM_JACKTYPE_UNBALANCED_ANALOG ,"UNBALANCED_ANALOG" }, {AEM_JACKTYPE_BALANCED_ANALOG ,"BALANCED_ANALOG" }, {AEM_JACKTYPE_DIGITAL ,"DIGITAL" }, {AEM_JACKTYPE_MIDI ,"MIDI" }, {AEM_JACKTYPE_AES_EBU ,"AES_EBU" }, {AEM_JACKTYPE_COMPOSITE_VIDEO ,"COMPOSITE_VIDEO" }, {AEM_JACKTYPE_S_VHS_VIDEO ,"S_VHS_VIDEO" }, {AEM_JACKTYPE_COMPONENT_VIDEO ,"COMPONENT_VIDEO" }, {AEM_JACKTYPE_DVI ,"DVI" }, {AEM_JACKTYPE_HDMI ,"HDMI" }, {AEM_JACKTYPE_UDI ,"UDI" }, {AEM_JACKTYPE_DISPLAYPORT ,"DISPLAYPORT" }, {AEM_JACKTYPE_ANTENNA ,"ANTENNA" }, {AEM_JACKTYPE_ANALOG_TUNER ,"ANALOG_TUNER" }, {AEM_JACKTYPE_ETHERNET ,"ETHERNET" }, {AEM_JACKTYPE_WIFI ,"WIFI" }, {AEM_JACKTYPE_USB ,"USB" }, {AEM_JACKTYPE_PCI ,"PCI" }, {AEM_JACKTYPE_PCI_E ,"PDI_E" }, {AEM_JACKTYPE_SCSI ,"SCSI" }, {AEM_JACKTYPE_ATA ,"ATA" }, {AEM_JACKTYPE_IMAGER ,"IMAGER" }, {AEM_JACKTYPE_IR ,"IR" }, {AEM_JACKTYPE_THUNDERBOLT ,"THUNDERBOLT" }, {AEM_JACKTYPE_SATA ,"SATA" }, {AEM_JACKTYPE_SMPTE_LTC ,"SMPTE_LTC" }, {AEM_JACKTYPE_DIGITAL_MICROPHONE ,"DIGITAL_MICROPHONE" }, {0, NULL } }; /* value_string uses a 32 bit integer id, control uses 64. * TODO - make custom formatter for hf_aem_control_type static const value_string aem_control_type_vals [] = { {AEM_CONTROL_ENABLE , "ENABLE"}, {AEM_CONTROL_DELAY , "DELAY"}, {AEM_CONTROL_POW_LINE_FREQ , "POW_LINE_FREQ"}, {AEM_CONTROL_ROLLPITCHYAW_ABS , "ROLLPITCHYAW_ABS"}, {AEM_CONTROL_ROLLPITCHYAW_REL , "ROLLPITCHYAW_REL"}, {AEM_CONTROL_SURGESWAYHEAVE_ABS , "SURGESWAYHEAVE_ABS"}, {AEM_CONTROL_SURGESWAYHEAVE_REL , "SURGESWAYHEAVE_REL"}, {AEM_CONTROL_IDENTIFY , "IDENTIFY"}, {AEM_CONTROL_POWER_STATUS , "POWER_STATUS"}, {AEM_CONTROL_FAN_STATUS , "FAN_STATUS"}, {AEN_CONTROL_TEMPERATURE , "TEMPERATURE"}, {AEM_CONTROL_TEMPERATURE_SENSOR , "TEMPERATURE_SENSOR"}, {AEM_CONTROL_ALTITUDE , "ALTITUDE"}, {AEM_CONTROL_HUMIDITY , "HUMIDITY"}, {AEM_CONTROL_MUTE , "MUTE"}, {AEM_CONTROL_VOLUME , "VOLUME"}, {AEM_CONTROL_INVERT , "INVERT"}, {AEM_CONTROL_PANPOT , "PANPOT"}, {AEM_CONTROL_ISOLATE , "ISOLATE"}, {AEM_CONTROL_POSITION , "POSITION"}, {AEM_CONTROL_PHANTOM , "PHANTOM"}, {AEM_CONTROL_AUDIO_SCALE , "AUDIO_SCALE"}, {AEM_CONTROL_AUDIO_METERS , "AUDIO_METERS"}, {AEM_CONTROL_AUDIO_SPECTRUM , "AUDIO_SPECTRUM"}, {AEM_CONTROL_FILTER_RESPONSE , "FILTER_RESPONSE"}, {AEM_CONTROL_SCANNING_MODE , "SCANNING_MODE"}, {AEM_CONTROL_AUTO_EXP_MODE , "AUTO_EXP_MODE"}, {AEM_CONTROL_AUTO_EXP_PRIO , "AUTO_EXP_PRIO"}, {AEM_CONTROL_EXP_TIME_ABS , "EXP_TIME_ABS"}, {AEM_CONTROL_EXP_TIME_REL , "EXP_TIME_REL"}, {AEM_CONTROL_FOCUS_ABS , "FOCUS_ABS"}, {AEM_CONTROL_FOCUS_REL , "FOCUS_REL"}, {AEM_CONTROL_FOCUS_AUTO , "FOCUS_AUTO"}, {AEM_CONTROL_IRIS_ABS , "IRIS_ABS"}, {AEM_CONTROL_IRIS_REL , "IRIS_REL"}, {AEM_CONTROL_ZOOM_ABS , "ZOOM_ABS"}, {AEM_CONTROL_ZOOM_REL , "ZOOM_REL"}, {AEM_CONTROL_PRIVACY , "PRIVACY"}, {AEM_CONTROL_BACKLIGHT , "BACKLIGHT"}, {AEM_CONTROL_BRIGHTNESS , "BRIGHTNESS"}, {AEM_CONTROL_CONTRAST , "CONTRAST"}, {AEM_CONTROL_GAIN , "GAIN"}, {AEM_CONTROL_HUE , "HUE"}, {AEM_CONTROL_SATURATION , "SATURATION"}, {AEM_CONTROL_SHARPNESS , "SHARPNESS"}, {AEM_CONTROL_GAMMA , "GAMMA"}, {AEM_CONTROL_WHITE_BAL_TEMP , "WHITE_BAL_TEMP"}, {AEM_CONTROL_WHITE_BAL_TENP_AUTO , "WHITE_BAL_TEMP_AUTO"}, {AEM_CONTROL_WHITE_BAL_COMP , "WHITE_BAL_COMP"}, {AEM_CONTROL_WHITE_BAL_COMP_AUTO , "WHITE_BAL_COMP_AUTO"}, {AEM_CONTROL_DIGITAL_ZOOM , "DIGITAL_ZOOM"}, {0 , NULL} }; */ #if 0 static const value_string aecp_address_type_vals [] = { {AECP_ADDRESS_MAC , "MAC"}, {AECP_ADDRESS_IPV4 , "IPV4"}, {AECP_ADDRESS_IPV6 , "IPV6"}, {0 , NULL} }; #endif static const value_string aecp_keychain_id_type_vals [] = { {AECP_KEYCHAIN_NONE , "NONE"}, {AECP_KEYCHAIN_MANUFACTURER , "MANUFACTURER"}, {AECP_KEYCHAIN_PRODUCT , "PRODUCT"}, {AECP_KEYCHAIN_ENTITY , "ENTITY"}, {AECP_KEYCHAIN_USER , "USER"}, {0 , NULL} }; static const value_string aecp_direction_type_vals [] = { {AECP_DIRECTION_HORIZONTAL , "HORIZONTAL"}, {AECP_DIRECTION_VERTICAL , "VERTICAL"}, {0 , NULL} }; static const value_string aem_descriptor_type_vals[] = { {AEM_DESCRIPTOR_ENTITY , "ENTITY"}, {AEM_DESCRIPTOR_CONFIGURATION , "CONFIGURATION"}, {AEM_DESCRIPTOR_AUDIO_UNIT , "AUDIO_UNIT"}, {AEM_DESCRIPTOR_VIDEO_UNIT , "VIDEO_UNIT"}, {AEM_DESCRIPTOR_SENSOR_UNIT , "SENSOR_UNIT"}, {AEM_DESCRIPTOR_STREAM_INPUT , "STREAM_INPUT"}, {AEM_DESCRIPTOR_STREAM_OUTPUT , "STREAM_OUTPUT"}, {AEM_DESCRIPTOR_JACK_INPUT , "JACK_INPUT"}, {AEM_DESCRIPTOR_JACK_OUTPUT, "JACK_OUTPUT"}, {AEM_DESCRIPTOR_STREAM_PORT_INPUT , "STREAM_PORT_INPUT"}, {AEM_DESCRIPTOR_STREAM_PORT_OUTPUT , "STREAM_PORT_OUTPUT"}, {AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT , "EXTERNAL_PORT_INPUT"}, {AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT, "EXTERNAL_PORT_OUTPUT"}, {AEM_DESCRIPTOR_INTERNAL_PORT_INPUT , "INTERNAL_PORT_INPUT"}, {AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT, "INTERNAL_PORT_OUTPUT"}, {AEM_DESCRIPTOR_AVB_INTERFACE , "AVB_INTERFACE"}, {AEM_DESCRIPTOR_CLOCK_SOURCE , "CLOCK_SOURCE"}, {AEM_DESCRIPTOR_AUDIO_CLUSTER , "AUDIO_CLUSTER"}, {AEM_DESCRIPTOR_VIDEO_CLUSTER , "VIDEO_CLUSTER"}, {AEM_DESCRIPTOR_SENSOR_CLUSTER , "SENSOR_CLUSTER"}, {AEM_DESCRIPTOR_AUDIO_MAP , "AUDIO_MAP"}, {AEM_DESCRIPTOR_VIDEO_MAP , "VIDEO_MAP"}, {AEM_DESCRIPTOR_SENSOR_MAP , "SENSOR_MAP"}, {AEM_DESCRIPTOR_CONTROL , "CONTROL"}, {AEM_DESCRIPTOR_SIGNAL_SELECTOR , "SIGNAL_SELECTOR"}, {AEM_DESCRIPTOR_MIXER , "MIXER"}, {AEM_DESCRIPTOR_MATRIX , "MATRIX"}, {AEM_DESCRIPTOR_LOCALE , "LOCALE"}, {AEM_DESCRIPTOR_STRINGS , "STRINGS"}, {AEM_DESCRIPTOR_MATRIX_SIGNAL , "MATRIX_SIGNAL"}, {AEM_DESCRIPTOR_MEMORY_OBJECT , "MEMORY_OBJECT"}, {AEM_DESCRIPTOR_SIGNAL_SPLITTER , "SIGNAL_SPLITTER"}, {AEM_DESCRIPTOR_SIGNAL_COMBINER , "SIGNAL_COMBINER"}, {AEM_DESCRIPTOR_SIGNAL_DEMULTIPLEXER, "SIGNAL_DEMULTIPLEXER"}, {AEM_DESCRIPTOR_SIGNAL_MULTIPLEXER , "SIGNAL_MULTIPLEXER"}, {AEM_DESCRIPTOR_SIGNAL_TRANSCODER , "SIGNAL_TRANSCODER"}, {AEM_DESCRIPTOR_CLOCK_DOMAIN , "CLOCK_DOMAIN"}, {AEM_DESCRIPTOR_CONTROL_BLOCK , "CONTROL_BLOCK"}, {0 , NULL} }; static const value_string aem_status_type_vals[] = { {AEM_STATUS_SUCCESS , "SUCCESS"}, {AEM_STATUS_NOT_IMPLEMENTED , "NOT_IMPLEMENTED"}, {AEM_STATUS_NO_SUCH_DESCRIPTOR , "NO_SUCH_DESCRIPTOR"}, {AEM_STATUS_ENTITY_LOCKED , "ENTITY_LOCKED"}, {AEM_STATUS_ENTITY_ACQUIRED , "ENTITY_ACQUIRED"}, {AEM_STATUS_NOT_AUTHENTICATED , "NOT_AUTHENTICATED"}, {AEM_STATUS_AUTHENTICATION_DISABLED, "AUTHENTICATION_DISABLED"}, {AEM_STATUS_BAD_ARGUMENTS , "BAD_ARGUMENTS"}, {AEM_STATUS_NO_RESOURCES , "NO_RESOURCES"}, {AEM_STATUS_IN_PROGRESS , "IN_PROGRESS"}, {AEM_STATUS_ENTITY_MISBEHAVING , "ENTITY_MISBEHAVING"}, {AEM_STATUS_NOT_SUPPORTED , "NOT_SUPPORTED"}, {AEM_STATUS_STREAM_IS_RUNNING , "STREAM_IS_RUNNING"}, {0 , NULL} }; static const value_string aecp_message_type_vals[] = { {AECP_AEM_COMMAND_MESSAGE, "AEM_COMMAND"}, {AECP_AEM_RESPONSE_MESSAGE, "AEM_RESPONSE"}, {AECP_ADDRESS_ACCESS_COMMAND_MESSAGE, "ADDRESS_ACCESS_COMMAND"}, {AECP_ADDRESS_ACCESS_RESPONSE_MESSAGE, "ADDRESS_ACCESS_RESPONSE"}, {AECP_AVC_COMMAND_MESSAGE, "AVC_COMMAND"}, {AECP_AVC_RESPONSE_MESSAGE, "AVC_RESPONSE"}, {AECP_VENDOR_UNIQUE_COMMAND_MESSAGE, "VENDOR_UNIQUE_COMMAND"}, {AECP_VENDOR_UNIQUE_RESPONSE_MESSAGE, "VENDOR_UNIQUE_RESPONSE"}, {AECP_EXTENDED_COMMAND_MESSAGE, "EXTENDED_COMMAND"}, {AECP_EXTENDED_RESPONSE_MESSAGE, "EXTENDED_RESPONSE"}, {0, NULL } }; static const value_string aecp_command_type_vals[] = { {AECP_COMMAND_ACQUIRE_ENTITY , "ACQUIRE_ENTITY"}, {AECP_COMMAND_LOCK_ENTITY , "LOCK_ENTITY"}, {AECP_COMMAND_ENTITY_AVAILABLE , "ENTITY_AVAILABLE"}, {AECP_COMMAND_CONTROLLER_AVAILABLE , "CONTROLLER_AVAILABLE"}, {AECP_COMMAND_READ_DESCRIPTOR , "READ_DESCRIPTOR"}, {AECP_COMMAND_WRITE_DESCRIPTOR , "WRITE_DESCRIPTOR"}, {AECP_COMMAND_SET_CONFIGURATION , "SET_CONFIGURATION"}, {AECP_COMMAND_GET_CONFIGURATION , "GET_CONFIGURATION"}, {AECP_COMMAND_SET_STREAM_FORMAT , "SET_STREAM_FORMAT"}, {AECP_COMMAND_GET_STREAM_FORMAT , "GET_STREAM_FORMAT"}, {AECP_COMMAND_SET_VIDEO_FORMAT , "SET_VIDEO_FORMAT"}, {AECP_COMMAND_GET_VIDEO_FORMAT , "GET_VIDEO_FORMAT"}, {AECP_COMMAND_SET_SENSOR_FORMAT , "SET_SENSOR_FORMAT"}, {AECP_COMMAND_GET_SENSOR_FORMAT , "GET_SENSOR_FORMAT"}, {AECP_COMMAND_SET_STREAM_INFO , "SET_STREAM_INFO"}, {AECP_COMMAND_GET_STREAM_INFO , "GET_STREAM_INFO"}, {AECP_COMMAND_SET_NAME , "SET_NAME"}, {AECP_COMMAND_GET_NAME , "GET_NAME"}, {AECP_COMMAND_SET_ASSOCIATION_ID , "SET_ASSOCIATION_ID"}, {AECP_COMMAND_GET_ASSOCIATION_ID , "GET_ASSOCIATION_ID"}, {AECP_COMMAND_SET_SAMPLING_RATE , "SET_SAMPLING_RATE"}, {AECP_COMMAND_GET_SAMPLING_RATE , "GET_SAMPLING_RATE"}, {AECP_COMMAND_SET_CLOCK_SOURCE , "SET_CLOCK_SOURCE"}, {AECP_COMMAND_GET_CLOCK_SOURCE , "GET_CLOCK_SOURCE"}, {AECP_COMMAND_SET_CONTROL_VALUE , "SET_CONTROL_VALUE"}, {AECP_COMMAND_GET_CONTROL_VALUE , "GET_CONTROL_VALUE"}, {AECP_COMMAND_INCREMENT_CONTROL , "INCREMENT_CONTROL"}, {AECP_COMMAND_DECREMENT_CONTROL , "DECREMENT_CONTROL"}, {AECP_COMMAND_SET_SIGNAL_SELECTOR , "SET_SIGNAL_SELECTOR"}, {AECP_COMMAND_GET_SIGNAL_SELECTOR , "GET_SIGNAL_SELECTOR"}, {AECP_COMMAND_SET_MIXER , "SET_MIXER"}, {AECP_COMMAND_GET_MIXER , "GET_MIXER"}, {AECP_COMMAND_SET_MATRIX , "SET_MATRIX"}, {AECP_COMMAND_GET_MATRIX , "GET_MATRIX"}, {AECP_COMMAND_START_STREAMING , "START_STREAMING"}, {AECP_COMMAND_STOP_STREAMING , "STOP_STREAMING"}, {AECP_COMMAND_REGISTER_UNSOL_NOTIFICATION , "REGISTER_UNSOL_NOTIFICATION"}, {AECP_COMMAND_DEREGISTER_UNSOL_NOTIFICATION , "DEREGISTER_UNSOL_NOTIFICATION"}, {AECP_COMMAND_IDENTIFY_NOTIFICATION , "IDENTIFY_NOTIFICATION"}, {AECP_COMMAND_GET_AVB_INFO , "GET_AVB_INFO"}, {AECP_COMMAND_GET_AS_PATH , "GET_AS_PATH"}, {AECP_COMMAND_GET_COUNTERS , "GET_COUNTERS"}, {AECP_COMMAND_REBOOT , "REBOOT"}, {AECP_COMMAND_GET_AUDIO_MAP , "GET_AUDIO_MAP"}, {AECP_COMMAND_ADD_AUDIO_MAPPINGS , "ADD_AUDIO_MAPPINGS"}, {AECP_COMMAND_REMOVE_AUDIO_MAPPINGS , "REMOVE_AUDIO_MAPPINGS"}, {AECP_COMMAND_GET_VIDEO_MAP , "GET_VIDEO_MAP"}, {AECP_COMMAND_ADD_VIDEO_MAPPINGS , "ADD_VIDEO_MAPPINGS"}, {AECP_COMMAND_REMOVE_VIDEO_MAPPINGS , "REMOVE_VIDEO_MAPPINGS"}, {AECP_COMMAND_GET_SENSOR_MAP , "GET_SENSOR_MAP"}, {AECP_COMMAND_ADD_SENSOR_MAPPINGS , "ADD_SENSOR_MAPPINGS"}, {AECP_COMMAND_REMOVE_SENSOR_MAPPINGS , "REMOVE_SENSOR_MAPPINGS"}, {AECP_COMMAND_START_OPERATION , "START_OPERATION"}, {AECP_COMMAND_ABORT_OPERATION , "ABORT_OPERATION"}, {AECP_COMMAND_OPERATION_STATUS , "OPERATION_STATUS"}, {AECP_COMMAND_AUTH_ADD_KEY , "AUTH_ADD_KEY"}, {AECP_COMMAND_AUTH_DELETE_KEY , "AUTH_DELETE_KEY"}, {AECP_COMMAND_AUTH_GET_KEY_LIST , "AUTH_GET_KEY_LIST"}, {AECP_COMMAND_AUTH_GET_KEY , "AUTH_GET_KEY"}, {AECP_COMMAND_AUTH_ADD_KEY_TO_CHAIN , "AUTH_ADD_KEY_TO_CHAIN"}, {AECP_COMMAND_AUTH_DELETE_KEY_FROM_CHAIN , "AUTH_DELETE_KEY_FROM_CHAIN"}, {AECP_COMMAND_AUTH_GET_KEYCHAIN_LIST , "AUTH_GET_KEYCHAIN_LIST"}, {AECP_COMMAND_AUTH_GET_IDENTITY , "AUTH_GET_IDENTITY"}, {AECP_COMMAND_AUTH_ADD_TOKEN , "AUTH_ADD_TOKEN"}, {AECP_COMMAND_AUTH_DELETE_TOKEN , "AUTH_DELETE_TOKEN"}, {AECP_COMMAND_AUTHENTICATE , "AUTHENTICATE"}, {AECP_COMMAND_DEAUTHENTICATE , "DEAUTHENTICATE"}, {AECP_COMMAND_ENABLE_TRANSPORT_SECURITY , "ENABLE_TRANSPORT_SECURITY"}, {AECP_COMMAND_DISABLE_TRANSPORT_SECURITY , "DISABLE_TRANSPORT_SECURITY"}, {AECP_COMMAND_ENABLE_STREAM_ENCRYPTION , "ENABLE_STREAM_ENCRYPTION"}, {AECP_COMMAND_DISABLE_STREAM_ENCRYPTION , "DISABLE_STREAM_ENCRYPTION"}, {AECP_COMMAND_SET_STREAM_BACKUP , "SET_STREAM_BACKUP"}, {AECP_COMMAND_GET_STREAM_BACKUP , "GET_STREAM_BACKUP"}, {0 , NULL} }; static const value_string adp_message_type_vals[] = { {ADP_ENTITY_AVAILABLE_MESSAGE, "ENTITY_AVAILABLE"}, {ADP_ENTITY_DEPARTING_MESSAGE, "ENTITY_DEPARTING"}, {ADP_ENTITY_DISCOVER_MESSAGE, "ENTITY_DISCOVER"}, {0, NULL } }; static const value_string acmp_message_type_vals[] = { {ACMP_CONNECT_TX_COMMAND, "CONNECT_TX_COMMAND"}, {ACMP_CONNECT_TX_RESPONSE, "CONNECT_TX_RESPONSE"}, {ACMP_DISCONNECT_TX_COMMAND, "DISCONNECT_TX_COMMAND"}, {ACMP_DISCONNECT_TX_RESPONSE, "DISCONNECT_TX_RESPONSE"}, {ACMP_GET_TX_STATE_COMMAND, "GET_TX_STATE_COMMAND"}, {ACMP_GET_TX_STATE_RESPONSE, "GET_TX_STATE_RESPONSE"}, {ACMP_CONNECT_RX_COMMAND, "CONNECT_RX_COMMAND"}, {ACMP_CONNECT_RX_RESPONSE, "CONNECT_RX_RESPONSE"}, {ACMP_DISCONNECT_RX_COMMAND, "DISCONNECT_RX_COMMAND"}, {ACMP_DISCONNECT_RX_RESPONSE, "DISCONNECT_RX_RESPONSE"}, {ACMP_GET_RX_STATE_COMMAND, "GET_RX_STATE_COMMAND"}, {ACMP_GET_RX_STATE_RESPONSE, "GET_RX_STATE_RESPONSE"}, {ACMP_GET_TX_CONNECTION_COMMAND, "GET_TX_CONNECTION_COMMAND"}, {ACMP_GET_TX_CONNECTION_RESPONSE, "GET_TX_CONNECTION_RESPONSE"}, {0, NULL } }; static const value_string acmp_status_field_vals[] = { {ACMP_STATUS_SUCCESS, "SUCCESS"}, {ACMP_STATUS_LISTENER_UNKNOWN_ID, "LISTENER_UNKNOWN_ID"}, {ACMP_STATUS_TALKER_UNKNOWN_ID, "TALKER_UNKNOWN_ID"}, {ACMP_STATUS_TALKER_DEST_MAC_FAIL, "TALKER_DEST_MAC_FAIL"}, {ACMP_STATUS_TALKER_NO_STREAM_INDEX, "TALKER_NO_STREAM_INDEX"}, {ACMP_STATUS_TALKER_NO_BANDWIDTH, "TALKER_NO_BANDWIDTH"}, {ACMP_STATUS_TALKER_EXCLUSIVE, "TALKER_EXCLUSIVE"}, {ACMP_STATUS_LISTENER_TALKER_TIMEOUT, "LISTENER_TALKER_TIMEOUT"}, {ACMP_STATUS_LISTENER_EXCLUSIVE, "LISTENER_EXCLUSIVE"}, {ACMP_STATUS_STATE_UNAVAILABLE, "STATE_UNAVAILABLE"}, {ACMP_STATUS_NOT_CONNECTED, "NOT_CONNECTED"}, {ACMP_STATUS_NO_SUCH_CONNECTION, "NO_SUCH_CONNECTION"}, {ACMP_STATUS_COULD_NOT_SEND_MESSAGE, "COULD_NOT_SEND_MESSAGE"}, {ACMP_STATUS_DEFAULT_SET_DIFFERENT, "DEFAULT_SET_DIFFERENT"}, {ACMP_STATUS_NOT_SUPPORTED, "NOT_SUPPORTED"}, {0, NULL } }; static const value_string aecp_sampling_rate_pull_field_vals[] = { {0, "Multiply by 1.0"}, {1, "Multiply by 1/1.001"}, {2, "Multiply by 1.001"}, {3, "Multiply by 24/25"}, {4, "Multiply by 25/24"}, {0, NULL } }; /**********************************************************/ /* Initialize the protocol and registered fields */ /**********************************************************/ static int proto_17221; /* AVDECC Discovery Protocol Data Unit (ADPDU) */ static int hf_adp_message_type; static int hf_adp_valid_time; static int hf_adp_cd_length; static int hf_adp_entity_id; static int hf_adp_entity_model_id; static int hf_adp_entity_cap; static int hf_adp_talker_stream_srcs; static int hf_adp_talker_cap; static int hf_adp_listener_stream_sinks; static int hf_adp_listener_cap; static int hf_adp_controller_cap; static int hf_adp_avail_index; static int hf_adp_gptp_gm_id; /* static int hf_adp_def_aud_format; */ /* static int hf_adp_def_vid_format; */ static int hf_adp_assoc_id; /* static int hf_adp_entity_type; */ /* Entity Capabilities Flags */ static int hf_adp_entity_cap_efu_mode; static int hf_adp_entity_cap_address_access_supported; static int hf_adp_entity_cap_gateway_entity; static int hf_adp_entity_cap_aem_supported; static int hf_adp_entity_cap_legacy_avc; static int hf_adp_entity_cap_assoc_id_support; static int hf_adp_entity_cap_assoc_id_valid; static int hf_adp_entity_cap_vendor_unique; static int hf_adp_entity_cap_class_a_supported; static int hf_adp_entity_cap_class_b_supported; static int hf_adp_entity_cap_gptp_supported; /* Talker Capabilities Flags */ static int hf_adp_talk_cap_implement; static int hf_adp_talk_cap_other_src; static int hf_adp_talk_cap_control_src; static int hf_adp_talk_cap_media_clk_src; static int hf_adp_talk_cap_smpte_src; static int hf_adp_talk_cap_midi_src; static int hf_adp_talk_cap_audio_src; static int hf_adp_talk_cap_video_src; /* Listener Capabilities Flags */ static int hf_adp_list_cap_implement; static int hf_adp_list_cap_other_sink; static int hf_adp_list_cap_control_sink; static int hf_adp_list_cap_media_clk_sink; static int hf_adp_list_cap_smpte_sink; static int hf_adp_list_cap_midi_sink; static int hf_adp_list_cap_audio_sink; static int hf_adp_list_cap_video_sink; /* Controller Capabilities Flags */ static int hf_adp_cont_cap_implement; static int hf_adp_cont_cap_layer3_proxy; #if 0 /* Default Audio Format */ static int hf_adp_def_aud_sample_rates; static int hf_adp_def_aud_max_chan; static int hf_adp_def_aud_saf_flag; static int hf_adp_def_aud_float_flag; static int hf_adp_def_aud_chan_formats; /* Default Audio Sample Rates */ static int hf_adp_samp_rate_44k1; static int hf_adp_samp_rate_48k; static int hf_adp_samp_rate_88k2; static int hf_adp_samp_rate_96k; static int hf_adp_samp_rate_176k4; static int hf_adp_samp_rate_192k; /* Audio Channel Formats */ static int hf_adp_chan_format_mono; static int hf_adp_chan_format_2ch; static int hf_adp_chan_format_3ch; static int hf_adp_chan_format_4ch; static int hf_adp_chan_format_5ch; static int hf_adp_chan_format_6ch; static int hf_adp_chan_format_7ch; static int hf_adp_chan_format_8ch; static int hf_adp_chan_format_10ch; static int hf_adp_chan_format_12ch; static int hf_adp_chan_format_14ch; static int hf_adp_chan_format_16ch; static int hf_adp_chan_format_18ch; static int hf_adp_chan_format_20ch; static int hf_adp_chan_format_22ch; static int hf_adp_chan_format_24ch; #endif /* AECP Vendor Unique Protocol Dissector table */ static dissector_table_t vendor_unique_protocol_dissector_table; /* ***************************************************************** */ /* AVDECC Enumeration and Control Protocol Data Unit (AECPDU) */ /* ***************************************************************** */ static int hf_aecp_aa_count; static int hf_aecp_aa_tlv_mode; static int hf_aecp_aa_tlv_length; static int hf_aecp_aa_tlv_address; /* static int hf_aecp_address_type; */ static int hf_aecp_association_id; static int hf_aecp_as_path_count; static int hf_aecp_as_path_sequences; static int ett_aecp_get_as_path_sequences; static int hf_aecp_get_as_info_clock_id; static int hf_aecp_auth_token; static int hf_aecp_avb_interface_gptp_gm_changed_valid; static int hf_aecp_avb_interface_gptp_gm_changed; static int hf_aecp_avb_interface_link_up_valid; static int hf_aecp_avb_interface_link_up; static int hf_aecp_avb_interface_link_down_valid; static int hf_aecp_avb_interface_link_down; static int hf_aecp_avb_interface_packets_tx_valid; static int hf_aecp_avb_interface_packets_tx; static int hf_aecp_avb_interface_packets_rx_valid; static int hf_aecp_avb_interface_packets_rx; static int hf_aecp_avb_interface_rx_crc_error_valid; static int hf_aecp_avb_interface_rx_crc_error; static int hf_aecp_cd_length; static int hf_aecp_clock_domain_locked_valid; static int hf_aecp_clock_domain_locked; static int hf_aecp_clock_domain_unlocked_valid; static int hf_aecp_clock_domain_unlocked; static int hf_aecp_clock_source_id; static int hf_aecp_command_type; static int hf_aecp_configuration; static int hf_aecp_configuration_index; static int hf_aecp_connected_flag; /* static int hf_aecp_continued_flag; */ /* static int hf_aecp_control_admin_flag; */ /* static int hf_aecp_control_user_l1; */ /* static int hf_aecp_control_user_l2; */ /* static int hf_aecp_control_user_l3; */ /* static int hf_aecp_control_user_l4; */ static int hf_aecp_controller_guid; /* static int hf_aecp_count; */ static int hf_aecp_descriptor_index; static int hf_aecp_descriptor_type; /* static int hf_aecp_descriptors; */ static int hf_aecp_dest_mac_valid_flag; static int hf_aecp_entity_specific1; static int hf_aecp_entity_specific1_valid; static int hf_aecp_entity_specific2; static int hf_aecp_entity_specific2_valid; static int hf_aecp_entity_specific3; static int hf_aecp_entity_specific3_valid; static int hf_aecp_entity_specific4; static int hf_aecp_entity_specific4_valid; static int hf_aecp_entity_specific5; static int hf_aecp_entity_specific5_valid; static int hf_aecp_entity_specific6; static int hf_aecp_entity_specific6_valid; static int hf_aecp_entity_specific7; static int hf_aecp_entity_specific7_valid; static int hf_aecp_entity_specific8; static int hf_aecp_entity_specific8_valid; static int hf_aecp_flags_32; /* static int hf_aecp_ipv4_address; */ /* static int hf_aecp_ipv6_address; */ static int hf_aecp_key; static int hf_aecp_key_eui; static int hf_aecp_key_length; /* static int hf_aecp_key_number; */ /* static int hf_aecp_key_part; */ static int hf_aecp_keychain_id; static int hf_aecp_keychain_id_small; static int hf_aecp_keychain_list_index; static int hf_aecp_keychain_number_of_keys; static int hf_aecp_keychain_number_of_lists; static int hf_aecp_key_signature; static int hf_aecp_key_type; static int hf_aecp_locked_guid; static int hf_aecp_mac_address; static int hf_aecp_map_index; /* static int hf_aecp_matrix_affected_item_count; */ static int hf_aecp_matrix_column; static int hf_aecp_matrix_direction; static int hf_aecp_matrix_item_offset; static int hf_aecp_matrix_region_height; static int hf_aecp_matrix_region_width; static int hf_aecp_matrix_rep; static int hf_aecp_matrix_row; static int hf_aecp_matrix_value_count; /* static int hf_aecp_media_format; */ /* static int hf_aecp_mem_obj_admin_flag; */ /* static int hf_aecp_mem_obj_settings_flag; */ static int hf_aecp_message_type; static int hf_aecp_msrp_acc_lat_valid_flag; static int hf_aecp_msrp_accumulated_latency; static int hf_aecp_msrp_failure_bridge_id; static int hf_aecp_msrp_failure_code; static int hf_aecp_msrp_failure_valid_flag; /* static int hf_aecp_stream_vlan_id; */ static int hf_aecp_name; static int hf_aecp_name_index; static int hf_aecp_number_of_maps; static int hf_aecp_operation_id; static int hf_aecp_operation_type; static int hf_aecp_owner_guid; static int hf_aecp_percent_complete; static int hf_aecp_persistent_flag; /* static int hf_aecp_private_key_read_flag; */ /* static int hf_aecp_private_key_write_flag; */ /* static int hf_aecp_public_key_write_flag; */ /* static int hf_aecp_query_id; */ /* static int hf_aecp_query_limit; */ /* static int hf_aecp_query_period; */ /* static int hf_aecp_query_type; */ static int hf_aecp_release_flag; static int hf_aecp_sampling_rate_base_frequency; static int hf_aecp_sampling_rate_pull; static int hf_aecp_sequence_id; static int hf_aecp_signal_index; static int hf_aecp_signal_type; static int hf_aecp_signal_output; static int hf_aecp_stream_format; static int hf_aecp_stream_format_valid_flag; static int hf_aecp_stream_id_valid_flag; static int hf_aecp_stream_input_early_timestamp_valid; static int hf_aecp_stream_input_early_timestamp; static int hf_aecp_stream_input_late_timestamp_valid; static int hf_aecp_stream_input_late_timestamp; static int hf_aecp_stream_input_media_locked_valid; static int hf_aecp_stream_input_media_locked; static int hf_aecp_stream_input_media_unlocked_valid; static int hf_aecp_stream_input_media_unlocked; static int hf_aecp_stream_input_media_reset_valid; static int hf_aecp_stream_input_media_reset; static int hf_aecp_stream_input_packets_rx_valid; static int hf_aecp_stream_input_packets_rx; static int hf_aecp_stream_input_packets_tx_valid; static int hf_aecp_stream_input_packets_tx; static int hf_aecp_stream_input_seq_num_mismatch_valid; static int hf_aecp_stream_input_seq_num_mismatch; static int hf_aecp_stream_input_stream_reset_valid; static int hf_aecp_stream_input_stream_reset; static int hf_aecp_stream_input_timestamp_uncertain_valid; static int hf_aecp_stream_input_timestamp_uncertain; static int hf_aecp_stream_input_timestamp_valid_valid; static int hf_aecp_stream_input_timestamp_valid; static int hf_aecp_stream_input_timestamp_not_valid_valid; static int hf_aecp_stream_input_timestamp_not_valid; static int hf_aecp_stream_input_unsupported_format_valid; static int hf_aecp_stream_input_unsupported_format; static int hf_aecp_stream_vlan_id_valid_flag; static int hf_aecp_target_guid; static int hf_aecp_token_length; static int hf_aecp_u_flag; static int hf_aecp_unlock_flag; /* static int hf_aecp_values; */ /* static int hf_aecp_values_count; */ static int hf_aecp_vendor_unique_protocol_id; static int hf_aecp_video_format; static int hf_aecp_status_code; static int hf_aecp_backup_talker_entity_id_0; static int hf_aecp_backup_talker_entity_id_1; static int hf_aecp_backup_talker_entity_id_2; static int hf_aecp_backup_talker_unique_id_0; static int hf_aecp_backup_talker_unique_id_1; static int hf_aecp_backup_talker_unique_id_2; static int hf_aecp_backedup_talker_entity_id; static int hf_aecp_backedup_talker_unique_id; static int hf_aecp_avb_info_ptp_grandmaster_id; static int hf_aecp_avb_info_propegation_delay; static int hf_aecp_avb_info_gptp_domain_number; /* static int hf_aecp_avb_info_flags; */ static int hf_aecp_as_capable_flag; static int hf_aecp_gptp_enabled_flag; static int hf_aecp_srp_enabled_flag; static int hf_aecp_avb_info_msrp_mappings_count; static int hf_aecp_avb_info_msrp_mappings; static int hf_aecp_avb_info_msrp_mapping_traffic_class; static int hf_aecp_avb_info_msrp_mapping_priority; static int hf_aecp_get_avb_info_msrp_vlan_id; /* ***************************************************************** */ /* AVDECC Entity Model (AEM) */ /* ***************************************************************** */ static int hf_aem_am824_label; /* static int hf_aem_aspect_x; */ /* static int hf_aem_aspect_y; */ /* static int hf_aem_audio_channels; */ static int hf_aem_avb_interface_id; static int hf_aem_buffer_length; static int hf_aem_b_flag; static int hf_aem_backedup_talker_guid; static int hf_aem_backedup_talker_unique; static int hf_aem_backup_talker_guid_0; static int hf_aem_backup_talker_guid_1; static int hf_aem_backup_talker_guid_2; static int hf_aem_backup_talker_unique_0; static int hf_aem_backup_talker_unique_1; static int hf_aem_backup_talker_unique_2; static int hf_aem_base_audio_map; static int hf_aem_base_cluster; static int hf_aem_base_control; static int hf_aem_base_control_block; /* static int hf_aem_base_destination; */ static int hf_aem_base_external_input_port; static int hf_aem_base_external_output_port; static int hf_aem_base_frequency; static int hf_aem_base_internal_input_port; static int hf_aem_base_internal_output_port; static int hf_aem_base_matrix; static int hf_aem_base_mixer; static int hf_aem_base_signal_selector; /* static int hf_aem_base_source; */ static int hf_aem_number_splitters; static int hf_aem_base_splitter; static int hf_aem_number_combiners; static int hf_aem_base_combiner; static int hf_aem_number_demultiplexers; static int hf_aem_base_demultiplexer; static int hf_aem_number_multiplexers; static int hf_aem_base_multiplexer; static int hf_aem_number_transcoders; static int hf_aem_base_transcoder; static int hf_aem_base_stream_input_port; static int hf_aem_base_stream_output_port; static int hf_aem_base_strings; static int hf_aem_binary_blob; static int hf_aem_blob_size; static int hf_aem_block_latency; static int hf_aem_reset_time; /* static int hf_aem_bpp; */ static int hf_aem_channel_count; /* static int hf_aem_channels; */ static int hf_aem_clock_source_flags; static int hf_aem_clock_source_id; static int hf_aem_clock_domain_id; static int hf_aem_clock_sources_offset; static int hf_aem_clock_source_index; static int hf_aem_clock_sources_count; static int hf_aem_clock_sources; static int hf_aem_clock_sources_array; static int hf_aem_clock_source_location_id; static int hf_aem_clock_source_location_type; static int hf_aem_clock_source_name; static int hf_aem_clock_source_name_string; static int hf_aem_clock_source_type; /* static int hf_aem_cluster_name; */ /* static int hf_aem_cluster_name_string; */ /* static int hf_aem_color_format; */ static int hf_aem_color_space; /* static int hf_aem_comp1; */ /* static int hf_aem_comp2; */ /* static int hf_aem_comp3; */ /* static int hf_aem_comp4; */ static int hf_aem_compress_mode; static int hf_aem_configuration_name; static int hf_aem_configuration_name_string; static int hf_aem_configurations_count; static int hf_aem_control_domain; static int hf_aem_control_latency; /* static int hf_aem_control_location_id; */ /* static int hf_aem_control_location_type; */ static int hf_aem_control_type; static int hf_aem_control_value_type; static int hf_aem_count; /* static int hf_aem_cs_eui64; */ static int hf_aem_ctrl_double; static int hf_aem_ctrl_float; static int hf_aem_ctrl_int16; static int hf_aem_ctrl_int32; static int hf_aem_ctrl_int64; static int hf_aem_ctrl_int8; static int hf_aem_ctrl_uint16; static int hf_aem_ctrl_uint32; static int hf_aem_ctrl_uint64; static int hf_aem_ctrl_uint8; static int hf_aem_ctrl_vals; static int hf_aem_current_configuration; static int hf_aem_current_sample_rate; /* static int hf_aem_current_signal_id; */ /* static int hf_aem_current_signal_type; */ static int hf_aem_dbs; /* static int hf_aem_default_signal_id; */ /* static int hf_aem_default_signal_type; */ static int hf_aem_descriptor_counts_count; static int hf_aem_descriptor_counts_offset; /* static int hf_aem_div; */ static int hf_aem_entity_id; static int hf_aem_entity_model_id; static int hf_aem_entity_name; static int hf_aem_fdf_evt; static int hf_aem_fdf_sfc; static int hf_aem_firmware_version; static int hf_aem_flags_async_sample_rate_conv; static int hf_aem_flags_captive; static int hf_aem_flags_class_a; static int hf_aem_flags_class_b; static int hf_aem_flags_clock_sync_source; static int hf_aem_flags_sync_sample_rate_conv; static int hf_aem_fmt; /* static int hf_aem_formats_count; */ static int hf_aem_formats_offset; /* static int hf_aem_frame_rate; */ static int hf_aem_frequency; static int hf_aem_group_name; static int hf_aem_guid; /* static int hf_aem_height; */ static int hf_aem_iidc_format; static int hf_aem_iidc_mode; static int hf_aem_iidc_rate; static int hf_aem_interface_name; static int hf_aem_interface_name_string; /* static int hf_aem_interlace; */ /* static int hf_aem_internal_id; */ static int hf_aem_jack_flags; static int hf_aem_jack_id; static int hf_aem_jack_name; static int hf_aem_jack_name_string; static int hf_aem_jack_type; static int hf_aem_label_iec_60958_cnt; static int hf_aem_label_mbla_cnt; static int hf_aem_label_midi_cnt; static int hf_aem_label_smpte_cnt; static int hf_aem_length; static int hf_aem_locale_identifier; static int hf_aem_mapping_cluster_offset; static int hf_aem_mapping_cluster_channel; static int hf_aem_mapping_stream_channel; static int hf_aem_mapping_stream_index; static int hf_aem_mappings; static int hf_aem_mappings_offset; static int hf_aem_memory_object_type; /* static int hf_aem_mf_height; */ /* static int hf_aem_mf_width; */ /* static int hf_aem_mfd_type; */ static int hf_aem_model_name_string; static int hf_aem_avb_interface_flags; static int hf_aem_avb_clock_identity; static int hf_aem_avb_priority1; static int hf_aem_avb_clock_class; static int hf_aem_avb_offset_scaled_log_variance; static int hf_aem_avb_clock_accuracy; static int hf_aem_avb_priority2; static int hf_aem_avb_domain_number; static int hf_aem_avb_log_sync_interval; /* static int hf_aem_avb_propagation_delay; */ static int hf_aem_nb_flag; static int hf_aem_number_audio_maps; /* static int hf_aem_number_destinations; */ static int hf_aem_number_matrices; static int hf_aem_number_mixers; static int hf_aem_number_of_clusters; static int hf_aem_number_of_controls; static int hf_aem_number_control_blocks; static int hf_aem_number_of_external_input_ports; static int hf_aem_number_of_external_output_ports; static int hf_aem_number_of_formats; static int hf_aem_number_of_internal_input_ports; static int hf_aem_number_of_internal_output_ports; static int hf_aem_number_of_mappings; /* static int hf_aem_number_of_sources; */ static int hf_aem_number_of_stream_input_ports; static int hf_aem_number_of_stream_output_ports; static int hf_aem_number_of_strings; static int hf_aem_number_of_values; static int hf_aem_number_signal_selectors; static int hf_aem_object_name; static int hf_aem_localized_description; /* static int hf_aem_oui24; */ static int hf_aem_path_latency; static int hf_aem_port_flags; static int hf_aem_pull_field; static int hf_aem_sample_rates; static int hf_aem_sample_rates_count; static int hf_aem_sample_rates_offset; static int hf_aem_serial_number; static int hf_aem_sf; static int hf_aem_sf_version; static int hf_aem_sf_subtype; static int hf_aem_signal_index; static int hf_aem_signal_output; static int hf_aem_signal_type; static int hf_aem_signals_count; static int hf_aem_signals_offset; static int hf_aem_sources; /* static int hf_aem_sources_offset; */ static int hf_aem_start_address; /* static int hf_aem_stream_channels; */ static int hf_aem_stream_flags; static int hf_aem_stream_format; static int hf_aem_stream_formats; /* static int hf_aem_stream_id; */ static int hf_aem_stream_name; static int hf_aem_stream_name_string; static int hf_aem_string; static int hf_aem_string_ref; static int hf_aem_target_descriptor_id; static int hf_aem_target_descriptor_type; static int hf_aem_unit; static int hf_aem_unknown_descriptor; /* static int hf_aem_value_offset; */ static int hf_aem_values_offset; static int hf_aem_vendor_name_string; static int hf_aem_video_mode; /* static int hf_aem_width; */ /****************************************************************** */ /* AVDECC Connection Management Protocol Data Unit (ACMPDU) */ /* **************************************************************** */ static int hf_acmp_message_type; static int hf_acmp_status_field; static int hf_acmp_cd_length; static int hf_acmp_stream_id; static int hf_acmp_controller_guid; static int hf_acmp_talker_guid; static int hf_acmp_listener_guid; static int hf_acmp_talker_unique_id; static int hf_acmp_listener_unique_id; static int hf_acmp_stream_dest_mac; static int hf_acmp_connection_count; static int hf_acmp_sequence_id; static int hf_acmp_flags; static int hf_acmp_vlan_id; /* ACMP Flags (8.2.1.17) */ static int hf_acmp_flags_class_b; static int hf_acmp_flags_fast_connect; static int hf_acmp_flags_saved_state; static int hf_acmp_flags_streaming_wait; static int hf_acmp_flags_supports_encrypted; static int hf_acmp_flags_encrypted_pdu; static int hf_acmp_flags_talker_failed; /* Initialize the subtree pointers */ static int ett_17221; /* ADP */ static int ett_adp_ent_cap; static int ett_adp_talk_cap; static int ett_adp_list_cap; static int ett_adp_cont_cap; /* static int ett_adp_aud_format; */ static int ett_adp_samp_rates; static int ett_adp_chan_format; /* ACMP */ static int ett_acmp_flags; /* AEM */ static int ett_aem_descriptor; static int ett_aem_desc_counts; static int ett_aem_sample_rates; static int ett_aem_stream_flags; static int ett_aem_clock_sources; static int ett_aem_stream_formats; static int ett_aem_jack_flags; static int ett_aem_port_flags; static int ett_aecp_get_avb_info_msrp_mappings; static int ett_aem_clock_source_flags; static int ett_aem_mappings; static int ett_aem_ctrl_vals; static int ett_aem_sources; /* static int ett_aem_media_format; */ static int ett_aem_stream_format; static int ett_aecp_descriptors; static int ett_aecp_flags_32; typedef struct { int hf; uint16_t size; } ctrl_ref_vals; /* convenience function */ static inline ctrl_ref_vals get_ctrl_ref_vals(uint16_t ctrl_val_type) { ctrl_ref_vals ret; switch(ctrl_val_type) { case AEM_CONTROL_LINEAR_INT8: case AEM_CONTROL_SELECTOR_INT8: case AEM_CONTROL_ARRAY_INT8: ret.hf = hf_aem_ctrl_int8; ret.size = 1; break; case AEM_CONTROL_LINEAR_UINT8: case AEM_CONTROL_SELECTOR_UINT8: case AEM_CONTROL_ARRAY_UINT8: ret.hf = hf_aem_ctrl_uint8; ret.size = 1; break; case AEM_CONTROL_LINEAR_INT16: case AEM_CONTROL_SELECTOR_INT16: case AEM_CONTROL_ARRAY_INT16: ret.hf = hf_aem_ctrl_int16; ret.size = 2; break; case AEM_CONTROL_LINEAR_UINT16: case AEM_CONTROL_SELECTOR_UINT16: case AEM_CONTROL_ARRAY_UINT16: ret.hf = hf_aem_ctrl_uint16; ret.size = 2; break; case AEM_CONTROL_LINEAR_INT32: case AEM_CONTROL_SELECTOR_INT32: case AEM_CONTROL_ARRAY_INT32: ret.hf = hf_aem_ctrl_int32; ret.size = 4; break; case AEM_CONTROL_LINEAR_UINT32: case AEM_CONTROL_SELECTOR_UINT32: case AEM_CONTROL_ARRAY_UINT32: ret.hf = hf_aem_ctrl_uint32; ret.size = 4; break; case AEM_CONTROL_LINEAR_FLOAT: case AEM_CONTROL_SELECTOR_FLOAT: case AEM_CONTROL_ARRAY_FLOAT: ret.hf = hf_aem_ctrl_float; ret.size = 4; break; case AEM_CONTROL_LINEAR_INT64: case AEM_CONTROL_SELECTOR_INT64: case AEM_CONTROL_ARRAY_INT64: ret.hf = hf_aem_ctrl_int64; ret.size = 8; break; case AEM_CONTROL_LINEAR_UINT64: case AEM_CONTROL_SELECTOR_UINT64: case AEM_CONTROL_ARRAY_UINT64: ret.hf = hf_aem_ctrl_uint64; ret.size = 8; break; case AEM_CONTROL_LINEAR_DOUBLE: case AEM_CONTROL_SELECTOR_DOUBLE: case AEM_CONTROL_ARRAY_DOUBLE: ret.hf = hf_aem_ctrl_double; ret.size = 8; break; case AEM_CONTROL_BODE_PLOT: ret.hf = -1; ret.size = 12; break; default: ret.size = 0; ret.hf = -1; break; } return ret; } static void dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree) { proto_item *stream_tree; proto_item *stream_ti; uint8_t version; uint8_t subtype; uint8_t sf; uint8_t fmt; uint8_t fdf_evt; /* subtree */ stream_ti = proto_tree_add_item(tree, hf_aem_stream_format, tvb, 0, 8, ENC_NA); stream_tree = proto_item_add_subtree(stream_ti, ett_aem_stream_format); /* get version */ version = tvb_get_uint8(tvb, 0) & AEM_MASK_SF_VERSION; /* add the version to the tree */ proto_tree_add_item(stream_tree, hf_aem_sf_version, tvb, AEM_OFFSET_SF_VERSION, 1, ENC_BIG_ENDIAN); if (version == 0) { /* stream format version 0 */ subtype = tvb_get_uint8(tvb, AEM_OFFSET_SF_SUBTYPE) & AEM_MASK_SF_SUBTYPE; proto_tree_add_item(stream_tree, hf_aem_sf_subtype, tvb, AEM_OFFSET_SF_SUBTYPE, 1, ENC_BIG_ENDIAN); switch(subtype) { case IEC_61883_IIDC_SUBTYPE: /* get sf */ sf = tvb_get_uint8(tvb, 1) & AEM_MASK_SF; proto_tree_add_item(stream_tree, hf_aem_sf, tvb, AEM_OFFSET_SF, 1, ENC_BIG_ENDIAN); if (sf == 0) { /* IIDC Stream Format */ proto_tree_add_item(stream_tree, hf_aem_iidc_format, tvb, AEM_OFFSET_IIDC_FORMAT, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_iidc_mode, tvb, AEM_OFFSET_IIDC_MODE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_iidc_rate, tvb, AEM_OFFSET_IIDC_RATE, 1, ENC_BIG_ENDIAN); } else { /* 61883 Stream Format */ proto_tree_add_item(stream_tree, hf_aem_fmt, tvb, AEM_OFFSET_FMT, 1, ENC_BIG_ENDIAN); fmt = tvb_get_uint8(tvb, AEM_OFFSET_FMT) & 0x7F; if (fmt == 0x20) { /* 61883-6 Stream Format */ proto_tree_add_item(stream_tree, hf_aem_fdf_evt, tvb, AEM_OFFSET_FDF_EVT, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_fdf_sfc, tvb, AEM_OFFSET_FDF_SFC, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_dbs, tvb, AEM_OFFSET_DBS, 1, ENC_BIG_ENDIAN); fdf_evt = tvb_get_uint8(tvb, AEM_OFFSET_FDF_EVT) & AEM_MASK_FDF_EVT; proto_tree_add_item(stream_tree, hf_aem_b_flag, tvb, AEM_OFFSET_B, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_nb_flag, tvb, AEM_OFFSET_NB, 1, ENC_BIG_ENDIAN); if (fdf_evt == 0x00) { /* 61883-6 AM824 Stream Format */ proto_tree_add_item(stream_tree, hf_aem_label_iec_60958_cnt, tvb, AEM_OFFSET_LABEL_IEC_60958_CNT, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_label_mbla_cnt, tvb, AEM_OFFSET_LABEL_MBLA_CNT, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_label_midi_cnt, tvb, AEM_OFFSET_LABEL_MIDI_CNT, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_label_smpte_cnt, tvb, AEM_OFFSET_LABEL_SMPTE_CNT, 1, ENC_BIG_ENDIAN); } } else if (fmt == 0x01) { /* 61883-8 Stream Format */ proto_tree_add_item(stream_tree, hf_aem_video_mode, tvb, AEM_OFFSET_VIDEO_MODE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_compress_mode, tvb, AEM_OFFSET_COMPRESS_MODE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(stream_tree, hf_aem_color_space, tvb, AEM_OFFSET_COLOR_SPACE, 1, ENC_BIG_ENDIAN); } } break; case MMA_SUBTYPE: /* Defined by the MMA */ break; case AVTP_AUDIO_SUBTYPE: /* Defined by the AVTP */ break; case AVTP_VIDEO_SUBTYPE: /* Defined by the AVTP */ break; case EXPERIMENTAL_SUBTYPE: /* used for experimental formats for development purposes only */ break; default: /* unknown or unimplemented subtype */ /* possibly a weather baloon, or swamp gas */ break; } } } static void dissect_17221_video_format(tvbuff_t *tvb, proto_tree *tree) { /* TODO */ proto_tree_add_item(tree, hf_aecp_video_format, tvb, 0, 4, ENC_NA); } static void dissect_17221_video_aspect_ratio(tvbuff_t *tvb, proto_tree *tree) { /* TODO */ proto_tree_add_item(tree, hf_aecp_video_format, tvb, 0, 2, ENC_NA); } static void dissect_17221_video_frame_size(tvbuff_t *tvb, proto_tree *tree) { /* TODO */ proto_tree_add_item(tree, hf_aecp_video_format, tvb, 0, 4, ENC_NA); } static void dissect_17221_sensor_format(tvbuff_t *tvb, proto_tree *tree) { /* TODO */ proto_tree_add_item(tree, hf_aecp_video_format, tvb, 0, 8, ENC_NA); } #if 0 /* old, prior to D21. Fix for D21 video format */ static void dissect_17221_media_format(tvbuff_t *tvb, proto_tree *tree) { proto_item *media_tree; proto_item *media_ti; uint32_t oui24; uint8_t mfd_type; /* grab the oui24 and mfd_type */ oui24 = tvb_get_ntoh24(tvb, 0); mfd_type = tvb_get_uint8(tvb, 3); /* subtree */ media_ti = proto_tree_add_item(tree, hf_aecp_media_format, tvb, 0, 16, ENC_NA); media_tree = proto_item_add_subtree(media_ti, ett_aem_media_format); /* standard media formats */ if (oui24 == OUI24_STANDARD_MEDIA_FORMAT) { /* Standard Media Format Fields */ proto_tree_add_item(media_tree, hf_aem_oui24, tvb, 0, 3, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_mfd_type, tvb, AEM_OFFSET_MFD_TYPE, 1, ENC_BIG_ENDIAN); /* break down the standard media format types */ switch(mfd_type) { case MFD_TYPE_VIDEO: proto_tree_add_item(media_tree, hf_aem_div, tvb, AEM_OFFSET_DIV, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_interlace, tvb, AEM_OFFSET_INTERLACE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_channels, tvb, AEM_OFFSET_CHANNELS, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_color_format, tvb, AEM_OFFSET_COLOR_FORMAT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_bpp, tvb, AEM_OFFSET_BPP, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_aspect_x, tvb, AEM_OFFSET_ASPECT_X, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_aspect_y, tvb, AEM_OFFSET_ASPECT_Y, 1 ,ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_frame_rate, tvb, AEM_OFFSET_FRAME_RATE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_comp1, tvb, AEM_OFFSET_COMP1, 2, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_comp2, tvb, AEM_OFFSET_COMP2, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_comp3, tvb, AEM_OFFSET_COMP3, 2, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_comp4, tvb, AEM_OFFSET_COMP4, 1, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_mf_width, tvb, AEM_OFFSET_SVMF_WIDTH, 2, ENC_BIG_ENDIAN); proto_tree_add_item(media_tree, hf_aem_mf_height, tvb, AEM_OFFSET_SVMF_HEIGHT, 2, ENC_BIG_ENDIAN); break; case MFD_TYPE_TRANSPORT_STRM: break; case MFD_TYPE_MIDI: break; case MFD_TYPE_TIME_CODE: break; case MFD_TYPE_CONTROL_PROTO: proto_tree_add_item(media_tree, hf_aem_cs_eui64, tvb, AEM_OFFSET_CS_EUI64, 8, ENC_BIG_ENDIAN); break; default: /* unsupported MFD type */ break; } } else { /* vendor specific media formats */ /* these are not the media formats you are looking for */ } } #endif /* TODO following updates in Draft 18 and the pending Draft 19 this section will require major overhaul */ static void dissect_17221_ctrl_val(tvbuff_t *tvb, proto_tree *tree, uint16_t num_ctrl_vals, uint16_t ctrl_val_type, uint16_t ctrl_offset) { proto_item *ctrl_item; proto_item *ctrl_subtree; int i; uint32_t bin_blob_size; ctrl_ref_vals ref; /* set up control values tree */ ctrl_item = proto_tree_add_item(tree, hf_aem_ctrl_vals, tvb, 0, 0, ENC_NA); ctrl_subtree = proto_item_add_subtree(ctrl_item, ett_aem_ctrl_vals); /* ctrl_val_type's are dissected below in this if/else block */ /* for now only a few value types are in use, if I have time to come back to it I will add more fields to this but for now when viewing control_values you will need a copy of the spec handy to figure out what you are looking at, the get_ctrl_ref_vals function above will ideally be eliminated and this section will be a lot cleaner if/when that happens */ ref = get_ctrl_ref_vals(ctrl_val_type); /* LINEAR TYPES */ if (ctrl_val_type < 0xa) { for(i = 0; i < num_ctrl_vals; ++i) { proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += ref.size; proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += ref.size; proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += ref.size; proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += ref.size; proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += ref.size; proto_tree_add_item(ctrl_subtree, hf_aem_unit, tvb, ctrl_offset, 2, ENC_BIG_ENDIAN); ctrl_offset += 2; proto_tree_add_item(ctrl_subtree, hf_aem_string_ref, tvb, ctrl_offset, 2, ENC_BIG_ENDIAN); ctrl_offset += 2; } /* SELECTOR TYPES */ } else if (ctrl_val_type > 0x9 && ctrl_val_type < 0x14) { proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += 2; proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += 2; for(i = 0; i < num_ctrl_vals; ++i) { proto_tree_add_item(ctrl_subtree, ref.hf, tvb, ctrl_offset, ref.size, ENC_BIG_ENDIAN); ctrl_offset += 2; } proto_tree_add_item(ctrl_subtree, hf_aem_unit, tvb, ctrl_offset, 2, ENC_BIG_ENDIAN); /* UTF8 STRING TYPE */ } else if (ctrl_val_type == 0x14) { proto_tree_add_item(ctrl_subtree, hf_aem_string, tvb, ctrl_offset, -1, ENC_ASCII); /* BODE_PLOT TYPE */ } else if (ctrl_val_type == 0x15) { for(i = 0; i < 12 + (num_ctrl_vals * 3); ++i) { proto_tree_add_item(ctrl_subtree, hf_aem_ctrl_float, tvb, ctrl_offset, 4, ENC_BIG_ENDIAN); ctrl_offset += 4; } /* ARRAY TYPES */ } else if (ctrl_val_type > 0x15 && ctrl_val_type < 0x1f) { /* VENDOR CONTROL TYPE */ } else if (ctrl_val_type == 0xfffe) { proto_tree_add_item(ctrl_subtree, hf_aem_guid, tvb, ctrl_offset, 8, ENC_BIG_ENDIAN); ctrl_offset += 8; bin_blob_size = tvb_get_ntohl(tvb, ctrl_offset); proto_tree_add_item(ctrl_subtree, hf_aem_blob_size, tvb, ctrl_offset, 4, ENC_BIG_ENDIAN); ctrl_offset += 4; proto_tree_add_item(ctrl_subtree, hf_aem_binary_blob, tvb, ctrl_offset, bin_blob_size, ENC_NA); } } /* dissect descriptors from the AVDECC Entity Model (AEM) */ /* this dissector is not registered */ static void dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) { uint16_t desc_type; uint16_t ctrl_val_type; uint16_t num_ctrl_vals; tvbuff_t *next_tvb; int i; /* Mr. Subtree and Mr. Counter will be used as the loop limit and * subtree object for arrays in the descriptors, rather than declaring * a separate variable for each possible case in the switch which uses * arrays. */ proto_item *mr_subtree; proto_item *mr_item; uint32_t mr_offset; uint16_t mr_counter; float frequency; int freq_mult; int base_freq; proto_item *aem_tree; /* used in creation of descriptor subtree */ proto_item *desc_ti; /* get the type of this descriptor */ desc_type = tvb_get_ntohs(tvb, 0); /* Load the descriptor type and id fields, add subtree */ desc_ti = proto_tree_add_item(tree, hf_aecp_descriptor_type, tvb, AEM_OFFSET_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); aem_tree = proto_item_add_subtree(desc_ti, ett_aem_descriptor); proto_tree_add_item(aem_tree, hf_aecp_descriptor_index, tvb, AEM_OFFSET_DESCRIPTOR_ID, 2, ENC_BIG_ENDIAN); /* Dissect descriptors based on type. Where possible multiple cases * * will fall through to the same code */ switch(desc_type) { case AEM_DESCRIPTOR_ENTITY: proto_tree_add_item(aem_tree, hf_aem_entity_id, tvb, ENTITY_OFFSET_ENTITY_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_entity_model_id, tvb, ENTITY_OFFSET_ENTITY_MODEL_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_efu_mode, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_address_access_supported, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_gateway_entity, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_aem_supported, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_legacy_avc, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_assoc_id_support, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_assoc_id_valid, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_vendor_unique, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_class_a_supported, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_class_b_supported, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_gptp_supported, tvb, ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talker_stream_srcs, tvb, ENTITY_OFFSET_TALKER_STREAM_SOURCES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talker_cap, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_implement, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_other_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_control_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_media_clk_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_smpte_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_midi_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_audio_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_video_src, tvb, ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_listener_stream_sinks, tvb, ENTITY_OFFSET_LISTENER_STREAM_SINKS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_listener_cap, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_implement, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_other_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_control_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_media_clk_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_smpte_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_midi_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_audio_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_video_sink, tvb, ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_controller_cap, tvb, ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_cont_cap_implement, tvb, ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_cont_cap_layer3_proxy, tvb, ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_avail_index, tvb, ENTITY_OFFSET_AVAILABLE_INDEX, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aecp_association_id, tvb, ENTITY_OFFSET_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_entity_name, tvb, ENTITY_OFFSET_ENTITY_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_vendor_name_string, tvb, ENTITY_OFFSET_VENDOR_NAME_STRING, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_model_name_string, tvb, ENTITY_OFFSET_MODEL_NAME_STRING, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_firmware_version, tvb, ENTITY_OFFSET_FIRMWARE_VERSION, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_group_name, tvb, ENTITY_OFFSET_GROUP_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_serial_number, tvb, ENTITY_OFFSET_SERIAL_NUMBER, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_configurations_count, tvb, ENTITY_OFFSET_CONFIGURATIONS_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_current_configuration, tvb, ENTITY_OFFSET_CURRENT_CONFIGURATION, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CONFIGURATION: proto_tree_add_item(aem_tree, hf_aem_configuration_name, tvb, CONFIGURATION_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_configuration_name_string, tvb, CONFIGURATION_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_descriptor_counts_count, tvb, CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_COUNT, 2, ENC_BIG_ENDIAN); /* set up subtree, counter, and offset for sample rates array */ mr_item = proto_tree_add_item(aem_tree, hf_aem_descriptor_counts_offset, tvb, CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_OFFSET, 2, ENC_BIG_ENDIAN); mr_counter = tvb_get_ntohs(tvb, CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS_COUNT); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_desc_counts); mr_offset = CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS; for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aecp_descriptor_type, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_count, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } break; case AEM_DESCRIPTOR_AUDIO_UNIT: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, AUDIO_UNIT_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, AUDIO_UNIT_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); /* D20 clock domain */ proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb, AUDIO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_stream_input_ports, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_stream_input_port, tvb, AUDIO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_stream_output_ports, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_stream_output_port, tvb, AUDIO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_external_input_ports, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_external_input_port, tvb, AUDIO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_external_output_ports, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_external_output_port, tvb, AUDIO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_internal_input_ports, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_internal_input_port, tvb, AUDIO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_internal_output_ports, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_internal_output_port, tvb, AUDIO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, AUDIO_UNIT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, AUDIO_UNIT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_signal_selectors, tvb, AUDIO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_signal_selector, tvb, AUDIO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_mixers, tvb, AUDIO_UNIT_OFFSET_NUMBER_MIXERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_mixer, tvb, AUDIO_UNIT_OFFSET_BASE_MIXER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_matrices, tvb, AUDIO_UNIT_OFFSET_NUMBER_MATRICES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_matrix, tvb, AUDIO_UNIT_OFFSET_BASE_MATRIX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_splitters, tvb, AUDIO_UNIT_OFFSET_NUMBER_SPLITTERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_splitter, tvb, AUDIO_UNIT_OFFSET_BASE_SPLITTER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_combiners, tvb, AUDIO_UNIT_OFFSET_NUMBER_COMBINERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_combiner, tvb, AUDIO_UNIT_OFFSET_BASE_COMBINER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_demultiplexers, tvb, AUDIO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_demultiplexer, tvb, AUDIO_UNIT_OFFSET_BASE_DEMULTIPLEXER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_multiplexers, tvb, AUDIO_UNIT_OFFSET_NUMBER_MULTIPLEXERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_multiplexer, tvb, AUDIO_UNIT_OFFSET_BASE_MULTIPLEXER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_transcoders, tvb, AUDIO_UNIT_OFFSET_NUMBER_TRANSCODERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_transcoder, tvb, AUDIO_UNIT_OFFSET_BASE_TRANSCODER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_control_blocks, tvb, AUDIO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control_block, tvb, AUDIO_UNIT_OFFSET_BASE_CONTROL_BLOCK, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_current_sample_rate, tvb, AUDIO_UNIT_OFFSET_CURRENT_SAMPLE_RATE, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_sample_rates_offset, tvb, AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_sample_rates_count, tvb, AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT, 2, ENC_BIG_ENDIAN); /* set up subtree, counter, and offset for sample rates array */ mr_offset = tvb_get_ntohs(tvb, AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET); mr_counter = tvb_get_ntohs(tvb, AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT); mr_item = proto_tree_add_item(aem_tree, hf_aem_sample_rates, tvb, mr_offset, mr_counter * 4, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sample_rates); /* loop to get the array values */ for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aem_pull_field, tvb, mr_offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_base_frequency, tvb, mr_offset, 4, ENC_BIG_ENDIAN); base_freq = tvb_get_ntohl(tvb, mr_offset); freq_mult = base_freq; freq_mult &= 0xe0000000; freq_mult = freq_mult >> 29; base_freq &= 0x1fffffff; /* replace this with something not horrible */ frequency = freq_mult == 0 ? 1 : freq_mult == 1 ? 1 / (float)1.001 : freq_mult == 2 ? (float)1.001 : freq_mult == 3 ? 24 / 25 : freq_mult == 4 ? 54 / 24 : 0; frequency *= base_freq; proto_tree_add_float(mr_subtree, hf_aem_frequency, tvb, mr_offset, 4, frequency); mr_offset += 4; } break; case AEM_DESCRIPTOR_VIDEO_UNIT: case AEM_DESCRIPTOR_SENSOR_UNIT: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, VIDEO_UNIT_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, VIDEO_UNIT_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); /* D20 clock domain */ proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb, AUDIO_UNIT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_stream_input_ports, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_stream_input_port, tvb, VIDEO_UNIT_OFFSET_BASE_STREAM_INPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_stream_output_ports, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_stream_output_port, tvb, VIDEO_UNIT_OFFSET_BASE_STREAM_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_external_input_ports, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_external_input_port, tvb, VIDEO_UNIT_OFFSET_BASE_EXTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_external_output_ports, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_external_output_port, tvb, VIDEO_UNIT_OFFSET_BASE_EXTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_internal_input_ports, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_internal_input_port, tvb, VIDEO_UNIT_OFFSET_BASE_INTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_internal_output_ports, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_internal_output_port, tvb, VIDEO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, VIDEO_UNIT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, VIDEO_UNIT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_signal_selectors, tvb, VIDEO_UNIT_OFFSET_NUMBER_SIGNAL_SELECTORS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_signal_selector, tvb, VIDEO_UNIT_OFFSET_BASE_SIGNAL_SELECTOR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_mixers, tvb, VIDEO_UNIT_OFFSET_NUMBER_MIXERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_mixer, tvb, VIDEO_UNIT_OFFSET_BASE_MIXER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_matrices, tvb, VIDEO_UNIT_OFFSET_NUMBER_MATRICES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_matrix, tvb, VIDEO_UNIT_OFFSET_BASE_MATRIX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_splitters, tvb, VIDEO_UNIT_OFFSET_NUMBER_SPLITTERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_splitter, tvb, VIDEO_UNIT_OFFSET_BASE_SPLITTER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_combiners, tvb, VIDEO_UNIT_OFFSET_NUMBER_COMBINERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_combiner, tvb, VIDEO_UNIT_OFFSET_BASE_COMBINER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_demultiplexers, tvb, VIDEO_UNIT_OFFSET_NUMBER_DEMULTIPLEXERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_demultiplexer, tvb, VIDEO_UNIT_OFFSET_BASE_DEMULTIPLEXER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_multiplexers, tvb, VIDEO_UNIT_OFFSET_NUMBER_MULTIPLEXERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_multiplexer, tvb, VIDEO_UNIT_OFFSET_BASE_MULTIPLEXER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_transcoders, tvb, VIDEO_UNIT_OFFSET_NUMBER_TRANSCODERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_transcoder, tvb, VIDEO_UNIT_OFFSET_BASE_TRANSCODER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_control_blocks, tvb, VIDEO_UNIT_OFFSET_NUMBER_CONTROL_BLOCKS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control_block, tvb, VIDEO_UNIT_OFFSET_BASE_CONTROL_BLOCK, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_STREAM_INPUT: case AEM_DESCRIPTOR_STREAM_OUTPUT: proto_tree_add_item(aem_tree, hf_aem_stream_name, tvb, STREAM_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_stream_name_string, tvb, STREAM_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); /* D20 clock domain */ proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb, STREAM_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN); /* set up a flags subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_stream_flags, tvb, STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_stream_flags); /* add flags to new subtree */ proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb, STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_class_a, tvb, STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_class_b, tvb, STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); /* done adding flags, continue with fields */ /* stream format dissection */ next_tvb = tvb_new_subset_length(tvb, STREAM_OFFSET_CURRENT_FORMAT, 8); dissect_17221_stream_format(next_tvb, aem_tree); proto_tree_add_item(aem_tree, hf_aem_formats_offset, tvb, STREAM_OFFSET_FORMATS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_formats, tvb, STREAM_OFFSET_NUMBER_OF_FORMATS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_0, tvb, STREAM_OFFSET_BACKUP_TALKER_GUID_0, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_0, tvb, STREAM_OFFSET_BACKUP_TALKER_UNIQUE_0, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_1, tvb, STREAM_OFFSET_BACKUP_TALKER_GUID_1, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_1, tvb, STREAM_OFFSET_BACKUP_TALKER_UNIQUE_1, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_2, tvb, STREAM_OFFSET_BACKUP_TALKER_GUID_2, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_2, tvb, STREAM_OFFSET_BACKUP_TALKER_UNIQUE_2, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backedup_talker_guid, tvb, STREAM_OFFSET_BACKEDUP_TALKER_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backedup_talker_unique, tvb, STREAM_OFFSET_BACKEDUP_TALKER_UNIQUE_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_interface_id, tvb, STREAM_OFFSET_AVB_INTERFACE_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_buffer_length, tvb, STREAM_OFFSET_BUFFER_LENGTH, 2, ENC_BIG_ENDIAN); mr_offset = tvb_get_ntohs(tvb, STREAM_OFFSET_FORMATS_OFFSET); mr_counter = tvb_get_ntohs(tvb, STREAM_OFFSET_NUMBER_OF_FORMATS); /* set up subtree, counter, and offset for formats array */ mr_item = proto_tree_add_item(aem_tree, hf_aem_stream_formats, tvb, mr_offset, mr_counter * 8, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_stream_formats); for(i = 0; i < mr_counter; ++i) { next_tvb = tvb_new_subset_length(tvb, mr_offset, 8); dissect_17221_stream_format(next_tvb, mr_subtree); mr_offset += 8; } break; case AEM_DESCRIPTOR_JACK_INPUT: case AEM_DESCRIPTOR_JACK_OUTPUT: proto_tree_add_item(aem_tree, hf_aem_jack_name, tvb, JACK_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_jack_name_string, tvb, JACK_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); /* set up jack flags subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_jack_flags, tvb, JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_jack_flags); proto_tree_add_item(mr_subtree, hf_aem_flags_captive, tvb, JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb, JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); /* end jack flags subtree */ proto_tree_add_item(aem_tree, hf_aem_jack_type, tvb, JACK_OFFSET_JACK_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, JACK_OFFSET_JACK_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, JACK_OFFSET_JACK_BASE_CONTROL, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_STREAM_PORT_INPUT: case AEM_DESCRIPTOR_STREAM_PORT_OUTPUT: /* D20 clock domain */ proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb, STREAM_PORT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN); /* set up port_flags subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb, STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_port_flags); proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb, STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); /* end port_flags subtree */ proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, STREAM_PORT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, STREAM_PORT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_clusters, tvb, STREAM_PORT_OFFSET_NUMBER_OF_CLUSTERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_cluster, tvb, STREAM_PORT_OFFSET_BASE_CLUSTER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_audio_maps, tvb, STREAM_PORT_OFFSET_NUMBER_AUDIO_MAPS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_audio_map, tvb, STREAM_PORT_OFFSET_BASE_AUDIO_MAP, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT: case AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT: proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb, EXTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN); /* set up port_flags subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb, EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_port_flags); proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb, EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); /* end port_flags subtree */ proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, EXTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, EXTERNAL_PORT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, EXTERNAL_PORT_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb, EXTERNAL_PORT_OFFSET_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb, EXTERNAL_PORT_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, EXTERNAL_PORT_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_jack_id, tvb, EXTERNAL_PORT_OFFSET_JACK_INDEX, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_INTERNAL_PORT_INPUT: case AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT: proto_tree_add_item(aem_tree, hf_aem_clock_domain_id, tvb, INTERNAL_PORT_OFFSET_CLOCK_DOMAIN_INDEX, 2, ENC_BIG_ENDIAN); /* set up port_flags subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb, INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_port_flags); proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb, INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); /* end port_flags subtree */ proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, INTERNAL_PORT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, INTERNAL_PORT_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, INTERNAL_PORT_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb, INTERNAL_PORT_OFFSET_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb, INTERNAL_PORT_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, INTERNAL_PORT_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_jack_id, tvb, INTERNAL_PORT_OFFSET_INTERNAL_INDEX, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_AVB_INTERFACE: proto_tree_add_item(aem_tree, hf_aem_interface_name, tvb, AVB_INTERFACE_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_interface_name_string, tvb, AVB_INTERFACE_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aecp_mac_address, tvb, AVB_INTERFACE_OFFSET_MAC_ADDRESS, 6, ENC_NA); proto_tree_add_item(aem_tree, hf_aem_avb_interface_flags, tvb, AVB_INTERFACE_OFFSET_INTERFACE_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_clock_identity, tvb, AVB_INTERFACE_OFFSET_CLOCK_IDENTITY, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_priority1, tvb, AVB_INTERFACE_OFFSET_PRIORITY1, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_clock_class, tvb, AVB_INTERFACE_OFFSET_CLOCK_CLASS, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_offset_scaled_log_variance, tvb, AVB_INTERFACE_OFFSET_OFFSET_SCALED_LOG_VARIANCE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_clock_accuracy, tvb, AVB_INTERFACE_OFFSET_CLOCK_ACCURACY, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_priority2, tvb, AVB_INTERFACE_OFFSET_PRIORITY2, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_domain_number, tvb, AVB_INTERFACE_OFFSET_DOMAIN_NUMBER, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_log_sync_interval, tvb, AVB_INTERFACE_OFFSET_LOG_SYNC_INTERVAL, 1, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CLOCK_SOURCE: proto_tree_add_item(aem_tree, hf_aem_clock_source_name, tvb, CLOCK_SOURCE_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_clock_source_name_string, tvb, CLOCK_SOURCE_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); /* set up clock_source_flags subtree */ /*mr_item = */proto_tree_add_item(aem_tree, hf_aem_clock_source_flags, tvb, CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_FLAGS, 2, ENC_BIG_ENDIAN); /* mr_subtree = proto_item_add_subtree(mr_item, ett_aem_clock_source_flags);*/ /* all flags reserved */ /* end clock_source_flags subtree */ proto_tree_add_item(aem_tree, hf_aem_clock_source_type, tvb, CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aecp_clock_source_id, tvb, CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_IDENTIFIER, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_clock_source_location_type, tvb, CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_clock_source_location_id, tvb, CLOCK_SOURCE_OFFSET_CLOCK_SOURCE_LOCATION_INDEX, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_AUDIO_MAP: proto_tree_add_item(aem_tree, hf_aem_mappings_offset, tvb, AUDIO_MAP_OFFSET_MAPPINGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_mappings, tvb, AUDIO_MAP_OFFSET_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN); /* prepare mappings subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_mappings, tvb, 0, 0, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_mappings); mr_offset = tvb_get_ntohs(tvb, AUDIO_MAP_OFFSET_MAPPINGS_OFFSET); mr_counter = tvb_get_ntohs(tvb, AUDIO_MAP_OFFSET_NUMBER_OF_MAPPINGS); proto_item_set_len(mr_item, mr_counter * 8); for(i = 0; i < mr_counter; i++) { proto_tree_add_item(mr_subtree, hf_aem_mapping_stream_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_mapping_stream_channel, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_mapping_cluster_offset, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_mapping_cluster_channel, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } break; case AEM_DESCRIPTOR_AUDIO_CLUSTER: proto_tree_add_item(aem_tree, hf_aem_configuration_name, tvb, AUDIO_CLUSTER_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_configuration_name_string, tvb, AUDIO_CLUSTER_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, AUDIO_CLUSTER_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb, AUDIO_CLUSTER_OFFSET_SIGNAL_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb, AUDIO_CLUSTER_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_path_latency, tvb, AUDIO_CLUSTER_OFFSET_PATH_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, AUDIO_CLUSTER_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_channel_count, tvb, AUDIO_CLUSTER_OFFSET_CHANNEL_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_am824_label, tvb, AUDIO_CLUSTER_OFFSET_FORMAT, 1, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CONTROL: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, CONTROL_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, CONTROL_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, CONTROL_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, CONTROL_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, CONTROL_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb, CONTROL_OFFSET_CONTROL_VALUE_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_type, tvb, CONTROL_OFFSET_CONTROL_TYPE, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_reset_time, tvb, CONTROL_OFFSET_RESET_TIME, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_values_offset, tvb, CONTROL_OFFSET_VALUES_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_values, tvb, CONTROL_OFFSET_NUMBER_OF_VALUES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, CONTROL_OFFSET_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_index, tvb, CONTROL_OFFSET_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signal_output, tvb, CONTROL_OFFSET_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN); ctrl_val_type = tvb_get_ntohs(tvb, CONTROL_OFFSET_CONTROL_VALUE_TYPE); num_ctrl_vals = tvb_get_ntohs(tvb, CONTROL_OFFSET_NUMBER_OF_VALUES); mr_offset = tvb_get_ntohs(tvb, CONTROL_OFFSET_VALUES_OFFSET); dissect_17221_ctrl_val(tvb, aem_tree, num_ctrl_vals, ctrl_val_type, mr_offset); break; case AEM_DESCRIPTOR_SIGNAL_SELECTOR: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, SIGNAL_SELECTOR_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, SIGNAL_SELECTOR_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, SIGNAL_SELECTOR_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN); #if 0 proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb, AEM_OFFSET_CONTROL_LOCATION_TYPE_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb, AEM_OFFSET_CONTROL_LOCATION_ID_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, AEM_OFFSET_CONTROL_DOMAIN_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, AEM_OFFSET_CONTROL_NAME_SIGS, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, AEM_OFFSET_CONTROL_NAME_STRING_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_sources_offset, tvb, AEM_OFFSET_SOURCES_OFFSET_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_sources, tvb, AEM_OFFSET_NUMBER_OF_SOURCES_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_current_signal_type, tvb, AEM_OFFSET_CURRENT_SOURCE_TYPE_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_current_signal_index, tvb, AEM_OFFSET_CURRENT_SOURCE_ID_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_default_signal_type, tvb, AEM_OFFSET_DEFAULT_SOURCE_TYPE_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_default_signal_index, tvb, AEM_OFFSET_DEFAULT_SOURCE_ID_SIGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); /* set up sources subtree */ mr_item = proto_tree_add_item(aem_tree, hf_aem_sources, tvb, 0, 0, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sources); mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_SOURCES_SIGS); mr_offset = SIGNAL_SELECTOR_OFFSET_SOURCES; proto_item_set_len(mr_item, mr_counter * 4); for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aem_signal_type, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } #endif break; case AEM_DESCRIPTOR_MIXER: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, MIXER_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, MIXER_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, MIXER_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, MIXER_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, MIXER_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN); #if 0 proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb, AEM_OFFSET_CONTROL_LOCATION_TYPE_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb, AEM_OFFSET_CONTROL_LOCATION_ID_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb, AEM_OFFSET_CONTROL_VALUE_TYPE_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, AEM_OFFSET_CONTROL_DOMAIN_MXR, 2 ,ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, AEM_OFFSET_CONTROL_NAME_MXR, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, AEM_OFFSET_CONTROL_NAME_STRING_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_sources_offset, tvb, AEM_OFFSET_SOURCES_OFFSET_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_sources, tvb, AEM_OFFSET_NUMBER_OF_SOURCES_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_value_offset, tvb, AEM_OFFSET_VALUE_OFFSET_MXR, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, MIXER_OFFSET_BLOCK_LATENCY, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, MIXER_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); /* set up subtree for sources */ mr_item = proto_tree_add_item(aem_tree, hf_aem_sources, tvb, 0, 0, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sources); mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_SOURCES_MXR); mr_offset = MIXER_OFFSET_SOURCES; proto_item_set_len(mr_item, mr_counter * 4); for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aem_signal_type, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } /* end sources subtree */ ctrl_val_type = tvb_get_ntohs(tvb, AEM_OFFSET_CONTROL_VALUE_TYPE_MXR); num_ctrl_vals = 1; dissect_17221_ctrl_val(tvb, aem_tree, num_ctrl_vals, ctrl_val_type, MIXER_OFFSET_SOURCES + (tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_SOURCES_MXR) * 4)); #endif break; case AEM_DESCRIPTOR_MATRIX: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, MATRIX_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, MATRIX_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, MATRIX_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, MATRIX_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, MATRIX_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN); /* proto_tree_add_item(aem_tree, hf_aem_control_type, tvb, AEM_OFFSET_CONTROL_TYPE_MTRX, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb, AEM_OFFSET_CONTROL_LOCATION_TYPE_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb, AEM_OFFSET_CONTROL_LOCATION_ID_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb, AEM_OFFSET_CONTROL_VALUE_TYPE_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, AEM_OFFSET_CONTROL_DOMAIN_MTRX, 2 ,ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, AEM_OFFSET_CONTROL_NAME_MTRX, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, AEM_OFFSET_CONTROL_NAME_STRING_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_width, tvb, AEM_OFFSET_WIDTH_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_height, tvb, AEM_OFFSET_HEIGHT_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_values_offset, tvb, AEM_OFFSET_VALUES_OFFSET_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_values, tvb, AEM_OFFSET_NUMBER_OF_VALUES_MTRX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, MATRIX_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, MATRIX_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_sources, tvb, MATRIX_OFFSET_NUMBER_SOURCES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_source, tvb, MATRIX_OFFSET_BASE_SOURCE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_destinations, tvb, MATRIX_OFFSET_NUMBER_DESTINATIONS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_destination, tvb, MATRIX_OFFSET_BASE_DESTINATION, 2, ENC_BIG_ENDIAN); ctrl_val_type = tvb_get_ntohs(tvb, AEM_OFFSET_CONTROL_VALUE_TYPE_MTRX); num_ctrl_vals = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_VALUES_MTRX); dissect_17221_ctrl_val(tvb, aem_tree, num_ctrl_vals, ctrl_val_type, MATRIX_OFFSET_VALUE_DETAILS); */ break; case AEM_DESCRIPTOR_LOCALE: proto_tree_add_item(aem_tree, hf_aem_locale_identifier, tvb, LOCALE_OFFSET_LOCALE_IDENTIFIER, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_number_of_strings, tvb, LOCALE_OFFSET_NUMBER_OF_STRINGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_strings, tvb, LOCALE_OFFSET_BASE_STRINGS, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_STRINGS: mr_offset = STRINGS_OFFSET_STRING0; for(i = 0; i < 7; ++i) { proto_tree_add_item(aem_tree, hf_aem_string, tvb, mr_offset, 64, ENC_ASCII); mr_offset += 64; } break; case AEM_DESCRIPTOR_MATRIX_SIGNAL: proto_tree_add_item(aem_tree, hf_aem_signals_count, tvb, MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_signals_offset, tvb, MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET, 2, ENC_BIG_ENDIAN); /* set up subtree for signals */ mr_item = proto_tree_add_item(aem_tree, hf_aem_sources, tvb, 0, 0, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_sources); mr_counter = tvb_get_ntohs(tvb, MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT); mr_offset = MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET; proto_item_set_len(mr_item, mr_counter * 4); for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aem_signal_type, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } break; case AEM_DESCRIPTOR_MEMORY_OBJECT: proto_tree_add_item(aem_tree, hf_aem_memory_object_type, tvb, MEMORY_OBJECT_OFFSET_MEMORY_OBJECT_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_target_descriptor_type, tvb, MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_target_descriptor_id, tvb, MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, MEMORY_OBJECT_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, MEMORY_OBJECT_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_start_address, tvb, MEMORY_OBJECT_OFFSET_START_ADDRESS, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_length, tvb, MEMORY_OBJECT_OFFSET_LENGTH, 8, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CLOCK_DOMAIN: proto_tree_add_item(aem_tree, hf_aem_object_name, tvb, CLOCK_DOMAIN_OFFSET_OBJECT_NAME, 64, ENC_ASCII); proto_tree_add_item(aem_tree, hf_aem_localized_description, tvb, CLOCK_DOMAIN_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_clock_source_index, tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCE_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_clock_sources_offset, tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_clock_sources_count, tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_COUNT, 2, ENC_BIG_ENDIAN); /* set up a clock sources subtree */ mr_counter = tvb_get_ntohs(tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_COUNT); mr_offset = tvb_get_ntohs(tvb, CLOCK_DOMAIN_OFFSET_CLOCK_SOURCES_OFFSET); mr_item = proto_tree_add_item(aem_tree, hf_aem_clock_sources_array, tvb, mr_offset, mr_counter * 2, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_clock_sources); /* add clocks to new subtree */ for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aem_clock_sources, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } break; default: proto_tree_add_item(aem_tree, hf_aem_unknown_descriptor, tvb, 4, tvb_captured_length(tvb) - 4, ENC_NA); break; } } /* dissect enumeration and control packets */ static void dissect_17221_aecp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *aecp_tree) { uint16_t c_type; /*uint16_t addr_type;*/ /*uint16_t ctrl_data_len;*/ uint16_t mess_status; uint16_t mess_type; uint16_t mr_counter; uint32_t mr_offset; proto_item *mr_subtree; proto_item *mr_item; int i; uint64_t vendor_unique_protocol_id; char *vendor_unique_protocol_id_string; /* next tvb for use in subdissection */ tvbuff_t *next_tvb; proto_tree *flags_tree; proto_item *flags_ti; /* AECP Common Format Fields */ proto_tree_add_item(aecp_tree, hf_aecp_message_type, tvb, AECP_OFFSET_VERSION, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_status_code, tvb, AECP_OFFSET_STATUS_CODE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_cd_length, tvb, AECP_OFFSET_CD_LENGTH, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_target_guid, tvb, AECP_OFFSET_TARGET_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_controller_guid, tvb, AECP_OFFSET_CONTROLLER_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_sequence_id, tvb, AECP_OFFSET_SEQUENCE_ID, 2, ENC_BIG_ENDIAN); /* get the message type */ mess_type = tvb_get_ntohs(tvb, 0) & AECP_MSG_TYPE_MASK; if ((mess_type == AECP_AEM_COMMAND_MESSAGE) || (mess_type == AECP_AEM_RESPONSE_MESSAGE)) { proto_tree_add_item(aecp_tree, hf_aecp_u_flag, tvb, AECP_OFFSET_U_FLAG, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_command_type, tvb, AECP_OFFSET_COMMAND_TYPE, 2, ENC_BIG_ENDIAN); /* get the command type for detailed dissection */ c_type = tvb_get_ntohs(tvb, AECP_OFFSET_COMMAND_TYPE) & AECP_COMMAND_TYPE_MASK; /* get the control data length field - number of octets following target_guid */ /*ctrl_data_len = tvb_get_ntohs(tvb, AECP_OFFSET_CD_LENGTH) & AECP_CD_LENGTH_MASK;*/ /* get the status */ mess_status = tvb_get_ntohs(tvb, 2) & 0xF800; /* break dissection down by command type */ /* fields are added in the order they are listed by 1722.1 */ switch(c_type) { case AECP_COMMAND_ACQUIRE_ENTITY: /* set up the flags subtree */ flags_ti = proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb, AECP_OFFSET_ACQUIRE_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN); flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags); proto_tree_add_item(flags_tree, hf_aecp_persistent_flag, tvb, AECP_OFFSET_ACQUIRE_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_release_flag, tvb, AECP_OFFSET_ACQUIRE_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN); /* end flags subtree */ proto_tree_add_item(aecp_tree, hf_aecp_owner_guid, tvb, AECP_OFFSET_ACQUIRE_ENTITY_OWNER_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); break; case AECP_COMMAND_LOCK_ENTITY: proto_tree_add_item(aecp_tree, hf_aecp_unlock_flag, tvb, AECP_OFFSET_LOCK_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_locked_guid, tvb, AECP_OFFSET_LOCK_ENTITY_LOCKED_GUID, 8, ENC_BIG_ENDIAN); break; case AECP_COMMAND_READ_DESCRIPTOR: proto_tree_add_item(aecp_tree, hf_aecp_configuration, tvb, AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_COMMAND_MESSAGE)||(mess_status != 0)) { proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); } else { next_tvb = tvb_new_subset_remaining(tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR); dissect_17221_aem(next_tvb, pinfo, aecp_tree); } break; case AECP_COMMAND_WRITE_DESCRIPTOR: proto_tree_add_item(aecp_tree, hf_aecp_configuration, tvb, AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN); /* on command descriptor is value to write * on response descriptor is command value if successful * or old value if unsuccessful */ next_tvb = tvb_new_subset_remaining(tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR); dissect_17221_aem(next_tvb, pinfo, aecp_tree); break; case AECP_COMMAND_SET_CONFIGURATION: case AECP_COMMAND_GET_CONFIGURATION: proto_tree_add_item(aecp_tree, hf_aecp_configuration, tvb, AECP_OFFSET_CONFIGURATION_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN); break; case AECP_COMMAND_SET_STREAM_FORMAT: case AECP_COMMAND_GET_STREAM_FORMAT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_STREAM_FORMAT_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_STREAM_FORMAT)) { next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_STREAM_FORMAT_STREAM_FORMAT, 8); dissect_17221_stream_format(next_tvb, aecp_tree); } break; case AECP_COMMAND_SET_VIDEO_FORMAT: case AECP_COMMAND_GET_VIDEO_FORMAT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_VIDEO_FORMAT_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_VIDEO_FORMAT)) { next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_VIDEO_FORMAT_FORMAT_SPECIFIC, 4); dissect_17221_video_format(next_tvb, aecp_tree); next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_VIDEO_FORMAT_ASPECT_RATIO, 2); dissect_17221_video_aspect_ratio(next_tvb, aecp_tree); proto_tree_add_item(aecp_tree, hf_aem_color_space, tvb, AECP_OFFSET_VIDEO_FORMAT_COLOR_SPACE, 2, ENC_BIG_ENDIAN); next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_VIDEO_FORMAT_FRAME_SIZE, 4); dissect_17221_video_frame_size(next_tvb, aecp_tree); } break; case AECP_COMMAND_SET_SENSOR_FORMAT: case AECP_COMMAND_GET_SENSOR_FORMAT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_SENSOR_FORMAT_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_SENSOR_FORMAT)) { next_tvb = tvb_new_subset_length(tvb, AECP_OFFSET_SENSOR_FORMAT_SENSOR_FORMAT, 8); dissect_17221_sensor_format(next_tvb, aecp_tree); } break; case AECP_COMMAND_SET_STREAM_INFO: case AECP_COMMAND_GET_STREAM_INFO: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_STREAM_INFO_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_STREAM_INFO_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_STREAM_INFO)) { proto_tree_add_item(aecp_tree, hf_acmp_flags_class_b, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_fast_connect, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_saved_state, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_streaming_wait, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_supports_encrypted, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_encrypted_pdu, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_talker_failed, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_vlan_id_valid_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_connected_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_msrp_failure_valid_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_dest_mac_valid_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_msrp_acc_lat_valid_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_id_valid_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_format_valid_flag, tvb, AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_format, tvb, AECP_OFFSET_STREAM_INFO_STREAM_FORMAT, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_stream_id, tvb, AECP_OFFSET_STREAM_INFO_STREAM_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_msrp_accumulated_latency, tvb, AECP_OFFSET_STREAM_INFO_MSRP_ACCUMULATED_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_stream_dest_mac, tvb, AECP_OFFSET_STREAM_INFO_STREAM_DEST_MAC, 6, ENC_NA); proto_tree_add_item(aecp_tree, hf_aecp_msrp_failure_code, tvb, AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_CODE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_msrp_failure_bridge_id, tvb, AECP_OFFSET_STREAM_INFO_MSRP_FAILURE_BRIDGE_ID, 8, ENC_NA); } break; case AECP_COMMAND_SET_NAME: case AECP_COMMAND_GET_NAME: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_NAME_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_NAME_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_name_index, tvb, AECP_OFFSET_NAME_NAME_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_configuration_index, tvb, AECP_OFFSET_NAME_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_NAME)) { proto_tree_add_item(aecp_tree, hf_aecp_name, tvb, AECP_OFFSET_NAME_NAME, 64, ENC_ASCII); } break; case AECP_COMMAND_SET_ASSOCIATION_ID: case AECP_COMMAND_GET_ASSOCIATION_ID: proto_tree_add_item(aecp_tree, hf_aecp_association_id, tvb, AECP_OFFSET_ASSOCIATION_ID_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN); break; case AECP_COMMAND_SET_SAMPLING_RATE: case AECP_COMMAND_GET_SAMPLING_RATE: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_SAMPLING_RATE_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_SAMPLING_RATE)) { proto_tree_add_item(aecp_tree,hf_aecp_sampling_rate_pull , tvb, AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_sampling_rate_base_frequency, tvb, AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE, 4, ENC_BIG_ENDIAN); } break; case AECP_COMMAND_SET_CLOCK_SOURCE: case AECP_COMMAND_GET_CLOCK_SOURCE: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_CLOCK_SOURCE)) { proto_tree_add_item(aecp_tree, hf_aem_clock_source_id, tvb, AECP_OFFSET_CLOCK_SOURCE_CLOCK_SOURCE_INDEX, 2, ENC_BIG_ENDIAN); } break; case AECP_COMMAND_SET_CONTROL_VALUE: case AECP_COMMAND_GET_CONTROL_VALUE: case AECP_COMMAND_SET_MIXER: case AECP_COMMAND_GET_MIXER: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_CONTROL_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_CONTROL_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); /* TODO: dissect control/mixer values */ break; case AECP_COMMAND_INCREMENT_CONTROL: case AECP_COMMAND_DECREMENT_CONTROL: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_INCDEC_CONTROL_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); /* TODO: dissect control index list (message) or values (response) */ break; case AECP_COMMAND_SET_SIGNAL_SELECTOR: case AECP_COMMAND_GET_SIGNAL_SELECTOR: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_SIGNAL_SELECTOR_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_SET_SIGNAL_SELECTOR)) { proto_tree_add_item(aecp_tree, hf_aecp_signal_type, tvb, AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_signal_index, tvb, AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_signal_output, tvb, AECP_OFFSET_SIGNAL_SELECTOR_SIGNAL_OUTPUT, 2, ENC_BIG_ENDIAN); } break; case AECP_COMMAND_GET_MATRIX: case AECP_COMMAND_SET_MATRIX: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_MATRIX_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_MATRIX_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_column, tvb, AECP_OFFSET_MATRIX_MATRIX_COLUMN, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_row, tvb, AECP_OFFSET_MATRIX_MATRIX_ROW, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_width, tvb, AECP_OFFSET_MATRIX_REGION_WIDTH, 2, ENC_BIG_ENDIAN); 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, AECP_OFFSET_MATRIX_REP, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_direction, tvb, AECP_OFFSET_MATRIX_DIRECTION, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_value_count, tvb, AECP_OFFSET_MATRIX_VALUE_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_matrix_item_offset, tvb, AECP_OFFSET_MATRIX_ITEM_OFFSET, 2, ENC_BIG_ENDIAN); if ((mess_type == AECP_AEM_RESPONSE_MESSAGE) || (c_type == AECP_COMMAND_GET_MATRIX)) { /* TODO: dissect matrix values */ } break; case AECP_COMMAND_START_STREAMING: case AECP_COMMAND_STOP_STREAMING: case AECP_COMMAND_REBOOT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_STREAMING_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_STREAMING_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); break; case AECP_COMMAND_REGISTER_UNSOL_NOTIFICATION: case AECP_COMMAND_DEREGISTER_UNSOL_NOTIFICATION: /* No additional fields in these command types */ break; case AECP_COMMAND_IDENTIFY_NOTIFICATION: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_IDENTIFY_NOTIFICATION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); break; case AECP_COMMAND_GET_AVB_INFO: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_AVB_INFO_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_AVB_INFO_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { proto_tree_add_item(aecp_tree, hf_aecp_avb_info_ptp_grandmaster_id, tvb, AECP_OFFSET_AVB_INFO_AS_GRANDMASTER_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_info_propegation_delay, tvb, AECP_OFFSET_AVB_INFO_PROPAGATION_DELAY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_info_gptp_domain_number, tvb, AECP_OFFSET_AVB_INFO_AS_DOMAIN_NUMBER, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_as_capable_flag, tvb, AECP_OFFSET_AVB_INFO_FLAGS, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_gptp_enabled_flag, tvb, AECP_OFFSET_AVB_INFO_FLAGS, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_srp_enabled_flag, tvb, AECP_OFFSET_AVB_INFO_FLAGS, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_info_msrp_mappings_count, tvb, AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS_COUNT, 2, ENC_BIG_ENDIAN); /* prepare msrp mappings subtree */ mr_item = proto_tree_add_item(aecp_tree, hf_aecp_avb_info_msrp_mappings, tvb, 0, 0, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aecp_get_avb_info_msrp_mappings); mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS_COUNT); mr_offset = AECP_OFFSET_AVB_INFO_MSRP_MAPPINGS; for (i = 0; i < mr_counter; i++) { proto_tree_add_item(mr_subtree, hf_aecp_avb_info_msrp_mapping_traffic_class, tvb, mr_offset, 1, ENC_BIG_ENDIAN); mr_offset += 1; proto_tree_add_item(mr_subtree, hf_aecp_avb_info_msrp_mapping_priority, tvb, mr_offset, 1, ENC_BIG_ENDIAN); mr_offset += 1; proto_tree_add_item(mr_subtree, hf_aecp_get_avb_info_msrp_vlan_id, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } } break; case AECP_COMMAND_GET_AS_PATH: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_AS_PATH_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { proto_tree_add_item(aecp_tree, hf_aecp_as_path_count, tvb, AECP_OFFSET_AS_PATH_COUNT, 2, ENC_BIG_ENDIAN); mr_item = proto_tree_add_item(aecp_tree, hf_aecp_as_path_sequences, tvb, 0, 0, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aecp_get_as_path_sequences); mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AS_PATH_COUNT); mr_offset = AECP_OFFSET_AS_PATH_PATH_SEQUENCE; for (i = 0; i < mr_counter; i++) { proto_tree_add_item(mr_subtree, hf_aecp_get_as_info_clock_id, tvb, mr_offset, 8, ENC_BIG_ENDIAN); mr_offset += 8; } } break; case AECP_COMMAND_GET_COUNTERS: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { /*flags_ti = */ proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); /*flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags);*/ /* begin counters_valid flags field */ switch (tvb_get_ntohs(tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE)) { case AEM_DESCRIPTOR_ENTITY: break; case AEM_DESCRIPTOR_AVB_INTERFACE: proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_up_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_down_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_tx_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_rx_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_rx_crc_error_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_gptp_gm_changed_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CLOCK_DOMAIN: proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_locked_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_unlocked_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_STREAM_INPUT: proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_locked_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_unlocked_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_stream_reset_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_seq_num_mismatch_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_reset_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_uncertain_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_valid_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_not_valid_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_unsupported_format_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_late_timestamp_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_early_timestamp_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_tx_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_rx_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); break; default: break; } proto_tree_add_item(aecp_tree, hf_aecp_entity_specific1_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific2_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific3_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific4_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific5_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific6_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific7_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific8_valid, tvb, AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); /* end counters_valid flags field */ switch (tvb_get_ntohs(tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE)) { case AEM_DESCRIPTOR_ENTITY: break; case AEM_DESCRIPTOR_AVB_INTERFACE: proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_up, tvb, AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_UP, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_link_down, tvb, AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_DOWN, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_tx, tvb, AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_TX, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_packets_rx, tvb, AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_RX, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_rx_crc_error, tvb, AECP_OFFSET_COUNTERS_AVB_INTERFACE_RX_CRC_ERROR, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_avb_interface_gptp_gm_changed, tvb, AECP_OFFSET_COUNTERS_AVB_INTERFACE_GPTP_GM_CHANGED, 4, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CLOCK_DOMAIN: proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_locked, tvb, AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_LOCKED, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_clock_domain_unlocked, tvb, AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_UNLOCKED, 4, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_STREAM_INPUT: proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_locked, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_LOCKED, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_unlocked, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_UNLOCKED, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_stream_reset, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_STREAM_RESET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_seq_num_mismatch, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_SEQ_NUM_MISMATCH, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_media_reset, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_RESET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_uncertain, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_UNCERTAIN, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_valid, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_timestamp_not_valid, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_NOT_VALID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_unsupported_format, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_UNSUPPORTED_FORMAT, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_late_timestamp, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_LATE_TIMESTAMP, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_early_timestamp, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_EARLY_TIMESTAMP, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_tx, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_TX, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_input_packets_rx, tvb, AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_RX, 4, ENC_BIG_ENDIAN); break; default: break; } proto_tree_add_item(aecp_tree, hf_aecp_entity_specific1, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_1, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific2, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_2, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific3, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_3, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific4, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_4, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific5, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_5, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific6, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_6, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific7, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_7, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_entity_specific8, tvb, AECP_OFFSET_COUNTERS_ENTITY_SPECIFIC_8, 4, ENC_BIG_ENDIAN); } break; case AECP_COMMAND_GET_AUDIO_MAP: case AECP_COMMAND_GET_VIDEO_MAP: case AECP_COMMAND_GET_SENSOR_MAP: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_MAP_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_MAP_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_map_index, tvb, AECP_OFFSET_MAP_MAP_INDEX, 2, ENC_BIG_ENDIAN); if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { proto_tree_add_item(aecp_tree, hf_aecp_number_of_maps, tvb, AECP_OFFSET_MAP_NUMBER_OF_MAPS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_number_of_maps, tvb, AECP_OFFSET_MAP_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN); /* TODO: dissect mappings */ } break; case AECP_COMMAND_ADD_AUDIO_MAPPINGS: case AECP_COMMAND_REMOVE_AUDIO_MAPPINGS: case AECP_COMMAND_ADD_VIDEO_MAPPINGS: case AECP_COMMAND_REMOVE_VIDEO_MAPPINGS: case AECP_COMMAND_ADD_SENSOR_MAPPINGS: case AECP_COMMAND_REMOVE_SENSOR_MAPPINGS: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_ADDREM_MAP_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_number_of_maps, tvb, AECP_OFFSET_ADDREM_MAP_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN); /* TODO: dissect mappings */ break; case AECP_COMMAND_START_OPERATION: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_START_OPERATION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_START_OPERATION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_operation_id, tvb, AECP_OFFSET_START_OPERATION_OPERATION_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_operation_type, tvb, AECP_OFFSET_START_OPERATION_OPERATION_TYPE, 2, ENC_BIG_ENDIAN); /* TODO: add values support when operation types are defined */ break; case AECP_COMMAND_ABORT_OPERATION: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_ABORT_OPERATION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_operation_id, tvb, AECP_OFFSET_ABORT_OPERATION_OPERATION_ID, 2, ENC_BIG_ENDIAN); break; case AECP_COMMAND_OPERATION_STATUS: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_OPERATION_STATUS_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_operation_id, tvb, AECP_OFFSET_OPERATION_STATUS_OPERATION_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_percent_complete, tvb, AECP_OFFSET_OPERATION_STATUS_PERCENT_COMPLETE, 2, ENC_BIG_ENDIAN); break; case AECP_COMMAND_AUTH_ADD_KEY: case AECP_COMMAND_AUTH_DELETE_KEY: case AECP_COMMAND_AUTH_GET_KEY: proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb, AECP_OFFSET_AUTH_KEY_KEY_EUI, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_key_type, tvb, AECP_OFFSET_AUTH_KEY_KEY_TYPE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_key_length, tvb, AECP_OFFSET_AUTH_KEY_KEY_LENGTH, 2, ENC_BIG_ENDIAN); if (((mess_type == AECP_AEM_RESPONSE_MESSAGE) && (c_type == AECP_COMMAND_AUTH_GET_KEY)) || ((mess_type == AECP_AEM_COMMAND_MESSAGE) && (c_type == AECP_COMMAND_AUTH_ADD_KEY))) { mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AUTH_KEY_KEY_LENGTH) & AECP_KEY_LENGTH_MASK; proto_tree_add_item(aecp_tree, hf_aecp_key, tvb, AECP_OFFSET_AUTH_KEY_KEY, mr_counter, ENC_NA); } break; case AECP_COMMAND_AUTH_GET_KEY_LIST: proto_tree_add_item(aecp_tree, hf_aecp_keychain_id_small, tvb, AECP_OFFSET_AUTH_GET_KEY_LIST_KEYCHAIN_ID, 1, ENC_BIG_ENDIAN); if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { proto_tree_add_item(aecp_tree, hf_aecp_keychain_id_small, tvb, AECP_OFFSET_AUTH_GET_KEY_LIST_NUMBER_OF_KEYS, 1, ENC_BIG_ENDIAN); } break; case AECP_COMMAND_AUTH_ADD_KEY_TO_CHAIN: case AECP_COMMAND_AUTH_DELETE_KEY_FROM_CHAIN: proto_tree_add_item(aecp_tree, hf_aecp_keychain_id, tvb, AECP_OFFSET_AUTH_KEYCHAIN_KEYCHAIN_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb, AECP_OFFSET_AUTH_KEYCHAIN_KEY_EUI, 8, ENC_BIG_ENDIAN); break; case AECP_COMMAND_AUTH_GET_KEYCHAIN_LIST: proto_tree_add_item(aecp_tree, hf_aecp_keychain_id, tvb, AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_KEYCHAIN_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_keychain_list_index, tvb, AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_LIST_INDEX, 2, ENC_BIG_ENDIAN); if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { proto_tree_add_item(aecp_tree, hf_aecp_keychain_number_of_lists, tvb, AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_LISTS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_keychain_number_of_keys, tvb, AECP_OFFSET_AUTH_GET_KEYCHAIN_LIST_NUMBER_OF_KEYS, 2, ENC_BIG_ENDIAN); /* TODO: dissect key euis */ } break; case AECP_COMMAND_AUTH_GET_IDENTITY: proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb, AECP_OFFSET_AUTH_GET_IDENTITY_KEY_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_key_signature, tvb, AECP_OFFSET_AUTH_GET_IDENTITY_SIGNATURE, 28, ENC_NA); break; case AECP_COMMAND_AUTH_ADD_TOKEN: if (mess_type == AECP_AEM_COMMAND_MESSAGE) { uint32_t token_length = tvb_get_ntohl(tvb, AECP_OFFSET_AUTH_TOKEN_TOKEN_LENGTH); proto_tree_add_item(aecp_tree, hf_aecp_key_length, tvb, AECP_OFFSET_AUTH_TOKEN_TOKEN_LENGTH, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_key_signature, tvb, AECP_OFFSET_AUTH_TOKEN_AUTHENTICATION_TOKEN, token_length, ENC_NA); } break; case AECP_COMMAND_AUTH_DELETE_TOKEN: /* No command specific fields */ break; case AECP_COMMAND_AUTHENTICATE: case AECP_COMMAND_DEAUTHENTICATE: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_AUTHENTICATE_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_token_length, tvb, AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH, 2, ENC_BIG_ENDIAN); mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH) & AECP_TOKEN_LENGTH_MASK; proto_tree_add_item(aecp_tree, hf_aecp_auth_token, tvb, AECP_OFFSET_AUTHENTICATE_AUTH_TOKEN, mr_counter, ENC_NA); break; case AECP_COMMAND_ENABLE_TRANSPORT_SECURITY: proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb, AECP_OFFSET_TRANSPORT_SECURITY_KEY_EUI, 8, ENC_BIG_ENDIAN); break; case AECP_COMMAND_DISABLE_TRANSPORT_SECURITY: /* No command specific fields */ break; case AECP_COMMAND_ENABLE_STREAM_ENCRYPTION: case AECP_COMMAND_DISABLE_STREAM_ENCRYPTION: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_STREAM_ENCRYPTION_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); if (c_type == AECP_COMMAND_ENABLE_STREAM_ENCRYPTION) { proto_tree_add_item(aecp_tree, hf_aecp_key_eui, tvb, AECP_OFFSET_STREAM_ENCRYPTION_KEY_EUI, 8, ENC_BIG_ENDIAN); } break; case AECP_COMMAND_SET_STREAM_BACKUP: case AECP_COMMAND_GET_STREAM_BACKUP: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_TYPE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_descriptor_index, tvb, AECP_OFFSET_STREAM_BACKUP_DESCRIPTOR_INDEX, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_entity_id_0, tvb, AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_0, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_unique_id_0, tvb, AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_0, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_entity_id_1, tvb, AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_1, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_unique_id_1, tvb, AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_1, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_entity_id_2, tvb, AECP_OFFSET_STREAM_BACKUP_TALKER_ENTITY_ID_2, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backup_talker_unique_id_2, tvb, AECP_OFFSET_STREAM_BACKUP_TALKER_UNIQUE_ID_2, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backedup_talker_entity_id, tvb, AECP_OFFSET_STREAM_BACKEDUP_TALKER_ENTITY_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_backedup_talker_unique_id, tvb, AECP_OFFSET_STREAM_BACKEDUP_TALKER_UNIQUE_ID, 2, ENC_BIG_ENDIAN); break; /* * * * AEM COMMON FORMAT PACKETS * * * */ case AECP_COMMAND_CONTROLLER_AVAILABLE: break; default: /* the command type is not one of the valid spec values */ break; } } /* AECP AEM Command */ else if ((mess_type == AECP_ADDRESS_ACCESS_COMMAND_MESSAGE) || (mess_type == AECP_ADDRESS_ACCESS_RESPONSE_MESSAGE)) { proto_tree_add_item(aecp_tree, hf_aecp_aa_count, tvb, AECP_AA_OFFSET_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_aa_tlv_mode, tvb, AECP_AA_OFFSET_TLVS_START, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_aa_tlv_length, tvb, AECP_AA_OFFSET_TLVS_START, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_aa_tlv_address, tvb, AECP_AA_OFFSET_TLVS_START+2, 8, ENC_BIG_ENDIAN); } /* AECP Vendor Unique Command/Response */ else if ((mess_type == AECP_VENDOR_UNIQUE_COMMAND_MESSAGE) || (mess_type == AECP_VENDOR_UNIQUE_RESPONSE_MESSAGE)) { proto_tree_add_item(aecp_tree, hf_aecp_vendor_unique_protocol_id, tvb, AECP_VUC_OFFSET_PROTOCOL_ID, 6, ENC_BIG_ENDIAN); /* attempt to dissect the payload specific data */ next_tvb = tvb_new_subset_remaining(tvb, AECP_VUC_OFFSET_PROTOCOL_ID); vendor_unique_protocol_id = tvb_get_uint48(tvb, AECP_VUC_OFFSET_PROTOCOL_ID, ENC_BIG_ENDIAN); vendor_unique_protocol_id_string = wmem_strdup_printf(pinfo->pool, "%012" PRIx64, vendor_unique_protocol_id); dissector_try_string(vendor_unique_protocol_dissector_table, vendor_unique_protocol_id_string, next_tvb, pinfo, aecp_tree, NULL); } } static void dissect_17221_adp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *adp_tree) { proto_item *ent_cap_ti; proto_item *talk_cap_ti; proto_item *list_cap_ti; proto_item *cont_cap_ti; proto_tree *ent_cap_flags_tree; proto_tree *talk_cap_flags_tree; proto_tree *list_cap_flags_tree; proto_tree *cont_cap_flags_tree; proto_tree_add_item(adp_tree, hf_adp_message_type, tvb, ADP_VERSION_OFFSET, 1, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_valid_time, tvb, ADP_VALID_TIME_OFFSET, 1, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_cd_length, tvb, ADP_CD_LENGTH_OFFSET, 1, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_entity_id, tvb, ADP_ENTITY_ID_OFFSET, 8, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_entity_model_id, tvb, ADP_ENTITY_MODEL_ID_OFFSET, 8, ENC_BIG_ENDIAN); /* Subtree for entity_capabilities field */ ent_cap_ti = proto_tree_add_item(adp_tree, hf_adp_entity_cap, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); ent_cap_flags_tree = proto_item_add_subtree(ent_cap_ti, ett_adp_ent_cap); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_efu_mode, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_address_access_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_gateway_entity, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_aem_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_legacy_avc, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_assoc_id_support, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_assoc_id_valid, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_vendor_unique, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_class_a_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_class_b_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(ent_cap_flags_tree, hf_adp_entity_cap_gptp_supported, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_talker_stream_srcs, tvb, ADP_TALKER_STREAM_SRCS_OFFSET, 2, ENC_BIG_ENDIAN); talk_cap_ti = proto_tree_add_item(adp_tree, hf_adp_talker_cap, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); talk_cap_flags_tree = proto_item_add_subtree(talk_cap_ti, ett_adp_talk_cap); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_implement, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_other_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_control_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_media_clk_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_smpte_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_midi_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_audio_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(talk_cap_flags_tree, hf_adp_talk_cap_video_src, tvb, ADP_TALKER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_listener_stream_sinks, tvb, ADP_LISTENER_STREAM_SINKS_OFFSET, 2, ENC_BIG_ENDIAN); list_cap_ti = proto_tree_add_item(adp_tree, hf_adp_listener_cap, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); list_cap_flags_tree = proto_item_add_subtree(list_cap_ti, ett_adp_list_cap); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_implement, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_other_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_control_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_media_clk_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_smpte_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_midi_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_audio_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(list_cap_flags_tree, hf_adp_list_cap_video_sink, tvb, ADP_LISTENER_CAP_OFFSET, 2, ENC_BIG_ENDIAN); cont_cap_ti = proto_tree_add_item(adp_tree, hf_adp_controller_cap, tvb, ADP_CONTROLLER_CAP_OFFSET, 4, ENC_BIG_ENDIAN); cont_cap_flags_tree = proto_item_add_subtree(cont_cap_ti, ett_adp_cont_cap); proto_tree_add_item(cont_cap_flags_tree, hf_adp_cont_cap_implement, tvb, ADP_CONTROLLER_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(cont_cap_flags_tree, hf_adp_cont_cap_layer3_proxy, tvb, ADP_CONTROLLER_CAP_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_avail_index, tvb, ADP_AVAIL_INDEX_OFFSET, 4, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_gptp_gm_id, tvb, ADP_AS_GM_ID_OFFSET, 8, ENC_BIG_ENDIAN); proto_tree_add_item(adp_tree, hf_adp_assoc_id, tvb, ADP_ASSOC_ID_OFFSET, 8, ENC_BIG_ENDIAN); } static void dissect_17221_acmp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *acmp_tree) { proto_item *flags_ti; proto_tree *flags_tree; proto_tree_add_item(acmp_tree, hf_acmp_message_type, tvb, ACMP_VERSION_OFFSET, 1, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_status_field, tvb, ACMP_STATUS_FIELD_OFFSET, 1, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_cd_length, tvb, ACMP_CD_LENGTH_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_stream_id, tvb, ACMP_STREAM_ID_OFFSET, 8, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_controller_guid, tvb, ACMP_CONTROLLER_GUID_OFFSET, 8, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_talker_guid, tvb, ACMP_TALKER_GUID_OFFSET, 8, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_listener_guid, tvb, ACMP_LISTENER_GUID_OFFSET, 8, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_talker_unique_id, tvb, ACMP_TALKER_UNIQUE_ID_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_listener_unique_id, tvb, ACMP_LISTENER_UNIQUE_ID_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_stream_dest_mac, tvb, ACMP_DEST_MAC_OFFSET, 6, ENC_NA); proto_tree_add_item(acmp_tree, hf_acmp_connection_count, tvb, ACMP_CONNECTION_COUNT_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_sequence_id, tvb, ACMP_SEQUENCE_ID_OFFSET, 2, ENC_BIG_ENDIAN); flags_ti = proto_tree_add_item(acmp_tree, hf_acmp_flags, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags); proto_tree_add_item(flags_tree, hf_acmp_flags_class_b, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(flags_tree, hf_acmp_flags_fast_connect, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(flags_tree, hf_acmp_flags_saved_state, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(flags_tree, hf_acmp_flags_streaming_wait, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(flags_tree, hf_acmp_flags_supports_encrypted, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(flags_tree, hf_acmp_flags_encrypted_pdu, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(flags_tree, hf_acmp_flags_talker_failed, tvb, ACMP_FLAGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(acmp_tree, hf_acmp_vlan_id, tvb, ACMP_VLAN_ID_OFFSET, 2, ENC_BIG_ENDIAN); } static int dissect_17221(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) { uint8_t subtype = 0; proto_item *ieee17221_item; proto_tree *ieee17221_tree; subtype = tvb_get_uint8(tvb, 0); subtype &= 0x7F; /* Make entries in Protocol column and Info column on summary display */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "IEEE1722-1"); ieee17221_item = proto_tree_add_item(tree, proto_17221, tvb, 0, -1, ENC_NA); ieee17221_tree = proto_item_add_subtree(ieee17221_item, ett_17221); switch (subtype) { case 0x7A: { col_set_str(pinfo->cinfo, COL_INFO, "AVDECC Discovery Protocol"); if (tree) dissect_17221_adp(tvb, pinfo, ieee17221_tree); break; } case 0x7B: { col_set_str(pinfo->cinfo, COL_INFO, "AVDECC Enumeration and Control Protocol"); if (tree) dissect_17221_aecp(tvb, pinfo, ieee17221_tree); break; } case 0x7C: { col_set_str(pinfo->cinfo, COL_INFO, "AVDECC Connection Management Protocol"); if (tree) dissect_17221_acmp(tvb, pinfo, ieee17221_tree); break; } default: { /* Shouldn't get here */ col_set_str(pinfo->cinfo, COL_INFO, "1722.1 Unknown"); return 0; } } return tvb_captured_length(tvb); } /* Register the protocol with Wireshark */ void proto_register_17221(void) { static hf_register_info hf[] = { { &hf_adp_message_type, { "Message Type", "ieee17221.message_type", FT_UINT8, BASE_DEC, VALS(adp_message_type_vals), ADP_MSG_TYPE_MASK, NULL, HFILL } }, { &hf_adp_valid_time, { "Valid Time", "ieee17221.valid_time", FT_UINT8, BASE_DEC, NULL, ADP_VALID_TIME_MASK, NULL, HFILL } }, { &hf_adp_cd_length, { "Control Data Length", "ieee17221.control_data_length", FT_UINT16, BASE_DEC, NULL, ADP_CD_LENGTH_MASK, NULL, HFILL } }, { &hf_adp_entity_id, { "Entity ID", "ieee17221.entity_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_adp_entity_model_id, { "Entity Model ID", "ieee17221.entity_model_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_adp_entity_cap, { "Entity Capabilities", "ieee17221.entity_capabilities", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Entity Capability Flags Begin */ { &hf_adp_entity_cap_efu_mode, { "EFU_MODE", "ieee17221.entity_capabilities.efu_mode", FT_BOOLEAN, 32, NULL, ADP_EFU_MODE_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_address_access_supported, { "ADDRESS_ACCESS", "ieee17221.entity_capabilities.address_access", FT_BOOLEAN, 32, NULL, ADP_ADDRESS_ACCESS_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_gateway_entity, { "GATEWAY_ENTITY", "ieee17221.entity_capabilities.gateway_entity", FT_BOOLEAN, 32, NULL, ADP_GATEWAY_ENTITY_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_aem_supported, { "AEM", "ieee17221.entity_capabilities.aem_supported", FT_BOOLEAN, 32, NULL, ADP_AEM_SUPPORTED_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_legacy_avc, { "LEGACY_AVC", "ieee17221.entity_capabilities.legacy_avc", FT_BOOLEAN, 32, NULL, ADP_LEGACY_AVC_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_assoc_id_support, { "ASSOCIATION_ID_SUPPORTED", "ieee17221.entity_capabilities.association_id_supported", FT_BOOLEAN, 32, NULL, ADP_ASSOC_ID_SUPPORT_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_assoc_id_valid, { "ASSOCIATION_ID_VALID", "ieee17221.entity_capabilities.association_id_valid", FT_BOOLEAN, 32, NULL, ADP_ASSOC_ID_VALID_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_vendor_unique, { "VENDOR_UNIQUE", "ieee17221.entity_capabilities.vendor_unique", FT_BOOLEAN, 32, NULL, ADP_VENDOR_UNIQUE_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_class_a_supported, { "CLASS_A", "ieee17221.entity_capabilities.class_a", FT_BOOLEAN, 32, NULL, ADP_CLASS_A_SUPPORTED_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_class_b_supported, { "CLASS_B", "ieee17221.entity_capabilities.class_b", FT_BOOLEAN, 32, NULL, ADP_CLASS_B_SUPPORTED_BITMASK, NULL, HFILL } }, { &hf_adp_entity_cap_gptp_supported, { "gPTP Supported", "ieee17221.entity_capabilities.gptp_supported", FT_BOOLEAN, 32, NULL, ADP_AS_SUPPORTED_BITMASK, NULL, HFILL } }, /* Entity Capability Flags End */ { &hf_adp_talker_stream_srcs, { "Talker Stream Sources", "ieee17221.talker_stream_sources", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_adp_talker_cap, { "Talker Capabilities", "ieee17221.talker_capabilities", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Talker Capability Flags Begin */ { &hf_adp_talk_cap_implement, { "IMPLEMENTED", "ieee17221.talker_capabilities.implemented", FT_BOOLEAN, 16, NULL, ADP_TALK_IMPLEMENTED_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_other_src, { "OTHER_SOURCE", "ieee17221.talker_capabilities.other_source", FT_BOOLEAN, 16, NULL, ADP_TALK_OTHER_SRC_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_control_src, { "CONTROL_SOURCE", "ieee17221.talker_capabilities.control_source", FT_BOOLEAN, 16, NULL, ADP_TALK_CONTROL_SRC_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_media_clk_src, { "MEDIA_CLOCK_SOURCE", "ieee17221.talker_capabilities.media_clock_source", FT_BOOLEAN, 16, NULL, ADP_TALK_MEDIA_CLK_SRC_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_smpte_src, { "SMPTE_SOURCE", "ieee17221.talker_capabilities.smpte_source", FT_BOOLEAN, 16, NULL, ADP_TALK_SMPTE_SRC_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_midi_src, { "MIDI_SOURCE", "ieee17221.talker_capabilities.midi_source", FT_BOOLEAN, 16, NULL, ADP_TALK_MIDI_SRC_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_audio_src, { "AUDIO_SOURCE", "ieee17221.talker_capabilities.audio_source", FT_BOOLEAN, 16, NULL, ADP_TALK_AUDIO_SRC_BITMASK, NULL, HFILL } }, { &hf_adp_talk_cap_video_src, { "VIDEO_SOURCE", "ieee17221.talker_capabilities.video_source", FT_BOOLEAN, 16, NULL, ADP_TALK_VIDEO_SRC_BITMASK, NULL, HFILL } }, /* Talker Capability Flags End */ { &hf_adp_listener_stream_sinks, { "Listener Stream Sinks", "ieee17221.listener_stream_sinks", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_adp_listener_cap, { "Listener Capabilities", "ieee17221.listener_capabilities", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Listener Capability Flags Begin */ { &hf_adp_list_cap_implement, { "IMPLEMENTED", "ieee17221.listener_capabilities.implemented", FT_BOOLEAN, 16, NULL, ADP_LIST_IMPLEMENTED_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_other_sink, { "OTHER_SINK", "ieee17221.listener_capabilities.other_source", FT_BOOLEAN, 16, NULL, ADP_LIST_OTHER_SINK_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_control_sink, { "CONTROL_SINK", "ieee17221.listener_capabilities.control_source", FT_BOOLEAN, 16, NULL, ADP_LIST_CONTROL_SINK_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_media_clk_sink, { "MEDIA_CLOCK_SINK", "ieee17221.listener_capabilities.media_clock_source", FT_BOOLEAN, 16, NULL, ADP_LIST_MEDIA_CLK_SINK_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_smpte_sink, { "SMPTE_SINK", "ieee17221.listener_capabilities.smpte_source", FT_BOOLEAN, 16, NULL, ADP_LIST_SMPTE_SINK_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_midi_sink, { "MIDI_SINK", "ieee17221.listener_capabilities.midi_source", FT_BOOLEAN, 16, NULL, ADP_LIST_MIDI_SINK_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_audio_sink, { "AUDIO_SINK", "ieee17221.listener_capabilities.audio_source", FT_BOOLEAN, 16, NULL, ADP_LIST_AUDIO_SINK_BITMASK, NULL, HFILL } }, { &hf_adp_list_cap_video_sink, { "VIDEO_SINK", "ieee17221.listener_capabilities.video_source", FT_BOOLEAN, 16, NULL, ADP_LIST_VIDEO_SINK_BITMASK, NULL, HFILL } }, /* Listener Capability Flags End */ { &hf_adp_controller_cap, { "Controller Capabilities", "ieee17221.controller_capabilities", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Controller Capability Flags Begin */ { &hf_adp_cont_cap_implement, { "IMPLEMENTED", "ieee17221.controller_capabilities.implemented", FT_BOOLEAN, 16, NULL, ADP_CONT_IMPLEMENTED_BITMASK, NULL, HFILL } }, { &hf_adp_cont_cap_layer3_proxy, { "LAYER3_PROXY", "ieee17221.controller_capabilities.layer3_proxy", FT_BOOLEAN, 16, NULL, ADP_CONT_LAYER3_PROXY_BITMASK, NULL, HFILL } }, /* Controller Capability Flags End */ { &hf_adp_avail_index, { "Available Index", "ieee17221.available_index", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_adp_gptp_gm_id, { "gPTP Grandmaster ID", "ieee17221.gptp_grandmaster_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_adp_def_aud_format, { "Default Audio Format", "ieee17221.default_audio_format", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #endif #if 0 /* Default Audio Formats Fields Begin */ { &hf_adp_def_aud_sample_rates, { "Sample Rates", "ieee17221.default_audio_format.sample_rates", FT_UINT8, BASE_HEX, NULL, ADP_DEF_AUDIO_SAMPLE_RATES_MASK, NULL, HFILL } }, /* Sample rates Begin */ { &hf_adp_samp_rate_44k1, { "44.1kHz", "ieee17221.default_audio_format.sample_rates.44k1", FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_44K1_BITMASK, NULL, HFILL } }, { &hf_adp_samp_rate_48k, { "48kHz", "ieee17221.default_audio_format.sample_rates.48k", FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_48K_BITMASK, NULL, HFILL } }, { &hf_adp_samp_rate_88k2, { "88.2kHz", "ieee17221.default_audio_format.sample_rates.88k2", FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_88K2_BITMASK, NULL, HFILL } }, { &hf_adp_samp_rate_96k, { "96kHz", "ieee17221.default_audio_format.sample_rates.96k", FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_96K_BITMASK, NULL, HFILL } }, { &hf_adp_samp_rate_176k4, { "176.4kHz", "ieee17221.default_audio_format.sample_rates.176k4", FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_176K4_BITMASK, NULL, HFILL } }, { &hf_adp_samp_rate_192k, { "192kHz", "ieee17221.default_audio_format.sample_rates.192k", FT_BOOLEAN, 8, NULL, ADP_SAMP_RATE_192K_BITMASK, NULL, HFILL } }, /* Sample rates End */ { &hf_adp_def_aud_max_chan, { "Max Channels", "ieee17221.default_audio_format.max_channels", FT_UINT16, BASE_DEC, NULL, ADP_DEF_AUDIO_MAX_CHANS_MASK, NULL, HFILL } }, { &hf_adp_def_aud_saf_flag, { "saf", "ieee17221.default_audio_format.saf", FT_BOOLEAN, 16, NULL, ADP_DEF_AUDIO_SAF_MASK, NULL, HFILL } }, { &hf_adp_def_aud_float_flag, { "float", "ieee17221.default_audio_format.float", FT_BOOLEAN, 16, NULL, ADP_DEF_AUDIO_FLOAT_MASK, NULL, HFILL } }, { &hf_adp_def_aud_chan_formats, { "Channel Formats", "ieee17221.default_audio_format.channel_formats", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* Channel Formats Fields Start */ { &hf_adp_chan_format_mono, { "MONO", "ieee17221.default_audio_format.channel_formats.mono", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_MONO, NULL, HFILL } }, { &hf_adp_chan_format_2ch, { "2_CH", "ieee17221.default_audio_format.channel_formats.2_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_2CH, NULL, HFILL } }, { &hf_adp_chan_format_3ch, { "3_CH", "ieee17221.default_audio_format.channel_formats.3_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_3CH, NULL, HFILL } }, { &hf_adp_chan_format_4ch, { "4_CH", "ieee17221.default_audio_format.channel_formats.4_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_4CH, NULL, HFILL } }, { &hf_adp_chan_format_5ch, { "5_CH", "ieee17221.default_audio_format.channel_formats.5_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_5CH, NULL, HFILL } }, { &hf_adp_chan_format_6ch, { "6_CH", "ieee17221.default_audio_format.channel_formats.6_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_6CH, NULL, HFILL } }, { &hf_adp_chan_format_7ch, { "7_CH", "ieee17221.default_audio_format.channel_formats.7_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_7CH, NULL, HFILL } }, { &hf_adp_chan_format_8ch, { "8_CH", "ieee17221.default_audio_format.channel_formats.8_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_8CH, NULL, HFILL } }, { &hf_adp_chan_format_10ch, { "10_CH", "ieee17221.default_audio_format.channel_formats.10_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_10CH, NULL, HFILL } }, { &hf_adp_chan_format_12ch, { "12_CH", "ieee17221.default_audio_format.channel_formats.12_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_12CH, NULL, HFILL } }, { &hf_adp_chan_format_14ch, { "14_CH", "ieee17221.default_audio_format.channel_formats.14_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_14CH, NULL, HFILL } }, { &hf_adp_chan_format_16ch, { "16_CH", "ieee17221.default_audio_format.channel_formats.16_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_16CH, NULL, HFILL } }, { &hf_adp_chan_format_18ch, { "18_CH", "ieee17221.default_audio_format.channel_formats.18_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_18CH, NULL, HFILL } }, { &hf_adp_chan_format_20ch, { "20_CH", "ieee17221.default_audio_format.channel_formats.20_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_20CH, NULL, HFILL } }, { &hf_adp_chan_format_22ch, { "22_CH", "ieee17221.default_audio_format.channel_formats.22_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_22CH, NULL, HFILL } }, { &hf_adp_chan_format_24ch, { "24_CH", "ieee17221.default_audio_format.channel_formats.24_ch", FT_BOOLEAN, 16, NULL, ADP_CHAN_FORMAT_24CH, NULL, HFILL } }, #endif /* Channel Formats Fields End */ /* Default Audio Formats Fields End */ #if 0 { &hf_adp_def_vid_format, { "Default Video Format", "ieee17221.default_video_format", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #endif { &hf_adp_assoc_id, { "Association ID", "ieee17221.association_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_adp_entity_type, { "Entity Type", "ieee17221.entity_type", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #endif /*******************************************************************/ { &hf_acmp_message_type, { "Message Type", "ieee17221.message_type", FT_UINT8, BASE_DEC, VALS(acmp_message_type_vals), ACMP_MSG_TYPE_MASK, NULL, HFILL } }, { &hf_acmp_status_field, { "Status Field", "ieee17221.status_field", FT_UINT8, BASE_DEC, VALS(acmp_status_field_vals), ACMP_STATUS_FIELD_MASK, NULL, HFILL } }, { &hf_acmp_cd_length, { "Control Data Length", "ieee17221.control_data_length", FT_UINT16, BASE_DEC, NULL, ACMP_CD_LENGTH_MASK, NULL, HFILL } }, { &hf_acmp_stream_id, { "Stream ID", "ieee17221.stream_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_controller_guid, { "Controller GUID", "ieee17221.controller_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_talker_guid, { "Talker GUID", "ieee17221.talker_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_listener_guid, { "Listener GUID", "ieee17221.listener_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_talker_unique_id, { "Talker Unique ID", "ieee17221.talker_unique_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_listener_unique_id, { "Listener Unique ID", "ieee17221.listener_unique_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_stream_dest_mac, { "Destination MAC address", "ieee17221.dest_mac", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_connection_count, { "Connection Count", "ieee17221.connection_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_sequence_id, { "Sequence ID", "ieee17221.sequence_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_acmp_flags, { "Flags", "ieee17221.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* ACMP Flags Begin */ { &hf_acmp_flags_class_b, { "CLASS_B", "ieee17221.flags.class_b", FT_BOOLEAN, 16, NULL, ACMP_FLAG_CLASS_B_BITMASK, NULL, HFILL } }, { &hf_acmp_flags_fast_connect, { "FAST_CONNECT", "ieee17221.flags.fast_connect", FT_BOOLEAN, 16, NULL, ACMP_FLAG_FAST_CONNECT_BITMASK, NULL, HFILL } }, { &hf_acmp_flags_saved_state, { "SAVED_STATE", "ieee17221.flags.saved_state", FT_BOOLEAN, 16, NULL, ACMP_FLAG_SAVED_STATE_BITMASK, NULL, HFILL } }, { &hf_acmp_flags_streaming_wait, { "STREAMING_WAIT", "ieee17221.flags.streaming_wait", FT_BOOLEAN, 16, NULL, ACMP_FLAG_STREAMING_WAIT_BITMASK, NULL, HFILL } }, { &hf_acmp_flags_supports_encrypted, { "SUPPORTS_ENCRYPTED", "ieee17221.flags.supports_encrypted", FT_BOOLEAN, 16, NULL, ACMP_FLAG_SUPPORTS_ENCRYPTED_BITMASK, NULL, HFILL } }, { &hf_acmp_flags_encrypted_pdu, { "ENCRYPTED_PDU", "ieee17221.flags.encrypted_pdu", FT_BOOLEAN, 16, NULL, ACMP_FLAG_ENCRYPTED_PDU_BITMASK, NULL, HFILL } }, { &hf_acmp_flags_talker_failed, { "TALKER_FAILED", "ieee17221.flags.talker_failed", FT_BOOLEAN, 16, NULL, ACMP_FLAG_TALKER_FAILED_BITMASK, NULL, HFILL } }, /* ACMP Flags End */ { &hf_acmp_vlan_id, { "Stream VLAN Id", "ieee17221.vlan_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /******* AECP ******/ /* COMMON FIELDS */ { &hf_aecp_message_type, { "Message Type", "ieee17221.message_type", FT_UINT8, BASE_DEC, VALS(aecp_message_type_vals), AECP_MSG_TYPE_MASK, NULL, HFILL } }, { &hf_aecp_cd_length, { "Control Data Length", "ieee17221.control_data_length", FT_UINT16, BASE_DEC, NULL, AECP_CD_LENGTH_MASK, NULL, HFILL } }, { &hf_aecp_target_guid, { "Target GUID", "ieee17221.target_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_controller_guid, { "Controller GUID", "ieee17221.controller_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_sequence_id, { "Sequence ID", "ieee17221.sequence_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_u_flag, { "U Flag", "ieee17221.u_flag", FT_BOOLEAN, 8, NULL, AECP_U_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_command_type, { "Command Type", "ieee17221.command_type", FT_UINT16, BASE_HEX, VALS(aecp_command_type_vals), AECP_COMMAND_TYPE_MASK, NULL, HFILL } }, /* Address Access Fields */ { &hf_aecp_aa_count, { "Count", "ieee17221.count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_aa_tlv_mode, { "Tlv Mode", "ieee17221.tlv_mode", FT_UINT8, BASE_DEC, NULL, 0xF0, NULL, HFILL } }, { &hf_aecp_aa_tlv_length, { "Tlv Length", "ieee17221.tlv_length", FT_UINT16, BASE_DEC, NULL, 0x0FFF, NULL, HFILL } }, { &hf_aecp_aa_tlv_address, { "Tlv Address", "ieee17221.tlv_address", FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL } }, /* SLIGHTLY LESS COMMON FIELDS */ { &hf_aecp_descriptor_type, { "Descriptor Type", "ieee17221.descriptor_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aecp_descriptor_index, {"Descriptor Index", "ieee17221.descriptor_index", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* AECP Commands and Responses 1722.1 Sec 7.4 */ /* LOCK_ENTITY */ { &hf_aecp_unlock_flag, { "UNLOCK Flag", "ieee17221.flags.unlock", FT_BOOLEAN, 8, NULL, AECP_UNLOCK_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_locked_guid, { "Locked GUID", "ieee17221.locked_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL} }, /* READ_DESCRIPTOR */ { &hf_aecp_configuration, { "Configuration", "ieee17221.configuration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* WRITE_DESCRIPTOR */ /* ACQUIRE_ENTITY */ { &hf_aecp_persistent_flag, { "Persistent Flag", "ieee17221.flags.persistent", FT_BOOLEAN, 32, NULL, AECP_PERSISTENT_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_release_flag, { "Release Flag", "ieee17221.flags.release", FT_BOOLEAN, 32, NULL, AECP_RELEASE_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_owner_guid, { "Owner GUID", "ieee17221.owner_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* CONTROLLER_AVAILABLE */ /* SET_CLOCK_SOURCE / GET_CLOCK_SOURCE */ { &hf_aecp_clock_source_id, { "Clock Source ID", "ieee17221.clock_source_id64", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* SET_STREAM_FORMAT */ { &hf_aecp_stream_format, {"Stream Format", "ieee17221.stream_format64", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GET_STREAM_FORMAT */ /* SET_CONFIGURATION / GET_CONFIGURATION */ /* SET_CONTROL_VALUE / GET_CONTROL_VALUE */ /* SET_SIGNAL_SELECTOR / GET_SIGNAL_SELECTOR */ { &hf_aecp_signal_type, {"Signal Type", "ieee17221.signal_type", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_signal_index, {"Signal Index", "ieee17221.signal_index", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_signal_output, {"Signal Output", "ieee17221.signal_output", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* SET_MIXER / GET_MIXER */ /* SET_MATRIX / GET_MATRIX */ { &hf_aecp_matrix_column, {"Matrix Column", "ieee17221.matrix_column", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_matrix_row, {"Matrix Row", "ieee17221.matrix_row", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_matrix_region_width, {"Region Width", "ieee17221.matrix_region_width", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_matrix_region_height, {"Region Height", "ieee17221.matrix_region_height", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_matrix_rep, {"Rep", "ieee17221.matrix_rep", FT_BOOLEAN, 8, NULL, AECP_MATRIX_REP_MASK, NULL, HFILL } }, { &hf_aecp_matrix_direction, {"Direction", "ieee17221.matrix_direction", FT_UINT8, BASE_DEC, VALS(aecp_direction_type_vals), AECP_MATRIX_DIRECTION_MASK, NULL, HFILL } }, { &hf_aecp_matrix_value_count, {"Value Count", "ieee17221.matrix_value_count", FT_UINT16, BASE_DEC, NULL, AECP_MATRIX_VALUE_COUNT_MASK, NULL, HFILL } }, { &hf_aecp_matrix_item_offset, {"Item Offset", "ieee17221.matrix_item_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aecp_matrix_affected_item_count, {"Affected Item Count", "ieee17221.matrix_affected_item_count", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* START_STREAMING */ /* STOP_STREAMING */ /* GET_AVB_INFO */ { &hf_aecp_avb_info_ptp_grandmaster_id, {"gPTP Grandmaster ID", "ieee17221.avb_info_gptp_grandmaster_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_info_propegation_delay, {"Propagation Delay", "ieee17221.avb_info_propagation_delay", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_info_gptp_domain_number, {"gPTP Domain Number", "ieee17221.avb_info_gptp_domain_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aecp_avb_info_flags, {"Flags", "ieee17221.avbinfo_flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aecp_as_capable_flag, { "AS Capable Flag", "ieee17221.as_capable_flag", FT_BOOLEAN, 8, NULL, AECP_AS_CAPABLE_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_gptp_enabled_flag, { "gPTP Enabled Flag", "ieee17221.gptp_enabled_flag", FT_BOOLEAN, 8, NULL, AECP_GPTP_ENABLED_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_srp_enabled_flag, { "SRP Enabled Flag", "ieee17221.srp_enabled_flag", FT_BOOLEAN, 8, NULL, AECP_SRP_ENABLED_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_avb_info_msrp_mappings_count, {"MSRP Mappings Count", "ieee17221.msrp_mappings_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_info_msrp_mappings, {"MSRP Mappings", "ieee17221.msrp_mappings", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_info_msrp_mapping_traffic_class, {"MSRP Mapping Traffic Class", "ieee17221.msrp_mapping_traffic_class", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_info_msrp_mapping_priority, {"MSRP Mapping Priority", "ieee17221.msrp_mapping_priority", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_get_avb_info_msrp_vlan_id, {"MSRP VLAN ID", "ieee17221.msrp_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_map_index, {"Map Index", "ieee17221.map_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_number_of_maps, {"Number of Maps", "ieee17221.number_of_maps", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* GET_STREAM_INFO */ { &hf_aecp_msrp_accumulated_latency, {"MSRP Accumulated Latency", "ieee17221.msrp_accumulated_latency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_msrp_failure_code, {"MSRP Failure Code", "ieee17221.msrp_failure_code", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_msrp_failure_bridge_id, {"MSRP Failure Bridge ID", "ieee17221.msrp_failure_bridge_id", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aecp_stream_vlan_id, {"Stream VLAN ID", "ieee17221.stream_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aecp_stream_vlan_id_valid_flag, {"Stream VLAN ID Valid Flag", "ieee17221.flags.stream_vlan_id_valid", FT_BOOLEAN, 32, NULL, AECP_STREAM_VLAN_ID_VALID_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_connected_flag, {"Connected Flag", "ieee17221.flags.connected", FT_BOOLEAN, 32, NULL, AECP_CONNECTED_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_msrp_failure_valid_flag, {"MSRP Failure Valid Flag", "ieee17221.flags.msrp_failure_valid", FT_BOOLEAN, 32, NULL, AECP_MSRP_FAILURE_VALID_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_dest_mac_valid_flag, {"Dest MAC Valid Flag", "ieee17221.flags.dest_mac_valid", FT_BOOLEAN, 32, NULL, AECP_DEST_MAC_VALID_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_msrp_acc_lat_valid_flag, {"MSRP Accumulated Latency Field Valid Flag", "ieee17221.flags.msrp_acc_lat_valid", FT_BOOLEAN, 32, NULL, AECP_MSRP_ACC_LAT_VALID_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_stream_id_valid_flag, {"Stream ID Valid Flag", "ieee17221.flags.stream_id_valid", FT_BOOLEAN, 32, NULL, AECP_STREAM_ID_VALID_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_stream_format_valid_flag, {"Stream Format Valid Flag", "ieee17221.flags.stream_format_valid", FT_BOOLEAN, 32, NULL, AECP_STREAM_FORMAT_VALID_FLAG_MASK, NULL, HFILL } }, /* SET_NAME / GET_NAME */ { &hf_aecp_name_index, {"Name Index", "ieee17221.name_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_configuration_index, {"Configuration Index", "ieee17221.configuration_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_name, {"Name", "ieee17221.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* SET_ASSOCIATION_ID / GET_ASSOCIATION_ID */ { &hf_aecp_association_id, {"Association ID", "ieee17221.association_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* GET_AS_PATH */ { &hf_aecp_as_path_count, {"Count", "ieee17221.as_path_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_as_path_sequences, {"Path Sequence", "ieee17221.as_path_sequences", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_get_as_info_clock_id, { "ClockId", "ieee17221.get_as_info_clock_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* AUTH_ADD_KEY */ { &hf_aecp_keychain_id, {"Keychain ID", "ieee17221.keychain_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_keychain_id_small, {"Keychain ID", "ieee17221.keychain_id_small", FT_UINT8, BASE_HEX, VALS(aecp_keychain_id_type_vals), AECP_KEYCHAIN_ID_MASK, NULL, HFILL } }, { &hf_aecp_key_type, {"Key Type", "ieee17221.key_type", FT_UINT8, BASE_HEX, VALS(aecp_key_type_type_vals), AECP_KEYTYPE_MASK, NULL, HFILL } }, { &hf_aecp_key_signature, {"Key Signature", "ieee17221.key_signature", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aecp_key_number, {"Key ID", "ieee17221.key_id", FT_UINT16, BASE_HEX, NULL, AECP_KEY_NUMBER_MASK, NULL, HFILL } }, { &hf_aecp_continued_flag, {"Continued", "ieee17221.continued", FT_BOOLEAN, 8, NULL, AECP_CONTINUED_MASK, NULL, HFILL } }, { &hf_aecp_key_part, {"Key Part", "ieee17221.key_part", FT_UINT8, BASE_DEC, NULL, AECP_KEY_PART_MASK, NULL, HFILL } }, #endif { &hf_aecp_key_length, {"Key Length", "ieee17221.key_length", FT_UINT16, BASE_DEC, NULL, AECP_KEY_LENGTH_MASK, NULL, HFILL } }, #if 0 { &hf_aecp_private_key_read_flag, {"Private Key Read Flag", "ieee17221.flags.private_key_read", FT_BOOLEAN, 32, NULL, AECP_PRIVATE_KEY_READ_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_private_key_write_flag, {"Private Key Write Flag", "ieee17221.flags.private_key_write", FT_BOOLEAN, 32, NULL, AECP_PRIVATE_KEY_WRITE_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_public_key_write_flag, {"Public Key Write Flag", "ieee17221.flags.public_key_write", FT_BOOLEAN, 32, NULL, AECP_PUBLIC_KEY_WRITE_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_control_admin_flag, {"Control Admin Flag", "ieee17221.flags.control_admin", FT_BOOLEAN, 32, NULL, AECP_CONTROL_ADMIN_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_mem_obj_admin_flag, {"Memory Object Admin", "ieee17221.mem_obj_admin", FT_BOOLEAN, 32, NULL, AECP_MEM_OBJ_ADMIN_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_mem_obj_settings_flag, {"Memory Object Settings", "ieee17221.mem_obj_settings", FT_BOOLEAN, 32, NULL, AECP_MEM_OBJ_SETTINGS_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_control_user_l1, {"Control User L1 flag", "ieee17221.flags.control_user_l1", FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L1_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_control_user_l2, {"Control User L2 flag", "ieee17221.flags.control_user_l2", FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L2_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_control_user_l3, {"Control User L3 flag", "ieee17221.flags.control_user_l3", FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L3_FLAG_MASK, NULL, HFILL } }, { &hf_aecp_control_user_l4, {"Control User L4 flag", "ieee17221.flags.control_user_l4", FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L4_FLAG_MASK, NULL, HFILL } }, #endif { &hf_aecp_keychain_list_index, {"Keychain List Index", "ieee17221.keychain_list_index", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_keychain_number_of_keys, {"Keychain Number of Keys", "ieee17221.keychain_number_of_keys", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_keychain_number_of_lists, {"Keychain Number of Lists", "ieee17221.keychain_number_of_lists", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_key_eui, {"Key EUI", "ieee17221.key_eui", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_token_length, {"Token Length", "ieee17221.token_length", FT_UINT16, BASE_DEC, NULL, AECP_TOKEN_LENGTH_MASK, NULL, HFILL } }, { &hf_aecp_key, {"Key", "ieee17221.key", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_auth_token, {"Auth Token", "ieee17221.auth_token", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_flags_32, {"Flags", "ieee17221.flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* AUTH_GET_KEY */ /* AUTHENTICATE */ /* GET_COUNTERS */ /* Counter valid bits */ { &hf_aecp_avb_interface_link_up_valid, {"Link Up Valid", "ieee17221.flags.link_up_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LINK_UP, NULL, HFILL } }, { &hf_aecp_avb_interface_link_down_valid, {"Link Down Valid", "ieee17221.flags.link_down_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LINK_DOWN, NULL, HFILL } }, { &hf_aecp_avb_interface_packets_tx_valid, {"Packets TX Valid", "ieee17221.flags.packets_tx_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_TX, NULL, HFILL } }, { &hf_aecp_avb_interface_packets_rx_valid, {"Packets RX Valid", "ieee17221.flags.packets_rx_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_RX, NULL, HFILL } }, { &hf_aecp_avb_interface_rx_crc_error_valid, {"RX CRC Error Valid", "ieee17221.flags.rx_crc_error_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_RX_CRC_ERROR, NULL, HFILL } }, { &hf_aecp_avb_interface_gptp_gm_changed_valid, {"GPTP GM Changed Valid", "ieee17221.flags.gptp_gm_changed_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_GPTP_GM_CHANGED, NULL, HFILL } }, { &hf_aecp_clock_domain_unlocked_valid, {"Clock Domain Unlocked Valid", "ieee17221.flags.clock_domain_unlocked_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_CLOCK_DOMAIN_UNLOCKED, NULL, HFILL } }, { &hf_aecp_clock_domain_locked_valid, {"Clock_Domain Locked Valid", "ieee17221.flags.clock_domain_locked_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_CLOCK_DOMAIN_LOCKED, NULL, HFILL } }, { &hf_aecp_stream_input_media_unlocked_valid, {"Media Unlocked Valid", "ieee17221.flags.media_unlocked_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_UNLOCKED, NULL, HFILL } }, { &hf_aecp_stream_input_media_locked_valid, {"Media Locked Valid", "ieee17221.flags.media_locked_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_LOCKED, NULL, HFILL } }, { &hf_aecp_stream_input_stream_reset_valid, {"Stream Reset Valid", "ieee17221.flags.stream_reset_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_STREAM_RESET, NULL, HFILL } }, { &hf_aecp_stream_input_seq_num_mismatch_valid, {"Seq Num Mismatch Valid", "ieee17221.flags.seq_num_mismatch_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_SEQ_NUM_MISMATCH, NULL, HFILL } }, { &hf_aecp_stream_input_media_reset_valid, {"Media Reset Valid", "ieee17221.flags.media_reset_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_RESET, NULL, HFILL } }, { &hf_aecp_stream_input_timestamp_uncertain_valid, {"Timestamp Uncertain Valid", "ieee17221.flags.timestamp_uncertain_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_UNCERTAIN, NULL, HFILL } }, { &hf_aecp_stream_input_timestamp_valid_valid, {"Timestamp Valid Valid", "ieee17221.flags.timestamp_valid_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_VALID, NULL, HFILL } }, { &hf_aecp_stream_input_timestamp_not_valid_valid, {"Timestamp Not Valid Valid", "ieee17221.flags.timestamp_not_valid_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_NOT_VALID, NULL, HFILL } }, { &hf_aecp_stream_input_unsupported_format_valid, {"Unsupported Format Valid", "ieee17221.flags.unsupported_format_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_UNSUPPORTED_FORMAT, NULL, HFILL } }, { &hf_aecp_stream_input_late_timestamp_valid, {"Late Timestamp Valid", "ieee17221.flags.late_timestamp_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LATE_TIMESTAMP, NULL, HFILL } }, { &hf_aecp_stream_input_early_timestamp_valid, {"Early Timestamp Valid", "ieee17221.flags.early_timestamp_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_EARLY_TIMESTAMP, NULL, HFILL } }, { &hf_aecp_stream_input_packets_tx_valid, {"Stream Packets TX Valid", "ieee17221.flags.stream_packets_tx_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_STREAM_PACKETS_TX, NULL, HFILL } }, { &hf_aecp_stream_input_packets_rx_valid, {"Stream Packets RX Valid", "ieee17221.flags.stream_packets_rx_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_STREAM_PACKETS_RX, NULL, HFILL } }, { &hf_aecp_entity_specific1_valid, {"Entity Specific 1", "ieee17221.flags.entity_specific1_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_1, NULL, HFILL } }, { &hf_aecp_entity_specific2_valid, {"Entity Specific 2", "ieee17221.flags.entity_specific2_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_2, NULL, HFILL } }, { &hf_aecp_entity_specific3_valid, {"Entity Specific 3", "ieee17221.flags.entity_specific3_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_3, NULL, HFILL } }, { &hf_aecp_entity_specific4_valid, {"Entity Specific 4", "ieee17221.flags.entity_specific4_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_4, NULL, HFILL } }, { &hf_aecp_entity_specific5_valid, {"Entity Specific 5", "ieee17221.flags.entity_specific5_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_5, NULL, HFILL } }, { &hf_aecp_entity_specific6_valid, {"Entity Specific 6", "ieee17221.flags.entity_specific6_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_6, NULL, HFILL } }, { &hf_aecp_entity_specific7_valid, {"Entity Specific 7", "ieee17221.flags.entity_specific7_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_7, NULL, HFILL } }, { &hf_aecp_entity_specific8_valid, {"Entity Specific 8", "ieee17221.flags.entity_specific8_valid", FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_8, NULL, HFILL } }, /* Counters */ { &hf_aecp_avb_interface_link_up, {"Link Up", "ieee17221.link_up", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_interface_link_down, {"Link Down", "ieee17221.link_down", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_interface_packets_tx, {"Frames TX", "ieee17221.frames_tx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_interface_packets_rx, {"Frames RX", "ieee17221.frames_rx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_interface_rx_crc_error, {"RX CRC Error", "ieee17221.rx_crc_error", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_avb_interface_gptp_gm_changed, {"GPTP GM Changed", "ieee17221.gptp_gm_changed", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_clock_domain_unlocked, {"Clock Domain Unlocked", "ieee17221.clock_domain_unlocked", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_clock_domain_locked, {"Clock_Domain Locked", "ieee17221.clock_domain_locked", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_media_unlocked, {"Media Unlocked", "ieee17221.media_unlocked", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_media_locked, {"Media Locked", "ieee17221.media_locked", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_stream_reset, {"Stream Reset", "ieee17221.stream_reset", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_seq_num_mismatch, {"Seq Num Mismatch", "ieee17221.seq_num_mismatch", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_media_reset, {"Media Reset", "ieee17221.media_reset", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_timestamp_uncertain, {"Timestamp Uncertain", "ieee17221.timestamp_uncertain", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_timestamp_valid, {"Timestamp Valid", "ieee17221.timestamp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_timestamp_not_valid, {"Timestamp Not Valid", "ieee17221.timestamp_not", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_unsupported_format, {"Unsupported Format", "ieee17221.unsupported_format", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_late_timestamp, {"Late Timestamp", "ieee17221.late_timestamp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_early_timestamp, {"Early Timestamp", "ieee17221.early_timestamp", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_packets_tx, {"Stream Packets TX", "ieee17221.stream_packets_tx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_stream_input_packets_rx, {"Stream Packets RX", "ieee17221.stream_packets_rx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific1, {"Entity Specific 1", "ieee17221.entity_specific1", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific2, {"Entity Specific 2", "ieee17221.entity_specific2", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific3, {"Entity Specific 3", "ieee17221.entity_specific3", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific4, {"Entity Specific 4", "ieee17221.entity_specific4", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific5, {"Entity Specific 5", "ieee17221.entity_specific5", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific6, {"Entity Specific 6", "ieee17221.entity_specific6", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific7, {"Entity Specific 7", "ieee17221.entity_specific7", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_entity_specific8, {"Entity Specific 8", "ieee17221.entity_specific8", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* REBOOT */ /* SET_MEDIA_FORMAT / GET_MEDIA_FORMAT */ #if 0 { &hf_aecp_media_format, {"Media Format", "ieee17221.media_format", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aecp_video_format, {"Video Format", "ieee17221.video_format", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_sampling_rate_pull, { "Sampling Rate Pull Value", "ieee17221.sampling_rate_pull", FT_UINT32, BASE_HEX, VALS(aecp_sampling_rate_pull_field_vals), AECP_SAMPLING_RATE_PULL_MASK, NULL, HFILL } }, { &hf_aecp_sampling_rate_base_frequency, {"Sampling Rate Base Frequency", "ieee17221.sampling_rate_base_frequency", FT_UINT32, BASE_DEC, NULL, AECP_SAMPLING_RATE_BASE_FREQ_MASK, NULL, HFILL } }, /* REGISTER_STATE_NOTIFICATION */ #if 0 { &hf_aecp_address_type, {"Address Type", "ieee17221.address_type", FT_UINT16, BASE_HEX, VALS(aecp_address_type_vals), 0x00, NULL, HFILL } }, #endif { &hf_aecp_mac_address, { "MAC address", "ieee17221.mac_address", FT_ETHER, BASE_NONE, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aecp_ipv4_address, {"IPV4 Address", "ieee17221.ipv4_address", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_ipv6_address, {"IPv6 Address", "ieee17221.ipv6_address", FT_IPv6, BASE_NONE, NULL, 0x0, NULL, HFILL } }, #endif /* DEREGISTER_STATE_NOTIFICATION */ /* REGISTER_QUERY_NOTIFICATION / DEREGISTER_QUERY_NOTIFICATION */ #if 0 { &hf_aecp_query_period, {"Query Period (ms)", "ieee17221.query_period", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_query_limit, {"Query Limit", "ieee17221.query_limit", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_query_type, {"Query Type", "ieee17221.query_type", FT_UINT16, BASE_HEX, VALS(aecp_command_type_vals), 0x00, NULL, HFILL } }, { &hf_aecp_query_id, {"Query ID", "ieee17221.query_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* IDENTIFY_NOTIFICATION */ /* STATE_CHANGE_NOTIFICATION */ #if 0 { &hf_aecp_count, {"Count", "ieee17221.count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_descriptors, {"Descriptors Array", "ieee17221.descriptors", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* INCREMENT_CONTROL_VALUE / DECREMENT_CONTROL_VALUE */ { &hf_aecp_values_count, {"Values Count", "ieee17221.values_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* START_OPERATION */ { &hf_aecp_operation_id, {"Operation ID", "ieee17221.operation_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_operation_type, {"Operation Type", "ieee17221.operation_type", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },/* draft spec says this is defined by control_type field * * start_operation does not include a control type field * * There is an operation type table 7.83 that has not * * yet been defined. control_type may be part of a * * descriptor; will check */ /* ABORT_OPERATION */ /* OPERATION_STATUS */ { &hf_aecp_percent_complete, {"Percent Complete", "ieee17221.percent_complete", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* AUTH_GET_KEY_COUNT */ /* * AVDECC ENTITY MODEL DESCRIPTOR FIELDS * */ /* ENTITY */ /* hf_aecp_descriptor_type */ /* hf_aecp_descriptor_index */ { &hf_aem_entity_id, {"Entity ID", "ieee17221.entity_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_entity_model_id, {"Entity Model ID", "ieee17221.entity_model_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* hf_adp_entity_cap * hf_adp_entity_cap_avdecc_ip * hf_adp_entity_cap_zero_conf * hf_adp_entity_cap_gateway_entity * hf_adp_entity_cap_avdecc_control * hf_adp_entity_cap_legacy_avc * hf_adp_entity_cap_assoc_id_support * hf_adp_entity_cap_assoc_id_valid */ /* hf_adp_talker_stream_srcs */ /* hf_adp_talker_cap & flags */ /* hf_adp_listener_stream_sinks */ /* hf_adp_listener_cap & flags */ /* hf_adp_controller_cap & flags */ /* hf_adp_avail_index */ /* where appropriate use adp values */ { &hf_aem_entity_name, {"Entity Name", "ieee17221.entity_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_vendor_name_string, {"Vendor Name String (ptr)", "ieee17221.vendor_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_model_name_string, {"Model Name String (ptr)", "ieee17221.model_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_firmware_version, {"Firmware Version", "ieee17221.firmware_version", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_group_name, {"Group Name", "ieee17221.group_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_serial_number, {"Serial Number", "ieee17221.serial_number", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_configurations_count, {"Configurations Count", "ieee17221.configurations_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_current_configuration, {"Current Configuration", "ieee17221.current_configuration", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* CONFIGURATION */ { &hf_aem_configuration_name, {"Object Name", "ieee17221.configuration_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_configuration_name_string, {"Localized Description", "ieee17221.configuration_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_descriptor_counts_count, {"Descriptor Counts Count", "ieee17221.descriptor_counts_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_descriptor_counts_offset, {"Descriptor Counts Offset", "ieee17221.descriptor_counts_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_count, {"Count", "ieee17221.count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* AUDIO */ { &hf_aem_number_of_stream_input_ports, {"Number Of Stream Input Ports", "ieee17221.number_of_stream_input_ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_stream_input_port, {"Base Stream Input Port", "ieee17221.base_stream_input_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_stream_output_ports, {"Number Of Stream Output Ports", "ieee17221.number_of_stream_output_ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_stream_output_port, {"Base Stream Output Port", "ieee17221.base_stream_output_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_external_input_ports, {"Number Of External Input Ports", "ieee17221.number_of_external_input_ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_external_input_port, {"Base External Input Port", "ieee17221.base_external_input_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_external_output_ports, {"Number Of External Output Ports", "ieee17221.number_of_external_output_ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_external_output_port, {"Base External Output Port", "ieee17221.base_external_output_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_internal_input_ports, {"Number Of Internal Input Ports", "ieee17221.number_of_internal_input_ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_internal_input_port, {"Base Internal Input Port", "ieee17221.base_internal_input_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_internal_output_ports, {"Number Of Internal Output Ports", "ieee17221.number_of_internal_output_ports", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_internal_output_port, {"Base Internal Output Port", "ieee17221.base_internal_output_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_source_id, {"Clock Source ID", "ieee17221.clock_source_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_domain_id, {"Clock Domain ID", "ieee17221.clock_domain_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_sources_offset, {"Clock Sources Offset", "ieee17221.clock_sources_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_source_index, {"Clock Source Index", "ieee17221.clock_source_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_sources_count, {"Clock Sources Count", "ieee17221.clock_sources_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_sources, {"Clock Sources", "ieee17221.clock_sources", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_sources_array, {"Clock Sources Array", "ieee17221.clock_sources_array", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_controls, {"Number Of Controls", "ieee17221.number_of_controls", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_control, {"Base Control", "ieee17221.base_control", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_control_blocks, {"Number Of Control Blocks", "ieee17221.number_of_control_blocks", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_control_block, {"Base Control Block", "ieee17221.base_control_block", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_object_name, {"Object Name", "ieee17221.object_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_localized_description, {"Localized Description", "ieee17221.localized_description", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_current_sample_rate, {"Current Sample Rate", "ieee17221.current_sample_rate", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_signal_selectors, {"Number of Signal Selectors", "ieee17221.num_signal_selectors", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_signal_selector, {"Base Signal Selector", "ieee17221.base_signal_selector", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_mixers, {"Number of Mixers", "ieee17221.num_mixers", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_mixer, {"Base Mixer", "ieee17221.base_mixer", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_matrices, {"Number of Matrices", "ieee17221.num_matrices", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_matrix, {"Base Matrix", "ieee17221.base_matrix", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_splitters, {"Number of Splitters", "ieee17221.num_splitters", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_splitter, {"Base Splitter", "ieee17221.base_splitter", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_combiners, {"Number of Combiners", "ieee17221.num_combiners", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_combiner, {"Base Combiner", "ieee17221.base_combiner", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_demultiplexers, {"Number of Demultiplexers", "ieee17221.num_demultiplexer", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_demultiplexer, {"Base Demultiplexer", "ieee17221.base_demultiplexer", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_multiplexers, {"Number of Multiplexers", "ieee17221.num_multiplexers", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_multiplexer, {"Base Multiplexer", "ieee17221.base_multiplexer", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_transcoders, {"Number of Transcoders", "ieee17221.num_transcoders", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_transcoder, {"Base Transcoder", "ieee17221.base_transcoder", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* sample rate is 3 bit pull field multiplier and 29 bit base freq in Hz */ { &hf_aem_sample_rates_offset, {"Sample Rates Offset", "ieee17221.sample_rates_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_sample_rates_count, {"Sample Rates Count", "ieee17221.sample_rates_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_sample_rates, {"Sample Rates", "ieee17221.sample_rates", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_frequency, {"Base Frequency", "ieee17221.base_frequency", FT_UINT32, BASE_DEC, NULL, AEM_BASE_FREQUENCY_MASK, NULL, HFILL } }, { &hf_aem_pull_field, {"Pull Field (frequency multiplier)", "ieee17221.pull_field", FT_UINT8, BASE_HEX, VALS(aem_frequency_multiplier_type_vals), AEM_PULL_FIELD_MASK, NULL, HFILL } }, /* VIDEO */ /* SENSOR */ /* STREAM_INPUT */ /* STREAM_OUTPUT */ { &hf_aem_stream_name, {"Object Name", "ieee17221.stream_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_stream_name_string, {"Localized Description", "ieee17221.stream_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_stream_flags, {"Stream Flags", "ieee17221.stream_flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_flags_clock_sync_source, {"Clock Sync Source Flag", "ieee17221.flags.clock_sync_source", FT_BOOLEAN, 16, NULL, AEM_CLOCK_SYNC_SOURCE_FLAG_MASK, NULL, HFILL } }, { &hf_aem_flags_class_a, {"Class A Flag", "ieee17221.flags.class_a", FT_BOOLEAN, 16, NULL, AEM_CLASS_A_FLAG_MASK, NULL, HFILL } }, { &hf_aem_flags_class_b, {"Class B Flag", "ieee17221.flags.class_b", FT_BOOLEAN, 16, NULL, AEM_CLASS_B_FLAG_MASK, NULL, HFILL } }, #if 0 { &hf_aem_stream_channels, {"Stream Channels", "ieee17221.stream_channels", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aem_formats_offset, {"Formats Offset", "ieee17221.formats_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_formats, {"Number Of Formats", "ieee17221.number_of_formats", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backup_talker_guid_0, {"Primary Backup Talker GUID", "ieee17221.backup_talker_guid_0", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backup_talker_unique_0, {"Primary Backup Talker Unique ID", "ieee17221.backup_talker_unique_0", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backup_talker_guid_1, {"Secondary Backup Talker GUID", "ieee17221.backup_talker_guid_1", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backup_talker_unique_1, {"Secondary Backup Talker Unique ID", "ieee17221.backup_talker_unique_1", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backup_talker_guid_2, {"Tertiary Backup Talker GUID", "ieee17221.backup_talker_guid_2", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backup_talker_unique_2, {"Tertiary Backup Talker Unique ID", "ieee17221.backup_talker_unique_2", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backedup_talker_guid, {"Backedup Talker GUID", "ieee17221.backedup_talker_guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_backedup_talker_unique, {"Backedup Talker Unique ID", "ieee17221.backedup_talker_unique", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_interface_id, {"AVB Interface ID", "ieee17221.avb_interface_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_buffer_length, {"Buffer Length", "ieee17221.buffer_length", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* array head. uses ett_aem_stream_formats */ { &hf_aem_stream_formats, {"Stream Formats Array", "ieee17221.stream_formats", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* EXTERNAL_JACK_INPUT */ /* EXTERNAL_JACK_OUTPUT*/ { &hf_aem_jack_name, {"Object Name", "ieee17221.jack_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_jack_name_string, {"Localized Description", "ieee17221.jack_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_interface_name, {"Interface Name", "ieee17221.interface_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_interface_name_string, {"Interface Name String", "ieee17221.interface_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_jack_flags, {"Jack Flags", "ieee17221.jack_flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_flags_captive, {"Captive Flag", "ieee17221.flags.captive", FT_BOOLEAN, 16, NULL, AEM_CAPTIVE_FLAG_MASK, NULL, HFILL } }, { &hf_aem_jack_type, {"Jack Type", "ieee17221.jack_type", FT_UINT16, BASE_HEX, VALS(aem_jack_type_vals), 0x00, NULL, HFILL } }, /* AUDIO_PORT_INPUT */ /* AUDIO_PORT_OUTPUT */ { &hf_aem_port_flags, {"Port Flags", "ieee17221.port_flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_flags_async_sample_rate_conv, {"Asynchronous Sample Rate Converter Flag", "ieee17221.flags.async_sample_rate_conv", FT_BOOLEAN, 16, NULL, AEM_ASYNC_SAMPLE_RATE_CONV_FLAG_MASK, NULL, HFILL } }, { &hf_aem_flags_sync_sample_rate_conv, {"Synchronous Sample Rate Converter Flag", "ieee17221.flags.sync_sample_rate_conv", FT_BOOLEAN, 16, NULL, AEM_SYNC_SAMPLE_RATE_CONV_FLAG_MASK, NULL, HFILL } }, #if 0 { &hf_aem_audio_channels, {"Audio Channels", "ieee17221.audio_channels", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aem_number_of_clusters, {"Number of Clusters", "ieee17221.number_of_clusters", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_cluster, {"Base Cluster", "ieee17221.base_cluster", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_audio_map, {"Base Audio Map", "ieee17221.base_audio_map", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_audio_maps, {"Number of Audio Maps", "ieee17221.num_audio_maps", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* VIDEO_PORT_INPUT */ /* VIDEO_PORT_OUTPUT */ #if 0 { &hf_aem_stream_id, {"Stream Descriptor ID", "ieee17221.stream_descriptor_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_formats_count, {"Formats Count", "ieee17221.formats_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* EXTERNAL_PORT_INPUT */ /* EXTERNAL_PORT_OUTPUT */ { &hf_aem_jack_id, {"Jack ID", "ieee17221.jack_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* SENSOR_PORT_INPUT */ /* SENSOR_PORT_OUTPUT */ /* INTERNAL_PORT_INPUT */ /* INTERNAL_PORT_OUTPUT */ #if 0 { &hf_aem_internal_id, {"Internal ID", "ieee17221.internal_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* AVB_INTERFACE */ { &hf_aem_avb_interface_flags, {"Interface Flags", "ieee17221.interface_flags", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_clock_identity, {"Clock Identity", "ieee17221.clock_identity", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_priority1, {"Priority1", "ieee17221.priority1", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_clock_class, {"Clock Class", "ieee17221.clock_class", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_offset_scaled_log_variance, {"Scaled Log Variance", "ieee17221.offset_scaled_log_variance", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_clock_accuracy, {"Clock Accuracy", "ieee17221.clock_accuracy", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_priority2, {"Priority2", "ieee17221.priority2", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_domain_number, {"Domain Number", "ieee17221.domain_number", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_avb_log_sync_interval, {"Log sync Interval", "ieee17221.log_sync_interval", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aem_avb_propagation_delay, {"Propagation Delay", "ieee17221.propagation_delay", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* CLOCK_SOURCE */ { &hf_aem_clock_source_name, {"Object Name", "ieee17221.clock_source_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_source_name_string, {"Localized Description", "ieee17221.clock_source_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_clock_source_flags, {"Clock Source Flags", "ieee17221.clock_source_flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* no flags currently defined */ { &hf_aem_clock_source_type, {"Clock Source Type", "ieee17221.clock_source_type", FT_UINT16, BASE_HEX, VALS(aem_clock_source_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_clock_source_location_type, {"Clock Source Location Type", "ieee17221.clock_source_location_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_clock_source_location_id, {"Clock Source Location ID", "ieee17221.clock_source_location_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* AUDIO_MAP */ { &hf_aem_mappings_offset, {"Mappings Offset", "ieee17221.mappings_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_mappings, {"Number of Mappings", "ieee17221.number_of_mappings", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mappings, {"Mappings", "ieee17221.mappings", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mapping_stream_index, {"Mapping Stream Index", "ieee17221.mapping_stream_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mapping_stream_channel, {"Mapping Stream Channel", "ieee17221.mapping_stream_channel", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mapping_cluster_offset, {"Mapping Cluster Offset", "ieee17221.mapping_cluster_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mapping_cluster_channel, {"Mapping Cluster Channel", "ieee17221.mapping_cluster_channel", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* AUDIO_CLUSTER */ { &hf_aem_channel_count, {"Channel Count", "ieee17221.channel_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_path_latency, {"Path Latency", "ieee17221.path_latency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_am824_label, {"AM824 Label", "ieee17221.am824_label", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aem_cluster_name, {"Cluster Name", "ieee17221.cluster_name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_cluster_name_string, {"Cluster Name String", "ieee17221.cluster_name_string", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif /* CONTROL */ { &hf_aem_control_type, {"Control Type", "ieee17221.control_type", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aem_control_location_type, {"Control Location Type", "ieee17221.control_location_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_control_location_id, {"Control Location ID", "ieee17221.control_location_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aem_control_value_type, {"Control Value Type", "ieee17221.control_value_type", FT_UINT16, BASE_HEX, VALS(aem_control_value_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_control_domain, {"Control Domain", "ieee17221.control_domain", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_values_offset, {"Values Offset", "ieee17221.values_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_values, {"Number Of Values", "ieee17221.number_of_values", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_control_latency, {"Control Latency", "ieee17221.control_latency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* SIGNAL_SELECTOR */ #if 0 { &hf_aem_sources_offset, {"Sources Offset", "ieee17221.sources_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_current_signal_type, {"Current Signal Type", "ieee17221.current_signal_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_current_signal_id, {"Current Signal ID", "ieee17221.current_signal_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_default_signal_type, {"Default Signal Type", "ieee17221.default_signal_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_default_signal_id, {"Default Signal ID", "ieee17221.default_signal_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aem_block_latency, {"Block Latency", "ieee17221.block_latency", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_reset_time, {"Reset Time", "ieee17221.reset_time", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_signal_type, {"Signal Type", "ieee17221.signal_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_signal_index, {"Signal Index", "ieee17221.signal_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_signal_output, {"Signal Output", "ieee17221.signal_output", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* MIXER */ #if 0 { &hf_aem_number_of_sources, {"Number of Sources", "ieee17221.number_of_sources", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_value_offset, {"Value Offset", "ieee17221.value_offset", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* MATRIX */ { &hf_aem_width, {"Width", "ieee17221.width", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_height, {"Height", "ieee17221.height", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_source, {"Base Source", "ieee17221.base_source", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_destinations, {"Number of Destinations", "ieee17221.num_destinations", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_destination, {"Base Destination", "ieee17221.base_destination", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #endif /* LOCALE */ { &hf_aem_locale_identifier, {"Locale Identifier", "ieee17221.locale_identifier", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_number_of_strings, {"Number of Strings", "ieee17221.number_of_strings", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_base_strings, {"Base Strings", "ieee17221.base_strings", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* STRINGS */ { &hf_aem_string, {"String", "ieee17221.string", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* MATRIX SIGNAL */ { &hf_aem_signals_count, {"Signals Count", "ieee17221.signals_count", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_signals_offset, {"Signals Offset", "ieee17221.signals_offset", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, /* MEMORY OBJECT */ { &hf_aem_memory_object_type, {"Memory Object Type", "ieee17221.memory_object_type", FT_UINT16, BASE_HEX, VALS(aem_memory_object_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_target_descriptor_type, {"Target Descriptor Type", "ieee17221.target_descriptor_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_target_descriptor_id, {"Target Descriptor ID", "ieee17221.target_descriptor_id", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_start_address, {"Start Address", "ieee17221.start_address", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_length, {"Length", "ieee17221.length", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, /* CONTROL VALUE TYPES */ { &hf_aem_ctrl_int8, {"Control INT8", "ieee17221.ctrl_int8", FT_INT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_uint8, {"Control UINT8", "ieee17221.ctrl_uint8", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_int16, {"Control INT16", "ieee17221.ctrl_int16", FT_INT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_uint16, {"Control UINT16", "ieee17221.ctrl_uint16", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_int32, {"Control INT32", "ieee17221.ctrl_int32", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_uint32, {"Control UINT32", "ieee17221.ctrl_uint32", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_int64, {"Control INT64", "ieee17221.ctrl_int64", FT_INT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_uint64, {"Control UINT64", "ieee17221.ctrl_uint64", FT_UINT64, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_float, {"Control FLOAT", "ieee17221.ctrl_float", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_double, {"Control DOUBLE", "ieee17221.ctrl_double", FT_DOUBLE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_ctrl_vals, {"Control Values", "ieee17221.ctrl_vals", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_unit, {"Control Value Units", "ieee17221.units", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_string_ref, {"String Reference", "ieee17221.string_ref", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_guid, {"GUID", "ieee17221.guid", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_blob_size, {"Blob Size", "ieee17221.blob_size", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_binary_blob, {"Binary Blob", "ieee17221.binary_blob", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_sources, {"Sources", "ieee17221.sources", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_unknown_descriptor, {"Unknown or Malformed Descriptor", "ieee17221.unknown_descriptor", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_frequency, {"Frequency", "ieee17221.frequency", FT_FLOAT, BASE_NONE, NULL, 0x0, NULL, HFILL } }, /* AEM MEDIA FORMAT FIELDS */ /* Standard media formats are defined by always having the 24 most significant bits * of the EUI64 set to 0x90e0f0 */ #if 0 { &hf_aem_oui24, {"OUI-24", "ieee17221.oui24", FT_UINT24, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mfd_type, {"MFD Type", "ieee17221.mfd_type", FT_UINT8, BASE_HEX, VALS(aem_mfd_type_vals), 0x00, NULL, HFILL } }, { &hf_aem_div, {"Div Flag", "ieee17221.div", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_interlace, {"Interlace Flag", "ieee17221.interlace", FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_channels, {"Video Channel Count", "ieee17221.channels", FT_UINT8, BASE_DEC, NULL, AEM_MASK_CHANNELS, NULL, HFILL } }, { &hf_aem_color_format, {"Color Format", "ieee17221.color_format", FT_UINT16, BASE_HEX, VALS(aem_color_format_type_vals), AEM_MASK_COLOR_FORMAT, NULL, HFILL } }, { &hf_aem_bpp, {"Bits Per Pixel", "ieee17221.bpp", FT_UINT8, BASE_DEC, NULL, AEM_MASK_BPP, NULL, HFILL } }, { &hf_aem_aspect_x, {"Aspect X", "ieee17221.aspect_x", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_aspect_y, {"Aspect Y", "ieee17221.aspect_y", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_frame_rate, {"Frame Rate", "ieee17221.frame_rate", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_comp1, {"Comp 1", "ieee17221.comp1", FT_UINT16, BASE_DEC, NULL, AEM_MASK_COMP1, NULL, HFILL } }, { &hf_aem_comp2, {"Comp 2", "ieee17221.comp2", FT_UINT8, BASE_DEC, NULL, AEM_MASK_COMP2, NULL, HFILL } }, { &hf_aem_comp3, {"Comp 3", "ieee17221.comp3", FT_UINT16, BASE_DEC, NULL, AEM_MASK_COMP3, NULL, HFILL } }, { &hf_aem_comp4, {"Comp 4", "ieee17221.comp4", FT_UINT8, BASE_DEC, NULL, AEM_MASK_COMP4, NULL, HFILL } }, { &hf_aem_mf_width, {"Width", "ieee17221.width", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_mf_height, {"Height", "ieee17221.height", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_cs_eui64, {"CS EUI64", "ieee17221.cs_eui64", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #endif /* BEGIN STREAM FORMAT (SF) FIELDS */ { &hf_aem_stream_format, {"Stream Format", "ieee17221.stream_format", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, { &hf_aem_sf_version, {"Version", "ieee17221.sf_version", FT_UINT8, BASE_HEX, NULL, AEM_MASK_SF_VERSION, NULL, HFILL } }, { &hf_aem_sf_subtype, {"Subtype", "ieee17221.sf_subtype", FT_UINT8, BASE_HEX, NULL, AEM_MASK_SF_SUBTYPE, NULL, HFILL } }, { &hf_aem_sf, {"SF", "ieee17221.sf", FT_BOOLEAN, 8, NULL, AEM_MASK_SF, NULL, HFILL } }, { &hf_aem_iidc_format, {"IIDC Format", "ieee17221.iidc_format", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_iidc_mode, {"IIDC Mode", "ieee17221.iidc_mode", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_iidc_rate, {"IIDC Rate", "ieee17221.iidc_rate", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_fmt, {"FMT", "ieee17221.fmt", FT_UINT8, BASE_HEX, NULL, AEM_MASK_FMT, NULL, HFILL } }, { &hf_aem_fdf_evt, {"FDF EVT", "ieee17221.fdf_evt", FT_UINT8, BASE_HEX, NULL, AEM_MASK_FDF_EVT, NULL, HFILL } }, { &hf_aem_fdf_sfc, {"FDF SFC", "ieee17221.fdf_sfc", FT_UINT8, BASE_HEX, NULL, AEM_MASK_FDF_SFC, NULL, HFILL } }, { &hf_aem_dbs, {"DBS", "ieee17221.dbs", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_b_flag, {"Blocking Flag", "ieee17221.flags.b", FT_BOOLEAN, 8, NULL, AEM_MASK_B, NULL, HFILL } }, { &hf_aem_nb_flag, {"NonBlocking Flag", "ieee17221.flags.nb", FT_BOOLEAN, 8, NULL, AEM_MASK_NB, NULL, HFILL } }, { &hf_aem_label_iec_60958_cnt, {"Label IEC 60958 Count", "ieee17221.label_iec_60958_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_label_mbla_cnt, {"Label Multi-Bit Linear Audio Count", "ieee17221.label_mbla_cnt", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aem_label_midi_cnt, {"Label Midi Slot Count", "ieee17221.label_midi_cnt", FT_UINT8, BASE_DEC, NULL, AEM_MASK_LABEL_MIDI_CNT, NULL, HFILL } }, { &hf_aem_label_smpte_cnt, {"Label SMPTE Slot Count", "ieee17221.label_smpte_cnt", FT_UINT8, BASE_DEC, NULL, AEM_MASK_LABEL_SMPTE_CNT, NULL, HFILL } }, { &hf_aem_video_mode, {"Video Mode", "ieee17221.video_mode", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_compress_mode, {"Compress Mode", "ieee17221.compress_mode", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aem_color_space, {"Color Space", "ieee17221.color_space", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, #if 0 { &hf_aecp_values, {"Values", "ieee17221.values", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, #endif { &hf_aecp_status_code, {"Status", "ieee17221.status", FT_UINT8, BASE_HEX, VALS(aem_status_type_vals), AECP_STATUS_CODE_MASK, NULL, HFILL } }, /* END STREAM FORMAT (SF) FIELDS */ /* SET/GET_STREAM_BACKUP */ { &hf_aecp_backup_talker_entity_id_0, {"Backup Talker Entity ID 0", "ieee17221.backup_talker_entity_id_0", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backup_talker_unique_id_0, {"Backup Talker Unique ID 0", "ieee17221.backup_talker_unique_id_0", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backup_talker_entity_id_1, {"Backup Talker Entity ID 1", "ieee17221.backup_talker_entity_id_1", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backup_talker_unique_id_1, {"Backup Talker Unique ID 1", "ieee17221.backup_talker_unique_id_1", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backup_talker_entity_id_2, {"Backup Talker Entity ID 2", "ieee17221.backup_talker_entity_id_2", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backup_talker_unique_id_2, {"Backup Talker Unique ID 2", "ieee17221.backup_talker_unique_id_2", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backedup_talker_entity_id, {"Backed up Talker Entity ID", "ieee17221.backedup_talker_entity_id", FT_UINT64, BASE_HEX, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_backedup_talker_unique_id, {"Backedup Talker Unique ID", "ieee17221.backedup_talker_unique_id", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, { &hf_aecp_vendor_unique_protocol_id, {"Vendor Unique Protocol ID", "ieee17221.protocol_id", FT_UINT48, BASE_HEX, NULL, 0x0, NULL, HFILL } } }; /* Setup protocol subtree array */ static int *ett[] = { &ett_17221, &ett_adp_ent_cap, &ett_adp_talk_cap, &ett_adp_list_cap, &ett_adp_cont_cap, /* &ett_adp_aud_format, */ &ett_adp_samp_rates, &ett_adp_chan_format, &ett_acmp_flags, &ett_aem_desc_counts, &ett_aem_descriptor, &ett_aem_sample_rates, &ett_aem_stream_flags, &ett_aem_clock_sources, &ett_aem_stream_formats, &ett_aem_jack_flags, &ett_aem_port_flags, &ett_aecp_get_avb_info_msrp_mappings, &ett_aecp_get_as_path_sequences, &ett_aem_clock_source_flags, &ett_aem_mappings, &ett_aem_ctrl_vals, &ett_aem_sources, /* &ett_aem_media_format, */ &ett_aecp_descriptors, &ett_aecp_flags_32, &ett_aem_stream_format, }; /* Register the protocol name and description */ proto_17221 = proto_register_protocol("IEEE 1722.1 Protocol", "IEEE1722.1", "ieee17221"); avb17221_handle = register_dissector("ieee17221", dissect_17221, proto_17221); /* Required function calls to register the header fields and subtrees used */ proto_register_field_array(proto_17221, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); /* Register the custom handler for vendor specific messages */ vendor_unique_protocol_dissector_table = register_dissector_table("ieee17221.protocol_id", "Vendor Unique Protocol ID", proto_17221, FT_STRING, STRING_CASE_SENSITIVE); } void proto_reg_handoff_17221(void) { dissector_add_uint("ieee1722.subtype", 0xFA, avb17221_handle); dissector_add_uint("ieee1722.subtype", 0xFB, avb17221_handle); dissector_add_uint("ieee1722.subtype", 0xFC, avb17221_handle); } /* * Editor modelines - https://www.wireshark.org/tools/modelines.html * * Local variables: * c-basic-offset: 3 * tab-width: 8 * indent-tabs-mode: nil * End: * * vi: set shiftwidth=3 tabstop=8 expandtab: * :indentSize=3:tabSize=8:noTabs=true: */