// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.bluetooth.avrcp;

// Types are intended match how they are defined in the BT AVRCP 1.6.2 spec
// and the 1394-TA AV\C Panel specification.
// Deviations are called out in comments.

/// Status codes for commands sent as the controller.
type ControllerError = strict enum : uint32 {
    UNKNOWN_FAILURE = 1;
    TIMED_OUT = 2;
    REMOTE_NOT_CONNECTED = 3;
    COMMAND_NOT_IMPLEMENTED = 4;
    COMMAND_REJECTED = 5;
    COMMAND_UNEXPECTED = 6;
    INVALID_ARGUMENTS = 7;
    PACKET_ENCODING = 8;
    PROTOCOL_ERROR = 9;
    CONNECTION_ERROR = 10;
    UNEXPECTED_RESPONSE = 11;
};

/// Status codes for passthrough responses received from the target.
type TargetPassthroughError = strict enum {
    COMMAND_NOT_IMPLEMENTED = 1;
    COMMAND_REJECTED = 2;
};

/// Status codes for AVRCP specific AV/C commands.
/// Defined in AVRCP 1.6.2 section 6.15.3, Table 6.49.
/// Style note: named exactly as they are in Table 6.49 with the "REJECTED_" prefix.
type TargetAvcError = strict enum : uint32 {
    REJECTED_INVALID_COMMAND = 0x00;
    REJECTED_INVALID_PARAMETER = 0x01;
    REJECTED_PARAMETER_CONTENT_ERROR = 0x02;
    REJECTED_INTERNAL_ERROR = 0x03;
    REJECTED_UID_CHANGED = 0x05;
    REJECTED_INVALID_PLAYER_ID = 0x11;
    REJECTED_NO_AVAILABLE_PLAYERS = 0x15;
    REJECTED_ADDRESSED_PLAYER_CHANGED = 0x16;
};

/// The `AddressedPlayerId` is a unique identifier, assigned by AVRCP, for a media player.
/// This ID is only used for AVRCP purposes, and should not be interpreted as an
/// identification created, assigned, or used by MediaSession or any other API surfaces.
///
/// Defined in AVRCP 1.6, Section 6.10.2.1.
type AddressedPlayerId = struct {
    id uint16;
};

/// The maximum number of Notification Event IDs that can be supported by the TG.
/// 0x0E to 0xFF are reserved for future use.
/// Defined by AVRCP 1.6.2 Appendix H.
const MAX_NOTIFICATIONS uint8 = 255;

/// Defined by AVRCP 1.6.2 section 6.7.2 (RegisterNotification) and Appendix H.
/// Style note: named exactly as they are in the specification with the "EVENT_" prefix.
type NotificationEvent = strict enum : uint8 {
    PLAYBACK_STATUS_CHANGED = 0x01;
    TRACK_CHANGED = 0x02;
    TRACK_REACHED_END = 0x03;
    TRACK_REACHED_START = 0x04;
    TRACK_POS_CHANGED = 0x05;
    BATT_STATUS_CHANGED = 0x06;
    SYSTEM_STATUS_CHANGED = 0x07;
    PLAYER_APPLICATION_SETTING_CHANGED = 0x08;
    NOW_PLAYING_CONTENT_CHANGED = 0x09;
    AVAILABLE_PLAYERS_CHANGED = 0x0a;
    ADDRESSED_PLAYER_CHANGED = 0x0b;
    UIDS_CHANGED = 0x0c;
    VOLUME_CHANGED = 0x0d;
};

/// Change notifications that a controller client can register.
type Notifications = strict bits : uint32 {
    // AVRCP native notifications

    /// AVRCP `EVENT_PLAYBACK_STATUS_CHANGED` Notification
    PLAYBACK_STATUS = 0x1;

    /// AVRCP `EVENT_TRACK_CHANGED` Notification
    TRACK = 0x2;

    /// AVRCP `EVENT_TRACK_POS_CHANGED` Notification
    TRACK_POS = 0x4;

    /// AVRCP `EVENT_BATT_STATUS_CHANGED` Notification
    BATT_STATUS = 0x8;

    /// AVRCP `EVENT_SYSTEM_STATUS_CHANGED` Notification
    SYSTEM_STATUS = 0x10;

    /// AVRCP `EVENT_PLAYER_APPLICATION_SETTINGS_CHANGED` Notification
    PLAYER_APPLICATION_SETTINGS = 0x20;

    /// AVRCP `EVENT_ADDRESSED_PLAYER_CHANGED` Notification
    ADDRESSED_PLAYER = 0x40;

    /// AVRCP `EVENT_VOLUME_CHANGED` Notification
    VOLUME = 0x80;

    /// AVRCP `EVENT_AVAILABLE_PLAYERS_CHANGED` Notification
    AVAILABLE_PLAYERS = 0x100;

    // Internal notifications

    /// Internal connection change event.
    CONNECTION = 0x10000;
};

