<link rel="stylesheet" href="../style.css" />

[TOC]
# fuchsia.bluetooth.sys

<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 7</span></div>


## **PROTOCOLS**

## Access {#Access}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=47)*
<p>Protocol that abstracts the operational modes and procedures defined in the Bluetooth Generic
Access Profile (see Core Specification v5.1, Vol 3, Part C).</p>
<p>The procedures under this protocol apply to the system as a whole. The Bluetooth controller that
plays an active role in these procedures can be managed using the HostWatcher protocol.</p>
<p>The procedures initiated by an Access protocol instance are terminated when the underlying
channel is closed.</p>


### Connect {#Access.Connect}

<p>Initiate a connection to the peer with the given <code>id</code>. This method connects both BR/EDR and
LE transports depending on the technologies that the peer is known to support.</p>
<ul>
<li>request <code>id</code> The id of the peer to connect.</li>
</ul>
<ul>
<li>error Reports <code>Error.FAILED</code> if a connection to the peer cannot be initiated.</li>
<li>error Reports <code>Error.PEER_NOT_FOUND</code> if <code>id</code> is not recognized.</li>
</ul>



#### Request {#Access.Connect_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
</table>


#### Response {#Access.Connect_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Access_Connect_Result'>Access_Connect_Result</a></code>
            </td>
        </tr>
</table>

### Disconnect {#Access.Disconnect}

<p>Disconnect all logical links to the peer with the given <code>id</code>. This includes LE and
BR/EDR links that have been initiated using all Access and fuchsia.bluetooth.le protocol
instances.</p>
<ul>
<li>request <code>id</code> The id of the peer to disconnect.</li>
</ul>
<ul>
<li>error Reports <code>Error.PEER_NOT_FOUND</code> if <code>id</code> is not recognized.</li>
</ul>



#### Request {#Access.Disconnect_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
</table>


#### Response {#Access.Disconnect_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Access_Disconnect_Result'>Access_Disconnect_Result</a></code>
            </td>
        </tr>
</table>

### Forget {#Access.Forget}

<p>Removes all bonding information and disconnects any existing links with the peer with the
given <code>id</code>.</p>
<ul>
<li>request <code>id</code> The id of the peer to forget.</li>
</ul>
<ul>
<li>error Reports <code>Error.PEER_NOT_FOUND</code> if <code>id</code> is not recognized.</li>
</ul>



#### Request {#Access.Forget_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
</table>


#### Response {#Access.Forget_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Access_Forget_Result'>Access_Forget_Result</a></code>
            </td>
        </tr>
</table>

### MakeDiscoverable {#Access.MakeDiscoverable}

<p>Put the system into the &quot;General Discoverable&quot; mode on the BR/EDR transport. The active
host will respond to general inquiry (by regularly entering the inquiry scan mode).</p>
<ul>
<li>request <code>token</code> <a class='link' href='../fuchsia.bluetooth.sys/'>fuchsia.bluetooth.sys</a>/<a class='link' href='../fuchsia.bluetooth.sys/#ProcedureToken'>ProcedureToken</a> that will remain valid while a
discoverable mode session is active. NOTE: The system may remain discoverable until all
<a class='link' href='../fuchsia.bluetooth.sys/'>fuchsia.bluetooth.sys</a>/<a class='link' href='../fuchsia.bluetooth.sys/#Access'>Access</a> clients drop their tokens.</li>
</ul>
<ul>
<li>error Reports Error.FAILED if inquiry mode cannot be entered.</li>
</ul>



#### Request {#Access.MakeDiscoverable_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>token</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#ProcedureToken'>ProcedureToken</a>&gt;</code>
            </td>
        </tr>
</table>


#### Response {#Access.MakeDiscoverable_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Access_MakeDiscoverable_Result'>Access_MakeDiscoverable_Result</a></code>
            </td>
        </tr>
</table>

### Pair {#Access.Pair}

<p>Initiate a pairing to the remote <code>id</code> with the given <code>options</code>.
This call completes only once the pairing procedure has completed or aborted.
Returns an error if no connected peer with <code>id</code> is found or the pairing procedure fails.
If the named peer is already paired, this returns immediately with a success value - unless
the pairing is over LE and the PairingOptions.le_security_level is more secure than the
current security level, in which case we will attempt to raise security to the requested
level.</p>
<p>Pairing will take place over whichever transport is indicated by <code>options.transport</code>. If
that transport isn't currently connected, the pairing will fail with <code>Error.PEER_NOT_FOUND</code>.
Currently, if DUAL_MODE is requested, we will attempt to pair over the LE transport.</p>
<ul>
<li>request <code>id</code> The id of the peer to initiate pairing with</li>
<li>request <code>options</code> The configuration options to use for this pairing request</li>
</ul>
<ul>
<li>error Reports <code>Error.PEER_NOT_FOUND</code> if <code>id</code> is not recognized, or the peer is not
connected on the requested transport.</li>
<li>error Reports <code>Error.INVALID_ARGUMENTS</code> if ill-formed options are passed</li>
<li>error Reports <code>Error.FAILED</code> if an error occurs during pairing</li>
</ul>



#### Request {#Access.Pair_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
        <tr>
            <td><code>options</code></td>
            <td>
                <code><a class='link' href='#PairingOptions'>PairingOptions</a></code>
            </td>
        </tr>
</table>


#### Response {#Access.Pair_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Access_Pair_Result'>Access_Pair_Result</a></code>
            </td>
        </tr>
</table>

### SetDeviceClass {#Access.SetDeviceClass}

<p>Set the local device class that will be visible to nearby peers when the system is in
discoverable mode.</p>
<ul>
<li>request <code>device_class</code> The device class to assign to the system.</li>
</ul>



#### Request {#Access.SetDeviceClass_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>device_class</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#DeviceClass'>DeviceClass</a></code>
            </td>
        </tr>
</table>


### SetLocalName {#Access.SetLocalName}

<p>Assign a local name for the Bluetooth system. This name will be visible to nearby peers
when the system is in discoverable mode and during name discovery procedures.</p>
<ul>
<li>request <code>name</code> The complete local name to assign to the system.</li>
</ul>



#### Request {#Access.SetLocalName_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>name</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#DeviceName'>DeviceName</a></code>
            </td>
        </tr>
</table>


### SetPairingDelegate {#Access.SetPairingDelegate}

<p>Assign a PairingDelegate to respond to drive pairing procedures. The delegate will be
configured to use the provided I/O capabilities to determine the pairing method.</p>
<p>Only one PairingDelegate can be registered at a time. Closing a PairingDelegate aborts all
on-going pairing procedures associated with a delegate and closes the PairingDelegate
previously assigned for this Access instance.</p>
<ul>
<li>request <code>input</code> Bluetooth input capability</li>
<li>request <code>output</code> Bluetooth output capability</li>
<li>request <code>delegate</code> The client end of a PairingDelegate channel.</li>
</ul>
<h1>Deprecation - This method is folded into the fuchsia.bluetooth.sys/Pairing protocol. See</h1>
<p>fxbug.dev/98413 for more details on the migration.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Deprecated: HEAD</span> <span class="fidl-attribute fidl-version">Added: 7</span></div>



#### Request {#Access.SetPairingDelegate_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>input</code></td>
            <td>
                <code><a class='link' href='#InputCapability'>InputCapability</a></code>
            </td>
        </tr>
        <tr>
            <td><code>output</code></td>
            <td>
                <code><a class='link' href='#OutputCapability'>OutputCapability</a></code>
            </td>
        </tr>
        <tr>
            <td><code>delegate</code></td>
            <td>
                <code><a class='link' href='#PairingDelegate'>PairingDelegate</a></code>
            </td>
        </tr>
</table>


### StartDiscovery {#Access.StartDiscovery}

<p>Start a general discovery procedure. All general discoverable BR/EDR, LE,
and BR/EDR/LE devices will appear in the peer list, which can be observed by calling
<a class='link' href='../fuchsia.bluetooth.sys/'>fuchsia.bluetooth.sys</a>/<a class='link' href='../fuchsia.bluetooth.sys/#Access.WatchPeers'>Access.WatchPeers</a>.</p>
<ul>
<li>request <code>token</code> <a class='link' href='../fuchsia.bluetooth.sys/'>fuchsia.bluetooth.sys</a>/<a class='link' href='../fuchsia.bluetooth.sys/#ProcedureToken'>ProcedureToken</a> that will remain valid while
discovery is in progress. NOTE: The radio will continue performing discovery until all
<a class='link' href='../fuchsia.bluetooth.sys/'>fuchsia.bluetooth.sys</a>/<a class='link' href='../fuchsia.bluetooth.sys/#Access'>Access</a> drop their tokens.</li>
</ul>
<ul>
<li>error Reports Error.FAILED if discovery on either transport cannot be initiated.</li>
</ul>



#### Request {#Access.StartDiscovery_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>token</code></td>
            <td>
                <code>server_end&lt;<a class='link' href='#ProcedureToken'>ProcedureToken</a>&gt;</code>
            </td>
        </tr>
</table>


#### Response {#Access.StartDiscovery_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Access_StartDiscovery_Result'>Access_StartDiscovery_Result</a></code>
            </td>
        </tr>
</table>

### WatchPeers {#Access.WatchPeers}

