|  | // 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); | 
|  | }; |