/// Event data from incoming target notifications.
/// Defined by AVRCP 1.6.2 Sec 6.7.2.
type Notification = table {
    /// `EVENT_PLAYBACK_STATUS_CHANGED` event data
    1: status PlaybackStatus;

    /// `EVENT_TRACK_CHANGED` event data
    2: track_id uint64;

    /// `EVENT_TRACK_POS_CHANGED` event data
    3: pos uint32;

    /// `EVENT_BATT_STATUS_CHANGED` event data
    4: battery_status BatteryStatus;

    /// `EVENT_SYSTEM_STATUS_CHANGED` event data
    5: system_status SystemStatus;

    /// `EVENT_PLAYER_APPLICATION_SETTINGS_CHANGED` event data
    6: application_settings PlayerApplicationSettings;

    /// `EVENT_ADDRESSED_PLAYER_CHANGED` event data
    7: player_id uint16;

    /// `EVENT_VOLUME_CHANGED` event data
    8: volume uint8;

    /// `CONNECTION_CHANGE` event data
    9: device_connected bool;

    /// `AVAILABLE_PLAYERS_CHANGED` event data
    10: available_players_changed bool;

    /// `ADDRESSED_PLAYER_CHANGED` event data
    11: addressed_player uint16;
};

/// Defined by AVRCP 1.6.2 section 6.7.2 (RegisterNotification).
/// Format for `EVENT_SYSTEM_STATUS_CHANGED`.
type SystemStatus = strict enum : uint8 {
    POWER_ON = 0x00;
    POWER_OFF = 0x01;
    UNPLUGGED = 0x02;
};

/// Defined by AVRCP 1.6.2 section 6.7.2 (RegisterNotification).
/// Format for `EVENT_PLAYBACK_STATUS_CHANGED`.
type PlaybackStatus = strict enum : uint8 {
    STOPPED = 0x00;
    PLAYING = 0x01;
    PAUSED = 0x02;
    FWD_SEEK = 0x03;
    REV_SEEK = 0x04;
    ERROR = 0xFF;
};

/// Defined by AVRCP 1.6.2 section 6.7.2 (RegisterNotification).
/// Format for `EVENT_BATT_STATUS_CHANGED`.
/// Same encoding also defined by 6.5.8 (InformBatteryStatusOfCT).
type BatteryStatus = strict enum : uint8 {
    NORMAL = 0x00;
    WARNING = 0x01;
    CRITICAL = 0x02;
    EXTERNAL = 0x03;
    FULL_CHARGE = 0x04;
    RESERVED = 0x05;
};

/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type RepeatStatusMode = strict enum : uint8 {
    OFF = 0x01;
    SINGLE_TRACK_REPEAT = 0x02;
    ALL_TRACK_REPEAT = 0x03;
    GROUP_REPEAT = 0x04;
};

/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type ShuffleMode = strict enum : uint8 {
    OFF = 0x01;
    ALL_TRACK_SHUFFLE = 0x02;
    GROUP_SHUFFLE = 0x03;
};

/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type ScanMode = strict enum : uint8 {
    OFF = 0x01;
    ALL_TRACK_SCAN = 0x02;
    GROUP_SCAN = 0x03;
};

/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type Equalizer = strict enum : uint8 {
    OFF = 0x01;
    ON = 0x02;
};

/// The maximum number of custom attributes that can be used.
/// Defined by AVRCP 1.6.2 Appendix F.
const MAX_CUSTOM_ATTRIBUTES uint64 = 127;

/// The maximum number of possible values an attribute can take on.
/// Defined by AVRCP 1.6.2 Sec 6.5.2
const MAX_ATTRIBUTE_VALUES uint64 = 255;