<p>Returns a list of all peers (connectable Bluetooth devices) known to the system. The first
call results in a snapshot of all known peers to be sent immediately in the <code>updated</code> return
paremeter. Subsequent calls receive a response only when one or more entries have been
added, modified, or removed from the entries reported since the most recent call.</p>
<ul>
<li>response <code>updated</code> Peers that were added or updated since the last call to WatchPeers().</li>
<li>response <code>removed</code> Ids of peers that were removed since the last call to WatchPeers().</li>
</ul>



#### Request {#Access.WatchPeers_Request}

&lt;EMPTY&gt;


#### Response {#Access.WatchPeers_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>updated</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#Peer'>Peer</a>&gt;</code>
            </td>
        </tr>
        <tr>
            <td><code>removed</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a>&gt;</code>
            </td>
        </tr>
</table>

## Bootstrap {#Bootstrap}
*Defined in [fuchsia.bluetooth.sys/bootstrap.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/bootstrap.fidl;l=22)*
<p>Protocol used to initialize persistent core Bluetooth data. This protocol populates data that
determine the identity of this device as perceived by other Bluetooth devices.</p>
<p>This protocol can be obtained only before the core Bluetooth host subsystem has generated its
own identity. Once initial data is committed, this capability becomes unavailable and remains
unavailable even if new Bluetooth adapters are attached.</p>
<p>Due to the privacy and bonding secrets involved, as well as the capability to make this device
assume the Bluetooth identity of another device, this protocol should only be exposed to
privileged components that can vouchsafe the origin of the data.</p>


### AddIdentities {#Bootstrap.AddIdentities}

<p>Adds identities to be added to the unpopulated Bluetooth stack.</p>
<p>Repeated calls will append identities.</p>



#### Request {#Bootstrap.AddIdentities_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>identities</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#Identity'>Identity</a>&gt;</code>
            </td>
        </tr>
</table>


### Commit {#Bootstrap.Commit}

<p>Writes all added bootstrapping data to the Bluetooth core stack. The server will close the
channel regardless of success. Returns without error if successful and the stack will be
considered initialized even if no bootstrapping data was written. Returns
INVALID_HOST_IDENTITY if any host or bonded peer data is insufficient or inconsistent, with
no effect (the client may retry by obtaining another protocol handle).</p>



#### Request {#Bootstrap.Commit_Request}

&lt;EMPTY&gt;


#### Response {#Bootstrap.Commit_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Bootstrap_Commit_Result'>Bootstrap_Commit_Result</a></code>
            </td>
        </tr>
</table>

## Configuration {#Configuration}
*Defined in [fuchsia.bluetooth.sys/configuration.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/configuration.fidl;l=43)*
<p>Protocol to configure parameters and features for the core Bluetooth system. These settings
apply to all bt-host drivers known to the system.</p>
<p>This protocol should only be exposed to highly privileged components (e.g. Bluetooth developer
tools in a testing/qualification environment).</p>


### Update {#Configuration.Update}

<p>Applies the fields present in <code>settings</code> to all bt-host drivers known to the system. Any
fields not present in <code>settings</code> will remain unchanged.</p>
<ul>
<li>request <code>settings</code> The new settings for active bt-host drivers - only modified settings
need be present.</li>
</ul>
<ul>
<li>response <code>result</code> A fully-populated table with the resultant settings after the new
settings are applied.</li>
</ul>



#### Request {#Configuration.Update_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>settings</code></td>
            <td>
                <code><a class='link' href='#Settings'>Settings</a></code>
            </td>
        </tr>
</table>


#### Response {#Configuration.Update_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#Settings'>Settings</a></code>
            </td>
        </tr>
</table>

## HostWatcher {#HostWatcher}
*Defined in [fuchsia.bluetooth.sys/host_watcher.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/host_watcher.fidl;l=56)*
<p>Protocol used to observe and manage the Bluetooth controllers on the system.</p>


### SetActive {#HostWatcher.SetActive}

<p>Designates the host with the given <code>id</code> as active. All Bluetooth procedures will be routed
over this host. Any previously assigned active host will be disabled and all of its pending
procedures will be terminated.</p>
<ul>
<li>error This can fail if a host with <code>id</code> was not found.</li>
</ul>



#### Request {#HostWatcher.SetActive_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#HostId'>HostId</a></code>
            </td>
        </tr>
</table>


#### Response {#HostWatcher.SetActive_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>result</code></td>
            <td>
                <code><a class='link' href='#HostWatcher_SetActive_Result'>HostWatcher_SetActive_Result</a></code>
            </td>
        </tr>
</table>

### Watch {#HostWatcher.Watch}

<p>Obtain a list of all available Bluetooth controllers and their state. A response is sent
only if this list has changed since the last time the client has sent this message.</p>



#### Request {#HostWatcher.Watch_Request}

&lt;EMPTY&gt;


#### Response {#HostWatcher.Watch_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>hosts</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#HostInfo'>HostInfo</a>&gt;</code>
            </td>
        </tr>
</table>

## Pairing {#Pairing}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=11)*
<p>Allows system clients to enable Bluetooth pairing.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>


### SetDelegate {#Pairing.SetDelegate}

<p>Assign a PairingDelegate2 to handle pairing procedures.  The provided
I/O capabilities will be used to determine the methods used.</p>
<p>Only one of PairingDelegate or PairingDelegate2 can be set at a time
system-wide.  If this is called while another delegate is set, the new
delegate will be closed immediately.</p>
<p>Closing a PairingDelegate2 unsets the pairing delegate. Ongoing
PairingRequests can still be completed, but new requests will act as if
no delegate is set.</p>
<p>If no delegate is set, all pairings will be rejected even if the
peer connection was initiated by the local device.</p>
<ul>
<li>request <code>input</code> Bluetooth input capability, see <code>InputCapability</code></li>
<li>request <code>output</code> Bluetooth output capability, see <code>OutputCapability</code></li>
<li>request <code>delegate</code> PairingDelegate2 which will receive pairing requests</li>
</ul>



#### Request {#Pairing.SetDelegate_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>input</code></td>
            <td>
                <code><a class='link' href='#InputCapability'>InputCapability</a></code>
            </td>
        </tr>
        <tr>
            <td><code>output</code></td>
            <td>
                <code><a class='link' href='#OutputCapability'>OutputCapability</a></code>
            </td>
        </tr>
        <tr>
            <td><code>delegate</code></td>
            <td>
                <code><a class='link' href='#PairingDelegate2'>PairingDelegate2</a></code>
            </td>
        </tr>
</table>


### SetPairingDelegate {#Pairing.SetPairingDelegate}

<p>Assign a PairingDelegate to respond to pairing procedures. The provided I/O capabilities
will be used to determine the pairing methods used.</p>
<p>Only one PairingDelegate can be set at a time system-wide - if this is called
while another delegate is set, the new delegate will be closed immediately.
Closing a PairingDelegate after it is set aborts all ongoing pairing procedures
without accepting and unsets the delegate.</p>
<p>If no PairingDelegate is set, all pairings will be rejected even if the
peer connection was initiated by the local device.</p>
<ul>
<li>request <code>input</code> Bluetooth input capability, see <code>InputCapability</code></li>
<li>request <code>output</code> Bluetooth output capability, see <code>OutputCapability</code></li>
<li>request <code>delegate</code> PairingDelegate which will receive pairing requests</li>
</ul>



#### Request {#Pairing.SetPairingDelegate_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>input</code></td>
            <td>
                <code><a class='link' href='#InputCapability'>InputCapability</a></code>
            </td>
        </tr>
        <tr>
            <td><code>output</code></td>
            <td>
                <code><a class='link' href='#OutputCapability'>OutputCapability</a></code>
            </td>
        </tr>
        <tr>
            <td><code>delegate</code></td>
            <td>
                <code><a class='link' href='#PairingDelegate'>PairingDelegate</a></code>
            </td>
        </tr>
</table>


## PairingDelegate {#PairingDelegate}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=136)*
<p>A Bluetooth Pairing Delegate is responsible for confirming or denying
pairing requests received from Bluetooth peers that connect or are
being connected to the local device.</p>
<p>Any new pairing will result in a call to <code>PairingDelegate.OnPairingRequest</code>,
including pairings where the InputCapability and OutputCapability are set
to none. The delegate is expected to have enough context to derive whether
to accept or deny the pairing.</p>
<p>Only one delegate is allowed to be set per system at a time. See
<code>fuchsia.bluetooth.sys.Pairing</code> for how to set the pairing delegate.</p>


### OnLocalKeypress {#PairingDelegate.OnLocalKeypress}

<p>The delegate can send this event to notify the peer of local keypresses
during pairing using <code>PairingMethod.PASSKEY_ENTRY</code>.</p>
<p>Sending local keypress events can allow the user additional time for
pairing when entering a passkey.</p>
<p>This should only be sent after an OnPairingRequest has been received
with a PASSKEY_ENTRY method, and before the reponse for that pairing
request.</p>
<ul>
<li>request <code>id</code> id of a peer with a pairing request active</li>
<li>request <code>keypress</code> the type of notification which should be sent</li>
</ul>




#### Response {#PairingDelegate.OnLocalKeypress_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
        <tr>
            <td><code>keypress</code></td>
            <td>
                <code><a class='link' href='#PairingKeypress'>PairingKeypress</a></code>
            </td>
        </tr>
