diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-10-09 08:49:40 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-10-09 08:49:40 +0000 |
commit | de222a1b5a26d95bfabafc9ec995c6a4b169c8dc (patch) | |
tree | b1b8a5a5ad183bbb8f7989ea5c5c7cc01bc160f9 /epan/dissectors/packet-ieee17221.c | |
parent | eb618abad9a969fcdf32129ab807f6cf7c5acb55 (diff) | |
download | wireshark-de222a1b5a26d95bfabafc9ec995c6a4b169c8dc.tar.gz |
From Chris Wulff:
Minor bugfixes to packet-msrp.c and packet-mrp-mvrp.c
Major updates to packet-ieee17221.c
Changes to ieee17221.c update dissector from draft revision 18 / 19 code to
draft revision 21.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7779
svn path=/trunk/; revision=45419
Diffstat (limited to 'epan/dissectors/packet-ieee17221.c')
-rw-r--r-- | epan/dissectors/packet-ieee17221.c | 4400 |
1 files changed, 2581 insertions, 1819 deletions
diff --git a/epan/dissectors/packet-ieee17221.c b/epan/dissectors/packet-ieee17221.c index ea03a35916..0682c44b61 100644 --- a/epan/dissectors/packet-ieee17221.c +++ b/epan/dissectors/packet-ieee17221.c @@ -2,6 +2,7 @@ * Dissector for IEEE P1722.1 * Copyright 2011-2012, Thomas Bottom <tom.bottom@labxtechnologies.com> * Chris Pane <chris.pane@labxtechnologies.com> + * Chris Wulff <chris.wulff@labxtechnologies.com> * * Copyright 2011, Andy Lucas <andy@xmos.com> * @@ -74,13 +75,17 @@ #define ADP_ENTITY_DISCOVER_MESSAGE 0x02 /* entity_capabilities_flags */ -#define ADP_AVDECC_IP_BITMASK 0x01 -#define ADP_ZERO_CONF_BITMASK 0x02 +#define ADP_EFU_MODE_BITMASK 0x01 +#define ADP_ADDRESS_ACCESS_BITMASK 0x02 #define ADP_GATEWAY_ENTITY_BITMASK 0x04 -#define ADP_AVDECC_CONTROL_BITMASK 0x08 +#define ADP_AEM_SUPPORTED_BITMASK 0x08 #define ADP_LEGACY_AVC_BITMASK 0x10 #define ADP_ASSOC_ID_SUPPORT_BITMASK 0x20 #define ADP_ASSOC_ID_VALID_BITMASK 0x40 +#define ADP_CLASS_A_SUPPORTED_BITMASK 0x80 +#define ADP_VENDOR_UNIQUE_BITMASK 0x100 +#define ADP_CLASS_B_SUPPORTED_BITMASK 0x200 +#define ADP_AS_SUPPORTED_BITMASK 0x400 /* talker capabilities flags */ #define ADP_TALK_IMPLEMENTED_BITMASK 0x0001 @@ -208,129 +213,252 @@ #define ACMP_FLAG_STREAMING_WAIT_BITMASK 0x0008 /******************************************************************************/ -/* 1722.1 AECP Offsets */ -#define AECP_STATUS_CODE_OFFSET 2 - -#define AECP_VERSION_OFFSET 1 -#define AECP_TARGET_GUID_OFFSET 4 -#define AECP_CONTROLLER_GUID_OFFSET 12 -#define AECP_SEQUENCE_ID_OFFSET 20 -#define AECP_U_FLAG_OFFSET 22 -#define AECP_COMMAND_TYPE_OFFSET 22 -#define AECP_UNLOCK_FLAG_OFFSET 27 -#define AECP_LOCKED_GUID_OFFSET 28 -#define AECP_CD_LENGTH_OFFSET 2 -#define AECP_FLAGS_OFFSET 24 -#define AECP_LOCKED_GUID_OFFSET 28 -#define AECP_CONFIGURATION_OFFSET 24 -#define AECP_DESCRIPTOR_TYPE_OFFSET_28 28 -#define AECP_DESCRIPTOR_ID_OFFSET_30 30 -#define AECP_DESCRIPTOR_TYPE_OFFSET 24 -#define AECP_DESCRIPTOR_ID_OFFSET 26 -#define AECP_PERSISTENT_FLAG_OFFSET 24 -#define AECP_OWNER_GUID_OFFSET 28 -#define AECP_CLOCK_SOURCE_ID_OFFSET 24 -#define AECP_SOURCE_TYPE_OFFSET 28 -#define AECP_SOURCE_ID_OFFSET 30 -#define AECP_MATRIX_COLUMN_OFFSET 28 -#define AECP_MATRIX_ROW_OFFSET 30 -#define AECP_MATRIX_REGION_WIDTH_OFFSET 32 -#define AECP_MATRIX_REGION_HEIGHT_OFFSET 34 -#define AECP_MATRIX_REP_OFFSET 36 -#define AECP_MATRIX_DIRECTION_OFFSET 36 -#define AECP_MATRIX_VALUE_COUNT_OFFSET 36 -#define AECP_MATRIX_ITEM_OFFSET_OFFSET 38 -#define AECP_MATRIX_AFFECTED_ITEM_COUNT_OFFSET 40 -#define AECP_FLAGS28_OFFSET 28 -#define AECP_STREAM_CLOCK_SOURCE_ID_OFFSET 58 -#define AECP_STREAM_FORMAT_OFFSET 28 -#define AECP_OFFSET_GET_STREAM_INFO_STREAM_FORMAT 32 -#define AECP_OFFSET_GET_STREAM_INFO_STREAM_ID 40 -#define AECP_MSRP_ACC_LAT_OFFSET 56 -#define AECP_SET_MSRP_ACC_LAT_OFFSET 32 -#define AECP_DEST_MAC_OFFSET 60 -#define AECP_DEFAULT_FORMAT_OFFSET 68 -#define AECP_NAME_INDEX_OFFSET 28 -#define AECP_NAME_OFFSET 32 -#define AECP_KEYCHAIN_ID_OFFSET 24 -#define AECP_KEY_ID_OFFSET 24 -#define AECP_KEY_LENGTH_OFFSET 26 -#define AECP_SIGNATURE_INFO_OFFSET 28 -#define AECP_SIGNATURE_ID_OFFSET 28 -#define AECP_SIGNATURE_LENGTH_OFFSET 30 -#define AECP_KEY_PERMISSIONS_OFFSET 32 -#define AECP_KEY_AND_SIG_OFFSET 36 -#define AECP_AUTH_SIG_INFO_OFFSET 24 -#define AECP_AUTH_SIG_ID_OFFSET 24 -#define AECP_AUTH_SIG_LENGTH_OFFSET 26 -#define AECP_AUTH_KEY_PERM_OFFSET 28 -#define AECP_AUTH_SIG_OFFSET 32 -#define AECP_MEDIA_FORMAT_OFFSET 28 -#define AECP_ADDRESS_TYPE_OFFSET 24 -#define AECP_ADDRESS_OFFSET 28 -#define AECP_QUERY_PERIOD_OFFSET 24 -#define AECP_QUERY_LIMIT_OFFSET 26 -#define AECP_QUERY_TYPE_OFFSET 28 -#define AECP_QUERY_ID_OFFSET 30 -#define AECP_QUERY_DESC_T_OFFSET 32 -#define AECP_QUERY_DESC_ID_OFFSET 34 -#define AECP_DEREG_QUERY_ID_OFFSET 24 -#define AECP_COUNT_OFFSET 24 -#define AECP_VALUES_COUNT_OFFSET 28 -#define AECP_VALUES_OFFSET 30 -#define AECP_OPERATION_ID_OFFSET 28 -#define AECP_OPERATION_TYPE_OFFSET 30 -#define AECP_PERCENT_COMPLETE_OFFSET 30 -#define AECP_KEY_COUNT_OFFSET 24 -#define AECP_RELEASE_FLAG_OFFSET 24 -#define AECP_ASSOCIATION_ID_OFFSET 56 -#define AECP_DESCRIPTORS_OFFSET_DQN 28 - - -#define AECP_FLAGS_32_OFFSET 28 - -#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_ID 38 - -#define AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_TYPE 24 -#define AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_ID 26 -#define AECP_OFFSET_CLOCK_SOURCE_CLOCK_SOURCE_ID 28 - -/* counters offsets */ -#define AECP_OFFSET_COUNTERS_VALID_GPTP_GM_CHANGED 0 -#define AECP_OFFSET_COUNTERS_VALID_GPTP_UNLOCKED 4 -#define AECP_OFFSET_COUNTERS_VALID_GPTP_LOCKED 8 -#define AECP_OFFSET_COUNTERS_VALID_MEDIA_UNLOCKED 12 -#define AECP_OFFSET_COUNTERS_VALID_MEDIA_LOCKED 16 -#define AECP_OFFSET_COUNTERS_VALID_MEDIA_SEQ_ERROR 20 -#define AECP_OFFSET_COUNTERS_VALID_STREAM_RESET 24 -#define AECP_OFFSET_COUNTERS_VALID_SRP_REFUSED 28 -#define AECP_OFFSET_COUNTERS_VALID_BACKUP_STREAM_SWITCH 32 -#define AECP_OFFSET_COUNTERS_VALID_MISSED_AVDECC_RESPONSE 36 -#define AECP_OFFSET_COUNTERS_VALID_REFUSED_AVDECC_COMMAND 40 -#define AECP_OFFSET_COUNTERS_VALID_SEQ_NUM_MISMATCH 44 -#define AECP_OFFSET_COUNTERS_VALID_MEDIA_CLOCK_TOGGLES 48 -#define AECP_OFFSET_COUNTERS_VALID_TIMESTAMP_UNCERTAINS 52 -#define AECP_OFFSET_COUNTERS_VALID_TIMESTAMP_VALIDS 56 -#define AECP_OFFSET_COUNTERS_VALID_UNSUPPORTED_FORMATS 60 -#define AECP_OFFSET_COUNTERS_VALID_BAD_PRESENTATION_TIMES 64 -#define AECP_OFFSET_COUNTERS_VALID_SRP_LATENCY_VIOLATIONS 68 -#define AECP_OFFSET_COUNTERS_VALID_PACKETS_TX 72 -#define AECP_OFFSET_COUNTERS_VALID_PACKETS_RX 76 -#define AECP_OFFSET_COUNTERS_VALID_PACKETS_OF_INTEREST_RX 80 -#define AECP_OFFSET_COUNTERS_VALID_TALKER_BW_RESERVED 84 -#define AECP_OFFSET_COUNTERS_VALID_RESERVED1 88 -#define AECP_OFFSET_COUNTERS_VALID_RESERVED2 92 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_1 96 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_2 100 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_3 104 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_4 108 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_5 112 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_6 116 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_7 120 -#define AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_8 124 +/* 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 Command Specific Offsets */ +/* IEEE 1722.1 draft D21 section 7.4.1 - 7.4.71 */ +/* 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 + +/* 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_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 /* aecp_message_type */ /* 1722.1 draft 2011-11-14 table 9.1 */ @@ -370,108 +498,142 @@ #define AECP_KEYCHAIN_USER 0x4 /* AECP Command Codes */ -/* IEEE 1722.1 draft 2011-11-14 Table 7.74 */ -#define AECP_COMMAND_LOCK_ENTITY 0x0000 -#define AECP_COMMAND_READ_DESCRIPTOR 0x0001 -#define AECP_COMMAND_WRITE_DESCRIPTOR 0x0002 -#define AECP_COMMAND_ACQUIRE_ENTITY 0x0003 -#define AECP_COMMAND_CONTROLLER_AVAILABLE 0x0004 -#define AECP_COMMAND_SET_CLOCK_SOURCE 0x0005 -#define AECP_COMMAND_GET_CLOCK_SOURCE 0x0006 -#define AECP_COMMAND_SET_STREAM_FORMAT 0x0007 -#define AECP_COMMAND_GET_STREAM_FORMAT 0x0008 -#define AECP_COMMAND_SET_CONFIGURATION 0x0009 -#define AECP_COMMAND_GET_CONFIGURATION 0x000a -#define AECP_COMMAND_SET_CONTROL_VALUE 0x000b -#define AECP_COMMAND_GET_CONTROL_VALUE 0x000c -#define AECP_COMMAND_SET_SIGNAL_SELECTOR 0x000d -#define AECP_COMMAND_GET_SIGNAL_SELECTOR 0x000e -#define AECP_COMMAND_SET_MIXER 0x000f -#define AECP_COMMAND_GET_MIXER 0x0010 -#define AECP_COMMAND_SET_MATRIX 0x0011 -#define AECP_COMMAND_GET_MATRIX 0x0012 -#define AECP_COMMAND_START_STREAMING 0x0013 -#define AECP_COMMAND_STOP_STREAMING 0x0014 -#define AECP_COMMAND_SET_STREAM_INFO 0x0015 -#define AECP_COMMAND_GET_STREAM_INFO 0x0016 -#define AECP_COMMAND_SET_NAME 0x0017 -#define AECP_COMMAND_GET_NAME 0x0018 -#define AECP_COMMAND_SET_ASSOCIATION_ID 0x0019 -#define AECP_COMMAND_GET_ASSOCIATION_ID 0x001a -#define AECP_COMMAND_AUTH_ADD_KEY 0x001b -#define AECP_COMMAND_AUTH_GET_KEY 0x001c -#define AECP_COMMAND_AUTHENTICATE 0x001d -#define AECP_COMMAND_GET_COUNTERS 0x001e -#define AECP_COMMAND_REBOOT 0x001f -#define AECP_COMMAND_SET_MEDIA_FORMAT 0x0020 -#define AECP_COMMAND_GET_MEDIA_FORMAT 0x0021 -#define AECP_COMMAND_REGISTER_STATE_NOTIFICATION 0x0022 -#define AECP_COMMAND_DEREGISTER_STATE_NOTIFICATION 0x0023 -#define AECP_COMMAND_REGISTER_QUERY_NOTIFICATION 0x0024 -#define AECP_COMMAND_DEREGISTER_QUERY_NOTIFICATION 0x0025 +/* 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_STATE_CHANGE_NOTIFICATION 0x0027 -#define AECP_COMMAND_INCREMENT_CONTROL_VALUE 0x0028 -#define AECP_COMMAND_DECREMENT_CONTROL_VALUE 0x0029 -#define AECP_COMMAND_START_OPERATION 0x002a -#define AECP_COMMAND_ABORT_OPERATION 0x002b -#define AECP_COMMAND_OPERATION_STATUS 0x002c -#define AECP_COMMAND_AUTH_GET_KEY_COUNT 0x002d -#define AECP_COMMAND_GET_AS_PATH 0x002e -#define AECP_COMMAND_DEAUTHENTICATE 0x002f -#define AECP_COMMAND_AUTH_REVOKE_KEY 0x0030 +#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 /* 0x002e - 0x7ffe RESERVED for future use */ #define AECP_COMMAND_EXPANSION 0x7fff /* reserved */ /* AEM common format packet STATUS field values */ -/* IEEE 1722.1 draft 2011-11-14 Table 7.75 */ +/* 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_AUTHORIZED 5 -#define AEM_STATUS_INSUFFICIENT_PRIVILEGES 6 +#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 TYPES - TABLE 7.1 * * * */ -#define AEM_DESCRIPTOR_ENTITY 0x0000 -#define AEM_DESCRIPTOR_CONFIGURATION 0x0001 -#define AEM_DESCRIPTOR_AUDIO 0x0002 -#define AEM_DESCRIPTOR_VIDEO 0x0003 -#define AEM_DESCRIPTOR_SENSOR 0x0004 -#define AEM_DESCRIPTOR_STREAM_INPUT 0x0005 -#define AEM_DESCRIPTOR_STREAM_OUTPUT 0x0006 -#define AEM_DESCRIPTOR_EXTERNAL_JACK_INPUT 0x0007 -#define AEM_DESCRIPTOR_EXTERNAL_JACK_OUTPUT 0x0008 -#define AEM_DESCRIPTOR_AUDIO_PORT_INPUT 0x0009 -#define AEM_DESCRIPTOR_AUDIO_PORT_OUTPUT 0x000a -#define AEM_DESCRIPTOR_VIDEO_PORT_INPUT 0x000b -#define AEM_DESCRIPTOR_VIDEO_PORT_OUTPUT 0x000c -#define AEM_DESCRIPTOR_EXTERNAL_PORT_INPUT 0x000d -#define AEM_DESCRIPTOR_EXTERNAL_PORT_OUTPUT 0x000e -#define AEM_DESCRIPTOR_SENSOR_PORT_INPUT 0x000f -#define AEM_DESCRIPTOR_SENSOR_PORT_OUTPUT 0x0010 -#define AEM_DESCRIPTOR_INTERNAL_PORT_INPUT 0x0011 -#define AEM_DESCRIPTOR_INTERNAL_PORT_OUTPUT 0x0012 -#define AEM_DESCRIPTOR_AVB_INTERFACE 0x0013 -#define AEM_DESCRIPTOR_CLOCK_SOURCE 0x0014 -#define AEM_DESCRIPTOR_AUDIO_MAP 0x0015 -#define AEM_DESCRIPTOR_AUDIO_CLUSTER 0x0016 -#define AEM_DESCRIPTOR_CONTROL 0x0017 -#define AEM_DESCRIPTOR_SIGNAL_SELECTOR 0x0018 -#define AEM_DESCRIPTOR_MIXER 0x0019 -#define AEM_DESCRIPTOR_MATRIX 0x001a -#define AEM_DESCRIPTOR_LOCALE 0x001b -#define AEM_DESCRIPTOR_STRINGS 0x001c -#define AEM_DESCRIPTOR_MATRIX_SIGNAL 0x001d -#define AEM_DESCRIPTOR_MEMORY_OBJECT 0x001e -#define AEM_DESCRIPTOR_INVALID 0xffff - -/* AEM JACK TYPES (Table 7.14) */ +/* 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 @@ -507,62 +669,75 @@ #define AEM_JACKTYPE_SMPTE_LTC 0x0020 #define AEM_JACKTYPE_DIGITAL_MICROPHONE 0x0021 -#define AEM_CONTROL_ENABLE 0x90e0f00000000000 -#define AEM_CONTROL_DELAY 0x90e0f00000000001 -#define AEM_CONTROL_POW_LINE_FREQ 0x90e0f00000000002 -#define AEM_CONTROL_ROLLPITCHYAW_ABS 0x90e0f00000000003 -#define AEM_CONTROL_ROLLPITCHYAW_REL 0x90e0f00000000004 -#define AEM_CONTROL_SURGESWAYHEAVE_ABS 0x90e0f00000000005 -#define AEM_CONTROL_SURGESWAYHEAVE_REL 0x90e0f00000000006 -#define AEM_CONTROL_IDENTIFY 0x90e0f00000000007 -#define AEM_CONTROL_POWER_STATUS 0x90e0f00000000008 -#define AEM_CONTROL_FAN_STATUS 0x90e0f00000000009 -#define AEN_CONTROL_TEMPERATURE 0x90e0f0000000000a -#define AEM_CONTROL_TEMPERATURE_SENSOR 0x90e0f0000000000b -#define AEM_CONTROL_ALTITUDE 0x90e0f0000000000c -#define AEM_CONTROL_HUMIDITY 0x90e0f0000000000d -/* 0x90e0f0000000000e - 0x90e0f0000000ffff reserved */ -#define AEM_CONTROL_MUTE 0x90e0f00000010000 -#define AEM_CONTROL_VOLUME 0x90e0f00000010001 -#define AEM_CONTROL_INVERT 0x90e0f00000010002 -#define AEM_CONTROL_PANPOT 0x90e0f00000010003 -#define AEM_CONTROL_ISOLATE 0x90e0f00000010004 -#define AEM_CONTROL_POSITION 0x90e0f00000010005 -#define AEM_CONTROL_PHANTOM 0x90e0f00000010006 -#define AEM_CONTROL_AUDIO_SCALE 0x90e0f00000010007 -#define AEM_CONTROL_AUDIO_METERS 0x90e0f00000010008 -#define AEM_CONTROL_AUDIO_SPECTRUM 0x90e0f00000010009 -#define AEM_CONTROL_FILTER_RESPONSE 0x90e0f0000001000a -/* 0x90e0f0000001000b - 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_ABS 0x90e0f00000020003 -#define AEM_CONTROL_EXP_TIME_REL 0x90e0f00000020004 -#define AEM_CONTROL_FOCUS_ABS 0x90e0f00000020005 -#define AEM_CONTROL_FOCUS_REL 0x90e0f00000020006 -#define AEM_CONTROL_FOCUS_AUTO 0x90e0f00000020007 -#define AEM_CONTROL_IRIS_ABS 0x90e0f00000020008 -#define AEM_CONTROL_IRIS_REL 0x90e0f00000020009 -#define AEM_CONTROL_ZOOM_ABS 0x90e0f0000002000a -#define AEM_CONTROL_ZOOM_REL 0x90e0f0000002000b -#define AEM_CONTROL_PRIVACY 0x90e0f0000002000c -#define AEM_CONTROL_BACKLIGHT 0x90e0f0000002000d -#define AEM_CONTROL_BRIGHTNESS 0x90e0f0000002000e -#define AEM_CONTROL_CONTRAST 0x90e0f0000002000f -#define AEM_CONTROL_GAIN 0x90e0f00000020010 -#define AEM_CONTROL_HUE 0x90e0f00000020011 -#define AEM_CONTROL_SATURATION 0x90e0f00000020012 -#define AEM_CONTROL_SHARPNESS 0x90e0f00000020013 -#define AEM_CONTROL_GAMMA 0x90e0f00000020014 -#define AEM_CONTROL_WHITE_BAL_TEMP 0x90e0f00000020015 -#define AEM_CONTROL_WHITE_BAL_TENP_AUTO 0x90e0f00000020016 -#define AEM_CONTROL_WHITE_BAL_COMP 0x90e0f00000020017 -#define AEM_CONTROL_WHITE_BAL_COMP_AUTO 0x90e0f00000020018 -#define AEM_CONTROL_DIGITAL_ZOOM 0x90e0f00000020019 -/* 0x90e0f0000002001a - 0x90e0f0ffffffffff reserved */ - -/* AEM Control Value Types (7.31) */ +/* 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 @@ -583,315 +758,495 @@ #define AEM_CONTROL_SELECTOR_UINT64 0x0011 #define AEM_CONTROL_SELECTOR_FLOAT 0x0012 #define AEM_CONTROL_SELECTOR_DOUBLE 0x0013 -#define AEM_CONTROL_UTF8 0x0014 -#define AEM_CONTROL_BODE_PLOT 0x0015 -#define AEM_CONTROL_ARRAY_INT8 0x0016 -#define AEM_CONTROL_ARRAY_UINT8 0x0017 -#define AEM_CONTROL_ARRAY_INT16 0x0018 -#define AEM_CONTROL_ARRAY_UINT16 0x0019 -#define AEM_CONTROL_ARRAY_INT32 0x001a -#define AEM_CONTROL_ARRAY_UINT32 0x001b -#define AEM_CONTROL_ARRAY_INT64 0x001c -#define AEM_CONTROL_ARRAY_UINT64 0x001d -#define AEM_CONTROL_ARRAY_FLOAT 0x001e -#define AEM_CONTROL_ARRAY_DOUBLE 0x001f -/* 0x0020-0xfffd RESERVED Reserved for future use. */ -#define AEM_CONTROL_VENDOR 0xfffe /* TODO - update value in D18 */ -/* 0xffff EXPANSION Reserved for future use. */ - -/* AEM Clock Source Types (Table 7.25) */ -#define AEM_CLOCK_LOCAL_OSCILLATOR 0x0000 -#define AEM_CLOCK_INPUT_STREAM 0x0001 -#define AEM_CLOCK_WORLD_CLOCK 0x0002 -#define AEM_CLOCK_ANALOG_INPUT 0x0003 -#define AEM_CLOCK_DIGITAL_INPUT 0x0004 -#define AEM_CLOCK_8021_AS 0x0005 -#define AEM_CLOCK_THUNDERBOLT 0x0006 +#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 */ -#define SF61883_IIDC_SUBTYPE 0x00 +/* 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_VENDOR_ID 12 +#define ENTITY_OFFSET_ENTITY_MODEL_ID 16 +#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 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 -/* AEM Offset Values */ - -#define AEM_OFFSET_DESCRIPTOR_TYPE 0 -#define AEM_OFFSET_DESCRIPTOR_ID 2 -#define AEM_OFFSET_ENTITY_GUID 4 -#define AEM_OFFSET_VENDOR_ID 12 -#define AEM_OFFSET_ENTITY_MODEL_ID 16 -#define AEM_OFFSET_ENTITY_CAPABILITIES 20 -#define AEM_OFFSET_TALKER_STREAM_SOURCES 24 -#define AEM_OFFSET_TALKER_CAPABILITIES 26 -#define AEM_OFFSET_LISTENER_STREAM_SINKS 28 -#define AEM_OFFSET_LISTENER_CAPABILITIES 30 -#define AEM_OFFSET_CONTROLLER_CAPABILITIES 32 -#define AEM_OFFSET_AVAILABLE_INDEX 36 -#define AEM_OFFSET_AS_GRANDMASTER_ID 40 -#define AEM_OFFSET_ASSOCIATION_ID 48 -#define AEM_OFFSET_ENTITY_TYPE 56 -#define AEM_OFFSET_ENTITY_NAME 60 -#define AEM_OFFSET_VENDOR_NAME_STRING 124 -#define AEM_OFFSET_MODEL_NAME_STRING 126 -#define AEM_OFFSET_FIRMWARE_VERSION 128 -#define AEM_OFFSET_GROUP_NAME 192 -#define AEM_OFFSET_SERIAL_NUMBER 256 -#define AEM_OFFSET_CONFIGURATIONS_COUNT 320 -#define AEM_OFFSET_CURRENT_CONFIGURATION 322 - -#define AEM_OFFSET_CONFIGURATION_NAME 4 -#define AEM_OFFSET_CONFIGURATION_NAME_STRING 68 -#define AEM_OFFSET_DESCRIPTOR_COUNTS_COUNT 70 -#define AEM_OFFSET_DESCRIPTOR_COUNTS_OFFSET 72 -#define AEM_OFFSET_DESCRIPTOR_COUNTS 74 - -#define AEM_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS 4 -#define AEM_OFFSET_BASE_STREAM_INPUT_PORT 6 -#define AEM_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS 8 -#define AEM_OFFSET_BASE_STREAM_OUTPUT_PORT 10 -#define AEM_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS 12 -#define AEM_OFFSET_BASE_EXTERNAL_INPUT_PORT 14 -#define AEM_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS 16 -#define AEM_OFFSET_BASE_EXTERNAL_OUTPUT_PORT 18 -#define AEM_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS 20 -#define AEM_OFFSET_BASE_INTERNAL_INPUT_PORT 22 -#define AEM_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS 24 -#define AEM_OFFSET_BASE_INTERNAL_OUTPUT_PORT 26 -#define AEM_OFFSET_CLOCK_SOURCE_ID 28 -#define AEM_OFFSET_NUMBER_OF_CONTROLS 30 -#define AEM_OFFSET_BASE_CONTROL 32 -#define AEM_OFFSET_UNIT_NAME 34 -#define AEM_OFFSET_UNIT_NAME_STRING 98 -#define AEM_OFFSET_CURRENT_SAMPLE_RATE 100 -#define AEM_OFFSET_SAMPLE_RATES_OFFSET 104 -#define AEM_OFFSET_SAMPLE_RATES_COUNT 106 -#define AEM_OFFSET_SAMPLE_RATES 108 - -/* starting with the draft 18 updates the naming scheme for offsets will be changing * - * to DESCRIPTOR_NAME_OFFSET_FIELD to make maintenance easier. Eventually all of the * - * offsets will be changed to this form. For now, all changes will be added in this * - * format to avoid breaking anything that used the same offset in multiple places */ -#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_CURRENT_SAMPLE_RATE 112 -#define AUDIO_UNIT_OFFSET_SAMPLE_RATES_OFFSET 116 -#define AUDIO_UNIT_OFFSET_SAMPLE_RATES_COUNT 118 -#define AUDIO_UNIT_OFFSET_SAMPLE_RATES 120 - -#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 AEM_OFFSET_STREAM_NAME 4 -#define AEM_OFFSET_STREAM_NAME_STRING 68 -#define AEM_OFFSET_STREAM_FLAGS 70 -#define AEM_OFFSET_STREAM_CHANNELS 72 -#define AEM_OFFSET_CLOCK_SOURCE_ID_STREAM 74 - -#define AEM_OFFSET_MAPPINGS_OFFSET 4 -#define AEM_OFFSET_NUMBER_OF_MAPPINGS 6 -#define AEM_OFFSET_MAPPINGS 8 +#define AEM_OFFSET_SF_VERSION 0 -#define AEM_OFFSET_SF_SUBTYPE 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 -#define AECP_OFFSET_SETMF_MEDIA_FMT 28 -#define AECP_OFFSET_AUTH_ADD_KEY_KEYTYPE 24 -#define AECP_OFFSET_AUTH_ADD_KEY_CONTINUED 26 -#define AECP_OFFSET_AUTH_ADD_KEY_KEY_PART 26 -#define AECP_OFFSET_AUTH_ADD_KEY_LENGTH 24 -#define AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS 28 -#define AECP_OFFSET_AUTH_ADD_KEY_KEY_GUID 32 -#define AECP_OFFSET_AUTH_ADD_KEY_KEY 40 - -#define AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH 26 -#define AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS 28 -#define AECP_OFFSET_AUTHENTICATE_KEY_GUID 32 -#define AECP_OFFSET_AUTHENTICATE_AUTH_TOKEN 40 - -#define AECP_OFFSET_GET_COUNTERS_VALID 28 -#define AECP_OFFSET_GET_COUNTERS_BLOCK 32 - -#define AEM_OFFSET_CURRENT_FORMAT 76 -#define AEM_OFFSET_FORMATS_OFFSET 84 -#define AEM_OFFSET_NUMBER_OF_FORMATS 86 -#define AEM_OFFSET_BACKUP_TALKER_GUID_0 88 -#define AEM_OFFSET_BACKUP_TALKER_UNIQUE_0 96 -#define AEM_OFFSET_BACKUP_TALKER_GUID_1 98 -#define AEM_OFFSET_BACKUP_TALKER_UNIQUE_1 106 -#define AEM_OFFSET_BACKUP_TALKER_GUID_2 108 -#define AEM_OFFSET_BACKUP_TALKER_UNIQUE_2 116 -#define AEM_OFFSET_BACKEDUP_TALKER_GUID 118 -#define AEM_OFFSET_BACKEDUP_TALKER_UNIQUE 126 -#define AEM_OFFSET_AVB_INTERFACE_ID 128 -#define AEM_OFFSET_FORMATS 130 - -#define AEM_OFFSET_JACK_NAME 4 -#define AEM_OFFSET_JACK_NAME_STRING 68 -#define AEM_OFFSET_JACK_FLAGS 70 -#define AEM_OFFSET_JACK_TYPE 72 - -#define AEM_OFFSET_PORT_FLAGS 4 -#define AEM_OFFSET_AUDIO_CHANNELS 6 -#define AEM_OFFSET_NUMBER_OF_CLUSTERS 8 -#define AEM_OFFSET_BASE_CLUSTER 10 -#define AEM_OFFSET_AUDIO_MAP_ID 12 - -#define AUDIO_PORT_OFFSET_BASE_AUDIO_MAP 12 -#define AUDIO_PORT_OFFSET_NUMBER_AUDIO_MAPS 14 - - -#define AEM_OFFSET_CURRENT_FORMAT_VID 6 -#define AEM_OFFSET_SOURCE_TYPE 22 -#define AEM_OFFSET_SOURCE_ID 24 -#define AEM_OFFSET_STREAM_ID 26 -#define AEM_OFFSET_FORMATS_OFFSET_VID 28 -#define AEM_OFFSET_FORMATS_COUNT_VID 30 - -#define VIDEO_PORT_OFFSET_BLOCK_LATENCY 32 -#define VIDEO_PORT_OFFSET_FORMATS 36 - -#define AEM_OFFSET_MEDIA_FORMATS_VID 32 - -#define AEM_OFFSET_STREAM_FORMATS 32 - -#define AEM_OFFSET_SOURCE_TYPE_EXT 6 -#define AEM_OFFSET_SOURCE_ID_EXT 8 -#define EXTERNAL_PORT_OFFSET_JACK_ID 10 -#define EXTERNAL_PORT_OFFSET_BLOCK_LATENCY 12 - -#define AEM_OFFSET_STREAM_ID_SEN 10 -#define SENSOR_PORT_OFFSET_BLOCK_LATENCY 12 - -#define INTERNAL_PORT_OFFSET_BLOCK_LATENCY 12 - -#define AEM_OFFSET_INTERNAL_ID 10 - -#define AEM_OFFSET_MAC_ADDRESS 4 -#define AEM_OFFSET_AS_GRANDMASTER_ID_AVB 10 -#define AEM_OFFSET_MSRP_MAPPINGS_OFFSET 18 -#define AEM_OFFSET_MSRP_MAPPINGS_COUNT 20 - -#define AVB_INTERFACE_OFFSET_INTERFACE_NAME 22 -#define AVB_INTERFACE_OFFSET_INTERFACE_NAME_STRING 86 -#define AVB_INTERFACE_MSRP_MAPPINGS 88 - -#define AEM_OFFSET_CLOCK_SOURCE_NAME 4 -#define AEM_OFFSET_CLOCK_SOURCE_NAME_STRING 68 -#define AEM_OFFSET_CLOCK_SOURCE_FLAGS 70 -#define AEM_OFFSET_CLOCK_SOURCE_TYPE 72 -#define AEM_OFFSET_CLOCK_SOURCE_ID_CLK 74 -#define AEM_OFFSET_CLOCK_SOURCE_LOCATION_TYPE 82 -#define AEM_OFFSET_CLOCK_SOURCE_LOCATION_ID 84 - -#define AUDIO_CLUSTER_OFFSET_CHANNEL_COUNT 4 -#define AUDIO_CLUSTER_OFFSET_PATH_LATENCY 6 -#define AUDIO_CLUSTER_OFFSET_AM824_LABEL 10 -#define AUDIO_CLUSTER_OFFSET_CLUSTER_NAME 11 -#define AUDIO_CLUSTER_OFFSET_CLUSTER_NAME_STRING 75 -#define AUDIO_CLUSTER_OFFSET_SIGNAL_TYPE 77 -#define AUDIO_CLUSTER_OFFSET_SIGNAL_ID 79 -#define AUDIO_CLUSTER_OFFSET_BLOCK_LATENCY 81 - -#define AEM_OFFSET_AM824_LABEL 10 -#define AEM_OFFSET_CLUSTER_NAME 11 -#define AEM_OFFSET_CLUSTER_NAME_STRING 75 -#define AEM_OFFSET_SOURCE_TYPE_CLU 77 -#define AEM_OFFSET_SOURCE_ID_CLU 79 - -#define AEM_OFFSET_CONTROL_TYPE 4 -#define AEM_OFFSET_CONTROL_LOCATION_TYPE 12 -#define AEM_OFFSET_CONTROL_LOCATION_ID 14 -#define AEM_OFFSET_CONTROL_VALUE_TYPE 16 -#define AEM_OFFSET_CONTROL_DOMAIN 18 -#define AEM_OFFSET_CONTROL_NAME 20 -#define AEM_OFFSET_CONTROL_NAME_STRING 84 -#define AEM_OFFSET_VALUES_OFFSET_CTRL 86 -#define AEM_OFFSET_NUMBER_OF_VALUES_CTRL 88 -#define AEM_OFFSET_SOURCE_TYPE_CTRL 90 -#define AEM_OFFSET_SOURCE_ID_CTRL 92 - -#define CONTROL_OFFSET_BLOCK_LATENCY 94 -#define CONTROL_OFFSET_CONTROL_LATENCY 98 -#define CONTROL_OFFSET_VALUE_DETAILS 102 - -#define AEM_OFFSET_CONTROL_LOCATION_TYPE_SIGS 4 -#define AEM_OFFSET_CONTROL_LOCATION_ID_SIGS 6 -#define AEM_OFFSET_CONTROL_DOMAIN_SIGS 8 -#define AEM_OFFSET_CONTROL_NAME_SIGS 10 -#define AEM_OFFSET_CONTROL_NAME_STRING_SIGS 74 -#define AEM_OFFSET_SOURCES_OFFSET_SIGS 76 -#define AEM_OFFSET_NUMBER_OF_SOURCES_SIGS 78 -#define AEM_OFFSET_CURRENT_SOURCE_TYPE_SIGS 80 -#define AEM_OFFSET_CURRENT_SOURCE_ID_SIGS 82 -#define AEM_OFFSET_DEFAULT_SOURCE_TYPE_SIGS 84 -#define AEM_OFFSET_DEFAULT_SOURCE_ID_SIGS 86 - -#define SIGNAL_SELECTOR_OFFSET_BLOCK_LATENCY 88 -#define SIGNAL_SELECTOR_OFFSET_CONTROL_LATENCY 92 -#define SIGNAL_SELECTOR_OFFSET_SOURCES 96 - -#define AEM_OFFSET_CONTROL_LOCATION_TYPE_MXR 4 -#define AEM_OFFSET_CONTROL_LOCATION_ID_MXR 6 -#define AEM_OFFSET_CONTROL_VALUE_TYPE_MXR 8 -#define AEM_OFFSET_CONTROL_DOMAIN_MXR 10 -#define AEM_OFFSET_CONTROL_NAME_MXR 12 -#define AEM_OFFSET_CONTROL_NAME_STRING_MXR 76 -#define AEM_OFFSET_SOURCES_OFFSET_MXR 78 -#define AEM_OFFSET_NUMBER_OF_SOURCES_MXR 80 -#define AEM_OFFSET_VALUE_OFFSET_MXR 82 - -#define MIXER_OFFSET_BLOCK_LATENCY 84 -#define MIXER_OFFSET_CONTROL_LATENCY 88 -#define MIXER_OFFSET_SOURCES 92 - -#define AEM_OFFSET_CONTROL_TYPE_MTRX 4 -#define AEM_OFFSET_CONTROL_LOCATION_TYPE_MTRX 12 -#define AEM_OFFSET_CONTROL_LOCATION_ID_MTRX 14 -#define AEM_OFFSET_CONTROL_VALUE_TYPE_MTRX 16 -#define AEM_OFFSET_CONTROL_DOMAIN_MTRX 18 -#define AEM_OFFSET_CONTROL_NAME_MTRX 20 -#define AEM_OFFSET_CONTROL_NAME_STRING_MTRX 84 -#define AEM_OFFSET_WIDTH_MTRX 86 -#define AEM_OFFSET_HEIGHT_MTRX 88 -#define AEM_OFFSET_VALUES_OFFSET_MTRX 90 -#define AEM_OFFSET_NUMBER_OF_VALUES_MTRX 92 -#define AEM_OFFSET_VALUES_MTRX 94 - -#define MATRIX_OFFSET_BLOCK_LATENCY 94 -#define MATRIX_OFFSET_CONTROL_LATENCY 98 -#define MATRIX_OFFSET_NUMBER_SOURCES 102 -#define MATRIX_OFFSET_BASE_SOURCE 104 -#define MATRIX_OFFSET_NUMBER_DESTINATIONS 106 -#define MATRIX_OFFSET_BASE_DESTINATION 108 -#define MATRIX_OFFSET_VALUE_DETAILS 110 - -#define AEM_OFFSET_LOCALE_IDENTIFIER 4 -#define AEM_OFFSET_NUMBER_OF_STRINGS 68 -#define AEM_OFFSET_BASE_STRINGS 70 - -#define AEM_OFFSET_STRING0 4 - -#define MATRIX_SIGNAL_OFFSET_SIGNALS_COUNT 4 -#define MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET 6 -#define MATRIX_SIGNAL_OFFSET_SIGNALS 8 - -#define MEMORY_OBJECT_OFFSET_MEMORY_OBJECT_TYPE 4 -#define MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_TYPE 6 -#define MEMORY_OBJECT_OFFSET_TARGET_DESCRIPTOR_ID 8 -#define MEMORY_OBJECT_OFFSET_OBJECT_NAME 10 -#define MEMORY_OBJECT_OFFSET_OBJECT_NAME_STRING 74 -#define MEMORY_OBJECT_OFFSET_START_ADDRESS 76 -#define MEMORY_OBJECT_OFFSET_LENGTH 84 +/* 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 @@ -909,26 +1264,7 @@ #define AEM_OFFSET_SVMF_HEIGHT 14 #define AEM_OFFSET_CS_EUI64 8 - -#define AEM_OFFSET_SF_VERSION 0 -#define AEM_OFFSET_SF 1 -#define AEM_OFFSET_IIDC_FORMAT 5 -#define AEM_OFFSET_IIDC_MODE 6 -#define AEM_OFFSET_IIDC_RATE 7 -#define AEM_OFFSET_FDF_EVT 2 -#define AEM_OFFSET_FDF_SFC 2 -#define AEM_OFFSET_DBS 3 -#define AEM_OFFSET_FMT 1 -#define AEM_OFFSET_B 4 -#define AEM_OFFSET_NB 4 -#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 - -#define AEM_OFFSET_VIDEO_MODE 5 -#define AEM_OFFSET_COMPRESS_MODE 6 -#define AEM_OFFSET_COLOR_SPACE 7 +#endif /* Bitmasks */ #define AECP_STATUS_CODE_MASK 0xf8 @@ -972,44 +1308,49 @@ #define AECP_CONTROL_USER_L3_FLAG_MASK 0x00000002 #define AECP_CONTROL_USER_L4_FLAG_MASK 0x00000001 -/* 7.105 counters_valid flag masks */ -#define AECP_COUNTERS_VALID_GPTP_UNLOCKED 0x40000000 -#define AECP_COUNTERS_VALID_GPTP_LOCKED 0x20000000 -#define AECP_COUNTERS_VALID_MEDIA_UNLOCKED 0x10000000 -#define AECP_COUNTERS_VALID_MEDIA_LOCKED 0x08000000 -#define AECP_COUNTERS_VALID_STREAM_RESET 0x02000000 -#define AECP_COUNTERS_VALID_SRP_REFUSED 0x01000000 -#define AECP_COUNTERS_VALID_BACKUP_STREAM_SWITCH 0x00800000 -#define AECP_COUNTERS_VALID_MISSED_AVDECC_RESPONSE 0x00400000 -#define AECP_COUNTERS_VALID_REFUSED_AVDECC_COMMAND 0x00200000 -#define AECP_COUNTERS_VALID_SEQ_NUM_MISMATCH 0x00100000 -#define AECP_COUNTERS_VALID_MEDIA_CLOCK_TOGGLES 0x00080000 -#define AECP_COUNTERS_VALID_TIMESTAMP_UNCERTAINS 0x00040000 -#define AECP_COUNTERS_VALID_TIMESTAMP_VALIDS 0x00020000 -#define AECP_COUNTERS_VALID_UNSUPPORTED_FORMATS 0x00010000 -#define AECP_COUNTERS_VALID_BAD_PRESENTATION_TIMES 0x00008000 -#define AECP_COUNTERS_VALID_SRP_LATENCY_VIOLATIONS 0x00004000 -#define AECP_COUNTERS_VALID_PACKETS_TX 0x00002000 -#define AECP_COUNTERS_VALID_PACKETS_RX 0x00001000 -#define AECP_COUNTERS_VALID_PACKETS_OF_INTEREST_RX 0x00000800 -#define AECP_COUNTERS_VALID_TALKER_BW_RESERVED 0x00000400 -#define AECP_COUNTERS_VALID_RESERVED1 0x00000200 -#define AECP_COUNTERS_VALID_RESERVED2 0x00000100 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_1 0x00000080 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_2 0x00000040 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_3 0x00000020 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_4 0x00000010 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_5 0x00000008 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_6 0x00000004 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_7 0x00000002 -#define AECP_COUNTERS_VALID_ENTITY_SPECIFIC_8 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_CLOCK_SYNC_SOURCE_FLAG_MASK 0x00000001 + #define AEM_MASK_B 0x80 #define AEM_MASK_BPP 0x3F #define AEM_MASK_CHANNELS 0x3C @@ -1027,11 +1368,11 @@ #define AEM_MASK_LABEL_SMPTE_CNT 0x0F #define AEM_MASK_NB 0x40 #define AEM_MASK_OUI24 0xFFFFFF00 -#define AEM_MASK_SF 0x40 -#define AEM_MASK_SF_SUBTYPE 0x3F80 -#define AEM_MASK_SF_VERSION 0xC0 +#define AEM_MASK_SF 0x80 +#define AEM_MASK_SF_SUBTYPE 0x7F +#define AEM_MASK_SF_VERSION 0x80 #define AEM_PULL_FIELD_MASK 0xe0 -#define AEM_SYNC_SAMPLE_RATE_CONV_FLAG_MASK 0x00000001 + #define MFD_TYPE_VIDEO 0x00 #define MFD_TYPE_TRANSPORT_STRM 0x01 @@ -1066,7 +1407,7 @@ #define KEY_TYPE_RSA1024_PRIVATE 5 #define KEY_TYPE_X509 6 -static const value_string aecp_keytype_type_vals [] = { +static const value_string aecp_key_type_type_vals [] = { {KEY_TYPE_NONE, "NO_KEY"}, {KEY_TYPE_SHA256, "SHA256"}, {KEY_TYPE_AES128, "AES128"}, @@ -1088,8 +1429,10 @@ static const value_string aem_memory_object_type_vals [] = { }; static const value_string aem_stream_format_subtype_vals [] = { - {SF61883_IIDC_SUBTYPE, "61883_IIDC_SUBTYPE"}, + {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} }; @@ -1117,13 +1460,10 @@ static const value_string aem_mfd_type_vals [] = { }; static const value_string aem_clock_source_type_vals [] = { - {AEM_CLOCK_LOCAL_OSCILLATOR , "LOCAL OSCILLATOR"}, + {AEM_CLOCK_INTERNAL , "INTERNAL"}, + {AEM_CLOCK_EXTERNAL , "EXTERNAL"}, {AEM_CLOCK_INPUT_STREAM , "INPUT STREAM"}, - {AEM_CLOCK_WORLD_CLOCK , "WORLD CLOCK"}, - {AEM_CLOCK_ANALOG_INPUT , "ANALOG INPUT"}, - {AEM_CLOCK_DIGITAL_INPUT , "DIGITAL INPUT"}, - {AEM_CLOCK_8021_AS , "8021_AS"}, - {AEM_CLOCK_THUNDERBOLT , "THUNDERBOLT"}, + {AEM_CLOCK_MEDIA_CLOCK_STREAM, "MEDIA CLOCK STREAM"}, {0, NULL} }; @@ -1295,27 +1635,27 @@ static const value_string aecp_direction_type_vals [] = { static const value_string aem_descriptor_type_vals[] = { {AEM_DESCRIPTOR_ENTITY , "ENTITY"}, {AEM_DESCRIPTOR_CONFIGURATION , "CONFIGURATION"}, - {AEM_DESCRIPTOR_AUDIO , "AUDIO_UNIT"}, - {AEM_DESCRIPTOR_VIDEO , "VIDEO_UNIT"}, - {AEM_DESCRIPTOR_SENSOR , "SENSOR_UNIT"}, + {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_EXTERNAL_JACK_INPUT , "JACK_INPUT"}, - {AEM_DESCRIPTOR_EXTERNAL_JACK_OUTPUT, "JACK_OUTPUT"}, - {AEM_DESCRIPTOR_AUDIO_PORT_INPUT , "AUDIO_PORT_INPUT"}, - {AEM_DESCRIPTOR_AUDIO_PORT_OUTPUT , "AUDIO_PORT_OUTPUT"}, - {AEM_DESCRIPTOR_VIDEO_PORT_INPUT , "VIDEO_PORT_INPUT"}, - {AEM_DESCRIPTOR_VIDEO_PORT_OUTPUT , "VIDEO_PORT_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_SENSOR_PORT_INPUT , "SENSOR_PORT_INPUT"}, - {AEM_DESCRIPTOR_SENSOR_PORT_OUTPUT , "SENSOR_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_MAP , "AUDIO_MAP"}, {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"}, @@ -1324,6 +1664,13 @@ static const value_string aem_descriptor_type_vals[] = { {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} }; @@ -1333,11 +1680,14 @@ static const value_string aem_status_type_vals[] = { {AEM_STATUS_NO_SUCH_DESCRIPTOR , "NO_SUCH_DESCRIPTOR"}, {AEM_STATUS_ENTITY_LOCKED , "ENTITY_LOCKED"}, {AEM_STATUS_ENTITY_ACQUIRED , "ENTITY_ACQUIRED"}, - {AEM_STATUS_NOT_AUTHORIZED , "NOT_AUTHORIZED"}, - {AEM_STATUS_INSUFFICIENT_PRIVILEGES, "INSUFFICIENT_PRIVILEGES"}, + {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} }; @@ -1356,19 +1706,34 @@ static const value_string aecp_message_type_vals[] = { }; static const value_string aecp_command_type_vals[] = { - {AECP_COMMAND_LOCK_ENTITY , "LOCK_ENTIY"}, + {AECP_COMMAND_ACQUIRE_ENTITY , "ACQUIRE_ENTIY"}, + {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_ACQUIRE_ENTITY , "ACQUIRE_ENTITY"}, - {AECP_COMMAND_CONTROLLER_AVAILABLE , "CONTROLLER_AVAILABLE"}, - {AECP_COMMAND_SET_CLOCK_SOURCE , "SET_CLOCK_SOURCE"}, - {AECP_COMMAND_GET_CLOCK_SOURCE , "GET_CLOCK_SOURCE"}, - {AECP_COMMAND_SET_STREAM_FORMAT , "SET_STREAM_FORMAT"}, - {AECP_COMMAND_GET_STREAM_FORMAT , "GET_STREAM_FORMAT"}, {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"}, @@ -1377,35 +1742,41 @@ static const value_string aecp_command_type_vals[] = { {AECP_COMMAND_GET_MATRIX , "GET_MATRIX"}, {AECP_COMMAND_START_STREAMING , "START_STREAMING"}, {AECP_COMMAND_STOP_STREAMING , "STOP_STREAMING"}, - {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_AUTH_ADD_KEY , "AUTH_ADD_KEY"}, - {AECP_COMMAND_AUTH_GET_KEY , "AUTH_GET_KEY"}, - {AECP_COMMAND_AUTHENTICATE , "AUTHENTICATE"}, + {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_SET_MEDIA_FORMAT , "SET_MEDIA_FORMAT"}, - {AECP_COMMAND_GET_MEDIA_FORMAT , "GET_MEDIA_FORMAT"}, - {AECP_COMMAND_REGISTER_STATE_NOTIFICATION , "REGISTER_STATE_NOTIFICATION"}, - {AECP_COMMAND_DEREGISTER_STATE_NOTIFICATION , "DEREGISTER_STATE_NOTIFICATION"}, - {AECP_COMMAND_REGISTER_QUERY_NOTIFICATION , "REGISTER_QUERY_NOTIFICATION"}, - {AECP_COMMAND_DEREGISTER_QUERY_NOTIFICATION , "DEREGISTER_QUERY_NOTIFICATION"}, - {AECP_COMMAND_IDENTIFY_NOTIFICATION , "IDENTIFY_NOTIFICATION"}, - {AECP_COMMAND_STATE_CHANGE_NOTIFICATION , "STATE_CHANGE_NOTIFICATION"}, - {AECP_COMMAND_INCREMENT_CONTROL_VALUE , "INCREMENT_CONTROL_VALUE"}, - {AECP_COMMAND_DECREMENT_CONTROL_VALUE , "DECREMENT_CONTROL_VALUE"}, + {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_GET_KEY_COUNT , "AUTH_GET_KEY_COUNT"}, - {AECP_COMMAND_EXPANSION , "EXPANSION_RESERVED"}, - {AECP_COMMAND_GET_AS_PATH , "GET_AS_PATH"}, + {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_AUTH_REVOKE_KEY , "AUTH_REVOKE_KEY"}, + {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"}, {0 , NULL} }; @@ -1482,13 +1853,17 @@ static int hf_adp_assoc_id = -1; static int hf_adp_entity_type = -1; /* Entity Capabilties Flags */ -static int hf_adp_entity_cap_avdecc_ip = -1; -static int hf_adp_entity_cap_zero_conf = -1; +static int hf_adp_entity_cap_efu_mode = -1; +static int hf_adp_entity_cap_address_access_supported = -1; static int hf_adp_entity_cap_gateway_entity = -1; -static int hf_adp_entity_cap_avdecc_control = -1; +static int hf_adp_entity_cap_aem_supported = -1; static int hf_adp_entity_cap_legacy_avc = -1; static int hf_adp_entity_cap_assoc_id_support = -1; static int hf_adp_entity_cap_assoc_id_valid = -1; +static int hf_adp_entity_cap_vendor_unique = -1; +static int hf_adp_entity_cap_class_a_supported = -1; +static int hf_adp_entity_cap_class_b_supported = -1; +static int hf_adp_entity_cap_as_supported = -1; /* Talker Capabilities Flags */ static int hf_adp_talk_cap_implement = -1; @@ -1553,17 +1928,29 @@ static int hf_adp_chan_format_24ch = -1; /* ***************************************************************** */ static int hf_aecp_address_type = -1; static int hf_aecp_association_id = -1; +static int hf_aecp_as_path_count = -1; static int hf_aecp_auth_token = -1; -static int hf_aecp_backup_stream_switch = -1; -static int hf_aecp_backup_stream_switch_valid = -1; -static int hf_aecp_bad_presentation_times = -1; -static int hf_aecp_bad_presentation_times_valid = -1; -static int hf_aecp_cd_length = -1; +static int hf_aecp_avb_interface_gptp_gm_changed_valid = -1; +static int hf_aecp_avb_interface_gptp_gm_changed = -1; +static int hf_aecp_avb_interface_link_up_valid = -1; +static int hf_aecp_avb_interface_link_up = -1; +static int hf_aecp_avb_interface_link_down_valid = -1; +static int hf_aecp_avb_interface_link_down = -1; +static int hf_aecp_avb_interface_packets_tx_valid = -1; +static int hf_aecp_avb_interface_packets_tx = -1; +static int hf_aecp_avb_interface_packets_rx_valid = -1; +static int hf_aecp_avb_interface_packets_rx = -1; +static int hf_aecp_avb_interface_rx_crc_error_valid = -1; +static int hf_aecp_avb_interface_rx_crc_error = -1; +static int hf_aecp_cd_length = -1; +static int hf_aecp_clock_domain_locked_valid = -1; +static int hf_aecp_clock_domain_locked = -1; +static int hf_aecp_clock_domain_unlocked_valid = -1; +static int hf_aecp_clock_domain_unlocked = -1; static int hf_aecp_clock_source_id = -1; static int hf_aecp_command_type = -1; static int hf_aecp_configuration = -1; static int hf_aecp_connected_flag = -1; -static int hf_aecp_connection_flag = -1; static int hf_aecp_continued_flag = -1; static int hf_aecp_control_admin_flag = -1; static int hf_aecp_control_user_l1 = -1; @@ -1572,7 +1959,7 @@ static int hf_aecp_control_user_l3 = -1; static int hf_aecp_control_user_l4 = -1; static int hf_aecp_controller_guid = -1; static int hf_aecp_count = -1; -static int hf_aecp_descriptor_id = -1; +static int hf_aecp_descriptor_index = -1; static int hf_aecp_descriptor_type = -1; static int hf_aecp_descriptors = -1; static int hf_aecp_dest_mac_valid_flag = -1; @@ -1593,22 +1980,23 @@ static int hf_aecp_entity_specific7_valid = -1; static int hf_aecp_entity_specific8 = -1; static int hf_aecp_entity_specific8_valid = -1; static int hf_aecp_flags_32 = -1; -static int hf_aecp_gptp_gm_changed = -1; -static int hf_aecp_gptp_locked = -1; -static int hf_aecp_gptp_unlocked = -1; -static int hf_aecp_gptp_unlocked_valid = -1; -static int hf_aecp_gtpt_locked_valid = -1; static int hf_aecp_ipv4_address = -1; static int hf_aecp_ipv6_address = -1; static int hf_aecp_key = -1; -static int hf_aecp_key_guid = -1; +static int hf_aecp_key_eui = -1; static int hf_aecp_key_length = -1; static int hf_aecp_key_number = -1; static int hf_aecp_key_part = -1; static int hf_aecp_keychain_id = -1; -static int hf_aecp_keytype = -1; +static int hf_aecp_keychain_id_small = -1; +static int hf_aecp_keychain_list_index = -1; +static int hf_aecp_keychain_number_of_keys = -1; +static int hf_aecp_keychain_number_of_lists = -1; +static int hf_aecp_key_signature = -1; +static int hf_aecp_key_type = -1; static int hf_aecp_locked_guid = -1; static int hf_aecp_mac_address = -1; +static int hf_aecp_map_index = -1; static int hf_aecp_matrix_affected_item_count = -1; static int hf_aecp_matrix_column = -1; static int hf_aecp_matrix_direction = -1; @@ -1618,32 +2006,20 @@ static int hf_aecp_matrix_region_width = -1; static int hf_aecp_matrix_rep = -1; static int hf_aecp_matrix_row = -1; static int hf_aecp_matrix_value_count = -1; -static int hf_aecp_media_clock_toggles = -1; -static int hf_aecp_media_clock_toggles_valid = -1; static int hf_aecp_media_format = -1; -static int hf_aecp_media_locked = -1; -static int hf_aecp_media_locked_valid = -1; -static int hf_aecp_media_seq_error = -1; -static int hf_aecp_media_unlocked = -1; -static int hf_aecp_media_unlocked_valid = -1; static int hf_aecp_mem_obj_admin_flag = -1; static int hf_aecp_mem_obj_settings_flag = -1; static int hf_aecp_message_type = -1; -static int hf_aecp_missed_avdecc_response = -1; -static int hf_aecp_missed_avdecc_response_valid = -1; static int hf_aecp_msrp_acc_lat_valid_flag = -1; static int hf_aecp_msrp_accumulated_latency = -1; +static int hf_aecp_msrp_failure_bridge_id = -1; +static int hf_aecp_msrp_failure_code = -1; static int hf_aecp_name = -1; static int hf_aecp_name_index = -1; +static int hf_aecp_number_of_maps = -1; static int hf_aecp_operation_id = -1; static int hf_aecp_operation_type = -1; static int hf_aecp_owner_guid = -1; -static int hf_aecp_packets_interest_rx = -1; -static int hf_aecp_packets_interest_rx_valid = -1; -static int hf_aecp_packets_rx = -1; -static int hf_aecp_packets_rx_valid = -1; -static int hf_aecp_packets_tx = -1; -static int hf_aecp_packets_tx_valid = -1; static int hf_aecp_percent_complete = -1; static int hf_aecp_persistent_flag = -1; static int hf_aecp_private_key_read_flag = -1; @@ -1653,39 +2029,47 @@ static int hf_aecp_query_id = -1; static int hf_aecp_query_limit = -1; static int hf_aecp_query_period = -1; static int hf_aecp_query_type = -1; -static int hf_aecp_refused_avdecc_command = -1; -static int hf_aecp_refused_avdecc_command_valid = -1; static int hf_aecp_release_flag = -1; -static int hf_aecp_reserved1_valid = -1; -static int hf_aecp_reserved2_valid = -1; -static int hf_aecp_reserved_counter = -1; -static int hf_aecp_seq_num_mismatch = -1; -static int hf_aecp_seq_num_mismatch_valid = -1; +static int hf_aecp_sampling_rate = -1; static int hf_aecp_sequence_id = -1; -static int hf_aecp_signal_id = -1; +static int hf_aecp_signal_index = -1; static int hf_aecp_signal_type = -1; -static int hf_aecp_srp_latency_violations = -1; -static int hf_aecp_srp_latency_violations_valid = -1; -static int hf_aecp_srp_refused = -1; -static int hf_aecp_srp_refused_valid = -1; +static int hf_aecp_signal_output = -1; static int hf_aecp_stream_format = -1; static int hf_aecp_stream_id_valid_flag = -1; -static int hf_aecp_stream_reset = -1; -static int hf_aecp_stream_reset_valid = -1; -static int hf_aecp_talker_bw_reserved = -1; -static int hf_aecp_talker_bw_reserved_valid = -1; +static int hf_aecp_stream_input_early_timestamp_valid = -1; +static int hf_aecp_stream_input_early_timestamp = -1; +static int hf_aecp_stream_input_late_timestamp_valid = -1; +static int hf_aecp_stream_input_late_timestamp = -1; +static int hf_aecp_stream_input_media_locked_valid = -1; +static int hf_aecp_stream_input_media_locked = -1; +static int hf_aecp_stream_input_media_unlocked_valid = -1; +static int hf_aecp_stream_input_media_unlocked = -1; +static int hf_aecp_stream_input_media_reset_valid = -1; +static int hf_aecp_stream_input_media_reset = -1; +static int hf_aecp_stream_input_packets_rx_valid = -1; +static int hf_aecp_stream_input_packets_rx = -1; +static int hf_aecp_stream_input_packets_tx_valid = -1; +static int hf_aecp_stream_input_packets_tx = -1; +static int hf_aecp_stream_input_seq_num_mismatch_valid = -1; +static int hf_aecp_stream_input_seq_num_mismatch = -1; +static int hf_aecp_stream_input_stream_reset_valid = -1; +static int hf_aecp_stream_input_stream_reset = -1; +static int hf_aecp_stream_input_timestamp_uncertain_valid = -1; +static int hf_aecp_stream_input_timestamp_uncertain = -1; +static int hf_aecp_stream_input_timestamp_valid_valid = -1; +static int hf_aecp_stream_input_timestamp_valid = -1; +static int hf_aecp_stream_input_timestamp_not_valid_valid = -1; +static int hf_aecp_stream_input_timestamp_not_valid = -1; +static int hf_aecp_stream_input_unsupported_format_valid = -1; +static int hf_aecp_stream_input_unsupported_format = -1; static int hf_aecp_target_guid = -1; -static int hf_aecp_timestamp_uncertains = -1; -static int hf_aecp_timestamp_uncertains_valid = -1; -static int hf_aecp_timestamp_valids = -1; -static int hf_aecp_timestamp_valids_valid = -1; static int hf_aecp_token_length = -1; static int hf_aecp_u_flag = -1; static int hf_aecp_unlock_flag = -1; -static int hf_aecp_unsupported_formats = -1; -static int hf_aecp_unsupported_formats_valid = -1; static int hf_aecp_values = -1; static int hf_aecp_values_count = -1; +static int hf_aecp_video_format = -1; static int hf_aecp_status_code = -1; /* ***************************************************************** */ @@ -1696,6 +2080,7 @@ static int hf_aem_aspect_x = -1; static int hf_aem_aspect_y = -1; static int hf_aem_audio_channels = -1; static int hf_aem_avb_interface_id = -1; +static int hf_aem_buffer_length = -1; static int hf_aem_b_flag = -1; static int hf_aem_backedup_talker_guid = -1; static int hf_aem_backedup_talker_unique = -1; @@ -1708,6 +2093,7 @@ static int hf_aem_backup_talker_unique_2 = -1; static int hf_aem_base_audio_map = -1; static int hf_aem_base_cluster = -1; static int hf_aem_base_control = -1; +static int hf_aem_base_control_block = -1; static int hf_aem_base_destination = -1; static int hf_aem_base_external_input_port = -1; static int hf_aem_base_external_output_port = -1; @@ -1718,17 +2104,34 @@ static int hf_aem_base_matrix = -1; static int hf_aem_base_mixer = -1; static int hf_aem_base_signal_selector = -1; static int hf_aem_base_source = -1; +static int hf_aem_number_splitters = -1; +static int hf_aem_base_splitter = -1; +static int hf_aem_number_combiners = -1; +static int hf_aem_base_combiner = -1; +static int hf_aem_number_demultiplexers = -1; +static int hf_aem_base_demultiplexer = -1; +static int hf_aem_number_multiplexers = -1; +static int hf_aem_base_multiplexer = -1; +static int hf_aem_number_transcoders = -1; +static int hf_aem_base_transcoder = -1; static int hf_aem_base_stream_input_port = -1; static int hf_aem_base_stream_output_port = -1; static int hf_aem_base_strings = -1; static int hf_aem_binary_blob = -1; static int hf_aem_blob_size = -1; static int hf_aem_block_latency = -1; +static int hf_aem_reset_time = -1; static int hf_aem_bpp = -1; static int hf_aem_channel_count = -1; static int hf_aem_channels = -1; static int hf_aem_clock_source_flags = -1; static int hf_aem_clock_source_id = -1; +static int hf_aem_clock_domain_id = -1; +static int hf_aem_clock_sources_offset = -1; +static int hf_aem_clock_source_index = -1; +static int hf_aem_clock_sources_count = -1; +static int hf_aem_clock_sources = -1; +static int hf_aem_clock_sources_array = -1; static int hf_aem_clock_source_location_id = -1; static int hf_aem_clock_source_location_type = -1; static int hf_aem_clock_source_name = -1; @@ -1815,7 +2218,8 @@ static int hf_aem_label_midi_cnt = -1; static int hf_aem_label_smpte_cnt = -1; static int hf_aem_length = -1; static int hf_aem_locale_identifier = -1; -static int hf_aem_mapping_audio_channel = -1; +static int hf_aem_mapping_cluster_offset = -1; +static int hf_aem_mapping_cluster_channel = -1; static int hf_aem_mapping_stream_channel = -1; static int hf_aem_mapping_stream_index = -1; static int hf_aem_mappings = -1; @@ -1830,6 +2234,16 @@ static int hf_aem_msrp_mapping_traffic_class = -1; static int hf_aem_msrp_mappings = -1; static int hf_aem_msrp_mappings_count = -1; static int hf_aem_msrp_mappings_offset = -1; +static int hf_aem_avb_interface_flags = -1; +static int hf_aem_avb_clock_identity = -1; +static int hf_aem_avb_priority1 = -1; +static int hf_aem_avb_clock_class = -1; +static int hf_aem_avb_offset_scaled_log_variance = -1; +static int hf_aem_avb_clock_accuracy = -1; +static int hf_aem_avb_priority2 = -1; +static int hf_aem_avb_domain_number = -1; +static int hf_aem_avb_log_sync_interval = -1; +static int hf_aem_avb_propagation_delay = -1; static int hf_aem_msrp_vlan_id = -1; static int hf_aem_nb_flag = -1; static int hf_aem_number_audio_maps = -1; @@ -1838,6 +2252,7 @@ static int hf_aem_number_matrices = -1; static int hf_aem_number_mixers = -1; static int hf_aem_number_of_clusters = -1; static int hf_aem_number_of_controls = -1; +static int hf_aem_number_control_blocks = -1; static int hf_aem_number_of_external_input_ports = -1; static int hf_aem_number_of_external_output_ports = -1; static int hf_aem_number_of_formats = -1; @@ -1862,7 +2277,8 @@ static int hf_aem_sample_rates_offset = -1; static int hf_aem_serial_number = -1; static int hf_aem_sf = -1; static int hf_aem_sf_version = -1; -static int hf_aem_signal_id = -1; +static int hf_aem_signal_index = -1; +static int hf_aem_signal_output = -1; static int hf_aem_signal_type = -1; static int hf_aem_signals_count = -1; static int hf_aem_signals_offset = -1; @@ -1932,6 +2348,7 @@ static int ett_aem_descriptor = -1; static int ett_aem_desc_counts = -1; static int ett_aem_sample_rates = -1; static int ett_aem_stream_flags = -1; +static int ett_aem_clock_sources = -1; static int ett_aem_stream_formats = -1; static int ett_aem_jack_flags = -1; static int ett_aem_port_flags = -1; @@ -2036,7 +2453,7 @@ dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree) proto_item *stream_tree; proto_item *stream_ti; guint8 version; - guint16 subtype; + guint8 subtype; guint8 sf; guint8 fmt; guint8 fdf_evt; @@ -2047,24 +2464,20 @@ dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree) stream_tree = proto_item_add_subtree(stream_ti, ett_aem_stream_format); /* get version */ - version = tvb_get_guint8(tvb, 0) & 0xC0; + version = tvb_get_guint8(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_ntohs(tvb, 0) & AEM_MASK_SF_SUBTYPE; - - proto_tree_add_item(stream_tree, hf_aem_sf, tvb, - AEM_OFFSET_SF_SUBTYPE, 2, ENC_BIG_ENDIAN); + subtype = tvb_get_guint8(tvb, 0) & AEM_MASK_SF_SUBTYPE; switch(subtype) { - case SF61883_IIDC_SUBTYPE: + case IEC_61883_IIDC_SUBTYPE: /* get sf */ - sf = tvb_get_guint8(tvb, 1) & 0x40; + sf = tvb_get_guint8(tvb, 1) & AEM_MASK_SF; proto_tree_add_item(stream_tree, hf_aem_sf, tvb, AEM_OFFSET_SF, 1, ENC_BIG_ENDIAN); @@ -2079,8 +2492,8 @@ dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree) } else { /* 61883 Stream Format */ proto_tree_add_item(stream_tree, hf_aem_fmt, tvb, AEM_OFFSET_FMT, 1, ENC_BIG_ENDIAN); - fmt = tvb_get_guint8(tvb, AEM_OFFSET_FMT) & 0x3F; - if (fmt == 0x40) { /* 61883-6 Stream Format */ + fmt = tvb_get_guint8(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, @@ -2118,6 +2531,12 @@ dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree) 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; @@ -2130,6 +2549,39 @@ dissect_17221_stream_format(tvbuff_t *tvb, proto_tree *tree) } 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; @@ -2206,7 +2658,7 @@ dissect_17221_media_format(tvbuff_t *tvb, proto_tree *tree) } } - +#endif /* TODO following updates in Draft 18 and the pending Draft 19 this section will require major overhaul */ static void @@ -2345,7 +2797,7 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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_id, tvb, + 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 * @@ -2353,119 +2805,123 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) switch(desc_type) { case AEM_DESCRIPTOR_ENTITY: proto_tree_add_item(aem_tree, hf_aem_entity_guid, tvb, - AEM_OFFSET_ENTITY_GUID, 8, ENC_BIG_ENDIAN); + ENTITY_OFFSET_ENTITY_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_vendor_id, tvb, - AEM_OFFSET_VENDOR_ID, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_VENDOR_ID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_entity_model_id, tvb, - AEM_OFFSET_ENTITY_MODEL_ID, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_ENTITY_MODEL_ID, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap, tvb, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_adp_entity_cap_avdecc_ip, tvb, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_adp_entity_cap_zero_conf, tvb, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_adp_entity_cap_avdecc_control, tvb, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_assoc_id_support, tvb, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_entity_cap_assoc_id_valid, tvb, - AEM_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); + 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_as_supported, tvb, + ENTITY_OFFSET_ENTITY_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talker_stream_srcs, tvb, - AEM_OFFSET_TALKER_STREAM_SOURCES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_STREAM_SOURCES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talker_cap, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_implement, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_other_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_control_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_media_clk_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_smpte_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_midi_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_audio_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_talk_cap_video_src, tvb, - AEM_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_TALKER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_listener_stream_sinks, tvb, - AEM_OFFSET_LISTENER_STREAM_SINKS, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_STREAM_SINKS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_listener_cap, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_implement, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_other_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_control_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_media_clk_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_smpte_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_midi_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_audio_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_list_cap_video_sink, tvb, - AEM_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_LISTENER_CAPABILITIES, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_controller_cap, tvb, - AEM_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_cont_cap_implement, tvb, - AEM_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_cont_cap_layer3_proxy, tvb, - AEM_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_CONTROLLER_CAPABILITIES, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_adp_avail_index, tvb, - AEM_OFFSET_AVAILABLE_INDEX, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_adp_as_gm_id, tvb, - AEM_OFFSET_AS_GRANDMASTER_ID, 8, ENC_BIG_ENDIAN); + ENTITY_OFFSET_AVAILABLE_INDEX, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aecp_association_id, tvb, - AEM_OFFSET_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_adp_entity_type, tvb, - AEM_OFFSET_ENTITY_TYPE, 4, ENC_BIG_ENDIAN); + ENTITY_OFFSET_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_entity_name, tvb, - AEM_OFFSET_ENTITY_NAME, 64, ENC_ASCII|ENC_NA); + ENTITY_OFFSET_ENTITY_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_vendor_name_string, tvb, - AEM_OFFSET_VENDOR_NAME_STRING, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_VENDOR_NAME_STRING, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_model_name_string, tvb, - AEM_OFFSET_MODEL_NAME_STRING, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_MODEL_NAME_STRING, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_firmware_version, tvb, - AEM_OFFSET_FIRMWARE_VERSION, 64, ENC_ASCII|ENC_NA); + ENTITY_OFFSET_FIRMWARE_VERSION, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_group_name, tvb, - AEM_OFFSET_GROUP_NAME, 64, ENC_ASCII|ENC_NA); + ENTITY_OFFSET_GROUP_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_serial_number, tvb, - AEM_OFFSET_SERIAL_NUMBER, 64, ENC_ASCII|ENC_NA); + ENTITY_OFFSET_SERIAL_NUMBER, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_configurations_count, tvb, - AEM_OFFSET_CONFIGURATIONS_COUNT, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_CONFIGURATIONS_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_current_configuration, tvb, - AEM_OFFSET_CURRENT_CONFIGURATION, 2, ENC_BIG_ENDIAN); + ENTITY_OFFSET_CURRENT_CONFIGURATION, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_CONFIGURATION: proto_tree_add_item(aem_tree, hf_aem_configuration_name, tvb, - AEM_OFFSET_CONFIGURATION_NAME, 64, ENC_ASCII|ENC_NA); + CONFIGURATION_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_configuration_name_string, tvb, - AEM_OFFSET_CONFIGURATION_NAME_STRING, 2, ENC_BIG_ENDIAN); + CONFIGURATION_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_descriptor_counts_count, tvb, - AEM_OFFSET_DESCRIPTOR_COUNTS_COUNT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_DESCRIPTOR_COUNTS_OFFSET, 2, ENC_BIG_ENDIAN); - mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_DESCRIPTOR_COUNTS_COUNT); + 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 = AEM_OFFSET_DESCRIPTOR_COUNTS; + mr_offset = CONFIGURATION_OFFSET_DESCRIPTOR_COUNTS; for(i = 0; i < mr_counter; ++i) { @@ -2475,42 +2931,44 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) mr_offset += 2; } break; - case AEM_DESCRIPTOR_AUDIO: + case AEM_DESCRIPTOR_AUDIO_UNIT: + proto_tree_add_item(aem_tree, hf_aem_unit_name, tvb, + AUDIO_UNIT_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(aem_tree, hf_aem_unit_name_string, 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, - AEM_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_STREAM_INPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_STREAM_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_EXTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_EXTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_INTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_clock_source_id, tvb, - AEM_OFFSET_CLOCK_SOURCE_ID, 2, ENC_BIG_ENDIAN); + AUDIO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, - AEM_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); + AUDIO_UNIT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, - AEM_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_unit_name, tvb, - AEM_OFFSET_UNIT_NAME, 64, ENC_ASCII|ENC_NA); - proto_tree_add_item(aem_tree, hf_aem_unit_name_string, tvb, - AEM_OFFSET_UNIT_NAME_STRING, 2, ENC_BIG_ENDIAN); - + 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, @@ -2523,21 +2981,49 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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_item = proto_tree_add_item(aem_tree, hf_aem_sample_rates, tvb, - 0, 0, ENC_NA); + 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); - mr_offset = AUDIO_UNIT_OFFSET_SAMPLE_RATES; - proto_item_set_len(mr_item, 4 * mr_counter); + /* loop to get the array values */ for(i = 0; i < mr_counter; ++i) { proto_tree_add_item(mr_subtree, hf_aem_pull_field, tvb, @@ -2563,43 +3049,45 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) mr_offset += 4; } break; - case AEM_DESCRIPTOR_VIDEO: - case AEM_DESCRIPTOR_SENSOR: + case AEM_DESCRIPTOR_VIDEO_UNIT: + case AEM_DESCRIPTOR_SENSOR_UNIT: + proto_tree_add_item(aem_tree, hf_aem_unit_name, tvb, + VIDEO_UNIT_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(aem_tree, hf_aem_unit_name_string, 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, - AEM_OFFSET_NUMBER_OF_STREAM_INPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_STREAM_INPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_STREAM_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_STREAM_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_EXTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_EXTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_EXTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_EXTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_INTERNAL_INPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_INTERNAL_INPUT_PORT, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_NUMBER_OF_INTERNAL_OUTPUT_PORTS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_clock_source_id, tvb, - AEM_OFFSET_CLOCK_SOURCE_ID, 2, ENC_BIG_ENDIAN); + VIDEO_UNIT_OFFSET_BASE_INTERNAL_OUTPUT_PORT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_controls, tvb, - AEM_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); + VIDEO_UNIT_OFFSET_NUMBER_OF_CONTROLS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_control, tvb, - AEM_OFFSET_BASE_CONTROL, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_unit_name, tvb, - AEM_OFFSET_UNIT_NAME, 64, ENC_ASCII|ENC_NA); - proto_tree_add_item(aem_tree, hf_aem_unit_name_string, tvb, - AEM_OFFSET_UNIT_NAME_STRING, 2, ENC_BIG_ENDIAN); - + 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, @@ -2612,64 +3100,93 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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, - AEM_OFFSET_STREAM_NAME, 64, ENC_ASCII|ENC_NA); + STREAM_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_stream_name_string, tvb, - AEM_OFFSET_STREAM_NAME_STRING, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_class_a, tvb, - AEM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_class_b, tvb, - AEM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_STREAM_FLAGS, 2, ENC_BIG_ENDIAN); /* done adding flags, continue with fields */ - proto_tree_add_item(aem_tree, hf_aem_stream_channels, tvb, - AEM_OFFSET_STREAM_CHANNELS, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_clock_source_id, tvb, - AEM_OFFSET_CLOCK_SOURCE_ID_STREAM, 2, ENC_BIG_ENDIAN); - /* stream format dissection */ - next_tvb = tvb_new_subset(tvb, AEM_OFFSET_CURRENT_FORMAT, 8, 8); + next_tvb = tvb_new_subset(tvb, STREAM_OFFSET_CURRENT_FORMAT, 8, 8); dissect_17221_stream_format(next_tvb, aem_tree); proto_tree_add_item(aem_tree, hf_aem_formats_offset, tvb, - AEM_OFFSET_FORMATS_OFFSET, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_FORMATS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_formats, tvb, - AEM_OFFSET_NUMBER_OF_FORMATS, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_NUMBER_OF_FORMATS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_0, tvb, - AEM_OFFSET_BACKUP_TALKER_GUID_0, 8, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKUP_TALKER_GUID_0, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_0, tvb, - AEM_OFFSET_BACKUP_TALKER_UNIQUE_0, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKUP_TALKER_UNIQUE_0, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_1, tvb, - AEM_OFFSET_BACKUP_TALKER_GUID_1, 8, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKUP_TALKER_GUID_1, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_1, tvb, - AEM_OFFSET_BACKUP_TALKER_UNIQUE_1, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKUP_TALKER_UNIQUE_1, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_guid_2, tvb, - AEM_OFFSET_BACKUP_TALKER_GUID_2, 8, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKUP_TALKER_GUID_2, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backup_talker_unique_2, tvb, - AEM_OFFSET_BACKUP_TALKER_UNIQUE_2, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKUP_TALKER_UNIQUE_2, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backedup_talker_guid, tvb, - AEM_OFFSET_BACKEDUP_TALKER_GUID, 8, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKEDUP_TALKER_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_backedup_talker_unique, tvb, - AEM_OFFSET_BACKEDUP_TALKER_UNIQUE, 2, ENC_BIG_ENDIAN); + STREAM_OFFSET_BACKEDUP_TALKER_UNIQUE, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_avb_interface_id, tvb, - AEM_OFFSET_AVB_INTERFACE_ID, 2, ENC_BIG_ENDIAN); + 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, - 0, 0, ENC_NA); + mr_offset, mr_counter * 8, ENC_NA); mr_subtree = proto_item_add_subtree(mr_item, ett_aem_stream_formats); - mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_FORMATS); - mr_offset = AEM_OFFSET_FORMATS; - proto_item_set_len(mr_item, mr_counter * 8); for(i = 0; i < mr_counter; ++i) { next_tvb = tvb_new_subset(tvb, mr_offset, 8, 8); @@ -2677,287 +3194,279 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) mr_offset += 8; } break; - case AEM_DESCRIPTOR_EXTERNAL_JACK_INPUT: - case AEM_DESCRIPTOR_EXTERNAL_JACK_OUTPUT: + case AEM_DESCRIPTOR_JACK_INPUT: + case AEM_DESCRIPTOR_JACK_OUTPUT: proto_tree_add_item(aem_tree, hf_aem_jack_name, tvb, - AEM_OFFSET_JACK_NAME, 64, ENC_ASCII|ENC_NA); + JACK_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_jack_name_string, tvb, - AEM_OFFSET_JACK_NAME_STRING, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); + JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_clock_sync_source, tvb, - AEM_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); + JACK_OFFSET_JACK_FLAGS, 2, ENC_BIG_ENDIAN); /* end jack flags subtree */ proto_tree_add_item(aem_tree, hf_aem_jack_type, tvb, - AEM_OFFSET_JACK_TYPE, 2, ENC_BIG_ENDIAN); + 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_AUDIO_PORT_INPUT: - case AEM_DESCRIPTOR_AUDIO_PORT_OUTPUT: + 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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + STREAM_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); /* end port_flags subtree */ - proto_tree_add_item(aem_tree, hf_aem_audio_channels, tvb, - AEM_OFFSET_AUDIO_CHANNELS, 2, ENC_BIG_ENDIAN); + + 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, - AEM_OFFSET_NUMBER_OF_CLUSTERS, 2, ENC_BIG_ENDIAN); + STREAM_PORT_OFFSET_NUMBER_OF_CLUSTERS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_cluster, tvb, - AEM_OFFSET_BASE_CLUSTER, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_base_audio_map, tvb, - AUDIO_PORT_OFFSET_BASE_AUDIO_MAP, 2, ENC_BIG_ENDIAN); + STREAM_PORT_OFFSET_BASE_CLUSTER, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_audio_maps, tvb, - AUDIO_PORT_OFFSET_NUMBER_AUDIO_MAPS, 2, ENC_BIG_ENDIAN); - break; - case AEM_DESCRIPTOR_VIDEO_PORT_INPUT: - case AEM_DESCRIPTOR_VIDEO_PORT_OUTPUT: - /* set up port_flags subtree */ - mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb, - AEM_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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); - /* end port_flags subtree */ - - /* media format subdissection */ - next_tvb = tvb_new_subset(tvb, 6, 16, 16); - dissect_17221_media_format(next_tvb, aem_tree); - - proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, - AEM_OFFSET_SOURCE_TYPE, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_signal_id, tvb, - AEM_OFFSET_SOURCE_ID, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_stream_id, tvb, - AEM_OFFSET_STREAM_ID, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_formats_offset, tvb, - AEM_OFFSET_FORMATS_OFFSET_VID, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_formats_count, tvb, - AEM_OFFSET_FORMATS_COUNT_VID, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, - VIDEO_PORT_OFFSET_BLOCK_LATENCY, 4, ENC_BIG_ENDIAN); - - /* load formats array */ - mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_FORMATS_COUNT_VID); - mr_offset = VIDEO_PORT_OFFSET_FORMATS; - for(i = 0; i < mr_counter; ++i) { - next_tvb = tvb_new_subset(tvb, mr_offset, 16, 16); - dissect_17221_media_format(next_tvb, aem_tree); - mr_offset += 16; - } + 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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + EXTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_SOURCE_TYPE_EXT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_signal_id, tvb, - AEM_OFFSET_SOURCE_ID_EXT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_jack_id, tvb, - EXTERNAL_PORT_OFFSET_JACK_ID, 2, ENC_BIG_ENDIAN); + 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); - break; - case AEM_DESCRIPTOR_SENSOR_PORT_INPUT: - case AEM_DESCRIPTOR_SENSOR_PORT_OUTPUT: - /* set up port_flags subtree */ - mr_item = proto_tree_add_item(aem_tree, hf_aem_port_flags, tvb, - AEM_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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); - /* end port_flags subtree */ - proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, - AEM_OFFSET_SOURCE_TYPE_EXT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_signal_id, tvb, - AEM_OFFSET_SOURCE_ID_EXT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_stream_id, tvb, - AEM_OFFSET_STREAM_ID_SEN, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_block_latency, tvb, - SENSOR_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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_async_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + INTERNAL_PORT_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(mr_subtree, hf_aem_flags_sync_sample_rate_conv, tvb, - AEM_OFFSET_PORT_FLAGS, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_SOURCE_TYPE_EXT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_signal_id, tvb, - AEM_OFFSET_SOURCE_ID_EXT, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_internal_id, tvb, - AEM_OFFSET_INTERNAL_ID, 2, ENC_BIG_ENDIAN); + 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_aecp_mac_address, tvb, - AEM_OFFSET_MAC_ADDRESS, 6, ENC_NA); - proto_tree_add_item(aem_tree, hf_adp_as_gm_id, tvb, - AEM_OFFSET_AS_GRANDMASTER_ID_AVB, 8, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_msrp_mappings_offset, tvb, - AEM_OFFSET_MSRP_MAPPINGS_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_msrp_mappings_count, tvb, - AEM_OFFSET_MSRP_MAPPINGS_COUNT, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_interface_name, tvb, - AVB_INTERFACE_OFFSET_INTERFACE_NAME, 64, ENC_ASCII|ENC_NA); + AVB_INTERFACE_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_interface_name_string, tvb, - AVB_INTERFACE_OFFSET_INTERFACE_NAME_STRING, 2, ENC_BIG_ENDIAN); + AVB_INTERFACE_OFFSET_LOCALIZED_DESCRIPTION, 2, ENC_BIG_ENDIAN); - /* set up subtree for mappings array */ - mr_item = proto_tree_add_item(aem_tree, hf_aem_msrp_mappings, tvb, - AVB_INTERFACE_MSRP_MAPPINGS, 0, ENC_NA); - mr_subtree = proto_item_add_subtree(mr_item, ett_aem_msrp_mappings); - mr_offset = AVB_INTERFACE_MSRP_MAPPINGS; - mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_MSRP_MAPPINGS_COUNT); - - for(i = 0; i < mr_counter; ++i) { - proto_tree_add_item(mr_subtree, hf_aem_msrp_mapping_traffic_class, tvb, - mr_offset, 1, ENC_BIG_ENDIAN); - ++mr_offset; - proto_tree_add_item(mr_subtree, hf_aem_msrp_mapping_priority, tvb, - mr_offset, 1, ENC_BIG_ENDIAN); - ++mr_offset; - proto_tree_add_item(mr_subtree, hf_aem_msrp_vlan_id, tvb, - mr_offset, 2, ENC_BIG_ENDIAN); - mr_offset += 2; - } + 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, - AEM_OFFSET_CLOCK_SOURCE_NAME, 64, ENC_ASCII|ENC_NA); + CLOCK_SOURCE_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_clock_source_name_string, tvb, - AEM_OFFSET_CLOCK_SOURCE_NAME_STRING, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_CLOCK_SOURCE_FLAGS, 2, ENC_BIG_ENDIAN); + 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(mr_subtree, hf_aem_clock_source_type, tvb, - AEM_OFFSET_CLOCK_SOURCE_TYPE, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aecp_clock_source_id, tvb, - AEM_OFFSET_CLOCK_SOURCE_ID_CLK, 8, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aem_clock_source_location_type, tvb, - AEM_OFFSET_CLOCK_SOURCE_LOCATION_TYPE, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(mr_subtree, hf_aem_clock_source_location_id, tvb, - AEM_OFFSET_CLOCK_SOURCE_LOCATION_ID, 2, ENC_BIG_ENDIAN); + 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, - AEM_OFFSET_MAPPINGS_OFFSET, 2, ENC_BIG_ENDIAN); + AUDIO_MAP_OFFSET_MAPPINGS_OFFSET, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_number_of_mappings, tvb, - AEM_OFFSET_NUMBER_OF_MAPPINGS, 2, ENC_BIG_ENDIAN); + 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 = AEM_OFFSET_MAPPINGS; - mr_counter = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_MAPPINGS); - proto_item_set_len(mr_item, mr_counter * 6); + 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) { + 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_audio_channel, tvb, + 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_channel_count, tvb, - AUDIO_CLUSTER_OFFSET_CHANNEL_COUNT, 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_am824_label, tvb, - AUDIO_CLUSTER_OFFSET_AM824_LABEL, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_cluster_name, tvb, - AUDIO_CLUSTER_OFFSET_CLUSTER_NAME, 64, ENC_ASCII|ENC_NA); - proto_tree_add_item(aem_tree, hf_aem_cluster_name_string, tvb, - AUDIO_CLUSTER_OFFSET_CLUSTER_NAME_STRING, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(aem_tree, hf_aem_configuration_name, tvb, + AUDIO_CLUSTER_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + 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_id, tvb, + 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_control_type, tvb, - AEM_OFFSET_CONTROL_TYPE, 8, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_control_location_type, tvb, - AEM_OFFSET_CONTROL_LOCATION_TYPE, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_control_location_id, tvb, - AEM_OFFSET_CONTROL_LOCATION_ID, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_control_value_type, tvb, - AEM_OFFSET_CONTROL_VALUE_TYPE, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_control_domain, tvb, - AEM_OFFSET_CONTROL_DOMAIN, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_control_name, tvb, - AEM_OFFSET_CONTROL_NAME, 64, ENC_ASCII|ENC_NA); + CONTROL_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_control_name_string, tvb, - AEM_OFFSET_CONTROL_NAME_STRING, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_values_offset, tvb, - AEM_OFFSET_VALUES_OFFSET_CTRL, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_number_of_values, tvb, - AEM_OFFSET_NUMBER_OF_VALUES_CTRL, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_signal_type, tvb, - AEM_OFFSET_SOURCE_TYPE_CTRL, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aem_tree, hf_aem_signal_id, tvb, - AEM_OFFSET_SOURCE_ID_CTRL, 2, ENC_BIG_ENDIAN); + 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); - ctrl_val_type = tvb_get_ntohs(tvb, AEM_OFFSET_CONTROL_VALUE_TYPE); - num_ctrl_vals = tvb_get_ntohs(tvb, AEM_OFFSET_NUMBER_OF_VALUES_CTRL); + 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, - CONTROL_OFFSET_VALUE_DETAILS); + mr_offset); break; case AEM_DESCRIPTOR_SIGNAL_SELECTOR: + proto_tree_add_item(aem_tree, hf_aem_control_name, tvb, + SIGNAL_SELECTOR_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(aem_tree, hf_aem_control_name_string, 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); + + /* 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, @@ -2974,18 +3483,18 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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_id, tvb, + 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_id, tvb, + 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 */ + // 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); @@ -2997,12 +3506,27 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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_id, tvb, + proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } + */ break; case AEM_DESCRIPTOR_MIXER: + proto_tree_add_item(aem_tree, hf_aem_control_name, tvb, + MIXER_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(aem_tree, hf_aem_control_name_string, 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); + + + /* 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, @@ -3026,7 +3550,7 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) proto_tree_add_item(aem_tree, hf_aem_control_latency, tvb, MIXER_OFFSET_CONTROL_LATENCY, 4, ENC_BIG_ENDIAN); - /* set up subtree for sources */ + // 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); @@ -3038,19 +3562,33 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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_id, tvb, + proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } - /* end sources subtree */ + // 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)); + */ break; case AEM_DESCRIPTOR_MATRIX: + proto_tree_add_item(aem_tree, hf_aem_control_name, tvb, + MATRIX_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(aem_tree, hf_aem_control_name_string, 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, @@ -3091,17 +3629,18 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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, - AEM_OFFSET_LOCALE_IDENTIFIER, 64, ENC_ASCII|ENC_NA); + LOCALE_OFFSET_LOCALE_IDENTIFIER, 64, ENC_ASCII|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_number_of_strings, tvb, - AEM_OFFSET_NUMBER_OF_STRINGS, 2, ENC_BIG_ENDIAN); + LOCALE_OFFSET_NUMBER_OF_STRINGS, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aem_tree, hf_aem_base_strings, tvb, - AEM_OFFSET_BASE_STRINGS, 2, ENC_BIG_ENDIAN); + LOCALE_OFFSET_BASE_STRINGS, 2, ENC_BIG_ENDIAN); break; case AEM_DESCRIPTOR_STRINGS: - mr_offset = AEM_OFFSET_STRING0; + 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|ENC_NA); @@ -3121,11 +3660,12 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) mr_offset = MATRIX_SIGNAL_OFFSET_SIGNALS_OFFSET; proto_item_set_len(mr_item, mr_counter * 4); - for(i = 0; i < mr_counter; ++i) { + 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_id, tvb, + proto_tree_add_item(mr_subtree, hf_aem_signal_index, tvb, mr_offset, 2, ENC_BIG_ENDIAN); mr_offset += 2; } @@ -3136,16 +3676,43 @@ dissect_17221_aem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree) 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_ID, 2, ENC_BIG_ENDIAN); + 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|ENC_NA); proto_tree_add_item(aem_tree, hf_aem_object_name_string, tvb, - MEMORY_OBJECT_OFFSET_OBJECT_NAME_STRING, 2, ENC_BIG_ENDIAN); + 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_control_name, tvb, + CLOCK_DOMAIN_OFFSET_OBJECT_NAME, 64, ENC_ASCII|ENC_NA); + proto_tree_add_item(aem_tree, hf_aem_control_name_string, 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_length(tvb) - 4, ENC_NA); @@ -3158,17 +3725,14 @@ static void dissect_17221_aecp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *aecp_tree) { guint16 c_type; - guint16 addr_type; -#if 0 + //guint16 addr_type; guint16 ctrl_data_len; guint16 mess_status; -#endif guint16 mess_type; - guint32 mr_offset; guint16 mr_counter; - proto_item *mr_subtree; - proto_item *mr_item; - int i; + //proto_item *mr_subtree; + //proto_item *mr_item; + //int i; /* next tvb for use in subdissection */ tvbuff_t *next_tvb; proto_tree *flags_tree; @@ -3177,632 +3741,633 @@ dissect_17221_aecp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *aecp_tree) /* AEM Common Format Fields */ proto_tree_add_item(aecp_tree, hf_aecp_message_type, tvb, - AECP_VERSION_OFFSET, 1, ENC_BIG_ENDIAN); + AECP_OFFSET_VERSION, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_status_code, tvb, - AECP_STATUS_CODE_OFFSET, 1, ENC_BIG_ENDIAN); + AECP_OFFSET_STATUS_CODE, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_cd_length, tvb, - AECP_CD_LENGTH_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_CD_LENGTH, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_target_guid, tvb, - AECP_TARGET_GUID_OFFSET, 8, ENC_BIG_ENDIAN); + AECP_OFFSET_TARGET_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_controller_guid, tvb, - AECP_CONTROLLER_GUID_OFFSET, 8, ENC_BIG_ENDIAN); + AECP_OFFSET_CONTROLLER_GUID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_sequence_id, tvb, - AECP_SEQUENCE_ID_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_SEQUENCE_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_u_flag, tvb, - AECP_U_FLAG_OFFSET, 1, ENC_BIG_ENDIAN); + AECP_OFFSET_U_FLAG, 1, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_command_type, tvb, - AECP_COMMAND_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_COMMAND_TYPE, 2, ENC_BIG_ENDIAN); /* get the command type for detailed dissection */ - c_type = tvb_get_ntohs(tvb, AECP_COMMAND_TYPE_OFFSET) & AECP_COMMAND_TYPE_MASK; + 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 */ -#if 0 - ctrl_data_len = tvb_get_ntohs(tvb, AECP_CD_LENGTH_OFFSET) & AECP_CD_LENGTH_MASK; -#endif + ctrl_data_len = tvb_get_ntohs(tvb, AECP_OFFSET_CD_LENGTH) & AECP_CD_LENGTH_MASK; /* get the message type */ mess_type = tvb_get_ntohs(tvb, 0) & ACMP_MSG_TYPE_MASK; /* get the status */ -#if 0 mess_status = tvb_get_ntohs(tvb, 2) & 0xF800; -#endif /* 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_FLAGS_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_LOCK_ENTITY_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_locked_guid, tvb, - AECP_LOCKED_GUID_OFFSET, 8, ENC_BIG_ENDIAN); + 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_CONFIGURATION_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_DESCRIPTOR_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN); - if (mess_type == AECP_AEM_COMMAND_MESSAGE) + if ((mess_type == AECP_AEM_COMMAND_MESSAGE)||(mess_status != 0)) { proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET_28, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET_30, 2, ENC_BIG_ENDIAN); + 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, 28); + 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_CONFIGURATION_OFFSET, 2, ENC_BIG_ENDIAN); + 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, 28); + next_tvb = tvb_new_subset_remaining(tvb, AECP_OFFSET_DESCRIPTOR_DESCRIPTOR); dissect_17221_aem(next_tvb, pinfo, aecp_tree); break; - 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_id, tvb, - AECP_OFFSET_ACQUIRE_ENTITY_DESCRIPTOR_ID, 2, 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_id, tvb, - AECP_OFFSET_CLOCK_SOURCE_DESCRIPTOR_ID, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aem_clock_source_id, tvb, - AECP_OFFSET_CLOCK_SOURCE_CLOCK_SOURCE_ID, 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - next_tvb = tvb_new_subset(tvb, AECP_STREAM_FORMAT_OFFSET, 8, 8); - dissect_17221_stream_format(next_tvb, aecp_tree); - break; case AECP_COMMAND_SET_CONFIGURATION: case AECP_COMMAND_GET_CONFIGURATION: proto_tree_add_item(aecp_tree, hf_aecp_configuration, - tvb, AECP_CONFIGURATION_OFFSET, 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_signal_type, tvb, - AECP_SOURCE_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_signal_id, tvb, - AECP_SOURCE_ID_OFFSET, 2, ENC_BIG_ENDIAN); + tvb, AECP_OFFSET_CONFIGURATION_CONFIGURATION_INDEX, 2, ENC_BIG_ENDIAN); break; - case AECP_COMMAND_SET_MATRIX: + case AECP_COMMAND_SET_STREAM_FORMAT: + case AECP_COMMAND_GET_STREAM_FORMAT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_column, tvb, - AECP_MATRIX_COLUMN_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_row, tvb, - AECP_MATRIX_ROW_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_width, tvb, - AECP_MATRIX_REGION_WIDTH_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_height, tvb, - AECP_MATRIX_REGION_HEIGHT_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_rep, tvb, - AECP_MATRIX_REP_OFFSET, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_direction, tvb, - AECP_MATRIX_DIRECTION_OFFSET, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_value_count, tvb, - AECP_MATRIX_VALUE_COUNT_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_item_offset, tvb, - AECP_MATRIX_ITEM_OFFSET_OFFSET, 2, ENC_BIG_ENDIAN); + 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_RESPONSE_MESSAGE) { - proto_tree_add_item(aecp_tree, hf_aecp_matrix_affected_item_count, tvb, - AECP_MATRIX_AFFECTED_ITEM_COUNT_OFFSET, 4, ENC_BIG_ENDIAN); + if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_STREAM_FORMAT)) + { + next_tvb = tvb_new_subset(tvb, AECP_OFFSET_STREAM_FORMAT_STREAM_FORMAT, 8, 8); + dissect_17221_stream_format(next_tvb, aecp_tree); } break; - case AECP_COMMAND_GET_MATRIX: + case AECP_COMMAND_SET_VIDEO_FORMAT: + case AECP_COMMAND_GET_VIDEO_FORMAT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_column, tvb, - AECP_MATRIX_COLUMN_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_row, tvb, - AECP_MATRIX_ROW_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_width, tvb, - AECP_MATRIX_REGION_WIDTH_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_region_height, tvb, - AECP_MATRIX_REGION_HEIGHT_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_direction, tvb, - AECP_MATRIX_DIRECTION_OFFSET, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_value_count, tvb, - AECP_MATRIX_VALUE_COUNT_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_matrix_item_offset, tvb, - AECP_MATRIX_ITEM_OFFSET_OFFSET, 2, ENC_BIG_ENDIAN); - /* 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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(tvb, AECP_OFFSET_VIDEO_FORMAT_FORMAT_SPECIFIC, 4, 4); + dissect_17221_video_format(next_tvb, aecp_tree); + + next_tvb = tvb_new_subset(tvb, AECP_OFFSET_VIDEO_FORMAT_ASPECT_RATIO, 2, 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(tvb, AECP_OFFSET_VIDEO_FORMAT_FRAME_SIZE, 4, 4); + dissect_17221_video_frame_size(next_tvb, aecp_tree); + } break; - case AECP_COMMAND_SET_STREAM_INFO: + case AECP_COMMAND_SET_SENSOR_FORMAT: + case AECP_COMMAND_GET_SENSOR_FORMAT: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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); - /* set up the flags subtree */ - flags_ti = proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb, - AECP_FLAGS_32_OFFSET, 4, 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, - AECP_FLAGS_32_OFFSET, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_acmp_flags_fast_connect, tvb, - AECP_FLAGS_32_OFFSET, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_acmp_flags_saved_state, tvb, - AECP_FLAGS_32_OFFSET, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_acmp_flags_streaming_wait, tvb, - AECP_FLAGS_32_OFFSET, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_msrp_acc_lat_valid_flag, tvb, - AECP_FLAGS_32_OFFSET, 4, ENC_BIG_ENDIAN); - /* end flags subtree */ - proto_tree_add_item(aecp_tree, hf_aecp_msrp_accumulated_latency, tvb, - AECP_SET_MSRP_ACC_LAT_OFFSET, 4, ENC_BIG_ENDIAN); + if ((mess_type != AECP_AEM_COMMAND_MESSAGE)||(c_type == AECP_COMMAND_SET_SENSOR_FORMAT)) + { + next_tvb = tvb_new_subset(tvb, AECP_OFFSET_SENSOR_FORMAT_SENSOR_FORMAT, 8, 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { /* if response */ + 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_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_fast_connect, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_saved_state, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_flags_streaming_wait, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_connected_flag, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_id_valid_flag, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_msrp_acc_lat_valid_flag, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_dest_mac_valid_flag, tvb, - AECP_FLAGS28_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_FLAGS, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_stream_format, tvb, - AECP_OFFSET_GET_STREAM_INFO_STREAM_FORMAT, 8, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_STREAM_FORMAT, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_stream_id, tvb, - AECP_OFFSET_GET_STREAM_INFO_STREAM_ID, 8, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_STREAM_ID, 8, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_msrp_accumulated_latency, tvb, - AECP_MSRP_ACC_LAT_OFFSET, 4, ENC_BIG_ENDIAN); + AECP_OFFSET_STREAM_INFO_MSRP_ACCUMULATED_LATENCY, 4, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_acmp_stream_dest_mac, tvb, - AECP_DEST_MAC_OFFSET, 6, ENC_NA); - proto_tree_add_item(aecp_tree, hf_aem_clock_source_id, tvb, - AECP_STREAM_CLOCK_SOURCE_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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_NA); + 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: - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_name_index, tvb, - AECP_NAME_INDEX_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_name, tvb, - AECP_NAME_OFFSET, 64, ENC_ASCII|ENC_NA); - break; case AECP_COMMAND_GET_NAME: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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_NAME_INDEX_OFFSET, 2, ENC_BIG_ENDIAN); - if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { + AECP_OFFSET_NAME_NAME_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_NAME_OFFSET, 64, ENC_ASCII|ENC_NA); + AECP_OFFSET_NAME_NAME, 64, ENC_ASCII|ENC_NA); } 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_ASSOCIATION_ID_OFFSET, 8, ENC_BIG_ENDIAN); + AECP_OFFSET_ASSOCIATION_ID_ASSOCIATION_ID, 8, ENC_BIG_ENDIAN); break; - case AECP_COMMAND_AUTH_ADD_KEY: - case AECP_COMMAND_AUTH_GET_KEY: - case AECP_COMMAND_AUTH_GET_KEY_COUNT: - case AECP_COMMAND_AUTH_REVOKE_KEY: - proto_tree_add_item(aecp_tree, hf_aecp_keychain_id, tvb, - AECP_KEYCHAIN_ID_OFFSET, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_keytype, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEYTYPE, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_key_number, tvb, - AECP_KEY_ID_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_continued_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_CONTINUED, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_key_part, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PART, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_key_length, tvb, - AECP_OFFSET_AUTH_ADD_KEY_LENGTH, 2, ENC_BIG_ENDIAN); - - /* set up key permissions flag subtree */ - flags_ti = proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags); - - proto_tree_add_item(flags_tree, hf_aecp_private_key_read_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_private_key_write_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_public_key_write_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_connection_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_admin_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_mem_obj_admin_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_mem_obj_settings_flag, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l4, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l3, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l2, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l1, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - /* end key permissions flag subtree */ - - proto_tree_add_item(aecp_tree, hf_aecp_key_guid, tvb, - AECP_OFFSET_AUTH_ADD_KEY_KEY_GUID, 8, ENC_BIG_ENDIAN); - - mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AUTH_ADD_KEY_LENGTH) & AECP_KEY_LENGTH_MASK; - mr_offset = AECP_OFFSET_AUTH_ADD_KEY_KEY; - proto_tree_add_item(aecp_tree, hf_aecp_key, tvb, - mr_offset, mr_counter, ENC_NA); + 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, tvb, + AECP_OFFSET_SAMPLING_RATE_SAMPLING_RATE, 64, ENC_BIG_ENDIAN); + } break; - case AECP_COMMAND_AUTHENTICATE: - case AECP_COMMAND_DEAUTHENTICATE: - proto_tree_add_item(aecp_tree, hf_aecp_token_length, tvb, - AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH, 2, ENC_BIG_ENDIAN); - /* set up key permissions flag subtree */ - flags_ti = proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags); - - proto_tree_add_item(flags_tree, hf_aecp_private_key_read_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_private_key_write_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_public_key_write_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_connection_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_admin_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_mem_obj_admin_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_mem_obj_settings_flag, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l4, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l3, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l2, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_control_user_l1, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_PERMISSIONS, 4, ENC_BIG_ENDIAN); - /* end key permissions flag subtree */ - proto_tree_add_item(aecp_tree, hf_aecp_key_guid, tvb, - AECP_OFFSET_AUTHENTICATE_KEY_GUID, 8, ENC_BIG_ENDIAN); - - mr_counter = tvb_get_ntohs(tvb, AECP_OFFSET_AUTHENTICATE_TOKEN_LENGTH) - & AECP_TOKEN_LENGTH_MASK; - mr_offset = AECP_OFFSET_AUTHENTICATE_AUTH_TOKEN; - proto_tree_add_item(aecp_tree, hf_aecp_auth_token, tvb, - mr_offset, mr_counter, ENC_NA); + 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_GET_COUNTERS: + 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - /* begin counters_valid flags field */ - flags_ti = proto_tree_add_item(aecp_tree, hf_aecp_flags_32, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - flags_tree = proto_item_add_subtree(flags_ti, ett_acmp_flags); - - proto_tree_add_item(flags_tree, hf_aecp_gptp_unlocked_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_gtpt_locked_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_media_unlocked_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_media_locked_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_stream_reset_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_srp_refused_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_backup_stream_switch_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_missed_avdecc_response_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_refused_avdecc_command_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_seq_num_mismatch_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_media_clock_toggles_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_timestamp_uncertains_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_timestamp_valids_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_unsupported_formats_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_bad_presentation_times_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_srp_latency_violations_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_packets_tx_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_packets_rx_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_packets_interest_rx_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_talker_bw_reserved_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_reserved1_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_reserved2_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific1_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific2_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific3_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific4_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific5_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific6_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific7_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(flags_tree, hf_aecp_entity_specific8_valid, tvb, - AECP_OFFSET_GET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); - /* end counters_valid flags field */ - - proto_tree_add_item(aecp_tree, hf_aecp_gptp_gm_changed, tvb, - AECP_OFFSET_COUNTERS_VALID_GPTP_GM_CHANGED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_gptp_unlocked, tvb, - AECP_OFFSET_COUNTERS_VALID_GPTP_UNLOCKED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_gptp_locked, tvb, - AECP_OFFSET_COUNTERS_VALID_GPTP_LOCKED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_media_unlocked, tvb, - AECP_OFFSET_COUNTERS_VALID_MEDIA_UNLOCKED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_media_locked, tvb, - AECP_OFFSET_COUNTERS_VALID_MEDIA_LOCKED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_media_seq_error, tvb, - AECP_OFFSET_COUNTERS_VALID_MEDIA_SEQ_ERROR, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_stream_reset, tvb, - AECP_OFFSET_COUNTERS_VALID_STREAM_RESET, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_srp_refused, tvb, - AECP_OFFSET_COUNTERS_VALID_SRP_REFUSED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_backup_stream_switch, tvb, - AECP_OFFSET_COUNTERS_VALID_BACKUP_STREAM_SWITCH, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_missed_avdecc_response, tvb, - AECP_OFFSET_COUNTERS_VALID_MISSED_AVDECC_RESPONSE, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_refused_avdecc_command, tvb, - AECP_OFFSET_COUNTERS_VALID_REFUSED_AVDECC_COMMAND, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_seq_num_mismatch, tvb, - AECP_OFFSET_COUNTERS_VALID_SEQ_NUM_MISMATCH, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_media_clock_toggles, tvb, - AECP_OFFSET_COUNTERS_VALID_MEDIA_CLOCK_TOGGLES, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_timestamp_uncertains, tvb, - AECP_OFFSET_COUNTERS_VALID_TIMESTAMP_UNCERTAINS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_timestamp_valids, tvb, - AECP_OFFSET_COUNTERS_VALID_TIMESTAMP_VALIDS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_unsupported_formats, tvb, - AECP_OFFSET_COUNTERS_VALID_UNSUPPORTED_FORMATS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_bad_presentation_times, tvb, - AECP_OFFSET_COUNTERS_VALID_BAD_PRESENTATION_TIMES, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_srp_latency_violations, tvb, - AECP_OFFSET_COUNTERS_VALID_SRP_LATENCY_VIOLATIONS, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_packets_tx, tvb, - AECP_OFFSET_COUNTERS_VALID_PACKETS_TX, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_packets_rx, tvb, - AECP_OFFSET_COUNTERS_VALID_PACKETS_RX, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_packets_interest_rx, tvb, - AECP_OFFSET_COUNTERS_VALID_PACKETS_OF_INTEREST_RX, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_talker_bw_reserved, tvb, - AECP_OFFSET_COUNTERS_VALID_TALKER_BW_RESERVED, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_reserved_counter, tvb, - AECP_OFFSET_COUNTERS_VALID_RESERVED1, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_reserved_counter, tvb, - AECP_OFFSET_COUNTERS_VALID_RESERVED2, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific1, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_1, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific2, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_2, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific3, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_3, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific4, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_4, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific5, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_5, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific6, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_6, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific7, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_7, 4, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_entity_specific8, tvb, - AECP_OFFSET_COUNTERS_VALID_ENTITY_SPECIFIC_8, 4, ENC_BIG_ENDIAN); + 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_SET_MEDIA_FORMAT: - case AECP_COMMAND_GET_MEDIA_FORMAT: + case AECP_COMMAND_INCREMENT_CONTROL: + case AECP_COMMAND_DECREMENT_CONTROL: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_media_format, tvb, - AECP_MEDIA_FORMAT_OFFSET, 16, ENC_NA); - next_tvb = tvb_new_subset(tvb, AECP_OFFSET_SETMF_MEDIA_FMT, 16, 16); - dissect_17221_media_format(next_tvb, aecp_tree); + 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_REGISTER_STATE_NOTIFICATION: - if (mess_type == AECP_AEM_RESPONSE_MESSAGE) { - proto_tree_add_item(aecp_tree, hf_aecp_address_type, tvb, - AECP_ADDRESS_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - addr_type = tvb_get_ntohs(tvb, AECP_ADDRESS_TYPE_OFFSET); - if (addr_type == AECP_ADDRESS_MAC) { - proto_tree_add_item(aecp_tree, hf_aecp_mac_address, tvb, - AECP_ADDRESS_OFFSET, 6, ENC_NA); - } else if (addr_type == AECP_ADDRESS_IPV4) { - proto_tree_add_item(aecp_tree, hf_aecp_ipv4_address, tvb, - AECP_ADDRESS_OFFSET, 4, ENC_BIG_ENDIAN); - } else if (addr_type == AECP_ADDRESS_IPV6) { - proto_tree_add_item(aecp_tree, hf_aecp_ipv6_address, tvb, - AECP_ADDRESS_OFFSET, 8, ENC_NA); - } + 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_REGISTER_QUERY_NOTIFICATION: - proto_tree_add_item(aecp_tree, hf_aecp_query_period, tvb, - AECP_QUERY_PERIOD_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_query_limit, tvb, - AECP_QUERY_LIMIT_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_query_type, tvb, - AECP_QUERY_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_query_id, tvb, - AECP_QUERY_ID_OFFSET, 2, ENC_BIG_ENDIAN); + case AECP_COMMAND_GET_MATRIX: + case AECP_COMMAND_SET_MATRIX: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_QUERY_DESC_T_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_QUERY_DESC_ID_OFFSET, 2, ENC_BIG_ENDIAN); - /* TODO - add query specific fields */ + 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_DEREGISTER_QUERY_NOTIFICATION: - proto_tree_add_item(aecp_tree, hf_aecp_query_id, tvb, - AECP_DEREG_QUERY_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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_STATE_CHANGE_NOTIFICATION: - proto_tree_add_item(aecp_tree, hf_aecp_count, tvb, - AECP_COUNT_OFFSET, 2, ENC_BIG_ENDIAN); - - mr_counter = tvb_get_ntohs(tvb, AECP_COUNT_OFFSET); - mr_offset = AECP_DESCRIPTORS_OFFSET_DQN; - mr_item = proto_tree_add_item(aecp_tree, hf_aecp_descriptors, tvb, - mr_offset, mr_counter * 4, ENC_NA); - mr_subtree = proto_item_add_subtree(mr_item, ett_aecp_descriptors); + 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) { + /* TODO: dissect AVB INFO */ + } + 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); + /* TODO: dissect AS path entries */ + } + 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) { - 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_aecp_descriptor_id, tvb, - mr_offset, 2, ENC_BIG_ENDIAN); - mr_offset += 2; + 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 */ + proto_tree_add_item(flags_tree, hf_aecp_entity_specific1_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific2_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific3_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific4_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific5_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific6_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific7_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_entity_specific8_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + + switch (tvb_get_ntohs(tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE)) { + case AEM_DESCRIPTOR_ENTITY: + break; + case AEM_DESCRIPTOR_AVB_INTERFACE: + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_link_up_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_link_down_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_packets_tx_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_packets_rx_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_rx_crc_error_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_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(flags_tree, hf_aecp_clock_domain_locked_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_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(flags_tree, hf_aecp_stream_input_media_locked_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_media_unlocked_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_stream_reset_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_seq_num_mismatch_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_media_reset_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_timestamp_uncertain_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_timestamp_valid_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_timestamp_not_valid_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_unsupported_format_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_late_timestamp_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_early_timestamp_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_packets_tx_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_packets_rx_valid, tvb, + AECP_OFFSET_COUNTERS_VALID, 4, ENC_BIG_ENDIAN); + break; + default: + break; + } + /* end counters_valid flags field */ + + 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); + + switch (tvb_get_ntohs(tvb, AECP_OFFSET_COUNTERS_DESCRIPTOR_TYPE)) { + case AEM_DESCRIPTOR_ENTITY: + break; + case AEM_DESCRIPTOR_AVB_INTERFACE: + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_link_up, tvb, + AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_UP, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_link_down, tvb, + AECP_OFFSET_COUNTERS_AVB_INTERFACE_LINK_DOWN, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_packets_tx, tvb, + AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_TX, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_avb_interface_packets_rx, tvb, + AECP_OFFSET_COUNTERS_AVB_INTERFACE_PACKETS_RX, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_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(flags_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(flags_tree, hf_aecp_clock_domain_locked, tvb, + AECP_OFFSET_COUNTERS_CLOCK_DOMAIN_LOCKED, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_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(flags_tree, hf_aecp_stream_input_media_locked, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_LOCKED, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_media_unlocked, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_UNLOCKED, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_stream_reset, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_STREAM_RESET, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_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(flags_tree, hf_aecp_stream_input_media_reset, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_MEDIA_RESET, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_timestamp_uncertain, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_UNCERTAIN, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_timestamp_valid, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_TIMESTAMP_VALID, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_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(flags_tree, hf_aecp_stream_input_unsupported_format, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_UNSUPPORTED_FORMAT, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_late_timestamp, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_LATE_TIMESTAMP, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_early_timestamp, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_EARLY_TIMESTAMP, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_packets_tx, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_TX, 4, ENC_BIG_ENDIAN); + proto_tree_add_item(flags_tree, hf_aecp_stream_input_packets_rx, tvb, + AECP_OFFSET_COUNTERS_STREAM_INPUT_PACKETS_RX, 4, ENC_BIG_ENDIAN); + break; + default: + break; + } } break; - case AECP_COMMAND_INCREMENT_CONTROL_VALUE: - case AECP_COMMAND_DECREMENT_CONTROL_VALUE: + 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); - if (mess_type == AECP_AEM_COMMAND_MESSAGE) { - proto_tree_add_item(aecp_tree, hf_aecp_values_count, tvb, - AECP_VALUES_COUNT_OFFSET, 2, ENC_BIG_ENDIAN); - mr_counter = tvb_get_ntohs(tvb, AECP_VALUES_COUNT_OFFSET); - proto_tree_add_item(aecp_tree, hf_aecp_values, tvb, - AECP_VALUES_OFFSET, mr_counter, ENC_NA); + 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: - case AECP_COMMAND_ABORT_OPERATION: proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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_OPERATION_ID_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_START_OPERATION_OPERATION_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_operation_type, tvb, - AECP_OPERATION_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - /* TODO - add values support when operation types are defined */ + 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_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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_OPERATION_ID_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_OPERATION_STATUS_OPERATION_ID, 2, ENC_BIG_ENDIAN); proto_tree_add_item(aecp_tree, hf_aecp_percent_complete, tvb, - AECP_PERCENT_COMPLETE_OFFSET, 2, ENC_BIG_ENDIAN); + AECP_OFFSET_OPERATION_STATUS_PERCENT_COMPLETE, 2, ENC_BIG_ENDIAN); break; - case AECP_COMMAND_GET_AS_PATH: - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_type, tvb, - AECP_DESCRIPTOR_TYPE_OFFSET, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(aecp_tree, hf_aecp_descriptor_id, tvb, - AECP_DESCRIPTOR_ID_OFFSET, 2, ENC_BIG_ENDIAN); + 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) { - /* TODO - how big is path sequence? */ + 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) { + guint32 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; /* * * * AEM COMMON FORMAT PACKETS * * * */ case AECP_COMMAND_CONTROLLER_AVAILABLE: - case AECP_COMMAND_DEREGISTER_STATE_NOTIFICATION: break; default: /* the command type is not one of the valid spec values */ @@ -3842,19 +4407,27 @@ dissect_17221_adp(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *adp_tree) 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_avdecc_ip, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); + 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_zero_conf, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); + 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_avdecc_control, tvb, ADP_ENTITY_CAP_OFFSET, 4, ENC_BIG_ENDIAN); + 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_as_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); @@ -4095,21 +4668,21 @@ proto_register_17221(void) FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL } }, /* Entity Capability Flags Begin */ - { &hf_adp_entity_cap_avdecc_ip, - { "AVDECC_IP", "ieee17221.entity_capabilities.avdecc_ip", - FT_BOOLEAN, 32, NULL, ADP_AVDECC_IP_BITMASK, NULL, HFILL } + { &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_zero_conf, - { "ZERO_CONF", "ieee17221.entity_capabilities.zero_conf", - FT_BOOLEAN, 32, NULL, ADP_ZERO_CONF_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_avdecc_control, - { "AVDECC_CONTROL", "ieee17221.entity_capabilities.avdecc_control", - FT_BOOLEAN, 32, NULL, ADP_AVDECC_CONTROL_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", @@ -4123,6 +4696,22 @@ proto_register_17221(void) { "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_as_supported, + { "AS", "ieee17221.entity_capabilities.as", + 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", @@ -4471,8 +5060,8 @@ proto_register_17221(void) { "Descriptor Type", "ieee17221.descriptor_type", FT_UINT16, BASE_HEX, VALS(aem_descriptor_type_vals), 0x00, NULL, HFILL } }, - { &hf_aecp_descriptor_id, - {"Descriptor ID", "ieee17221.descriptor_id", + { &hf_aecp_descriptor_index, + {"Descriptor Index", "ieee17221.descriptor_index", FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } }, @@ -4489,7 +5078,7 @@ proto_register_17221(void) /* READ_DESCRIPTOR */ { &hf_aecp_configuration, - { "Configuration", "ieee17221.configuration", + { "Configuration", "ieee17221._configuration", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, @@ -4513,7 +5102,7 @@ proto_register_17221(void) /* SET_CLOCK_SOURCE / GET_CLOCK_SOURCE */ { &hf_aecp_clock_source_id, - { "Clock Source ID", "ieee17221.aecp_clock_source_id", + { "Clock Source ID", "ieee17221.clock_source_id", FT_UINT64, BASE_HEX, NULL, 0x00, NULL, HFILL } }, @@ -4533,8 +5122,12 @@ proto_register_17221(void) {"Signal Type", "ieee17221.signal_type", FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } }, - { &hf_aecp_signal_id, - {"Signal ID", "ieee17221.signal_id", + { &hf_aecp_signal_index, + {"Signal Index", "ieee17221.signal_index", + FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_signal_output, + {"Signal Output", "ieee17221.signal_output", FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } }, @@ -4583,11 +5176,32 @@ proto_register_17221(void) /* STOP_STREAMING */ + { &hf_aecp_as_path_count, + {"AS Path Count", "ieee17221.as_path_count", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_map_index, + {"Map Index", "ieee17221.map_index", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_number_of_maps, + {"Number of Maps", "ieee17221.number_of_maps", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + /* GET_STREAM_INFO */ { &hf_aecp_msrp_accumulated_latency, {"MSRP Accumulated Latency", "ieee17221.msrp_accumulated_latency", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, + { &hf_aecp_msrp_failure_code, + {"MSRP Failure Code", "ieee17221.msrp_failure_code", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_msrp_failure_bridge_id, + {"MSRP Failure Bridge ID", "ieee17221.msrp_failure_bridge_id", + FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, { &hf_aecp_connected_flag, {"Connected Flag", "ieee17221.flags.connected", FT_BOOLEAN, 32, NULL, AECP_CONNECTED_FLAG_MASK, NULL, HFILL } @@ -4624,11 +5238,19 @@ proto_register_17221(void) /* AUTH_ADD_KEY */ { &hf_aecp_keychain_id, {"Keychain ID", "ieee17221.keychain_id", + FT_UINT8, BASE_HEX, NULL, 0x00, 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_keytype, - {"Key Type", "ieee17221.keytype", - FT_UINT8, BASE_HEX, VALS(aecp_keytype_type_vals), AECP_KEYTYPE_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, 0x00, NULL, HFILL } }, { &hf_aecp_key_number, {"Key ID", "ieee17221.key_id", @@ -4659,10 +5281,6 @@ proto_register_17221(void) {"Public Key Write Flag", "ieee17221.flags.public_key_write", FT_BOOLEAN, 32, NULL, AECP_PUBLIC_KEY_WRITE_FLAG_MASK, NULL, HFILL } }, - { &hf_aecp_connection_flag, - {"Connection Flag", "ieee17221.flags.connection", - FT_BOOLEAN, 32, NULL, AECP_CONNECTION_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 } @@ -4692,132 +5310,21 @@ proto_register_17221(void) FT_BOOLEAN, 32, NULL, AECP_CONTROL_USER_L4_FLAG_MASK, NULL, HFILL } }, - { &hf_aecp_gptp_gm_changed, - {"GPTP GM Changed", "ieee17221.gtptp_gm_changed", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_gptp_unlocked, - {"GPTP Unlocked", "ieee17221.gptp_unlocked", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_gptp_locked, - {"GPTP Locked", "ieee17221.gptp_locked", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_media_unlocked, - {"Media Unlocked", "ieee17221.media_unlocked", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_media_locked, - {"Media Locked", "ieee17221.media_locked", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_media_seq_error, - {"Media Seq Error", "ieee17221.media_seq_error", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_stream_reset, - {"stream_reset", "ieee17221.stream_reset", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_srp_refused, - {"SRP Refused", "ieee17221.srp_refused", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_backup_stream_switch, - {"Backup Stream Switch", "ieee17221.backup_stream_switch", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_missed_avdecc_response, - {"Missed Avdecc Response", "ieee17221.missed_avdecc_response", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_refused_avdecc_command, - {"Refused Avdecc Command", "ieee17221.refused_avdecc_command", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_seq_num_mismatch, - {"Seq Num Mismatch", "ieee17221.seq_num_mismatch", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_media_clock_toggles, - {"Media Clock Toggles", "ieee17221.media_clock_toggles", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_timestamp_uncertains, - {"Timestamp Uncertains", "ieee17221.timestamp_uncertains", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_timestamp_valids, - {"Timestamp Valids", "ieee17221.timestamp_valids", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_unsupported_formats, - {"Unsupported Formats", "ieee17221.unsupported_formats", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_bad_presentation_times, - {"Bad Presentation Times", "ieee17221.bad_presentation_times", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_srp_latency_violations, - {"SRP Latency Violations", "ieee17221.srp_latency_violations", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_packets_tx, - {"Packets TX", "ieee17221.packets_tx", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_packets_rx, - {"Packets RX", "ieee17221.packets_rx", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_packets_interest_rx, - {"Packets of Interest RX", "ieee17221.packets_interest_rx", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_talker_bw_reserved, - {"Talker BW Reserved", "ieee17221.talker_bw_reserved", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_reserved_counter, - {"RESERVED", "ieee17221.reserved", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_entity_specific1, - {"Entity Specific #1", "ieee17221.entity_specific_1", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_entity_specific2, - {"Entity Specific #2", "ieee17221.entity_specific_2", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_entity_specific3, - {"Entity Specific #3", "ieee17221.entity_specific_3", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_entity_specific4, - {"Entity Specific #4", "ieee17221.entity_specific_4", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_entity_specific5, - {"Entity Specific #5", "ieee17221.entity_specific_5", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} - }, - { &hf_aecp_entity_specific6, - {"Entity Specific #6", "ieee17221.entity_specific_6", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} + { &hf_aecp_keychain_list_index, + {"Keychain List Index", "ieee17221.keychain_list_index", + FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } }, - { &hf_aecp_entity_specific7, - {"Entity Specific #7", "ieee17221.entity_specific_7", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} + { &hf_aecp_keychain_number_of_keys, + {"Keychain Number of Keys", "ieee17221.keychain_number_of_keys", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - { &hf_aecp_entity_specific8, - {"Entity Specific #8", "ieee17221.entity_specific_8", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL} + { &hf_aecp_keychain_number_of_lists, + {"Keychain Number of Lists", "ieee17221.keychain_number_of_lists", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - { &hf_aecp_key_guid, - {"Key GUID", "ieee17221.key_guid", + + { &hf_aecp_key_eui, + {"Key EUI", "ieee17221.key_eui", FT_UINT64, BASE_HEX, NULL, 0x00, NULL, HFILL } }, { &hf_aecp_token_length, @@ -4840,94 +5347,93 @@ proto_register_17221(void) /* AUTH_GET_KEY */ /* AUTHENTICATE */ /* GET_COUNTERS */ - { &hf_aecp_gptp_unlocked_valid, - {"GPTP Unlocked Valid", "ieee17221.flags.gptp_unlocked_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_GPTP_UNLOCKED, NULL, HFILL } + { &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_up_valid", + FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_LINK_DOWN, NULL, HFILL } }, - { &hf_aecp_gtpt_locked_valid, - {"GPTP Locked Valid", "ieee17221.flags.gptp_locked_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_GPTP_LOCKED, 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_media_unlocked_valid, + { &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_media_locked_valid, - {"Media Locked Valid", "ieee17221.flags.valid", + { &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_reset_valid, + { &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_srp_refused_valid, - {"SRP Refused Valid", "ieee17221.flags.srt_refused_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_SRP_REFUSED, NULL, HFILL } - }, - { &hf_aecp_backup_stream_switch_valid, - {"Backup Stream Switch Valid", "ieee17221.flags.backup_stream_switch_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_BACKUP_STREAM_SWITCH, NULL, HFILL } - }, - { &hf_aecp_missed_avdecc_response_valid, - {"Missed Avdecc Response Valid", "ieee17221.flags.missed_avdecc_response_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MISSED_AVDECC_RESPONSE, NULL, HFILL } - }, - { &hf_aecp_refused_avdecc_command_valid, - {"Refused Avdecc Command Valid", "ieee17221.flags.refused_avdecc_command_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_REFUSED_AVDECC_COMMAND, NULL, HFILL } - }, - { &hf_aecp_seq_num_mismatch_valid, + { &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_media_clock_toggles_valid, - {"Media Clock Toggles Valid", "ieee17221.flags.media_clock_toggles_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_MEDIA_CLOCK_TOGGLES, 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_timestamp_uncertains_valid, - {"Timestamp Uncertains Valid", "ieee17221.flags.timestamp_uncertains_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_UNCERTAINS, 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_timestamp_valids_valid, - {"Timestamp Valids Valid", "ieee17221.flags.timestamp_valids_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TIMESTAMP_VALIDS, 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_unsupported_formats_valid, - {"Unsupported Formats Valid", "ieee17221.flags.unsupported_formats_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_UNSUPPORTED_FORMATS, 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_bad_presentation_times_valid, - {"Bad Presentation Times Valid", "ieee17221.flags.bad_presentation_times_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_BAD_PRESENTATION_TIMES, 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_srp_latency_violations_valid, - {"SRP Latency Violations Valid", "ieee17221.flags.srp_latency_violations_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_SRP_LATENCY_VIOLATIONS, 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_packets_tx_valid, - {"Packets TX Valid", "ieee17221.flags.packets_tx_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_TX, NULL, HFILL } - }, - { &hf_aecp_packets_rx_valid, - {"Packets RX Valid", "ieee17221.flags.packets_rx_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_RX, NULL, HFILL } - }, - { &hf_aecp_packets_interest_rx_valid, - {"Packets of Interest RX Valid", "ieee17221.flags.packets_interest_rx_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_PACKETS_OF_INTEREST_RX, 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_talker_bw_reserved_valid, - {"Talker BW Reserved Valid", "ieee17221.flags.talker_bw_reserved_valid", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_TALKER_BW_RESERVED, 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_reserved1_valid, - {"RESERVED", "ieee17221.flags.reserved", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_RESERVED1, NULL, HFILL } - }, - { &hf_aecp_reserved2_valid, - {"RESERVED", "ieee17221.flags.reserved", - FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_RESERVED2, 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 } @@ -4961,6 +5467,126 @@ proto_register_17221(void) FT_BOOLEAN, 32, NULL, AECP_COUNTERS_VALID_ENTITY_SPECIFIC_8, NULL, HFILL } }, + { &hf_aecp_avb_interface_link_up, + {"Link Up Valid", "ieee17221.flags.link_up", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_avb_interface_link_down, + {"Link Down Valid", "ieee17221.flags.link_up", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_avb_interface_packets_tx, + {"Packets TX Valid", "ieee17221.flags.packets_tx", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_avb_interface_packets_rx, + {"Packets RX Valid", "ieee17221.flags.packets_rx", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_avb_interface_rx_crc_error, + {"RX CRC Error Valid", "ieee17221.flags.rx_crc_error", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_avb_interface_gptp_gm_changed, + {"GPTP GM Changed Valid", "ieee17221.flags.gptp_gm_changed", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + + { &hf_aecp_clock_domain_unlocked, + {"Clock Domain Unlocked Valid", "ieee17221.flags.clock_domain_unlocked", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_clock_domain_locked, + {"Clock_Domain Locked Valid", "ieee17221.flags.clock_domain_locked", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + + { &hf_aecp_stream_input_media_unlocked, + {"Media Unlocked Valid", "ieee17221.flags.media_unlocked", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_media_locked, + {"Media Locked Valid", "ieee17221.flags.media_locked", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_stream_reset, + {"Stream Reset Valid", "ieee17221.flags.stream_reset", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_seq_num_mismatch, + {"Seq Num Mismatch Valid", "ieee17221.flags.seq_num_mismatch", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_media_reset, + {"Media Reset Valid", "ieee17221.flags.media_reset", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_timestamp_uncertain, + {"Timestamp Uncertain Valid", "ieee17221.flags.timestamp_uncertain", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_timestamp_valid, + {"Timestamp Valid Valid", "ieee17221.flags.timestamp", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_timestamp_not_valid, + {"Timestamp Not Valid Valid", "ieee17221.flags.timestamp_not", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_unsupported_format, + {"Unsupported Format Valid", "ieee17221.flags.unsupported_format", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_late_timestamp, + {"Late Timestamp Valid", "ieee17221.flags.late_timestamp", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_early_timestamp, + {"Early Timestamp Valid", "ieee17221.flags.early_timestamp", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_packets_tx, + {"Stream Packets TX Valid", "ieee17221.flags.stream_packets_tx", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_stream_input_packets_rx, + {"Stream Packets RX Valid", "ieee17221.flags.stream_packets_rx", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + + { &hf_aecp_entity_specific1, + {"Entity Specific 1", "ieee17221.flags.entity_specific1", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific2, + {"Entity Specific 2", "ieee17221.flags.entity_specific2", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific3, + {"Entity Specific 3", "ieee17221.flags.entity_specific3", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific4, + {"Entity Specific 4", "ieee17221.flags.entity_specific4", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific5, + {"Entity Specific 5", "ieee17221.flags.entity_specific5", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific6, + {"Entity Specific 6", "ieee17221.flags.entity_specific6", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific7, + {"Entity Specific 7", "ieee17221.flags.entity_specific7", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_entity_specific8, + {"Entity Specific 8", "ieee17221.flags.entity_specific8", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + /* REBOOT */ /* SET_MEDIA_FORMAT / GET_MEDIA_FORMAT */ @@ -4969,6 +5595,15 @@ proto_register_17221(void) FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL } }, + { &hf_aecp_video_format, + {"Video Format", "ieee17221.video_format", + FT_BYTES, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, + { &hf_aecp_sampling_rate, + {"Sampling Rate", "ieee17221.sampling_rate", + FT_UINT32, BASE_HEX, NULL, 0x00, NULL, HFILL } + }, + /* REGISTER_STATE_NOTIFICATION */ { &hf_aecp_address_type, {"Address Type", "ieee17221.address_type", @@ -5053,7 +5688,7 @@ proto_register_17221(void) /* ENTITY */ /* hf_aecp_descriptor_type */ - /* hf_aecp_descriptor_id */ + /* hf_aecp_descriptor_index */ { &hf_aem_entity_guid, {"Entity GUID", "ieee17221.entity_guid", FT_UINT64, BASE_HEX, NULL, 0x00, NULL, HFILL } @@ -5117,11 +5752,11 @@ proto_register_17221(void) /* CONFIGURATION */ { &hf_aem_configuration_name, - {"Configuration Name", "ieee17221.configuration_name", + {"Object Name", "ieee17221.configuration_name", FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_aem_configuration_name_string, - {"Configuration Name String", "ieee17221.configuration_name_string", + {"Localized Description", "ieee17221.configuration_name_string", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_descriptor_counts_count, @@ -5190,6 +5825,30 @@ proto_register_17221(void) {"Clock Source ID", "ieee17221.clock_source_id", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, + { &hf_aem_clock_domain_id, + {"Clock Domain ID", "ieee17221.clock_domain_id", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_clock_sources_offset, + {"Clock Sources Offset", "ieee17221.clock_sources_offset", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_clock_source_index, + {"Clock Source Index", "ieee17221.clock_source_index", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_clock_sources_count, + {"Clock Sources Count", "ieee17221.clock_sources_count", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_clock_sources, + {"Clock Sources", "ieee17221.clock_sources", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_clock_sources_array, + {"Clock Sources Array", "ieee17221.clock_sources_array", + FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, { &hf_aem_number_of_controls, {"Number Of Controls", "ieee17221.number_of_controls", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } @@ -5198,6 +5857,14 @@ proto_register_17221(void) {"Base Control", "ieee17221.base_control", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, + { &hf_aem_number_control_blocks, + {"Number Of Control Blocks", "ieee17221.number_of_control_blocks", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_base_control_block, + {"Base Control Block", "ieee17221.base_control_block", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, { &hf_aem_unit_name, {"Unit Name", "ieee17221.unit_name", FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL } @@ -5216,7 +5883,7 @@ proto_register_17221(void) }, { &hf_aem_base_signal_selector, {"Base Signal Selector", "ieee17221.base_signal_selector", - FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_number_mixers, {"Number of Mixers", "ieee17221.num_mixers", @@ -5224,7 +5891,7 @@ proto_register_17221(void) }, { &hf_aem_base_mixer, {"Base Mixer", "ieee17221.base_mixer", - FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_number_matrices, {"Number of Matrices", "ieee17221.num_matrices", @@ -5232,7 +5899,47 @@ proto_register_17221(void) }, { &hf_aem_base_matrix, {"Base Matrix", "ieee17221.base_matrix", - FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_number_splitters, + {"Number of Splitters", "ieee17221.num_splitters", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_base_splitter, + {"Base Splitter", "ieee17221.base_splitter", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_number_combiners, + {"Number of Combiners", "ieee17221.num_combiners", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_base_combiner, + {"Base Combiner", "ieee17221.base_combiner", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_number_demultiplexers, + {"Number of Demultiplexers", "ieee17221.num_demultiplexer", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_base_demultiplexer, + {"Base Demultiplexer", "ieee17221.base_demultiplexer", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_number_multiplexers, + {"Number of Multiplexers", "ieee17221.num_multiplexers", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_base_multiplexer, + {"Base Multiplexer", "ieee17221.base_multiplexer", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_number_transcoders, + {"Number of Transcoders", "ieee17221.num_transcoders", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_base_transcoder, + {"Base Transcoder", "ieee17221.base_transcoder", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, /* sample rate is 3 bit pull field multiplier and 29 bit base freq in Hz */ { &hf_aem_sample_rates_offset, @@ -5264,11 +5971,11 @@ proto_register_17221(void) /* STREAM_INPUT */ /* STREAM_OUTPUT */ { &hf_aem_stream_name, - {"Stream Name", "ieee17221.stream_name", + {"Object Name", "ieee17221.stream_name", FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_aem_stream_name_string, - {"Stream Name String", "ieee17221.stream_name_string", + {"Localized Description", "ieee17221.stream_name_string", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_stream_flags, @@ -5335,7 +6042,10 @@ proto_register_17221(void) {"AVB Interface ID", "ieee17221.avb_interface_id", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - + { &hf_aem_buffer_length, + {"Buffer Length", "ieee17221.buffer_length", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, /* array head. uses ett_aem_stream_formats */ { &hf_aem_stream_formats, @@ -5346,11 +6056,11 @@ proto_register_17221(void) /* EXTERNAL_JACK_INPUT */ /* EXTERNAL_JACK_OUTPUT*/ { &hf_aem_jack_name, - {"Jack Name", "ieee17221.jack_name", + {"Object Name", "ieee17221.jack_name", FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_aem_jack_name_string, - {"Jack Name String", "ieee17221.jack_name_string", + {"Localized Description", "ieee17221.jack_name_string", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_interface_name, @@ -5401,7 +6111,7 @@ proto_register_17221(void) }, { &hf_aem_base_audio_map, {"Base Audio Map", "ieee17221.base_audio_map", - FT_UINT16, BASE_HEX, NULL, 0x00, NULL, HFILL } + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_number_audio_maps, {"Number of Audio Maps", "ieee17221.num_audio_maps", @@ -5409,7 +6119,7 @@ proto_register_17221(void) }, /* VIDEO_PORT_INPUT */ /* VIDEO_PORT_OUTPUT */ - { & hf_aem_stream_id, + { &hf_aem_stream_id, {"Stream Descriptor ID", "ieee17221.stream_descriptor_id", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, @@ -5457,15 +6167,54 @@ proto_register_17221(void) {"MSRP VLAN ID", "ieee17221.msrp_vlan_id", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - + { &hf_aem_avb_interface_flags, + {"Interface Flags", "ieee17221.interface_flags", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_clock_identity, + {"Clock Identity", "ieee17221.clock_identity", + FT_UINT64, BASE_HEX, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_priority1, + {"Priority1", "ieee17221.priority1", + FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_clock_class, + {"Clock Class", "ieee17221.clock_class", + FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_offset_scaled_log_variance, + {"Scaled Log Variance", "ieee17221.offset_scaled_log_varianc", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_clock_accuracy, + {"Clock Accuracy", "ieee17221.clock_accuracy", + FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_priority2, + {"Priority2", "ieee17221.priority2", + FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_domain_number, + {"Domain Number", "ieee17221.domain_number", + FT_UINT8, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_log_sync_interval, + {"Log sync Interval", "ieee17221.log_sync_interval", + FT_INT8, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_avb_propagation_delay, + {"Propagation Delay", "ieee17221.propagation_delay", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, /* CLOCK_SOURCE */ { &hf_aem_clock_source_name, - {"Clock Source Name", "ieee17221.clock_source_name", + {"Object Name", "ieee17221.clock_source_name", FT_STRING, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_aem_clock_source_name_string, - {"Clock Source Name String", "ieee17221.clock_source_name_string", + {"Localized Description", "ieee17221.clock_source_name_string", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, { &hf_aem_clock_source_flags, @@ -5505,8 +6254,12 @@ proto_register_17221(void) {"Mapping Stream Channel", "ieee17221.mapping_stream_channel", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, - { &hf_aem_mapping_audio_channel, - {"Mapping Audio Channel", "ieee17221.mapping_audio_channel", + { &hf_aem_mapping_cluster_offset, + {"Mapping Cluster Offset", "ieee17221.mapping_cluster_offset", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_mapping_cluster_channel, + {"Mapping Cluster Channel", "ieee17221.mapping_cluster_channel", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, /* AUDIO_CLUSTER */ @@ -5598,12 +6351,20 @@ proto_register_17221(void) {"Block Latency", "ieee17221.block_latency", FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } }, + { &hf_aem_reset_time, + {"Reset Time", "ieee17221.reset_time", + FT_UINT32, BASE_DEC, NULL, 0x00, 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_id, - {"Signal ID", "ieee17221.signal_id", + { &hf_aem_signal_index, + {"Signal Index", "ieee17221.signal_index", + FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + { &hf_aem_signal_output, + {"Signal Output", "ieee17221.signal_output", FT_UINT16, BASE_DEC, NULL, 0x00, NULL, HFILL } }, @@ -5852,7 +6613,7 @@ proto_register_17221(void) }, /* BEGIN STREAM FORMAT (SF) FIELDS */ { &hf_aem_stream_format, - {"Stream Format", "ieee17221.aem_stream_format", + {"Stream Format", "ieee17221.stream_format", FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } }, { &hf_aem_sf_version, @@ -5954,6 +6715,7 @@ proto_register_17221(void) &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, |