// Copyright 2022 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.audio.device;

/// Use the `Provider` interface to manually add devices that do not use the devfs
/// mechanism. (Devices that use devfs are automatically added, upon detection.)
@discoverable
closed protocol Provider {
    strict AddDevice(resource table {
        /// The device's high-level name. Must not be an empty string.
        ///
        /// Required.
        1: device_name string:MAX_STRING_SIZE;

        /// Indicates the protocol used by the device, as well as (if StreamConfig) whether
        /// it is an input (a source of audio) or an output (a destination for audio).
        ///
        /// Required.
        2: device_type DeviceType;

        /// The client_end of the protocol channel (Codec, Composite, Dai or StreamConfig)
        /// that this service will use to configure/observe the device.
        /// For now, `AddDevice` only accepts a `codec_client`, `composite_client` or
        /// `stream_config_client` here.
        ///
        /// Required.
        /// # Deprecation
        ///
        /// Codec, Dai and StreamConfig are not supported anymore, instead use an
        /// [Audio Composite](https://fuchsia.dev/fuchsia-src/development/audio/drivers/composite)
        /// , see
        /// [Audio Drivers Architecture](https://fuchsia.dev/fuchsia-src/development/audio/drivers/architecture)
        @available(deprecated=HEAD)
        3: driver_client DriverClient;
    }) -> (table {}) error ProviderAddDeviceError;
};

/// Errors returned by the `Provider` protocol.
type ProviderAddDeviceError = flexible enum {
    /// The required `device_name` is incorrectly formed, empty or missing.
    INVALID_NAME = 1;

    /// The required `device_type` is missing.
    INVALID_TYPE = 2;

    /// The required `driver_client` is invalid or missing.
    INVALID_DRIVER_CLIENT = 3;

    /// The protocol in `driver_client` is incompatible with `device_type` or is not supported yet.
    WRONG_CLIENT_TYPE = 4;
};