</table>

### OnPairingComplete {#PairingDelegate.OnPairingComplete}

<p>Called when the pairing procedure for a peer has been completed.
This can be due to successful completion or an error (e.g. due to cancellation
by the peer, a timeout, or disconnection).</p>
<ul>
<li>request <code>id</code> The Bluetooth peer ID of the peer which was being paired.</li>
<li>request <code>success</code> true if the pairing succeeded, otherwise false.</li>
</ul>



#### Request {#PairingDelegate.OnPairingComplete_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
        <tr>
            <td><code>success</code></td>
            <td>
                <code>bool</code>
            </td>
        </tr>
</table>


### OnPairingRequest {#PairingDelegate.OnPairingRequest}

<p>Called to confirm a pairing. The pairing process will be continued if
<code>accept</code> response is true and rejected otherwise.
If the pairing method requires a passkey it must be included as well.
Pairing methods that do not require a passkey ignore the <code>entered_passkey</code>
repsonse.</p>
<p>The pairing can fail (usually by timeout or peer disconnect) before the
response is received. The OnPairingComplete method will be called when this
occurs.  Any response sent in this case will be ignored.</p>
<ul>
<li>request <code>peer</code> information about the peer being paired</li>
<li>request <code>method</code> method of pairing active. See <code>PairingMethod</code></li>
<li>request <code>displayed_passkey</code> a passkey to display to the user if
PASSKEY_DISPLAY or PASSKEY_COMPARISON is being used. Meaningless
otherwise.</li>
</ul>
<ul>
<li>response <code>accept</code> true if the pairing is accepted</li>
<li>response <code>entered_passkey</code> passkey entered by the user. Ignored unless
method is PASSKEY_ENTRY.</li>
</ul>



#### Request {#PairingDelegate.OnPairingRequest_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>peer</code></td>
            <td>
                <code><a class='link' href='#Peer'>Peer</a></code>
            </td>
        </tr>
        <tr>
            <td><code>method</code></td>
            <td>
                <code><a class='link' href='#PairingMethod'>PairingMethod</a></code>
            </td>
        </tr>
        <tr>
            <td><code>displayed_passkey</code></td>
            <td>
                <code>uint32</code>
            </td>
        </tr>
</table>


#### Response {#PairingDelegate.OnPairingRequest_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>accept</code></td>
            <td>
                <code>bool</code>
            </td>
        </tr>
        <tr>
            <td><code>entered_passkey</code></td>
            <td>
                <code>uint32</code>
            </td>
        </tr>
</table>

### OnRemoteKeypress {#PairingDelegate.OnRemoteKeypress}

<p>Called to notify keypresses from the peer device during pairing using
<code>PairingMethod.PASSKEY_DISPLAY</code>.</p>
<p>This event is used to provide key press events to the delegate for a responsive user
experience as the user types the passkey on the peer device. This event will be called
once for each keypress.</p>
<p>This event will only be called between when an OnPairingRequest has been sent for
<code>id</code> and when OnPairingComplete is sent.</p>
<p>Note: many devices do not send these events</p>
<ul>
<li>request <code>id</code> The peer id of the peer that sent the keypress event.</li>
<li>request <code>keypress</code> The type of event which was received.</li>
</ul>



#### Request {#PairingDelegate.OnRemoteKeypress_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
        <tr>
            <td><code>keypress</code></td>
            <td>
                <code><a class='link' href='#PairingKeypress'>PairingKeypress</a></code>
            </td>
        </tr>
</table>


## PairingDelegate2 {#PairingDelegate2}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=288)*
<p>A Bluetooth Pairing Delegate is responsible for confirming or denying
pairing requests received from Bluetooth peers that connect or are
being connected to the local device.</p>
<p>Any new pairing will result in a call to <code>PairingDelegate.StartRequest</code>,
including pairings where the InputCapability and OutputCapability are set
to none. The delegate is expected to have enough context to derive whether
to accept or reject the pairing.</p>
<p>Only one delegate is allowed to be set per system at a time. See
<code>fuchsia.bluetooth.sys.Pairing</code> for how to set the pairing delegate.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>


### RequestComplete {#PairingDelegate2.RequestComplete}

<p>Called when the pairing procedure for a peer has been completed.  This
can be due to successful completion or an error (e.g. due to
cancellation by the peer, a timeout, or disconnection).</p>
<ul>
<li>request <code>id</code> The Bluetooth peer ID of the peer which was being paired</li>
<li>request <code>success</code> true if the pairing succeeded, otherwise false</li>
</ul>



#### Request {#PairingDelegate2.RequestComplete_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
        </tr>
        <tr>
            <td><code>success</code></td>
            <td>
                <code>bool</code>
            </td>
        </tr>
</table>


### StartRequest {#PairingDelegate2.StartRequest}

<p>Called when a pairing with <code>peer</code> is started. The pairing process is
continued using the PairingRequest protocol.</p>
<p>The properties of the pairing are provided in <code>info</code> which indicates
what type of interaction is intended locally.</p>
<p>Multiple requests can be active at one time for different peers, and
requests can outlive this protocol.  Dropping the request protocol will
automatically reject the pairing.</p>
<p>All fields will always be present.</p>



#### Request {#PairingDelegate2.StartRequest_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#PairingDelegate2StartRequestRequest'>PairingDelegate2StartRequestRequest</a></code>
            </td>
        </tr>
</table>


## PairingRequest {#PairingRequest}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=241)*
<p>This protocol is active when a pairing is in progress, and provided to the
PairingDelegate via the <code>PairingDelegate.StartRequest</code>
The server will close this protocol with an epitaph if the pairing process
completes early without success:</p>
<ul>
<li>ZX_ERR_UNAVAILABLE - Bluetooth peer has disconnected</li>
<li>ZX_ERR_NOT_SUPPORTED - a passkey was provided when it was not expected</li>
<li>ZX_ERR_BAD_STATE - a keypress was sent when not using
PairingProperties.passkey_entry</li>
<li>ZX_ERR_TIMED_OUT - no activity was detected, and the pairing was stopped</li>
</ul>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>


### Accept {#PairingRequest.Accept}

<p>Accept the pairing request.
entered_passkey is required if the PairingProperties.passkey_entry
method is used, ignored otherwise.</p>



#### Request {#PairingRequest.Accept_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>payload</code></td>
            <td>
                <code><a class='link' href='#PairingRequestAcceptRequest'>PairingRequestAcceptRequest</a></code>
            </td>
        </tr>
</table>


### Keypress {#PairingRequest.Keypress}

<p>Used to communicate local keypresses to update the remote peer on
the progress of the pairing. The responses to this method should
be used for flow control.</p>



#### Request {#PairingRequest.Keypress_Request}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>keypress</code></td>
            <td>
                <code><a class='link' href='#PairingKeypress'>PairingKeypress</a></code>
            </td>
        </tr>
</table>


#### Response {#PairingRequest.Keypress_Response}

&lt;EMPTY&gt;

### OnComplete {#PairingRequest.OnComplete}

<p>Sent once when the pairing is completed, just before the protocol is
closed.
The success value along with the PeerId will also be sent to the
delegate using the <code>PairingDelegate.RequestComplete</code> call.</p>




#### Response {#PairingRequest.OnComplete_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>success</code></td>
            <td>
                <code>bool</code>
            </td>
        </tr>
</table>

### OnKeypress {#PairingRequest.OnKeypress}

<p>Sent when the pairing method is passkey_display.  Can be used to
update the UI to indicate reception of keypresses.</p>




#### Response {#PairingRequest.OnKeypress_Response}

<table>
    <tr><th>Name</th><th>Type</th></tr>
        <tr>
            <td><code>keypress</code></td>
            <td>
                <code><a class='link' href='#PairingKeypress'>PairingKeypress</a></code>
            </td>
        </tr>
</table>

### Reject {#PairingRequest.Reject}

<p>Reject the pairing request.
Closing this protocol will also reject the pairing request.</p>



#### Request {#PairingRequest.Reject_Request}

&lt;EMPTY&gt;


## ProcedureToken {#ProcedureToken}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=36)*
<p>Represents an active procedure. The validity of a handle that supports this protocol is tied to
the activity of the procedure that it is attached to. To elaborate:</p>
<ol>
<li>Closing a token handle ends the procedure that it is attached to.</li>
<li>The system closes a token handle to communicate that a procedure was internally terminated.</li>
</ol>



## **STRUCTS**

### Access_Connect_Response  {#Access_Connect_Response data-text="Access_Connect_Response"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=130)*

&lt;EMPTY&gt;

### Access_Disconnect_Response  {#Access_Disconnect_Response data-text="Access_Disconnect_Response"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=140)*

&lt;EMPTY&gt;

### Access_Forget_Response  {#Access_Forget_Response data-text="Access_Forget_Response"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=172)*

&lt;EMPTY&gt;

### Access_MakeDiscoverable_Response  {#Access_MakeDiscoverable_Response data-text="Access_MakeDiscoverable_Response"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=92)*

&lt;EMPTY&gt;

### Access_Pair_Response  {#Access_Pair_Response data-text="Access_Pair_Response"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=163)*

&lt;EMPTY&gt;

