blob: 6ddb103a82f557785d99d7d6cfd084e1037c37f8 [file] [log] [blame]
// Copyright 2020 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.hardware.audio;
using zx;
const uint32 MAX_DAI_UI_STRING_SIZE = 256;
const uint32 MAX_COUNT_DAI_FORMATS = 64;
table DaiProperties {
/// Dai type is input or output. Required.
1: bool is_input;
/// Name of the DAI interface provider manufacturer.
2: string:MAX_DAI_UI_STRING_SIZE manufacturer;
/// Product name of the DAI interface provider.
3: string:MAX_DAI_UI_STRING_SIZE product_name;
};
/// For an overview see
/// [Digital Audio Interface](//docs/concepts/drivers/driver_interfaces/audio_dai.md)
protocol Dai {
/// Resets the DAI HW. The `ring_buffer` channel obtained via `CreateRingBuffer` may be closed
/// by the driver, in this case the client needs to obtain a new `ring_buffer`.
/// `Reset` returns when the reset is completed. If the driver can't successfully reset the HW,
/// it will close the DAI protocol channel, in this case the client may obtain a new DAI
/// protocol channel and retry.
Reset() -> ();
/// Retrieves top level static properties.
GetProperties() -> (DaiProperties properties);
/// Retrieves the DAI formats supported by the DAI, if not available at the time the DAI
/// may reply with an error status and the client may retry at a later time.
/// Retrieving multiple `DaiSupportedFormats` allows for cases where exclusive combinations of
/// the parameters in SupportedFormats may be supported.
GetDaiFormats() -> (vector<DaiSupportedFormats>:MAX_COUNT_DAI_FORMATS dai_formats)
error zx.status;
/// Retrieves the ring buffer formats supported by the DAI, if not available at the time the DAI
/// may reply with an error status and the client may retry at a later time.
/// Retrieving multiple `SupportedFormats` allows for cases where exclusive combinations of
/// the parameters in `SupportedFormats` may be supported.
GetRingBufferFormats() -> (vector<SupportedFormats>:MAX_COUNT_FORMATS ring_buffer_formats)
error zx.status;
/// `CreateRingBuffer` is sent by clients to select both a DAI format and a ring buffer format
/// based on information that the driver provides in `GetDaiFormats` and `GetRingBufferFormats`,
/// what is supported by the client, and any other requirement. The `ring_buffer` channel is
/// used to control the audio buffer, if a previous ring buffer channel had been established and
/// was still active, the driver must close that (ring buffer) channel and make every attempt to
/// gracefully quiesce any on-going streaming operations in the process.
CreateRingBuffer(DaiFormat dai_format, Format ring_buffer_format,
request<RingBuffer> ring_buffer);
};