blob: 08d7bcd17e16f8c919de76f9f672748621d7e0c2 [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.
RequestLowEnergyCentral(request<fuchsia.bluetooth.le.Central> central);
RequestLowEnergyPeripheral(request<fuchsia.bluetooth.le.Peripheral> peripheral);
RequestGattServer(request<fuchsia.bluetooth.gatt.Server> server);
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.
Close();
// Returns information about the Bluetooth adapter managed by this host.
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.
ListDevices() -> (vector<fuchsia.bluetooth.control.RemoteDevice> devices);
// Sets the local name for this adapter.
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.
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.
StopDiscovery() -> (fuchsia.bluetooth.Status status);
// Sets whether this host should be connectable.
SetConnectable(bool enabled) -> (fuchsia.bluetooth.Status status);
// Sets whether this host should be discoverable.
SetDiscoverable(bool enabled) -> (fuchsia.bluetooth.Status status);
// Establish a BR/EDR and/or LE connection to the remote device with identifier |device_id|:
//
// - If the device is known to support the BR/EDR transport then a logical link over that
// transport will be established to the device. If the connection attempt is successful,
// local services registered using "RequestProfile()" will be available to the peer.
// Traditional services discovered on the peer will be notified to local services
// asynchronously.
//
// - If the device is known to support the LE transport then a logical link over that
// transport will be established to the device. If the connection attempt is successful,
// GATT services in the local database (populated via RequestGattServer()) will become
// available to the peer. Similarly, remote GATT services that are discovered on the
// peer will become available to holders of a gatt.Client capability and to device drivers
// that can bind to the bt-gatt-svc class of devices.
//
// The result of the procedure will be communicated via |status|. If the remote device
// supports both BR/EDR and LE transports and a link cannot be established over both, then an
// error Status will be returned and neither transport will be connected.
Connect(string device_id) -> (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.
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.
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.
AddBondedDevices(vector<BondingData> bonds) -> (fuchsia.bluetooth.Status status);
// ===== Events =====
// Notifies when the adapter state changes.
-> 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.
-> OnDeviceUpdated(fuchsia.bluetooth.control.RemoteDevice device);
-> OnDeviceRemoved(string identifier);
// Notifies when bonding data for a device has been updated.
-> OnNewBondingData(BondingData data);
// TODO(NET-1148): Introduce a "OnBondRemoved()" event to notify when existing
// keys become stale.
};