blob: 68567213e750299f3eeaa77f491083662e80d8a3 [file] [log] [blame]
// Copyright 2018 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.host;
using fuchsia.bluetooth;
using fuchsia.bluetooth.control;
using fuchsia.bluetooth.gatt;
using fuchsia.bluetooth.le;
using fuchsia.bluetooth.bredr;
// Interface for interacting with a Bluetooth host device (bt-host)
interface Host {
// The following methods fulfill a given interface request. bt-host device
// will start processing FIDL messages. If the request cannot be fulfilled,
// the bt-host device will close its end of the given channel.
1: RequestLowEnergyCentral(request<fuchsia.bluetooth.le.Central> central);
2: RequestLowEnergyPeripheral(request<fuchsia.bluetooth.le.Peripheral> peripheral);
3: RequestGattServer(request<fuchsia.bluetooth.gatt.Server> server);
4: RequestProfile(request<fuchsia.bluetooth.bredr.Profile> profile);
// Shuts down the host, ending all active Bluetooth procedures:
//
// * All FIDL interface handles associated with this host are closed and all
// connections initiated via FIDL clients are severed.
// * All scan, discovery, and advertising procedures are stopped.
// * Bonded devices are cleared and removed from the auto-connect lists.
// * Auto-connected peripherals are disconnected.
//
// This effectively resets the host to its initial state and the host remains
// available for future requests.
//
// The Host will continue to send OnDeviceUpdated events as procedures get
// terminated.
5: Close();
// Returns information about the Bluetooth adapter managed by this host.
6: GetInfo() -> (fuchsia.bluetooth.control.AdapterInfo info);
// Returns a list of all known connectable devices, included those that are
// currently connected and/or bonded. This list does not include
// non-connectable devices such as LE broadcasters.
//
// Notes:
//
// - When used in the GAP central role (BR/EDR or LE) the listed devices are
// obtained during discovery and connection procedures. While in the
// peripheral role, this will contain devices that have successfully initiated
// connections to this host.
//
// - This list contains connectable devices that are discovered or connected
// via other interfaces obtained using the interface request methods declared
// above.
7: ListDevices() -> (vector<fuchsia.bluetooth.control.RemoteDevice> devices);
// Sets the local name for this adapter.
8: SetLocalName(string local_name) -> (fuchsia.bluetooth.Status status);
// Initiates a general discovery procedure for BR/EDR and LE devices. On success, discovered
// devices will be reported via AdapterDelegate.OnDeviceDiscovered().
//
// On the LE transport, only general-discoverable and connectable peripherals will be reported.
//
// Discovery will continue until it is terminated via StopDiscovery() or if the proxy to the
// Adapter gets disconnected. If the device does not support BR/EDR, only LE
// discovery will be performed.
//
// An OnDeviceUpdated event will be sent when the discovery procedures are
// started.
9: StartDiscovery() -> (fuchsia.bluetooth.Status status);
// Terminates discovery if one was started via StartDiscovery(). The AdapterDelegate will stop
// receiving device discovery notifications.
//
// NOTE: If another client is performing discovery (e.g. via its own le.Central interface handle),
// then the system will continue performing device discovery even if this method results in
// success.
10: StopDiscovery() -> (fuchsia.bluetooth.Status status);
// Sets whether this host should be connectable.
11: SetConnectable(bool enabled) -> (fuchsia.bluetooth.Status status);
// Sets whether this host should be discoverable.
12: SetDiscoverable(bool enabled) -> (fuchsia.bluetooth.Status status);
// Enable or disable a passive LE background scan. When enabled, the bt-host
// device will continuously perform a passive LE scan in the background when
// no device discovery sessions are active and accept connection requests from
// bonded peripherals.
13: EnableBackgroundScan(bool enabled);
// Assigns the pairing delegate that will respond to authentication challenges using the given
// I/O capabilities. Setting a pairing delegate cancels any on-going pairing procedure started
// using a previous delegate. Pairing requests will be rejected if no PairingDelegate has been
// assigned.
14: SetPairingDelegate(
fuchsia.bluetooth.control.InputCapabilityType input,
fuchsia.bluetooth.control.OutputCapabilityType output,
fuchsia.bluetooth.control.PairingDelegate? delegate);
// TODO(NET-1148): Add Forget() method to remove a device from the cache.
// Adds existing bonded devices to the host. The host will be configured to automatically connect
// to these devices when they are in range and connectable. Future connections will be encrypted
// using the provided bonding data.
110: AddBondedDevices(vector<BondingData> bonds) -> (fuchsia.bluetooth.Status status);
// ===== Events =====
// Notifies when the adapter state changes.
101: -> OnAdapterStateChanged(fuchsia.bluetooth.control.AdapterState state);
// Events that are sent when a connectable device is added, updated, or
// removed as a result of connection and discovery procedures.
102: -> OnDeviceUpdated(fuchsia.bluetooth.control.RemoteDevice device);
103: -> OnDeviceRemoved(string identifier);
// Notifies when bonding data for a device has been updated.
104: -> OnNewBondingData(BondingData data);
// TODO(NET-1148): Introduce a "OnBondRemoved()" event to notify when existing
// keys become stale.
};