### Access_StartDiscovery_Response  {#Access_StartDiscovery_Response data-text="Access_StartDiscovery_Response"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=104)*

&lt;EMPTY&gt;

### Bootstrap_Commit_Response  {#Bootstrap_Commit_Response data-text="Bootstrap_Commit_Response"}
*Defined in [fuchsia.bluetooth.sys/bootstrap.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/bootstrap.fidl;l=37)*

&lt;EMPTY&gt;

### Consent  {#Consent data-text="Consent"}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=216)*

&lt;EMPTY&gt;

### HostWatcher_SetActive_Response  {#HostWatcher_SetActive_Response data-text="HostWatcher_SetActive_Response"}
*Defined in [fuchsia.bluetooth.sys/host_watcher.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/host_watcher.fidl;l=70)*

&lt;EMPTY&gt;

### Key  {#Key data-text="Key"}
*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=15)*
<p>Represents a 128-bit secret key.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="Key.value">
            <td><code>value</code></td>
            <td>
                <code>uint8[16]</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>

### LeConnectionParameters  {#LeConnectionParameters data-text="LeConnectionParameters"}
*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=40)*
<p>The preferred LE connection parameters of the peer.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="LeConnectionParameters.connection_interval">
            <td><code>connection_interval</code></td>
            <td>
                <code>uint16</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="LeConnectionParameters.connection_latency">
            <td><code>connection_latency</code></td>
            <td>
                <code>uint16</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="LeConnectionParameters.supervision_timeout">
            <td><code>supervision_timeout</code></td>
            <td>
                <code>uint16</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>

### Ltk  {#Ltk data-text="Ltk"}
*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=33)*
<p>Represents a LE Long-Term peer key used for link encyrption. The <code>ediv</code> and <code>rand</code>
fields are zero if distributed using LE Secure Connections pairing.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="Ltk.key">
            <td><code>key</code></td>
            <td>
                <code><a class='link' href='#PeerKey'>PeerKey</a></code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="Ltk.ediv">
            <td><code>ediv</code></td>
            <td>
                <code>uint16</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="Ltk.rand">
            <td><code>rand</code></td>
            <td>
                <code>uint64</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>

### PasskeyEntry  {#PasskeyEntry data-text="PasskeyEntry"}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=228)*

&lt;EMPTY&gt;

### PeerKey  {#PeerKey data-text="PeerKey"}
*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=20)*
<p>Represents a key that was received from a peer.</p>

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="PeerKey.security">
            <td><code>security</code></td>
            <td>
                <code><a class='link' href='#SecurityProperties'>SecurityProperties</a></code>
            </td>
            <td><p>The security properties of this link under which this key was received.</p>
</td>
            <td>No default</td>
        </tr>
        <tr id="PeerKey.data">
            <td><code>data</code></td>
            <td>
                <code><a class='link' href='#Key'>Key</a></code>
            </td>
            <td><p>The contents of the key.</p>
</td>
            <td>No default</td>
        </tr>
</table>

### SecurityProperties  {#SecurityProperties data-text="SecurityProperties"}
*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=8)*

<table>
    <tr><th>Field</th><th>Type</th><th>Description</th><th>Default</th></tr>
        <tr id="SecurityProperties.authenticated">
            <td><code>authenticated</code></td>
            <td>
                <code>bool</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="SecurityProperties.secure_connections">
            <td><code>secure_connections</code></td>
            <td>
                <code>bool</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
        <tr id="SecurityProperties.encryption_key_size">
            <td><code>encryption_key_size</code></td>
            <td>
                <code>uint8</code>
            </td>
            <td></td>
            <td>No default</td>
        </tr>
</table>


## **ENUMS**

### BondableMode [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#BondableMode data-text="BondableMode"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/pairing_options.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing_options.fidl;l=19)*
<p>Whether or not the device should form a bluetooth bond during the pairing prodecure.
As described in Core Spec v5.2 | Vol 3, Part C, Sec 4.3</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="BondableMode.BONDABLE">
<td><h3 id="BondableMode.BONDABLE" class="add-link hide-from-toc">BONDABLE</h3></td>
            <td><code>1</code></td>
            <td><p>The device will form a bond during pairing with peers</p>
</td>
        </tr>
        <tr id="BondableMode.NON_BONDABLE">
<td><h3 id="BondableMode.NON_BONDABLE" class="add-link hide-from-toc">NON_BONDABLE</h3></td>
            <td><code>2</code></td>
            <td><p>The device will not form a bond during pairing with peers</p>
</td>
        </tr>
</table>

### BootstrapError [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#BootstrapError data-text="BootstrapError"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/bootstrap.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/bootstrap.fidl;l=6)*

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="BootstrapError.INVALID_HOST_IDENTITY">
<td><h3 id="BootstrapError.INVALID_HOST_IDENTITY" class="add-link hide-from-toc">INVALID_HOST_IDENTITY</h3></td>
            <td><code>1</code></td>
            <td></td>
        </tr>
        <tr id="BootstrapError.WRITE_FAILURE">
<td><h3 id="BootstrapError.WRITE_FAILURE" class="add-link hide-from-toc">WRITE_FAILURE</h3></td>
            <td><code>2</code></td>
            <td></td>
        </tr>
</table>

### Error [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#Error data-text="Error"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=8)*

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="Error.FAILED">
<td><h3 id="Error.FAILED" class="add-link hide-from-toc">FAILED</h3></td>
            <td><code>1</code></td>
            <td><p>Operation could not be performed.</p>
</td>
        </tr>
        <tr id="Error.PEER_NOT_FOUND">
<td><h3 id="Error.PEER_NOT_FOUND" class="add-link hide-from-toc">PEER_NOT_FOUND</h3></td>
            <td><code>2</code></td>
            <td><p>The peer designated for the operation was not found.</p>
</td>
        </tr>
        <tr id="Error.TIMED_OUT">
<td><h3 id="Error.TIMED_OUT" class="add-link hide-from-toc">TIMED_OUT</h3></td>
            <td><code>3</code></td>
            <td><p>The time limit for the operation has expired.</p>
</td>
        </tr>
        <tr id="Error.CANCELED">
<td><h3 id="Error.CANCELED" class="add-link hide-from-toc">CANCELED</h3></td>
            <td><code>4</code></td>
            <td><p>The operation was canceled.</p>
</td>
        </tr>
        <tr id="Error.IN_PROGRESS">
<td><h3 id="Error.IN_PROGRESS" class="add-link hide-from-toc">IN_PROGRESS</h3></td>
            <td><code>5</code></td>
            <td><p>Operation already in progress.</p>
</td>
        </tr>
        <tr id="Error.NOT_SUPPORTED">
<td><h3 id="Error.NOT_SUPPORTED" class="add-link hide-from-toc">NOT_SUPPORTED</h3></td>
            <td><code>6</code></td>
            <td><p>Operation not supported.</p>
</td>
        </tr>
        <tr id="Error.INVALID_ARGUMENTS">
<td><h3 id="Error.INVALID_ARGUMENTS" class="add-link hide-from-toc">INVALID_ARGUMENTS</h3></td>
            <td><code>7</code></td>
            <td><p>The operation was given an invalid set of arguments.</p>
</td>
        </tr>
</table>

### InputCapability [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#InputCapability data-text="InputCapability"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=60)*
<p>Input Capabilities for pairing exchanges.
These should be set based on the ability of the local system to enter
responses to pairing requests.
See Volume 3, Part C, Table 5.3 for more information.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="InputCapability.NONE">
<td><h3 id="InputCapability.NONE" class="add-link hide-from-toc">NONE</h3></td>
            <td><code>1</code></td>
            <td><p>There is no user input method available for responding 'yes' or 'no' to
a pairing request.
Note: setting this setting will mean most pairings are considered
unauthenticated and vulnerable to machine-in-the-middle attacks.</p>
</td>
        </tr>
        <tr id="InputCapability.CONFIRMATION">
<td><h3 id="InputCapability.CONFIRMATION" class="add-link hide-from-toc">CONFIRMATION</h3></td>
            <td><code>2</code></td>
            <td><p>The user can respond yes or no to a request.</p>
</td>
        </tr>
        <tr id="InputCapability.KEYBOARD">
<td><h3 id="InputCapability.KEYBOARD" class="add-link hide-from-toc">KEYBOARD</h3></td>
            <td><code>3</code></td>
            <td><p>The user has a keyboard (or other UI) where they can type a numerical code
and signal they have finished or cancel.</p>
</td>
        </tr>
</table>

### LeSecurityMode [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#LeSecurityMode data-text="LeSecurityMode"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/security_mode.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/security_mode.fidl;l=10)*
<p>The LE Security Mode of a BLE device determines the possible security properties of the device.
The security mode does not make specific guarantees about the current security properties of a
device's connections; it sets restrictions on the allowable security properties. See Core Spec
v5.2 Vol. 3, Part C 10.2 for more details.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="LeSecurityMode.MODE_1">
<td><h3 id="LeSecurityMode.MODE_1" class="add-link hide-from-toc">MODE_1</h3></td>
            <td><code>1</code></td>
            <td><p>In LE Security Mode 1, communication is secured by encryption, and BLE-based services may
specify varying requirements for authentication, key size, or Secure Connections protection
on the encryption keys.</p>
</td>
        </tr>
        <tr id="LeSecurityMode.SECURE_CONNECTIONS_ONLY">