/// The total number of attributes that can be set. The custom attributes + the 4
/// defined attributes, `PlayerApplicationSettingAttributeId`. 4 + 127 = 131.
const MAX_ATTRIBUTES uint64 = 131;

/// 0x80 - 0xFF is reserved for custom player application settings.
/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type PlayerApplicationSettingAttributeId = strict enum : uint8 {
    EQUALIZER = 0x01;
    REPEAT_STATUS_MODE = 0x02;
    SHUFFLE_MODE = 0x03;
    SCAN_MODE = 0x04;
};

/// The custom attribute value and its description.
type CustomAttributeValue = struct {
    description string:255;
    value uint8;
};

/// Specification allowed player application settings.
/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type CustomPlayerApplicationSetting = table {
    /// The attribute id for the custom setting. Must be between 0x80-0xFF, as
    /// defined in AVRCP 1.6.2 Appendix F.
    1: attribute_id uint8;

    /// The string descriptor of the custom attribute.
    2: attribute_name string:255;

    /// The possible values the custom attribute can take.
    3: possible_values vector<CustomAttributeValue>:MAX_ATTRIBUTE_VALUES;

    /// The current value that the custom setting is set to.
    4: current_value uint8;
};

/// Defined by AVRCP 1.6.2 Appendix F (player application settings).
type PlayerApplicationSettings = table {
    /// The equalizer status of the remote target.
    1: equalizer Equalizer;

    /// The repeat mode status of the remote target.
    2: repeat_status_mode RepeatStatusMode;

    /// The shuffle mode status of the remote target.
    3: shuffle_mode ShuffleMode;

    /// The scan mode status of the remote target.
    4: scan_mode ScanMode;

    /// Custom settings that are specification allowed.
    5: custom_settings vector<CustomPlayerApplicationSetting>:MAX_CUSTOM_ATTRIBUTES;
};

/// The maximum length of an attribute value in the media attributes.
/// Defined by AVRCP 1.6.2 Sec 6.6.1.
const MAX_ATTRIBUTE_VALUE_LENGTH uint64 = 65535;

/// Defined by AVRCP 1.6.2 Appendix E (media attributes).
type MediaAttributes = table {
    /// The title, song name, or content description.
    1: title string:MAX_ATTRIBUTE_VALUE_LENGTH;
    /// The artist, performer, or group.
    2: artist_name string:MAX_ATTRIBUTE_VALUE_LENGTH;
    /// The title of the source of media.
    3: album_name string:MAX_ATTRIBUTE_VALUE_LENGTH;
    /// The order number of the media on its original recording.
    4: track_number string:MAX_ATTRIBUTE_VALUE_LENGTH;
    /// The total number of tracks in the media.
    5: total_number_of_tracks string:MAX_ATTRIBUTE_VALUE_LENGTH;
    /// The category of composition of the media,
    6: genre string:MAX_ATTRIBUTE_VALUE_LENGTH;
    /// The length of the media in milliseconds (ms).
    7: playing_time string:MAX_ATTRIBUTE_VALUE_LENGTH;
    // TODO(https://fxbug.dev/42082325): Add BIP cover art handle.
};

/// Status of currently playing media on the TG.
/// Defined by AVRCP 1.6.2 section 6.7.1, Table 6.29.
type PlayStatus = table {
    /// The total length of the currently playing media, in milliseconds.
    /// Optional, if the TG does not support song length.
    1: song_length uint32;

    /// The current position of the playing media, in milliseconds elapsed.
    /// Optional, if the TG does not support song position.
    2: song_position uint32;

    /// The playback status of the currently playing media.
    /// Mandatory, the TG must respond with a PlaybackStatus.
    3: playback_status PlaybackStatus;
};

/// The maximum number of MediaPlayerItems that can be returned from a call to
/// GetMediaPlayerItems.
/// This value is arbitrary and is meant to limit the number of items that can be returned.
/// AVRCP 1.6.2, Section 6.10.4.2.2 defines the `Number of Items` parameter as a uint16.
const MAX_MEDIA_PLAYER_ITEMS uint16 = 16;

