| // Copyright 2019 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.bluetooth; |
| |
| using zx; |
| |
| type ScoCodingFormat = flexible enum : uint8 { |
| CVSD = 1; |
| MSBC = 2; |
| }; |
| |
| type ScoEncoding = flexible enum : uint8 { |
| BITS_8 = 1; |
| BITS_16 = 2; |
| }; |
| |
| type ScoSampleRate = flexible enum : uint8 { |
| KHZ_8 = 1; |
| KHZ_16 = 2; |
| }; |
| |
| open protocol Hci { |
| /// Open the two-way HCI command channel for sending HCI commands and |
| /// receiving event packets. Returns ZX_ERR_ALREADY_BOUND if the channel |
| /// is already open. |
| flexible OpenCommandChannel(resource struct { |
| channel zx.Handle:CHANNEL; |
| }) -> () error zx.Status; |
| |
| /// Open the two-way HCI ACL data channel. |
| /// Returns ZX_ERR_ALREADY_BOUND if the channel is already open. |
| flexible OpenAclDataChannel(resource struct { |
| channel zx.Handle:CHANNEL; |
| }) -> () error zx.Status; |
| |
| // TODO(b/315877895): Define a new protocol to hold SCO API calls. |
| /// Opens a SCO channel on the provided handle. The zircon channel is |
| /// closed in the event of an error opening the hci channel or if the hci |
| /// channel is already associated with a handle to another zircon channel. |
| /// Returns ZX_ERR_NOT_SUPPORTED if SCO is not supported by the current vendor or transport |
| /// driver. |
| /// Returns ZX_ERR_ALREADY_BOUND if the channel is already open. |
| flexible OpenScoDataChannel(resource struct { |
| channel zx.Handle:CHANNEL; |
| }) -> () error zx.Status; |
| |
| /// Configure the HCI for a SCO connection with the indicated parameters. |
| /// This must be called before sending/receiving data on the SCO channel. |
| /// Returns ZX_ERR_NOT_SUPPORTED if SCO is not supported by the current vendor or transport |
| /// driver. |
| flexible ConfigureSco(struct { |
| coding_format ScoCodingFormat; |
| encoding ScoEncoding; |
| sample_rate ScoSampleRate; |
| }) -> () error zx.Status; |
| |
| /// Releases resources held by an active SCO connection. Must be called |
| /// when a SCO connection is closed. |
| /// Returns ZX_ERR_NOT_SUPPORTED if SCO is not supported by the current vendor or transport |
| /// driver. |
| flexible ResetSco() -> () error zx.Status; |
| |
| /// Opens a channel on the provided handle for sending and receiving isochronous data packets. |
| /// The zircon channel is closed in the event of an error opening the hci channel or if the hci |
| /// channel is already associated with a handle to another zircon channel. |
| /// Returns ZX_ERR_NOT_SUPPORTED if ISO is not supported by the current vendor or transport |
| /// driver. |
| /// Returns ZX_ERR_ALREADY_BOUND if the channel is already open. |
| flexible OpenIsoDataChannel(resource struct { |
| channel zx.Handle:CHANNEL; |
| }) -> () error zx.Status; |
| |
| /// Open an output-only channel for monitoring HCI traffic. |
| /// The format of each message is: [1-octet flags] [n-octet payload] |
| /// The flags octet is a bitfield with the following values defined: |
| /// - 0x00: The payload represents a command packet sent from the host to the |
| /// controller. |
| /// - 0x01: The payload represents an event packet sent by the controller. |
| /// Returns ZX_ERR_ALREADY_BOUND if the channel is already open. |
| flexible OpenSnoopChannel(resource struct { |
| channel zx.Handle:CHANNEL; |
| }) -> () error zx.Status; |
| }; |
| |
| /// Wrap the protocol in a service that will be exposed to the child driver. |
| service HciService { |
| hci client_end:Hci; |
| }; |