<td><h3 id="LeSecurityMode.SECURE_CONNECTIONS_ONLY" class="add-link hide-from-toc">SECURE_CONNECTIONS_ONLY</h3></td>
            <td><code>2</code></td>
            <td><p>In Secure Connections Only mode, all secure communication must use 128 bit, authenticated,
and LE Secure Connections-generated encryption keys. If these encryption key properties
cannot be satisfied by a device due to system constraints, any connection involving such
a device will not be able to secure the link at all. This mode does not prevent unencrypted
communication; it merely enforces stricter policies on all encrypted communication.</p>
</td>
        </tr>
</table>

### OutputCapability [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#OutputCapability data-text="OutputCapability"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=77)*
<p>Output Capabilities for pairing excanges.
These should be set based on the ability of the local system to display
information to the user initiating or accepting a Bluetooth pairing.
See Volume 3, Part C, Table 5.4 for more information.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="OutputCapability.NONE">
<td><h3 id="OutputCapability.NONE" class="add-link hide-from-toc">NONE</h3></td>
            <td><code>1</code></td>
            <td><p>There is no display available for pairing.</p>
</td>
        </tr>
        <tr id="OutputCapability.DISPLAY">
<td><h3 id="OutputCapability.DISPLAY" class="add-link hide-from-toc">DISPLAY</h3></td>
            <td><code>2</code></td>
            <td><p>There is a display that can show at least a six-digit decimal number.</p>
</td>
        </tr>
</table>

### PairingKeypress [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#PairingKeypress data-text="PairingKeypress"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=111)*
<p>Used to convey information to the peer on progress typing a passkey. The
various types of keypresses can be used to customize what is communicated to
the user requesting a pairing.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="PairingKeypress.DIGIT_ENTERED">
<td><h3 id="PairingKeypress.DIGIT_ENTERED" class="add-link hide-from-toc">DIGIT_ENTERED</h3></td>
            <td><code>1</code></td>
            <td><p>The user has entered a single digit.</p>
</td>
        </tr>
        <tr id="PairingKeypress.DIGIT_ERASED">
<td><h3 id="PairingKeypress.DIGIT_ERASED" class="add-link hide-from-toc">DIGIT_ERASED</h3></td>
            <td><code>2</code></td>
            <td><p>The user has erased a single digit.</p>
</td>
        </tr>
        <tr id="PairingKeypress.PASSKEY_CLEARED">
<td><h3 id="PairingKeypress.PASSKEY_CLEARED" class="add-link hide-from-toc">PASSKEY_CLEARED</h3></td>
            <td><code>3</code></td>
            <td><p>The user has cleared the entire passkey.</p>
</td>
        </tr>
        <tr id="PairingKeypress.PASSKEY_ENTERED">
<td><h3 id="PairingKeypress.PASSKEY_ENTERED" class="add-link hide-from-toc">PASSKEY_ENTERED</h3></td>
            <td><code>4</code></td>
            <td><p>The user has finished entering the passkey.</p>
</td>
        </tr>
</table>

### PairingMethod [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#PairingMethod data-text="PairingMethod"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=86)*
<p>Different types required by the Security Manager for pairing methods.
Bluetooth SIG has different requirements for different device capabilities.</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="PairingMethod.CONSENT">
<td><h3 id="PairingMethod.CONSENT" class="add-link hide-from-toc">CONSENT</h3></td>
            <td><code>1</code></td>
            <td><p>The user is asked to accept or reject pairing.
This is the minimum method - even when both devices do not support
input or output, the delegate will be asked to confirm any pairing
not initiated with user intent.</p>
</td>
        </tr>
        <tr id="PairingMethod.PASSKEY_DISPLAY">
<td><h3 id="PairingMethod.PASSKEY_DISPLAY" class="add-link hide-from-toc">PASSKEY_DISPLAY</h3></td>
            <td><code>2</code></td>
            <td><p>The user is shown a 6-digit numerical passkey on this device which they
must enter on the peer device.</p>
</td>
        </tr>
        <tr id="PairingMethod.PASSKEY_COMPARISON">
<td><h3 id="PairingMethod.PASSKEY_COMPARISON" class="add-link hide-from-toc">PASSKEY_COMPARISON</h3></td>
            <td><code>3</code></td>
            <td><p>The user is shown a 6-digit numerical passkey on this device which will
also shown on the peer device. The user must compare the passkeys and
accept the pairing if the passkeys match.</p>
</td>
        </tr>
        <tr id="PairingMethod.PASSKEY_ENTRY">
<td><h3 id="PairingMethod.PASSKEY_ENTRY" class="add-link hide-from-toc">PASSKEY_ENTRY</h3></td>
            <td><code>4</code></td>
            <td><p>The user is asked to enter a 6-digit passkey on this device which is
communicated via the peer device.</p>
</td>
        </tr>
</table>

### PairingSecurityLevel [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#PairingSecurityLevel data-text="PairingSecurityLevel"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/pairing_options.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing_options.fidl;l=8)*
<p>The security level required for this pairing - corresponds to the security
levels defined in the Security Manager Protocol in Vol 3, Part H, Section 2.3.1</p>

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="PairingSecurityLevel.ENCRYPTED">
<td><h3 id="PairingSecurityLevel.ENCRYPTED" class="add-link hide-from-toc">ENCRYPTED</h3></td>
            <td><code>1</code></td>
            <td><p>Encrypted without MITM protection (unauthenticated)</p>
</td>
        </tr>
        <tr id="PairingSecurityLevel.AUTHENTICATED">
<td><h3 id="PairingSecurityLevel.AUTHENTICATED" class="add-link hide-from-toc">AUTHENTICATED</h3></td>
            <td><code>2</code></td>
            <td><p>Encrypted with MITM protection (authenticated), although this level of security does not
fully protect against passive eavesdroppers</p>
</td>
        </tr>
</table>

### TechnologyType [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute} {#TechnologyType data-text="TechnologyType"}
Type: <code>uint32</code>

*Defined in [fuchsia.bluetooth.sys/peer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/peer.fidl;l=8)*

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="TechnologyType.LOW_ENERGY">
<td><h3 id="TechnologyType.LOW_ENERGY" class="add-link hide-from-toc">LOW_ENERGY</h3></td>
            <td><code>1</code></td>
            <td></td>
        </tr>
        <tr id="TechnologyType.CLASSIC">
<td><h3 id="TechnologyType.CLASSIC" class="add-link hide-from-toc">CLASSIC</h3></td>
            <td><code>2</code></td>
            <td></td>
        </tr>
        <tr id="TechnologyType.DUAL_MODE">
<td><h3 id="TechnologyType.DUAL_MODE" class="add-link hide-from-toc">DUAL_MODE</h3></td>
            <td><code>3</code></td>
            <td></td>
        </tr>
</table>


## **TABLES**

### BondingData  {#BondingData data-text="BondingData"}


*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=89)*
<p>Represents the bonding data for a single peer.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="BondingData.identifier">
<td><h3 id="BondingData.identifier" class="add-link hide-from-toc">1</h3></td>
            <td><code>identifier</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
            <td><p>The identifier that uniquely identifies this peer.</p>
</td>
        </tr>
        <tr id="BondingData.local_address">
<td><h3 id="BondingData.local_address" class="add-link hide-from-toc">2</h3></td>
            <td><code>local_address</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Address'>Address</a></code>
            </td>
            <td><p>The local Bluetooth identity address that this bond is associated with.</p>
</td>
        </tr>
        <tr id="BondingData.name">
<td><h3 id="BondingData.name" class="add-link hide-from-toc">3</h3></td>
            <td><code>name</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#DeviceName'>DeviceName</a></code>
            </td>
            <td><p>The name of the peer, if known.</p>
</td>
        </tr>
        <tr id="BondingData.">
<td><h3 id="BondingData." class="add-link hide-from-toc">4</h3></td>
            <td><code>RESERVED</code></td>
            <td>
                <code></code>
            </td>
            <td></td>
        </tr>
        <tr id="BondingData.">
<td><h3 id="BondingData." class="add-link hide-from-toc">5</h3></td>
            <td><code>RESERVED</code></td>
            <td>
                <code></code>
            </td>
            <td></td>
        </tr>
        <tr id="BondingData.address">
<td><h3 id="BondingData.address" class="add-link hide-from-toc">6</h3></td>
            <td><code>address</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Address'>Address</a></code>
            </td>
            <td><p>The identity address of the peer.</p>
</td>
        </tr>
        <tr id="BondingData.le_bond">
<td><h3 id="BondingData.le_bond" class="add-link hide-from-toc">7</h3></td>
            <td><code>le_bond</code></td>
            <td>
                <code><a class='link' href='#LeBondData'>LeBondData</a></code>
            </td>
            <td><p>Bonding data that is present when this peer is paired on the LE transport.</p>
</td>
        </tr>
        <tr id="BondingData.bredr_bond">
<td><h3 id="BondingData.bredr_bond" class="add-link hide-from-toc">8</h3></td>
            <td><code>bredr_bond</code></td>
            <td>
                <code><a class='link' href='#BredrBondData'>BredrBondData</a></code>
            </td>
            <td><p>Bonding data that is present when this peer is paired on the BR/EDR transport.</p>