/// The Major Player Type associated with a media player.
/// Defined by AVRCP 1.6.2 section 6.10.2.1.
type MajorPlayerType = strict bits : uint8 {
    AUDIO = 0x01;

    VIDEO = 0x02;

    BROADCASTING_AUDIO = 0x04;

    BROADCASTING_VIDEO = 0x08;

    // Bits 4 - 7 are reserved.
};

/// The Player Sub Type associated with a media player.
/// Defined by AVRCP 1.6.2 section 6.10.2.1.
type PlayerSubType = strict bits : uint32 {
    AUDIO_BOOK = 0x01;

    PODCAST = 0x02;

    // Bits 2 - 31 are reserved.
};

// Player feature bits associated with feature bits in octets 0-7.
// Defined by AVRCP 1.6.2 section 6.10.2.1.
// Note that the feature bits are represented as big-endian 64 bit integer
// for convenience and the fidl bit value for each feature is set to work with that
// assumption.
type PlayerFeatureBits = strict bits : uint64 {
    // Octet 0.
    SELECT = 0x0100000000000000;
    UP = 0x0200000000000000;
    DOWN = 0x0400000000000000;
    LEFT = 0x0800000000000000;
    RIGHT = 0x1000000000000000;
    RIGHT_UP = 0x2000000000000000;
    RIGHT_DOWN = 0x4000000000000000;
    LEFT_UP = 0x8000000000000000;
    // Octet 1.
    LEFT_DOWN = 0x0001000000000000;
    ROOT_MENU = 0x0002000000000000;
    SETUP_MENU = 0x0004000000000000;
    CONTENTS_MENU = 0x0008000000000000;
    FAVORITE_MENU = 0x0010000000000000;
    EXIT = 0x0020000000000000;
    // ZERO-NINE are for pass through commands 0-9.
    ZERO = 0x0040000000000000;
    ONE = 0x0080000000000000;
    // Octet 2.
    TWO = 0x0000010000000000;
    THREE = 0x0000020000000000;
    FOUR = 0x0000040000000000;
    FIVE = 0x0000080000000000;
    SIX = 0x0000100000000000;
    SEVEN = 0x0000200000000000;
    EIGHT = 0x0000400000000000;
    NINE = 0x0000800000000000;
    // Octet 3.
    DOT = 0x0000000100000000;
    ENTER = 0x0000000200000000;
    CLEAR = 0x0000000400000000;
    CHANNEL_UP = 0x0000000800000000;
    CHANNEL_DOWN = 0x0000001000000000;
    PREVIOUS_CHANNEL = 0x0000002000000000;
    SOUND_SELECT = 0x0000004000000000;
    INPUT_SELECT = 0x0000008000000000;
    // Octet 4.
    DISPLAY_INFORMATION = 0x0000000001000000;
    HELP = 0x0000000002000000;
    PAGE_UP = 0x0000000004000000;
    PAGE_DOWN = 0x0000000008000000;
    POWER = 0x0000000010000000;
    VOLUME_UP = 0x0000000020000000;
    VOLUME_DOWN = 0x0000000040000000;
    MUTE = 0x0000000080000000;
    // Octet 5.
    PLAY = 0x0000000000010000;
    STOP = 0x0000000000020000;
    PAUSE = 0x0000000000040000;
    RECORD = 0x0000000000080000;
    REWIND = 0x0000000000100000;
    FAST_FORWARD = 0x0000000000200000;
    EJECT = 0x0000000000400000;
    FORWARD = 0x0000000000800000;
    // Octet 6.
    BACKWARD = 0x0000000000000100;
    ANGLE = 0x0000000000000200;
    SUBPICTURE = 0x0000000000000400;
    F1 = 0x0000000000000800;
    F2 = 0x0000000000001000;
    F3 = 0x0000000000002000;
    F4 = 0x0000000000004000;
    F5 = 0x0000000000008000;
    // Octet 7.
    VENDOR_UNIQUE = 0x0000000000000001;
    BASIC_GROUP_NAVIGATION = 0x0000000000000002;
    ADVANCED_CONTROL_PLAYER = 0x0000000000000004;
    BROWSING = 0x0000000000000008;
    SEARCHING = 0x0000000000000010;
    ADD_TO_NOW_PLAYING = 0x0000000000000020;
    UIDS_UNIQUE_IN_PLAYER_BROWSE_TREE = 0x0000000000000040;
    ONLY_BROWSABLE_WHEN_ADDRESSED = 0x0000000000000080;
};

