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

@for_deprecated_c_bindings
protocol Hci {
    /// Opens a command/event 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.
    OpenCommandChannel(resource struct {
        channel zx.handle:CHANNEL;
    });

    /// Opens a acl data 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.
    OpenAclDataChannel(resource struct {
        channel zx.handle:CHANNEL;
    });

    /// Opens a snoop 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.
    OpenSnoopChannel(resource struct {
        channel zx.handle:CHANNEL;
    });
};