</td>
        </tr>
</table>

### BredrBondData  {#BredrBondData data-text="BredrBondData"}


*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=74)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="BredrBondData.role_preference">
<td><h3 id="BredrBondData.role_preference" class="add-link hide-from-toc">1</h3></td>
            <td><code>role_preference</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#ConnectionRole'>ConnectionRole</a></code>
            </td>
            <td><p>The peer's preferred piconet role. This is determined by role switch procedures. Paging and
connecting from a peer does not automatically set this flag. If absent, the peer has not
expressed a preference.</p>
</td>
        </tr>
        <tr id="BredrBondData.services">
<td><h3 id="BredrBondData.services" class="add-link hide-from-toc">2</h3></td>
            <td><code>services</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Uuid'>Uuid</a>&gt;[65535]</code>
            </td>
            <td><p>Known service UUIDs obtained from EIR data or SDP.</p>
</td>
        </tr>
        <tr id="BredrBondData.link_key">
<td><h3 id="BredrBondData.link_key" class="add-link hide-from-toc">3</h3></td>
            <td><code>link_key</code></td>
            <td>
                <code><a class='link' href='#PeerKey'>PeerKey</a></code>
            </td>
            <td><p>The semi-permanent BR/EDR key. Present if link was paired with Secure Simple Pairing or
stronger.</p>
</td>
        </tr>
</table>

### HostData  {#HostData data-text="HostData"}


*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=113)*
<p>Represents persistent local host data.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="HostData.irk">
<td><h3 id="HostData.irk" class="add-link hide-from-toc">1</h3></td>
            <td><code>irk</code></td>
            <td>
                <code><a class='link' href='#LocalKey'>LocalKey</a></code>
            </td>
            <td><p>The local Identity Resolving Key used by a bt-host device to generate Resolvable Private
Addresses when privacy is enabled.</p>
<p>May be absent for hosts that do not use LE privacy, or that only use Non-Resolvable Private
Addresses.</p>
<p>NOTE: This key is distributed to LE peers during pairing procedures. The client must take
care to assign an IRK that consistent with the local bt-host identity.</p>
</td>
        </tr>
</table>

### HostInfo  {#HostInfo data-text="HostInfo"}


*Defined in [fuchsia.bluetooth.sys/host_watcher.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/host_watcher.fidl;l=10)*
<p>Information about a Bluetooth controller and its associated host-subsystem state.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="HostInfo.id">
<td><h3 id="HostInfo.id" class="add-link hide-from-toc">1</h3></td>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#HostId'>HostId</a></code>
            </td>
            <td><p>Uniquely identifies a host on the current system.</p>
<p>This field is always present.</p>
</td>
        </tr>
        <tr id="HostInfo.technology">
<td><h3 id="HostInfo.technology" class="add-link hide-from-toc">2</h3></td>
            <td><code>technology</code></td>
            <td>
                <code><a class='link' href='#TechnologyType'>TechnologyType</a></code>
            </td>
            <td><p>The Bluetooth technologies that are supported by this adapter.</p>
<p>This field is always present.</p>
</td>
        </tr>
        <tr id="HostInfo.">
<td><h3 id="HostInfo." class="add-link hide-from-toc">3</h3></td>
            <td><code>RESERVED</code></td>
            <td>
                <code></code>
            </td>
            <td></td>
        </tr>
        <tr id="HostInfo.active">
<td><h3 id="HostInfo.active" class="add-link hide-from-toc">4</h3></td>
            <td><code>active</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>Indicates whether or not this is the active host. The system has one active host which
handles all Bluetooth procedures.</p>
</td>
        </tr>
        <tr id="HostInfo.local_name">
<td><h3 id="HostInfo.local_name" class="add-link hide-from-toc">5</h3></td>
            <td><code>local_name</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#DeviceName'>DeviceName</a></code>
            </td>
            <td><p>The local name of this host. This is the name that is visible to other devices when this
host is in the discoverable mode.</p>
</td>
        </tr>
        <tr id="HostInfo.discoverable">
<td><h3 id="HostInfo.discoverable" class="add-link hide-from-toc">6</h3></td>
            <td><code>discoverable</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>Whether or not the local adapter is currently discoverable over BR/EDR and
LE physical channels.</p>
</td>
        </tr>
        <tr id="HostInfo.discovering">
<td><h3 id="HostInfo.discovering" class="add-link hide-from-toc">7</h3></td>
            <td><code>discovering</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>Whether or not device discovery is currently being performed.</p>
</td>
        </tr>
        <tr id="HostInfo.addresses">
<td><h3 id="HostInfo.addresses" class="add-link hide-from-toc">8</h3></td>
            <td><code>addresses</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Address'>Address</a>&gt;</code>
            </td>
            <td><p>The addresses (LE and/or BR/EDR) associated with the host.</p>
<p>The Public address is always reported first.</p>
<p>This field is always present.</p>
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: 11</span></div>
</td>
        </tr>
</table>

### Identity  {#Identity data-text="Identity"}


*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=135)*
<p>Represents the persistent configuration of a single host-subsystem instance. This is used for
identity presentation (inquiry, inquiry response, and advertisement) and for bonding secrets
recall (encrypting link data to peers associated with this identity).</p>
<p>Each BR/EDR BD_ADDR and Low Energy public identity address used to bond should have its own
Identity instance containing corresponding peers.</p>
<p>Each Identity instance that supports LE privacy should have an Identity Resolving Key (IRK) that
is consistent with that distributed to its bonded peers.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="Identity.host">
<td><h3 id="Identity.host" class="add-link hide-from-toc">1</h3></td>
            <td><code>host</code></td>
            <td>
                <code><a class='link' href='#HostData'>HostData</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Identity.bonds">
<td><h3 id="Identity.bonds" class="add-link hide-from-toc">2</h3></td>
            <td><code>bonds</code></td>
            <td>
                <code>vector&lt;<a class='link' href='#BondingData'>BondingData</a>&gt;</code>
            </td>
            <td><p>All bonds that use a public identity address must contain the same local address.</p>
</td>
        </tr>
</table>

### LeBondData  {#LeBondData data-text="LeBondData"}


*Defined in [fuchsia.bluetooth.sys/identity.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=46)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="LeBondData.connection_parameters">
<td><h3 id="LeBondData.connection_parameters" class="add-link hide-from-toc">1</h3></td>
            <td><code>connection_parameters</code></td>
            <td>
                <code><a class='link' href='#LeConnectionParameters'>LeConnectionParameters</a></code>
            </td>
            <td><p>The peer's preferred connection parameters, if known.</p>
</td>
        </tr>
        <tr id="LeBondData.services">
<td><h3 id="LeBondData.services" class="add-link hide-from-toc">2</h3></td>
            <td><code>services</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Uuid'>Uuid</a>&gt;[65535]</code>
            </td>
            <td><p>Known GATT service UUIDs.</p>
</td>
        </tr>
        <tr id="LeBondData.irk">
<td><h3 id="LeBondData.irk" class="add-link hide-from-toc">3</h3></td>
            <td><code>irk</code></td>
            <td>
                <code><a class='link' href='#PeerKey'>PeerKey</a></code>
            </td>
            <td><p>Identity Resolving RemoteKey used to generate and resolve random addresses.</p>
</td>
        </tr>
        <tr id="LeBondData.csrk">
<td><h3 id="LeBondData.csrk" class="add-link hide-from-toc">4</h3></td>
            <td><code>csrk</code></td>
            <td>
                <code><a class='link' href='#PeerKey'>PeerKey</a></code>
            </td>
            <td><p>Connection Signature Resolving RemoteKey used for data signing without encryption.</p>
</td>
        </tr>
        <tr id="LeBondData.peer_ltk">
<td><h3 id="LeBondData.peer_ltk" class="add-link hide-from-toc">5</h3></td>
            <td><code>peer_ltk</code></td>
            <td>
                <code><a class='link' href='#Ltk'>Ltk</a></code>
            </td>
            <td><p>LE long-term key used to encrypt a connection when the peer is in the LE Peripheral role.</p>
<p>In legacy pairing (<code>peer_ltk.security.secure_connections</code> is false),  this key corresponds
to the key distributed by the peer. In Secure Connections pairing there is only one LTK and
<code>peer_ltk</code> is the same as <code>local_ltk</code>.</p>
</td>
        </tr>
        <tr id="LeBondData.local_ltk">
<td><h3 id="LeBondData.local_ltk" class="add-link hide-from-toc">6</h3></td>
            <td><code>local_ltk</code></td>
            <td>
                <code><a class='link' href='#Ltk'>Ltk</a></code>
            </td>
            <td><p>LE long-term key used to encrypt a connection when the peer is in the LE Central role.</p>
<p>In legacy pairing (<code>local_ltk.security.secure_connections</code> is false), this key corresponds
to the key distributed by the local device. In Secure Connections pairing there is only one
LTK and <code>local_ltk</code> is the same as <code>peer_ltk</code>.</p>
</td>
        </tr>
</table>

### PairingDelegate2StartRequestRequest [resource](/fuchsia-src/reference/fidl/language/language.md#value-vs-resource){:.fidl-attribute} {#PairingDelegate2StartRequestRequest data-text="PairingDelegate2StartRequestRequest"}