// Player feature bits associated with feature bits in octets 8-15.
// Defined by AVRCP 1.6.2 section 6.10.2.1.
// Note that the feature bits are represented as big-endian 64 bit integer
// for convenience and the fidl bit value for each feature is set to work with that
// assumption.
type PlayerFeatureBitsExt = strict bits : uint64 {
    // Octet 0.
    ONLY_SEARCHABLE_WHEN_ADDRESSED = 0x0100000000000000;
    NOW_PLAYING = 0x0200000000000000;
    UID_PERSISTENCY = 0x0400000000000000;
    NUMBER_OF_ITEMS = 0x0800000000000000;
    COVER_ART = 0x1000000000000000;

    // Octet 0 bits 5 onwards are reserved.
};

/// Response data for the browseable items associated with a media player.
/// Defined by AVRCP 1.6.2 section 6.10.2.1.
type MediaPlayerItem = table {
    1: player_id uint16;
    2: major_type MajorPlayerType;
    3: sub_type PlayerSubType;
    4: playback_status PlaybackStatus;
    5: displayable_name string:255;
    6: feature_bits PlayerFeatureBits;
    7: feature_bits_ext PlayerFeatureBitsExt;
};

/// Response data for a browseable media element item.
/// Defined by AVRCP 1.6.2 section 6.10.2.3.
type MediaElementItem = table {
    1: media_element_uid uint64;
    2: media_type MediaType;
    3: displayable_name string:255;
    4: attributes MediaAttributes;
};

/// Response data for a browseable folder item.
/// Defined by AVRCP 1.6.2 section 6.10.2.2.
type FolderItem = table {
    1: folder_uid uint64;
    2: folder_type FolderType;
    3: is_playable bool;
    4: displayable_name string:255;
};

/// Items returned from GetFolderItems(Filesystem) may be either a folder or media element.
/// Defined by AVRCP 1.6.2 section 6.10.1.2.
/// Only one of `folder` or `media_element` should be set.
type FileSystemItem = strict union {
    1: folder FolderItem;
    2: media_element MediaElementItem;
};

/// Defined by AV\C Panel specification.
type AvcPanelCommand = strict enum : uint8 {
    SELECT = 0x00;
    UP = 0x01;
    DOWN = 0x02;
    LEFT = 0x03;
    RIGHT = 0x04;
    ROOT_MENU = 0x09;
    CONTENTS_MENU = 0x0b;
    FAVORITE_MENU = 0x0c;
    EXIT = 0x0d;
    ON_DEMAND_MENU = 0x0e;
    APPS_MENU = 0x0f;
    KEY_0 = 0x20;
    KEY_1 = 0x21;
    KEY_2 = 0x22;
    KEY_3 = 0x23;
    KEY_4 = 0x24;
    KEY_5 = 0x25;
    KEY_6 = 0x26;
    KEY_7 = 0x27;
    KEY_8 = 0x28;
    KEY_9 = 0x29;
    DOT = 0x2a;
    ENTER = 0x2b;
    CHANNEL_UP = 0x30;
    CHANNEL_DOWN = 0x31;
    CHANNEL_PREVIOUS = 0x32;
    INPUT_SELECT = 0x34;
    INFO = 0x35;
    HELP = 0x36;
    PAGE_UP = 0x37;
    PAGE_DOWN = 0x38;
    LOCK = 0x3a;
    POWER = 0x40;
    VOLUME_UP = 0x41;
    VOLUME_DOWN = 0x42;
    MUTE = 0x43;
    PLAY = 0x44;
    STOP = 0x45;
    PAUSE = 0x46;
    RECORD = 0x47;
    REWIND = 0x48;
    FAST_FORWARD = 0x49;
    EJECT = 0x4a;
    FORWARD = 0x4b;
    BACKWARD = 0x4c;
    LIST = 0x4d;
    F1 = 0x71;
    F2 = 0x72;
    F3 = 0x73;
    F4 = 0x74;
    F5 = 0x75;
    F6 = 0x76;
    F7 = 0x77;
    F8 = 0x78;
    F9 = 0x79;
    RED = 0x7a;
    GREEN = 0x7b;
    BLUE = 0x7c;
    YELLOW = 0x7d;
};

