|  | // Copyright 2019 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | library fuchsia.bluetooth.sys; | 
|  |  | 
|  | using fuchsia.bluetooth as bt; | 
|  |  | 
|  | /// Input and Output Capabilities for pairing exchanges. | 
|  | /// See Volume 3, Part C, Table 5.3 and 5.4 | 
|  | enum InputCapability { | 
|  | NONE = 1; | 
|  | CONFIRMATION = 2; | 
|  | KEYBOARD = 3; | 
|  | }; | 
|  |  | 
|  | enum OutputCapability { | 
|  | NONE = 1; | 
|  | DISPLAY = 2; | 
|  | }; | 
|  |  | 
|  | /// Different types required by the Security Manager for pairing methods. | 
|  | /// Bluetooth SIG has different requirements for different device capabilities. | 
|  | enum PairingMethod { | 
|  | /// The user is asked to accept or reject pairing. | 
|  | CONSENT = 1; | 
|  |  | 
|  | /// The user is shown a 6-digit numerical passkey which they must enter on the | 
|  | /// peer device. | 
|  | PASSKEY_DISPLAY = 2; | 
|  |  | 
|  | /// The user is shown a 6-digit numerical passkey which will also shown on the | 
|  | /// peer device. The user must compare the passkeys and accept the pairing if | 
|  | /// the passkeys match. | 
|  | PASSKEY_COMPARISON = 3; | 
|  |  | 
|  | /// The user is asked to enter a 6-digit passkey. | 
|  | PASSKEY_ENTRY = 4; | 
|  | }; | 
|  |  | 
|  | enum PairingKeypress { | 
|  | /// The user has entered a single digit. | 
|  | DIGIT_ENTERED = 1; | 
|  |  | 
|  | /// The user has erased a single digit. | 
|  | DIGIT_ERASED = 2; | 
|  |  | 
|  | /// The user has cleared the entire passkey. | 
|  | PASSKEY_CLEARED = 3; | 
|  |  | 
|  | /// The user has finished entering the passkey. | 
|  | PASSKEY_ENTERED = 4; | 
|  | }; | 
|  |  | 
|  | protocol PairingDelegate { | 
|  | /// Called to initiate a pairing request. The delegate must respond with "true" or "false" to | 
|  | /// either accept or reject the pairing request. If the pairing method requires a passkey | 
|  | /// this is returned as well. | 
|  | /// | 
|  | /// Any response from this method will be ignored if the OnPairingComplete | 
|  | /// event has already been sent for `peer`. | 
|  | /// | 
|  | /// The `displayed_passkey` parameter should be displayed to the user if `method` equals | 
|  | /// `PairingMethod.PASSKEY_DISPLAY` or `PairingMethod.PASSKEY_COMPARISON`. Otherwise, this parameter | 
|  | /// has no meaning and should be ignored. | 
|  | /// | 
|  | /// The `entered_passkey` parameter only has meaning if `method` equals | 
|  | /// `PairingMethod.PASSKEY_ENTRY`. It will be ignored otherwise. | 
|  | OnPairingRequest(Peer peer, PairingMethod method, uint32 displayed_passkey) | 
|  | -> (bool accept, uint32 entered_passkey); | 
|  |  | 
|  | /// Called if the pairing procedure for the device with the given ID is completed. | 
|  | /// This can be due to successful completion or an error (e.g. due to cancellation | 
|  | /// by the peer, a timeout, or disconnection) which is indicated by `success`. | 
|  | OnPairingComplete(bt.PeerId id, bool success); | 
|  |  | 
|  | /// Called to notify keypresses from the peer device during pairing using | 
|  | /// `PairingMethod.PASSKEY_DISPLAY`. | 
|  | /// | 
|  | /// 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 key-press. | 
|  | OnRemoteKeypress(bt.PeerId id, PairingKeypress keypress); | 
|  |  | 
|  | /// The delegate can send this event to notify the peer of local keypresses | 
|  | /// during pairing using `PairingMethod.PASSKEY_ENTRY`. | 
|  | -> OnLocalKeypress(bt.PeerId id, PairingKeypress keypress); | 
|  | }; |