*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=300)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="PairingDelegate2StartRequestRequest.peer">
<td><h3 id="PairingDelegate2StartRequestRequest.peer" class="add-link hide-from-toc">1</h3></td>
            <td><code>peer</code></td>
            <td>
                <code><a class='link' href='#Peer'>Peer</a></code>
            </td>
            <td><p>Peer making the request.</p>
</td>
        </tr>
        <tr id="PairingDelegate2StartRequestRequest.info">
<td><h3 id="PairingDelegate2StartRequestRequest.info" class="add-link hide-from-toc">2</h3></td>
            <td><code>info</code></td>
            <td>
                <code><a class='link' href='#PairingProperties'>PairingProperties</a></code>
            </td>
            <td><p>Properties of the pairing.</p>
</td>
        </tr>
        <tr id="PairingDelegate2StartRequestRequest.request">
<td><h3 id="PairingDelegate2StartRequestRequest.request" class="add-link hide-from-toc">3</h3></td>
            <td><code>request</code></td>
            <td>
                <code><a class='link' href='#PairingRequest'>PairingRequest</a></code>
            </td>
            <td><p>Protocol used to complete the pairing process.</p>
</td>
        </tr>
</table>

### PairingOptions  {#PairingOptions data-text="PairingOptions"}


*Defined in [fuchsia.bluetooth.sys/pairing_options.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing_options.fidl;l=28)*
<p>Parameters that give a caller more fine-grained control over the pairing process. All of the
fields of this table are optional and pairing can still succeed if none of them are set.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="PairingOptions.le_security_level">
<td><h3 id="PairingOptions.le_security_level" class="add-link hide-from-toc">1</h3></td>
            <td><code>le_security_level</code></td>
            <td>
                <code><a class='link' href='#PairingSecurityLevel'>PairingSecurityLevel</a></code>
            </td>
            <td><p>Only relevant for LE. If present, determines the Security Manager security level to pair
with. If not present, interpreted as PairingSecurityLevel.AUTHENTICATED.</p>
</td>
        </tr>
        <tr id="PairingOptions.bondable_mode">
<td><h3 id="PairingOptions.bondable_mode" class="add-link hide-from-toc">2</h3></td>
            <td><code>bondable_mode</code></td>
            <td>
                <code><a class='link' href='#BondableMode'>BondableMode</a></code>
            </td>
            <td><p>If transport is LOW_ENERGY or DUAL_MODE, whether the device should form a bond or not during
pairing. If not present, interpreted as bondable mode.</p>
<p>If transport is CLASSIC, this option must be absent or otherwise the value BONDABLE.
NON_BONDABLE mode is not currently supported for the CLASSIC transport</p>
</td>
        </tr>
        <tr id="PairingOptions.transport">
<td><h3 id="PairingOptions.transport" class="add-link hide-from-toc">3</h3></td>
            <td><code>transport</code></td>
            <td>
                <code><a class='link' href='#TechnologyType'>TechnologyType</a></code>
            </td>
            <td><p>If transport is LOW_ENERGY, indicate a desire to pair over the LE transport.
If transport is CLASSIC, indicate a desire to pair over the Br/Edr transport.
If transport is DUAL_MODE, indicate a desire to pair over both transports.
If not present, interpreted as TechnologyType.DUAL_MODE</p>
</td>
        </tr>
</table>

### PairingRequestAcceptRequest  {#PairingRequestAcceptRequest data-text="PairingRequestAcceptRequest"}


*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=245)*

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="PairingRequestAcceptRequest.entered_passkey">
<td><h3 id="PairingRequestAcceptRequest.entered_passkey" class="add-link hide-from-toc">1</h3></td>
            <td><code>entered_passkey</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td></td>
        </tr>
</table>

### Peer  {#Peer data-text="Peer"}


*Defined in [fuchsia.bluetooth.sys/peer.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/peer.fidl;l=19)*
<p>Represents a remote BR/EDR, LE, or dual-mode BR/EDR/LE peer.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="Peer.id">
<td><h3 id="Peer.id" class="add-link hide-from-toc">1</h3></td>
            <td><code>id</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#PeerId'>PeerId</a></code>
            </td>
            <td><p>Uniquely identifies this peer on the current system.</p>
<p>This field is always present.</p>
</td>
        </tr>
        <tr id="Peer.address">
<td><h3 id="Peer.address" class="add-link hide-from-toc">2</h3></td>
            <td><code>address</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Address'>Address</a></code>
            </td>
            <td><p>Bluetooth device address that identifies this peer. Clients
should display this field to the user when <code>name</code> is not available.</p>
<p>This field is always present.</p>
<p>NOTE: Clients should use the <code>identifier</code> field to keep track of peers instead of their
address.</p>
</td>
        </tr>
        <tr id="Peer.technology">
<td><h3 id="Peer.technology" class="add-link hide-from-toc">3</h3></td>
            <td><code>technology</code></td>
            <td>
                <code><a class='link' href='#TechnologyType'>TechnologyType</a></code>
            </td>
            <td><p>The Bluetooth technologies that are supported by this peer.</p>
<p>This field is always present.</p>
</td>
        </tr>
        <tr id="Peer.connected">
<td><h3 id="Peer.connected" class="add-link hide-from-toc">4</h3></td>
            <td><code>connected</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>Whether or not a BR/EDR and/or LE connection exists to this peer.</p>
<p>This field is always present.</p>
</td>
        </tr>
        <tr id="Peer.bonded">
<td><h3 id="Peer.bonded" class="add-link hide-from-toc">5</h3></td>
            <td><code>bonded</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>Whether or not this peer is bonded.</p>
<p>This field is always present.</p>
</td>
        </tr>
        <tr id="Peer.name">
<td><h3 id="Peer.name" class="add-link hide-from-toc">6</h3></td>
            <td><code>name</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#DeviceName'>DeviceName</a></code>
            </td>
            <td><p>The name of the peer, if known.</p>
</td>
        </tr>
        <tr id="Peer.appearance">
<td><h3 id="Peer.appearance" class="add-link hide-from-toc">7</h3></td>
            <td><code>appearance</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Appearance'>Appearance</a></code>
            </td>
            <td><p>The LE appearance property. Present if this peer supports LE and the
appearance information was obtained over advertising and/or GATT.</p>
</td>
        </tr>
        <tr id="Peer.device_class">
<td><h3 id="Peer.device_class" class="add-link hide-from-toc">8</h3></td>
            <td><code>device_class</code></td>
            <td>
                <code><a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#DeviceClass'>DeviceClass</a></code>
            </td>
            <td><p>The class of device for this device, if known.</p>
</td>
        </tr>
        <tr id="Peer.rssi">
<td><h3 id="Peer.rssi" class="add-link hide-from-toc">9</h3></td>
            <td><code>rssi</code></td>
            <td>
                <code>int8</code>
            </td>
            <td><p>The most recently obtained advertising signal strength for this peer. Present if known.</p>
</td>
        </tr>
        <tr id="Peer.tx_power">
<td><h3 id="Peer.tx_power" class="add-link hide-from-toc">10</h3></td>
            <td><code>tx_power</code></td>
            <td>
                <code>int8</code>
            </td>
            <td><p>The most recently obtained transmission power for this peer. Present if known.</p>
</td>
        </tr>
        <tr id="Peer.services">
<td><h3 id="Peer.services" class="add-link hide-from-toc">11</h3></td>
            <td><code>services</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Uuid'>Uuid</a>&gt;[65535]</code>
            </td>
            <td><p>The list of service UUIDs known to be available on this peer.</p>
<p>This is a legacy field that should not be depended on for new code.</p>
<p><b>DEPRECATED </b></p></td>
        </tr>
        <tr id="Peer.le_services">
<td><h3 id="Peer.le_services" class="add-link hide-from-toc">12</h3></td>
            <td><code>le_services</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Uuid'>Uuid</a>&gt;[65535]</code>
            </td>
            <td><p>The list of service UUIDs known to be available on the LE transport.</p>
<p>Never present if technology is CLASSIC.</p>
</td>
        </tr>
        <tr id="Peer.bredr_services">
<td><h3 id="Peer.bredr_services" class="add-link hide-from-toc">13</h3></td>
            <td><code>bredr_services</code></td>
            <td>
                <code>vector&lt;<a class='link' href='../fuchsia.bluetooth/'>fuchsia.bluetooth</a>/<a class='link' href='../fuchsia.bluetooth/#Uuid'>Uuid</a>&gt;[65535]</code>
            </td>
            <td><p>The cached list of service UUIDs previously discovered on the BR/EDR transport.
Services are not removed if peer is disconnected if subsequent searches don't find them.</p>
<p>Never present if technology is LOW_ENERGY.</p>
<p>This is a legacy field that should not be depended on for new code.</p>
<p><b>DEPRECATED </b></p></td>
        </tr>
</table>

### Settings  {#Settings data-text="Settings"}


*Defined in [fuchsia.bluetooth.sys/configuration.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/configuration.fidl;l=9)*
<p>Represents the Bluetooth Host Subsystem parameters available for configuration. Each parameter
is set to a default upon Bluetooth system initialization. The default values for each parameter
can be found in //src/connectivity/bluetooth/core/bt-gap/config/default.js.</p>

<table>
    <tr><th>Ordinal</th><th>Field</th><th>Type</th><th>Description</th></tr>
        <tr id="Settings.le_privacy">