/// Errors from AVRCP 1.6.2 Section 6.15.3.
type BrowseControllerError = strict enum : uint32 {
    UNKNOWN_FAILURE = 1;
    TIMED_OUT = 2;
    REMOTE_NOT_CONNECTED = 3;
    COMMAND_NOT_IMPLEMENTED = 4;
    COMMAND_REJECTED = 5;
    COMMAND_UNEXPECTED = 6;
    PACKET_ENCODING = 7;
    PROTOCOL_ERROR = 8;
    CONNECTION_ERROR = 9;
    // More specific errors (i.e. derived from response's StatusCode).
    UID_CHANGED = 10;
    INVALID_DIRECTION = 11;
    INVALID_ID = 12;
    INVALID_SCOPE = 13;
    RANGE_OUT_OF_BOUNDS = 14;
    ITEM_NOT_PLAYABLE = 15;
    MEDIA_IN_USE = 16;
    PLAYER_NOT_BROWSABLE = 17;
    PLAYER_NOT_ADDRESSED = 18;
    NO_VALID_RESULTS = 19;
    NO_AVAILABLE_PLAYERS = 20;
};

/// The maximum number of MediaAttributeId that can be returned from a call to
/// GetFileSystemItems or GetNowPlayingItems.
/// This value based on list of media attributes available as per
/// AVRCP 1.6.2, 26 Appendix E: list of media attributes.
const MAX_NUM_MEDIA_ATTRIBUTES uint8 = 8;

/// Defined by AVRCP 1.6.2 Appendix E (media attributes).
/// 0x9-0xFFFFFFFF reserved for future use.
type MediaAttributeId = strict enum : uint32 {
    TITLE = 0x01;
    ARTIST_NAME = 0x02;
    ALBUM_NAME = 0x03;
    TRACK_NUMBER = 0x04;
    TOTAL_NUMBER_OF_TRACKS = 0x05;
    GENRE = 0x06;
    PLAYING_TIME = 0x07;
    DEFAULT_COVER_ART = 0x08;
};

/// The folder type associated with a folder item.
/// Defined by AVRCP 1.6.2 section 6.10.2.2.
type FolderType = strict enum : uint8 {
    MIXED = 0x00;
    TITLES = 0x01;
    ALBUMS = 0x02;
    ARTISTS = 0x03;
    GENRES = 0x04;
    PLAYLISTS = 0x05;
    YEARS = 0x06;
    // Bit 7 is reserved.
};

/// Type of a media element item.
/// Defined by AVRCP 1.6.2 section 6.10.2.3.
type MediaType = strict enum : uint8 {
    AUDIO = 0x00;
    VIDEO = 0x01;
    // Bit 0x02-0xFF is reserved.
};

/// The maximum number of MediaPlayerItems that can be returned from a call to
/// GetFileSystemItems.
/// This value is arbitrary and is meant to limit the number of items that can be returned.
/// AVRCP 1.6.2, Section 6.10.4.2.2 defines the `Number of Items` parameter as a uint16.
const MAX_FILESYSTEM_ITEMS uint16 = 16;

/// The maximum number of MediaPlayerItems that can be returned from a call to
/// GetFileSystemItems.
/// This value is arbitrary and is meant to limit the number of items that can be returned.
/// AVRCP 1.6.2, Section 6.10.4.2.2 defines the `Number of Items` parameter as a uint16.
const MAX_NOW_PLAYING_ITEMS uint16 = 16;

/// Set `get_all` if we want all attributes of a media element item.
/// Set `attribute_list` if we want to get only the specified attributes.
/// If `get_all` is set to false, it will be treated as attribute request
/// with emtpy list of attribute IDs.
type AttributeRequestOption = strict union {
    1: get_all bool;
    2: attribute_list vector<MediaAttributeId>:MAX_NUM_MEDIA_ATTRIBUTES;
};

/// Relative path from the current directory.
/// As per AVRCP 1.6.2 Section 6.10.4.1.1, it either specifies a parent folder
/// for Folder Up direction or a child folder by its unique ID for Folder
/// Down direction.
type Path = flexible union {
    1: parent struct {};
    2: child_folder_uid uint64;
};
