| // 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.bluetooth.bredr; |
| |
| using fuchsia.hardware.audio; |
| using zx; |
| |
| enum ScoErrorCode { |
| FAILURE = 1; |
| CANCELLED = 2; |
| INVALID_ARGUMENTS = 3; |
| }; |
| |
| /// Codec parameter sets defined in the Hands-Free Profile specification (v1.8, section 5.7). |
| enum HfpParameterSet : uint8 { |
| MSBC_T1 = 1; |
| MSBC_T2 = 2; |
| CVSD_S1 = 3; |
| CVSD_S2 = 4; |
| CVSD_S3 = 5; |
| CVSD_S4 = 6; |
| CVSD_D0 = 7; |
| CVSD_D1 = 8; |
| }; |
| |
| /// The coding format used for synchronous connection data. |
| enum CodingFormat : uint8 { |
| MULAW = 1; |
| ALAW = 2; |
| CVSD = 3; |
| TRANSPARENT = 4; |
| LINEAR_PCM = 5; |
| MSBC = 6; |
| }; |
| |
| /// Indicates the audio transport that should be used for the data on a synchronous |
| /// connection. |
| enum DataPath : uint8 { |
| /// The HCI transport. |
| HOST = 1; |
| |
| /// Transport audio data directly between the controller and the audio hardware. |
| // TODO(fxbug.dev/62161): Document how offloading is configured. |
| OFFLOAD = 2; |
| |
| /// The audio test mode transport. See Core Spec v5.2, Vol 4, Part E, Section 7.6.2 for details. |
| TEST = 3; |
| }; |
| |
| table ScoConnectionParameters { |
| /// Set of SCO parameters from the Hands-Free Profile specification. |
| /// Required. |
| 1: HfpParameterSet parameter_set; |
| |
| /// The over-the-air coding format used for transmitted and received data. |
| /// Required. |
| 2: CodingFormat air_coding_format; |
| |
| /// Frame size produced by the codec in the context of over-the-air coding. |
| /// Required. |
| 3: uint16 air_frame_size; |
| |
| /// Host-controller data rate in bytes/second. |
| /// Required. |
| 4: uint32 io_bandwidth; |
| |
| /// The coding format used over the transport. |
| /// Required. |
| 5: CodingFormat io_coding_format; |
| |
| /// The number of bits in each sample/frame of data. |
| /// Required. |
| 6: uint16 io_frame_size; |
| |
| /// The data format over the transport for linear samples. |
| /// Ignored for non-linear coding formats. |
| /// Optional. |
| /// SIGNED indicates 2’s complement sign encoding. |
| /// FLOAT is not supported. |
| 7: fuchsia.hardware.audio.SampleFormat io_pcm_data_format; |
| |
| /// For linear samples, indicates how many bit positions the MSB of the sample is away |
| /// from the MSB of the data. |
| /// Ignored for non-linear coding formats. |
| /// Optional. |
| /// Default: 0. |
| 8: uint8 io_pcm_sample_payload_msb_position; |
| |
| /// The data transport. |
| /// Required. |
| 9: DataPath path; |
| }; |
| |
| resource table ScoConnection { |
| /// Socket for transmitting/receiving data over the synchronous connection. |
| /// Closing the socket will close the connection. |
| /// If audio is offloaded, data written to the socket will be dropped and reads will fail. |
| 1: zx.handle:SOCKET socket; |
| }; |
| |
| /// Represents an active synchronous connection request by a profile. |
| /// Either `Connected()` or `Error()` will be called and then server will close the protocol. |
| protocol ScoConnectionReceiver { |
| /// Called upon successful connection establishment. |
| Connected(ScoConnection connection); |
| |
| /// Called when connection establishment fails or is cancelled by the host. |
| Error(ScoErrorCode error); |
| }; |