<td><h3 id="Settings.le_privacy" class="add-link hide-from-toc">1</h3></td>
            <td><code>le_privacy</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>If true then enable the LE Privacy feature, if false disable it. If not present, leaves the
current value unchanged. When enabled, all BLE procedures that broadcast the local device
address (active scanning, connection initiation, and advertising) use a Resolvable Private
Address type. When disabled, these procedures reveal the local public identity address
assigned to the controller.</p>
<p>Enabling this feature is highly recommended on products.</p>
</td>
        </tr>
        <tr id="Settings.le_background_scan">
<td><h3 id="Settings.le_background_scan" class="add-link hide-from-toc">2</h3></td>
            <td><code>le_background_scan</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>If true then enable LE background-scan feature, if false disable it. If not present, leaves
the current value unchanged. When enabled, the system maintains an on-going passive scan
and establishes connections to bonded peers that are in &quot;Connectable&quot; or &quot;Directed
Connectable&quot; mode.</p>
</td>
        </tr>
        <tr id="Settings.bredr_connectable_mode">
<td><h3 id="Settings.bredr_connectable_mode" class="add-link hide-from-toc">3</h3></td>
            <td><code>bredr_connectable_mode</code></td>
            <td>
                <code>bool</code>
            </td>
            <td><p>If true then enable BR/EDR connectable mode, if false disable it. If not present, leaves
the current value unchanged. When enabled, bt-host devices are put into BR/EDR page scan
mode and accept connections.</p>
</td>
        </tr>
        <tr id="Settings.le_security_mode">
<td><h3 id="Settings.le_security_mode" class="add-link hide-from-toc">4</h3></td>
            <td><code>le_security_mode</code></td>
            <td>
                <code><a class='link' href='#LeSecurityMode'>LeSecurityMode</a></code>
            </td>
            <td><p>If present then sets the LE Security mode of the Host Subsystem, if not present leaves the
current value unchanged. See BT Core Spec v5.2 Vol. 3 Part C 10.2 for more details. If
present and set to Secure Connections Only mode, any active connections not meeting the
requirements of Secure Connections Only mode are disconnected.</p>
</td>
        </tr>
</table>


## **UNIONS**

### Access_Connect_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Access_Connect_Result data-text="Access_Connect_Result"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=130)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Access_Connect_Result.response">
<td><h3 id="Access_Connect_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Access_Connect_Response'>Access_Connect_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Access_Connect_Result.err">
<td><h3 id="Access_Connect_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Access_Disconnect_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Access_Disconnect_Result data-text="Access_Disconnect_Result"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=140)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Access_Disconnect_Result.response">
<td><h3 id="Access_Disconnect_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Access_Disconnect_Response'>Access_Disconnect_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Access_Disconnect_Result.err">
<td><h3 id="Access_Disconnect_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Access_Forget_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Access_Forget_Result data-text="Access_Forget_Result"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=172)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Access_Forget_Result.response">
<td><h3 id="Access_Forget_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Access_Forget_Response'>Access_Forget_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Access_Forget_Result.err">
<td><h3 id="Access_Forget_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Access_MakeDiscoverable_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Access_MakeDiscoverable_Result data-text="Access_MakeDiscoverable_Result"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=92)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Access_MakeDiscoverable_Result.response">
<td><h3 id="Access_MakeDiscoverable_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Access_MakeDiscoverable_Response'>Access_MakeDiscoverable_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Access_MakeDiscoverable_Result.err">
<td><h3 id="Access_MakeDiscoverable_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Access_Pair_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Access_Pair_Result data-text="Access_Pair_Result"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=163)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Access_Pair_Result.response">
<td><h3 id="Access_Pair_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Access_Pair_Response'>Access_Pair_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Access_Pair_Result.err">
<td><h3 id="Access_Pair_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Access_StartDiscovery_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Access_StartDiscovery_Result data-text="Access_StartDiscovery_Result"}
*Defined in [fuchsia.bluetooth.sys/access.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/access.fidl;l=104)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Access_StartDiscovery_Result.response">
<td><h3 id="Access_StartDiscovery_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Access_StartDiscovery_Response'>Access_StartDiscovery_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Access_StartDiscovery_Result.err">
<td><h3 id="Access_StartDiscovery_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#Error'>Error</a></code>
            </td>
            <td></td>
        </tr>
</table>

### Bootstrap_Commit_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#Bootstrap_Commit_Result data-text="Bootstrap_Commit_Result"}
*Defined in [fuchsia.bluetooth.sys/bootstrap.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/bootstrap.fidl;l=37)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="Bootstrap_Commit_Result.response">
<td><h3 id="Bootstrap_Commit_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#Bootstrap_Commit_Response'>Bootstrap_Commit_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="Bootstrap_Commit_Result.err">
<td><h3 id="Bootstrap_Commit_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='#BootstrapError'>BootstrapError</a></code>
            </td>
            <td></td>
        </tr>
</table>

### HostWatcher_SetActive_Result [strict](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#HostWatcher_SetActive_Result data-text="HostWatcher_SetActive_Result"}
*Defined in [fuchsia.bluetooth.sys/host_watcher.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/host_watcher.fidl;l=70)*
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="HostWatcher_SetActive_Result.response">
<td><h3 id="HostWatcher_SetActive_Result.response" class="add-link hide-from-toc">1</h3></td>
            <td><code>response</code></td>
            <td>
                <code><a class='link' href='#HostWatcher_SetActive_Response'>HostWatcher_SetActive_Response</a></code>
            </td>
            <td></td>
        </tr>
        <tr id="HostWatcher_SetActive_Result.err">
<td><h3 id="HostWatcher_SetActive_Result.err" class="add-link hide-from-toc">2</h3></td>
            <td><code>err</code></td>
            <td>
                <code><a class='link' href='../zx/'>zx</a>/<a class='link' href='../zx/#status'>status</a></code>
            </td>
            <td></td>
        </tr>
</table>

### PairingProperties [flexible](/fuchsia-src/reference/fidl/language/language.md#strict-vs-flexible){:.fidl-attribute}  {#PairingProperties data-text="PairingProperties"}
*Defined in [fuchsia.bluetooth.sys/pairing.fidl](https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/pairing.fidl;l=211)*
<div class="fidl-version-div"><span class="fidl-attribute fidl-version">Added: HEAD</span></div>
<table>
    <tr><th>Ordinal</th><th>Variant</th><th>Type</th><th>Description</th></tr>
        <tr id="PairingProperties.consent">
<td><h3 id="PairingProperties.consent" class="add-link hide-from-toc">1</h3></td>
            <td><code>consent</code></td>
            <td>
                <code><a class='link' href='#Consent'>Consent</a></code>
            </td>
            <td><p>The user is asked to accept or reject pairing.
This is the minimum method - even when both devices do not support
input or output, the delegate will be asked to confirm any pairing
not initiated with user intent.</p>
</td>
        </tr>
        <tr id="PairingProperties.passkey_display">
<td><h3 id="PairingProperties.passkey_display" class="add-link hide-from-toc">2</h3></td>
            <td><code>passkey_display</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>The user is shown a 6-digit numerical passkey on this device which they
must key in on the peer device.
The passkey to be displayed is provided.</p>
</td>
        </tr>
        <tr id="PairingProperties.passkey_confirmation">
<td><h3 id="PairingProperties.passkey_confirmation" class="add-link hide-from-toc">3</h3></td>
            <td><code>passkey_confirmation</code></td>
            <td>
                <code>uint32</code>
            </td>
            <td><p>The user is shown a 6-digit numerical passkey on this device which will
also be shown on the peer device. The user must compare the passkeys and
accept the pairing if the passkeys match.
The passkey to be displayed is provided.</p>
</td>
        </tr>
        <tr id="PairingProperties.passkey_entry">
<td><h3 id="PairingProperties.passkey_entry" class="add-link hide-from-toc">4</h3></td>
            <td><code>passkey_entry</code></td>
            <td>
                <code><a class='link' href='#PasskeyEntry'>PasskeyEntry</a></code>
            </td>
            <td><p>The user is asked to enter a 6-digit passkey on this device which is
communicated via the peer device.</p>
</td>
        </tr>
</table>



## **CONSTANTS**

<table>
    <tr><th>Name</th><th>Value</th><th>Type</th><th>Description</th></tr>
        <tr id="MAX_PEER_SERVICES">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/peer.fidl;l=16">MAX_PEER_SERVICES</a></td>
                <td>
                    <code>65535</code>
                </td>
                <td><code>uint16</code></td>
            <td><p>Maximum number of discovered services for each transport. Currently set to the number of valid
16-bit handles or PSMs used to access services.</p>
</td>
        </tr>
</table>

## **ALIASES**

<table>
    <tr><th>Name</th><th>Value</th><th>Description</th></tr>
        <tr id="LocalKey">
            <td><a href="https://cs.opensource.google/fuchsia/fuchsia/+/main:sdk/fidl/fuchsia.bluetooth.sys/identity.fidl;l=29">LocalKey</a></td>
            <td>
                <code>fuchsia.bluetooth.sys/Key</code></td>
            <td><p>Represents a locally generated key that is distributed across one or more bonds.</p>
</td>
        </tr>
</table>
